Class: ABMeter::Core::UserParameterResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/abmeter/core/user_parameter_resolver.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#configObject (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