class Akasha::EventRouterBase
Base class for routing events to event listeners.
Public Class Methods
new(routes = {})
click to toggle source
# File lib/akasha/event_router_base.rb, line 4 def initialize(routes = {}) @routes = Hash.new { |hash, key| hash[key] = [] } # Support both array of listeners and a single listener normalized_routes = routes.map { |command, listeners| [command, Array(listeners)] }.to_h @routes.merge!(normalized_routes) end
Public Instance Methods
register_event_listener(event_name, listener)
click to toggle source
Registers a new event listener, derived from `Akasha::EventListener`.
# File lib/akasha/event_router_base.rb, line 13 def register_event_listener(event_name, listener) @routes[event_name] << listener end
route(event_name, aggregate_id, **data)
click to toggle source
Routes an event.
# File lib/akasha/event_router_base.rb, line 18 def route(event_name, aggregate_id, **data) @routes[event_name].each do |listener| listener = listener.new if listener.is_a?(Class) begin listener.public_send(:"on_#{event_name}", aggregate_id, **data) rescue RuntimeError => e log "Error handling event #{event_name.inspect}: #{e}" end end end
Protected Instance Methods
registered_event_names()
click to toggle source
# File lib/akasha/event_router_base.rb, line 31 def registered_event_names @routes.keys end
Private Instance Methods
log(msg)
click to toggle source
# File lib/akasha/event_router_base.rb, line 37 def log(msg) puts msg end