splitclient-rb 1.0.2.wip → 8.11.1.pre.rc1-java

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 (210) hide show
  1. checksums.yaml +5 -5
  2. data/.github/CODEOWNERS +1 -0
  3. data/.github/pull_request_template.md +9 -0
  4. data/.github/workflows/ci.yml +90 -0
  5. data/.github/workflows/update-license-year.yml +45 -0
  6. data/.gitignore +20 -0
  7. data/.rubocop.yml +76 -0
  8. data/.simplecov +1 -0
  9. data/CHANGES.txt +361 -2
  10. data/CONTRIBUTORS-GUIDE.md +49 -0
  11. data/Gemfile +2 -0
  12. data/LICENSE +3 -36
  13. data/NOTICE.txt +5 -0
  14. data/README.md +59 -127
  15. data/Rakefile +27 -3
  16. data/ext/murmurhash/MurmurHash3.java +302 -0
  17. data/gemfiles/faraday_after_0.13.gemfile +7 -0
  18. data/gemfiles/faraday_before_0.13.gemfile +8 -0
  19. data/lib/murmurhash/base.rb +58 -0
  20. data/lib/murmurhash/murmurhash.jar +0 -0
  21. data/lib/murmurhash/murmurhash_mri.rb +3 -0
  22. data/lib/splitclient-rb/cache/adapters/cache_adapter.rb +130 -0
  23. data/lib/splitclient-rb/cache/adapters/memory_adapter.rb +12 -0
  24. data/lib/splitclient-rb/cache/adapters/memory_adapters/map_adapter.rb +137 -0
  25. data/lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb +53 -0
  26. data/lib/splitclient-rb/cache/adapters/redis_adapter.rb +178 -0
  27. data/lib/splitclient-rb/cache/fetchers/segment_fetcher.rb +83 -0
  28. data/lib/splitclient-rb/cache/fetchers/split_fetcher.rb +70 -0
  29. data/lib/splitclient-rb/cache/filter/bloom_filter.rb +67 -0
  30. data/lib/splitclient-rb/cache/filter/filter_adapter.rb +32 -0
  31. data/lib/splitclient-rb/cache/filter/flag_set_filter.rb +40 -0
  32. data/lib/splitclient-rb/cache/hashers/impression_hasher.rb +34 -0
  33. data/lib/splitclient-rb/cache/observers/impression_observer.rb +22 -0
  34. data/lib/splitclient-rb/cache/observers/noop_impression_observer.rb +10 -0
  35. data/lib/splitclient-rb/cache/repositories/events/memory_repository.rb +45 -0
  36. data/lib/splitclient-rb/cache/repositories/events/redis_repository.rb +35 -0
  37. data/lib/splitclient-rb/cache/repositories/events_repository.rb +61 -0
  38. data/lib/splitclient-rb/cache/repositories/flag_sets/memory_repository.rb +40 -0
  39. data/lib/splitclient-rb/cache/repositories/flag_sets/redis_repository.rb +49 -0
  40. data/lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb +56 -0
  41. data/lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb +57 -0
  42. data/lib/splitclient-rb/cache/repositories/impressions_repository.rb +23 -0
  43. data/lib/splitclient-rb/cache/repositories/repository.rb +24 -0
  44. data/lib/splitclient-rb/cache/repositories/rule_based_segments_repository.rb +136 -0
  45. data/lib/splitclient-rb/cache/repositories/segments_repository.rb +124 -0
  46. data/lib/splitclient-rb/cache/repositories/splits_repository.rb +296 -0
  47. data/lib/splitclient-rb/cache/routers/impression_router.rb +60 -0
  48. data/lib/splitclient-rb/cache/senders/events_sender.rb +42 -0
  49. data/lib/splitclient-rb/cache/senders/impressions_adapter/memory_sender.rb +71 -0
  50. data/lib/splitclient-rb/cache/senders/impressions_adapter/redis_sender.rb +69 -0
  51. data/lib/splitclient-rb/cache/senders/impressions_count_sender.rb +43 -0
  52. data/lib/splitclient-rb/cache/senders/impressions_formatter.rb +95 -0
  53. data/lib/splitclient-rb/cache/senders/impressions_sender.rb +52 -0
  54. data/lib/splitclient-rb/cache/senders/impressions_sender_adapter.rb +21 -0
  55. data/lib/splitclient-rb/cache/senders/localhost_repo_cleaner.rb +47 -0
  56. data/lib/splitclient-rb/cache/stores/localhost_split_builder.rb +95 -0
  57. data/lib/splitclient-rb/cache/stores/localhost_split_store.rb +110 -0
  58. data/lib/splitclient-rb/cache/stores/store_utils.rb +13 -0
  59. data/lib/splitclient-rb/clients/split_client.rb +530 -0
  60. data/lib/splitclient-rb/constants.rb +16 -0
  61. data/lib/splitclient-rb/engine/api/client.rb +87 -0
  62. data/lib/splitclient-rb/engine/api/events.rb +57 -0
  63. data/lib/splitclient-rb/engine/api/faraday_middleware/gzip.rb +58 -0
  64. data/lib/splitclient-rb/engine/api/impressions.rb +79 -0
  65. data/lib/splitclient-rb/engine/api/segments.rb +78 -0
  66. data/lib/splitclient-rb/engine/api/splits.rb +139 -0
  67. data/lib/splitclient-rb/engine/api/telemetry_api.rb +47 -0
  68. data/lib/splitclient-rb/engine/auth_api_client.rb +100 -0
  69. data/lib/splitclient-rb/engine/back_off.rb +26 -0
  70. data/lib/splitclient-rb/engine/common/impressions_counter.rb +45 -0
  71. data/lib/splitclient-rb/engine/common/impressions_manager.rb +165 -0
  72. data/lib/splitclient-rb/engine/common/noop_impressions_counter.rb +27 -0
  73. data/lib/{splitclient-engine → splitclient-rb/engine}/evaluator/splitter.rb +35 -22
  74. data/lib/splitclient-rb/engine/events/events_delivery.rb +20 -0
  75. data/lib/splitclient-rb/engine/events/events_manager.rb +194 -0
  76. data/lib/splitclient-rb/engine/events/events_manager_config.rb +96 -0
  77. data/lib/splitclient-rb/engine/events/events_task.rb +50 -0
  78. data/lib/splitclient-rb/engine/events/noop_events_queue.rb +13 -0
  79. data/lib/splitclient-rb/engine/fallback_treatment_calculator.rb +48 -0
  80. data/lib/splitclient-rb/engine/impressions/noop_unique_keys_tracker.rb +17 -0
  81. data/lib/splitclient-rb/engine/impressions/unique_keys_tracker.rb +144 -0
  82. data/lib/{splitclient-engine → splitclient-rb/engine}/matchers/all_keys_matcher.rb +10 -21
  83. data/lib/splitclient-rb/engine/matchers/between_matcher.rb +47 -0
  84. data/lib/splitclient-rb/engine/matchers/between_semver_matcher.rb +33 -0
  85. data/lib/{splitclient-engine → splitclient-rb/engine}/matchers/combiners.rb +4 -6
  86. data/lib/splitclient-rb/engine/matchers/combining_matcher.rb +80 -0
  87. data/lib/splitclient-rb/engine/matchers/contains_all_matcher.rb +20 -0
  88. data/lib/splitclient-rb/engine/matchers/contains_any_matcher.rb +16 -0
  89. data/lib/splitclient-rb/engine/matchers/contains_matcher.rb +43 -0
  90. data/lib/splitclient-rb/engine/matchers/dependency_matcher.rb +26 -0
  91. data/lib/splitclient-rb/engine/matchers/ends_with_matcher.rb +42 -0
  92. data/lib/splitclient-rb/engine/matchers/equal_to_boolean_matcher.rb +37 -0
  93. data/lib/splitclient-rb/engine/matchers/equal_to_matcher.rb +44 -0
  94. data/lib/splitclient-rb/engine/matchers/equal_to_semver_matcher.rb +28 -0
  95. data/lib/splitclient-rb/engine/matchers/equal_to_set_matcher.rb +16 -0
  96. data/lib/splitclient-rb/engine/matchers/greater_than_or_equal_to_matcher.rb +43 -0
  97. data/lib/splitclient-rb/engine/matchers/greater_than_or_equal_to_semver_matcher.rb +28 -0
  98. data/lib/splitclient-rb/engine/matchers/in_list_semver_matcher.rb +36 -0
  99. data/lib/splitclient-rb/engine/matchers/less_than_or_equal_to_matcher.rb +43 -0
  100. data/lib/splitclient-rb/engine/matchers/less_than_or_equal_to_semver_matcher.rb +28 -0
  101. data/lib/splitclient-rb/engine/matchers/matcher.rb +52 -0
  102. data/lib/splitclient-rb/engine/matchers/matches_string_matcher.rb +29 -0
  103. data/lib/splitclient-rb/engine/matchers/negation_matcher.rb +47 -0
  104. data/lib/splitclient-rb/engine/matchers/part_of_set_matcher.rb +22 -0
  105. data/lib/splitclient-rb/engine/matchers/prerequisites_matcher.rb +31 -0
  106. data/lib/splitclient-rb/engine/matchers/rule_based_segment_matcher.rb +78 -0
  107. data/lib/splitclient-rb/engine/matchers/semver.rb +201 -0
  108. data/lib/splitclient-rb/engine/matchers/set_matcher.rb +27 -0
  109. data/lib/splitclient-rb/engine/matchers/starts_with_matcher.rb +40 -0
  110. data/lib/splitclient-rb/engine/matchers/user_defined_segment_matcher.rb +28 -0
  111. data/lib/splitclient-rb/engine/matchers/whitelist_matcher.rb +66 -0
  112. data/lib/splitclient-rb/engine/metrics/binary_search_latency_tracker.rb +66 -0
  113. data/lib/splitclient-rb/engine/models/evaluation_options.rb +9 -0
  114. data/lib/splitclient-rb/engine/models/event_active_subscriptions.rb +14 -0
  115. data/lib/splitclient-rb/engine/models/events_metadata.rb +10 -0
  116. data/lib/splitclient-rb/engine/models/fallback_treatment.rb +11 -0
  117. data/lib/splitclient-rb/engine/models/fallback_treatments_configuration.rb +36 -0
  118. data/lib/splitclient-rb/engine/models/label.rb +10 -0
  119. data/lib/splitclient-rb/engine/models/sdk_event.rb +4 -0
  120. data/lib/splitclient-rb/engine/models/sdk_event_type.rb +4 -0
  121. data/lib/splitclient-rb/engine/models/sdk_internal_event.rb +8 -0
  122. data/lib/splitclient-rb/engine/models/sdk_internal_event_notification.rb +16 -0
  123. data/lib/splitclient-rb/engine/models/segment_type.rb +4 -0
  124. data/lib/splitclient-rb/engine/models/split.rb +17 -0
  125. data/lib/splitclient-rb/engine/models/split_http_response.rb +19 -0
  126. data/lib/splitclient-rb/engine/models/treatment.rb +3 -0
  127. data/lib/splitclient-rb/engine/models/valid_sdk_event.rb +14 -0
  128. data/lib/splitclient-rb/engine/parser/condition.rb +271 -0
  129. data/lib/splitclient-rb/engine/parser/evaluator.rb +112 -0
  130. data/lib/{splitclient-engine → splitclient-rb/engine}/parser/partition.rb +2 -4
  131. data/lib/splitclient-rb/engine/push_manager.rb +66 -0
  132. data/lib/splitclient-rb/engine/status_manager.rb +39 -0
  133. data/lib/splitclient-rb/engine/sync_manager.rb +183 -0
  134. data/lib/splitclient-rb/engine/synchronizer.rb +231 -0
  135. data/lib/splitclient-rb/exceptions.rb +26 -0
  136. data/lib/splitclient-rb/helpers/decryption_helper.rb +25 -0
  137. data/lib/splitclient-rb/helpers/evaluator_helper.rb +37 -0
  138. data/lib/splitclient-rb/helpers/repository_helper.rb +61 -0
  139. data/lib/splitclient-rb/helpers/thread_helper.rb +24 -0
  140. data/lib/splitclient-rb/helpers/util.rb +26 -0
  141. data/lib/splitclient-rb/managers/split_manager.rb +121 -0
  142. data/lib/splitclient-rb/spec.rb +9 -0
  143. data/lib/splitclient-rb/split_config.rb +591 -47
  144. data/lib/splitclient-rb/split_factory.rb +284 -0
  145. data/lib/splitclient-rb/split_factory_builder.rb +7 -0
  146. data/lib/splitclient-rb/split_factory_registry.rb +63 -0
  147. data/lib/splitclient-rb/split_logger.rb +23 -0
  148. data/lib/splitclient-rb/sse/event_source/client.rb +264 -0
  149. data/lib/splitclient-rb/sse/event_source/event_parser.rb +65 -0
  150. data/lib/splitclient-rb/sse/event_source/event_types.rb +15 -0
  151. data/lib/splitclient-rb/sse/event_source/stream_data.rb +22 -0
  152. data/lib/splitclient-rb/sse/notification_manager_keeper.rb +84 -0
  153. data/lib/splitclient-rb/sse/notification_processor.rb +48 -0
  154. data/lib/splitclient-rb/sse/sse_handler.rb +44 -0
  155. data/lib/splitclient-rb/sse/workers/segments_worker.rb +62 -0
  156. data/lib/splitclient-rb/sse/workers/splits_worker.rb +153 -0
  157. data/lib/splitclient-rb/telemetry/domain/constants.rb +48 -0
  158. data/lib/splitclient-rb/telemetry/domain/structs.rb +35 -0
  159. data/lib/splitclient-rb/telemetry/evaluation_consumer.rb +14 -0
  160. data/lib/splitclient-rb/telemetry/evaluation_producer.rb +21 -0
  161. data/lib/splitclient-rb/telemetry/init_consumer.rb +14 -0
  162. data/lib/splitclient-rb/telemetry/init_producer.rb +19 -0
  163. data/lib/splitclient-rb/telemetry/memory/memory_evaluation_consumer.rb +32 -0
  164. data/lib/splitclient-rb/telemetry/memory/memory_evaluation_producer.rb +24 -0
  165. data/lib/splitclient-rb/telemetry/memory/memory_init_consumer.rb +28 -0
  166. data/lib/splitclient-rb/telemetry/memory/memory_init_producer.rb +34 -0
  167. data/lib/splitclient-rb/telemetry/memory/memory_runtime_consumer.rb +119 -0
  168. data/lib/splitclient-rb/telemetry/memory/memory_runtime_producer.rb +87 -0
  169. data/lib/splitclient-rb/telemetry/memory/memory_synchronizer.rb +213 -0
  170. data/lib/splitclient-rb/telemetry/redis/redis_evaluation_producer.rb +38 -0
  171. data/lib/splitclient-rb/telemetry/redis/redis_init_producer.rb +37 -0
  172. data/lib/splitclient-rb/telemetry/redis/redis_synchronizer.rb +27 -0
  173. data/lib/splitclient-rb/telemetry/runtime_consumer.rb +25 -0
  174. data/lib/splitclient-rb/telemetry/runtime_producer.rb +25 -0
  175. data/lib/splitclient-rb/telemetry/storages/memory.rb +159 -0
  176. data/lib/splitclient-rb/telemetry/sync_task.rb +36 -0
  177. data/lib/splitclient-rb/telemetry/synchronizer.rb +33 -0
  178. data/lib/splitclient-rb/utilitites.rb +49 -0
  179. data/lib/splitclient-rb/validators.rb +361 -0
  180. data/lib/splitclient-rb/version.rb +1 -1
  181. data/lib/splitclient-rb.rb +177 -25
  182. data/sonar-project.properties +6 -0
  183. data/splitclient-rb.gemspec +53 -26
  184. data/tasks/benchmark_get_treatment.rake +31 -17
  185. data/tasks/irb.rake +6 -0
  186. metadata +411 -86
  187. data/NEWS +0 -9
  188. data/lib/splitclient-cache/local_store.rb +0 -45
  189. data/lib/splitclient-engine/impressions/impressions.rb +0 -79
  190. data/lib/splitclient-engine/matchers/between_matcher.rb +0 -48
  191. data/lib/splitclient-engine/matchers/combining_matcher.rb +0 -94
  192. data/lib/splitclient-engine/matchers/equal_to_matcher.rb +0 -48
  193. data/lib/splitclient-engine/matchers/greater_than_or_equal_to_matcher.rb +0 -48
  194. data/lib/splitclient-engine/matchers/less_than_or_equal_to_matcher.rb +0 -48
  195. data/lib/splitclient-engine/matchers/negation_matcher.rb +0 -54
  196. data/lib/splitclient-engine/matchers/user_defined_segment_matcher.rb +0 -61
  197. data/lib/splitclient-engine/matchers/whitelist_matcher.rb +0 -64
  198. data/lib/splitclient-engine/metrics/binary_search_latency_tracker.rb +0 -122
  199. data/lib/splitclient-engine/metrics/metrics.rb +0 -158
  200. data/lib/splitclient-engine/parser/condition.rb +0 -143
  201. data/lib/splitclient-engine/parser/segment.rb +0 -84
  202. data/lib/splitclient-engine/parser/segment_parser.rb +0 -46
  203. data/lib/splitclient-engine/parser/split.rb +0 -68
  204. data/lib/splitclient-engine/parser/split_adapter.rb +0 -433
  205. data/lib/splitclient-engine/parser/split_parser.rb +0 -139
  206. data/lib/splitclient-engine/partitions/treatments.rb +0 -40
  207. data/lib/splitclient-rb/split_client.rb +0 -156
  208. data/lib/splitclient-rb_utilitites.rb +0 -26
  209. data/tasks/console.rake +0 -4
  210. data/tasks/rspec.rake +0 -3
