Class: ABMeter::Core::UserParameterResolver
- Inherits:
-
Object
- Object
- ABMeter::Core::UserParameterResolver
- Defined in:
- lib/abmeter/core/user_parameter_resolver.rb
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
Instance Method Summary collapse
- #exposure_for(user:, parameter_slug:) ⇒ Object
-
#initialize(config:) ⇒ UserParameterResolver
constructor
A new instance of UserParameterResolver.
Constructor Details
#initialize(config:) ⇒ UserParameterResolver
Returns a new instance of UserParameterResolver.
8 9 10 |
# File 'lib/abmeter/core/user_parameter_resolver.rb', line 8 def initialize(config:) @config = config end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
6 7 8 |
# File 'lib/abmeter/core/user_parameter_resolver.rb', line 6 def config @config end |
Instance Method Details
#exposure_for(user:, parameter_slug:) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/abmeter/core/user_parameter_resolver.rb', line 12 def exposure_for(user:, parameter_slug:) validate_user!(user) # Find parameter once, upfront parameter = @config.parameters.find { |p| p.slug == parameter_slug } raise "Parameter '#{parameter_slug}' not found" unless parameter # First check feature flags that control this parameter feature_flag = find_matching_feature_flag(user, parameter_slug) return feature_flag.expose_parameter(user, parameter) if feature_flag # Then check experiments that control this parameter experiment_result = find_matching_experiment_variant(user, parameter_slug) if experiment_result variant, experiment, audience = experiment_result return experiment.expose_parameter(user, parameter, variant, audience) end { parameter_id: parameter.id, space_id: parameter.space_id, resolved_value: parameter.default_value, user_id: nil, exposable_type: nil, exposable_id: nil, audience_id: nil, resolved_at: Time.now } end |