Module: Replay::Publisher
- Defined in:
- lib/replay/publisher.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #add_subscriber(subscriber) ⇒ Object
- #apply(events, raise_unhandled = true) ⇒ Object
- #publish(event) ⇒ Object
- #subscription_manager ⇒ Object
- #to_stream_id ⇒ Object
Class Method Details
.include_essentials(base) ⇒ Object
7 8 9 10 11 |
# File 'lib/replay/publisher.rb', line 7 def self.include_essentials(base) base.instance_variable_set :@application_blocks, {} base.extend ClassMethods base.extend(Replay::Events) end |
.included(base) ⇒ Object
3 4 5 |
# File 'lib/replay/publisher.rb', line 3 def self.included(base) include_essentials base end |
Instance Method Details
#add_subscriber(subscriber) ⇒ Object
17 18 19 |
# File 'lib/replay/publisher.rb', line 17 def add_subscriber(subscriber) subscription_manager.add_subscriber(subscriber) end |
#apply(events, raise_unhandled = true) ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/replay/publisher.rb', line 21 def apply(events, raise_unhandled = true) return apply([events], raise_unhandled) unless events.is_a?(Array) events.each do |event| blk = block_for(event.class) raise UnhandledEventError.new "event #{event.class.name} is not handled by #{self.class.name}" if (blk.nil? && raise_unhandled) self.instance_exec(event, &blk) end return self end |
#publish(event) ⇒ Object
37 38 39 40 41 |
# File 'lib/replay/publisher.rb', line 37 def publish(event) apply(event) subscription_manager.notify_subscribers(to_stream_id, event) return self end |
#subscription_manager ⇒ Object
13 14 15 |
# File 'lib/replay/publisher.rb', line 13 def subscription_manager @subscription_manager ||= Replay::SubscriptionManager.new(Replay.logger) end |
#to_stream_id ⇒ Object
44 45 46 47 |
# File 'lib/replay/publisher.rb', line 44 def to_stream_id raise Replay::UndefinedKeyError.new("No key attribute defined for #{self.class.to_s}") unless self.class.key_attr self.send(self.class.key_attr).to_s end |