@@ -1,27 +1,179 @@
1
+ require 'forwardable'
2
+
1
3
  require 'splitclient-rb/version'
2
- require 'splitclient-rb/split_client'
4
+
5
+ require 'splitclient-rb/constants'
6
+ require 'splitclient-rb/exceptions'
7
+ require 'splitclient-rb/cache/routers/impression_router'
8
+ require 'splitclient-rb/cache/adapters/memory_adapters/map_adapter'
9
+ require 'splitclient-rb/cache/adapters/memory_adapters/queue_adapter'
10
+ require 'splitclient-rb/cache/adapters/cache_adapter'
11
+ require 'splitclient-rb/cache/adapters/memory_adapter'
12
+ require 'splitclient-rb/cache/adapters/redis_adapter'
13
+ require 'splitclient-rb/cache/fetchers/segment_fetcher'
14
+ require 'splitclient-rb/cache/fetchers/split_fetcher'
15
+ require 'splitclient-rb/cache/filter/bloom_filter'
16
+ require 'splitclient-rb/cache/filter/filter_adapter'
17
+ require 'splitclient-rb/cache/filter/flag_set_filter'
18
+ require 'splitclient-rb/cache/hashers/impression_hasher'
19
+ require 'splitclient-rb/cache/observers/impression_observer'
20
+ require 'splitclient-rb/cache/observers/noop_impression_observer'
21
+ require 'splitclient-rb/cache/repositories/repository'
22
+ require 'splitclient-rb/cache/repositories/segments_repository'
23
+ require 'splitclient-rb/cache/repositories/splits_repository'
24
+ require 'splitclient-rb/cache/repositories/events_repository'
25
+ require 'splitclient-rb/cache/repositories/impressions_repository'
26
+ require 'splitclient-rb/cache/repositories/rule_based_segments_repository'
27
+ require 'splitclient-rb/cache/repositories/events/memory_repository'
28
+ require 'splitclient-rb/cache/repositories/events/redis_repository'
29
+ require 'splitclient-rb/cache/repositories/flag_sets/memory_repository'
30
+ require 'splitclient-rb/cache/repositories/flag_sets/redis_repository'
31
+ require 'splitclient-rb/cache/repositories/impressions/memory_repository'
32
+ require 'splitclient-rb/cache/repositories/impressions/redis_repository'
33
+ require 'splitclient-rb/cache/senders/impressions_formatter'
34
+ require 'splitclient-rb/cache/senders/impressions_sender'
35
+ require 'splitclient-rb/cache/senders/events_sender'
36
+ require 'splitclient-rb/cache/senders/impressions_count_sender'
37
+ require 'splitclient-rb/cache/senders/localhost_repo_cleaner'
38
+ require 'splitclient-rb/cache/senders/impressions_sender_adapter'
39
+ require 'splitclient-rb/cache/senders/impressions_adapter/memory_sender'
40
+ require 'splitclient-rb/cache/senders/impressions_adapter/redis_sender'
41
+ require 'splitclient-rb/cache/stores/localhost_split_builder'
42
+ require 'splitclient-rb/cache/stores/localhost_split_store'
43
+ require 'splitclient-rb/cache/stores/store_utils'
44
+
45
+ require 'splitclient-rb/clients/split_client'
46
+ require 'splitclient-rb/managers/split_manager'
47
+ require 'splitclient-rb/helpers/thread_helper'
48
+ require 'splitclient-rb/helpers/decryption_helper'
49
+ require 'splitclient-rb/helpers/util'
50
+ require 'splitclient-rb/helpers/repository_helper'
51
+ require 'splitclient-rb/helpers/evaluator_helper'
52
+ require 'splitclient-rb/split_factory'
53
+ require 'splitclient-rb/split_factory_builder'
3
54
  require 'splitclient-rb/split_config'
