Module: Actor::Observers

Defined in:
lib/actor/observers.rb

Defined Under Namespace

Classes: Observer

Instance Method Summary collapse

Instance Method Details

#add_observer(record) ⇒ Object



13
14
15
16
17
# File 'lib/actor/observers.rb', line 13

def add_observer record
  observers = observer_registry[record.handler_method]

  observers[record.observer_id] = record
end

#notify_observers(message) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/actor/observers.rb', line 19

def notify_observers message
  handler_method = HandleMacro::MethodName.get message

  observers = observer_registry[handler_method]

  observers.each_value.map do |record|
    callback = record.callback

    callback.(message)
  end
end

#observe(message_pattern, &callback) ⇒ Object



3
4
5
6
7
8
9
10
11
# File 'lib/actor/observers.rb', line 3

def observe message_pattern, &callback
  handler_method = HandleMacro::MethodName.get message_pattern

  observer_id = callback.object_id

  record = Observer.new observer_id, handler_method, callback

  add_observer record
end

#observer_registryObject



37
38
39
40
41
# File 'lib/actor/observers.rb', line 37

def observer_registry
  @observer_registry ||= Hash.new do |hash, handler_method|
    hash[handler_method] = {}
  end
end

#remove_observer(record) ⇒ Object



31
32
33
34
35
# File 'lib/actor/observers.rb', line 31

def remove_observer record
  observers = observer_registry[record.handler_method]

  observers.delete record.observer_id
end