splitclient-rb 6.4.1.pre.rc3-java → 7.0.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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.txt +15 -1
  3. data/Detailed-README.md +9 -21
  4. data/NEWS +3 -0
  5. data/lib/splitclient-rb.rb +2 -1
  6. data/lib/splitclient-rb/cache/adapters/cache_adapter.rb +3 -3
  7. data/lib/splitclient-rb/cache/repositories/events/memory_repository.rb +5 -4
  8. data/lib/splitclient-rb/cache/repositories/events/redis_repository.rb +4 -3
  9. data/lib/splitclient-rb/cache/repositories/events_repository.rb +10 -9
  10. data/lib/splitclient-rb/cache/repositories/impressions/memory_repository.rb +7 -6
  11. data/lib/splitclient-rb/cache/repositories/impressions/redis_repository.rb +5 -4
  12. data/lib/splitclient-rb/cache/repositories/impressions_repository.rb +9 -8
  13. data/lib/splitclient-rb/cache/repositories/metrics/memory_repository.rb +3 -2
  14. data/lib/splitclient-rb/cache/repositories/metrics/redis_repository.rb +5 -4
  15. data/lib/splitclient-rb/cache/repositories/metrics_repository.rb +6 -4
  16. data/lib/splitclient-rb/cache/repositories/repository.rb +7 -2
  17. data/lib/splitclient-rb/cache/repositories/segments_repository.rb +6 -5
  18. data/lib/splitclient-rb/cache/repositories/splits_repository.rb +56 -14
  19. data/lib/splitclient-rb/cache/routers/impression_router.rb +5 -4
  20. data/lib/splitclient-rb/cache/senders/events_sender.rb +7 -6
  21. data/lib/splitclient-rb/cache/senders/impressions_sender.rb +10 -9
  22. data/lib/splitclient-rb/cache/senders/metrics_sender.rb +9 -8
  23. data/lib/splitclient-rb/cache/stores/sdk_blocker.rb +19 -10
  24. data/lib/splitclient-rb/cache/stores/segment_store.rb +15 -28
  25. data/lib/splitclient-rb/cache/stores/split_store.rb +13 -15
  26. data/lib/splitclient-rb/clients/localhost_split_client.rb +8 -7
  27. data/lib/splitclient-rb/clients/split_client.rb +65 -35
  28. data/lib/splitclient-rb/engine/api/client.rb +17 -13
  29. data/lib/splitclient-rb/engine/api/events.rb +7 -6
  30. data/lib/splitclient-rb/engine/api/impressions.rb +6 -5
  31. data/lib/splitclient-rb/engine/api/metrics.rb +8 -7
  32. data/lib/splitclient-rb/engine/api/segments.rb +11 -10
  33. data/lib/splitclient-rb/engine/api/splits.rb +6 -5
  34. data/lib/splitclient-rb/engine/matchers/all_keys_matcher.rb +1 -1
  35. data/lib/splitclient-rb/engine/matchers/between_matcher.rb +7 -5
  36. data/lib/splitclient-rb/engine/matchers/combining_matcher.rb +5 -4
  37. data/lib/splitclient-rb/engine/matchers/contains_all_matcher.rb +4 -4
  38. data/lib/splitclient-rb/engine/matchers/contains_any_matcher.rb +3 -3
  39. data/lib/splitclient-rb/engine/matchers/contains_matcher.rb +7 -5
  40. data/lib/splitclient-rb/engine/matchers/dependency_matcher.rb +3 -2
  41. data/lib/splitclient-rb/engine/matchers/ends_with_matcher.rb +5 -4
  42. data/lib/splitclient-rb/engine/matchers/equal_to_boolean_matcher.rb +3 -2
  43. data/lib/splitclient-rb/engine/matchers/equal_to_matcher.rb +6 -4
  44. data/lib/splitclient-rb/engine/matchers/equal_to_set_matcher.rb +3 -3
  45. data/lib/splitclient-rb/engine/matchers/greater_than_or_equal_to_matcher.rb +6 -4
  46. data/lib/splitclient-rb/engine/matchers/less_than_or_equal_to_matcher.rb +6 -4
  47. data/lib/splitclient-rb/engine/matchers/matcher.rb +4 -0
  48. data/lib/splitclient-rb/engine/matchers/matches_string_matcher.rb +3 -2
  49. data/lib/splitclient-rb/engine/matchers/negation_matcher.rb +3 -2
  50. data/lib/splitclient-rb/engine/matchers/part_of_set_matcher.rb +4 -4
  51. data/lib/splitclient-rb/engine/matchers/set_matcher.rb +2 -1
  52. data/lib/splitclient-rb/engine/matchers/starts_with_matcher.rb +4 -3
  53. data/lib/splitclient-rb/engine/matchers/user_defined_segment_matcher.rb +3 -2
  54. data/lib/splitclient-rb/engine/matchers/whitelist_matcher.rb +7 -5
  55. data/lib/splitclient-rb/engine/models/label.rb +2 -0
  56. data/lib/splitclient-rb/engine/parser/condition.rb +31 -20
  57. data/lib/splitclient-rb/engine/parser/evaluator.rb +3 -2
  58. data/lib/splitclient-rb/engine/parser/split_adapter.rb +9 -7
  59. data/lib/splitclient-rb/localhost_split_factory.rb +3 -2
  60. data/lib/splitclient-rb/managers/split_manager.rb +39 -5
  61. data/lib/splitclient-rb/redis_metrics_fixer.rb +5 -4
  62. data/lib/splitclient-rb/split_config.rb +35 -14
  63. data/lib/splitclient-rb/split_factory.rb +44 -32
  64. data/lib/splitclient-rb/split_factory_builder.rb +4 -5
  65. data/lib/splitclient-rb/split_factory_registry.rb +51 -0
  66. data/lib/splitclient-rb/split_logger.rb +5 -14
  67. data/lib/splitclient-rb/validators.rb +19 -16
  68. data/lib/splitclient-rb/version.rb +1 -1
  69. metadata +5 -4
