statsig 2.6.0 → 2.7.1
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/api_config.rb +1 -1
- data/lib/client_initialize_helpers.rb +1 -2
- data/lib/error_boundary.rb +1 -1
- data/lib/evaluator.rb +10 -10
- data/lib/hash_utils.rb +1 -1
- data/lib/network.rb +1 -2
- data/lib/spec_store.rb +5 -5
- data/lib/statsig.rb +23 -4
- data/lib/statsig_driver.rb +44 -16
- data/lib/statsig_logger.rb +4 -4
- data/lib/statsig_user.rb +1 -1
- data/lib/user_persistent_storage_utils.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: da5438e7812517334d930d0197e5549a56e0c6e578aa9e33a07f2c6b9ef1804e
|
|
4
|
+
data.tar.gz: 47e783b6c2ef006c60842d6c22fb404495089da097ace1188de984e432be2554
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0055f81028a6b254721bcdeab44140df4e701ee5e4cf393687b821c749b56eb6df5a5a0d6f9ee16edb8ddfe37805207198441c55d1b5717874c5514572ed04a8
|
|
7
|
+
data.tar.gz: 43a92f8184f5a04c0018cdcce8c5182602b06fb723d29697108f6621e57c1b53df6ea51e357edf72a879be4e0d53b3fdfaa0e94fc5719ec0a5208f0cde8f9f9a
|
data/lib/api_config.rb
CHANGED
data/lib/error_boundary.rb
CHANGED
data/lib/evaluator.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
require 'config_result'
|
|
2
1
|
require 'country_lookup'
|
|
3
2
|
require 'digest'
|
|
4
|
-
require 'evaluation_helpers'
|
|
5
|
-
require 'client_initialize_helpers'
|
|
6
|
-
require 'spec_store'
|
|
7
3
|
require 'time'
|
|
8
|
-
require 'ua_parser'
|
|
9
|
-
require 'evaluation_details'
|
|
10
4
|
require 'user_agent_parser/operating_system'
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
require_relative 'client_initialize_helpers'
|
|
6
|
+
require_relative 'config_result'
|
|
7
|
+
require_relative 'constants'
|
|
8
|
+
require_relative 'evaluation_details'
|
|
9
|
+
require_relative 'evaluation_helpers'
|
|
10
|
+
require_relative 'spec_store'
|
|
11
|
+
require_relative 'ua_parser'
|
|
12
|
+
require_relative 'user_persistent_storage_utils'
|
|
13
13
|
|
|
14
14
|
module Statsig
|
|
15
15
|
class Evaluator
|
|
@@ -549,7 +549,7 @@ module Statsig
|
|
|
549
549
|
value: rule[:returnValue],
|
|
550
550
|
group_name: rule[:groupName],
|
|
551
551
|
rule_id: rule[:id],
|
|
552
|
-
evaluation_details: EvaluationDetails.local_override(@
|
|
552
|
+
evaluation_details: EvaluationDetails.local_override(@spec_store.last_config_sync_time, @spec_store.initial_config_sync_time)
|
|
553
553
|
}
|
|
554
554
|
return
|
|
555
555
|
end
|
|
@@ -560,7 +560,7 @@ module Statsig
|
|
|
560
560
|
value: {},
|
|
561
561
|
group_name: group_name,
|
|
562
562
|
rule_id: "#{experiment_name}:override",
|
|
563
|
-
evaluation_details: EvaluationDetails.local_override(@
|
|
563
|
+
evaluation_details: EvaluationDetails.local_override(@spec_store.last_config_sync_time, @spec_store.initial_config_sync_time)
|
|
564
564
|
}
|
|
565
565
|
end
|
|
566
566
|
|
data/lib/hash_utils.rb
CHANGED
data/lib/network.rb
CHANGED
data/lib/spec_store.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
require 'concurrent-ruby'
|
|
1
2
|
require 'net/http'
|
|
2
3
|
require 'uri'
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
require 'api_config'
|
|
4
|
+
require_relative 'api_config'
|
|
5
|
+
require_relative 'evaluation_details'
|
|
6
|
+
require_relative 'hash_utils'
|
|
7
|
+
require_relative 'id_list'
|
|
8
8
|
|
|
9
9
|
module Statsig
|
|
10
10
|
class SpecStore
|
data/lib/statsig.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require 'statsig_errors'
|
|
1
|
+
require_relative 'statsig_driver'
|
|
2
|
+
require_relative 'statsig_errors'
|
|
4
3
|
|
|
5
4
|
module Statsig
|
|
6
5
|
|
|
@@ -92,6 +91,11 @@ module Statsig
|
|
|
92
91
|
@shared_instance&.manually_log_gate_exposure(user, gate_name)
|
|
93
92
|
end
|
|
94
93
|
|
|
94
|
+
def self.get_fields_used_for_gate(gate_name)
|
|
95
|
+
ensure_initialized
|
|
96
|
+
@shared_instance&.get_fields_used_for_gate(gate_name)
|
|
97
|
+
end
|
|
98
|
+
|
|
95
99
|
class GetConfigOptions
|
|
96
100
|
attr_accessor :disable_log_exposure, :disable_evaluation_details, :ignore_local_overrides
|
|
97
101
|
|
|
@@ -136,6 +140,11 @@ module Statsig
|
|
|
136
140
|
@shared_instance&.manually_log_config_exposure(user, dynamic_config)
|
|
137
141
|
end
|
|
138
142
|
|
|
143
|
+
def self.get_fields_used_for_config(config_name)
|
|
144
|
+
ensure_initialized
|
|
145
|
+
@shared_instance&.get_fields_used_for_config(config_name)
|
|
146
|
+
end
|
|
147
|
+
|
|
139
148
|
class GetExperimentOptions
|
|
140
149
|
attr_accessor :disable_log_exposure, :user_persisted_values, :disable_evaluation_details, :ignore_local_overrides
|
|
141
150
|
|
|
@@ -184,6 +193,11 @@ module Statsig
|
|
|
184
193
|
@shared_instance&.get_user_persisted_values(user, id_type)
|
|
185
194
|
end
|
|
186
195
|
|
|
196
|
+
def self.get_fields_used_for_experiment(experiment_name)
|
|
197
|
+
ensure_initialized
|
|
198
|
+
@shared_instance&.get_fields_used_for_config(experiment_name)
|
|
199
|
+
end
|
|
200
|
+
|
|
187
201
|
class GetLayerOptions
|
|
188
202
|
attr_accessor :disable_log_exposure, :disable_evaluation_details
|
|
189
203
|
|
|
@@ -227,6 +241,11 @@ module Statsig
|
|
|
227
241
|
@shared_instance&.manually_log_layer_parameter_exposure(user, layer_name, parameter_name)
|
|
228
242
|
end
|
|
229
243
|
|
|
244
|
+
def self.get_fields_used_for_layer(layer_name)
|
|
245
|
+
ensure_initialized
|
|
246
|
+
@shared_instance&.get_fields_used_for_layer(layer_name)
|
|
247
|
+
end
|
|
248
|
+
|
|
230
249
|
##
|
|
231
250
|
# Logs an event to Statsig with the provided values.
|
|
232
251
|
#
|
|
@@ -386,7 +405,7 @@ module Statsig
|
|
|
386
405
|
def self.get_statsig_metadata
|
|
387
406
|
{
|
|
388
407
|
'sdkType' => 'ruby-server',
|
|
389
|
-
'sdkVersion' => '2.
|
|
408
|
+
'sdkVersion' => '2.7.1',
|
|
390
409
|
'languageVersion' => RUBY_VERSION
|
|
391
410
|
}
|
|
392
411
|
end
|
data/lib/statsig_driver.rb
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
require_relative 'api_config'
|
|
2
|
+
require_relative 'config_result'
|
|
3
|
+
require_relative 'diagnostics'
|
|
4
|
+
require_relative 'dynamic_config'
|
|
5
|
+
require_relative 'error_boundary'
|
|
6
|
+
require_relative 'evaluator'
|
|
7
|
+
require_relative 'feature_gate'
|
|
8
|
+
require_relative 'layer'
|
|
9
|
+
require_relative 'memo'
|
|
10
|
+
require_relative 'network'
|
|
11
|
+
require_relative 'sdk_configs'
|
|
12
|
+
require_relative 'spec_store'
|
|
13
|
+
require_relative 'statsig_errors'
|
|
14
|
+
require_relative 'statsig_event'
|
|
15
|
+
require_relative 'statsig_logger'
|
|
16
|
+
require_relative 'statsig_options'
|
|
17
|
+
require_relative 'statsig_user'
|
|
17
18
|
|
|
18
19
|
class StatsigDriver
|
|
19
20
|
|
|
@@ -117,6 +118,15 @@ class StatsigDriver
|
|
|
117
118
|
end
|
|
118
119
|
end
|
|
119
120
|
|
|
121
|
+
def get_fields_used_for_gate(gate_name)
|
|
122
|
+
@err_boundary.capture(caller: __method__, recover: -> { [] }) do
|
|
123
|
+
gate = @store.get_gate(gate_name)
|
|
124
|
+
return [] if gate.nil?
|
|
125
|
+
|
|
126
|
+
gate[:fieldsUsed] || []
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
120
130
|
def get_config(user, dynamic_config_name, options = nil)
|
|
121
131
|
@err_boundary.capture(caller: __method__, recover: -> { DynamicConfig.new(dynamic_config_name) }) do
|
|
122
132
|
run_with_diagnostics(caller: :get_config) do
|
|
@@ -132,6 +142,15 @@ class StatsigDriver
|
|
|
132
142
|
end
|
|
133
143
|
end
|
|
134
144
|
|
|
145
|
+
def get_fields_used_for_config(config_name)
|
|
146
|
+
@err_boundary.capture(caller: __method__, recover: -> { [] }) do
|
|
147
|
+
config = @store.get_config(config_name)
|
|
148
|
+
return [] if config.nil?
|
|
149
|
+
|
|
150
|
+
config[:fieldsUsed] || []
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
135
154
|
def get_experiment(user, experiment_name, options = nil)
|
|
136
155
|
@err_boundary.capture(caller: __method__, recover: -> { DynamicConfig.new(experiment_name) }) do
|
|
137
156
|
run_with_diagnostics(caller: :get_experiment) do
|
|
@@ -201,6 +220,15 @@ class StatsigDriver
|
|
|
201
220
|
end
|
|
202
221
|
end
|
|
203
222
|
|
|
223
|
+
def get_fields_used_for_layer(layer_name)
|
|
224
|
+
@err_boundary.capture(caller: __method__, recover: -> { [] }) do
|
|
225
|
+
layer = @store.get_layer(layer_name)
|
|
226
|
+
return [] if layer.nil?
|
|
227
|
+
|
|
228
|
+
layer[:fieldsUsed] || []
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
|
|
204
232
|
def log_event(user, event_name, value = nil, metadata = nil)
|
|
205
233
|
@err_boundary.capture(caller: __method__) do
|
|
206
234
|
if !user.nil? && !user.instance_of?(StatsigUser)
|
data/lib/statsig_logger.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
require 'constants'
|
|
2
|
-
require 'statsig_event'
|
|
3
|
-
require 'ttl_set'
|
|
4
1
|
require 'concurrent-ruby'
|
|
5
|
-
|
|
2
|
+
require_relative 'constants'
|
|
3
|
+
require_relative 'hash_utils'
|
|
4
|
+
require_relative 'statsig_event'
|
|
5
|
+
require_relative 'ttl_set'
|
|
6
6
|
|
|
7
7
|
$gate_exposure_event = 'statsig::gate_exposure'
|
|
8
8
|
$config_exposure_event = 'statsig::config_exposure'
|
data/lib/statsig_user.rb
CHANGED
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.
|
|
4
|
+
version: 2.7.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Statsig, Inc
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-10-
|
|
11
|
+
date: 2025-10-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|