splitclient-rb 4.0.0 → 4.1.0.pre.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1d3a9c285944d45a3dd10b2a6611b26aef4e56e4
4
- data.tar.gz: 5fc0d593883ce86d40892740e3e9227b5dfb7651
3
+ metadata.gz: a1940b82d90766ec3641b0b5e271f8d8d67026fd
4
+ data.tar.gz: 410da73bb3192cbde8b947226e72063bf8b9348b
5
5
  SHA512:
6
- metadata.gz: e9d6ac8558a11cb778b61fc0f27a7e74f4a815585708b8f8d06881fb11a245b0c4e6382c76ae17f3fda78164ae0eee3510ac991986eefbb9e70778419e5c13e5
7
- data.tar.gz: 1d2d2352393ede1727a32978a483ccbe13d402996741d3642e47c2771fa5349aa3151764c334e7e214b06e7e8eae2ab5be568317c15d9244f30f8d09243747a2
6
+ metadata.gz: e7602038ddcd42020c1207825f2b07a4dcaaa4900ec99c14a5aacf0e55d907972a37f7205b1aa103c77f44be8c8b9f85bd5822af11efa8944fb0aa7113dc15a9
7
+ data.tar.gz: 194de0eb97cf2fdc6a7df31cadd76569e8f9334dc9a4503734ba3e91c8b4f916a9202f6f6e8c22702c4641fcea4110f585c15b3d2f7cb4bafcaf4f6d37518719
data/CHANGES.txt CHANGED
@@ -1,3 +1,6 @@
1
+ 4.1.0 (April 16, 2017)
2
+ - Add new string/set matchers
3
+
1
4
  4.0.0
2
5
  - Add support for murmur3 algo
3
6
  - Optimize memory usage
data/NEWS CHANGED
@@ -1,3 +1,7 @@
1
+ 4.1.0
2
+
3
+ Introduce set matchers: part of set, contains all and contains any, starts with, ends with and contains.
4
+
1
5
  4.0.0
2
6
 
3
7
  Add support for murmur3 hashing algorithm
@@ -0,0 +1,17 @@
1
+ module SplitIoClient
2
+ class ContainsAllMatcher < SetMatcher
3
+ def self.matcher_type
4
+ 'CONTAINS_ALL'.freeze
5
+ end
6
+
7
+ def initialize(attribute, remote_array)
8
+ super(attribute, remote_array)
9
+ end
10
+
11
+ def match?(_key, data)
12
+ return false if @remote_set.empty?
13
+
14
+ @remote_set.subset? local_set(data, @attribute)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module SplitIoClient
2
+ class ContainsAnyMatcher < SetMatcher
3
+ def self.matcher_type
4
+ 'CONTAINS_ANY'.freeze
5
+ end
6
+
7
+ def initialize(attribute, remote_array)
8
+ super(attribute, remote_array)
9
+ end
10
+
11
+ def match?(_key, data)
12
+ local_set(data, @attribute).intersect? @remote_set
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module SplitIoClient
2
+ class ContainsMatcher
3
+ def self.matcher_type
4
+ 'CONTAINS_WITH'.freeze
5
+ end
6
+
7
+ def initialize(attribute, substr_list)
8
+ @attribute = attribute
9
+ @substr_list = substr_list
10
+ end
11
+
12
+ def match?(_key, data)
13
+ value = data.fetch(@attribute) { |attr| data[attr.to_s] || data[attr.to_sym] }
14
+
15
+ return false if @substr_list.empty?
16
+
17
+ @substr_list.any? { |substr| value.include? substr }
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module SplitIoClient
2
+ class EndsWithMatcher
3
+ def self.matcher_type
4
+ 'ENDS_WITH'.freeze
5
+ end
6
+
7
+ def initialize(attribute, suffix_list)
8
+ @attribute = attribute
9
+ @suffix_list = suffix_list
10
+ end
11
+
12
+ def match?(_key, data)
13
+ value = data.fetch(@attribute) { |attr| data[attr.to_s] || data[attr.to_sym] }
14
+
15
+ return false if @suffix_list.empty?
16
+
17
+ @suffix_list.any? { |suffix| value.end_with? suffix }
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ module SplitIoClient
2
+ class PartOfSetMatcher < SetMatcher
3
+ def self.matcher_type
4
+ 'PART_OF_SET'.freeze
5
+ end
6
+
7
+ def initialize(attribute, remote_array)
8
+ super(attribute, remote_array)
9
+ end
10
+
11
+ def match?(_key, data)
12
+ @local_set = local_set(data, @attribute)
13
+
14
+ return false if @local_set.empty?
15
+
16
+ @local_set.subset? @remote_set
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ module SplitIoClient
2
+ class SetMatcher
3
+ protected
4
+
5
+ def initialize(attribute, remote_array)
6
+ @attribute = attribute
7
+ @remote_set = remote_array.to_set
8
+ end
9
+
10
+ def local_set(data, attribute)
11
+ data = data.fetch(attribute) { |attr| data[attr.to_s] || data[attr.to_sym] }
12
+ # Allow user to pass individual elements as well
13
+ local_array = data.kind_of?(Array) ? data : [data]
14
+
15
+ local_array.to_set
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ module SplitIoClient
2
+ class StartsWithMatcher
3
+ def self.matcher_type
4
+ 'STARTS_WITH'.freeze
5
+ end
6
+
7
+ def initialize(attribute, prefix_list)
8
+ @attribute = attribute
9
+ @prefix_list = prefix_list
10
+ end
11
+
12
+ def match?(_key, data)
13
+ value = data.fetch(@attribute) { |attr| data[attr.to_s] || data[attr.to_sym] }
14
+
15
+ return false if @prefix_list.empty?
16
+
17
+ @prefix_list.any? { |prefix| value.start_with? prefix }
18
+ end
19
+ end
20
+ end
@@ -108,6 +108,49 @@ module SplitIoClient
108
108
  BetweenMatcher.new(attribute: attribute, start_value: start_value, end_value: end_value, data_type: data_type)
