splitclient-rb 6.0.1.pre.rc2-java → 6.1.0-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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +12 -1
  3. data/.simplecov +1 -0
  4. data/CHANGES.txt +11 -1
  5. data/NEWS +6 -0
  6. data/README.md +2 -2
  7. data/lib/splitclient-rb.rb +1 -0
  8. data/lib/splitclient-rb/clients/split_client.rb +30 -9
  9. data/lib/splitclient-rb/engine/api/client.rb +8 -9
  10. data/lib/splitclient-rb/engine/api/events.rb +4 -2
  11. data/lib/splitclient-rb/engine/api/faraday_middleware/gzip.rb +10 -8
  12. data/lib/splitclient-rb/engine/api/impressions.rb +4 -2
  13. data/lib/splitclient-rb/engine/api/metrics.rb +5 -5
  14. data/lib/splitclient-rb/engine/api/segments.rb +5 -1
  15. data/lib/splitclient-rb/engine/api/splits.rb +4 -4
  16. data/lib/splitclient-rb/engine/matchers/all_keys_matcher.rb +8 -13
  17. data/lib/splitclient-rb/engine/matchers/between_matcher.rb +12 -23
  18. data/lib/splitclient-rb/engine/matchers/combiners.rb +3 -1
  19. data/lib/splitclient-rb/engine/matchers/combining_matcher.rb +16 -24
  20. data/lib/splitclient-rb/engine/matchers/contains_all_matcher.rb +10 -7
  21. data/lib/splitclient-rb/engine/matchers/contains_any_matcher.rb +7 -6
  22. data/lib/splitclient-rb/engine/matchers/contains_matcher.rb +19 -8
  23. data/lib/splitclient-rb/engine/matchers/dependency_matcher.rb +8 -3
  24. data/lib/splitclient-rb/engine/matchers/ends_with_matcher.rb +21 -6
  25. data/lib/splitclient-rb/engine/matchers/equal_to_boolean_matcher.rb +17 -8
  26. data/lib/splitclient-rb/engine/matchers/equal_to_matcher.rb +11 -23
  27. data/lib/splitclient-rb/engine/matchers/equal_to_set_matcher.rb +7 -6
  28. data/lib/splitclient-rb/engine/matchers/greater_than_or_equal_to_matcher.rb +13 -25
  29. data/lib/splitclient-rb/engine/matchers/less_than_or_equal_to_matcher.rb +13 -25
  30. data/lib/splitclient-rb/engine/matchers/matcher.rb +30 -0
  31. data/lib/splitclient-rb/engine/matchers/matches_string_matcher.rb +6 -2
  32. data/lib/splitclient-rb/engine/matchers/negation_matcher.rb +8 -22
  33. data/lib/splitclient-rb/engine/matchers/part_of_set_matcher.rb +10 -7
  34. data/lib/splitclient-rb/engine/matchers/set_matcher.rb +7 -1
  35. data/lib/splitclient-rb/engine/matchers/starts_with_matcher.rb +18 -5
  36. data/lib/splitclient-rb/engine/matchers/user_defined_segment_matcher.rb +7 -25
  37. data/lib/splitclient-rb/engine/matchers/whitelist_matcher.rb +33 -35
  38. data/lib/splitclient-rb/managers/split_manager.rb +10 -3
  39. data/lib/splitclient-rb/split_config.rb +34 -9
  40. data/lib/splitclient-rb/split_factory.rb +27 -0
  41. data/lib/splitclient-rb/validators.rb +104 -36
  42. data/lib/splitclient-rb/version.rb +1 -1
  43. metadata +6 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fbf56d603def3dfe5b67eb2faa5c556c42175a07
4
- data.tar.gz: 900920c3b528dc13d1166852cdc78a48ad656a26
3
+ metadata.gz: 661e69f3559516ebb5c65685575ebba3d3fe8d41
4
+ data.tar.gz: d1d7699e033aa18b6f066fb173d9c588ded8bd98
5
5
  SHA512:
6
- metadata.gz: 69d0c9f0795ad070e6cf07aa8c18c795342440dcf14700261b65207780cc3e52983e6830c9f825eca64931c58302baeed317b029fc9ef24b9f52163e2603f085
7
- data.tar.gz: d585a61da7d80fa25956a8fcf355d3e528dedd7f42172f37ffbed33522555780ae1b91ec7d9bc100dcce3d29878c8a767d0fc4532a4598945e79dd3ff6350ba1
6
+ metadata.gz: 2f12227a270840990875f92fd66cdf9e4719f92f8d81fc76f752b467f3071b4c5e7b74f6f81c69af1f8965e6c235f1ddec4d31d8e25790b10a48b708ca946fb2
7
+ data.tar.gz: 90f97178d5b3dc272ee7553fd331141c35bddb3a2eadd0e2715eb8a134cbf58fccd960c7ebc7525abc6c034104dacf951e75d8e23c08f95e934fbc89cf4a5df3
data/.rubocop.yml CHANGED
@@ -17,5 +17,16 @@ Naming/FileName:
17
17
  - splitclient-rb.gemspec
18
18
 
19
19
  AllCops:
20
+ TargetRubyVersion: 2.3.6
20
21
  Exclude:
21
- - lib/**/* #TODO Apply rubocop to the library
22
+ - lib/*
23
+ - lib/murmurhash/**/*
24
+ - lib/splitclient-rb/*
25
+ - lib/splitclient-rb/cache/**/*
26
+ - lib/splitclient-rb/clients/**/*
27
+ - lib/splitclient-rb/managers/**/*
28
+ - lib/splitclient-rb/engine/api/**/*
29
+ - lib/splitclient-rb/engine/evaluator/**/*
30
+ - lib/splitclient-rb/engine/metrics/**/*
31
+ - lib/splitclient-rb/engine/models/**/*
32
+ - lib/splitclient-rb/engine/parser/**/*
data/.simplecov ADDED
@@ -0,0 +1 @@
1
+ SimpleCov.start { add_filter %r{^/spec/} }
data/CHANGES.txt CHANGED
@@ -1,4 +1,14 @@
1
- 6.0.1 (Jan 4th, 2019)
1
+ 6.1.0 (Feb 8th, 2019)
2
+ - Review input validation for client API methods. Better control and logging over nil, empty, numeric, and NaN parameters
3
+ - Added logging when block_until_ready is not set or api key is not provided
4
+ - Reviewed client API methods to log an error and return nil / empty when called after client was destroyed
5
+ - Update track regex and fix an error causing a partial match to pass as a valid event_type
6
+ - Add logging to #match? in matcher subclasses
7
+ - Fix simplecov configuration issue causing errors in coverage calculation
8
+ - Improve code coverage and decrease rubocop violation count
9
+ - Fix for issue causing redis_url parameter to be ignored and Redis to always default to REDIS_ENV environment variable
10
+
11
+ 6.0.1 (Jan 7th, 2019)
2
12
  - Fix an issue in events and impressions API calls log messages caused by a wrong variable name introduced in 6.0.0
3
13
 
4
14
  6.0.0 (December 17th, 2018)
data/NEWS CHANGED
@@ -1,3 +1,9 @@
1
+ 6.1.0
2
+
3
+ Review input validation for client API methods: get_treatment, get_treatments, track, manager. Add input validation to block_until_ready, client startup, and destroy
4
+ Add additional logging to the SDK Client in order to help debug matcher related issues
5
+ Fix for issue causing redis_url parameter to be ignored
6
+
1
7
  6.0.1
2
8
 
3
9
  Fix an issue in events and impressions API calls log messages introduced in 6.0.0
