splitclient-rb 3.2.2 → 3.2.3.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: 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