statsig 2.2.0 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3870c3be99d3f7295c21311a6e938599bbd0ebd260d4b2c2cb814b48d22bd7f4
4
- data.tar.gz: 618400ee2baa54a9e4bc18ee7e6e1a1cb017349a513919dd5f5e6caa380fb154
3
+ metadata.gz: 24c2882bd3f5fbf4aeaaac8889ec9eff344202c962b655ce5f638b0beb0d4118
4
+ data.tar.gz: fe2d3822d6ff0fea02710b5c2f07b7ba6ca900cc2b1abc52269b8b0a2e26f585
5
5
  SHA512:
6
- metadata.gz: 47fdd678ef31a026f84bf81a184b39fc171c4d35cb7fb9229ecc2ec835051645cd9ed7b4f6ec2c0bfb92c2b59fe6cd9e742afaff176b438192f6d7b8d07f7ceb
7
- data.tar.gz: 6db827709c35c1005a22dbf07e81f3ee8d6f316c89ba760beea2ba4adf2a35ae1d5ad2ea97604411733f61e4d167a6ebcbfa1e0dcef05986aacde37aab76dcf0
6
+ metadata.gz: 723cd162782fcad1dda2858102ea92a21c1b58989e6f8d7a399d64f5f0944bdc044fbfe1aa53110745b4a821779ea8b371963834db9e72e20af4c90f71ede860
7
+ data.tar.gz: 45c320a711d630d1b25e36094ba1f2007e287457609635dcd6d27ea3ab85e802a85517d62d926cd1108a0f453ba7dd39e4941ff6fea7ead4cdfac605365170ba
@@ -51,7 +51,8 @@ module Statsig
51
51
  eval_result = ConfigResult.new(
52
52
  name: config_name,
53
53
  disable_evaluation_details: true,
54
- disable_exposures: !include_exposures
54
+ disable_exposures: !include_exposures,
55
+ include_local_overrides: include_local_overrides
55
56
  )
56
57
  evaluator.eval_spec(config_name_str, user, config_spec, eval_result)
57
58
  else
@@ -73,6 +74,7 @@ module Statsig
73
74
  result[:value] = eval_result.json_value
74
75
  result[:group] = eval_result.rule_id
75
76
  result[:is_device_based] = id_type.is_a?(String) && id_type.downcase == Statsig::Const::STABLEID
77
+ result[:passed] = eval_result.gate_value
76
78
  else
77
79
  return nil
78
80
  end
data/lib/config_result.rb CHANGED
@@ -16,6 +16,8 @@ module Statsig
16
16
  attr_accessor :target_app_ids
17
17
  attr_accessor :disable_evaluation_details
18
18
  attr_accessor :disable_exposures
19
+ attr_accessor :config_version
20
+ attr_accessor :include_local_overrides
19
21
 
20
22
  def initialize(
21
23
  name:,
@@ -31,7 +33,9 @@ module Statsig
31
33
  id_type: nil,
32
34
  target_app_ids: nil,
33
35
  disable_evaluation_details: false,
34
- disable_exposures: false
36
+ disable_exposures: false,
37
+ config_version: nil,
38
+ include_local_overrides: true
35
39
  )
36
40
  @name = name
37
41
  @gate_value = gate_value
@@ -48,6 +52,8 @@ module Statsig
48
52
  @target_app_ids = target_app_ids
49
53
  @disable_evaluation_details = disable_evaluation_details
50
54
  @disable_exposures = disable_exposures
55
+ @config_version = config_version
56
+ @include_local_overrides = include_local_overrides
51
57
  end
52
58
 
53
59
  def self.from_user_persisted_values(config_name, user_persisted_values)
data/lib/evaluator.rb CHANGED
@@ -324,7 +324,11 @@ module Statsig
324
324
  def finalize_eval_result(config, end_result, did_pass:, rule:, is_nested: false)
325
325
  end_result.id_type = config[:idType]
326
326
  end_result.target_app_ids = config[:targetAppIDs]
327
- end_result.gate_value = did_pass ? rule[:returnValue] == true : config[:defaultValue] == true
327
+ end_result.gate_value = did_pass
328
+ if config[:entity] == Const::TYPE_FEATURE_GATE
329
+ end_result.gate_value = did_pass ? rule[:returnValue] == true : config[:defaultValue] == true
330
+ end
331
+ end_result.config_version = config[:version]
328
332
 
