splitclient-rb 4.3.2 → 4.4.0

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: c780efac13986dc8c245f31efae4960eed28e3ad
4
- data.tar.gz: 4d51cecaff7acda847f542f17f242ebccbce40b2
3
+ metadata.gz: e90a30df4c1f1e86befc5572851f37cee1e22eec
4
+ data.tar.gz: 8b7eeb1065058af7efe9ec9b104d4b0bd589d199
5
5
  SHA512:
6
- metadata.gz: 75cf30499d4ccd57a3752fa5e125f767c20cb53a080f18a5521e481e9db447f18d582d47c5dbddb7aa0128940ad6b4edee4cc035ec88d91910d7dafffe115db6
7
- data.tar.gz: fdfc055f1c25fc5c52708e46ea138ebed8dab1062ab0bdeaa3400dc0d7bd7d56172e7f09addc3b9432c7f42bac30581cfe21c5d2de461e68d134368b7c2e4bed
6
+ metadata.gz: da5a3fc027744717443eb00c87615444890b5cccc6c018baf89f93bd111fba8951ca1f64bdab839eead72e907befee279727402961dfb56dd1e02d8d410bc046
7
+ data.tar.gz: a86cd66443680a28c0b207f08cf8ff0c8e0e3130ecd9c77f542a419209c0786b3cbfe4fea4d3dc6d4afb07acb7344ac335d9478834f0a063ca3fc2e01141f910
data/CHANGES.txt CHANGED
@@ -1,3 +1,9 @@
1
+ 4.4.0 (Feb 5th, 2018)
2
+ - Add track API
3
+
4
+ 4.3.3 (Feb 22th, 2018)
5
+ - Allow usage of Redis >= 3.2, not only ~> 3.2
6
+
1
7
  4.3.2 (Dec 19th, 2017)
2
8
  - Add DEFINITION_NOT_FOUND and rename NO_RULE_MATCHED labels
3
9
 
data/NEWS CHANGED
@@ -1,3 +1,7 @@
1
+ 4.4.0
2
+
3
+ Add the ability to send event data to split service (.track() api)
4
+
1
5
  4.3.0
2
6
 
3
7
  Add support for impression listener, there is an ability to use user-defined class to capture all impressions
