splitclient-rb 8.1.2 → 8.1.3.pre.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c062c9b9de400aef087ba151c0ca987d9a562e46cbc7d4305c3eb89215d63f06
4
- data.tar.gz: 85ae608d05f60f87a824f9363bbbc5cda3b7a6da32bfee26d221ca0010b7e2f0
3
+ metadata.gz: 9a0ec791812addfdc81c560cc797d8c1e8e457fb7087622c2f891166725c4dcd
4
+ data.tar.gz: 95d672b4f213ebaac3e12073fcdafcf29aa15f7b4d1c2c5df573e30f545e9b51
5
5
  SHA512:
6
- metadata.gz: 693fbcc62d83b00fd945bc12a55a5b807c86ab07d3738399d3f203f3f6b75c4266c6f22cb92fddb840f35849095340ac9ee90c879ea52b389fa1678136b38102
7
- data.tar.gz: ba91997fe5008f727eec7b6aaa41b90383efc0a8b1a3330ab9b4a76792508b97e13af3e6413c9f04246103f32e786baf46755db9bc67483621ae39a2f92daee6
6
+ metadata.gz: 3c9c1d2fb2239e9efdf33d725cfee6a99104b995767812820b2b80e3b863e4f3a087d4a0b84191b4d45e2c8779e41e405f2592a2aa9e49048787f06f6c5e4ac7
7
+ data.tar.gz: 20288247d0976a7b8468b8a5c190612283df8f23a5360841bb9ec21990715efa2c5582fdfd9ae5fe8de7948ac969aa95aa3e80bc231902cffd7391558a8dcf1a
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SplitIoClient
4
+ NO_COMPRESSION = 0
5
+ GZIP_COMPRESSION = 1
6
+ ZLIB_COMPRESSION = 2
7
+
8
+ module Helpers
9
+ class DecryptionHelper
10
+ def self.get_encoded_definition(compression, data)
11
+ case compression
12
+ when NO_COMPRESSION
13
+ Base64.decode64(data)
14
+ when GZIP_COMPRESSION
15
+ gz = Zlib::GzipReader.new(StringIO.new(Base64.decode64(data)))
16
+ gz.read
17
+ when ZLIB_COMPRESSION
18
+ Zlib::Inflate.inflate(Base64.decode64(data))
19
+ else
20
+ raise StandardError, 'Compression flag value is incorrect'
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -26,16 +26,12 @@ module SplitIoClient
26
26
 
27
27
  def process_split_update(notification)
28
28
  @config.logger.debug("SPLIT UPDATE notification received: #{notification}") if @config.debug_enabled
29
- @splits_worker.add_to_queue(notification.data['changeNumber'])
29
+ @splits_worker.add_to_queue(notification)
30
30
  end
31
31
 
32
32
  def process_split_kill(notification)
33
33
  @config.logger.debug("SPLIT KILL notification received: #{notification}") if @config.debug_enabled
34
- change_number = notification.data['changeNumber']
35
- default_treatment = notification.data['defaultTreatment']
36
- split_name = notification.data['splitName']
37
-
38
- @splits_worker.kill_split(change_number, split_name, default_treatment)
34
+ @splits_worker.add_to_queue(notification)
39
35
  end
40
36
 
41
37
  def process_segment_update(notification)
@@ -4,10 +4,10 @@ module SplitIoClient
4
4
  module SSE
5
5
  module Workers
6
6
  class SplitsWorker
7
- def initialize(synchronizer, config, splits_repository)
7
+ def initialize(synchronizer, config, feature_flags_repository)
8
8
  @synchronizer = synchronizer
9
9
  @config = config
10
- @splits_repository = splits_repository
10
+ @feature_flags_repository = feature_flags_repository
11
11
  @queue = Queue.new
12
12
  @running = Concurrent::AtomicBoolean.new(false)
13
13
  end
@@ -32,25 +32,57 @@ module SplitIoClient
32
32
  SplitIoClient::Helpers::ThreadHelper.stop(:split_update_worker, @config)
33
33
  end
34
34
 
35
- def add_to_queue(change_number)
36
- @config.logger.debug("feature_flags_worker add to queue #{change_number}")
37
- @queue.push(change_number)
35
+ def add_to_queue(notification)
36
+ @config.logger.debug("feature_flags_worker add to queue #{notification.data['changeNumber']}")
37
+ @queue.push(notification)
38
38
  end
39
39
 
40
- def kill_split(change_number, split_name, default_treatment)
41
- return if @splits_repository.get_change_number.to_i > change_number
40
+ private
41
+
42
+ def update_feature_flag(notification)
43
+ return if @feature_flags_repository.get_change_number.to_i > notification.data['changeNumber']
42
44
 
