splitclient-rb 8.4.0 → 8.11.0

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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +9 -2
  3. data/CHANGES.txt +24 -0
  4. data/LICENSE +169 -13
  5. data/NOTICE.txt +5 -0
  6. data/lib/splitclient-rb/cache/fetchers/split_fetcher.rb +9 -7
  7. data/lib/splitclient-rb/cache/filter/bloom_filter.rb +10 -6
  8. data/lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb +1 -0
  9. data/lib/splitclient-rb/cache/repositories/rule_based_segments_repository.rb +136 -0
  10. data/lib/splitclient-rb/cache/repositories/segments_repository.rb +21 -2
  11. data/lib/splitclient-rb/cache/repositories/splits_repository.rb +42 -12
  12. data/lib/splitclient-rb/cache/senders/impressions_formatter.rb +24 -10
  13. data/lib/splitclient-rb/cache/stores/localhost_split_builder.rb +2 -1
  14. data/lib/splitclient-rb/clients/split_client.rb +146 -62
  15. data/lib/splitclient-rb/engine/api/client.rb +8 -0
  16. data/lib/splitclient-rb/engine/api/faraday_middleware/gzip.rb +1 -0
  17. data/lib/splitclient-rb/engine/api/splits.rb +100 -24
  18. data/lib/splitclient-rb/engine/auth_api_client.rb +3 -3
  19. data/lib/splitclient-rb/engine/common/impressions_manager.rb +56 -30
  20. data/lib/splitclient-rb/engine/events/events_delivery.rb +20 -0
  21. data/lib/splitclient-rb/engine/events/events_manager.rb +194 -0
  22. data/lib/splitclient-rb/engine/events/events_manager_config.rb +96 -0
  23. data/lib/splitclient-rb/engine/events/events_task.rb +50 -0
  24. data/lib/splitclient-rb/engine/events/noop_events_queue.rb +13 -0
  25. data/lib/splitclient-rb/engine/fallback_treatment_calculator.rb +48 -0
  26. data/lib/splitclient-rb/engine/impressions/unique_keys_tracker.rb +58 -11
  27. data/lib/splitclient-rb/engine/matchers/combining_matcher.rb +3 -1
  28. data/lib/splitclient-rb/engine/matchers/prerequisites_matcher.rb +31 -0
  29. data/lib/splitclient-rb/engine/matchers/rule_based_segment_matcher.rb +78 -0
  30. data/lib/splitclient-rb/engine/models/evaluation_options.rb +9 -0
  31. data/lib/splitclient-rb/engine/models/event_active_subscriptions.rb +14 -0
  32. data/lib/splitclient-rb/engine/models/events_metadata.rb +10 -0
  33. data/lib/splitclient-rb/engine/models/fallback_treatment.rb +11 -0
  34. data/lib/splitclient-rb/engine/models/fallback_treatments_configuration.rb +36 -0
  35. data/lib/splitclient-rb/engine/models/label.rb +1 -0
  36. data/lib/splitclient-rb/engine/models/sdk_event.rb +4 -0
  37. data/lib/splitclient-rb/engine/models/sdk_event_type.rb +4 -0
  38. data/lib/splitclient-rb/engine/models/sdk_internal_event.rb +8 -0
  39. data/lib/splitclient-rb/engine/models/sdk_internal_event_notification.rb +14 -0
  40. data/lib/splitclient-rb/engine/models/segment_type.rb +4 -0
  41. data/lib/splitclient-rb/engine/models/split_http_response.rb +19 -0
  42. data/lib/splitclient-rb/engine/models/valid_sdk_event.rb +14 -0
  43. data/lib/splitclient-rb/engine/parser/condition.rb +9 -0
  44. data/lib/splitclient-rb/engine/parser/evaluator.rb +24 -30
  45. data/lib/splitclient-rb/engine/status_manager.rb +7 -1
  46. data/lib/splitclient-rb/engine/sync_manager.rb +6 -6
  47. data/lib/splitclient-rb/engine/synchronizer.rb +37 -17
  48. data/lib/splitclient-rb/helpers/evaluator_helper.rb +37 -0
  49. data/lib/splitclient-rb/helpers/repository_helper.rb +39 -1
  50. data/lib/splitclient-rb/helpers/util.rb +12 -3
  51. data/lib/splitclient-rb/managers/split_manager.rb +2 -1
  52. data/lib/splitclient-rb/spec.rb +1 -1
  53. data/lib/splitclient-rb/split_config.rb +45 -5
  54. data/lib/splitclient-rb/split_factory.rb +27 -21
  55. data/lib/splitclient-rb/sse/event_source/client.rb +86 -29
  56. data/lib/splitclient-rb/sse/event_source/event_parser.rb +2 -2
  57. data/lib/splitclient-rb/sse/event_source/event_types.rb +1 -0
  58. data/lib/splitclient-rb/sse/notification_manager_keeper.rb +3 -3
  59. data/lib/splitclient-rb/sse/notification_processor.rb +3 -1
  60. data/lib/splitclient-rb/sse/workers/segments_worker.rb +4 -4
  61. data/lib/splitclient-rb/sse/workers/splits_worker.rb +63 -24
  62. data/lib/splitclient-rb/utilitites.rb +6 -10
  63. data/lib/splitclient-rb/validators.rb +56 -25
  64. data/lib/splitclient-rb/version.rb +1 -1
  65. data/lib/splitclient-rb.rb +22 -0
  66. data/sonar-project.properties +1 -0
  67. data/splitclient-rb.gemspec +3 -4
  68. metadata +32 -38
