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