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