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

Instance Method Summary collapse

Instance Attribute Details

#event_receiversObject (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

Raises:



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_sourceObject



6
7
8
# File 'lib/rsmp/event_source.rb', line 6

def initialize_event_source
  @event_receivers = []
end

#publish_event(event) ⇒ Object

Raises:



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