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 +4 -4
- data/lib/client_initialize_helpers.rb +3 -1
- data/lib/config_result.rb +7 -1
- data/lib/evaluator.rb +17 -5
- data/lib/statsig.rb +1 -1
- data/lib/statsig_driver.rb +4 -6
- data/lib/statsig_logger.rb +21 -11
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24c2882bd3f5fbf4aeaaac8889ec9eff344202c962b655ce5f638b0beb0d4118
|
4
|
+
data.tar.gz: fe2d3822d6ff0fea02710b5c2f07b7ba6ca900cc2b1abc52269b8b0a2e26f585
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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
|
-
|
381
|
-
|
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
data/lib/statsig_driver.rb
CHANGED
@@ -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,
|
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
|
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
|
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)
|
data/lib/statsig_logger.rb
CHANGED
@@ -38,42 +38,49 @@ module Statsig
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
def log_gate_exposure(user,
|
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:
|
46
|
-
gateValue:
|
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(
|
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,
|
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:
|
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(
|
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.
|
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:
|
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: []
|