Class: ABMeter::ResolverProvider

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config:, api_client: nil) ⇒ ResolverProvider

Returns a new instance of ResolverProvider.



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/abmeter/resolver_provider.rb', line 5

def initialize(config:, api_client: nil)
  raise 'Either api_key or static_config must be provided' unless config.api_key || config.static_config

  @api_client = api_client
  @json_config = config.static_config
  @fetch_interval = config.fetch_interval

  @resolver = nil
  @last_fetched_at = nil

  # Build resolver immediately if using JSON config
  @resolver = ABMeter::Core.build_resolver_from_json(@json_config) if @json_config
end

Instance Attribute Details

#last_fetched_atObject (readonly)

Returns the value of attribute last_fetched_at.



3
4
5
# File 'lib/abmeter/resolver_provider.rb', line 3

def last_fetched_at
  @last_fetched_at
end

Instance Method Details

#get_exposure(user:, parameter_slug:) ⇒ Object



35
36
37
# File 'lib/abmeter/resolver_provider.rb', line 35

def get_exposure(user:, parameter_slug:)
  resolver.exposure_for(user: user, parameter_slug: parameter_slug)
end

#resolve_parameter(user:, parameter_slug:) ⇒ Object



26
27
28
29
30
31
32
33
# File 'lib/abmeter/resolver_provider.rb', line 26

def resolve_parameter(user:, parameter_slug:)
  exposure = resolver.exposure_for(user: user, parameter_slug: parameter_slug)

  # Queue the exposure for later submission (only in API mode)
  queue_exposure(exposure) if @api_client && exposure[:exposable_id]

  exposure[:resolved_value]
end

#resolverObject



19
20
21
22
23
24
# File 'lib/abmeter/resolver_provider.rb', line 19

def resolver
  refresh_config_if_needed unless @json_config
  raise 'Configuration not loaded' unless @resolver

  @resolver
end