class EventSourcing::Event::Publisher
Attributes
subscribers[R]
Public Class Methods
new()
click to toggle source
# File lib/event_sourcing/event/publisher.rb, line 20 def initialize @subscribed_actors = {} self.class.subscribers.each do |event,subscribers| @subscribed_actors[event] = subscribers.map { |s| actor_for(s) } end end
subscribe(klass, event)
click to toggle source
# File lib/event_sourcing/event/publisher.rb, line 14 def subscribe(klass, event) @subscribers[event.to_s] ||= [] @subscribers[event.to_s] << klass end
Public Instance Methods
default_reference_class()
click to toggle source
# File lib/event_sourcing/event/publisher.rb, line 33 def default_reference_class Reference end
on_message(event)
click to toggle source
# File lib/event_sourcing/event/publisher.rb, line 27 def on_message(event) subscribers_for(event).each do |subscriber| subscriber.tell(event) # TODO: Add support for some kind of ACK + recovery end end
Private Instance Methods
actor_for(subscriber)
click to toggle source
# File lib/event_sourcing/event/publisher.rb, line 42 def actor_for(subscriber) @actors ||= subscriber.spawn!(name: subscriber.to_s, supervise: true) end
subscribers_for(event)
click to toggle source
# File lib/event_sourcing/event/publisher.rb, line 38 def subscribers_for(event) @subscribed_actors[event.to_s] || [] end