diff --git a/CHANGELOG.md b/CHANGELOG.md index bd07058..b41bda9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,12 @@ ## HEAD (unreleased) +Authors: Anthony Chao + +* fix: Incorrect event name logging with :with option + ## 3.0.0 (23rd May 2024) -Authors: maboelnour, kianmeng +Authors: maboelnour, kianmeng * docs: fix typos and example code diff --git a/lib/wisper/broadcasters/logger_broadcaster.rb b/lib/wisper/broadcasters/logger_broadcaster.rb index 1d76767..489d83b 100644 --- a/lib/wisper/broadcasters/logger_broadcaster.rb +++ b/lib/wisper/broadcasters/logger_broadcaster.rb @@ -8,9 +8,9 @@ def initialize(logger, broadcaster) @broadcaster = broadcaster end - def broadcast(listener, publisher, event, *args, **kwargs) + def broadcast(listener, publisher, method_to_call, event, *args, **kwargs) @logger.info("[WISPER] #{name(publisher)} published #{event} to #{name(listener)} with #{args_info(args)} and #{kwargs_info(kwargs)}") - @broadcaster.broadcast(listener, publisher, event, *args, **kwargs) + @broadcaster.broadcast(listener, publisher, method_to_call, event, *args, **kwargs) end private diff --git a/lib/wisper/broadcasters/send_broadcaster.rb b/lib/wisper/broadcasters/send_broadcaster.rb index 8faadc0..86d02ce 100644 --- a/lib/wisper/broadcasters/send_broadcaster.rb +++ b/lib/wisper/broadcasters/send_broadcaster.rb @@ -1,8 +1,8 @@ module Wisper module Broadcasters class SendBroadcaster - def broadcast(listener, publisher, event, *args, **kwargs) - listener.public_send(event, *args, **kwargs) + def broadcast(listener, publisher, method_to_call, _event, *args, **kwargs) + listener.public_send(method_to_call, *args, **kwargs) end end end diff --git a/lib/wisper/registration/object.rb b/lib/wisper/registration/object.rb index b5e8dc9..52c3443 100644 --- a/lib/wisper/registration/object.rb +++ b/lib/wisper/registration/object.rb @@ -15,7 +15,7 @@ def initialize(listener, **options) def broadcast(event, publisher, *args, **kwargs) method_to_call = map_event_to_method(event) if should_broadcast?(event) && listener.respond_to?(method_to_call) && publisher_in_scope?(publisher) - broadcaster.broadcast(listener, publisher, method_to_call, *args, **kwargs) + broadcaster.broadcast(listener, publisher, method_to_call, event, *args, **kwargs) end end diff --git a/spec/lib/wisper/broadcasters/logger_broadcaster_spec.rb b/spec/lib/wisper/broadcasters/logger_broadcaster_spec.rb index 7bfcf91..f3b123a 100644 --- a/spec/lib/wisper/broadcasters/logger_broadcaster_spec.rb +++ b/spec/lib/wisper/broadcasters/logger_broadcaster_spec.rb @@ -37,6 +37,14 @@ module Broadcasters publisher.send(:broadcast, :it_happened, 1, 2, key: 'value') end end + + context 'with specified method' do + it 'broadcasts the event to the listener' do + publisher.subscribe(listener, :broadcaster => LoggerBroadcaster.new(logger, Wisper::Broadcasters::SendBroadcaster.new), :with => :call) + expect(listener).to receive(:call).with(1, 2, key: 'value') + publisher.send(:broadcast, :it_happened, 1, 2, key: 'value') + end + end end describe 'unit tests:' do @@ -45,6 +53,7 @@ module Broadcasters let(:logger) { double('Logger').as_null_object } let(:broadcaster) { double('Broadcaster').as_null_object } let(:event) { 'thing_created' } + let(:method_to_call) { 'call' } subject { LoggerBroadcaster.new(logger, broadcaster) } @@ -55,12 +64,12 @@ module Broadcasters it 'logs published event' do expect(logger).to receive(:info).with('[WISPER] Publisher#1 published thing_created to Listener#2 with no arguments and no keyword arguments') - subject.broadcast(listener, publisher, event, *args, **kwargs) + subject.broadcast(listener, publisher, method_to_call, event, *args, **kwargs) end it 'delegates broadcast to a given broadcaster' do - expect(broadcaster).to receive(:broadcast).with(listener, publisher, event, *args, **kwargs) - subject.broadcast(listener, publisher, event, *args, **kwargs) + expect(broadcaster).to receive(:broadcast).with(listener, publisher, method_to_call, event, *args, **kwargs) + subject.broadcast(listener, publisher, method_to_call, event, *args, **kwargs) end end @@ -70,12 +79,12 @@ module Broadcasters it 'logs published event and arguments' do expect(logger).to receive(:info).with("[WISPER] Publisher#1 published thing_created to Listener#2 with Argument#3, Argument#4 and keyword arguments {:x=>:y}") - subject.broadcast(listener, publisher, event, *args, **kwargs) + subject.broadcast(listener, publisher, method_to_call, event, *args, **kwargs) end it 'delegates broadcast to a given broadcaster' do - expect(broadcaster).to receive(:broadcast).with(listener, publisher, event, *args, **kwargs) - subject.broadcast(listener, publisher, event, *args, **kwargs) + expect(broadcaster).to receive(:broadcast).with(listener, publisher, method_to_call, event, *args, **kwargs) + subject.broadcast(listener, publisher, method_to_call, event, *args, **kwargs) end context 'when argument is a hash' do @@ -85,7 +94,7 @@ module Broadcasters it 'logs published event and arguments' do expect(logger).to receive(:info).with("[WISPER] Publisher#1 published thing_created to Listener#2 with Hash##{hash.object_id}: #{hash.inspect} and keyword arguments {:x=>:y}") - subject.broadcast(listener, publisher, event, *args, **kwargs) + subject.broadcast(listener, publisher, method_to_call, event, *args, **kwargs) end end @@ -95,7 +104,7 @@ module Broadcasters it 'logs published event and arguments' do expect(logger).to receive(:info).with("[WISPER] Publisher#1 published thing_created to Listener#2 with #{number.class.name}##{number.object_id}: 10 and keyword arguments {:x=>:y}") - subject.broadcast(listener, publisher, event, *args, **kwargs) + subject.broadcast(listener, publisher, method_to_call, event, *args, **kwargs) end end @@ -104,7 +113,7 @@ module Broadcasters it 'logs published event and arguments' do expect(logger).to receive(:info).with("[WISPER] Publisher#1 published thing_created to Listener#2 with no arguments and keyword arguments {:x=>:y}") - subject.broadcast(listener, publisher, event, *args, **kwargs) + subject.broadcast(listener, publisher, method_to_call, event, *args, **kwargs) end end end diff --git a/spec/lib/wisper/broadcasters/send_broadcaster_spec.rb b/spec/lib/wisper/broadcasters/send_broadcaster_spec.rb index 0b9fd16..2b0f7ee 100644 --- a/spec/lib/wisper/broadcasters/send_broadcaster_spec.rb +++ b/spec/lib/wisper/broadcasters/send_broadcaster_spec.rb @@ -1,18 +1,19 @@ module Wisper module Broadcasters describe SendBroadcaster do - let(:listener) { double('listener') } - let(:event) { 'thing_created' } + let(:listener) { double('listener') } + let(:method_to_call) { 'call' } + let(:event) { 'thing_created' } describe '#broadcast' do context 'without arguments' do it 'sends event to listener without any arguments' do if RUBY_VERSION < '3.0' - expect(listener).to receive(event).with({}) + expect(listener).to receive(method_to_call).with({}) else - expect(listener).to receive(event).with(no_args) + expect(listener).to receive(method_to_call).with(no_args) end - subject.broadcast(listener, anything, event) + subject.broadcast(listener, anything, method_to_call, event) end end @@ -21,11 +22,11 @@ module Broadcasters it 'sends event to listener without any arguments' do if RUBY_VERSION < '3.0' - expect(listener).to receive(event).with({}) + expect(listener).to receive(method_to_call).with({}) else - expect(listener).to receive(event).with(no_args) + expect(listener).to receive(method_to_call).with(no_args) end - subject.broadcast(listener, anything, event, *args) + subject.broadcast(listener, anything, method_to_call, event, *args) end end @@ -35,11 +36,11 @@ module Broadcasters it 'sends event to listener with arguments' do if RUBY_VERSION < '3.0' - expect(listener).to receive(event).with(1, 2, 3, {}) + expect(listener).to receive(method_to_call).with(1, 2, 3, {}) else - expect(listener).to receive(event).with(1, 2, 3) + expect(listener).to receive(method_to_call).with(1, 2, 3) end - subject.broadcast(listener, anything, event, *args) + subject.broadcast(listener, anything, method_to_call, event, *args) end end @@ -47,8 +48,8 @@ module Broadcasters let(:kwargs) { { key: 'value' } } it 'sends event to listener with arguments' do - expect(listener).to receive(event).with({key: 'value'}) - subject.broadcast(listener, anything, event, **kwargs) + expect(listener).to receive(method_to_call).with({key: 'value'}) + subject.broadcast(listener, anything, method_to_call, event, **kwargs) end end @@ -57,8 +58,8 @@ module Broadcasters let(:kwargs) { { key: 'value' } } it 'sends event to listener with arguments' do - expect(listener).to receive(event).with(1,2,3, {key: 'value'}) - subject.broadcast(listener, anything, event, *args, **kwargs) + expect(listener).to receive(method_to_call).with(1,2,3, {key: 'value'}) + subject.broadcast(listener, anything, method_to_call, event, *args, **kwargs) end end end