43
- @config.logger.debug("feature_flags_worker kill #{split_name}, #{change_number}")
44
- @splits_repository.kill(change_number, split_name, default_treatment)
45
- add_to_queue(change_number)
45
+ if @feature_flags_repository.get_change_number == notification.data['pcn']
46
+ begin
47
+ @feature_flags_repository.add_split(
48
+ JSON.parse(
49
+ SplitIoClient::Helpers::DecryptionHelper.get_encoded_definition(
50
+ notification.data['c'],
51
+ notification.data['d']
52
+ ),
53
+ symbolize_names: true
54
+ )
55
+ )
56
+ @feature_flags_repository.set_change_number(notification.data['changeNumber'])
57
+ return
58
+ rescue StandardError => e
59
+ @config.logger.debug("Failed to update Split: #{e.inspect}") if @config.debug_enabled
60
+ end
61
+ end
62
+ @synchronizer.fetch_splits(notification.data['changeNumber'])
46
63
  end
47
64
 
48
- private
65
+ def kill_feature_flag(notification)
66
+ return if @feature_flags_repository.get_change_number.to_i > notification.data['changeNumber']
67
+
68
+ @config.logger.debug("feature_flags_worker kill #{notification.data['splitName']}, #{notification.data['changeNumber']}")
69
+ @feature_flags_repository.kill(
70
+ notification.data['changeNumber'],
71
+ notification.data['splitName'],
72
+ notification.data['defaultTreatment']
73
+ )
74
+ @synchronizer.fetch_splits(notification.data['changeNumber'])
75
+ end
49
76
 
50
77
  def perform
51
- while (change_number = @queue.pop)
52
- @config.logger.debug("feature_flags_worker change_number dequeue #{change_number}")
53
- @synchronizer.fetch_splits(change_number)
78
+ while (notification = @queue.pop)
79
+ @config.logger.debug("feature_flags_worker change_number dequeue #{notification.data['changeNumber']}")
80
+ case notification.data['type']
81
+ when SSE::EventSource::EventTypes::SPLIT_UPDATE
82
+ update_feature_flag(notification)
83
+ when SSE::EventSource::EventTypes::SPLIT_KILL
84
+ kill_feature_flag(notification)
85
+ end
54
86
  end
55
87
  end
56
88
 
@@ -1,3 +1,3 @@
1
1
  module SplitIoClient
2
- VERSION = '8.1.2'
2
+ VERSION = '8.1.3.pre.rc1'
3
3
  end
@@ -41,6 +41,7 @@ require 'splitclient-rb/cache/stores/store_utils'
41
41
  require 'splitclient-rb/clients/split_client'
42
42
  require 'splitclient-rb/managers/split_manager'
43
43
  require 'splitclient-rb/helpers/thread_helper'
44
+ require 'splitclient-rb/helpers/decryption_helper'
44
45
  require 'splitclient-rb/split_factory'
45
46
  require 'splitclient-rb/split_factory_builder'
46
47
  require 'splitclient-rb/split_config'
@@ -48,6 +48,7 @@ Gem::Specification.new do |spec|
48
48
  spec.add_development_dependency 'timecop', '~> 0.9'
49
49
  spec.add_development_dependency 'webmock', '~> 3.14'
50
50
  spec.add_development_dependency 'webrick', '~> 1.7'
51
+ spec.add_development_dependency 'byebug', '~> 11.1'
51
52
 
52
53
  spec.add_runtime_dependency 'bitarray', '~> 1.3'
53
54
  spec.add_runtime_dependency 'concurrent-ruby', '~> 1.0'
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.1.2
4
+ version: 8.1.3.pre.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Split Software
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-16 00:00:00.000000000 Z
11
+ date: 2023-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: allocation_stats
@@ -192,6 +192,20 @@ dependencies:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
194
  version: '1.7'
195
+ - !ruby/object:Gem::Dependency
196
+ name: byebug
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '11.1'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '11.1'
195
209
  - !ruby/object:Gem::Dependency
196
210
  name: bitarray
197
211
  requirement: !ruby/object:Gem::Requirement
@@ -503,6 +517,7 @@ files:
503
517
  - lib/splitclient-rb/engine/sync_manager.rb
504
518
  - lib/splitclient-rb/engine/synchronizer.rb
505
519
  - lib/splitclient-rb/exceptions.rb
520
+ - lib/splitclient-rb/helpers/decryption_helper.rb
506
521
  - lib/splitclient-rb/helpers/thread_helper.rb
507
522
  - lib/splitclient-rb/managers/split_manager.rb
508
523
  - lib/splitclient-rb/split_config.rb
@@ -562,9 +577,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
562
577
  version: 2.5.0
563
578
  required_rubygems_version: !ruby/object:Gem::Requirement
564
579
  requirements:
565
- - - ">="
580
+ - - ">"
566
581
  - !ruby/object:Gem::Version
567
- version: '0'
582
+ version: 1.3.1
568
583
  requirements: []
569
584
  rubygems_version: 3.2.3
570
585
  signing_key: