1717#
1818require_relative 'optimizely/audience'
1919require_relative 'optimizely/config/datafile_project_config'
20+ require_relative 'optimizely/config_manager/http_project_config_manager'
2021require_relative 'optimizely/config_manager/static_project_config_manager'
2122require_relative 'optimizely/decision_service'
2223require_relative 'optimizely/error_handler'
@@ -46,8 +47,22 @@ class Project
4647 # By default all exceptions will be suppressed.
4748 # @param user_profile_service - Optional component which provides methods to store and retreive user profiles.
4849 # @param skip_json_validation - Optional boolean param to skip JSON schema validation of the provided datafile.
49-
50- def initialize ( datafile , event_dispatcher = nil , logger = nil , error_handler = nil , skip_json_validation = false , user_profile_service = nil )
50+ # @params sdk_key - Optional string uniquely identifying the datafile corresponding to project and environment combination.
51+ # Must provide at least one of datafile or sdk_key.
52+ # @param config_manager - Optional Responds to get_config.
53+ # @param notification_center - Optional Instance of NotificationCenter.
54+
55+ def initialize (
56+ datafile = nil ,
57+ event_dispatcher = nil ,
58+ logger = nil ,
59+ error_handler = nil ,
60+ skip_json_validation = false ,
61+ user_profile_service = nil ,
62+ sdk_key = nil ,
63+ config_manager = nil ,
64+ notification_center = nil
65+ )
5166 @logger = logger || NoOpLogger . new
5267 @error_handler = error_handler || NoOpErrorHandler . new
5368 @event_dispatcher = event_dispatcher || EventDispatcher . new
@@ -60,10 +75,24 @@ def initialize(datafile, event_dispatcher = nil, logger = nil, error_handler = n
6075 @logger . log ( Logger ::ERROR , e . message )
6176 end
6277
63- @config_manager = StaticProjectConfigManager . new ( datafile , @logger , @error_handler , skip_json_validation )
78+ @notification_center = notification_center . is_a? ( Optimizely ::NotificationCenter ) ? notification_center : NotificationCenter . new ( @logger , @error_handler )
79+
80+ @config_manager = if config_manager . respond_to? ( :get_config )
81+ config_manager
82+ elsif sdk_key
83+ HTTPProjectConfigManager . new (
84+ sdk_key : sdk_key ,
85+ datafile : datafile ,
86+ logger : @logger ,
87+ error_handler : @error_handler ,
88+ skip_json_validation : skip_json_validation ,
89+ notification_center : @notification_center
90+ )
91+ else
92+ StaticProjectConfigManager . new ( datafile , @logger , @error_handler , skip_json_validation )
93+ end
6494 @decision_service = DecisionService . new ( @logger , @user_profile_service )
6595 @event_builder = EventBuilder . new ( @logger )
66- @notification_center = NotificationCenter . new ( @logger , @error_handler )
6796 end
6897
6998 # Buckets visitor and sends impression event to Optimizely.
0 commit comments