@@ -23,6 +23,7 @@ require 'splitclient-rb/cache/repositories/segments_repository'
23
23
  require 'splitclient-rb/cache/repositories/splits_repository'
24
24
  require 'splitclient-rb/cache/repositories/events_repository'
25
25
  require 'splitclient-rb/cache/repositories/impressions_repository'
26
+ require 'splitclient-rb/cache/repositories/rule_based_segments_repository'
26
27
  require 'splitclient-rb/cache/repositories/events/memory_repository'
27
28
  require 'splitclient-rb/cache/repositories/events/redis_repository'
28
29
  require 'splitclient-rb/cache/repositories/flag_sets/memory_repository'
@@ -47,6 +48,7 @@ require 'splitclient-rb/helpers/thread_helper'
47
48
  require 'splitclient-rb/helpers/decryption_helper'
48
49
  require 'splitclient-rb/helpers/util'
49
50
  require 'splitclient-rb/helpers/repository_helper'
51
+ require 'splitclient-rb/helpers/evaluator_helper'
50
52
  require 'splitclient-rb/split_factory'
51
53
  require 'splitclient-rb/split_factory_builder'
52
54
  require 'splitclient-rb/split_config'
@@ -64,6 +66,11 @@ require 'splitclient-rb/engine/api/telemetry_api'
64
66
  require 'splitclient-rb/engine/common/impressions_counter'
65
67
  require 'splitclient-rb/engine/common/impressions_manager'
66
68
  require 'splitclient-rb/engine/common/noop_impressions_counter'
69
+ require 'splitclient-rb/engine/events/events_manager_config.rb'
70
+ require 'splitclient-rb/engine/events/events_manager.rb'
71
+ require 'splitclient-rb/engine/events/events_task.rb'
72
+ require 'splitclient-rb/engine/events/events_delivery.rb'
73
+ require 'splitclient-rb/engine/events/noop_events_queue.rb'
67
74
  require 'splitclient-rb/engine/parser/condition'
68
75
  require 'splitclient-rb/engine/parser/partition'
69
76
  require 'splitclient-rb/engine/parser/evaluator'
@@ -96,15 +103,30 @@ require 'splitclient-rb/engine/matchers/greater_than_or_equal_to_semver_matcher'
96
103
  require 'splitclient-rb/engine/matchers/less_than_or_equal_to_semver_matcher'
97
104
  require 'splitclient-rb/engine/matchers/between_semver_matcher'
98
105
  require 'splitclient-rb/engine/matchers/in_list_semver_matcher'
106
+ require 'splitclient-rb/engine/matchers/rule_based_segment_matcher'
107
+ require 'splitclient-rb/engine/matchers/prerequisites_matcher'
99
108
  require 'splitclient-rb/engine/evaluator/splitter'
100
109
  require 'splitclient-rb/engine/impressions/noop_unique_keys_tracker'
