Skip to content

Commit 1ee0df7

Browse files
fix: errors being raised without required args (#250)
Co-authored-by: Tom Zurkan <thomas.zurkan@optimizely.com>
1 parent c1d0cb7 commit 1ee0df7

File tree

5 files changed

+33
-25
lines changed

5 files changed

+33
-25
lines changed

lib/optimizely/config/datafile_project_config.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,9 @@ def self.create(datafile, logger, error_handler, skip_json_validation)
170170
config = new(datafile, logger, error_handler)
171171
rescue StandardError => e
172172
default_logger = SimpleLogger.new
173-
error_msg = e.class == InvalidDatafileVersionError ? e.message : InvalidInputError.new('datafile').message
174-
error_to_handle = e.class == InvalidDatafileVersionError ? InvalidDatafileVersionError : InvalidInputError
173+
error_to_handle = e.class == InvalidDatafileVersionError ? e : InvalidInputError.new('datafile')
174+
error_msg = error_to_handle.message
175+
175176
default_logger.log(Logger::ERROR, error_msg)
176177
error_handler.handle_error error_to_handle
177178
return nil

lib/optimizely/config_manager/http_project_config_manager.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,17 +284,19 @@ def get_datafile_url(sdk_key, url, url_template)
284284
# SDK key to determine URL from which to fetch the datafile.
285285
# Returns String representing URL to fetch datafile from.
286286
if sdk_key.nil? && url.nil?
287-
@logger.log(Logger::ERROR, 'Must provide at least one of sdk_key or url.')
288-
@error_handler.handle_error(InvalidInputsError)
287+
error_msg = 'Must provide at least one of sdk_key or url.'
288+
@logger.log(Logger::ERROR, error_msg)
289+
@error_handler.handle_error(InvalidInputsError.new(error_msg))
289290
end
290291

291292
unless url
292293
url_template ||= Helpers::Constants::CONFIG_MANAGER['DATAFILE_URL_TEMPLATE']
293294
begin
294295
return (url_template % sdk_key)
295296
rescue
296-
@logger.log(Logger::ERROR, "Invalid url_template #{url_template} provided.")
297-
@error_handler.handle_error(InvalidInputsError)
297+
error_msg = "Invalid url_template #{url_template} provided."
298+
@logger.log(Logger::ERROR, error_msg)
299+
@error_handler.handle_error(InvalidInputsError.new(error_msg))
298300
end
299301
end
300302

lib/optimizely/exceptions.rb

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# frozen_string_literal: true
22

33
#
4-
# Copyright 2016-2019, Optimizely and contributors
4+
# Copyright 2016-2020, Optimizely and contributors
55
#
66
# Licensed under the Apache License, Version 2.0 (the "License");
77
# you may not use this file except in compliance with the License.
@@ -81,14 +81,6 @@ def initialize(msg = 'Provided variation is not in datafile.')
8181
end
8282
end
8383

84-
class InvalidDatafileError < Error
85-
# Raised when a public method fails due to an invalid datafile
86-
87-
def initialize(aborted_method)
88-
super("Provided datafile is in an invalid format. Aborting #{aborted_method}.")
89-
end
90-
end
91-
9284
class InvalidDatafileVersionError < Error
9385
# Raised when a datafile with an unsupported version is provided
9486

spec/config_manager/http_project_config_manager_spec.rb

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
require 'optimizely/logger'
2525
describe Optimizely::HTTPProjectConfigManager do
2626
let(:config_body_JSON) { OptimizelySpec::VALID_CONFIG_BODY_JSON }
27-
let(:error_handler) { Optimizely::NoOpErrorHandler.new }
27+
let(:error_handler) { Optimizely::RaiseErrorHandler.new }
2828
let(:spy_logger) { spy('logger') }
2929

3030
before(:context) do
@@ -324,16 +324,30 @@
324324

325325
describe '#get_datafile_url' do
326326
it 'should log an error when both sdk key and url are nil' do
327-
expect(error_handler).to receive(:handle_error).once.with(Optimizely::InvalidInputsError)
327+
expect do
328+
@http_project_config_manager = Optimizely::HTTPProjectConfigManager.new(
329+
sdk_key: nil,
330+
url: nil,
331+
error_handler: error_handler,
332+
logger: spy_logger
333+
)
334+
end.to raise_error(Optimizely::InvalidInputsError, 'Must provide at least one of sdk_key or url.')
328335

329-
@http_project_config_manager = Optimizely::HTTPProjectConfigManager.new(
330-
sdk_key: nil,
331-
url: nil,
332-
error_handler: error_handler,
333-
logger: spy_logger
334-
)
335336
expect(spy_logger).to have_received(:log).once.with(Logger::ERROR, 'Must provide at least one of sdk_key or url.')
336337
end
338+
339+
it 'should log an error when invalid url_template is given' do
340+
expect do
341+
@http_project_config_manager = Optimizely::HTTPProjectConfigManager.new(
342+
sdk_key: 'valid_sdk_key',
343+
url_template: 'https://cdn.optimizely.com/datafiles/%d.json',
344+
error_handler: error_handler,
345+
logger: spy_logger
346+
)
347+
end.to raise_error(Optimizely::InvalidInputsError, 'Invalid url_template https://cdn.optimizely.com/datafiles/%d.json provided.')
348+
349+
expect(spy_logger).to have_received(:log).once.with(Logger::ERROR, 'Invalid url_template https://cdn.optimizely.com/datafiles/%d.json provided.')
350+
end
337351
end
338352

339353
describe '.polling_interval' do

spec/project_spec.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,8 @@ class InvalidErrorHandler; end
130130
it 'should log and raise an error when provided a datafile of unsupported version' do
131131
config_body_invalid_json = JSON.parse(config_body_invalid_JSON)
132132
expect_any_instance_of(Optimizely::SimpleLogger).to receive(:log).once.with(Logger::ERROR, "This version of the Ruby SDK does not support the given datafile version: #{config_body_invalid_json['version']}.")
133-
expect_any_instance_of(Optimizely::RaiseErrorHandler).to receive(:handle_error).once.with(Optimizely::InvalidDatafileVersionError)
134133

135-
Optimizely::Project.new(config_body_invalid_JSON, nil, nil, Optimizely::RaiseErrorHandler.new, true)
134+
expect { Optimizely::Project.new(config_body_invalid_JSON, nil, nil, Optimizely::RaiseErrorHandler.new, true) }.to raise_error(Optimizely::InvalidDatafileVersionError, 'This version of the Ruby SDK does not support the given datafile version: 5.')
136135
end
137136
end
138137

0 commit comments

Comments
 (0)