splitclient-rb 8.1.2 → 8.1.3.pre.rc1

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: 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: