Class: Mixpanel::Flags::RemoteFlagsProvider
- Inherits:
-
FlagsProvider
- Object
- FlagsProvider
- Mixpanel::Flags::RemoteFlagsProvider
- Defined in:
- lib/mixpanel-ruby/flags/remote_flags_provider.rb
Overview
Remote feature flags provider Evaluates flags on the server-side via HTTP API calls
Constant Summary collapse
- DEFAULT_CONFIG =
{ api_host: 'api.mixpanel.com', request_timeout_in_seconds: 10 }.freeze
Instance Method Summary collapse
-
#get_all_variants(context) ⇒ Hash?
Get all variants for user context Exposure events NOT tracked automatically.
-
#get_variant(flag_key, fallback_variant, context, report_exposure: true) ⇒ SelectedVariant
Get complete variant information.
-
#get_variant_value(flag_key, fallback_value, context, report_exposure: true) ⇒ Object
Get variant value for a flag.
-
#initialize(token, config, tracker_callback, error_handler, credentials = nil) ⇒ RemoteFlagsProvider
constructor
A new instance of RemoteFlagsProvider.
-
#is_enabled?(flag_key, context) ⇒ Boolean
Check if flag is enabled (for boolean flags) This method is intended only for flags defined as Mixpanel Feature Gates (boolean flags) This checks that the variant value of a selected variant is concretely the boolean 'true' It does not coerce other truthy values.
Methods inherited from FlagsProvider
#call_flags_endpoint, #shutdown, #track_exposure_event
Constructor Details
#initialize(token, config, tracker_callback, error_handler, credentials = nil) ⇒ RemoteFlagsProvider
Returns a new instance of RemoteFlagsProvider.
18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/mixpanel-ruby/flags/remote_flags_provider.rb', line 18 def initialize(token, config, tracker_callback, error_handler, credentials = nil) merged_config = DEFAULT_CONFIG.merge(config || {}) provider_config = { token: token, api_host: merged_config[:api_host], request_timeout_in_seconds: merged_config[:request_timeout_in_seconds], credentials: credentials } super(provider_config, '/flags', tracker_callback, 'remote', error_handler) end |
Instance Method Details
#get_all_variants(context) ⇒ Hash?
Get all variants for user context Exposure events NOT tracked automatically
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/mixpanel-ruby/flags/remote_flags_provider.rb', line 100 def get_all_variants(context) response = fetch_flags(context) variants = {} (response['flags'] || {}).each do |flag_key, variant_data| variants[flag_key] = SelectedVariant.new( variant_key: variant_data['variant_key'], variant_value: variant_data['variant_value'], experiment_id: variant_data['experiment_id'], is_experiment_active: variant_data['is_experiment_active'] ) end variants rescue MixpanelError => e @error_handler.handle(e) nil end |
#get_variant(flag_key, fallback_variant, context, report_exposure: true) ⇒ SelectedVariant
Get complete variant information
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/mixpanel-ruby/flags/remote_flags_provider.rb', line 56 def get_variant(flag_key, fallback_variant, context, report_exposure: true) start_time = Time.now response = fetch_flags(context, flag_key) latency_ms = ((Time.now - start_time) * 1000).to_i flags = response['flags'] || {} selected_variant_data = flags[flag_key] return fallback_variant unless selected_variant_data selected_variant = SelectedVariant.new( variant_key: selected_variant_data['variant_key'], variant_value: selected_variant_data['variant_value'], experiment_id: selected_variant_data['experiment_id'], is_experiment_active: selected_variant_data['is_experiment_active'] ) track_exposure_event(flag_key, selected_variant, context, latency_ms) if report_exposure return selected_variant rescue MixpanelError => e @error_handler.handle(e) return fallback_variant end |
#get_variant_value(flag_key, fallback_value, context, report_exposure: true) ⇒ Object
Get variant value for a flag
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/mixpanel-ruby/flags/remote_flags_provider.rb', line 37 def get_variant_value(flag_key, fallback_value, context, report_exposure: true) selected_variant = get_variant( flag_key, SelectedVariant.new(variant_value: fallback_value), context, report_exposure: report_exposure ) selected_variant.variant_value rescue MixpanelError => e @error_handler.handle(e) fallback_value end |
#is_enabled?(flag_key, context) ⇒ Boolean
Check if flag is enabled (for boolean flags) This method is intended only for flags defined as Mixpanel Feature Gates (boolean flags) This checks that the variant value of a selected variant is concretely the boolean 'true' It does not coerce other truthy values.
88 89 90 91 92 93 94 |
# File 'lib/mixpanel-ruby/flags/remote_flags_provider.rb', line 88 def is_enabled?(flag_key, context) value = get_variant_value(flag_key, false, context) value == true rescue MixpanelError => e @error_handler.handle(e) false end |