4
- require 'splitclient-cache/local_store'
5
- require 'splitclient-engine/parser/split'
6
- require 'splitclient-engine/parser/condition'
7
- require 'splitclient-engine/parser/partition'
8
- require 'splitclient-engine/parser/segment'
9
- require 'splitclient-engine/parser/split_adapter'
10
- require 'splitclient-engine/parser/split_parser'
11
- require 'splitclient-engine/parser/segment_parser'
12
- require 'splitclient-engine/partitions/treatments'
13
- require 'splitclient-engine/matchers/combiners'
14
- require 'splitclient-engine/matchers/combining_matcher'
15
- require 'splitclient-engine/matchers/all_keys_matcher'
16
- require 'splitclient-engine/matchers/negation_matcher'
17
- require 'splitclient-engine/matchers/user_defined_segment_matcher'
18
- require 'splitclient-engine/matchers/whitelist_matcher'
19
- require 'splitclient-engine/matchers/equal_to_matcher'
20
- require 'splitclient-engine/matchers/greater_than_or_equal_to_matcher'
21
- require 'splitclient-engine/matchers/less_than_or_equal_to_matcher'
22
- require 'splitclient-engine/matchers/between_matcher'
23
- require 'splitclient-engine/evaluator/splitter'
24
- require 'splitclient-engine/impressions/impressions'
25
- require 'splitclient-engine/metrics/metrics'
26
- require 'splitclient-engine/metrics/binary_search_latency_tracker'
27
- require 'splitclient-rb_utilitites'
55
+ require 'splitclient-rb/split_logger'
56
+ require 'splitclient-rb/validators'
57
+ require 'splitclient-rb/split_factory_registry'
58
+
59
+ require 'splitclient-rb/engine/api/faraday_middleware/gzip'
60
+ require 'splitclient-rb/engine/api/client'
61
+ require 'splitclient-rb/engine/api/impressions'
62
+ require 'splitclient-rb/engine/api/segments'
63
+ require 'splitclient-rb/engine/api/splits'
64
+ require 'splitclient-rb/engine/api/events'
65
+ require 'splitclient-rb/engine/api/telemetry_api'
66
+ require 'splitclient-rb/engine/common/impressions_counter'
67
+ require 'splitclient-rb/engine/common/impressions_manager'
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'
74
+ require 'splitclient-rb/engine/parser/condition'
75
+ require 'splitclient-rb/engine/parser/partition'
76
+ require 'splitclient-rb/engine/parser/evaluator'
77
+ require 'splitclient-rb/engine/matchers/matcher'
78
+ require 'splitclient-rb/engine/matchers/combiners'
79
+ require 'splitclient-rb/engine/matchers/combining_matcher'
80
+ require 'splitclient-rb/engine/matchers/all_keys_matcher'
81
+ require 'splitclient-rb/engine/matchers/negation_matcher'
82
+ require 'splitclient-rb/engine/matchers/user_defined_segment_matcher'
83
+ require 'splitclient-rb/engine/matchers/whitelist_matcher'
84
+ require 'splitclient-rb/engine/matchers/equal_to_matcher'
85
+ require 'splitclient-rb/engine/matchers/greater_than_or_equal_to_matcher'
86
+ require 'splitclient-rb/engine/matchers/less_than_or_equal_to_matcher'
87
+ require 'splitclient-rb/engine/matchers/between_matcher'
88
+ require 'splitclient-rb/engine/matchers/set_matcher'
89
+ require 'splitclient-rb/engine/matchers/part_of_set_matcher'
90
+ require 'splitclient-rb/engine/matchers/equal_to_set_matcher'
91
+ require 'splitclient-rb/engine/matchers/contains_any_matcher'
92
+ require 'splitclient-rb/engine/matchers/contains_all_matcher'
93
+ require 'splitclient-rb/engine/matchers/starts_with_matcher'
94
+ require 'splitclient-rb/engine/matchers/ends_with_matcher'
95
+ require 'splitclient-rb/engine/matchers/contains_matcher'
96
+ require 'splitclient-rb/engine/matchers/dependency_matcher'
97
+ require 'splitclient-rb/engine/matchers/equal_to_boolean_matcher'
98
+ require 'splitclient-rb/engine/matchers/equal_to_matcher'
99
+ require 'splitclient-rb/engine/matchers/matches_string_matcher'
100
+ require 'splitclient-rb/engine/matchers/semver'
101
+ require 'splitclient-rb/engine/matchers/equal_to_semver_matcher'
102
+ require 'splitclient-rb/engine/matchers/greater_than_or_equal_to_semver_matcher'
103
+ require 'splitclient-rb/engine/matchers/less_than_or_equal_to_semver_matcher'
104
+ require 'splitclient-rb/engine/matchers/between_semver_matcher'
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'
108
+ require 'splitclient-rb/engine/evaluator/splitter'
109
+ require 'splitclient-rb/engine/impressions/noop_unique_keys_tracker'
110
+ require 'splitclient-rb/engine/impressions/unique_keys_tracker'
111
+ require 'splitclient-rb/engine/metrics/binary_search_latency_tracker'
112
+ require 'splitclient-rb/engine/models/split'
113
+ require 'splitclient-rb/engine/models/label'
114
+ require 'splitclient-rb/engine/models/segment_type'
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'
127
+ require 'splitclient-rb/engine/auth_api_client'
128
+ require 'splitclient-rb/engine/back_off'
129
+ require 'splitclient-rb/engine/fallback_treatment_calculator.rb'
130
+ require 'splitclient-rb/engine/push_manager'
131
+ require 'splitclient-rb/engine/status_manager'
132
+ require 'splitclient-rb/engine/sync_manager'
133
+ require 'splitclient-rb/engine/synchronizer'
134
+ require 'splitclient-rb/utilitites'
135
+
136
+ require 'splitclient-rb/spec.rb'
137
+
138
+ # SSE
139
+ require 'splitclient-rb/sse/event_source/client'
140
+ require 'splitclient-rb/sse/event_source/event_parser'
141
+ require 'splitclient-rb/sse/event_source/event_types'
142
+ require 'splitclient-rb/sse/event_source/stream_data'
143
+ require 'splitclient-rb/sse/workers/segments_worker'
144
+ require 'splitclient-rb/sse/workers/splits_worker'
145
+ require 'splitclient-rb/sse/notification_manager_keeper'
146
+ require 'splitclient-rb/sse/notification_processor'
147
+ require 'splitclient-rb/sse/sse_handler'
148
+
149
+ # Telemetry
150
+ require 'splitclient-rb/telemetry/domain/constants'
151
+ require 'splitclient-rb/telemetry/domain/structs'
152
+ require 'splitclient-rb/telemetry/storages/memory'
153
+ require 'splitclient-rb/telemetry/evaluation_consumer'
154
+ require 'splitclient-rb/telemetry/evaluation_producer'
155
+ require 'splitclient-rb/telemetry/init_consumer'
156
+ require 'splitclient-rb/telemetry/init_producer'
157
+ require 'splitclient-rb/telemetry/runtime_consumer'
158
+ require 'splitclient-rb/telemetry/runtime_producer'
159
+ require 'splitclient-rb/telemetry/sync_task'
160
+ require 'splitclient-rb/telemetry/synchronizer'
161
+ require 'splitclient-rb/telemetry/memory/memory_evaluation_consumer'
162
+ require 'splitclient-rb/telemetry/memory/memory_evaluation_producer'
163
+ require 'splitclient-rb/telemetry/memory/memory_init_consumer'
164
+ require 'splitclient-rb/telemetry/memory/memory_init_producer'
165
+ require 'splitclient-rb/telemetry/memory/memory_runtime_consumer'
166
+ require 'splitclient-rb/telemetry/memory/memory_runtime_producer'
167
+ require 'splitclient-rb/telemetry/memory/memory_synchronizer'
168
+ require 'splitclient-rb/telemetry/redis/redis_evaluation_producer'
169
+ require 'splitclient-rb/telemetry/redis/redis_init_producer'
170
+ require 'splitclient-rb/telemetry/redis/redis_synchronizer'
171
+
172
+ # C extension
173
+ require 'murmurhash/murmurhash_mri'
174
+
175
+ module SplitIoClient
176
+ def self.root
177
+ File.dirname(__dir__)
178
+ end
179
+ end
@@ -0,0 +1,6 @@
1
+ sonar.projectKey=ruby-client
2
+ sonar.projectKey=ruby-client
3
+ sonar.sources=lib
4
+ sonar.tests=spec
5
+ sonar.java.source=17
6
+ sonar.ruby.coverage.reportPaths=coverage/.resultset.sonarqube.json
@@ -1,36 +1,63 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'splitclient-rb/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "splitclient-rb"
8
+ spec.name = 'splitclient-rb'
8
9
  spec.version = SplitIoClient::VERSION
