splitclient-rb 3.1.0.pre.rc12 → 3.1.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.
@@ -0,0 +1,65 @@
1
+ module SplitIoClient
2
+ module Cache
3
+ module Senders
4
+ class ImpressionsFormatter
5
+ def initialize(impressions_repository)
6
+ @impressions_repository = impressions_repository
7
+ end
8
+
9
+ def call(raw_impressions)
10
+ impressions = raw_impressions ? raw_impressions : @impressions_repository.clear
11
+ formatted_impressions = []
12
+ filtered_impressions = filter_impressions(impressions)
13
+
14
+ return [] if impressions.empty? || filtered_impressions.empty?
15
+
16
+ formatted_impressions = unique_features(filtered_impressions).each_with_object([]) do |feature, memo|
17
+ current_impressions =
18
+ filtered_impressions
19
+ .select { |i| i[:feature] == feature }
20
+ .map do |i|
21
+ {
22
+ keyName: i[:impressions]['key_name'],
23
+ treatment: i[:impressions]['treatment'],
24
+ time: i[:impressions]['time']
25
+ }
26
+ end
27
+
28
+ memo << {
29
+ testName: feature,
30
+ keyImpressions: current_impressions
31
+ }
32
+ end
33
+
34
+ formatted_impressions
35
+ end
36
+
37
+ private
38
+
39
+ def unique_features(impressions)
40
+ impressions.map { |i| i[:feature] }.uniq
41
+ end
42
+
43
+ # Filter seen impressions by impression_hash
44
+ def filter_impressions(unfiltered_impressions)
45
+ impressions_seen = []
46
+
47
+ unfiltered_impressions.each_with_object([]) do |impression, impressions|
48
+ impression_hash = impression_hash(impression)
49
+
50
+ next if impressions_seen.include?(impression_hash)
51
+
52
+ impressions_seen << impression_hash
53
+ impressions << impression
54
+ end
55
+ end
56
+
57
+ def impression_hash(impression)
58
+ "#{impression[:feature]}:" \
59
+ "#{impression[:impressions]['key_name']}:" \
60
+ "#{impression[:impressions]['treatment']}"
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,59 @@
1
+ module SplitIoClient
2
+ module Cache
3
+ module Senders
4
+ class ImpressionsSender
5
+ def initialize(impressions_repository, config, api_key)
6
+ @impressions_repository = impressions_repository
7
+ @config = config
8
+ @api_key = api_key
9
+ end
10
+
11
+ def call
12
+ # Disable impressions if @config.impressions_queue_size == -1
13
+ if @config.impressions_queue_size < 0
14
+ @config.logger.info('Disabling impressions service by config')
15
+ return
16
+ end
17
+
18
+ if ENV['SPLITCLIENT_ENV'] == 'test'
19
+ post_impressions
20
+ else
21
+ Thread.new do
22
+ @config.logger.info('Starting impressions service') unless ENV['SPLITCLIENT_ENV'] == 'test'
23
+
24
+ loop do
25
+ post_impressions
26
+
27
+ sleep(randomize_interval(@config.impressions_refresh_rate))
28
+ end
29
+ end
30
+ end
31
+
32
+ @config.logger.info('Started impressions service') unless ENV['SPLITCLIENT_ENV'] == 'test'
33
+ end
34
+
35
+ private
36
+
37
+ def post_impressions
38
+ impressions_client.post
39
+ rescue StandardError => error
40
+ @config.log_found_exception(__method__.to_s, error)
41
+ end
42
+
43
+ def formatted_impressions(raw_impressions = nil)
44
+ ImpressionsFormatter.new(@impressions_repository).call(raw_impressions)
45
+ end
46
+
47
+ def impressions_client
48
+ SplitIoClient::Api::Impressions.new(@api_key, @config, formatted_impressions)
49
+ end
50
+
51
+ def randomize_interval(interval)
52
+ @random_generator ||= Random.new
53
+ random_factor = @random_generator.rand(50..100)/100.0
54
+ interval * random_factor
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,18 +1,31 @@
1
1
  module SplitIoClient
