Module: EventSpitter

Defined in:
lib/event_spitter.rb,
lib/event_spitter/version.rb

Constant Summary collapse

VERSION =
"0.5.0"

Instance Method Summary collapse

Instance Method Details

#emit(event_name, *args) ⇒ Object

Public: Executes the listeners for an event.

event_name - The String event name. args - Zero or more argument to be passed to the listeners.

Examples

emitter.emit('connection', 'hello world!')

Returns nothing.



73
74
75
76
77
# File 'lib/event_spitter.rb', line 73

def emit(event_name, *args)
  events.fetch(event_name, []).each do |listener|
    listener.call(*args)
  end
end

#eventsObject

Internal: The list of events.

Returns a Hash of events and their listeners.



102
103
104
# File 'lib/event_spitter.rb', line 102

def events
  @events ||= {}
end

#listeners(event_name) ⇒ Object

Public: An Array of listeners for an event.

Returns event listeners Array.



59
60
61
# File 'lib/event_spitter.rb', line 59

def listeners(event_name)
  events[event_name]
end

#off(event_name, listener) ⇒ Object Also known as: remove_listener

Public: Remove a listener for an event.

event_name - The String name of the event. listener - The Proc listener on the event.

Examples

emitter.off('connection', listener)

Returns nothing.



31
32
33
# File 'lib/event_spitter.rb', line 31

def off(event_name, listener)
  Array(events[event_name]).delete(listener)
end

#on(event_name, listener) ⇒ Object Also known as: add_listener

Public: Add a listener for an event.

event_name - The String name of the event. listener - The Proc listener for the event.

Examples

listener = ->(msg) { puts(msg) }
emitter.on('connection', listener)

Returns nothing.



16
17
18
# File 'lib/event_spitter.rb', line 16

def on(event_name, listener)
  events[event_name] = Array(events[event_name]) << listener
end

#once(event_name, listener) ⇒ Object

Public: Adds a one time listener for the event.

event_name - The String name of the event. listener - The Proc listener for the event.

Examples

listener = ->(msg) { puts(msg) }
emitter.once('connection', listener)

Returns nothing.



47
48
49
50
51
52
53
54
# File 'lib/event_spitter.rb', line 47

def once(event_name, listener)
  new_listener = ->(*args) do
    listener.call(*args)
    off(event_name, new_listener)
  end

  on(event_name, new_listener)
end

#remove_all_listeners(*event_names) ⇒ Object

Public: Remove all listeners for event names. If zero event names as supplied then all event listeners are removed.

event_names - Zero or more String event names.

Examples

emitter.remove_all_listeners

emitter.remove_all_listeners('connection')

Returns nothing.



91
92
93
94
95
96
97
# File 'lib/event_spitter.rb', line 91

def remove_all_listeners(*event_names)
  if event_names.any?
    event_names.each { |key| events.delete(key) }
  else
    events.clear
  end
end