101
110
  require 'splitclient-rb/engine/impressions/unique_keys_tracker'
102
111
  require 'splitclient-rb/engine/metrics/binary_search_latency_tracker'
103
112
  require 'splitclient-rb/engine/models/split'
104
113
  require 'splitclient-rb/engine/models/label'
114
+ require 'splitclient-rb/engine/models/segment_type'
105
115
  require 'splitclient-rb/engine/models/treatment'
116
+ require 'splitclient-rb/engine/models/split_http_response'
117
+ require 'splitclient-rb/engine/models/evaluation_options'
118
+ require 'splitclient-rb/engine/models/fallback_treatment.rb'
119
+ require 'splitclient-rb/engine/models/fallback_treatments_configuration.rb'
120
+ require 'splitclient-rb/engine/models/events_metadata.rb'
121
+ require 'splitclient-rb/engine/models/sdk_event_type.rb'
122
+ require 'splitclient-rb/engine/models/sdk_event.rb'
123
+ require 'splitclient-rb/engine/models/sdk_internal_event.rb'
124
+ require 'splitclient-rb/engine/models/sdk_internal_event_notification.rb'
125
+ require 'splitclient-rb/engine/models/valid_sdk_event.rb'
126
+ require 'splitclient-rb/engine/models/event_active_subscriptions.rb'
106
127
  require 'splitclient-rb/engine/auth_api_client'
107
128
  require 'splitclient-rb/engine/back_off'
129
+ require 'splitclient-rb/engine/fallback_treatment_calculator.rb'
108
130
  require 'splitclient-rb/engine/push_manager'
109
131
  require 'splitclient-rb/engine/status_manager'
110
132
  require 'splitclient-rb/engine/sync_manager'
@@ -2,4 +2,5 @@ sonar.projectKey=ruby-client
2
2
  sonar.projectKey=ruby-client
3
3
  sonar.sources=lib
4
4
  sonar.tests=spec
5
+ sonar.java.source=17
5
6
  sonar.ruby.coverage.reportPaths=coverage/.resultset.sonarqube.json
@@ -47,18 +47,17 @@ Gem::Specification.new do |spec|
47
47
  spec.add_development_dependency 'simplecov', '~> 0.20'
48
48
  spec.add_development_dependency 'simplecov-json', '~> 0.2'
49
49
  spec.add_development_dependency 'timecop', '~> 0.9'
50
- spec.add_development_dependency 'webmock', '~> 3.14'
51
- spec.add_development_dependency 'webrick', '~> 1.7'
50
+ spec.add_development_dependency 'webmock', '~> 3.24'
51
+ spec.add_development_dependency 'webrick', '~> 1.8.2'
52
52
 
53
53
  spec.add_runtime_dependency 'bitarray', '~> 1.3'
54
54
  spec.add_runtime_dependency 'concurrent-ruby', '~> 1.0'
55
55
  spec.add_runtime_dependency 'faraday', '>= 1.1', '< 3.0'
56
56
  spec.add_runtime_dependency 'faraday-net_http_persistent', '>= 1.0', '< 3.0'
57
57
  spec.add_runtime_dependency 'json', '>= 1.8', '< 3.0'
58
- spec.add_runtime_dependency 'jwt', '>= 1.0.0', '< 3.0'
58
+ spec.add_runtime_dependency 'jwt', '>= 3.1'
59
59
  spec.add_runtime_dependency 'lru_redux', '~> 1.1'
60
60
  spec.add_runtime_dependency 'net-http-persistent', '>= 2.9', '< 5.0'
61
61
  spec.add_runtime_dependency 'redis', '>= 4.0.0', '< 6.0'
62
- spec.add_runtime_dependency 'socketry', '>= 0.4', '< 1.0'
63
62
  spec.add_runtime_dependency 'thread_safe', '~> 0.3'
64
63
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: splitclient-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.4.0
4
+ version: 8.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Split Software
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-05-03 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: allocation_stats
@@ -184,28 +183,28 @@ dependencies:
184
183
  requirements:
185
184
  - - "~>"
186
185
  - !ruby/object:Gem::Version
187
- version: '3.14'
186
+ version: '3.24'
188
187
  type: :development
189
188
  prerelease: false