2
2
  module Api
3
3
  class Client
4
- def call_api(path, config, api_key, params = {})
5
- api_client.get(config.base_uri + path, params) do |req|
6
- req.headers['Authorization'] = 'Bearer ' + api_key
7
- req.headers['SplitSDKVersion'] = SplitIoClient::SplitFactory.sdk_version
8
- req.headers['SplitSDKMachineName'] = config.machine_name
9
- req.headers['SplitSDKMachineIP'] = config.machine_ip
10
- req.headers['Accept-Encoding'] = 'gzip'
4
+ def get_api(url, config, api_key, params = {})
5
+ api_client.get(url, params) do |req|
6
+ req.headers = common_headers(api_key, config).merge('Accept-Encoding' => 'gzip')
11
7
 
8
+ req.options.timeout = config.read_timeout
12
9
  req.options.open_timeout = config.connection_timeout
10
+
11
+ config.logger.debug("GET #{url}") if config.debug_enabled
12
+ end
13
+ end
14
+
15
+ def post_api(url, config, api_key, data, params = {})
16
+ api_client.post(url) do |req|
17
+ req.headers = common_headers(api_key, config).merge('Content-Type' => 'application/json')
18
+
19
+ req.body = data.to_json
20
+
13
21
  req.options.timeout = config.read_timeout
22
+ req.options.open_timeout = config.connection_timeout
14
23
 
15
- config.logger.debug("GET #{config.base_uri + path}") if config.debug_enabled
24
+ if config.transport_debug_enabled
25
+ config.logger.debug("POST #{url} #{req.body}")
26
+ elsif config.debug_enabled
27
+ config.logger.debug("POST #{url}")
28
+ end
16
29
  end
17
30
  end
18
31
 
@@ -24,6 +37,15 @@ module SplitIoClient
24
37
  builder.adapter :net_http_persistent
25
38
  end
26
39
  end
40
+
41
+ def common_headers(api_key, config)
42
+ {
43
+ 'Authorization' => "Bearer #{api_key}",
44
+ 'SplitSDKVersion' => SplitIoClient::SplitFactory.sdk_version,
45
+ 'SplitSDKMachineName' => config.machine_name,
46
+ 'SplitSDKMachineIP' => config.machine_ip
47
+ }
48
+ end
27
49
  end
28
50
  end
29
51
  end
@@ -0,0 +1,34 @@
1
+ module SplitIoClient
2
+ module Api
3
+ class Impressions < Client
4
+ def initialize(api_key, config, impressions)
5
+ @config = config
6
+ @api_key = api_key
7
+ @impressions = impressions
8
+ end
9
+
10
+ def post
11
+ if @impressions.empty?
12
+ @config.logger.debug('No impressions to report') if @config.debug_enabled
13
+ return
14
+ end
15
+
16
+ result = post_api("#{config.events_uri}/testImpressions/bulk", @config, @api_key, @impressions)
17
+
18
+ if result.status / 100 != 2
19
+ @config.logger.error("Unexpected status code while posting impressions: #{result.status}")
20
+ else
21
+ @config.logger.debug("Impressions reported: #{total_impressions(@impressions)}") if @config.debug_enabled
22
+ end
23
+ end
24
+
25
+ def total_impressions(impressions)
26
+ return 0 if impressions.nil?
27
+
28
+ impressions.reduce(0) do |impressions_count, impression|
29
+ impressions_count += impression[:keyImpressions].length
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -33,7 +33,7 @@ module SplitIoClient
33
33
 
34
34
  def fetch_segments(name, prefix, since)
35
35
  segments = []
36
- segment = call_api('/segmentChanges/' + name, @config, @api_key, { since: since })
36
+ segment = get_api("#{@config.base_uri}/segmentChanges/#{name}", @config, @api_key, since: since)
37
37
 
38
38
  if segment.status / 100 == 2
39
39
  segment_content = JSON.parse(segment.body, symbolize_names: true)
@@ -10,7 +10,7 @@ module SplitIoClient
10
10
  def since(since)
11
11
  start = Time.now
12
12
  prefix = 'splitChangeFetcher'
13
- splits = call_api('/splitChanges', @config, @api_key, {:since => since})
13
+ splits = get_api("#{@config.base_uri}/splitChanges", @config, @api_key, since: since)
14
14
 
15
15
  if splits.status / 100 == 2
16
16
  result = splits_with_segment_names(splits.body)
@@ -75,20 +75,21 @@ module SplitIoClient
75
75
  end
76
76
  end
77
77
 
78
- #
79
- # creates a safe thread that will be executing api calls
80
- # for fetching splits and segments give the execution time
81
- # provided within the configuration
82
- #
83
- # @return [void]
78
+ # Starts thread which loops constantly and stores splits in the splits_repository of choice
84
79
  def split_store
85
80
  SplitIoClient::Cache::Stores::SplitStore.new(@splits_repository, @config, @api_key, @metrics, @sdk_blocker).call
86
81
  end
87
82
 
83
+ # Starts thread which loops constantly and stores segments in the segments_repository of choice
88
84
  def segment_store
89
85
  SplitIoClient::Cache::Stores::SegmentStore.new(@segments_repository, @config, @api_key, @metrics, @sdk_blocker).call
90
86
  end
91
87
 
88
+ # Starts thread which loops constantly and sends impressions to the Split API
89
+ def impressions_sender
90
+ SplitIoClient::Cache::Senders::ImpressionsSender.new(@impressions_repository, @config, @api_key).call
91
+ end
92
+
92
93
  #
93
94
  # helper method to execute a post request to the provided endpoint
94
95
  #
@@ -152,102 +153,6 @@ module SplitIoClient
152
153
  end
153
154
  end
154
155
 
155
- def impressions_sender
156
- # Disable impressions if @config.impressions_queue_size == -1
157
- if @config.impressions_queue_size < 0
158
- @config.logger.info("Disabling impressions service by config.")
159
- return
160
- end
161
-
162
- @config.logger.info("Starting impressions service...")
163
-
164
- # TODO: Send impressions in main thread for test ENV
165
- return if ENV['SPLITCLIENT_ENV'] == 'test'
166
-
167
- Thread.new do
168
- loop do
169
- begin
170
- post_impressions
171
-
172
- random_interval = randomize_interval @config.impressions_refresh_rate
173
- sleep(random_interval)
174
- rescue StandardError => error
175
- @config.log_found_exception(__method__.to_s, error)
176
- end
177
- end
178
- end
179
-
180
- @config.logger.info("Started impressions service")
181
- end
182
-
183
- #
184
- # creates the appropriate json data for the cached impressions values
185
- # and then sends them to the appropriate api endpoint with a valid body format
186
- #
187
- # @return [void]
188
- def post_impressions
189
- impressions = impressions_array
190
-
191
- if impressions.empty?
192
- @config.logger.debug('No impressions to report') if @config.debug_enabled
193
- return
194
- end
195
-
196
- res = post_api('/testImpressions/bulk', impressions)
197
- if res.status / 100 != 2
198
- @config.logger.error("Unexpected status code while posting impressions: #{res.status}")
199
- else
200
- @config.logger.debug("Impressions reported: #{calculate_tot_impressions(impressions)}") if @config.debug_enabled
201
- end
202
- end
203
-
204
- def calculate_tot_impressions(impressions = nil)
205
- tot = 0
206
- return tot if impressions.nil?
207
- impressions.each do |test_impression|
208
- tot += test_impression[:keyImpressions].length
209
- end
210
- tot
211
- end
212
-
213
- # REFACTOR
214
- def impressions_array(impressions = nil)
215
- popped_impressions = impressions ? impressions : @impressions_repository.clear
216
- test_impression_array, filtered_impressions, keys_treatments_seen = [], [], []
217
-
218
- return [] if popped_impressions.empty?
219
-
220
- popped_impressions.each do |item|
221
- item_hash = "#{item[:feature]}:#{item[:impressions]['key_name']}:#{item[:impressions]['treatment']}"
222
-
223
- next if keys_treatments_seen.include?(item_hash)
224
-
225
- keys_treatments_seen << item_hash
226
- filtered_impressions << item
227
- end
228
-
229
- return [] if filtered_impressions.empty?
230
-
231
- features = filtered_impressions.map { |i| i[:feature] }.uniq
232
- test_impression_array = features.each_with_object([]) do |feature, memo|
233
- current_impressions = filtered_impressions.select { |i| i[:feature] == feature }
234
- current_impressions.map! do |i|
235
- {
236
- keyName: i[:impressions]['key_name'],
237
- treatment: i[:impressions]['treatment'],
238
- time: i[:impressions]['time']
239
- }
240
- end
241
-
242
- memo << {
243
- testName: feature,
244
- keyImpressions: current_impressions
245
- }
246
- end
247
-
248
- test_impression_array
249
- end
250
-
251
156
  #
