Skip to content

Commit 22010c4

Browse files
author
Mike Ng
committed
Merge 2.0.3.
1 parent 5636b9d commit 22010c4

File tree

4 files changed

+82
-17
lines changed

4 files changed

+82
-17
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 2.0.3
2+
June 25th, 2018
3+
4+
### Bug Fixes
5+
Fixes [#109](https://github.com/optimizely/ruby-sdk/issues/109)
6+
17
## 2.0.2
28
June 19th, 2018
39

lib/optimizely.rb

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -63,24 +63,24 @@ def initialize(datafile, event_dispatcher = nil, logger = nil, error_handler = n
6363
validate_instantiation_options(datafile, skip_json_validation)
6464
rescue InvalidInputError => e
6565
@is_valid = false
66-
logger = SimpleLogger.new
67-
logger.log(Logger::ERROR, e.message)
66+
@logger = SimpleLogger.new
67+
@logger.log(Logger::ERROR, e.message)
6868
return
6969
end
7070

7171
begin
7272
@config = ProjectConfig.new(datafile, @logger, @error_handler)
7373
rescue
7474
@is_valid = false
75-
logger = SimpleLogger.new
76-
logger.log(Logger::ERROR, InvalidInputError.new('datafile').message)
75+
@logger = SimpleLogger.new
76+
@logger.log(Logger::ERROR, InvalidInputError.new('datafile').message)
7777
return
7878
end
7979

8080
unless @config.parsing_succeeded?
8181
@is_valid = false
82-
logger = SimpleLogger.new
83-
logger.log(Logger::ERROR, InvalidDatafileVersionError.new.message)
82+
@logger = SimpleLogger.new
83+
@logger.log(Logger::ERROR, InvalidDatafileVersionError.new.message)
8484
return
8585
end
8686

@@ -100,8 +100,7 @@ def activate(experiment_key, user_id, attributes = nil)
100100
# Returns nil if experiment is not Running, if user is not in experiment, or if datafile is invalid.
101101

102102
unless @is_valid
103-
logger = SimpleLogger.new
104-
logger.log(Logger::ERROR, InvalidDatafileError.new('activate').message)
103+
@logger.log(Logger::ERROR, InvalidDatafileError.new('activate').message)
105104
return nil
106105
end
107106

@@ -137,8 +136,7 @@ def get_variation(experiment_key, user_id, attributes = nil)
137136
# Returns nil if experiment is not Running, if user is not in experiment, or if datafile is invalid.
138137

139138
unless @is_valid
140-
logger = SimpleLogger.new
141-
logger.log(Logger::ERROR, InvalidDatafileError.new('get_variation').message)
139+
@logger.log(Logger::ERROR, InvalidDatafileError.new('get_variation').message)
142140
return nil
143141
end
144142

@@ -200,8 +198,7 @@ def track(event_key, user_id, attributes = nil, event_tags = nil)
200198
# event_tags - Hash representing metadata associated with the event.
201199

202200
unless @is_valid
203-
logger = SimpleLogger.new
204-
logger.log(Logger::ERROR, InvalidDatafileError.new('track').message)
201+
@logger.log(Logger::ERROR, InvalidDatafileError.new('track').message)
205202
return nil
206203
end
207204

@@ -259,8 +256,7 @@ def is_feature_enabled(feature_flag_key, user_id, attributes = nil)
259256
# False if the feature is disabled.
260257
# False if the feature is not found.
261258
unless @is_valid
262-
logger = SimpleLogger.new
263-
logger.log(Logger::ERROR, InvalidDatafileError.new('is_feature_enabled').message)
259+
@logger.log(Logger::ERROR, InvalidDatafileError.new('is_feature_enabled').message)
264260
return false
265261
end
266262

@@ -315,8 +311,7 @@ def get_enabled_features(user_id, attributes = nil)
315311
enabled_features = []
316312

317313
unless @is_valid
318-
logger = SimpleLogger.new
319-
logger.log(Logger::ERROR, InvalidDatafileError.new('get_enabled_features').message)
314+
@logger.log(Logger::ERROR, InvalidDatafileError.new('get_enabled_features').message)
320315
return enabled_features
321316
end
322317

@@ -343,6 +338,11 @@ def get_feature_variable_string(feature_flag_key, variable_key, user_id, attribu
343338
# Returns the string variable value.
344339
# Returns nil if the feature flag or variable are not found.
345340

341+
unless @is_valid
342+
@logger.log(Logger::ERROR, InvalidDatafileError.new('get_feature_variable_string').message)
343+
return nil
344+
end
345+
346346
variable_value = get_feature_variable_for_type(
347347
feature_flag_key,
348348
variable_key,
@@ -365,6 +365,11 @@ def get_feature_variable_boolean(feature_flag_key, variable_key, user_id, attrib
365365
# Returns the boolean variable value.
366366
# Returns nil if the feature flag or variable are not found.
367367

368+
unless @is_valid
369+
@logger.log(Logger::ERROR, InvalidDatafileError.new('get_feature_variable_boolean').message)
370+
return nil
371+
end
372+
368373
variable_value = get_feature_variable_for_type(
369374
feature_flag_key,
370375
variable_key,
@@ -387,6 +392,11 @@ def get_feature_variable_double(feature_flag_key, variable_key, user_id, attribu
387392
# Returns the double variable value.
388393
# Returns nil if the feature flag or variable are not found.
389394

395+
unless @is_valid
396+
@logger.log(Logger::ERROR, InvalidDatafileError.new('get_feature_variable_double').message)
397+
return nil
398+
end
399+
390400
variable_value = get_feature_variable_for_type(
391401
feature_flag_key,
392402
variable_key,
@@ -409,6 +419,11 @@ def get_feature_variable_integer(feature_flag_key, variable_key, user_id, attrib
409419
# Returns the integer variable value.
410420
# Returns nil if the feature flag or variable are not found.
411421

422+
unless @is_valid
423+
@logger.log(Logger::ERROR, InvalidDatafileError.new('get_feature_variable_integer').message)
424+
return nil
425+
end
426+
412427
variable_value = get_feature_variable_for_type(
413428
feature_flag_key,
414429
variable_key,

lib/optimizely/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@
1717
#
1818
module Optimizely
1919
CLIENT_ENGINE = 'ruby-sdk'
20-
VERSION = '2.0.2'
20+
VERSION = '2.0.3'
2121
end

spec/project_spec.rb

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,17 @@ class InvalidErrorHandler; end
895895
user_id = 'test_user'
896896
user_attributes = {}
897897

898+
it 'should return nil when called with invalid project config' do
899+
logger = double('logger')
900+
allow(logger).to receive(:log)
901+
allow(Optimizely::SimpleLogger).to receive(:new) { logger }
902+
invalid_project = Optimizely::Project.new('invalid', nil, spy_logger)
903+
expect(invalid_project.get_feature_variable_string('string_single_variable_feature', 'string_variable', user_id, user_attributes))
904+
.to eq(nil)
905+
expect(logger).to have_received(:log).once.with(Logger::ERROR, 'Provided datafile is in an invalid format.')
906+
expect(logger).to have_received(:log).once.with(Logger::ERROR, 'Provided datafile is in an invalid format. Aborting get_feature_variable_string.')
907+
end
908+
898909
describe 'when the feature flag is enabled for the user' do
899910
describe 'and a variable usage instance is not found' do
900911
it 'should return the default variable value' do
@@ -1029,6 +1040,17 @@ class InvalidErrorHandler; end
10291040
user_id = 'test_user'
10301041
user_attributes = {}
10311042

1043+
it 'should return nil when called with invalid project config' do
1044+
logger = double('logger')
1045+
allow(logger).to receive(:log)
1046+
allow(Optimizely::SimpleLogger).to receive(:new) { logger }
1047+
invalid_project = Optimizely::Project.new('invalid', nil, spy_logger)
1048+
expect(invalid_project.get_feature_variable_boolean('boolean_single_variable_feature', 'boolean_variable', user_id, user_attributes))
1049+
.to eq(nil)
1050+
expect(logger).to have_received(:log).once.with(Logger::ERROR, 'Provided datafile is in an invalid format.')
1051+
expect(logger).to have_received(:log).once.with(Logger::ERROR, 'Provided datafile is in an invalid format. Aborting get_feature_variable_boolean.')
1052+
end
1053+
10321054
it 'should return the variable value for the variation for the user is bucketed into' do
10331055
boolean_feature = project_instance.config.feature_flag_key_map['boolean_single_variable_feature']
10341056
rollout = project_instance.config.rollout_id_map[boolean_feature['rolloutId']]
@@ -1055,6 +1077,17 @@ class InvalidErrorHandler; end
10551077
user_id = 'test_user'
10561078
user_attributes = {}
10571079

1080+
it 'should return nil when called with invalid project config' do
1081+
logger = double('logger')
1082+
allow(logger).to receive(:log)
1083+
allow(Optimizely::SimpleLogger).to receive(:new) { logger }
1084+
invalid_project = Optimizely::Project.new('invalid', nil, spy_logger)
1085+
expect(invalid_project.get_feature_variable_double('double_single_variable_feature', 'double_variable', user_id, user_attributes))
1086+
.to eq(nil)
1087+
expect(logger).to have_received(:log).once.with(Logger::ERROR, 'Provided datafile is in an invalid format.')
1088+
expect(logger).to have_received(:log).once.with(Logger::ERROR, 'Provided datafile is in an invalid format. Aborting get_feature_variable_double.')
1089+
end
1090+
10581091
it 'should return the variable value for the variation for the user is bucketed into' do
10591092
double_feature = project_instance.config.feature_flag_key_map['double_single_variable_feature']
10601093
experiment_to_return = project_instance.config.experiment_id_map[double_feature['experimentIds'][0]]
@@ -1082,6 +1115,17 @@ class InvalidErrorHandler; end
10821115
user_id = 'test_user'
10831116
user_attributes = {}
10841117

1118+
it 'should return nil when called with invalid project config' do
1119+
logger = double('logger')
1120+
allow(logger).to receive(:log)
1121+
allow(Optimizely::SimpleLogger).to receive(:new) { logger }
1122+
invalid_project = Optimizely::Project.new('invalid', nil, spy_logger)
1123+
expect(invalid_project.get_feature_variable_integer('integer_single_variable_feature', 'integer_variable', user_id, user_attributes))
1124+
.to eq(nil)
1125+
expect(logger).to have_received(:log).once.with(Logger::ERROR, 'Provided datafile is in an invalid format.')
1126+
expect(logger).to have_received(:log).once.with(Logger::ERROR, 'Provided datafile is in an invalid format. Aborting get_feature_variable_integer.')
1127+
end
1128+
10851129
it 'should return the variable value for the variation for the user is bucketed into' do
10861130
integer_feature = project_instance.config.feature_flag_key_map['integer_single_variable_feature']
10871131
experiment_to_return = project_instance.config.experiment_id_map[integer_feature['experimentIds'][0]]

0 commit comments

Comments
 (0)