Module: Observation::Dispatcher

Defined in:
lib/observation/dispatcher.rb

Instance Method Summary collapse

Instance Method Details

#add_listener(event_type, callback = nil, &block) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/observation/dispatcher.rb', line 2

def add_listener(event_type, callback = nil, &block)
  setup_event_dispatcher
  validate_event_type(event_type)

  if (callback && block) || (callback.nil? && block.nil?)
    raise('You must provide a callback or block, but not both')
  end

  cb = (callback || block)
  callbacks = (@dispatcher_callbacks[event_type] ||= [])

  if callbacks.include?(cb)
    return false
  end

  callbacks << cb

  return true
end

#listening_event_typesObject



48
49
50
51
52
# File 'lib/observation/dispatcher.rb', line 48

def listening_event_types
  setup_event_dispatcher

  return @dispatcher_callbacks.keys
end

#remove_all_listeners(event_type) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/observation/dispatcher.rb', line 39

def remove_all_listeners(event_type)
  setup_event_dispatcher
  validate_event_type(event_type)

  @dispatcher_callbacks.delete(event_type)

  return true
end

#remove_listener(event_type, callback) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/observation/dispatcher.rb', line 22

def remove_listener(event_type, callback)
  setup_event_dispatcher
  validate_event_type(event_type)

  if (callbacks = @dispatcher_callbacks[event_type])
    if callbacks.delete(callback)
      if callbacks.empty?
        @dispatcher_callbacks.delete(event_type)
      end

      return true
    end
  end

  return false
end