252
157
  # creates the appropriate json data for the cached metrics values
253
158
  # include latencies, counts and gauges
@@ -1,7 +1,6 @@
1
1
  require 'splitclient-rb/version'
2
2
  require 'splitclient-rb/split_factory'
3
3
  require 'splitclient-rb/split_factory_builder'
4
- require 'splitclient-rb/localhost_split_factory_builder'
5
4
  require 'splitclient-rb/localhost_split_factory'
6
5
  require 'splitclient-rb/split_config'
7
6
  require 'exceptions/sdk_blocker_timeout_expired_exception'
@@ -19,10 +18,13 @@ require 'cache/repositories/impressions/redis_repository'
19
18
  require 'cache/repositories/metrics_repository'
20
19
  require 'cache/repositories/metrics/memory_repository'
21
20
  require 'cache/repositories/metrics/redis_repository'
21
+ require 'cache/senders/impressions_formatter'
22
+ require 'cache/senders/impressions_sender'
22
23
  require 'cache/stores/sdk_blocker'
23
24
  require 'cache/stores/segment_store'
24
25
  require 'cache/stores/split_store'
25
26
  require 'engine/api/client'
27
+ require 'engine/api/impressions'
26
28
  require 'engine/api/segments'
27
29
  require 'engine/api/splits'
28
30
  require 'engine/parser/condition'
@@ -42,6 +42,14 @@ module SplitIoClient
42
42
  @localhost_mode_features
43
43
  end
44
44
 
45
+ #
46
+ # method to get a split view
47
+ #
48
+ # @returns a split view
49
+ def split(split_name)
50
+ @localhost_mode_features.find {|x| x[:feature] == split_name}
51
+ end
52
+
45
53
  #
46
54
  # method to get the split list from the client
47
55
  #
@@ -49,6 +57,16 @@ module SplitIoClient
49
57
  def splits
50
58
  @localhost_mode_features
51
59
  end
60
+
61
+ #
62
+ # method to get the list of just split names. Ideal for ietrating and calling client.get_treatment
63
+ #
64
+ # @returns [object] array of split names (String)
65
+ def split_names
66
+ @localhost_mode_features.each_with_object([]) do |split, memo|
67
+ memo << split[:feature]
68
+ end
69
+ end
52
70
  end
53
71
 
54
72
  class LocalhostSplitClient < NoMethodError
@@ -74,7 +92,7 @@ module SplitIoClient
74
92
  end
75
93
 
76
94
  def get_treatments(key, split_names, attributes = nil)
77
- split_names.each_with_object({}) do | (name), memo|
95
+ split_names.each_with_object({}) do |name, memo|
78
96
  puts "name #{name} memo #{memo}"