329
333
  if rule.nil?
330
334
  end_result.json_value = config[:defaultValue]
@@ -377,8 +381,15 @@ module Statsig
377
381
  until i >= rule[:conditions].length
378
382
  condition_hash = rule[:conditions][i]
379
383
  condition = @spec_store.get_condition(condition_hash)
380
- result = eval_condition(user, condition, end_result)
381
- pass = false if result != true
384
+
385
+ if condition.nil?
386
+ puts "[Statsig]: Warning - Condition with hash #{condition_hash} could not be found."
387
+ pass = false
388
+ else
389
+ result = eval_condition(user, condition, end_result)
390
+ pass = false if result != true
391
+ end
392
+
382
393
  i += 1
383
394
  end
384
395
 
@@ -580,7 +591,8 @@ module Statsig
580
591
  end
581
592
 
582
593
  def eval_nested_gate(gate_name, user, end_result)
583
- check_gate(user, gate_name, end_result, is_nested: true)
594
+ check_gate(user, gate_name, end_result, is_nested: true,
595
+ ignore_local_overrides: !end_result.include_local_overrides)
584
596
  gate_value = end_result.gate_value
585
597
 
586
598
  unless end_result.disable_exposures
@@ -691,7 +703,7 @@ module Statsig
691
703
  pass_percentage = rule[:passPercentage]
692
704
  return true if pass_percentage == 100.0
693
705
  return false if pass_percentage == 0.0
694
-
706
+
695
707
  unit_id = user.get_unit_id(rule[:idType]) || Const::EMPTY_STR
696
708
  rule_salt = rule[:salt] || rule[:id] || Const::EMPTY_STR
697
709
  hash = compute_user_hash("#{config_salt}.#{rule_salt}.#{unit_id}")
data/lib/statsig.rb CHANGED
@@ -370,7 +370,7 @@ module Statsig
370
370
  def self.get_statsig_metadata
371
371
  {
372
372
  'sdkType' => 'ruby-server',
373
- 'sdkVersion' => '2.2.0',
373
+ 'sdkVersion' => '2.2.2',
374
374
  'languageVersion' => RUBY_VERSION
375
375
  }
376
376
  end
@@ -72,9 +72,7 @@ class StatsigDriver
72
72
  @evaluator.check_gate(user, gate_name, res, ignore_local_overrides: ignore_local_overrides)
73
73
 
74
74
  unless disable_log_exposure
75
- @logger.log_gate_exposure(
76
- user, res.name, res.gate_value, res.rule_id, res.secondary_exposures, res.evaluation_details
77
- )
75
+ @logger.log_gate_exposure(user, res)
78
76
  end
79
77
 
80
78
  FeatureGate.from_config_result(res)
@@ -113,7 +111,7 @@ class StatsigDriver
113
111
  res = Statsig::ConfigResult.new(name: gate_name)
114
112
  @evaluator.check_gate(user, gate_name, res)
115
113
  context = { :is_manual_exposure => true }
116
- @logger.log_gate_exposure(user, gate_name, res.gate_value, res.rule_id, res.secondary_exposures, res.evaluation_details, context)
114
+ @logger.log_gate_exposure(user, res, context)
117
115
  end
118
116
  end
119
117
 
@@ -154,7 +152,7 @@ class StatsigDriver
154
152
  @evaluator.get_config(user, config_name, res)
155
153
 
156
154
  context = { :is_manual_exposure => true }
157
- @logger.log_config_exposure(user, res.name, res.rule_id, res.secondary_exposures, res.evaluation_details, context)
155
+ @logger.log_config_exposure(user, res, context)
158
156
  end
159
157
  end
160
158
 
@@ -385,7 +383,7 @@ class StatsigDriver
385
383
  @evaluator.get_config(user, config_name, res, user_persisted_values: user_persisted_values, ignore_local_overrides: ignore_local_overrides)
386
384
 
387
385
  unless disable_log_exposure
388
- @logger.log_config_exposure(user, res.name, res.rule_id, res.secondary_exposures, res.evaluation_details)
386
+ @logger.log_config_exposure(user, res)
389
387
  end
