Class: StatsigDriver

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

Instance Method Summary collapse

Constructor Details

#initialize(secret_key, options = nil, error_callback = nil) ⇒ StatsigDriver

Returns a new instance of StatsigDriver.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/statsig_driver.rb', line 13

def initialize(secret_key, options = nil, error_callback = nil)
  super()
  if !secret_key.is_a?(String) || !secret_key.start_with?('secret-')
    raise 'Invalid secret key provided. Provide your project secret key from the Statsig console'
  end
  if !options.nil? && !options.instance_of?(StatsigOptions)
    raise 'Invalid options provided. Either provide a valid StatsigOptions object or nil'
  end

  @options = options || StatsigOptions.new
  @shutdown = false
  @secret_key = secret_key
  @net = Statsig::Network.new(secret_key, @options.api_url_base, @options.local_mode)
  @logger = Statsig::StatsigLogger.new(@net, @options)
  @evaluator = Statsig::Evaluator.new(@net, @options, error_callback)
end

Instance Method Details

#check_gate(user, gate_name) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/statsig_driver.rb', line 30

def check_gate(user, gate_name)
  user = verify_inputs(user, gate_name, "gate_name")

  res = @evaluator.check_gate(user, gate_name)
  if res.nil?
    res = Statsig::ConfigResult.new(gate_name)
  end

  if res == $fetch_from_server
    res = check_gate_fallback(user, gate_name)
    # exposure logged by the server
  else
    @logger.log_gate_exposure(user, res.name, res.gate_value, res.rule_id, res.secondary_exposures, res.evaluation_details)
  end

  res.gate_value
end

#get_client_initialize_response(user) ⇒ Hash

Parameters:

Returns:

  • (Hash)


111
112
113
114
# File 'lib/statsig_driver.rb', line 111

def get_client_initialize_response(user)
  normalize_user(user)
  @evaluator.get_client_initialize_response(user)
end

#get_config(user, dynamic_config_name) ⇒ Object



48
49
50
51
# File 'lib/statsig_driver.rb', line 48

def get_config(user, dynamic_config_name)
  user = verify_inputs(user, dynamic_config_name, "dynamic_config_name")
  get_config_impl(user, dynamic_config_name)
end

#get_experiment(user, experiment_name) ⇒ Object



53
54
55
56
# File 'lib/statsig_driver.rb', line 53

def get_experiment(user, experiment_name)
  user = verify_inputs(user, experiment_name, "experiment_name")
  get_config_impl(user, experiment_name)
end

#get_layer(user, layer_name) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/statsig_driver.rb', line 58

def get_layer(user, layer_name)
  user = verify_inputs(user, layer_name, "layer_name")

  res = @evaluator.get_layer(user, layer_name)
  if res.nil?
    res = Statsig::ConfigResult.new(layer_name)
  end

  if res == $fetch_from_server
    if res.config_delegate.empty?
      return Layer.new(layer_name)
    end
    res = get_config_fallback(user, res.config_delegate)
    # exposure logged by the server
  end

  Layer.new(res.name, res.json_value, res.rule_id, lambda { |layer, parameter_name|
    @logger.log_layer_exposure(user, layer, parameter_name, res)
  })
end

#log_event(user, event_name, value = nil, metadata = nil) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/statsig_driver.rb', line 79

def log_event(user, event_name, value = nil,  = nil)
  if !user.nil? && !user.instance_of?(StatsigUser)
    raise 'Must provide a valid StatsigUser or nil'
  end
  check_shutdown

  user = normalize_user(user)

  event = StatsigEvent.new(event_name)
  event.user = user
  event.value = value
  event. = 
  event. = Statsig.
  @logger.log_event(event)
end

#maybe_restart_background_threadsObject



116
117
118
# File 'lib/statsig_driver.rb', line 116

def maybe_restart_background_threads
  @evaluator.maybe_restart_background_threads
end

#override_config(config_name, config_value) ⇒ Object



105
106
107
# File 'lib/statsig_driver.rb', line 105

def override_config(config_name, config_value)
  @evaluator.override_config(config_name, config_value)
end

#override_gate(gate_name, gate_value) ⇒ Object



101
102
103
# File 'lib/statsig_driver.rb', line 101

def override_gate(gate_name, gate_value)
  @evaluator.override_gate(gate_name, gate_value)
end

#shutdownObject



95
96
97
98
99
# File 'lib/statsig_driver.rb', line 95

def shutdown
  @shutdown = true
  @logger.shutdown
  @evaluator.shutdown
end