109
109
  end
110
110
 
111
+
112
+ def matcher_part_of_set(params)
113
+ PartOfSetMatcher.new(
114
+ params[:matcher][:keySelector][:attribute],
115
+ params[:matcher][:whitelistMatcherData][:whitelist]
116
+ )
117
+ end
118
+
119
+ def matcher_contains_all(params)
120
+ ContainsAllMatcher.new(
121
+ params[:matcher][:keySelector][:attribute],
122
+ params[:matcher][:whitelistMatcherData][:whitelist]
123
+ )
124
+ end
125
+
126
+ def matcher_contains_any(params)
127
+ ContainsAnyMatcher.new(
128
+ params[:matcher][:keySelector][:attribute],
129
+ params[:matcher][:whitelistMatcherData][:whitelist]
130
+ )
131
+ end
132
+
133
+ def matcher_starts_with(params)
134
+ StartsWithMatcher.new(
135
+ params[:matcher][:keySelector][:attribute],
136
+ params[:matcher][:whitelistMatcherData][:whitelist]
137
+ )
138
+ end
139
+
140
+ def matcher_contains(params)
141
+ ContainsMatcher.new(
142
+ params[:matcher][:keySelector][:attribute],
143
+ params[:matcher][:whitelistMatcherData][:whitelist]
144
+ )
145
+ end
146
+
147
+ def matcher_ends_with(params)
148
+ EndsWithMatcher.new(
149
+ params[:matcher][:keySelector][:attribute],
150
+ params[:matcher][:whitelistMatcherData][:whitelist]
151
+ )
152
+ end
153
+
111
154
  #
112
155
  # @return [object] the negate value for this condition
113
156
  def negate
@@ -1,3 +1,3 @@
1
1
  module SplitIoClient
2
- VERSION = '4.0.0'
2
+ VERSION = '4.1.0-rc1'
3
3
  end
@@ -51,6 +51,13 @@ require 'engine/matchers/equal_to_matcher'
51
51
  require 'engine/matchers/greater_than_or_equal_to_matcher'
52
52
  require 'engine/matchers/less_than_or_equal_to_matcher'
53
53
  require 'engine/matchers/between_matcher'
54
+ require 'engine/matchers/set_matcher'
55
+ require 'engine/matchers/part_of_set_matcher'
56
+ require 'engine/matchers/contains_any_matcher'
57
+ require 'engine/matchers/contains_all_matcher'
58
+ require 'engine/matchers/starts_with_matcher'
59
+ require 'engine/matchers/ends_with_matcher'
60
+ require 'engine/matchers/contains_matcher'
54
61
  require 'engine/evaluator/splitter'
55
62
  require 'engine/metrics/metrics'
56
63
  require 'engine/metrics/binary_search_latency_tracker'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: splitclient-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.0.pre.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Split Software
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-04-17 00:00:00.000000000 Z
11
+ date: 2017-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -309,10 +309,17 @@ files:
309
309
  - lib/engine/matchers/between_matcher.rb
310
310
  - lib/engine/matchers/combiners.rb
311
311
  - lib/engine/matchers/combining_matcher.rb
312
+ - lib/engine/matchers/contains_all_matcher.rb
313
+ - lib/engine/matchers/contains_any_matcher.rb
314
+ - lib/engine/matchers/contains_matcher.rb
315
+ - lib/engine/matchers/ends_with_matcher.rb
312
316
  - lib/engine/matchers/equal_to_matcher.rb
313
317
  - lib/engine/matchers/greater_than_or_equal_to_matcher.rb
314
318
  - lib/engine/matchers/less_than_or_equal_to_matcher.rb
315
319
  - lib/engine/matchers/negation_matcher.rb
320
+ - lib/engine/matchers/part_of_set_matcher.rb
321
+ - lib/engine/matchers/set_matcher.rb
322
+ - lib/engine/matchers/starts_with_matcher.rb
316
323
  - lib/engine/matchers/user_defined_segment_matcher.rb
317
324
  - lib/engine/matchers/whitelist_matcher.rb
318
325
  - lib/engine/metrics/binary_search_latency_tracker.rb
@@ -359,9 +366,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
359
366
  version: '0'
360
367
  required_rubygems_version: !ruby/object:Gem::Requirement
361
368
  requirements:
362
- - - ">="
369
+ - - ">"
363
370
  - !ruby/object:Gem::Version
364
- version: '0'
371
+ version: 1.3.1
365
372
  requirements: []
366
373
  rubyforge_project:
367
374
  rubygems_version: 2.5.2