Skip to content

Commit 19a3599

Browse files
rashidspMichael Ng
authored andcommitted
refact: Updates OptimizelyFactory methods. (#183)
1 parent ba7d0cc commit 19a3599

File tree

2 files changed

+51
-47
lines changed

2 files changed

+51
-47
lines changed

lib/optimizely/optimizely_factory.rb

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,41 @@
1919
require 'optimizely'
2020
module Optimizely
2121
class OptimizelyFactory
22-
def self.create_default_instance_with_sdk_key(sdk_key)
23-
Optimizely::Project.new(nil, nil, nil, nil, nil, nil, sdk_key)
24-
end
25-
26-
def self.create_default_instance_with_sdk_key_and_datafile(sdk_key, datafile = nil)
22+
# Returns a new optimizely instance.
23+
#
24+
# @params sdk_key - Required String uniquely identifying the fallback datafile corresponding to project.
25+
# @param fallback datafile - Optional JSON string datafile.
26+
def self.default_instance(sdk_key, datafile = nil)
2727
Optimizely::Project.new(datafile, nil, nil, nil, nil, nil, sdk_key)
2828
end
2929

30-
def self.create_default_instance_with_config_manager(config_manager)
30+
# Returns a new optimizely instance.
31+
#
32+
# @param config_manager - Required ConfigManagerInterface Responds to get_config.
33+
def self.default_instance_with_config_manager(config_manager)
3134
Optimizely::Project.new(nil, nil, nil, nil, nil, nil, nil, config_manager)
3235
end
3336

34-
def self.create_default_instance(
37+
# Returns a new optimizely instance.
38+
#
39+
# @params sdk_key - Required String uniquely identifying the datafile corresponding to project.
40+
# @param fallback datafile - Optional JSON string datafile.
41+
# @param event_dispatcher - Optional EventDispatcherInterface Provides a dispatch_event method which if given a URL and params sends a request to it.
42+
# @param logger - Optional LoggerInterface Provides a log method to log messages. By default nothing would be logged.
43+
# @param error_handler - Optional ErrorHandlerInterface which provides a handle_error method to handle exceptions.
44+
# By default all exceptions will be suppressed.
45+
# @param skip_json_validation - Optional Boolean param to skip JSON schema validation of the provided datafile.
46+
# @param user_profile_service - Optional UserProfileServiceInterface Provides methods to store and retreive user profiles.
47+
# @param config_manager - Optional ConfigManagerInterface Responds to get_config.
48+
# @param notification_center - Optional Instance of NotificationCenter.
49+
def self.custom_instance(
50+
sdk_key,
3551
datafile = nil,
3652
event_dispatcher = nil,
3753
logger = nil,
3854
error_handler = nil,
3955
skip_json_validation = false,
4056
user_profile_service = nil,
41-
sdk_key = nil,
4257
config_manager = nil,
4358
notification_center = nil
4459
)

spec/optimizely_factory_spec.rb

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -30,60 +30,40 @@
3030
let(:event_dispatcher) { Optimizely::EventDispatcher.new }
3131
let(:notification_center) { Optimizely::NotificationCenter.new(spy_logger, error_handler) }
3232

33-
describe '.create_default_instance' do
34-
it 'should take static project config manager when sdk_key and config manager are not given' do
35-
allow(Optimizely::StaticProjectConfigManager).to receive(:new)
36-
static_project_config_manager = Optimizely::StaticProjectConfigManager.new(datafile, spy_logger, error_handler, false)
37-
optimizely_instance = Optimizely::OptimizelyFactory.create_default_instance(
38-
datafile,
39-
event_dispatcher,
40-
spy_logger,
41-
error_handler,
42-
false,
43-
user_profile_service,
44-
nil,
45-
nil,
46-
notification_center
47-
)
48-
expect(optimizely_instance.config_manager). to eq(static_project_config_manager)
49-
end
50-
end
51-
52-
describe '.create_default_instance_with_config_manager' do
53-
it 'should take provided custom config manager' do
54-
class CustomConfigManager
55-
def get_config; end
56-
end
57-
58-
custom_config_manager = CustomConfigManager.new
59-
optimizely_instance = Optimizely::OptimizelyFactory.create_default_instance_with_config_manager(custom_config_manager)
60-
expect(optimizely_instance.config_manager). to eq(custom_config_manager)
61-
end
62-
end
63-
64-
describe '.create_default_instance_with_sdk_key' do
33+
describe '.default_instance' do
6534
it 'should take http config manager' do
6635
allow(Optimizely::HTTPProjectConfigManager).to receive(:new)
6736

6837
http_project_config_manager = Optimizely::HTTPProjectConfigManager.new(
6938
sdk_key: 'sdk_key',
70-
datafile: nil,
39+
datafile: datafile,
7140
logger: spy_logger,
7241
error_handler: error_handler,
7342
skip_json_validation: false,
7443
notification_center: notification_center
7544
)
7645

77-
optimizely_instance = Optimizely::OptimizelyFactory.create_default_instance_with_sdk_key('sdk_key')
46+
optimizely_instance = Optimizely::OptimizelyFactory.default_instance('sdk_key', datafile)
7847

7948
expect(optimizely_instance.config_manager). to eq(http_project_config_manager)
8049
end
8150
end
8251

83-
describe '.create_default_instance_with_sdk_key_and_datafile' do
84-
it 'should take http config manager' do
85-
allow(Optimizely::HTTPProjectConfigManager).to receive(:new)
52+
describe '.default_instance_with_manager' do
53+
it 'should take provided custom config manager' do
54+
class CustomConfigManager
55+
def get_config; end
56+
end
57+
58+
custom_config_manager = CustomConfigManager.new
59+
optimizely_instance = Optimizely::OptimizelyFactory.default_instance_with_config_manager(custom_config_manager)
60+
expect(optimizely_instance.config_manager). to eq(custom_config_manager)
61+
end
62+
end
8663

64+
describe '.custom_instance' do
65+
it 'should take http config manager when sdk key is given' do
66+
allow(Optimizely::HTTPProjectConfigManager).to receive(:new)
8767
http_project_config_manager = Optimizely::HTTPProjectConfigManager.new(
8868
sdk_key: 'sdk_key',
8969
datafile: datafile,
@@ -93,8 +73,17 @@ def get_config; end
9373
notification_center: notification_center
9474
)
9575

96-
optimizely_instance = Optimizely::OptimizelyFactory.create_default_instance_with_sdk_key_and_datafile('sdk_key', datafile)
97-
76+
optimizely_instance = Optimizely::OptimizelyFactory.custom_instance(
77+
'sdk_key',
78+
datafile,
79+
event_dispatcher,
80+
spy_logger,
81+
error_handler,
82+
false,
83+
user_profile_service,
84+
nil,
85+
notification_center
86+
)
9887
expect(optimizely_instance.config_manager). to eq(http_project_config_manager)
9988
end
10089
end

0 commit comments

Comments
 (0)