190
189
  version_requirements: !ruby/object:Gem::Requirement
191
190
  requirements:
192
191
  - - "~>"
193
192
  - !ruby/object:Gem::Version
194
- version: '3.14'
193
+ version: '3.24'
195
194
  - !ruby/object:Gem::Dependency
196
195
  name: webrick
197
196
  requirement: !ruby/object:Gem::Requirement
198
197
  requirements:
199
198
  - - "~>"
200
199
  - !ruby/object:Gem::Version
201
- version: '1.7'
200
+ version: 1.8.2
202
201
  type: :development
203
202
  prerelease: false
204
203
  version_requirements: !ruby/object:Gem::Requirement
205
204
  requirements:
206
205
  - - "~>"
207
206
  - !ruby/object:Gem::Version
208
- version: '1.7'
207
+ version: 1.8.2
209
208
  - !ruby/object:Gem::Dependency
210
209
  name: bitarray
211
210
  requirement: !ruby/object:Gem::Requirement
@@ -300,20 +299,14 @@ dependencies:
300
299
  requirements:
301
300
  - - ">="
302
301
  - !ruby/object:Gem::Version
303
- version: 1.0.0
304
- - - "<"
305
- - !ruby/object:Gem::Version
306
- version: '3.0'
302
+ version: '3.1'
307
303
  type: :runtime
308
304
  prerelease: false
309
305
  version_requirements: !ruby/object:Gem::Requirement
310
306
  requirements:
311
307
  - - ">="
312
308
  - !ruby/object:Gem::Version
313
- version: 1.0.0
314
- - - "<"
315
- - !ruby/object:Gem::Version
316
- version: '3.0'
309
+ version: '3.1'
317
310
  - !ruby/object:Gem::Dependency
318
311
  name: lru_redux
319
312
  requirement: !ruby/object:Gem::Requirement
@@ -368,26 +361,6 @@ dependencies:
368
361
  - - "<"
369
362
  - !ruby/object:Gem::Version
370
363
  version: '6.0'
371
- - !ruby/object:Gem::Dependency
372
- name: socketry
373
- requirement: !ruby/object:Gem::Requirement
374
- requirements:
375
- - - ">="
376
- - !ruby/object:Gem::Version
377
- version: '0.4'
378
- - - "<"
379
- - !ruby/object:Gem::Version
380
- version: '1.0'
381
- type: :runtime
382
- prerelease: false
383
- version_requirements: !ruby/object:Gem::Requirement
384
- requirements:
385
- - - ">="
386
- - !ruby/object:Gem::Version
387
- version: '0.4'
388
- - - "<"
389
- - !ruby/object:Gem::Version
390
- version: '1.0'
391
364
  - !ruby/object:Gem::Dependency
392
365
  name: thread_safe
393
366
  requirement: !ruby/object:Gem::Requirement
@@ -421,6 +394,7 @@ files:
421
394
  - CONTRIBUTORS-GUIDE.md
422
395
  - Gemfile
423
396
  - LICENSE
397
+ - NOTICE.txt
424
398
  - README.md
425
399
  - Rakefile
426
400
  - ext/murmurhash/3_x64_128.c
@@ -456,6 +430,7 @@ files:
456
430
  - lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb
457
431
  - lib/splitclient-rb/cache/repositories/impressions_repository.rb
458
432
  - lib/splitclient-rb/cache/repositories/repository.rb
433
+ - lib/splitclient-rb/cache/repositories/rule_based_segments_repository.rb
459
434
  - lib/splitclient-rb/cache/repositories/segments_repository.rb
460
435
  - lib/splitclient-rb/cache/repositories/splits_repository.rb
461
436
  - lib/splitclient-rb/cache/routers/impression_router.rb
@@ -485,6 +460,12 @@ files:
485
460
  - lib/splitclient-rb/engine/common/impressions_manager.rb
486
461
  - lib/splitclient-rb/engine/common/noop_impressions_counter.rb
487
462
  - lib/splitclient-rb/engine/evaluator/splitter.rb
