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,158 +0,0 @@
1
- module SplitIoClient
2
-
3
- #
4
- # class to handle cached metrics
5
- #
6
- class Metrics < NoMethodError
7
-
8
- @counter
9
- @delta
10
-
11
- #
12
- # cached latencies
13
- #
14
- # @return [object] array of latencies
15
- attr_accessor :latencies
16
-
17
- #
18
- # cached counts
19
- #
20
- # @return [object] array of counts
21
- attr_accessor :counts
22
-
23
- #
24
- # cached gauges
25
- #
26
- # @return [object] array of gauges
27
- attr_accessor :gauges
28
-
29
- #
30
- # quese size for cached arrays
31
- #
32
- # @return [int] queue size
33
- attr_accessor :queue_size
34
-
35
- def initialize(queue_size)
36
- @latencies = []
37
- @counts = []
38
- @gauges = []
39
- @queue_size = queue_size
40
- @binary_search = SplitIoClient::BinarySearchLatencyTracker.new
41
- end
42
-
43
- #
44
- # creates a new entry in the array for cached counts
45
- #
46
- # @param counter [string] name of the counter
47
- # @delta [int] value of the counter
48
- #
49
- # @return void
50
- def count(counter, delta)
51
- return if delta <= 0
52
-
53
- return if (counter.nil? || counter.strip.empty?)
54
-
55
- counter_hash = @counts.find { |c| c[:name] == counter }
56
- if counter_hash.nil?
57
- counter_delta = SumAndCount.new
58
- counter_delta.add_delta(delta)
59
- @counts << {name: counter, delta: counter_delta}
60
- else
61
- counter_hash[:delta].add_delta(delta)
62
- end
63
- end
64
-
65
- #
66
- # creates a new entry in the array for cached time metrics
67
- #
68
- # @param operation [string] name of the operation
69
- # @time_in_ms [number] time in miliseconds
70
- #
71
- # @return void
72
- def time(operation, time_in_ms)
73
-
74
- if operation.nil? || operation.empty? || time_in_ms < 0
75
- return;
76
- end
77
-
78
- operation_hash = @latencies.find { |l| l[:operation] == operation }
79
- if operation_hash.nil?
80
- latencies_for_op = (operation == 'sdk.get_treatment') ? @binary_search.add_latency_millis(time_in_ms) : [time_in_ms]
81
- @latencies << {operation: operation, latencies: latencies_for_op}
82
- else
83
- latencies_for_op = (operation == 'sdk.get_treatment') ? @binary_search.add_latency_millis(time_in_ms) : operation_hash[:latencies].push(time_in_ms)
84
- end
85
- end
86
-
87
- #
88
- # creates a new entry in the array for cached gauges
89
- #
90
- # @param gauge [string] name of the gauge
91
- # @value [number] value of the gauge
92
- #
93
- # @return void
94
- def gauge(gauge, value)
95
- if gauge.nil? || gauge.empty?
96
- return
97
- end
98
-
99
- gauge_hash = @gauges.find { |g| g[:name] == gauge }
100
- if gauge_hash.nil?
101
- gauge_value = ValueAndCount.new
102
- gauge_value.set_value(value)
103
- @gauges << {name: gauge, value: gauge_value}
104
- else
105
- gauge_hash[:value].set_value(value)
106
- end
107
- end
108
-
109
- end
110
-
111
- #
112
- # small class to act as DTO for counts
113
- #
114
- class SumAndCount
115
- attr_reader :count
116
- attr_reader :sum
117
-
118
- def initialize
119
- @count = 0
120
- @sum = 0
121
- end
122
-
123
- def add_delta(delta)
124
- @count++
125
- @sum += delta
126
- end
127
-
128
- def clear
129
- @count = 0
130
- @sum = 0
131
- end
132
- end
133
-
134
- #
135
- # small class to act as DTO for gauges
136
- #
137
- class ValueAndCount
138
- attr_reader :count
139
- attr_reader :value
140
-
141
- def initialize
142
- @count = 0
143
- @value = 0
144
- end
145
-
146
- def set_value(value)
147
- @count += 1
148
- @value = value
149
- end
150
-
151
- def clear
152
- @count = 0
153
- @value = 0
154
- end
155
-
156
- end
157
-
158
- end
@@ -1,143 +0,0 @@
1
- module SplitIoClient
2
-
3
- #
4
- # acts as dto for a condition structure
5
- #
6
- class Condition < NoMethodError
7
-
8
- #
9
- # definition of the condition
10
- #
11
- # @returns [object] condition values
12
- attr_accessor :data
13
-
14
- def initialize(condition)
15
- @data = condition
16
- @partitions = set_partitions
17
- end
18
-
19
- #
20
- # @return [object] the combiner value for this condition
21
- def combiner
22
- @data[:matcherGroup][:combiner]
23
- end
24
-
25
- #
26
- # @return [object] the matcher value for this condition
27
- def matcher
28
- @data[:matcherGroup][:matchers].first[:matcherType]
29
- end
30
-
31
- #
32
- # @return [object] the matchers array value for this condition
33
- def matchers
34
- @data[:matcherGroup][:matchers]
35
- end
36
-
37
- #
38
- # @return [object] the segment for this condition in case it has a segment matcher
39
- def matcher_segment
40
- result = nil
41
- if self.matcher == 'IN_SEGMENT'
42
- result = (@data[:matcherGroup][:matchers].first[:userDefinedSegmentMatcherData])[:segmentName]
43
- end
44
- result
45
- end
46
-
47
- #
48
- # @return [object] the whitelist for this condition in case it has a whitelist matcher
49
- def matcher_whitelist
50
- result = nil
51
- if self.matcher == 'WHITELIST'
52
- is_user_whitelist = ( (@data[:matcherGroup][:matchers].first[:keySelector]).nil? || (@data[:matcherGroup][:matchers].first[:keySelector])[:attribute].nil? )
53
- #is_attribute_whitelist? = !is_user_whitelist?
54
- if is_user_whitelist
55
- result = (@data[:matcherGroup][:matchers].first[:whitelistMatcherData])[:whitelist]
56
- else
57
- attribute = (@data[:matcherGroup][:matchers].first[:keySelector])[:attribute]
58
- white_list = (@data[:matcherGroup][:matchers].first[:whitelistMatcherData])[:whitelist]
59
- result = {attribute: attribute, value: white_list}
60
- end
61
- end
62
- result
63
- end
64
-
65
- def matcher_equal
66
- result = nil
67
- if self.matcher == 'EQUAL_TO'
68
- attribute = (@data[:matcherGroup][:matchers].first[:keySelector])[:attribute]
69
- value = (@data[:matcherGroup][:matchers].first[:unaryNumericMatcherData])[:value]
70
- data_type = (@data[:matcherGroup][:matchers].first[:unaryNumericMatcherData])[:dataType]
71
- result = {attribute: attribute, value: value, data_type: data_type}
72
- end
73
- result
74
- end
75
-
76
- def matcher_greater_than_or_equal
77
- result = nil
78
- if self.matcher == 'GREATER_THAN_OR_EQUAL_TO'
79
- attribute = (@data[:matcherGroup][:matchers].first[:keySelector])[:attribute]
80
- value = (@data[:matcherGroup][:matchers].first[:unaryNumericMatcherData])[:value]
81
- data_type = (@data[:matcherGroup][:matchers].first[:unaryNumericMatcherData])[:dataType]
82
- result = {attribute: attribute, value: value, data_type: data_type}
83
- end
84
- result
85
- end
86
-
87
- def matcher_less_than_or_equal
88
- result = nil
89
- if self.matcher == 'LESS_THAN_OR_EQUAL_TO'
90
- attribute = (@data[:matcherGroup][:matchers].first[:keySelector])[:attribute]
91
- value = (@data[:matcherGroup][:matchers].first[:unaryNumericMatcherData])[:value]
92
- data_type = (@data[:matcherGroup][:matchers].first[:unaryNumericMatcherData])[:dataType]
93
- result = {attribute: attribute, value: value, data_type: data_type}
94
- end
95
- result
96
- end
97
-
98
- def matcher_between
99
- result = nil
100
- if self.matcher == 'BETWEEN'
101
- attribute = (@data[:matcherGroup][:matchers].first[:keySelector])[:attribute]
102
- start_value = (@data[:matcherGroup][:matchers].first[:betweenMatcherData])[:start]
103
- end_value = (@data[:matcherGroup][:matchers].first[:betweenMatcherData])[:end]
104
- data_type = (@data[:matcherGroup][:matchers].first[:betweenMatcherData])[:dataType]
105
- result = {attribute: attribute, start_value: start_value, end_value: end_value, data_type: data_type}
106
- end
107
- result
108
- end
109
-
110
- #
111
- # @return [object] the negate value for this condition
112
- def negate
113
- @data[:matcherGroup][:matchers].first[:negate]
114
- end
115
-
116
- #
117
- # @return [object] the array of partitions for this condition
118
- def partitions
119
- @partitions
120
- end
121
-
122
- #
123
- # converts the partitions hash for this condition into an array of partition objects
124
- #
125
- # @return [void]
126
- def set_partitions
127
- partitions_list = []
128
- @data[:partitions].each do |p|
129
- partition = SplitIoClient::Partition.new(p)
130
- partitions_list << partition
131
- end
132
- partitions_list
133
- end
134
-
135
- #
136
- # @return [boolean] true if the condition is empty false otherwise
137
- def is_empty?
138
- @data.empty? ? true : false
139
- end
140
-
141
- end
142
-
143
- end
@@ -1,84 +0,0 @@
1
- module SplitIoClient
2
-
3
- #
4
- # acts as dto for a segment structure
5
- #
6
- class Segment < NoMethodError
7
- #
8
- # definition of the segment
9
- #
10
- # @returns [object] segment values
11
- attr_accessor :data
12
-
13
- #
14
- # users for the segment
15
- #
16
- # @returns [object] array of user keys
17
- attr_accessor :users
18
-
19
- #
20
- # added users for the segment in a given time
21
- #
22
- # @returns [object] array of user keys that were added after the last segment fetch
23
- attr_accessor :added
24
-
25
- #
26
- # removed users for the segment in a given time
27
- #
28
- # @returns [object] array of user keys that were removed after the last segment fetch
29
- attr_accessor :removed
30
-
31
- def initialize(segment)
32
- @data = segment
33
- @added = @data[:added]
34
- @removed = @data[:removed]
35
- end
36
-
37
- #
38
- # @returns [string] name of the segment
39
- def name
40
- @data[:name]
41
- end
42
-
43
- #
44
- # @returns [int] since value fo the segment
45
- def since
46
- @data[:since]
47
- end
48
-
49
- #
50
- # @returns [int] till value fo the segment
51
- def till
52
- @data[:till]
53
- end
54
-
55
- #
56
- # @return [boolean] true if the condition is empty false otherwise
57
- def is_empty?
58
- @data.empty? ? true : false
59
- end
60
-
61
- #
62
- # updates the array of user keys valid for the segment, it's used after each segment fetch
63
- #
64
- # @param added [object] array of added user keys
65
- # @param removed [object] array of removed user keys
66
- #
67
- # @return [void]
68
- def refresh_users(added, removed)
69
- if @users.nil?
70
- @users = self.added
71
- else
72
- @added = added unless added.empty?
73
- @removed = removed unless removed.empty?
74
- self.removed.each do |r|
75
- @users.delete_if { |u| u == r }
76
- end
77
- self.added.each do |a|
78
- @users << a unless @users.include?(a)
79
- end
80
- end
81
- end
82
- end
83
-
84
- end
@@ -1,46 +0,0 @@
1
- module SplitIoClient
2
- #
3
- # helper class to parse fetched segments
4
- #
5
- class SegmentParser < NoMethodError
6
- #
7
- # segments data
8
- attr_accessor :segments
9
-
10
- #
11
- # since value for segments
12
- attr_accessor :since
13
-
14
- def initialize(logger)
15
- @segments = []
16
- @since = -1
17
- @logger = logger
18
- end
19
-
20
- #
21
- # method to get a segment by name
22
- #
23
- # @param name [string] segment name
24
- #
25
- # @return [object] segment object
26
- def get_segment(name)
27
- @segments.find { |s| s.name == name }
28
- end
29
-
30
- #
31
- # method to get all segment names within the structure
32
- #
33
- # @return [object] array of segment names
34
- def get_segment_names
35
- @segments.map { |seg| seg.name }
36
- end
37
-
38
- #
39
- # @return [boolean] true if the segment parser data is empty false otherwise
40
- def is_empty?
41
- @segments.empty? ? true : false
42
- end
43
-
44
- end
45
-
46
- end
@@ -1,68 +0,0 @@
1
- module SplitIoClient
2
- #
3
- # acts as dto for a split structure
4
- #
5
- class Split < NoMethodError
6
- #
7
- # definition of the split
8
- #
9
- # @returns [object] split values
10
- attr_accessor :data
11
-
12
- def initialize(split)
13
- @data = split
14
- @conditions = set_conditions
15
- end
16
-
17
- #
18
- # @returns [string] name of the split
19
- def name
20
- @data[:name]
21
- end
22
-
23
- #
24
- # @returns [int] seed value of the split
25
- def seed
26
- @data[:seed]
27
- end
28
-
29
- #
30
- # @returns [string] status value of the split
31
- def status
32
- @data[:status]
33
- end
34
-
35
- #
36
- # @returns [string] killed value of the split
37
- def killed?
38
- @data[:killed]
39
- end
40
-
41
- #
42
- # @returns [object] array of condition objects for this split
43
- def conditions
44
- @conditions
45
- end
46
-
47
- #
48
- # @return [boolean] true if the condition is empty false otherwise
49
- def is_empty?
50
- @data.empty? ? true : false
51
- end
52
-
53
- #
54
- # converts the conditions data into an array of condition objects for this split
55
- #
56
- # @return [object] array of condition objects
57
- def set_conditions
58
- conditions_list = []
59
- @data[:conditions].each do |c|
60
- condition = SplitIoClient::Condition.new(c)
61
- conditions_list << condition
62
- end
63
- conditions_list
64
- end
65
-
66
- end
67
-
68
- end