Module: Noder::Events::EventEmitter

Included in:
HTTP::Server
Defined in:
lib/noder/events/event_emitter.rb

Instance Method Summary collapse

Instance Method Details

#emit(event, *arguments) ⇒ Object



24
25
26
27
# File 'lib/noder/events/event_emitter.rb', line 24

def emit(event, *arguments)
  return if event_stacks[event].nil?
  event_stacks[event].call(*arguments)
end

#event_stack(event) ⇒ Object



57
58
59
# File 'lib/noder/events/event_emitter.rb', line 57

def event_stack(event)
  event_stacks[event]
end

#event_stacksObject



4
5
6
# File 'lib/noder/events/event_emitter.rb', line 4

def event_stacks
  @event_stacks ||= {}
end

#listener_count(event) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/noder/events/event_emitter.rb', line 49

def listener_count(event)
  if event_stacks[event]
    event_stacks[event].length
  else
    0
  end
end

#listeners(event) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/noder/events/event_emitter.rb', line 41

def listeners(event)
  if event_stacks[event]
    event_stacks[event].items.map { |item| item[:callback] }
  else
    []
  end
end

#max_listener_countsObject



8
9
10
# File 'lib/noder/events/event_emitter.rb', line 8

def max_listener_counts
  @max_listener_counts ||= {}
end

#on(event, callback = nil, options = {}, &block) ⇒ Object Also known as: add_listener



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/noder/events/event_emitter.rb', line 12

def on(event, callback=nil, options={}, &block)
  max_count = max_listener_counts[event]
  current_count = listener_count(event)
  if max_count && current_count >= max_count
    Noder.logger.warn "Maximum listener count exceeded for #{self.class} (max count is #{max_count}; current count is #{current_count})."
  end
  callback ||= block
  options[:callback] = callback
  event_stacks[event] ||= EventStack.new(node_class: node_class_for_event(event))
  event_stacks[event].push(options)
end

#remove_all_listeners(event) ⇒ Object



33
34
35
# File 'lib/noder/events/event_emitter.rb', line 33

def remove_all_listeners(event)
  event_stacks[event].remove_all
end

#remove_listener(event, listener) ⇒ Object



29
30
31
# File 'lib/noder/events/event_emitter.rb', line 29

def remove_listener(event, listener)
  event_stacks[event].remove(listener)
end

#set_max_listeners(event, count) ⇒ Object



37
38
39
# File 'lib/noder/events/event_emitter.rb', line 37

def set_max_listeners(event, count)
  max_listener_counts[event] = count
end