9
- spec.authors = ["Split Software"]
10
- spec.email = ["pato@split.io"]
10
+ spec.authors = ['Split Software']
11
+ spec.email = ['mauro.sanz@split.io']
12
+ spec.summary = 'Ruby client for split SDK.'
13
+ spec.description = 'Ruby client for using split SDK.'
14
+ spec.homepage = 'https://github.com/splitio/ruby-client'
15
+ spec.license = 'Apache-2.0'
11
16
 
12
- spec.summary = %q{Ruby client for split SDK.}
13
- spec.description = %q{Ruby client for using split SDK.}
14
- spec.homepage = "https://github.com/splitio/ruby-client"
15
- spec.license = "Apache 2.0"
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec|features|ext)/}) }
18
+ spec.require_paths = ['lib']
19
+ spec.required_ruby_version = '>= 2.5.0'
16
20
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
21
+ if defined?(JRUBY_VERSION)
22
+ spec.platform = 'java'
23
+ spec.files.concat(
24
+ %w[ext/murmurhash/MurmurHash3.java
25
+ lib/murmurhash/murmurhash.jar]
26
+ )
27
+ else
28
+ spec.files.concat(
29
+ %w[ext/murmurhash/3_x86_32.c
30
+ ext/murmurhash/3_x64_128.c
31
+ ext/murmurhash/extconf.rb
32
+ ext/murmurhash/murmurhash.c
33
+ ext/murmurhash/murmurhash.h]
34
+ )
35
+ spec.extensions = ['ext/murmurhash/extconf.rb']
36
+ end
21
37
 