data/README.md CHANGED
@@ -30,8 +30,8 @@ Split has built and maintains a SDKs for:
30
30
  * PHP [Github](https://github.com/splitio/php-client) [Docs](http://docs.split.io/docs/php-sdk-overview)
31
31
  * Python [Github](https://github.com/splitio/python-client) [Docs](http://docs.split.io/docs/python-sdk-overview)
32
32
  * GO [Github](https://github.com/splitio/go-client) [Docs](http://docs.split.io/docs/go-sdk-overview)
33
- * Android [Github](https://github.com/splitio/android-client) [Docs](https://docs.split.io/v1/docs/android-sdk-overview)
34
- * IOS [Github](https://github.com/splitio/ios-client) [Docs](https://docs.split.io/v1/docs/ios-sdk-overview)
33
+ * Android [Github](https://github.com/splitio/android-client) [Docs](https://docs.split.io/docs/android-sdk-overview)
34
+ * IOS [Github](https://github.com/splitio/ios-client) [Docs](https://docs.split.io/docs/ios-sdk-overview)
35
35
 
36
36
  For a comprehensive list of opensource projects visit our [Github page](https://github.com/splitio?utf8=%E2%9C%93&query=%20only%3Apublic%20).
37
37
 
@@ -51,6 +51,7 @@ require 'splitclient-rb/engine/parser/condition'
51
51
  require 'splitclient-rb/engine/parser/partition'
52
52
  require 'splitclient-rb/engine/parser/split_adapter'
53
53
  require 'splitclient-rb/engine/parser/evaluator'
54
+ require 'splitclient-rb/engine/matchers/matcher'
54
55
  require 'splitclient-rb/engine/matchers/combiners'
55
56
  require 'splitclient-rb/engine/matchers/combining_matcher'
56
57
  require 'splitclient-rb/engine/matchers/all_keys_matcher'
@@ -13,18 +13,18 @@ module SplitIoClient
13
13
  @impressions_repository = impressions_repository
14
14
  @metrics_repository = metrics_repository
15
15
  @events_repository = events_repository
16
+ @destroyed = false
16
17
 
17
18
  @adapter = adapter
18
19
  end
19
20
 
20
21
  def get_treatments(key, split_names, attributes = {})
21
-
22
22
  return nil unless SplitIoClient::Validators.valid_get_treatments_parameters(split_names)
23
23
 
24
24
  sanitized_split_names = sanitize_split_names(split_names)
25
25
 
26
26
  if sanitized_split_names.empty?
27
- SplitIoClient.configuration.logger.warn('get_treatments: split_names is an empty array or has null values')
27
+ SplitIoClient.configuration.logger.error('get_treatments: split_names must be a non-empty Array')
28
28
  return {}
29
29
  end
30
30
 
@@ -73,15 +73,23 @@ module SplitIoClient
73
73
  key, split_name, attributes = {}, split_data = nil, store_impressions = true,
74
74
  multiple = false, evaluator = nil
75
75
  )
76
+
76
77
  control_treatment = { label: Engine::Models::Label::EXCEPTION, treatment: SplitIoClient::Engine::Models::Treatment::CONTROL }
77
78
  parsed_control_treatment = parsed_treatment(multiple, control_treatment)
78
79
 
79
80
  bucketing_key, matching_key = keys_from_key(key)
80
81
 
81
- return parsed_control_treatment unless SplitIoClient::Validators.valid_get_treatment_parameters(key, split_name, matching_key, bucketing_key)
82
+ return parsed_control_treatment unless valid_client && SplitIoClient::Validators.valid_get_treatment_parameters(key, split_name, matching_key, bucketing_key, attributes)
82
83
 
83
84
  bucketing_key = bucketing_key ? bucketing_key.to_s : nil
84
85
  matching_key = matching_key.to_s
86
+ sanitized_split_name = split_name.to_s.strip
87
+
88
+ if split_name.to_s != sanitized_split_name
89
+ SplitIoClient.configuration.logger.warn("get_treatment: split_name #{split_name} has extra whitespace, trimming")
90
+ split_name = sanitized_split_name
91
+ end
92
+
85
93
  evaluator ||= Engine::Parser::Evaluator.new(@segments_repository, @splits_repository)
86
94
 
87
95
  begin
@@ -117,18 +125,18 @@ module SplitIoClient
117
125
 
118
126
  def destroy
119
127
  SplitIoClient.configuration.logger.info('Split client shutdown started...') if SplitIoClient.configuration.debug_enabled
120
-
121
128
  SplitIoClient.configuration.threads[:impressions_sender].raise(SplitIoClient::ImpressionShutdownException)
122
129
  SplitIoClient.configuration.threads.reject { |k, _| k == :impressions_sender }.each do |name, thread|
123
130
  Thread.kill(thread)
124
131
  end
125
-
126
132
  @metrics_repository.clear
127
133
  @splits_repository.clear
128
134
  @segments_repository.clear
129
135
  @events_repository.clear
130
136
 
131
137
  SplitIoClient.configuration.logger.info('Split client shutdown complete') if SplitIoClient.configuration.debug_enabled
138
+ SplitIoClient.configuration.valid_mode = false
139
+ @destroyed = true
132
140
  end
133
141
 
134
142
  def store_impression(split_name, matching_key, bucketing_key, treatment, store_impressions, attributes)
@@ -177,9 +185,9 @@ module SplitIoClient
177
185
  end
178
186
 
179
187
  def track(key, traffic_type_name, event_type, value = nil)
180
- return false unless SplitIoClient::Validators.valid_track_parameters(key, traffic_type_name, event_type, value)
188
+ return false unless valid_client && SplitIoClient::Validators.valid_track_parameters(key, traffic_type_name, event_type, value)
181
189
  begin
182
- @events_repository.add(key.to_s, traffic_type_name, event_type.to_s, (Time.now.to_f * 1000).to_i, value)
190
+ @events_repository.add(key.to_s, traffic_type_name.downcase, event_type.to_s, (Time.now.to_f * 1000).to_i, value)
183
191
  true
184
192
  rescue StandardError => error
185
193
  SplitIoClient.configuration.log_found_exception(__method__.to_s, error)
@@ -210,13 +218,26 @@ module SplitIoClient
210
218
 
211
219
  def sanitize_split_names(split_names)
212
220
  split_names.compact.uniq.select do |split_name|
213
- if split_name.is_a?(String) && !split_name.empty?
221
+ if (split_name.is_a?(String) || split_name.is_a?(Symbol)) && !split_name.empty?
214
222
  true
223
+ elsif split_name.is_a?(String) && split_name.empty?
224
+ SplitIoClient.configuration.logger.warn('get_treatments: you passed an empty split_name, split_name must be a non-empty String or a Symbol')
225
+ false
215
226
  else
216
- SplitIoClient.configuration.logger.warn('get_treatments: split_name has to be a non empty string')
227
+ SplitIoClient.configuration.logger.warn('get_treatments: you passed an invalid split_name, split_name must be a non-empty String or a Symbol')
217
228
  false
218
229
  end
219
230
  end
220
231
  end
232
+
233
+ private
234
+
235
+ def valid_client
236
+ if @destroyed
237
+ SplitIoClient.configuration.logger.error('Client has already been destroyed - no calls possible')
238
+ return false
239
+ end
240
+ SplitIoClient.configuration.valid_mode
241
+ end
221
242
  end
222
243
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/http/persistent'
2
4
 
3
5
  module SplitIoClient
@@ -12,7 +14,7 @@ module SplitIoClient
12
14
  req.options[:timeout] = SplitIoClient.configuration.read_timeout
13
15
  req.options[:open_timeout] = SplitIoClient.configuration.connection_timeout
14
16
 
15
- SplitIoClient.configuration.logger.debug("GET #{url} proxy: #{api_client.proxy}") if SplitIoClient.configuration.debug_enabled
17
+ SplitLogger.log_if_debug("GET #{url} proxy: #{api_client.proxy}")
16
18
  end
17
19
  rescue StandardError => e
18
20
  SplitIoClient.configuration.logger.warn("#{e}\nURL:#{url}\nparams:#{params}")
@@ -22,23 +24,20 @@ module SplitIoClient
22
24
  def post_api(url, api_key, data, headers = {}, params = {})
23
25
  api_client.post(url) do |req|
24
26
  req.headers = common_headers(api_key)
25
- .merge('Content-Type' => 'application/json')
26
- .merge(headers)
27
+ .merge('Content-Type' => 'application/json')
28
+ .merge(headers)
27
29
 
28
30
  req.body = data.to_json
29
31
 
30
32
  req.options[:timeout] = SplitIoClient.configuration.read_timeout
31
33
  req.options[:open_timeout] = SplitIoClient.configuration.connection_timeout
32
34
 
33
- if SplitIoClient.configuration.transport_debug_enabled
34
- SplitIoClient.configuration.logger.debug("POST #{url} #{req.body}")
35
- elsif SplitIoClient.configuration.debug_enabled
36
- SplitIoClient.configuration.logger.debug("POST #{url}")
37
- end
35
+ SplitLogger.log_if_transport("POST #{url} #{req.body}")
36
+ SplitLogger.log_if_debug("POST #{url}")
38
37
  end
39
38
  rescue StandardError => e
40
39
  SplitIoClient.configuration.logger.warn("#{e}\nURL:#{url}\ndata:#{data}\nparams:#{params}")
41
- raise 'Split SDK failed to connect to backend to retrieve information'
40
+ raise 'Split SDK failed to connect to backend to post information'
42
41
  end
43
42
 
44
43
  private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SplitIoClient
2
4
  module Api
3
5
  class Events < Client
@@ -7,7 +9,7 @@ module SplitIoClient
7
9
 
8
10
  def post(events)
9
11
  if events.empty?
10
- SplitIoClient.configuration.logger.debug('No events to report') if SplitIoClient.configuration.debug_enabled
12
+ SplitLogger.log_if_debug('No events to report')
11
13
  return
12
14
  end
13
15
 
@@ -25,7 +27,7 @@ module SplitIoClient
25
27
  SplitLogger.log_if_debug("Events reported: #{events_slice.size}")
26
28
  else
27
29
  SplitLogger.log_error("Unexpected status code while posting events: #{response.status}." \
28
- " - Check your API key and base URI")
30
+ ' - Check your API key and base URI')
29
31
  raise 'Split SDK failed to connect to backend to post events'
30
32
  end
31
33
  end
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'faraday'
2
4
 
3
5
  module SplitIoClient
4
6
  module FaradayMiddleware
5
7
  class Gzip < Faraday::Middleware
6
- ACCEPT_ENCODING = 'Accept-Encoding'.freeze
7
- CONTENT_ENCODING = 'Content-Encoding'.freeze
8
- CONTENT_LENGTH = 'Content-Length'.freeze
9
- SUPPORTED_ENCODINGS = 'gzip,deflate'.freeze
8
+ ACCEPT_ENCODING = 'Accept-Encoding'
9
+ CONTENT_ENCODING = 'Content-Encoding'
10
+ CONTENT_LENGTH = 'Content-Length'
11
+ SUPPORTED_ENCODINGS = 'gzip,deflate'
10
12
  RUBY_ENCODING = '1.9'.respond_to?(:force_encoding)
11
13
 
12
14
  def call(env)
@@ -30,10 +32,10 @@ module SplitIoClient
30
32
  def uncompress_gzip(body)
31
33
  io = StringIO.new(body)
32
34
  gzip_reader = if RUBY_ENCODING
33
- Zlib::GzipReader.new(io, :encoding => 'ASCII-8BIT')
34
- else
35
- Zlib::GzipReader.new(io)
36
- end
35
+ Zlib::GzipReader.new(io, encoding: 'ASCII-8BIT')
36
+ else
37
+ Zlib::GzipReader.new(io)
38
+ end
37
39
  gzip_reader.read
38
40
  end
39
41
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SplitIoClient
2
4
  module Api
3
5
  class Impressions < Client
@@ -7,7 +9,7 @@ module SplitIoClient
7
9
 
8
10
  def post(impressions)
9
11
  if impressions.empty?
10
- SplitIoClient.configuration.logger.debug('No impressions to report') if SplitIoClient.configuration.debug_enabled
12
+ SplitLogger.log_if_debug('No impressions to report')
11
13
  return
12
14
  end
13
15
 
@@ -18,7 +20,7 @@ module SplitIoClient
18
20
  SplitLogger.log_if_debug("Impressions reported: #{total_impressions(impressions)}")
19
21
  else
20
22
  SplitLogger.log_error("Unexpected status code while posting impressions: #{response.status}." \
21
- " - Check your API key and base URI")
23
+ ' - Check your API key and base URI')
22
24
  raise 'Split SDK failed to connect to backend to post impressions'
23
25
  end
24
26
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SplitIoClient
2
4
  module Api
3
5
  class Metrics < Client
@@ -15,7 +17,7 @@ module SplitIoClient
15
17
 
16
18
  def post_latencies
17
19
  if @metrics_repository.latencies.empty?
18
- SplitIoClient.configuration.logger.debug('No latencies to report.') if SplitIoClient.configuration.debug_enabled
20
+ SplitLogger.log_if_debug('No latencies to report.')
19
21
  else
20
22
  @metrics_repository.latencies.each do |name, latencies|
21
23
  metrics_time = { name: name, latencies: latencies }
@@ -31,7 +33,7 @@ module SplitIoClient
31
33
 
32
34
  def post_counts
33
35
  if @metrics_repository.counts.empty?
34
- SplitIoClient.configuration.logger.debug('No counts to report.') if SplitIoClient.configuration.debug_enabled
36
+ SplitLogger.log_if_debug('No counts to report.')
35
37
  else
36
38
  @metrics_repository.counts.each do |name, count|
37
39
  metrics_count = { name: name, delta: count }
@@ -44,14 +46,12 @@ module SplitIoClient
44
46
  @metrics_repository.clear_counts
45
47
  end
46
48
 
47
- private
48
-
49
49
  def log_status(response, info_to_log)
50
50
  if response.success?
51
51
  SplitLogger.log_if_debug("Metric time reported: #{info_to_log}")
52
52
  else
53
53
  SplitLogger.log_error("Unexpected status code while posting time metrics: #{response.status}" \
54
- " - Check your API key and base URI")
54
+ ' - Check your API key and base URI')
55
55
  raise 'Split SDK failed to connect to backend to post metrics'
56
56
  end
57
57
  end
@@ -27,6 +27,7 @@ module SplitIoClient
27
27
  till: #{@segments_repository.get_change_number(name)}")
28
28
 
29
29
  break if since.to_i >= @segments_repository.get_change_number(name).to_i
30
+
30
31
  since = @segments_repository.get_change_number(name)
31
32
  end
32
33
  end
@@ -39,7 +40,6 @@ module SplitIoClient
39
40
 
40
41
  def fetch_segment_changes(name, since)
41
42
  response = get_api("#{SplitIoClient.configuration.base_uri}/segmentChanges/#{name}", @api_key, since: since)
42
-
43
43
  if response.success?
44
44
  segment = JSON.parse(response.body, symbolize_names: true)
45
45
  @segments_repository.set_change_number(name, segment[:till])
@@ -55,6 +55,10 @@ module SplitIoClient
55
55
  SplitLogger.log_if_transport(segment.to_s)
56
56
 
57
57
  segment
58
+ elsif response.status == 403
59
+ SplitIoClient.configuration.logger.error('Factory Instantiation: You passed a browser type api_key, ' \
60
+ 'please grab an api key from the Split console that is of type sdk')
61
+ SplitIoClient.configuration.valid_mode = false
58
62
  else
59
63
  SplitLogger.log_error("Unexpected status code while fetching segments: #{response.status}." \
60
64
  "Since #{since} - Check your API key and base URI")
@@ -30,10 +30,10 @@ module SplitIoClient
30
30
 
31
31
  result
32
32
  else
33
- @metrics.count(METRICS_PREFIX + '.status.' + response.status.to_s, 1)
34
- SplitLogger.log_error("Unexpected status code while fetching splits: #{response.status}. " \
35
- 'Check your API key and base URI')
36
- raise 'Split SDK failed to connect to backend to fetch split definitions'
33
+ @metrics.count(METRICS_PREFIX + '.status.' + response.status.to_s, 1)
34
+ SplitLogger.log_error("Unexpected status code while fetching splits: #{response.status}. " \
35
+ 'Check your API key and base URI')
36
+ raise 'Split SDK failed to connect to backend to fetch split definitions'
37
37
  end
38
38
  end
39
39
 
@@ -1,15 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SplitIoClient
2
4
  #
3
5
  # class to implement the all keys matcher
4
6
  #
5
- class AllKeysMatcher
6
- MATCHER_TYPE = 'ALL_KEYS'.freeze
7
+ class AllKeysMatcher < Matcher
8
+ MATCHER_TYPE = 'ALL_KEYS'
7
9
 
8
10
  #
9
11
  # evaluates if the key matches the matcher
10
12
  #
11
13
  # @return [boolean] true for all instances
12
14
  def match?(_args)
15
+ SplitLogger.log_if_debug('[AllKeysMatcher] is always -> true')
13
16
  true
14
17
  end
15
18
 
@@ -20,25 +23,17 @@ module SplitIoClient
20
23
  #
21
24
  # @return [boolean] true if obj equals the matcher
22
25
  def equals?(obj)
23
- if obj.nil?
24
- false
25
- elsif equal?(obj)
26
+ if obj.instance_of?(AllKeysMatcher)
26
27
  true
27
- elsif !obj.instance_of?(AllKeysMatcher)
28
- false
29
28
  else
30
- true
29
+ super(obj)
31
30
  end
32
31
  end
33
32
 
34
- def string_type?
35
- false
36
- end
37
-
38
33
  #
39
34
  # function to print string value for this matcher
40
35
  #
41
- # @reutrn [string] string value of this matcher
36
+ # @return [string] string value of this matcher
42
37
  def to_s
43
38
  'in segment all'
44
39
  end