class StatsigDriver
Public Class Methods
new(secret_key, options = nil)
click to toggle source
Calls superclass method
# File lib/statsig_driver.rb, line 11 def initialize(secret_key, options = 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 = Network.new(secret_key, @options.api_url_base) @statsig_metadata = { 'sdkType' => 'ruby-server', 'sdkVersion' => Gem::Specification::load('statsig.gemspec')&.version, } @logger = StatsigLogger.new(@net, @statsig_metadata) downloaded_specs = @net.download_config_specs unless downloaded_specs.nil? @initialized = true end @store = SpecStore.new(downloaded_specs) @evaluator = Evaluator.new(@store) @polling_thread = @net.poll_for_changes(-> (config_specs) { @store.process(config_specs) }) end
Public Instance Methods
check_gate(user, gate_name)
click to toggle source
# File lib/statsig_driver.rb, line 41 def check_gate(user, gate_name) validate_user(user) user = normalize_user(user) if !gate_name.is_a?(String) || gate_name.empty? raise 'Invalid gate_name provided' end check_shutdown unless @initialized return false end res = @evaluator.check_gate(user, gate_name) if res.nil? res = 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) end res.gate_value end
get_config(user, dynamic_config_name)
click to toggle source
# File lib/statsig_driver.rb, line 67 def get_config(user, dynamic_config_name) validate_user(user) user = normalize_user(user) if !dynamic_config_name.is_a?(String) || dynamic_config_name.empty? raise "Invalid dynamic_config_name provided" end check_shutdown unless @initialized return DynamicConfig.new(dynamic_config_name) end res = @evaluator.get_config(user, dynamic_config_name) if res.nil? res = ConfigResult.new(dynamic_config_name) end if res == $fetch_from_server res = get_config_fallback(user, dynamic_config_name) # exposure logged by the server else @logger.log_config_exposure(user, res.name, res.rule_id) end DynamicConfig.new(res.name, res.json_value, res.rule_id) end
log_event(user, event_name, value = nil, metadata = nil)
click to toggle source
# File lib/statsig_driver.rb, line 93 def log_event(user, event_name, value = nil, metadata = 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.metadata = metadata event.statsig_metadata = @statsig_metadata @logger.log_event(event) end
shutdown()
click to toggle source
# File lib/statsig_driver.rb, line 109 def shutdown @shutdown = true @logger.flush(true) @polling_thread&.exit end
Private Instance Methods
check_gate_fallback(user, gate_name)
click to toggle source
# File lib/statsig_driver.rb, line 136 def check_gate_fallback(user, gate_name) network_result = @net.check_gate(user, gate_name) if network_result.nil? config_result = ConfigResult.new(gate_name) return config_result end ConfigResult.new( network_result['name'], network_result['value'], {}, network_result['rule_id'], ) end
check_shutdown()
click to toggle source
# File lib/statsig_driver.rb, line 130 def check_shutdown if @shutdown puts 'SDK has been shutdown. Updates in the Statsig Console will no longer reflect.' end end
get_config_fallback(user, dynamic_config_name)
click to toggle source
# File lib/statsig_driver.rb, line 151 def get_config_fallback(user, dynamic_config_name) network_result = @net.get_config(user, dynamic_config_name) if network_result.nil? config_result = ConfigResult.new(dynamic_config_name) return config_result end ConfigResult.new( network_result['name'], false, network_result['value'], network_result['rule_id'], ) end
normalize_user(user)
click to toggle source
# File lib/statsig_driver.rb, line 123 def normalize_user(user) if !@options&.environment.nil? user.statsig_environment = @options.environment end user end
validate_user(user)
click to toggle source
# File lib/statsig_driver.rb, line 117 def validate_user(user) if user.nil? || !user.instance_of?(StatsigUser) || !user.user_id.is_a?(String) raise 'Must provide a valid StatsigUser with a user_id to use the server SDK. See https://docs.statsig.com/messages/serverRequiredUserID/ for more details.' end end