Module: RSMP::EventSource
- Included in:
- Node
- Defined in:
- lib/rsmp/event_source.rb
Overview
Reactor-confined, ordered delivery of background lifecycle events.
Instance Attribute Summary collapse
-
#event_receivers ⇒ Object
readonly
Returns the value of attribute event_receivers.
Instance Method Summary collapse
- #add_event_receiver(receiver) ⇒ Object
- #initialize_event_source ⇒ Object
- #publish_event(event) ⇒ Object
- #remove_event_receiver(receiver) ⇒ Object
Instance Attribute Details
#event_receivers ⇒ Object (readonly)
Returns the value of attribute event_receivers.
4 5 6 |
# File 'lib/rsmp/event_source.rb', line 4 def event_receivers @event_receivers end |
Instance Method Details
#add_event_receiver(receiver) ⇒ Object
10 11 12 13 14 15 |
# File 'lib/rsmp/event_source.rb', line 10 def add_event_receiver(receiver) raise ArgumentError, 'event receiver must respond to receive_event' unless receiver.respond_to?(:receive_event) @event_receivers << receiver unless @event_receivers.include?(receiver) receiver end |
#initialize_event_source ⇒ Object
6 7 8 |
# File 'lib/rsmp/event_source.rb', line 6 def initialize_event_source @event_receivers = [] end |
#publish_event(event) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/rsmp/event_source.rb', line 22 def publish_event(event) raise ArgumentError, 'event must be an RSMP::Event' unless event.is_a?(Event) @event_receivers.dup.each do |receiver| receiver.receive_event(event) rescue StandardError => e remove_event_receiver(receiver) raise unless receiver.respond_to?(:crash) receiver.crash(e) end event end |
#remove_event_receiver(receiver) ⇒ Object
17 18 19 20 |
# File 'lib/rsmp/event_source.rb', line 17 def remove_event_receiver(receiver) @event_receivers.delete(receiver) receiver end |