class Synapse::EventBus::SimpleEventBus

Implementation of an event bus that notifies any subscribed event listeners in the calling thread. Listeners are expected to implement asynchronous handing themselves, if desired.

Public Class Methods

new() click to toggle source
# File lib/synapse/event_bus/simple_event_bus.rb, line 6
def initialize
  @listeners = Set.new
  @logger = Logging.logger[self.class]
end

Public Instance Methods

publish(*events) click to toggle source

@api public @param [EventMessage…] events @return [undefined]

# File lib/synapse/event_bus/simple_event_bus.rb, line 14
def publish(*events)
  return if @listeners.empty?

  events.flatten!
  events.each do |event|
    @listeners.each do |listener|
      @logger.debug "Publishing event {#{event.payload_type}} to {#{listener.class}}"

      listener.notify event
    end
  end
end
subscribe(listener) click to toggle source

@api public @param [EventListener] listener @return [undefined]

# File lib/synapse/event_bus/simple_event_bus.rb, line 39
def subscribe(listener)
  if @listeners.add? listener
    @logger.debug "Event listener {#{listener.class}} subscribed"
  else
    @logger.info "Event listener {#{listener.class}} is already subscribed"
  end
end
subscribed?(listener) click to toggle source

Returns true if the given listener is subscribed to this event bus

@api public @param [EventListener] listener @return [Boolean]

# File lib/synapse/event_bus/simple_event_bus.rb, line 32
def subscribed?(listener)
  @listeners.include? listener
end
unsubscribe(listener) click to toggle source

@api public @param [EventListener] listener @return [undefined]

# File lib/synapse/event_bus/simple_event_bus.rb, line 50
def unsubscribe(listener)
  if @listeners.delete? listener
    @logger.debug "Event listener {#{listener.class}} unsubscribed"
  else
    @logger.info "Event listener {#{listener.class}} is not subscribed"
  end
end