463
+ - lib/splitclient-rb/engine/events/events_delivery.rb
464
+ - lib/splitclient-rb/engine/events/events_manager.rb
465
+ - lib/splitclient-rb/engine/events/events_manager_config.rb
466
+ - lib/splitclient-rb/engine/events/events_task.rb
467
+ - lib/splitclient-rb/engine/events/noop_events_queue.rb
468
+ - lib/splitclient-rb/engine/fallback_treatment_calculator.rb
488
469
  - lib/splitclient-rb/engine/impressions/noop_unique_keys_tracker.rb
489
470
  - lib/splitclient-rb/engine/impressions/unique_keys_tracker.rb
490
471
  - lib/splitclient-rb/engine/matchers/all_keys_matcher.rb
@@ -510,15 +491,29 @@ files:
510
491
  - lib/splitclient-rb/engine/matchers/matches_string_matcher.rb
511
492
  - lib/splitclient-rb/engine/matchers/negation_matcher.rb
512
493
  - lib/splitclient-rb/engine/matchers/part_of_set_matcher.rb
494
+ - lib/splitclient-rb/engine/matchers/prerequisites_matcher.rb
495
+ - lib/splitclient-rb/engine/matchers/rule_based_segment_matcher.rb
513
496
  - lib/splitclient-rb/engine/matchers/semver.rb
514
497
  - lib/splitclient-rb/engine/matchers/set_matcher.rb
515
498
  - lib/splitclient-rb/engine/matchers/starts_with_matcher.rb
516
499
  - lib/splitclient-rb/engine/matchers/user_defined_segment_matcher.rb
517
500
  - lib/splitclient-rb/engine/matchers/whitelist_matcher.rb
518
501
  - lib/splitclient-rb/engine/metrics/binary_search_latency_tracker.rb
502
+ - lib/splitclient-rb/engine/models/evaluation_options.rb
503
+ - lib/splitclient-rb/engine/models/event_active_subscriptions.rb
504
+ - lib/splitclient-rb/engine/models/events_metadata.rb
505
+ - lib/splitclient-rb/engine/models/fallback_treatment.rb
506
+ - lib/splitclient-rb/engine/models/fallback_treatments_configuration.rb
519
507
  - lib/splitclient-rb/engine/models/label.rb
508
+ - lib/splitclient-rb/engine/models/sdk_event.rb
509
+ - lib/splitclient-rb/engine/models/sdk_event_type.rb
510
+ - lib/splitclient-rb/engine/models/sdk_internal_event.rb
511
+ - lib/splitclient-rb/engine/models/sdk_internal_event_notification.rb
512
+ - lib/splitclient-rb/engine/models/segment_type.rb
520
513
  - lib/splitclient-rb/engine/models/split.rb
514
+ - lib/splitclient-rb/engine/models/split_http_response.rb
521
515
  - lib/splitclient-rb/engine/models/treatment.rb
516
+ - lib/splitclient-rb/engine/models/valid_sdk_event.rb
522
517
  - lib/splitclient-rb/engine/parser/condition.rb
523
518
  - lib/splitclient-rb/engine/parser/evaluator.rb
524
519
  - lib/splitclient-rb/engine/parser/partition.rb
@@ -528,6 +523,7 @@ files:
528
523
  - lib/splitclient-rb/engine/synchronizer.rb
529
524
  - lib/splitclient-rb/exceptions.rb
530
525
  - lib/splitclient-rb/helpers/decryption_helper.rb
526
+ - lib/splitclient-rb/helpers/evaluator_helper.rb
531
527
  - lib/splitclient-rb/helpers/repository_helper.rb
532
528
  - lib/splitclient-rb/helpers/thread_helper.rb
533
529
  - lib/splitclient-rb/helpers/util.rb
@@ -579,7 +575,6 @@ homepage: https://github.com/splitio/ruby-client
579
575
  licenses:
580
576
  - Apache-2.0
581
577
  metadata: {}
582
- post_install_message:
583
578
  rdoc_options: []
584
579
  require_paths:
585
580
  - lib
@@ -594,8 +589,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
594
589
  - !ruby/object:Gem::Version
595
590
  version: '0'
596
591
  requirements: []
597
- rubygems_version: 3.2.3
598
- signing_key:
592
+ rubygems_version: 3.7.1
599
593
  specification_version: 4
600
594
  summary: Ruby client for split SDK.
601
595
  test_files: []