Module: Noder::Events::EventEmitter
- Included in:
- HTTP::Server
- Defined in:
- lib/noder/events/event_emitter.rb
Instance Method Summary collapse
- #emit(event, *arguments) ⇒ Object
- #event_stack(event) ⇒ Object
- #event_stacks ⇒ Object
- #listener_count(event) ⇒ Object
- #listeners(event) ⇒ Object
- #max_listener_counts ⇒ Object
- #on(event, callback = nil, options = {}, &block) ⇒ Object (also: #add_listener)
- #remove_all_listeners(event) ⇒ Object
- #remove_listener(event, listener) ⇒ Object
- #set_max_listeners(event, count) ⇒ Object
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_stacks ⇒ Object
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_counts ⇒ Object
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, ={}, &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 [:callback] = callback event_stacks[event] ||= EventStack.new(node_class: node_class_for_event(event)) event_stacks[event].push() 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 |