Skip to content

Commit

Permalink
Raise an exception when trying to subscribe to an unregister event
Browse files Browse the repository at this point in the history
  • Loading branch information
GustavoCaso committed Mar 2, 2018
1 parent d5071b3 commit 13a4009
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/dry/events/bus.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,11 @@ def subscribe(event_id, query, &block)
def subscribed?(listener)
listeners.values.any? { |value| value.any? { |(block, _)| block.equal?(listener) } }
end

# @api private
def register_event?(event_id)
events.keys.any? { |value| value == event_id }
end
end
end
end
23 changes: 23 additions & 0 deletions lib/dry/events/publisher.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@ def initialize(id)
end
end

# @api public
UnregisterEventError = Class.new(StandardError) do
# @api private
def initialize(event_id)
super("you are trying to subscribe to an event: #{event_id} that has not been register")
end
end

# Extension used for classes that can publish events
#
# @example
Expand Down Expand Up @@ -189,6 +197,7 @@ def publish(event_id, payload = EMPTY_HASH)
#
# @api public
def subscribe(object_or_event_id, query = EMPTY_HASH, &block)
raise UnregisterEventError, object_or_event_id unless registered_event?(object_or_event_id)
if block
__bus__.subscribe(object_or_event_id, query, &block)
else
Expand Down Expand Up @@ -236,6 +245,20 @@ def process(event_id, payload = EMPTY_HASH, &block)
def __bus__
@__bus__ ||= self.class.new_bus
end

# Utility method that check that the event has been registered
#
# @return [Boolean]
#
# @api private
def registered_event?(object_or_event_id)
case object_or_event_id
when String, Symbol
__bus__.register_event?(object_or_event_id)
else
true
end
end
end
end
end
Expand Down
8 changes: 8 additions & 0 deletions spec/unit/dry/events/publisher_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@

expect(publisher.subscribed?(listener)).to be(true)
end

it 'raises an exception when subscribing to an unregister event' do
listener = -> * { }

expect {
publisher.subscribe(:not_register, &listener)
}.to raise_error(Dry::Events::UnregisterEventError, /not_register/)
end
end

describe '#register_event' do
Expand Down

0 comments on commit 13a4009

Please sign in to comment.