22
- spec.add_development_dependency "bundler", "~> 1.11"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rspec"
25
- spec.add_development_dependency "webmock"
26
- spec.add_development_dependency "byebug"
27
- spec.add_development_dependency "simplecov"
38
+ spec.add_development_dependency 'allocation_stats', '~> 0.1'
39
+ spec.add_development_dependency 'bundler', '~> 2.2'
40
+ spec.add_development_dependency 'byebug', '~> 11.1'
41
+ spec.add_development_dependency 'pry', '~> 0.14'
42
+ spec.add_development_dependency 'pry-nav', '~> 1.0'
43
+ spec.add_development_dependency 'rake', '~> 13.0'
44
+ spec.add_development_dependency 'rake-compiler', '~> 1.1'
45
+ spec.add_development_dependency 'rspec', '~> 3.10'
46
+ spec.add_development_dependency 'rubocop', '1.28.2'
47
+ spec.add_development_dependency 'simplecov', '~> 0.20'
48
+ spec.add_development_dependency 'simplecov-json', '~> 0.2'
49
+ spec.add_development_dependency 'timecop', '~> 0.9'
50
+ spec.add_development_dependency 'webmock', '~> 3.24'
51
+ spec.add_development_dependency 'webrick', '~> 1.8.2'
28
52
 