@@ -13,10 +13,11 @@ module SplitIoClient
13
13
  # @param splits_file [File] file that contains some splits
14
14
  #
15
15
  # @return [LocalhostSplitIoClient] split.io localhost client instance
16
- def initialize(splits_file, reload_rate = nil)
16
+ def initialize(splits_file, config, reload_rate = nil)
17
17
  @localhost_mode = true
18
18
  @localhost_mode_features = []
19
19
  load_localhost_mode_features(splits_file, reload_rate)
20
+ @config = config
20
21
  end
21
22
 
22
23
  #
@@ -101,12 +102,12 @@ module SplitIoClient
101
102
  parsed_control_treatment = parsed_treatment(control_treatment)
102
103
 
103
104
  bucketing_key, matching_key = keys_from_key(key)
104
- return parsed_control_treatment unless SplitIoClient::Validators.valid_get_treatment_parameters(calling_method, key, split_name, matching_key, bucketing_key, attributes)
105
+ return parsed_control_treatment unless @config.split_validator.valid_get_treatment_parameters(calling_method, key, split_name, matching_key, bucketing_key, attributes)
105
106
 
106
107
  sanitized_split_name = split_name.to_s.strip
107
108
 
108
109
  if split_name.to_s != sanitized_split_name
109
- SplitIoClient.configuration.logger.warn("get_treatment: split_name #{split_name} has extra whitespace, trimming")
110
+ @config.logger.warn("get_treatment: split_name #{split_name} has extra whitespace, trimming")
110
111
  split_name = sanitized_split_name
111
112
  end
112
113
 
@@ -127,12 +128,12 @@ module SplitIoClient
127
128
  end
128
129
 
129
130
  def get_localhost_treatments(key, split_names, attributes = nil, calling_method = 'get_treatments')
130
- return nil unless SplitIoClient::Validators.valid_get_treatments_parameters(calling_method, split_names)
131
+ return nil unless @config.split_validator.valid_get_treatments_parameters(calling_method, split_names)
131
132
 
132
133
  sanitized_split_names = sanitize_split_names(calling_method, split_names)
133
134
 
134
135
  if sanitized_split_names.empty?
135
- SplitIoClient.configuration.logger.error("#{calling_method}: split_names must be a non-empty Array")
136
+ @config.logger.error("#{calling_method}: split_names must be a non-empty Array")
136
137
  return {}
137
138
  end
138
139
 
@@ -146,10 +147,10 @@ module SplitIoClient
146
147
  if (split_name.is_a?(String) || split_name.is_a?(Symbol)) && !split_name.empty?
147
148
  true
148
149
  elsif split_name.is_a?(String) && split_name.empty?
