Module: ABMeter

Extended by:
ErrorSafety
Defined in:
lib/abmeter.rb,
lib/abmeter/core.rb,
lib/abmeter/client.rb,
lib/abmeter/version.rb,
lib/abmeter/api_error.rb,
lib/abmeter/constants.rb,
lib/abmeter/core/user.rb,
lib/abmeter/error_safety.rb,
lib/abmeter/async_submitter.rb,
lib/abmeter/resolver_provider.rb,
lib/abmeter/core/protocol/type.rb,
lib/abmeter/core/utils/num_utils.rb,
lib/abmeter/core/assignment_config.rb,
lib/abmeter/core/assignment_config/space.rb,
lib/abmeter/core/user_parameter_resolver.rb,
lib/abmeter/core/assignment_config/variant.rb,
lib/abmeter/core/assignment_config/audience.rb,
lib/abmeter/core/assignment_config/exposable.rb,
lib/abmeter/core/assignment_config/parameter.rb,
lib/abmeter/core/assignment_config/experiment.rb,
lib/abmeter/core/assignment_config/feature_flag.rb

Defined Under Namespace

Modules: Core, ErrorSafety Classes: APIError, AsyncSubmitter, Client, Config, ResolverProvider

Constant Summary collapse

VERSION =
'0.2.4'.freeze
DEFAULT_BATCH_SIZE =
100
DEFAULT_FLUSH_INTERVAL =

seconds

60
DEFAULT_FETCH_INTERVAL =

seconds

60
DEFAULT_BASE_URL =
'https://abmeter.ai'
DEFAULT_MAX_SUBMIT_ATTEMPTS =
3
DEFAULT_MAX_RETRY_QUEUE_SIZE =
1000
DEFAULT_LOG_LEVEL =
:error

Class Method Summary collapse

Methods included from ErrorSafety

included

Class Method Details

.clientObject



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

def client
  unless @client
    raise 'ABMeter not configured or configured with "static" JSON. Call ABMeter.configure { |config| ... } first.'
  end

  @client
end

.configObject



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

def config
  raise 'ABMeter not configured. Call ABMeter.configure { |config| ... } first.' unless @config

  @config
end

.configure {|config| ... } ⇒ Object

Yields:



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/abmeter.rb', line 40

def configure
  config = Config.new
  config.base_url = DEFAULT_BASE_URL
  yield(config)
  config.validate!
  # Set logger level if both logger and log_level are configured
  config.send(:set_logger_level, config.log_level)
  @config = config

  if config.static_config
    # JSON-based configuration
    @resolver_provider = ResolverProvider.new(config: config)
  else
    # API-based configuration
    @client = Client.new(config)

    @resolver_provider = ResolverProvider.new(config: config, api_client: @client)

    # Configure and start async submitter
    AsyncSubmitter.configure(
      api_client: @client,
      config: config
    )
    AsyncSubmitter.start
  end
end

.get_exposure(user:, parameter_slug:) ⇒ Object

Only evaluates exposure with all details, including resolved value, without submitting it to the API Useful for testing/debugging



90
91
92
# File 'lib/abmeter.rb', line 90

def get_exposure(user:, parameter_slug:)
  resolver_provider.get_exposure(user: user, parameter_slug: parameter_slug)
end

.reset!Object



67
68
69
70
71
72
73
# File 'lib/abmeter.rb', line 67

def reset!
  AsyncSubmitter.shutdown

  @config = nil
  @client = nil
  @resolver_provider = nil
end

.resolve_parameter(user:, parameter_slug:) ⇒ Object

resolves paramater and submits parameter exposure to the API



83
84
85
# File 'lib/abmeter.rb', line 83

def resolve_parameter(user:, parameter_slug:)
  resolver_provider.resolve_parameter(user: user, parameter_slug: parameter_slug)
end

.resolver_providerObject



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

def resolver_provider
  raise 'ABMeter not configured. Call ABMeter.configure { |config| ... } first.' unless @resolver_provider

  @resolver_provider
end

.track_event(event_name, user_id, data) ⇒ Object



75
76
77
78
79
# File 'lib/abmeter.rb', line 75

def track_event(event_name, user_id, data)
  # Queue the event for background processing
  AsyncSubmitter.queue_event(event_name, user_id, data)
  nil
end