79
97
  memo.merge!(name => get_treatment(key, name, attributes))
80
98
  end
@@ -272,6 +272,8 @@ module SplitIoClient
272
272
  #
273
273
  # @return [void]
274
274
  def startup_log
275
+ return if ENV['SPLITCLIENT_ENV'] == 'test'
276
+
275
277
  @logger.info("Loaded SDK in the #{@mode} mode")
276
278
  @logger.info("Loaded cache class: #{@cache_adapter.class}")
277
279
  end
@@ -6,42 +6,17 @@ module SplitIoClient
6
6
  #
7
7
  class SplitFactory < NoMethodError
8
8
  class SplitManager < NoMethodError
9
- #
10
- # constant that defines the localhost mode
11
- LOCALHOST_MODE = 'localhost'
12
-
13
9
  #
14
10
  # Creates a new split manager instance that connects to split.io API.
15
11
  #
16
12
  # @param api_key [String] the API key for your split account
17
13
  #
18
14
  # @return [SplitIoManager] split.io client instance
19
- def initialize(api_key, config = {}, adapter = nil, splits_repository = nil, localhost_mode = false)
15
+ def initialize(api_key, config = {}, adapter = nil, splits_repository = nil)
20
16
  @localhost_mode_features = []
21
17
  @config = config
22
18
  @splits_repository = splits_repository
23
- @localhost_mode = localhost_mode
24
- if @localhost_mode
25
- load_localhost_mode_features
26
- else
27
- @adapter = adapter
28
- end
29
- end
30
-
31
- #
32
- # method to set localhost mode features by reading .splits file located at home directory
33
- #
34
- # @returns [void]
35
- def load_localhost_mode_features
36
- splits_file = File.join(Dir.home, ".split")
37
- if File.exists?(splits_file)
38
- line_num=0
39
- File.open(splits_file).each do |line|
40
- line_data = line.strip.split(" ")
41
- @localhost_mode_features << {feature: line_data[0], treatment: line_data[1]} unless line.start_with?('#') || line.strip.empty?
42
- end
43
- end
44
- @localhost_mode_features
19
+ @adapter = adapter
45
20
  end
46
21
 
47
22
  #
@@ -49,7 +24,6 @@ module SplitIoClient
49
24
  #
50
25
  # @returns [object] array of splits
51
26
  def splits
52
- return @localhost_mode_features if @localhost_mode
53
27
  return if @splits_repository.nil?
54
28
 
55
29
  @splits_repository.splits.each_with_object([]) do |(name, split), memo|
@@ -64,14 +38,6 @@ module SplitIoClient
64
38
  #
65
39
  # @returns [object] array of split names (String)
66
40
  def split_names
67
- if @localhost_mode
68
- local_feature_names = []
69
- @localhost_mode_features.each do |split|
70
- local_feature_names << split[:feature]
71
- end
72
- return local_feature_names
73
- end
74
-
75
41
  return if @splits_repository.nil?
76
42
 
77
43
  @splits_repository.split_names
@@ -82,11 +48,6 @@ module SplitIoClient
82
48
  #
83
49
  # @returns a split view
84
50
  def split(split_name)
85
-
86
- if @localhost_mode
87
- return @localhost_mode_features.find {|x| x[:feature] == split_name}
88
- end
89
-
90
51
  if @splits_repository
91
52
  split = @splits_repository.get_split(split_name)
92
53
 
@@ -114,27 +75,14 @@ module SplitIoClient
114
75
  end
115
76
  end
116
77
 
117
-
118
78
  class SplitClient < NoMethodError
119
- #
120
- # constant that defines the localhost mode
121
- LOCALHOST_MODE = 'localhost'
122
-
123
- #
124
- # variables to if the sdk is being used in localhost mode and store the list of features
125
- attr_reader :localhost_mode
126
- attr_reader :localhost_mode_features
127
-
128
79
  #
129
80
  # Creates a new split client instance that connects to split.io API.
130
81
  #