390
388
 
391
389
  DynamicConfig.new(res.name, res.json_value, res.rule_id, res.group_name, res.id_type, res.evaluation_details)
@@ -38,42 +38,49 @@ module Statsig
38
38
  end
39
39
  end
40
40
 
41
- def log_gate_exposure(user, gate_name, value, rule_id, secondary_exposures, eval_details, context = nil)
41
+ def log_gate_exposure(user, result, context = nil)
42
42
  event = StatsigEvent.new($gate_exposure_event)
43
43
  event.user = user
44
44
  metadata = {
45
- gate: gate_name,
46
- gateValue: value.to_s,
47
- ruleID: rule_id || Statsig::Const::EMPTY_STR,
45
+ gate: result.name,
46
+ gateValue: result.gate_value.to_s,
47
+ ruleID: result.rule_id || Statsig::Const::EMPTY_STR,
48
48
  }
49
+ if result.config_version != nil
50
+ metadata[:configVersion] = result.config_version.to_s
51
+ end
49
52
  if @debug_info != nil
50
53
  metadata[:debugInfo] = @debug_info
51
54
  end
52
55
  return false if not is_unique_exposure(user, $gate_exposure_event, metadata)
53
56
  event.metadata = metadata
54
57
 
55
- event.secondary_exposures = secondary_exposures.is_a?(Array) ? secondary_exposures : []
58
+ event.secondary_exposures = result.secondary_exposures.is_a?(Array) ? result.secondary_exposures : []
56
59
 
57
- safe_add_eval_details(eval_details, event)
60
+ safe_add_eval_details(result.evaluation_details, event)
58
61
  safe_add_exposure_context(context, event)
59
62
  log_event(event)
60
63
  end
61
64
 
62
- def log_config_exposure(user, config_name, rule_id, secondary_exposures, eval_details, context = nil)
65
+ def log_config_exposure(user, result, context = nil)
63
66
  event = StatsigEvent.new($config_exposure_event)
64
67
  event.user = user
65
68
  metadata = {
66
- config: config_name,
67
- ruleID: rule_id || Statsig::Const::EMPTY_STR,
69
+ config: result.name,
70
+ ruleID: result.rule_id || Statsig::Const::EMPTY_STR,
71
+ rulePassed: result.gate_value.to_s,
68
72
  }
73
+ if result.config_version != nil
74
+ metadata[:configVersion] = result.config_version.to_s
75
+ end
69
76
  if @debug_info != nil
70
77
  metadata[:debugInfo] = @debug_info
71
78
  end
72
79
  return false if not is_unique_exposure(user, $config_exposure_event, metadata)
73
80
  event.metadata = metadata
74
- event.secondary_exposures = secondary_exposures.is_a?(Array) ? secondary_exposures : []
81
+ event.secondary_exposures = result.secondary_exposures.is_a?(Array) ? result.secondary_exposures : []
75
82
 
76
- safe_add_eval_details(eval_details, event)
83
+ safe_add_eval_details(result.evaluation_details, event)
77
84
  safe_add_exposure_context(context, event)
78
85
  log_event(event)
79
86
  end
@@ -96,6 +103,9 @@ module Statsig
96
103
  parameterName: parameter_name,
97
104
  isExplicitParameter: String(is_explicit)
98
105
  }
106
+ if config_evaluation.config_version != nil
107
+ metadata[:configVersion] = config_evaluation.config_version.to_s
108
+ end
99
109
  if @debug_info != nil
100
110
  metadata[:debugInfo] = @debug_info
101
111
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: statsig
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Statsig, Inc
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-11 00:00:00.000000000 Z
11
+ date: 2025-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -354,7 +354,7 @@ homepage: https://rubygems.org/gems/statsig
354
354
  licenses:
355
355
  - ISC
356
356
  metadata: {}
357
- post_install_message:
357
+ post_install_message:
358
358
  rdoc_options: []
359
359
  require_paths:
360
360
  - lib
@@ -370,7 +370,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
370
370
  version: '0'
371
371
  requirements: []
372
372
  rubygems_version: 3.2.33
373
- signing_key:
373
+ signing_key:
374
374
  specification_version: 4
375
375
  summary: Statsig server SDK for Ruby
376
376
  test_files: []