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