131
82
  # @param api_key [String] the API key for your split account
132
83
  #
133
84
  # @return [SplitIoClient] split.io client instance
134
- def initialize(api_key, config = {}, adapter = nil, localhost_mode = false, splits_repository, segments_repository, impressions_repository, metrics_repository)
135
- @localhost_mode = localhost_mode
136
- @localhost_mode_features = []
137
-
85
+ def initialize(api_key, config = {}, adapter = nil, splits_repository, segments_repository, impressions_repository, metrics_repository)
138
86
  @config = config
139
87
 
140
88
  @splits_repository = splits_repository
@@ -142,22 +90,10 @@ module SplitIoClient
142
90
  @impressions_repository = impressions_repository
143
91
  @metrics_repository = metrics_repository
144
92
 
145
- if api_key == LOCALHOST_MODE
146
- @localhost_mode = true
147
- load_localhost_mode_features
148
- else
149
- @adapter = adapter
150
- end
93
+ @adapter = adapter
151
94
  end
152
95
 
153
96
  def get_treatments(key, split_names, attributes = nil)
154
- # This localhost behavior must live in in localhost_spit_factory#client
155
- if is_localhost_mode?
156
- return split_names.each_with_object({}) do |name, memo|
157
- memo.merge!(name => get_localhost_treatment(name))
158
- end
159
- end
160
-
161
97
  bucketing_key, matching_key = keys_from_key(key)
162
98
  bucketing_key = matching_key if bucketing_key.nil?
163
99
 
@@ -165,7 +101,9 @@ module SplitIoClient
165
101
  memo.merge!(name => get_treatment(matching_key, name, attributes, data, false))
166
102
  end
167
103
 
168
- @impressions_repository.add_bulk(matching_key, treatments, (Time.now.to_f * 1000.0).to_i)
104
+ if @config.impressions_queue_size > 0
105
+ @impressions_repository.add_bulk(matching_key, treatments, (Time.now.to_f * 1000.0).to_i)
106
+ end
169
107
 
170
108
  treatments
171
109
  end
@@ -191,41 +129,36 @@ module SplitIoClient
191
129
  return Treatments::CONTROL
192
130
  end
193
131
 
194
- if is_localhost_mode?
195
- result = get_localhost_treatment(split_name)
196
- else
197
- start = Time.now
198
- result = nil
199
-
200
- begin
201
- split = split_data ? split_data : @splits_repository.get_split(split_name)
202
-
203
- result = if split.nil?
204
- Treatments::CONTROL
205
- else
206
- SplitIoClient::Engine::Parser::SplitTreatment.new(@segments_repository).call(
207
- { bucketing_key: bucketing_key, matching_key: matching_key }, split, attributes
208
- )
209
- end
210
- rescue StandardError => error
211
- @config.log_found_exception(__method__.to_s, error)
212
- end
132
+ start = Time.now
133
+ result = nil
134
+
135
+ begin
136
+ split = split_data ? split_data : @splits_repository.get_split(split_name)
213
137
 
214
- result = result.nil? ? Treatments::CONTROL : result
138
+ result = if split.nil?
139
+ Treatments::CONTROL
140
+ else
141
+ SplitIoClient::Engine::Parser::SplitTreatment.new(@segments_repository).call(
142
+ { bucketing_key: bucketing_key, matching_key: matching_key }, split, attributes
143
+ )
144
+ end
145
+ rescue StandardError => error
146
+ @config.log_found_exception(__method__.to_s, error)
147
+ end
215
148
 
216
- begin
217
- latency = (Time.now - start) * 1000.0
218
- if @config.impressions_queue_size > 0 && store_impressions
219
- # Disable impressions if @config.impressions_queue_size == -1
220
- @impressions_repository.add(split_name, 'key_name' => matching_key, 'treatment' => result, 'time' => (Time.now.to_f * 1000.0).to_i)
221
- end
149
+ result = result.nil? ? Treatments::CONTROL : result
222
150
 
