splitclient-rb 8.4.1.pre.rc1-java → 8.5.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.txt +4 -0
- data/LICENSE +1 -1
- data/lib/splitclient-rb/clients/split_client.rb +18 -20
- data/lib/splitclient-rb/engine/common/impressions_manager.rb +24 -27
- data/lib/splitclient-rb/engine/synchronizer.rb +4 -4
- data/lib/splitclient-rb/helpers/repository_helper.rb +7 -0
- data/lib/splitclient-rb/managers/split_manager.rb +2 -1
- data/lib/splitclient-rb/split_factory.rb +2 -13
- data/lib/splitclient-rb/version.rb +1 -1
- metadata +30 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 835ab35a58b3ae0aa8ea577dc648f441695c241574e5cb3d9860bfeae8eca0f2
|
4
|
+
data.tar.gz: f6000cd2a2e3764691c73efee56b22c7f0baa9a9b86c955e40a489fae18f151a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af8be0126a7f070f2a3cdaa99fb18d34c0fadbaac51a206ed77a4edfb468c913fc50c8d47ad6ee671fee2623507307101c0eaf18dff441d2266435cc906b57fc
|
7
|
+
data.tar.gz: 26d1d6dfbef54c5407ad71a8413e342ae62f6844bc099c402662658cd1870dd761a4b7a407feca8370e91187f4cedc868826828e86467cfe069ff0dabd341030
|
data/CHANGES.txt
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
CHANGES
|
2
2
|
|
3
|
+
8.5.0 (Jan 17, 2025)
|
4
|
+
- Fixed high cpu usage when unique keys are cleared every 24 hours.
|
5
|
+
- Added support for the new impressions tracking toggle available on feature flags, both respecting the setting and including the new field being returned on SplitView type objects. Read more in our docs.
|
6
|
+
|
3
7
|
8.4.0 (May 3, 2024)
|
4
8
|
- Fixed issue preventing Impressopns and Events posting if client.destroy is called before the post threads started
|
5
9
|
- Added support for targeting rules based on semantic versions (https://semver.org/).
|
data/LICENSE
CHANGED
@@ -267,7 +267,7 @@ module SplitIoClient
|
|
267
267
|
to_return = Hash.new
|
268
268
|
sanitized_feature_flag_names.each {|name|
|
269
269
|
to_return[name.to_sym] = control_treatment_with_config
|
270
|
-
impressions << @impressions_manager.build_impression(matching_key, bucketing_key, name.to_sym, control_treatment_with_config.merge({ label
|
270
|
+
impressions << { :impression => @impressions_manager.build_impression(matching_key, bucketing_key, name.to_sym, control_treatment_with_config.merge({ :label => Engine::Models::Label::NOT_READY }), false, { attributes: attributes, time: nil }), :disabled => false }
|
271
271
|
}
|
272
272
|
@impressions_manager.track(impressions)
|
273
273
|
return to_return
|
@@ -278,7 +278,6 @@ module SplitIoClient
|
|
278
278
|
valid_feature_flag_names << feature_flag_name unless feature_flag_name.nil?
|
279
279
|
}
|
280
280
|
start = Time.now
|
281
|
-
impressions_total = []
|
282
281
|
|
283
282
|
feature_flags = @splits_repository.splits(valid_feature_flag_names)
|
284
283
|
treatments = Hash.new
|
@@ -291,15 +290,14 @@ module SplitIoClient
|
|
291
290
|
next
|
292
291
|
end
|
293
292
|
treatments_labels_change_numbers, impressions = evaluate_treatment(feature_flag, key, bucketing_key, matching_key, attributes, calling_method)
|
294
|
-
impressions_total.concat(impressions) unless impressions.nil?
|
295
293
|
treatments[key] =
|
296
294
|
{
|
297
295
|
treatment: treatments_labels_change_numbers[:treatment],
|
298
296
|
config: treatments_labels_change_numbers[:config]
|
299
297
|
}
|
298
|
+
@impressions_manager.track(impressions) unless impressions.empty?
|
300
299
|
end
|
301
300
|
record_latency(calling_method, start)
|
302
|
-
@impressions_manager.track(impressions_total) unless impressions_total.empty?
|
303
301
|
|
304
302
|
treatments.merge(invalid_treatments)
|
305
303
|
end
|
@@ -332,50 +330,50 @@ module SplitIoClient
|
|
332
330
|
end
|
333
331
|
|
334
332
|
feature_flag = @splits_repository.get_split(feature_flag_name)
|
335
|
-
treatments,
|
333
|
+
treatments, impressions_decorator = evaluate_treatment(feature_flag, feature_flag_name, bucketing_key, matching_key, attributes, calling_method, multiple)
|
336
334
|
|
337
|
-
@impressions_manager.track(
|
335
|
+
@impressions_manager.track(impressions_decorator) unless impressions_decorator.nil?
|
338
336
|
treatments
|
339
337
|
end
|
340
338
|
|
341
339
|
def evaluate_treatment(feature_flag, feature_flag_name, bucketing_key, matching_key, attributes, calling_method, multiple = false)
|
342
|
-
|
340
|
+
impressions_decorator = []
|
343
341
|
begin
|
344
342
|
start = Time.now
|
345
343
|
if feature_flag.nil? && ready?
|
346
344
|
@config.logger.warn("#{calling_method}: you passed #{feature_flag_name} that " \
|
347
345
|
'does not exist in this environment, please double check what feature flags exist in the Split user interface')
|
348
|
-
return parsed_treatment(control_treatment.merge({ label
|
346
|
+
return parsed_treatment(control_treatment.merge({ :label => Engine::Models::Label::NOT_FOUND }), multiple), nil
|
349
347
|
end
|
350
|
-
|
348
|
+
|
351
349
|
if !feature_flag.nil? && ready?
|
352
|
-
@evaluator.evaluate_feature_flag(
|
350
|
+
treatment_data = @evaluator.evaluate_feature_flag(
|
353
351
|
{ bucketing_key: bucketing_key, matching_key: matching_key }, feature_flag, attributes
|
354
352
|
)
|
353
|
+
impressions_disabled = feature_flag[:impressionsDisabled]
|
355
354
|
else
|
356
355
|
@config.logger.error("#{calling_method}: the SDK is not ready, results may be incorrect for feature flag #{feature_flag_name}. Make sure to wait for SDK readiness before using this method.")
|
357
|
-
control_treatment.merge({ label
|
356
|
+
treatment_data = control_treatment.merge({ :label => Engine::Models::Label::NOT_READY })
|
357
|
+
impressions_disabled = false
|
358
358
|
end
|
359
359
|
|
360
360
|
record_latency(calling_method, start)
|
361
|
-
|
362
|
-
|
361
|
+
impression_decorator = { :impression => @impressions_manager.build_impression(matching_key, bucketing_key, feature_flag_name, treatment_data, impressions_disabled, { attributes: attributes, time: nil }), :disabled => impressions_disabled }
|
362
|
+
impressions_decorator << impression_decorator unless impression_decorator.nil?
|
363
363
|
rescue StandardError => e
|
364
364
|
@config.log_found_exception(__method__.to_s, e)
|
365
|
-
|
366
365
|
record_exception(calling_method)
|
366
|
+
impression_decorator = { :impression => @impressions_manager.build_impression(matching_key, bucketing_key, feature_flag_name, control_treatment, false, { attributes: attributes, time: nil }), :disabled => false }
|
367
|
+
impressions_decorator << impression_decorator unless impression_decorator.nil?
|
367
368
|
|
368
|
-
|
369
|
-
impressions << impression unless impression.nil?
|
370
|
-
|
371
|
-
return parsed_treatment(control_treatment.merge({ label: Engine::Models::Label::EXCEPTION }), multiple), impressions
|
369
|
+
return parsed_treatment(control_treatment.merge({ :label => Engine::Models::Label::EXCEPTION }), multiple), impressions_decorator
|
372
370
|
end
|
373
371
|
|
374
|
-
return parsed_treatment(treatment_data, multiple),
|
372
|
+
return parsed_treatment(treatment_data, multiple), impressions_decorator
|
375
373
|
end
|
376
374
|
|
377
375
|
def control_treatment
|
378
|
-
{ treatment
|
376
|
+
{ :treatment => Engine::Models::Treatment::CONTROL }
|
379
377
|
end
|
380
378
|
|
381
379
|
def control_treatment_with_config
|
@@ -18,19 +18,16 @@ module SplitIoClient
|
|
18
18
|
@unique_keys_tracker = unique_keys_tracker
|
19
19
|
end
|
20
20
|
|
21
|
-
def build_impression(matching_key, bucketing_key, split_name,
|
22
|
-
impression_data = impression_data(matching_key, bucketing_key, split_name,
|
23
|
-
|
21
|
+
def build_impression(matching_key, bucketing_key, split_name, treatment_data, impressions_disabled, params = {})
|
22
|
+
impression_data = impression_data(matching_key, bucketing_key, split_name, treatment_data, params[:time])
|
24
23
|
begin
|
25
|
-
|
26
|
-
when :debug # In DEBUG mode we should calculate the pt only.
|
27
|
-
impression_data[:pt] = @impression_observer.test_and_set(impression_data)
|
28
|
-
when :none # In NONE mode we should track the total amount of evaluations and the unique keys.
|
24
|
+
if @config.impressions_mode == :none || impressions_disabled
|
29
25
|
@impression_counter.inc(split_name, impression_data[:m])
|
30
26
|
@unique_keys_tracker.track(split_name, matching_key)
|
27
|
+
elsif @config.impressions_mode == :debug # In DEBUG mode we should calculate the pt only.
|
28
|
+
impression_data[:pt] = @impression_observer.test_and_set(impression_data)
|
31
29
|
else # In OPTIMIZED mode we should track the total amount of evaluations and deduplicate the impressions.
|
32
30
|
impression_data[:pt] = @impression_observer.test_and_set(impression_data)
|
33
|
-
|
34
31
|
@impression_counter.inc(split_name, impression_data[:m]) unless impression_data[:pt].nil?
|
35
32
|
end
|
36
33
|
rescue StandardError => e
|
@@ -40,24 +37,25 @@ module SplitIoClient
|
|
40
37
|
impression(impression_data, params[:attributes])
|
41
38
|
end
|
42
39
|
|
43
|
-
def track(
|
44
|
-
return if
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
40
|
+
def track(impressions_decorator)
|
41
|
+
return if impressions_decorator.empty?
|
42
|
+
|
43
|
+
impressions_decorator.each do |impression_decorator|
|
44
|
+
impression_router.add_bulk([impression_decorator[:impression]])
|
45
|
+
stats = { dropped: 0, queued: 0, dedupe: 0 }
|
46
|
+
begin
|
47
|
+
next if @config.impressions_mode == :none || impression_decorator[:disabled]
|
48
|
+
|
49
|
+
if @config.impressions_mode == :debug
|
50
|
+
track_debug_mode([impression_decorator[:impression]], stats)
|
51
|
+
else
|
52
|
+
track_optimized_mode([impression_decorator[:impression]], stats)
|
53
|
+
end
|
54
|
+
rescue StandardError => e
|
55
|
+
@config.log_found_exception(__method__.to_s, e)
|
56
|
+
ensure
|
57
|
+
record_stats(stats)
|
55
58
|
end
|
56
|
-
rescue StandardError => e
|
57
|
-
@config.log_found_exception(__method__.to_s, e)
|
58
|
-
ensure
|
59
|
-
record_stats(stats)
|
60
|
-
impression_router.add_bulk(impressions)
|
61
59
|
end
|
62
60
|
end
|
63
61
|
|
@@ -126,11 +124,10 @@ module SplitIoClient
|
|
126
124
|
|
127
125
|
def track_optimized_mode(impressions, stats)
|
128
126
|
optimized_impressions = impressions.select { |imp| should_queue_impression?(imp[:i]) }
|
129
|
-
|
127
|
+
stats[:dedupe] = impressions.length - optimized_impressions.length
|
130
128
|
return if optimized_impressions.empty?
|
131
129
|
|
132
130
|
stats[:dropped] = @impressions_repository.add_bulk(optimized_impressions)
|
133
|
-
stats[:dedupe] = impressions.length - optimized_impressions.length
|
134
131
|
stats[:queued] = optimized_impressions.length - stats[:dropped]
|
135
132
|
end
|
136
133
|
end
|
@@ -48,7 +48,7 @@ module SplitIoClient
|
|
48
48
|
events_sender
|
49
49
|
start_telemetry_sync_task
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
impressions_count_sender
|
53
53
|
start_unique_keys_tracker_task
|
54
54
|
end
|
@@ -175,7 +175,7 @@ module SplitIoClient
|
|
175
175
|
|
176
176
|
# Starts thread which loops constantly and sends impressions to the Split API
|
177
177
|
def impressions_sender
|
178
|
-
ImpressionsSender.new(@impressions_repository, @config, @impressions_api).call
|
178
|
+
ImpressionsSender.new(@impressions_repository, @config, @impressions_api).call
|
179
179
|
end
|
180
180
|
|
181
181
|
# Starts thread which loops constantly and sends events to the Split API
|
@@ -185,7 +185,7 @@ module SplitIoClient
|
|
185
185
|
|
186
186
|
# Starts thread which loops constantly and sends impressions count to the Split API
|
187
187
|
def impressions_count_sender
|
188
|
-
ImpressionsCountSender.new(@config, @impression_counter, @impressions_sender_adapter).call
|
188
|
+
ImpressionsCountSender.new(@config, @impression_counter, @impressions_sender_adapter).call
|
189
189
|
end
|
190
190
|
|
191
191
|
def start_telemetry_sync_task
|
@@ -203,7 +203,7 @@ module SplitIoClient
|
|
203
203
|
def sync_splits_and_segments
|
204
204
|
@config.logger.debug('Synchronizing feature flags and segments ...') if @config.debug_enabled
|
205
205
|
splits_result = @split_fetcher.fetch_splits
|
206
|
-
|
206
|
+
|
207
207
|
splits_result[:success] && @segment_fetcher.fetch_segments
|
208
208
|
end
|
209
209
|
end
|
@@ -13,6 +13,13 @@ module SplitIoClient
|
|
13
13
|
next
|
14
14
|
end
|
15
15
|
|
16
|
+
unless feature_flag.key?(:impressionsDisabled)
|
17
|
+
feature_flag[:impressionsDisabled] = false
|
18
|
+
if config.debug_enabled
|
19
|
+
config.logger.debug("feature flag (#{feature_flag[:name]}) does not have impressionsDisabled field, setting it to false")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
16
23
|
config.logger.debug("storing feature flag (#{feature_flag[:name]})") if config.debug_enabled
|
17
24
|
to_add.push(feature_flag)
|
18
25
|
end
|
@@ -107,7 +107,8 @@ module SplitIoClient
|
|
107
107
|
change_number: split[:changeNumber],
|
108
108
|
configs: split[:configurations] || {},
|
109
109
|
sets: split[:sets] || [],
|
110
|
-
default_treatment: split[:defaultTreatment]
|
110
|
+
default_treatment: split[:defaultTreatment],
|
111
|
+
impressions_disabled: split[:impressionsDisabled]
|
111
112
|
}
|
112
113
|
end
|
113
114
|
|
@@ -230,11 +230,6 @@ module SplitIoClient
|
|
230
230
|
end
|
231
231
|
|
232
232
|
def build_unique_keys_tracker
|
233
|
-
if @config.impressions_mode != :none
|
234
|
-
@unique_keys_tracker = Engine::Impressions::NoopUniqueKeysTracker.new
|
235
|
-
return
|
236
|
-
end
|
237
|
-
|
238
233
|
bf = Cache::Filter::BloomFilter.new(30_000_000)
|
239
234
|
filter_adapter = Cache::Filter::FilterAdapter.new(@config, bf)
|
240
235
|
cache = Concurrent::Hash.new
|
@@ -242,8 +237,7 @@ module SplitIoClient
|
|
242
237
|
end
|
243
238
|
|
244
239
|
def build_impressions_observer
|
245
|
-
if (@config.cache_adapter == :redis && @config.impressions_mode != :optimized)
|
246
|
-
(@config.cache_adapter == :memory && @config.impressions_mode == :none)
|
240
|
+
if (@config.cache_adapter == :redis && @config.impressions_mode != :optimized)
|
247
241
|
@impression_observer = Observers::NoopImpressionObserver.new
|
248
242
|
else
|
249
243
|
@impression_observer = Observers::ImpressionObserver.new
|
@@ -251,12 +245,7 @@ module SplitIoClient
|
|
251
245
|
end
|
252
246
|
|
253
247
|
def build_impression_counter
|
254
|
-
|
255
|
-
when :debug
|
256
|
-
@impression_counter = Engine::Common::NoopImpressionCounter.new
|
257
|
-
else
|
258
|
-
@impression_counter = Engine::Common::ImpressionCounter.new
|
259
|
-
end
|
248
|
+
@impression_counter = Engine::Common::ImpressionCounter.new
|
260
249
|
end
|
261
250
|
|
262
251
|
def build_impressions_sender_adapter
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: splitclient-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.
|
4
|
+
version: 8.5.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Split Software
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -17,8 +17,8 @@ dependencies:
|
|
17
17
|
- !ruby/object:Gem::Version
|
18
18
|
version: '0.1'
|
19
19
|
name: allocation_stats
|
20
|
-
type: :development
|
21
20
|
prerelease: false
|
21
|
+
type: :development
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
@@ -31,8 +31,8 @@ dependencies:
|
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '2.2'
|
33
33
|
name: bundler
|
34
|
-
type: :development
|
35
34
|
prerelease: false
|
35
|
+
type: :development
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
@@ -45,8 +45,8 @@ dependencies:
|
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '11.1'
|
47
47
|
name: byebug
|
48
|
-
type: :development
|
49
48
|
prerelease: false
|
49
|
+
type: :development
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
@@ -59,8 +59,8 @@ dependencies:
|
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0.14'
|
61
61
|
name: pry
|
62
|
-
type: :development
|
63
62
|
prerelease: false
|
63
|
+
type: :development
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
@@ -73,8 +73,8 @@ dependencies:
|
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '1.0'
|
75
75
|
name: pry-nav
|
76
|
-
type: :development
|
77
76
|
prerelease: false
|
77
|
+
type: :development
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
@@ -87,8 +87,8 @@ dependencies:
|
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: '13.0'
|
89
89
|
name: rake
|
90
|
-
type: :development
|
91
90
|
prerelease: false
|
91
|
+
type: :development
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
@@ -101,8 +101,8 @@ dependencies:
|
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '1.1'
|
103
103
|
name: rake-compiler
|
104
|
-
type: :development
|
105
104
|
prerelease: false
|
105
|
+
type: :development
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
@@ -115,8 +115,8 @@ dependencies:
|
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: '3.10'
|
117
117
|
name: rspec
|
118
|
-
type: :development
|
119
118
|
prerelease: false
|
119
|
+
type: :development
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
@@ -129,8 +129,8 @@ dependencies:
|
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: 1.28.2
|
131
131
|
name: rubocop
|
132
|
-
type: :development
|
133
132
|
prerelease: false
|
133
|
+
type: :development
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - '='
|
@@ -143,8 +143,8 @@ dependencies:
|
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '0.20'
|
145
145
|
name: simplecov
|
146
|
-
type: :development
|
147
146
|
prerelease: false
|
147
|
+
type: :development
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
@@ -157,8 +157,8 @@ dependencies:
|
|
157
157
|
- !ruby/object:Gem::Version
|
158
158
|
version: '0.2'
|
159
159
|
name: simplecov-json
|
160
|
-
type: :development
|
161
160
|
prerelease: false
|
161
|
+
type: :development
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
@@ -171,8 +171,8 @@ dependencies:
|
|
171
171
|
- !ruby/object:Gem::Version
|
172
172
|
version: '0.9'
|
173
173
|
name: timecop
|
174
|
-
type: :development
|
175
174
|
prerelease: false
|
175
|
+
type: :development
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - "~>"
|
@@ -185,8 +185,8 @@ dependencies:
|
|
185
185
|
- !ruby/object:Gem::Version
|
186
186
|
version: '3.14'
|
187
187
|
name: webmock
|
188
|
-
type: :development
|
189
188
|
prerelease: false
|
189
|
+
type: :development
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
192
|
- - "~>"
|
@@ -199,8 +199,8 @@ dependencies:
|
|
199
199
|
- !ruby/object:Gem::Version
|
200
200
|
version: '1.7'
|
201
201
|
name: webrick
|
202
|
-
type: :development
|
203
202
|
prerelease: false
|
203
|
+
type: :development
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
206
|
- - "~>"
|
@@ -213,8 +213,8 @@ dependencies:
|
|
213
213
|
- !ruby/object:Gem::Version
|
214
214
|
version: '1.3'
|
215
215
|
name: bitarray
|
216
|
-
type: :runtime
|
217
216
|
prerelease: false
|
217
|
+
type: :runtime
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
220
|
- - "~>"
|
@@ -227,8 +227,8 @@ dependencies:
|
|
227
227
|
- !ruby/object:Gem::Version
|
228
228
|
version: '1.0'
|
229
229
|
name: concurrent-ruby
|
230
|
-
type: :runtime
|
231
230
|
prerelease: false
|
231
|
+
type: :runtime
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
requirements:
|
234
234
|
- - "~>"
|
@@ -244,8 +244,8 @@ dependencies:
|
|
244
244
|
- !ruby/object:Gem::Version
|
245
245
|
version: '3.0'
|
246
246
|
name: faraday
|
247
|
-
type: :runtime
|
248
247
|
prerelease: false
|
248
|
+
type: :runtime
|
249
249
|
version_requirements: !ruby/object:Gem::Requirement
|
250
250
|
requirements:
|
251
251
|
- - ">="
|
@@ -264,8 +264,8 @@ dependencies:
|
|
264
264
|
- !ruby/object:Gem::Version
|
265
265
|
version: '3.0'
|
266
266
|
name: faraday-net_http_persistent
|
267
|
-
type: :runtime
|
268
267
|
prerelease: false
|
268
|
+
type: :runtime
|
269
269
|
version_requirements: !ruby/object:Gem::Requirement
|
270
270
|
requirements:
|
271
271
|
- - ">="
|
@@ -284,8 +284,8 @@ dependencies:
|
|
284
284
|
- !ruby/object:Gem::Version
|
285
285
|
version: '3.0'
|
286
286
|
name: json
|
287
|
-
type: :runtime
|
288
287
|
prerelease: false
|
288
|
+
type: :runtime
|
289
289
|
version_requirements: !ruby/object:Gem::Requirement
|
290
290
|
requirements:
|
291
291
|
- - ">="
|
@@ -304,8 +304,8 @@ dependencies:
|
|
304
304
|
- !ruby/object:Gem::Version
|
305
305
|
version: '3.0'
|
306
306
|
name: jwt
|
307
|
-
type: :runtime
|
308
307
|
prerelease: false
|
308
|
+
type: :runtime
|
309
309
|
version_requirements: !ruby/object:Gem::Requirement
|
310
310
|
requirements:
|
311
311
|
- - ">="
|
@@ -321,8 +321,8 @@ dependencies:
|
|
321
321
|
- !ruby/object:Gem::Version
|
322
322
|
version: '1.1'
|
323
323
|
name: lru_redux
|
324
|
-
type: :runtime
|
325
324
|
prerelease: false
|
325
|
+
type: :runtime
|
326
326
|
version_requirements: !ruby/object:Gem::Requirement
|
327
327
|
requirements:
|
328
328
|
- - "~>"
|
@@ -338,8 +338,8 @@ dependencies:
|
|
338
338
|
- !ruby/object:Gem::Version
|
339
339
|
version: '5.0'
|
340
340
|
name: net-http-persistent
|
341
|
-
type: :runtime
|
342
341
|
prerelease: false
|
342
|
+
type: :runtime
|
343
343
|
version_requirements: !ruby/object:Gem::Requirement
|
344
344
|
requirements:
|
345
345
|
- - ">="
|
@@ -358,8 +358,8 @@ dependencies:
|
|
358
358
|
- !ruby/object:Gem::Version
|
359
359
|
version: '6.0'
|
360
360
|
name: redis
|
361
|
-
type: :runtime
|
362
361
|
prerelease: false
|
362
|
+
type: :runtime
|
363
363
|
version_requirements: !ruby/object:Gem::Requirement
|
364
364
|
requirements:
|
365
365
|
- - ">="
|
@@ -378,8 +378,8 @@ dependencies:
|
|
378
378
|
- !ruby/object:Gem::Version
|
379
379
|
version: '1.0'
|
380
380
|
name: socketry
|
381
|
-
type: :runtime
|
382
381
|
prerelease: false
|
382
|
+
type: :runtime
|
383
383
|
version_requirements: !ruby/object:Gem::Requirement
|
384
384
|
requirements:
|
385
385
|
- - ">="
|
@@ -395,8 +395,8 @@ dependencies:
|
|
395
395
|
- !ruby/object:Gem::Version
|
396
396
|
version: '0.3'
|
397
397
|
name: thread_safe
|
398
|
-
type: :runtime
|
399
398
|
prerelease: false
|
399
|
+
type: :runtime
|
400
400
|
version_requirements: !ruby/object:Gem::Requirement
|
401
401
|
requirements:
|
402
402
|
- - "~>"
|
@@ -585,11 +585,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
585
585
|
version: 2.5.0
|
586
586
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
587
587
|
requirements:
|
588
|
-
- - "
|
588
|
+
- - ">="
|
589
589
|
- !ruby/object:Gem::Version
|
590
|
-
version:
|
590
|
+
version: '0'
|
591
591
|
requirements: []
|
592
|
-
rubygems_version: 3.
|
592
|
+
rubygems_version: 3.2.33
|
593
593
|
signing_key:
|
594
594
|
specification_version: 4
|
595
595
|
summary: Ruby client for split SDK.
|