149
- SplitIoClient.configuration.logger.warn("#{calling_method}: you passed an empty split_name, split_name must be a non-empty String or a Symbol")
150
+ @config.logger.warn("#{calling_method}: you passed an empty split_name, split_name must be a non-empty String or a Symbol")
150
151
  false
151
152
  else
152
- SplitIoClient.configuration.logger.warn("#{calling_method}: you passed an invalid split_name, split_name must be a non-empty String or a Symbol")
153
+ @config.logger.warn("#{calling_method}: you passed an invalid split_name, split_name must be a non-empty String or a Symbol")
153
154
  false
154
155
  end
155
156
  end
@@ -9,14 +9,16 @@ module SplitIoClient
9
9
  # @param api_key [String] the API key for your split account
10
10
  #
11
11
  # @return [SplitIoClient] split.io client instance
12
- def initialize(api_key, adapter = nil, splits_repository, segments_repository, impressions_repository, metrics_repository, events_repository)
12
+ def initialize(api_key, adapter = nil, splits_repository, segments_repository, impressions_repository, metrics_repository, events_repository, sdk_blocker, config)
13
+ @api_key = api_key
13
14
  @splits_repository = splits_repository
14
15
  @segments_repository = segments_repository
15
16
  @impressions_repository = impressions_repository
16
17
  @metrics_repository = metrics_repository
17
18
  @events_repository = events_repository
19
+ @sdk_blocker = sdk_blocker
18
20
  @destroyed = false
19
-
21
+ @config = config
20
22
  @adapter = adapter
21
23
  end
22
24
 
@@ -52,27 +54,30 @@ module SplitIoClient
52
54
  end
53
55
 
54
56
  def destroy
55
- SplitIoClient.configuration.logger.info('Split client shutdown started...') if SplitIoClient.configuration.debug_enabled
57
+ @config.logger.info('Split client shutdown started...') if @config.debug_enabled
56
58
 
57
- SplitIoClient.configuration.threads.select { |name, thread| name.to_s.end_with? 'sender' }.values.each do |thread|
59
+ @config.threads.select { |name, thread| name.to_s.end_with? 'sender' }.values.each do |thread|
58
60
  thread.raise(SplitIoClient::SDKShutdownException)
59
61
  thread.join
60
62
  end
61
63
 
62
- SplitIoClient.configuration.threads.values.each { |thread| Thread.kill(thread) }
64
+ @config.threads.values.each { |thread| Thread.kill(thread) }
63
65
 
64
66
  @splits_repository.clear
65
67
  @segments_repository.clear
66
68
 
67
- SplitIoClient.configuration.logger.info('Split client shutdown complete') if SplitIoClient.configuration.debug_enabled
68
- SplitIoClient.configuration.valid_mode = false
69
+ SplitIoClient.load_factory_registry
70
+ SplitIoClient.split_factory_registry.remove(@api_key)
71
+
72
+ @config.logger.info('Split client shutdown complete') if @config.debug_enabled
73
+ @config.valid_mode = false
69
74
  @destroyed = true
70
75
  end
71
76
 
72
77
  def store_impression(split_name, matching_key, bucketing_key, treatment, store_impressions, attributes)
73
78
  time = (Time.now.to_f * 1000.0).to_i
74
79
 
75
- return if SplitIoClient.configuration.disable_impressions || !store_impressions
80
+ return if @config.disable_impressions || !store_impressions
76
81
 