29
- spec.add_runtime_dependency "json", "~> 1.8"
30
- spec.add_runtime_dependency "thread_safe"
31
- spec.add_runtime_dependency "concurrent-ruby"
32
- spec.add_runtime_dependency "faraday"
33
- spec.add_runtime_dependency "faraday-http-cache"
34
- spec.add_runtime_dependency "faraday_middleware"
35
- spec.add_runtime_dependency "net-http-persistent"
53
+ spec.add_runtime_dependency 'bitarray', '~> 1.3'
54
+ spec.add_runtime_dependency 'concurrent-ruby', '~> 1.0'
55
+ spec.add_runtime_dependency 'faraday', '>= 1.1', '< 3.0'
56
+ spec.add_runtime_dependency 'faraday-net_http_persistent', '>= 1.0', '< 3.0'
57
+ spec.add_runtime_dependency 'json', '>= 1.8', '< 3.0'
58
+ spec.add_runtime_dependency 'jwt', '>= 3.1'
59
+ spec.add_runtime_dependency 'lru_redux', '~> 1.1'
60
+ spec.add_runtime_dependency 'net-http-persistent', '>= 2.9', '< 5.0'
61
+ spec.add_runtime_dependency 'redis', '>= 4.0.0', '< 6.0'
62
+ spec.add_runtime_dependency 'thread_safe', '~> 0.3'
36
63
  end