223
- # Measure
224
- @adapter.metrics.time("sdk.get_treatment", latency)
225
- rescue StandardError => error
226
- @config.log_found_exception(__method__.to_s, error)
151
+ begin
152
+ latency = (Time.now - start) * 1000.0
153
+ if @config.impressions_queue_size > 0 && store_impressions
154
+ # Disable impressions if @config.impressions_queue_size == -1
155
+ @impressions_repository.add(split_name, 'key_name' => matching_key, 'treatment' => result, 'time' => (Time.now.to_f * 1000.0).to_i)
227
156
  end
228
157
 
158
+ # Measure
159
+ @adapter.metrics.time("sdk.get_treatment", latency)
160
+ rescue StandardError => error
161
+ @config.log_found_exception(__method__.to_s, error)
229
162
  end
230
163
 
231
164
  result
@@ -247,42 +180,6 @@ module SplitIoClient
247
180
  def self.sdk_version
248
181
  'ruby-'+SplitIoClient::VERSION
249
182
  end
250
-
251
- private
252
-
253
- #
254
- # method to check if the sdk is running in localhost mode based on api key
255
- #
256
- # @return [boolean] True if is in localhost mode, false otherwise
257
- def is_localhost_mode?
258
- @localhost_mode
259
- end
260
-
261
- #
262
- # method to set localhost mode features by reading .splits file located at home directory
263
- #
264
- # @returns [void]
265
- def load_localhost_mode_features
266
- splits_file = File.join(Dir.home, ".split")
267
- if File.exists?(splits_file)
268
- line_num=0
269
- File.open(splits_file).each do |line|
270
- line_data = line.strip.split(" ")
271
- @localhost_mode_features << {feature: line_data[0], treatment: line_data[1]} unless line.start_with?('#') || line.strip.empty?
272
- end
273
- end
274
- end
275
-
276
- #
277
- # method to check the treatment for the given feature in localhost mode
278
- #
279
- # @return [boolean] true if the feature is available in localhost mode, false otherwise
280
- def get_localhost_treatment(feature)
281
- localhost_result = Treatments::CONTROL
282
- treatment = @localhost_mode_features.select{|h| h[:feature] == feature}.last
283
- localhost_result = treatment[:treatment] if !treatment.nil?
284
- localhost_result
285
- end
286
183
  end
287
184
 
288
185
  private_constant :SplitClient
@@ -297,10 +194,7 @@ module SplitIoClient
297
194
  @impressions_repository = SplitIoClient::Cache::Repositories::ImpressionsRepository.new(@config.impressions_adapter, @config)
298
195
  @metrics_repository = SplitIoClient::Cache::Repositories::MetricsRepository.new(@config.metrics_adapter, @config)
299
196
  @sdk_blocker = SplitIoClient::Cache::Stores::SDKBlocker.new(@config)
300
- @adapter = api_key != 'localhost' \
301
- ? SplitAdapter.new(api_key, @config, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @sdk_blocker)
302
- : nil
303
- @localhost_mode = api_key == 'localhost'
197
+ @adapter = SplitAdapter.new(api_key, @config, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository, @sdk_blocker)
304
198
 
305
199
  @sdk_blocker.block if @config.block_until_ready
306
200
  end
@@ -325,11 +219,11 @@ module SplitIoClient
325
219
  attr_reader :adapter
326
220
 
327
221
  def init_client
328
- SplitClient.new(@api_key, @config, @adapter, @localhost_mode, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository)
222
+ SplitClient.new(@api_key, @config, @adapter, @splits_repository, @segments_repository, @impressions_repository, @metrics_repository)
329
223
  end
330
224
 
331
225
  def init_manager
332
- SplitManager.new(@api_key, @config, @adapter, @splits_repository, @localhost_mode)
226
+ SplitManager.new(@api_key, @config, @adapter, @splits_repository)
333
227
  end
334
228
  end
335
229
  end