77
82
  @impressions_repository.add(
78
83
  matching_key,
@@ -85,7 +90,7 @@ module SplitIoClient
85
90
  route_impression(split_name, matching_key, bucketing_key, time, treatment, attributes)
86
91
 
87
92
  rescue StandardError => error
88
- SplitIoClient.configuration.log_found_exception(__method__.to_s, error)
93
+ @config.log_found_exception(__method__.to_s, error)
89
94
  end
90
95
 
91
96
  def route_impression(split_name, matching_key, bucketing_key, time, treatment, attributes)
@@ -111,11 +116,11 @@ module SplitIoClient
111
116
  end
112
117
 
113
118
  def impression_router
114
- @impression_router ||= SplitIoClient::ImpressionRouter.new
119
+ @impression_router ||= SplitIoClient::ImpressionRouter.new(@config)
115
120
  end
116
121
 
117
122
  def track(key, traffic_type_name, event_type, value = nil, properties = nil)
118
- return false unless valid_client && SplitIoClient::Validators.valid_track_parameters(key, traffic_type_name, event_type, value, properties)
123
+ return false unless valid_client && @config.split_validator.valid_track_parameters(key, traffic_type_name, event_type, value, properties)
119
124
 
120
125
  properties_size = EVENT_AVERAGE_SIZE
121
126
 
@@ -123,16 +128,22 @@ module SplitIoClient
123
128
  properties, size = validate_properties(properties)
124
129
  properties_size += size
125
130
  if (properties_size > EVENTS_SIZE_THRESHOLD)
126
- SplitIoClient.configuration.logger.error("The maximum size allowed for the properties is #{EVENTS_SIZE_THRESHOLD}. Current is #{properties_size}. Event not queued")
131
+ @config.logger.error("The maximum size allowed for the properties is #{EVENTS_SIZE_THRESHOLD}. Current is #{properties_size}. Event not queued")
127
132
  return false
128
133
  end
129
134
  end
130
135
 
136
+ if ready? && !@splits_repository.traffic_type_exists(traffic_type_name)
137
+ @config.logger.warn("track: Traffic Type #{traffic_type_name} " \
138
+ "does not have any corresponding Splits in this environment, make sure you're tracking " \
139
+ 'your events to a valid traffic type defined in the Split console')
140
+ end
141
+
131
142
  begin
132
143
  @events_repository.add(key.to_s, traffic_type_name.downcase, event_type.to_s, (Time.now.to_f * 1000).to_i, value, properties, properties_size)
133
144
  true
134
145
  rescue StandardError => error
135
- SplitIoClient.configuration.log_found_exception(__method__.to_s, error)
146
+ @config.log_found_exception(__method__.to_s, error)
136
147
  false
137
148
  end
138
149
  end
@@ -167,15 +178,19 @@ module SplitIoClient
167
178
  if (split_name.is_a?(String) || split_name.is_a?(Symbol)) && !split_name.empty?
168
179
  true
169
180
  elsif split_name.is_a?(String) && split_name.empty?
170
- SplitIoClient.configuration.logger.warn("#{calling_method}: you passed an empty split_name, split_name must be a non-empty String or a Symbol")
181
+ @config.logger.warn("#{calling_method}: you passed an empty split_name, split_name must be a non-empty String or a Symbol")
171
182
  false
172
183
  else
173
- SplitIoClient.configuration.logger.warn("#{calling_method}: you passed an invalid split_name, split_name must be a non-empty String or a Symbol")
184
+ @config.logger.warn("#{calling_method}: you passed an invalid split_name, split_name must be a non-empty String or a Symbol")
174
185
  false
175
186
  end
176
187
  end
177
188
  end
178
189
 
190
+ def block_until_ready(time = nil)
191
+ @sdk_blocker.block(time) if @sdk_blocker && !@sdk_blocker.ready?
192
+ end
193
+
179
194
  private
180
195
 
181
196
  def validate_properties(properties)
@@ -191,32 +206,32 @@ module SplitIoClient
191
206
  result[key] = value
192
207
  size += variable_size(value)
193
208
  else
194
- SplitIoClient.configuration.logger.warn("Property #{key} is of invalid type. Setting value to nil")
209
+ @config.logger.warn("Property #{key} is of invalid type. Setting value to nil")
195
210
  result[key] = nil
196
211
  end
197
212
  end
198
213
  }
199
214
 
200
- SplitIoClient.configuration.logger.warn('Event has more than 300 properties. Some of them will be trimmed when processed') if properties_count > 300
215
+ @config.logger.warn('Event has more than 300 properties. Some of them will be trimmed when processed') if properties_count > 300
201
216
 
202
217
  return fixed_properties, size
203
218
  end
204
219
 
205
220
  def valid_client
206
221
  if @destroyed
207
- SplitIoClient.configuration.logger.error('Client has already been destroyed - no calls possible')
222
+ @config.logger.error('Client has already been destroyed - no calls possible')
208
223
  return false
209
224
  end
210
- SplitIoClient.configuration.valid_mode
225
+ @config.valid_mode
211
226
  end
212
227
 
213
228
  def treatments(key, split_names, attributes = {}, calling_method = 'get_treatments')