@@ -1,13 +1,17 @@
1
- desc "Benchmark the get_treatment method call in 4 threads"
1
+ # frozen_string_literal: true
2
+
3
+ desc 'Benchmark the get_treatment method call in 4 threads'
2
4
 
3
5
  # Usage:
4
- # rake concurrent_benchmark api_key=YOUR_API_KEY base_uri=YOUR_API_BASE_URI [iterations=NUMBER_OF_ITERATIONS] [user_id=A_USER_ID] [feature_id=A_FEATURE_ID]
6
+ # rake concurrent_benchmark api_key=YOUR_API_KEY base_uri=YOUR_API_BASE_URI
7
+ # [iterations=NUMBER_OF_ITERATIONS] [user_id=A_USER_ID] [feature_id=A_FEATURE_ID]
5
8
  task :concurrent_benchmark do
6
9
  require 'benchmark'
7
10
  require 'splitclient-rb'
8
11
 
9
- usage_message = "Usage: rake concurrent_benchmark api_key=YOUR_API_KEY base_uri=YOUR_API_BASE_URI [iterations=NUMBER_OF_ITERATIONS] [user_id=A_USER_ID] [feature_id=A_FEATURE_ID]"
10
- valid_params = validate_params
12
+ usage_message = 'Usage: rake concurrent_benchmark api_key=YOUR_API_KEY base_uri=YOUR_API_BASE_URI \
13
+ [iterations=NUMBER_OF_ITERATIONS] [user_id=A_USER_ID] [feature_id=A_FEATURE_ID]'
14
+
11
15
  if validate_params
