module Dry::Events::Publisher::InstanceMethods
Instance interface for publishers
@api public
Public Instance Methods
Internal event bus
@return [Bus]
@api private
# File lib/dry/events/publisher.rb, line 276 def __bus__ @__bus__ ||= self.class.new_bus end
Utility method which yields event with each of its listeners
Listeners are already filtered out when filter was provided during subscription
@param [Symbol,String] event_id The event identifier param [Hash] payload An optional payload
@api public
# File lib/dry/events/publisher.rb, line 267 def process(event_id, payload = EMPTY_HASH, &block) __bus__.process(event_id, payload, &block) end
Publish an event
@param [String] event_id The event identifier @param [Hash] payload An optional payload
@api public
# File lib/dry/events/publisher.rb, line 204 def publish(event_id, payload = EMPTY_HASH) if __bus__.can_handle?(event_id) __bus__.publish(event_id, payload) self else raise UnregisteredEventError, event_id end end
Register a new event type at instance level
@param [Symbol,String] event_id The event identifier @param [Hash] payload Optional default payload
@return [self]
@api public
# File lib/dry/events/publisher.rb, line 193 def register_event(event_id, payload = EMPTY_HASH) __bus__.events[event_id] = Event.new(event_id, payload) self end
Subscribe to events.
If the filter parameter is provided, filters events by payload.
@param [Symbol,String,Object] object_or_event_id The event identifier or a listener object @param [Hash] filter_hash An optional event filter
@return [Object] self
@api public
# File lib/dry/events/publisher.rb, line 224 def subscribe(object_or_event_id, filter_hash = EMPTY_HASH, &block) if __bus__.can_handle?(object_or_event_id) filter = Filter.new(filter_hash) if block __bus__.subscribe(object_or_event_id, filter, &block) else __bus__.attach(object_or_event_id, filter) end self else raise InvalidSubscriberError, object_or_event_id end end
Return true if a given listener has been subscribed to any event
@api public
# File lib/dry/events/publisher.rb, line 254 def subscribed?(listener) __bus__.subscribed?(listener) end
Unsubscribe a listener
@param [Object] listener The listener object
@return [self]
@api public
# File lib/dry/events/publisher.rb, line 247 def unsubscribe(listener) __bus__.detach(listener) end