214
- return nil unless SplitIoClient::Validators.valid_get_treatments_parameters(calling_method, split_names)
229
+ return nil unless @config.split_validator.valid_get_treatments_parameters(calling_method, split_names)
215
230
 
216
231
  sanitized_split_names = sanitize_split_names(calling_method, split_names)
217
232
 
218
233
  if sanitized_split_names.empty?
219
- SplitIoClient.configuration.logger.error("#{calling_method}: split_names must be a non-empty Array")
234
+ @config.logger.error("#{calling_method}: split_names must be a non-empty Array")
220
235
  return {}
221
236
  end
222
237
 
@@ -224,7 +239,7 @@ module SplitIoClient
224
239
  bucketing_key = bucketing_key ? bucketing_key.to_s : nil
225
240
  matching_key = matching_key ? matching_key.to_s : nil
226
241
 
227
- evaluator = Engine::Parser::Evaluator.new(@segments_repository, @splits_repository, true)
242
+ evaluator = Engine::Parser::Evaluator.new(@segments_repository, @splits_repository, @config, true)
228
243
  start = Time.now
229
244
  treatments_labels_change_numbers =
230
245
  @splits_repository.get_splits(sanitized_split_names).each_with_object({}) do |(name, data), memo|
@@ -234,7 +249,7 @@ module SplitIoClient
234
249
  # Measure
235
250
  @adapter.metrics.time('sdk.' + calling_method, latency)
236
251
 
237
- unless SplitIoClient.configuration.disable_impressions
252
+ unless @config.disable_impressions
238
253
  time = (Time.now.to_f * 1000.0).to_i
239
254
  @impressions_repository.add_bulk(
240
255
  matching_key, bucketing_key, treatments_labels_change_numbers, time
@@ -269,38 +284,48 @@ module SplitIoClient
269
284
  key, split_name, attributes = {}, split_data = nil, store_impressions = true,
270
285
  multiple = false, evaluator = nil, calling_method = 'get_treatment'
271
286
  )
272
- control_treatment = { label: Engine::Models::Label::EXCEPTION, treatment: SplitIoClient::Engine::Models::Treatment::CONTROL, config: nil }
273
- parsed_control_treatment = parsed_treatment(multiple, control_treatment)
287
+ control_treatment = { treatment: Engine::Models::Treatment::CONTROL }
288
+
289
+ parsed_control_exception = parsed_treatment(multiple,
290
+ control_treatment.merge({ label: Engine::Models::Label::EXCEPTION }))
274
291
 
275
292
  bucketing_key, matching_key = keys_from_key(key)
276
293
 
277
- return parsed_control_treatment unless valid_client && SplitIoClient::Validators.valid_get_treatment_parameters(calling_method, key, split_name, matching_key, bucketing_key, attributes)
294
+ return parsed_control_exception unless valid_client && @config.split_validator.valid_get_treatment_parameters(calling_method, key, split_name, matching_key, bucketing_key, attributes)
278
295
 
279
296
  bucketing_key = bucketing_key ? bucketing_key.to_s : nil
280
297
  matching_key = matching_key.to_s
281
298
  sanitized_split_name = split_name.to_s.strip
282
299
 
283
300
  if split_name.to_s != sanitized_split_name
284
- SplitIoClient.configuration.logger.warn("#{calling_method}: split_name #{split_name} has extra whitespace, trimming")
301
+ @config.logger.warn("#{calling_method}: split_name #{split_name} has extra whitespace, trimming")
285
302
  split_name = sanitized_split_name
286
303
  end
287
304
 
288
- evaluator ||= Engine::Parser::Evaluator.new(@segments_repository, @splits_repository)
305
+ evaluator ||= Engine::Parser::Evaluator.new(@segments_repository, @splits_repository, @config)
289
306
 
290
307
  begin
291
308
  start = Time.now
292
309
 
293
310
  split = multiple ? split_data : @splits_repository.get_split(split_name)
294
311
 
295
- if split.nil?
296
- SplitIoClient.configuration.logger.warn("split_name: #{split_name} does not exist. Returning CONTROL")
297
- return parsed_control_treatment
312
+ if split.nil? && ready?
313
+ @config.logger.warn("#{calling_method}: you passed #{split_name} that " \
314
+ 'does not exist in this environment, please double check what Splits exist in the web console')
315
+
316
+ return parsed_treatment(multiple, control_treatment.merge({ label: Engine::Models::Label::NOT_FOUND }))
298
317
  end
