Class: Akasha::EventRouter

Inherits:
Object
  • Object
show all
Defined in:
lib/akasha/event_router.rb

Overview

Routes events to event listeners.

Instance Method Summary collapse

Constructor Details

#initializeEventRouter

Returns a new instance of EventRouter.



4
5
6
# File 'lib/akasha/event_router.rb', line 4

def initialize
  @routes = Hash.new { |hash, key| hash[key] = [] }
end

Instance Method Details

#call(aggregate_id, event) ⇒ Object

Routes an event (an Akasha::Event instance). This is interface allowing subscription via ‘Akasha::Repository#subscribe`.



28
29
30
# File 'lib/akasha/event_router.rb', line 28

def call(aggregate_id, event)
  route(event.name, aggregate_id, **event.data)
end

#register_event_listener(event_name, listener_class) ⇒ Object

Registers a new event listener, derived from ‘Akasha::EventListener`.



10
11
12
# File 'lib/akasha/event_router.rb', line 10

def register_event_listener(event_name, listener_class)
  @routes[event_name] << listener_class
end

#route(event_name, aggregate_id, **data) ⇒ Object

Routes an event.



15
16
17
18
19
20
21
22
23
24
# File 'lib/akasha/event_router.rb', line 15

def route(event_name, aggregate_id, **data)
  @routes[event_name].each do |listener_class|
    listener = listener_class.new
    begin
      listener.public_send(:"on_#{event_name}", aggregate_id, **data)
    rescue RuntimeError => e
      log "Error handling event #{event_name.inspect}: #{e}"
    end
  end
end