module Dry::Events::Publisher::InstanceMethods

Instance interface for publishers

@api public

Public Instance Methods

__bus__() click to toggle source

Internal event bus

@return [Bus]

@api private

# File lib/dry/events/publisher.rb, line 276
def __bus__
  @__bus__ ||= self.class.new_bus
end
process(event_id, payload = EMPTY_HASH, &block) click to toggle source

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(event_id, payload = EMPTY_HASH) click to toggle source

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
Also aliased as: trigger
register_event(event_id, payload = EMPTY_HASH) click to toggle source

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(object_or_event_id, filter_hash = EMPTY_HASH, &block) click to toggle source

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
subscribed?(listener) click to toggle source

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
trigger(event_id, payload = EMPTY_HASH)
Alias for: publish
unsubscribe(listener) click to toggle source

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