299
318
 
300
319
  treatment_data =
320
+ if !split.nil? && ready?
301
321
  evaluator.call(
302
- { bucketing_key: bucketing_key, matching_key: matching_key }, split, attributes
303
- )
322
+ { bucketing_key: bucketing_key, matching_key: matching_key }, split, attributes
323
+ )
324
+ else
325
+ @config.logger.error("#{calling_method}: the SDK is not ready, the operation cannot be executed")
326
+
327
+ control_treatment.merge({ label: Engine::Models::Label::NOT_READY })
328
+ end
304
329
 
305
330
  latency = (Time.now - start) * 1000.0
306
331
  store_impression(split_name, matching_key, bucketing_key, treatment_data, store_impressions, attributes)
@@ -308,11 +333,11 @@ module SplitIoClient
308
333
  # Measure
309
334
  @adapter.metrics.time('sdk.' + calling_method, latency) unless multiple
310
335
  rescue StandardError => error
311
- SplitIoClient.configuration.log_found_exception(__method__.to_s, error)
336
+ @config.log_found_exception(__method__.to_s, error)
312
337
 
313
338
  store_impression(split_name, matching_key, bucketing_key, control_treatment, store_impressions, attributes)
314
339
 
315
- return parsed_control_treatment
340
+ return parsed_control_exception
316
341
  end
317
342
 
318
343
  parsed_treatment(multiple, treatment_data)
@@ -321,5 +346,10 @@ module SplitIoClient
321
346
  def variable_size(value)
322
347
  value.is_a?(String) ? value.length : 0
323
348
  end
349
+
350
+ def ready?
351
+ return @sdk_blocker.ready? if @sdk_blocker
352
+ true
353
+ end
324
354
  end
325
355
  end
@@ -7,17 +7,21 @@ module SplitIoClient
7
7
  class Client
8
8
  RUBY_ENCODING = '1.9'.respond_to?(:force_encoding)
9
9
 
10
+ def initialize(config)
11
+ @config = config
12
+ end
13
+
10
14
  def get_api(url, api_key, params = {})
11
15
  api_client.get(url, params) do |req|
12
16
  req.headers = common_headers(api_key).merge('Accept-Encoding' => 'gzip')
13
17
 
14
- req.options[:timeout] = SplitIoClient.configuration.read_timeout
15
- req.options[:open_timeout] = SplitIoClient.configuration.connection_timeout
18
+ req.options[:timeout] = @config.read_timeout
19
+ req.options[:open_timeout] = @config.connection_timeout
16
20
 
17
- SplitLogger.log_if_debug("GET #{url} proxy: #{api_client.proxy}")
21
+ @config.split_logger.log_if_debug("GET #{url} proxy: #{api_client.proxy}")
18
22
  end
19
23
  rescue StandardError => e
20
- SplitIoClient.configuration.logger.warn("#{e}\nURL:#{url}\nparams:#{params}")
24
+ @config.logger.warn("#{e}\nURL:#{url}\nparams:#{params}")
21
25
  raise e, 'Split SDK failed to connect to backend to retrieve information', e.backtrace
22
26
  end
23
27
 
@@ -29,14 +33,14 @@ module SplitIoClient
29
33
 
30
34
  req.body = data.to_json
31
35
 
32
- req.options[:timeout] = SplitIoClient.configuration.read_timeout
33
- req.options[:open_timeout] = SplitIoClient.configuration.connection_timeout
36
+ req.options[:timeout] = @config.read_timeout
37
+ req.options[:open_timeout] = @config.connection_timeout
34
38
 
35
- SplitLogger.log_if_transport("POST #{url} #{req.body}")
36
- SplitLogger.log_if_debug("POST #{url}")
39
+ @config.split_logger.log_if_transport("POST #{url} #{req.body}")
40
+ @config.split_logger.log_if_debug("POST #{url}")
37
41
  end
38
42
  rescue StandardError => e
39
- SplitIoClient.configuration.logger.warn("#{e}\nURL:#{url}\ndata:#{data}\nparams:#{params}")
43
+ @config.logger.warn("#{e}\nURL:#{url}\ndata:#{data}\nparams:#{params}")
40
44
  raise e, 'Split SDK failed to connect to backend to post information', e.backtrace
41
45
  end
42
46
 