data/README.md CHANGED
@@ -28,6 +28,7 @@ Split has built and maintains a SDKs for:
28
28
  * PHP [Github](https://github.com/splitio/php-client) [Docs](http://docs.split.io/docs/php-sdk-overview)
29
29
  * Python [Github](https://github.com/splitio/python-client) [Docs](http://docs.split.io/docs/python-sdk-overview)
30
30
  * GO [Github](https://github.com/splitio/go-client) [Docs](http://docs.split.io/docs/go-sdk-overview)
31
+ * Android [Github](https://github.com/splitio/android-client) [Docs](https://docs.split.io/v1/docs/android-sdk-overview)
31
32
 
32
33
  For a comprehensive list of opensource projects visit our [Github page](https://github.com/splitio?utf8=%E2%9C%93&query=%20only%3Apublic%20).
33
34
 
@@ -10,7 +10,10 @@ require 'splitclient-rb/cache/adapters/redis_adapter'
10
10
  require 'splitclient-rb/cache/repositories/repository'
11
11
  require 'splitclient-rb/cache/repositories/segments_repository'
12
12
  require 'splitclient-rb/cache/repositories/splits_repository'
13
+ require 'splitclient-rb/cache/repositories/events_repository'
13
14
  require 'splitclient-rb/cache/repositories/impressions_repository'
15
+ require 'splitclient-rb/cache/repositories/events/memory_repository'
16
+ require 'splitclient-rb/cache/repositories/events/redis_repository'
14
17
  require 'splitclient-rb/cache/repositories/impressions/memory_repository'
15
18
  require 'splitclient-rb/cache/repositories/impressions/redis_repository'
16
19
  require 'splitclient-rb/cache/repositories/metrics_repository'
@@ -19,6 +22,7 @@ require 'splitclient-rb/cache/repositories/metrics/redis_repository'
19
22
  require 'splitclient-rb/cache/senders/impressions_formatter'
20
23
  require 'splitclient-rb/cache/senders/impressions_sender'
21
24
  require 'splitclient-rb/cache/senders/metrics_sender'
25
+ require 'splitclient-rb/cache/senders/events_sender'
22
26
  require 'splitclient-rb/cache/stores/sdk_blocker'
23
27
  require 'splitclient-rb/cache/stores/segment_store'
24
28
  require 'splitclient-rb/cache/stores/split_store'
@@ -39,6 +43,7 @@ require 'splitclient-rb/engine/api/impressions'
39
43
  require 'splitclient-rb/engine/api/metrics'
40
44
  require 'splitclient-rb/engine/api/segments'
41
45
  require 'splitclient-rb/engine/api/splits'
46
+ require 'splitclient-rb/engine/api/events'
42
47
  require 'splitclient-rb/engine/parser/condition'
43
48
  require 'splitclient-rb/engine/parser/partition'
44
49
  require 'splitclient-rb/engine/parser/split_adapter'
@@ -118,6 +118,21 @@ module SplitIoClient
118
118
  @redis.srandmember(key, count)
119
119
  end
120
120
 
121
+ # Queue
122
+ def add_to_queue(key, val)
123
+ @redis.rpush(key, val)
124
+ end
125
+
126
+ def get_from_queue(key, count)
127
+ items = @redis.lrange(key, 0, count - 1)
128
+ fetched_count = items.size
129
+ items_to_remove = (fetched_count == count) ? count : fetched_count
130
+
131
+ @redis.ltrim(key, items_to_remove, -1)
132
+
133
+ items
134
+ end
135
+
121
136
  # General
122
137
  def exists?(key)
123
138
  @redis.exists(key)
@@ -0,0 +1,30 @@
1
+ module SplitIoClient
2
+ module Cache
3
+ module Repositories
4
+ module Events
5
+ class MemoryRepository < EventsRepository
6
+ EVENTS_SLICE = 100
7
+
8
+ def initialize(adapter, config)
9
+ @adapter = adapter
10
+ @config = config
11
+ end
12
+
13
+ def add(key, traffic_type, event_type, time, value)
14
+ @adapter.add_to_queue(m: metadata, e: event(key, traffic_type, event_type, time, value))
15
+ rescue ThreadError # queue is full
16
+ if @config.debug_enabled
17
+ @config.logger.warn("Dropping events. Current size is #{@config.events_queue_size}. " \
18
+ "Consider increasing events_queue_size")
19
+ end
20
+ @adapter.clear
21
+ end
22
+
23
+ def clear
24
+ @adapter.clear
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,29 @@
1
+ module SplitIoClient
2
+ module Cache
3
+ module Repositories
4
+ module Events
5
+ class RedisRepository < EventsRepository
6
+ EVENTS_SLICE = 100
7
+
8
+ def initialize(adapter, config)
9
+ @adapter = adapter
10
+ @config = config
11
+ end
12
+
13
+ def add(key, traffic_type, event_type, time, value)
14
+ @adapter.add_to_queue(
15
+ namespace_key('.events'),
16
+ { m: metadata, e: event(key, traffic_type, event_type, time, value) }.to_json,
17
+ )
18
+ end
19
+
20
+ def clear
21
+ @adapter.get_from_queue(namespace_key('.events'), EVENTS_SLICE).map do |e|
22
+ JSON.parse(e, symbolize_names: true)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,41 @@
1
+ module SplitIoClient
2
+ module Cache
3
+ module Repositories
4
+ # Repository which forwards events interface to the selected adapter
5
+ class EventsRepository < Repository
6
+ extend Forwardable
7
+ def_delegators :@adapter, :add, :clear
8
+
9
+ def initialize(adapter, config)
10
+ @config = config
11
+ @adapter = case adapter.class.to_s
12
+ when 'SplitIoClient::Cache::Adapters::MemoryAdapter'
13
+ Repositories::Events::MemoryRepository.new(adapter, config)
14
+ when 'SplitIoClient::Cache::Adapters::RedisAdapter'
15
+ Repositories::Events::RedisRepository.new(adapter, config)
16
+ end
17
+ end
18
+
19
+ protected
20
+
21
+ def metadata
22
+ {
23
+ s: "#{@config.language}-#{@config.version}",
24
+ i: @config.machine_ip,
25
+ n: @config.machine_name
26
+ }
27
+ end
28
+
29
+ def event(key, traffic_type, event_type, time, value)
30
+ {
31
+ key: key,
32
+ trafficTypeName: traffic_type,
33
+ eventTypeId: event_type,
34
+ value: value,
35
+ timestamp: time
36
+ }.reject { |_, v| v.nil? }
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -49,7 +49,7 @@ module SplitIoClient
49
49
  parsed_impression = JSON.parse(impression)
50
50
 
51
51
  memo << {
52
- feature: split_name,
52
+ feature: split_name.to_sym,
53
53
  impressions: parsed_impression,
54
54
  ip: ip
55
55
  }
@@ -0,0 +1,47 @@
1
+ module SplitIoClient
2
+ module Cache
3
+ module Senders
4
+ class EventsSender
5
+ def initialize(events_repository, config, api_key)
6
+ @events_repository = events_repository
7
+ @config = config
8
+ @api_key = api_key
9
+ end
10
+
11
+ def call
12
+ if ENV['SPLITCLIENT_ENV'] == 'test'
13
+ post_events
14
+ else
15
+ events_thread
16
+
17
+ if defined?(PhusionPassenger)
18
+ PhusionPassenger.on_event(:starting_worker_process) do |forked|
19
+ events_thread if forked
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def events_thread
28
+ @config.threads[:events_sender] = Thread.new do
29
+ @config.logger.info('Starting events service')
30
+
31
+ loop do
32
+ post_events
33
+
34
+ sleep(SplitIoClient::Utilities.randomize_interval(@config.events_push_rate))
35
+ end
36
+ end
37
+ end
38
+
39
+ def post_events
40
+ SplitIoClient::Api::Events.new(@api_key, @config, @events_repository.clear).post
41
+ rescue StandardError => error
42
+ @config.log_found_exception(__method__.to_s, error)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -31,7 +31,7 @@ module SplitIoClient
31
31
  end
32
32
 
33
33
  memo << {
34
- testName: feature,
34
+ testName: feature.to_sym,
35
35
  keyImpressions: current_impressions,
36
36
  ip: ip
37
37
  }
@@ -55,6 +55,9 @@ module SplitIoClient
55
55
  result = get_localhost_treatment(feature)
56
56
  end
57
57
 
58
+ def track
59
+ end
60
+
58
61
  private
59
62
 
60
63
  #
@@ -6,13 +6,14 @@ module SplitIoClient
6
6
  # @param api_key [String] the API key for your split account
7
7
  #
8
8
  # @return [SplitIoClient] split.io client instance
9
- def initialize(api_key, config = {}, adapter = nil, splits_repository, segments_repository, impressions_repository, metrics_repository)
9
+ def initialize(api_key, config = {}, adapter = nil, splits_repository, segments_repository, impressions_repository, metrics_repository, events_repository)
10
10
  @config = config
11
11
 
12
12
  @splits_repository = splits_repository
13
13
  @segments_repository = segments_repository
14
14
  @impressions_repository = impressions_repository
15
15
  @metrics_repository = metrics_repository
16
+ @events_repository = events_repository
16
17
 
17
18
  @adapter = adapter
18
19
  end
@@ -136,6 +137,7 @@ module SplitIoClient
136
137
  @metrics_repository.clear
137
138
  @splits_repository.clear
138
139
  @segments_repository.clear
140
+ @events_repository.clear
139
141
 
140
142
  @config.logger.info('Split client shutdown complete') if @config.debug_enabled
141
143
  end
@@ -184,6 +186,10 @@ module SplitIoClient
184
186
  @impression_router ||= SplitIoClient::ImpressionRouter.new(@config)
185
187
  end
186
188
 
189
+ def track(key, traffic_type, event_type, value = nil)
190
+ @events_repository.add(key, traffic_type, event_type, (Time.now.to_f * 1000).to_i, value)
191
+ end
192
+
187
193
  def keys_from_key(key)
188
194
  case key.class.to_s
189
195
  when 'Hash'
@@ -65,7 +65,7 @@ module SplitIoClient
65
65
  def referer(config)
66
66
  result = "#{config.language}-#{config.version}"
67
67
 
68
- result = "#{result}::#{SplitIoClient::SplitConfig.get_hostname}" unless SplitIoClient::SplitConfig.get_hostname == 'localhost'
68
+ result = "#{result}::#{SplitIoClient::SplitConfig.machine_hostname}" unless SplitIoClient::SplitConfig.machine_hostname == 'localhost'
69
69
 
70
70
  result
71
71
  end
@@ -0,0 +1,48 @@
1
+ module SplitIoClient
2
+ module Api
3
+ class Events < Client
4
+ def initialize(api_key, config, events)
5
+ @config = config
6
+ @api_key = api_key
7
+ @events = events
8
+ end
9
+
10
+ def post
11
+ if @events.empty?
12
+ @config.logger.debug('No events to report') if @config.debug_enabled
13
+ return
14
+ end
15
+
16
+ @events.each_slice(@config.events_queue_size) do |event_slice|
17
+ result = post_api(
18
+ "#{@config.events_uri}/events/bulk",
19
+ @config,
20
+ @api_key,
21
+ event_slice.map { |event| formatted_event(event[:e]) },
22
+ 'SplitSDKMachineIP' => event_slice[0][:m][:i],
23
+ 'SplitSDKMachineName' => event_slice[0][:m][:n],
24
+ 'SplitSDKVersion' => event_slice[0][:m][:s]
25
+ )
26
+
27
+ if (200..299).include? result.status
28
+ @config.logger.debug("Events reported: #{event_slice.size}") if @config.debug_enabled
29
+ else
30
+ @config.logger.error("Unexpected status code while posting events: #{result.status}")
31
+ end
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def formatted_event(event)
38
+ {
39
+ key: event[:key],
40
+ trafficTypeName: event[:trafficTypeName],
41
+ eventTypeId: event[:eventTypeId],
42
+ value: event[:value].to_f,
43
+ timestamp: event[:timestamp].to_i
44
+ }
45
+ end
46
+ end
47
+ end
48
+ end
@@ -25,13 +25,14 @@ module SplitIoClient
25
25
  # @param sdk_blocker [SDKBlocker] SDKBlocker instance which blocks splits_repository/segments_repository
26
26
  #
27
27
  # @return [SplitIoClient] split.io client instance
28
- def initialize(api_key, config, splits_repository, segments_repository, impressions_repository, metrics_repository, sdk_blocker)
28
+ def initialize(api_key, config, splits_repository, segments_repository, impressions_repository, metrics_repository, events_repository, sdk_blocker)
29
29
  @api_key = api_key
30
30
  @config = config
31
31
  @splits_repository = splits_repository
32
32
  @segments_repository = segments_repository
33
33
  @impressions_repository = impressions_repository
34
34
  @metrics_repository = metrics_repository
35
+ @events_repository = events_repository
35
36
  @metrics = Metrics.new(100, @config, @metrics_repository)
36
37
  @sdk_blocker = sdk_blocker
37
38
 
@@ -45,6 +46,7 @@ module SplitIoClient
45
46
  segment_store
46
47
  metrics_sender
47
48
  impressions_sender
49
+ events_sender
48
50
  when :consumer
49
51
  # Do nothing in background
50
52
  when :producer
@@ -52,6 +54,7 @@ module SplitIoClient
52
54
  segment_store
53
55
  impressions_sender
54
56
  metrics_sender
57
+ events_sender
55
58
 
56
59
  sleep unless ENV['SPLITCLIENT_ENV'] == 'test'
57
60
  end
@@ -76,5 +79,10 @@ module SplitIoClient
76
79
  def metrics_sender
77
80
  MetricsSender.new(@metrics_repository, @config, @api_key).call
78
81
  end
82
+
83
+ # Starts thread which loops constantly and sends events to the Split API
84
+ def events_sender
85
+ EventsSender.new(@events_repository, @config, @api_key).call
86
+ end
79
87
  end
80
88
  end
@@ -53,8 +53,8 @@ module SplitIoClient
53
53
  @debug_enabled = opts[:debug_enabled] || SplitConfig.default_debug
54
54
  @transport_debug_enabled = opts[:transport_debug_enabled] || SplitConfig.default_debug
55
55
  @block_until_ready = opts[:ready] || opts[:block_until_ready] || 0
56
- @machine_name = opts[:machine_name] || SplitConfig.get_hostname
57
- @machine_ip = opts[:machine_ip] || SplitConfig.get_ip
56
+ @machine_name = opts[:machine_name] || SplitConfig.machine_hostname
57
+ @machine_ip = opts[:machine_ip] || SplitConfig.machine_ip
58
58
 
59
59
  @language = opts[:language] || 'ruby'
60
60
  @version = opts[:version] || SplitIoClient::VERSION
@@ -66,6 +66,12 @@ module SplitIoClient
66
66
 
67
67
  @threads = {}
68
68
 
69
+ @events_push_rate = opts[:events_push_rate] || SplitConfig.default_events_push_rate
70
+ @events_queue_size = opts[:events_queue_size] || SplitConfig.default_events_queue_size
71
+ @events_adapter = SplitConfig.init_cache_adapter(
72
+ opts[:cache_adapter] || SplitConfig.default_cache_adapter, :queue_adapter, @redis_url, @events_queue_size
73
+ )
74
+
69
75
  startup_log
70
76
  end
71
77
 
@@ -110,6 +116,12 @@ module SplitIoClient
110
116
  # @return [Symbol] Metrics adapter
111
117
  attr_reader :metrics_adapter
112
118
 
119
+ #
120
+ # The cache adapter to store events in
121
+ #
122
+ # @return [Object] Metrics adapter
123
+ attr_reader :events_adapter
124
+
113
125
  #
114
126
  # The connection timeout for network connections in seconds.
115
127
  #
@@ -162,7 +174,7 @@ module SplitIoClient
162
174
  attr_reader :impression_listener_refresh_rate
163
175
 
164
176
  #
165
- # Wow big the impressions queue is before dropping impressions. -1 to disable it.
177
+ # How big the impressions queue is before dropping impressions. -1 to disable it.
166
178
  #
167
179
  # @return [Integer]
168
180
  attr_reader :impressions_queue_size
@@ -172,6 +184,18 @@ module SplitIoClient
172
184
 
173
185
  attr_accessor :threads
174
186
 
187
+ #
188
+ # The schedule time for events flush after the first one
189
+ #
190
+ # @return [Integer]
191
+ attr_reader :events_push_rate
192
+
193
+ #
194
+ # The max size of the events queue
195
+ #
196
+ # @return [Integer]
197
+ attr_reader :events_queue_size
198
+
175
199
  #
176
200
  # The default split client configuration
177
201
  #
@@ -192,10 +216,10 @@ module SplitIoClient
192
216
  'https://events.split.io/api/'
193
217
  end
194
218
 
195
- def self.init_cache_adapter(adapter, data_structure, redis_url = nil, impressions_queue_size = nil)
219
+ def self.init_cache_adapter(adapter, data_structure, redis_url = nil, queue_size = nil)
196
220
  case adapter
197
221
  when :memory
198
- SplitIoClient::Cache::Adapters::MemoryAdapter.new(map_memory_adapter(data_structure, impressions_queue_size))
222
+ SplitIoClient::Cache::Adapters::MemoryAdapter.new(map_memory_adapter(data_structure, queue_size))
199
223
  when :redis
200
224
  begin
201
225
  require 'redis'
@@ -269,6 +293,14 @@ module SplitIoClient
269
293
  5000
270
294
  end
271
295
 
296
+ def self.default_events_push_rate
297
+ 60
298
+ end
299
+
300
+ def self.default_events_queue_size
301
+ 500
302
+ end
303
+
272
304
  #
273
305
  # The default logger object
274
306
  #
@@ -337,20 +369,17 @@ module SplitIoClient
337
369
  # gets the hostname where the sdk gem is running
338
370
  #
339
371
  # @return [string]
340
- def self.get_hostname
341
- begin
342
- Socket.gethostname
343
- rescue
344
- #unable to get hostname
345
- 'localhost'
346
- end
372
+ def self.machine_hostname
373
+ Socket.gethostname
374
+ rescue
375
+ 'localhost'.freeze
347
376
  end
348
377
 
349
378
  #
350
379
  # gets the ip where the sdk gem is running
351
380
  #
352
381
  # @return [string]
353
- def self.get_ip
382
+ def self.machine_ip
354
383
  loopback_ip = Socket.ip_address_list.find { |ip| ip.ipv4_loopback? }
355
384
  private_ip = Socket.ip_address_list.find { |ip| ip.ipv4_private? }
356
385
 
@@ -15,18 +15,19 @@ module SplitIoClient
15
15
  @segments_repository = SegmentsRepository.new(@cache_adapter, @config)
16
16
  @impressions_repository = ImpressionsRepository.new(@config.impressions_adapter, @config)
17
17
  @metrics_repository = MetricsRepository.new(@config.metrics_adapter, @config)
18
+ @events_repository = EventsRepository.new(@config.events_adapter, @config)
18
19
 
19
20
  @sdk_blocker = SDKBlocker.new(@config, @splits_repository, @segments_repository)
20
21
  @adapter = start!
21
22
 
22
- @client = SplitClient.new(@api_key, @config, @adapter, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository)
23
+ @client = SplitClient.new(@api_key, @config, @adapter, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @events_repository)
23
24
  @manager = SplitManager.new(@api_key, @config, @adapter, @splits_repository)
24
25
 
25
26
  @sdk_blocker.block if @config.block_until_ready > 0
26
27
  end
27
28
 
28
29
  def start!
29
- SplitAdapter.new(@api_key, @config, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @sdk_blocker)
30
+ SplitAdapter.new(@api_key, @config, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @events_repository, @sdk_blocker)
30
31
  end
31
32
 
32
33
  alias resume! start!
@@ -1,3 +1,3 @@
1
1
  module SplitIoClient
2
- VERSION = '4.3.2'
2
+ VERSION = '4.4.0'
3
3
  end
@@ -34,6 +34,6 @@ Gem::Specification.new do |spec|
34
34
  spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
35
35
  spec.add_runtime_dependency "faraday", ">= 0.8"
36
36
  spec.add_runtime_dependency "net-http-persistent", "~> 2.9"
37
- spec.add_runtime_dependency "redis", "~> 3.2"
37
+ spec.add_runtime_dependency "redis", ">= 3.2"
38
38
  spec.add_runtime_dependency "digest-murmurhash", ">= 1.1"
39
39
  end
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.3.2
4
+ version: 4.4.0
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-12-22 00:00:00.000000000 Z
11
+ date: 2018-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -210,14 +210,14 @@ dependencies:
210
210
  name: redis
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
- - - "~>"
213
+ - - ">="
214
214
  - !ruby/object:Gem::Version
215
215
  version: '3.2'
216
216
  type: :runtime
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
- - - "~>"
220
+ - - ">="
221
221
  - !ruby/object:Gem::Version
222
222
  version: '3.2'
223
223
  - !ruby/object:Gem::Dependency
@@ -257,6 +257,9 @@ files:
257
257
  - lib/splitclient-rb/cache/adapters/memory_adapters/map_adapter.rb
258
258
  - lib/splitclient-rb/cache/adapters/memory_adapters/queue_adapter.rb
259
259
  - lib/splitclient-rb/cache/adapters/redis_adapter.rb
260
+ - lib/splitclient-rb/cache/repositories/events/memory_repository.rb
261
+ - lib/splitclient-rb/cache/repositories/events/redis_repository.rb
262
+ - lib/splitclient-rb/cache/repositories/events_repository.rb
260
263
  - lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb
261
264
  - lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb
262
265
  - lib/splitclient-rb/cache/repositories/impressions_repository.rb
@@ -267,6 +270,7 @@ files:
267
270
  - lib/splitclient-rb/cache/repositories/segments_repository.rb
268
271
  - lib/splitclient-rb/cache/repositories/splits_repository.rb
269
272
  - lib/splitclient-rb/cache/routers/impression_router.rb
273
+ - lib/splitclient-rb/cache/senders/events_sender.rb
270
274
  - lib/splitclient-rb/cache/senders/impressions_formatter.rb
271
275
  - lib/splitclient-rb/cache/senders/impressions_sender.rb
272
276
  - lib/splitclient-rb/cache/senders/metrics_sender.rb
@@ -276,6 +280,7 @@ files:
276
280
  - lib/splitclient-rb/clients/localhost_split_client.rb
277
281
  - lib/splitclient-rb/clients/split_client.rb
278
282
  - lib/splitclient-rb/engine/api/client.rb
283
+ - lib/splitclient-rb/engine/api/events.rb
279
284
  - lib/splitclient-rb/engine/api/faraday_middleware/gzip.rb
280
285
  - lib/splitclient-rb/engine/api/impressions.rb
281
286
  - lib/splitclient-rb/engine/api/metrics.rb
@@ -350,7 +355,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
350
355
  version: '0'
351
356
  requirements: []
352
357
  rubyforge_project:
353
- rubygems_version: 2.5.2
358
+ rubygems_version: 2.5.1
354
359
  signing_key:
355
360
  specification_version: 4
356
361
  summary: Ruby client for split SDK.