12
16
  execute
13
17
  else
@@ -19,25 +23,35 @@ def validate_params
19
23
  !ENV['api_key'].nil? && !ENV['base_uri'].nil?
20
24
  end
21
25
 
22
- def execute
23
- api_key = ENV['api_key'].nil? ? "fake_api_key" : ENV['api_key']
24
- base_uri = ENV['base_uri'].nil? ? "fake/api/" : ENV['base_uri']
25
- iterations = ENV['iterations'].nil? ? 1000000 : ENV['iterations'].to_i
26
- user_id = ENV['user_id'].nil? ? "fake_id_1" : ENV['user_id']
27
- feature_id = ENV['feature_id'].nil? ? "sample_feature" : ENV['feature_id']
26
+ def split_client
27
+ api_key = ENV['api_key'].nil? ? 'fake_api_key' : ENV['api_key']
28
+ base_uri = ENV['base_uri'].nil? ? 'fake/api/' : ENV['base_uri']
29
+ SplitIoClient::SplitFactory.new(api_key, base_uri: base_uri, logger: Logger.new('/dev/null').client)
30
+ end
28
31
 
29
- threads = []
30
- times_per_thread = iterations / 4
31
- split_client = SplitIoClient::SplitClient.new(api_key, {base_uri: base_uri, logger: Logger.new("/dev/null") })
32
+ def times_per_thread
33
+ iterations = ENV['iterations'].nil? ? 1_000_000 : ENV['iterations'].to_i
34
+ iterations / 4
35
+ end
32
36
 
33
- puts Benchmark.measure{
34
- 4.times do |i|
37
+ def feature_id
38
+ ENV['feature_id'].nil? ? 'sample_feature' : ENV['feature_id']
39
+ end
40
+
41
+ def user_id
42
+ ENV['user_id'].nil? ? 'fake_id_1' : ENV['user_id']
43
+ end
44
+
45
+ def execute
46
+ threads = []
47
+ puts Benchmark.measure do
48
+ 4.times do |_i|
35
49
  threads << Thread.new do
36
50
  times_per_thread.times do
37
- split_client.get_treatment user_id, feature_id, {attr: 123}
51
+ split_client.get_treatment user_id, feature_id, attr: 123
38
52
  end
39
53
  end
40
54
  end
41
55
  threads.map(&:join)
42
- }
56
+ end
43
57
  end
data/tasks/irb.rake ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ desc 'Open an irb session preloaded with this library'
4
+ task :irb do
5
+ sh 'irb -rubygems -I lib -r splitclient-rb.rb'
6
+ end