Skip to content

Commit aeea680

Browse files
committed
EventBuilder uses the same logger as Project
- Previously, `EventBuilder` was instantiated by `Project` with the value of the `logger` local. However, when `Project` was not instantiated with a custom `logger`, `EventBuilder` would be instantiated with `nil` logger, which would cause `track` to raise a `NoMethodError` when called with tags. - This commit changes the `Project` constructor to pass the `@logger` instance variable to `EventBuilder`, so that they are using the same logger, custom or otherwise. - The added spec fails prior to the constructor change
1 parent 29a511b commit aeea680

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

lib/optimizely.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def initialize(datafile, event_dispatcher = nil, logger = nil, error_handler = n
7979
end
8080

8181
@decision_service = DecisionService.new(@config, @user_profile_service)
82-
@event_builder = EventBuilder.new(@config, logger)
82+
@event_builder = EventBuilder.new(@config, @logger)
8383
@notification_center = NotificationCenter.new(@logger, @error_handler)
8484
end
8585

spec/project_spec.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,19 @@ class InvalidErrorHandler; end
459459
expect(project_instance.event_dispatcher).to have_received(:dispatch_event).with(Optimizely::Event.new(:post, conversion_log_url, params, post_headers)).once
460460
end
461461

462+
it 'should properly track an event with tags even when the project does not have a custom logger' do
463+
project_instance = Optimizely::Project.new(config_body_JSON)
464+
465+
params = @expected_track_event_params
466+
params[:visitors][0][:snapshots][0][:decisions][0][:variation_id] = '111129'
467+
params[:visitors][0][:snapshots][0][:events][0][:tags] = {revenue: 42}
468+
469+
project_instance.config.set_forced_variation('test_experiment', 'test_user', 'variation')
470+
allow(project_instance.event_dispatcher).to receive(:dispatch_event).with(instance_of(Optimizely::Event))
471+
project_instance.track('test_event', 'test_user', nil, revenue: 42)
472+
expect(project_instance.event_dispatcher).to have_received(:dispatch_event).with(Optimizely::Event.new(:post, conversion_log_url, params, post_headers)).once
473+
end
474+
462475
it 'should log a message if an exception has occurred during dispatching of the event' do
463476
allow(project_instance.event_dispatcher).to receive(:dispatch_event).with(any_args).and_raise(RuntimeError)
464477
project_instance.track('test_event', 'test_user')

0 commit comments

Comments
 (0)