@@ -73,15 +77,15 @@ module SplitIoClient
73
77
  def common_headers(api_key)
74
78
  {
75
79
  'Authorization' => "Bearer #{api_key}",
76
- 'SplitSDKVersion' => "#{SplitIoClient.configuration.language}-#{SplitIoClient.configuration.version}",
77
- 'SplitSDKMachineName' => SplitIoClient.configuration.machine_name,
78
- 'SplitSDKMachineIP' => SplitIoClient.configuration.machine_ip,
80
+ 'SplitSDKVersion' => "#{@config.language}-#{@config.version}",
81
+ 'SplitSDKMachineName' => @config.machine_name,
82
+ 'SplitSDKMachineIP' => @config.machine_ip,
79
83
  'Referer' => referer
80
84
  }
81
85
  end
82
86
 
83
87
  def referer
84
- result = "#{SplitIoClient.configuration.language}-#{SplitIoClient.configuration.version}"
88
+ result = "#{@config.language}-#{@config.version}"
85
89
 
86
90
  result = "#{result}::#{SplitIoClient::SplitConfig.machine_hostname}" unless SplitIoClient::SplitConfig.machine_hostname == 'localhost'
87
91
 
@@ -3,19 +3,20 @@
3
3
  module SplitIoClient
4
4
  module Api
5
5
  class Events < Client
6
- def initialize(api_key)
6
+ def initialize(api_key, config)
7
+ super(config)
7
8
  @api_key = api_key
8
9
  end
9
10
 
10
11
  def post(events)
11
12
  if events.empty?
12
- SplitLogger.log_if_debug('No events to report')
13
+ @config.split_logger.log_if_debug('No events to report')
13
14
  return
14
15
  end
15
16
 
16
- events.each_slice(SplitIoClient.configuration.events_queue_size) do |events_slice|
17
+ events.each_slice(@config.events_queue_size) do |events_slice|
17
18
  response = post_api(
18
- "#{SplitIoClient.configuration.events_uri}/events/bulk",
19
+ "#{@config.events_uri}/events/bulk",
19
20
  @api_key,
20
21
  events_slice.map { |event| formatted_event(event[:e]) },
21
22
  'SplitSDKMachineIP' => events_slice[0][:m][:i],
@@ -24,9 +25,9 @@ module SplitIoClient
24
25
  )
25
26
 
26
27
  if response.success?
27
- SplitLogger.log_if_debug("Events reported: #{events_slice.size}")
28
+ @config.split_logger.log_if_debug("Events reported: #{events_slice.size}")
28
29
  else
29
- SplitLogger.log_error("Unexpected status code while posting events: #{response.status}." \
30
+ @config.logger.error("Unexpected status code while posting events: #{response.status}." \
30
31
  ' - Check your API key and base URI')
31
32
  raise 'Split SDK failed to connect to backend to post events'
32
33
  end
@@ -3,23 +3,24 @@
3
3
  module SplitIoClient
4
4
  module Api
5
5
  class Impressions < Client
6
- def initialize(api_key)
6
+ def initialize(api_key, config)
7
7
  @api_key = api_key
8
+ @config = config
8
9
  end
9
10
 
10
11
  def post(impressions)
11
12
  if impressions.empty?
12
- SplitLogger.log_if_debug('No impressions to report')
13
+ @config.split_logger.log_if_debug('No impressions to report')
13
14
  return
14
15
  end
15
16
 
16
17
  impressions_by_ip(impressions).each do |ip, impressions_ip|
17
- response = post_api("#{SplitIoClient.configuration.events_uri}/testImpressions/bulk", @api_key, impressions_ip, 'SplitSDKMachineIP' => ip)
18
+ response = post_api("#{@config.events_uri}/testImpressions/bulk", @api_key, impressions_ip, 'SplitSDKMachineIP' => ip)
18
19
 
19
20
  if response.success?
20
- SplitLogger.log_if_debug("Impressions reported: #{total_impressions(impressions)}")
21
+ @config.split_logger.log_if_debug("Impressions reported: #{total_impressions(impressions)}")
21
22
  else
22
- SplitLogger.log_error("Unexpected status code while posting impressions: #{response.status}." \
23
+ @config.logger.error("Unexpected status code while posting impressions: #{response.status}." \
23
24
  ' - Check your API key and base URI')
24
25
  raise 'Split SDK failed to connect to backend to post impressions'
25
26
  end