splitclient-rb 3.2.2 → 3.2.3.pre.rc1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4dd02348730c0013aee593b672a772897bab28b9
4
- data.tar.gz: a150c8b06d3d8314141b25b8abafc6aa12840b00
3
+ metadata.gz: 638a1c1d4cfc959913f5b8abbad11479484f9288
4
+ data.tar.gz: dc6156ca70f74b44a63a8d6b964f79494dd37441
5
5
  SHA512:
6
- metadata.gz: e8da041cf30878f72bda67ce8dc2a00f12621545f01b7a014c3b0d07d828987fa6b20f641768e6610d0ec0799830b9ea64e3f1dfccc2e935a919c052d1551ccd
7
- data.tar.gz: 14e0567c0e7f9015fda71aeed77f6a65f506cffa4c0e5ab520c4bf51ffa91f6e7cf1ae91b940f0e4b99343450e903866050a4ea91af2ab9502cc7b4068703071
6
+ metadata.gz: fb45bded324cb23480d25c139270a80b96afe48f443e8b1b314a1a014977a4a22c0b0f4d17c2f174be796315071efe71d9d31ff1f5913bda3b92ce8785d61eff
7
+ data.tar.gz: 24e0ff8793c58994ebf863f4cc88de6f6d807623320f03bd9720d10678cc2e0c5afcd5364628cb6614efd79c56a4219fa42d56996913bed5692cb83752e9b0f4
data/CHANGES.txt CHANGED
@@ -1,3 +1,7 @@
1
+ 3.2.3
2
+ - Fix Redis namespace issue to align with the spec
3
+ - Allocate less memory by not creating Split model to check if Split is archived
4
+
1
5
  3.2.2
2
6
  - Fix issue when segment_store was never invoked
3
7
 
@@ -13,7 +13,7 @@ module SplitIoClient
13
13
  # Store impression data in Redis
14
14
  def add(split_name, data)
15
15
  @adapter.add_to_set(
16
- namespace_key("impressions.#{split_name}"),
16
+ namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/impressions.#{split_name}"),
17
17
  data.merge(split_name: split_name).to_json
18
18
  )
19
19
  end
@@ -9,14 +9,14 @@ module SplitIoClient
9
9
  end
10
10
 
11
11
  def add_count(counter, delta)
12
- prefixed_name = namespace_key("count.#{counter}")
12
+ prefixed_name = namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/count.#{counter}")
13
13
  counts = @adapter.find_strings_by_prefix(prefixed_name)
14
14
 
15
15
  @adapter.inc(prefixed_name, delta)
16
16
  end
17
17
 
18
18
  def add_latency(operation, time_in_ms, binary_search)
19
- prefixed_name = namespace_key("latency.#{operation}")
19
+ prefixed_name = namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/latency.#{operation}")
20
20
  latencies = @adapter.find_strings_by_prefix(prefixed_name)
21
21
 
22
22
  if operation == 'sdk.get_treatment'
@@ -32,24 +32,24 @@ module SplitIoClient
32
32
  end
33
33
 
34
34
  def counts
35
- keys = @adapter.find_strings_by_prefix(namespace_key('count'))
35
+ keys = @adapter.find_strings_by_prefix(namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/count"))
36
36
 
37
37
  return [] if keys.empty?
38
38
 
39
39
  @adapter.multiple_strings(keys).map do |name, data|
40
- [name.gsub(namespace_key('count.'), ''), data]
40
+ [name.gsub(namespace_key("ruby-#{VERSION}/#{@config.machine_ip}/count."), ''), data]
41
41
  end.to_h
42
42
  end
43
43
 
44
44
  def latencies
45
45
  collected_latencies = {}
46
46
  latencies_array = Array.new(BinarySearchLatencyTracker::BUCKETS.length, 0)
47
- keys = @adapter.find_strings_by_prefix(namespace_key('latency'))
47
+ keys = @adapter.find_strings_by_prefix(namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/latency"))
48
48
 
49
49
  return [] if keys.empty?
50
50
 
51
51
  found_latencies = @adapter.multiple_strings(keys).map do |name, data|
52
- [name.gsub(namespace_key('latency.'), ''), data]
52
+ [name.gsub(namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/latency."), ''), data]
53
53
  end.to_h
54
54
 
55
55
  found_latencies.each do |key, value|
@@ -73,12 +73,12 @@ module SplitIoClient
73
73
  end
74
74
 
75
75
  def clear_counts
76
- keys = @adapter.find_strings_by_prefix(namespace_key('count'))
76
+ keys = @adapter.find_strings_by_prefix(namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/count"))
77
77
  @adapter.delete(keys)
78
78
  end
79
79
 
80
80
  def clear_latencies
81
- keys = @adapter.find_strings_by_prefix(namespace_key('latency'))
81
+ keys = @adapter.find_strings_by_prefix(namespace_key("/ruby-#{VERSION}/#{@config.machine_ip}/latency"))
82
82
  @adapter.delete(keys)
83
83
  end
84
84
 
@@ -12,7 +12,7 @@ module SplitIoClient
12
12
  protected
13
13
 
14
14
  def namespace_key(key)
15
- "#{@config.redis_namespace}/#{@config.machine_ip}/#{key}"
15
+ "#{@config.redis_namespace}#{key}"
16
16
  end
17
17
  end
18
18
  end
@@ -10,7 +10,7 @@ module SplitIoClient
10
10
  @adapter = adapter
11
11
  @config = config
12
12
 
13
- @adapter.set_bool(namespace_key('ready'), false)
13
+ @adapter.set_bool(namespace_key('.ready'), false)
14
14
  end
15
15
 
16
16
  # Receives segment data, adds and removes segements from the store
@@ -32,33 +32,33 @@ module SplitIoClient
32
32
  end
33
33
 
34
34
  def used_segment_names
35
- @adapter.get_set(namespace_key('segments.registered'))
35
+ @adapter.get_set(namespace_key('.segments.registered'))
36
36
  end
37
37
 
38
38
  def set_change_number(name, last_change)
39
- @adapter.set_string(namespace_key("segment.#{name}.till"), last_change)
39
+ @adapter.set_string(namespace_key(".segment.#{name}.till"), last_change)
40
40
  end
41
41
 
42
42
  def get_change_number(name)
43
- @adapter.string(namespace_key("segment.#{name}.till")) || -1
43
+ @adapter.string(namespace_key(".segment.#{name}.till")) || -1
44
44
  end
45
45
 
46
46
  def ready?
47
- @adapter.string(namespace_key('cache.ready.segments')).to_i != -1
47
+ @adapter.string(namespace_key('.segments.ready')).to_i != -1
48
48
  end
49
49
 
50
50
  def not_ready!
51
- @adapter.set_string(namespace_key('cache.ready.segments'), -1)
51
+ @adapter.set_string(namespace_key('.segments.ready'), -1)
52
52
  end
53
53
 
54
54
  def ready!
55
- @adapter.set_string(namespace_key('cache.ready.segments'), Time.now.utc.to_i)
55
+ @adapter.set_string(namespace_key('.segments.ready'), Time.now.utc.to_i)
56
56
  end
57
57
 
58
58
  private
59
59
 
60
60
  def segment_data(name)
61
- namespace_key("segmentData.#{name}")
61
+ namespace_key(".segment.#{name}")
62
62
  end
63
63
 
64
64
  def add_keys(name, keys)
@@ -12,18 +12,18 @@ module SplitIoClient
12
12
  @adapter = adapter
13
13
  @config = config
14
14
 
15
- @adapter.set_string(namespace_key('splits.till'), '-1')
16
- @adapter.initialize_map(namespace_key('segments.registered'))
15
+ @adapter.set_string(namespace_key('.splits.till'), '-1')
16
+ @adapter.initialize_map(namespace_key('.segments.registered'))
17
17
  end
18
18
 
19
19
  def add_split(split)
20
20
  return unless split[:name]
21
21
 
22
- @adapter.set_string(namespace_key("split.#{split[:name]}"), split.to_json)
22
+ @adapter.set_string(namespace_key(".split.#{split[:name]}"), split.to_json)
23
23
  end
24
24
 
25
25
  def remove_split(name)
26
- @adapter.delete(namespace_key("split.#{name}"))
26
+ @adapter.delete(namespace_key(".split.#{name}"))
27
27
  end
28
28
 
29
29
  def get_splits(names, slice = SPLITS_SLICE)
@@ -32,8 +32,8 @@ module SplitIoClient
32
32
  names.each_slice(slice) do |splits_slice|
33
33
  splits.merge!(
34
34
  @adapter
35
- .multiple_strings(splits_slice.map { |name| namespace_key("split.#{name}") })
36
- .map { |name, data| [name.gsub(namespace_key('split.'), ''), data] }.to_h
35
+ .multiple_strings(splits_slice.map { |name| namespace_key(".split.#{name}") })
36
+ .map { |name, data| [name.gsub(namespace_key('.split.'), ''), data] }.to_h
37
37
  )
38
38
  end
39
39
 
@@ -44,7 +44,7 @@ module SplitIoClient
44
44
  end
45
45
 
46
46
  def get_split(name)
47
- split = @adapter.string(namespace_key("split.#{name}"))
47
+ split = @adapter.string(namespace_key(".split.#{name}"))
48
48
 
49
49
  JSON.parse(split, symbolize_names: true) if split
50
50
  end
@@ -61,40 +61,40 @@ module SplitIoClient
61
61
 
62
62
  # Return an array of Split Names excluding control keys like splits.till
63
63
  def split_names
64
- @adapter.find_strings_by_prefix(namespace_key('split.'))
65
- .map { |split| split.gsub(namespace_key('split.'), '') }
64
+ @adapter.find_strings_by_prefix(namespace_key('.split.'))
65
+ .map { |split| split.gsub(namespace_key('.split.'), '') }
66
66
  end
67
67
 
68
68
  def set_change_number(since)
69
- @adapter.set_string(namespace_key('splits.till'), since)
69
+ @adapter.set_string(namespace_key('.splits.till'), since)
70
70
  end
71
71
 
72
72
  def get_change_number
73
- @adapter.string(namespace_key('splits.till'))
73
+ @adapter.string(namespace_key('.splits.till'))
74
74
  end
75
75
 
76
76
  def set_segment_names(names)
77
77
  return if names.nil? || names.empty?
78
78
 
79
79
  names.each do |name|
80
- @adapter.add_to_set(namespace_key('segments.registered'), name)
80
+ @adapter.add_to_set(namespace_key('.segments.registered'), name)
81
81
  end
82
82
  end
83
83
 
84
84
  def exists?(name)
85
- @adapter.exists?(namespace_key("split.#{name}"))
85
+ @adapter.exists?(namespace_key(".split.#{name}"))
86
86
  end
87
87
 
88
88
  def ready?
89
- @adapter.string(namespace_key('cache.ready.splits')).to_i != -1
89
+ @adapter.string(namespace_key('.splits.ready')).to_i != -1
90
90
  end
91
91
 
92
92
  def not_ready!
93
- @adapter.set_string(namespace_key('cache.ready.splits'), -1)
93
+ @adapter.set_string(namespace_key('.splits.ready'), -1)
94
94
  end
95
95
 
96
96
  def ready!
97
- @adapter.set_string(namespace_key('cache.ready.splits'), Time.now.utc.to_i)
97
+ @adapter.set_string(namespace_key('.splits.ready'), Time.now.utc.to_i)
98
98
  end
99
99
  end
100
100
  end
@@ -70,7 +70,7 @@ module SplitIoClient
70
70
  end
71
71
 
72
72
  def add_split_unless_archived(split)
73
- if split_model(split).archived?
73
+ if Engine::Models::Split.archived?(split)
74
74
  @config.logger.debug("Seeing archived split #{split[:name]}") if @config.debug_enabled
75
75
 
76
76
  remove_archived_split(split)
@@ -90,10 +90,6 @@ module SplitIoClient
90
90
 
91
91
  @splits_repository.add_split(split)
92
92
  end
93
-
94
- def split_model(split)
95
- Engine::Models::Split.new(split)
96
- end
97
93
  end
98
94
  end
99
95
  end
@@ -2,16 +2,14 @@ module SplitIoClient
2
2
  module Engine
3
3
  module Models
4
4
  class Split
5
- def initialize(data)
6
- @data = data
7
- end
8
-
9
- def matchable?
10
- @data && @data[:status] == 'ACTIVE' && @data[:killed] == false
11
- end
5
+ class << self
6
+ def matchable?(data)
7
+ data && data[:status] == 'ACTIVE' && data[:killed] == false
8
+ end
12
9
 
13
- def archived?
14
- @data && @data[:status] == 'ARCHIVED'
10
+ def archived?(data)
11
+ data && data[:status] == 'ARCHIVED'
12
+ end
15
13
  end
16
14
  end
17
15
  end
@@ -7,12 +7,11 @@ module SplitIoClient
7
7
  end
8
8
 
9
9
  def call(keys, split, attributes = nil)
10
- split_model = Models::Split.new(split)
11
10
  @default_treatment = split[:defaultTreatment]
12
11
 
13
- return treatment(Models::Label::ARCHIVED, Treatments::CONTROL, split[:changeNumber]) if split_model.archived?
12
+ return treatment(Models::Label::ARCHIVED, Treatments::CONTROL, split[:changeNumber]) if Models::Split.archived?(split)
14
13
 
15
- if split_model.matchable?
14
+ if Models::Split.matchable?(split)
16
15
  match(split, keys, attributes)
17
16
  else
18
17
  treatment(Models::Label::KILLED, @default_treatment, split[:changeNumber])
@@ -21,12 +21,11 @@ module SplitIoClient
21
21
  return if @splits_repository.nil?
22
22
 
23
23
  @splits_repository.splits.each_with_object([]) do |(name, split), memo|
24
- split_model = Engine::Models::Split.new(split)
25
24
  split_view = build_split_view(name, split)
26
25
 
27
26
  next if split_view[:name] == nil
28
27
 
29
- memo << split_view unless split_model.archived?
28
+ memo << split_view unless Engine::Models::Split.archived?(split)
30
29
  end
31
30
  end
32
31
 
@@ -45,11 +44,13 @@ module SplitIoClient
45
44
  #
46
45
  # @returns a split view
47
46
  def split(split_name)
48
- if @splits_repository
49
- split = @splits_repository.get_split(split_name)
47
+ return unless @splits_repository
48
+
49
+ split = @splits_repository.get_split(split_name)
50
50
 
51
- build_split_view(split_name, split) unless split.nil? or split_model(split).archived?
52
- end
51
+ return if split.nil? || Engine::Models::Split.archived?(split)
52
+
53
+ build_split_view(split_name, split)
53
54
  end
54
55
 
55
56
  def build_split_view(name, split)
@@ -70,11 +71,5 @@ module SplitIoClient
70
71
  change_number: split[:changeNumber]
71
72
  }
72
73
  end
73
-
74
- private
75
-
76
- def split_model(split)
77
- split_model = Engine::Models::Split.new(split)
78
- end
79
74
  end
80
75
  end
@@ -282,7 +282,7 @@ module SplitIoClient
282
282
  end
283
283
 
284
284
  def self.default_redis_namespace
285
- "SPLITIO/ruby-#{VERSION}"
285
+ 'SPLITIO'
286
286
  end
287
287
 
288
288
  #
@@ -1,3 +1,3 @@
1
1
  module SplitIoClient
2
- VERSION = '3.2.2'
2
+ VERSION = '3.2.3-rc1'
3
3
  end
@@ -27,7 +27,6 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "pry"
28
28
  spec.add_development_dependency "pry-byebug"
29
29
  spec.add_development_dependency "simplecov"
30
- spec.add_development_dependency "redis"
31
30
 
32
31
  spec.add_runtime_dependency "json", "~> 1.8"
33
32
  spec.add_runtime_dependency "thread_safe"
@@ -36,4 +35,5 @@ Gem::Specification.new do |spec|
36
35
  spec.add_runtime_dependency "faraday-http-cache"
37
36
  spec.add_runtime_dependency "faraday_middleware"
38
37
  spec.add_runtime_dependency "net-http-persistent", "<= 2.9.4"
38
+ spec.add_runtime_dependency "redis"
39
39
  end
data/splitio.yml.example CHANGED
@@ -1,7 +1,11 @@
1
1
  ---
2
- :api_key: api_key
2
+ :api_key: r2tdmvojm6rp6vugmd9svhoedv43e71ejolk
3
+ #:base_uri: 'https://sdk-aws-staging.split.io/api'
4
+ #:events_uri: 'https://events-aws-staging.split.io/api'
3
5
  :mode: :producer
4
6
  :cache_adapter: :redis
5
7
  :debug_enabled: true
6
8
  :transport_debug_enabled: true
7
9
  :impressions_refresh_rate: 30
10
+ :block_until_ready: 10
11
+ :redis_namespace: "PATO"
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: 3.2.2
4
+ version: 3.2.3.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-02-08 00:00:00.000000000 Z
11
+ date: 2017-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,20 +122,6 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: redis
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: json
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -234,6 +220,20 @@ dependencies:
234
220
  - - "<="
235
221
  - !ruby/object:Gem::Version
236
222
  version: 2.9.4
223
+ - !ruby/object:Gem::Dependency
224
+ name: redis
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
237
  description: Ruby client for using split SDK.
238
238
  email:
239
239
  - pato@split.io
@@ -331,9 +331,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
331
331
  version: '0'
332
332
  required_rubygems_version: !ruby/object:Gem::Requirement
333
333
  requirements:
334
- - - ">="
334
+ - - ">"
335
335
  - !ruby/object:Gem::Version
336
- version: '0'
336
+ version: 1.3.1
337
337
  requirements: []
338
338
  rubyforge_project:
339
339
  rubygems_version: 2.5.2