Class: Deftones::Core::Emitter

Inherits:
Object
  • Object
show all
Defined in:
lib/deftones/core/emitter.rb

Instance Method Summary collapse

Constructor Details

#initializeEmitter

Returns a new instance of Emitter.



6
7
8
# File 'lib/deftones/core/emitter.rb', line 6

def initialize
  @listeners = Hash.new { |hash, key| hash[key] = [] }
end

Instance Method Details

#disposeObject



45
46
47
48
# File 'lib/deftones/core/emitter.rb', line 45

def dispose
  @listeners.clear
  self
end

#emit(event_name, *arguments) ⇒ Object



36
37
38
39
# File 'lib/deftones/core/emitter.rb', line 36

def emit(event_name, *arguments)
  @listeners[event_name.to_sym].dup.each { |listener| listener.call(*arguments) }
  self
end

#listeners(event_name) ⇒ Object



41
42
43
# File 'lib/deftones/core/emitter.rb', line 41

def listeners(event_name)
  @listeners[event_name.to_sym].dup
end

#off(event_name, listener = nil) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/deftones/core/emitter.rb', line 28

def off(event_name, listener = nil)
  key = event_name.to_sym
  return @listeners.delete(key) unless listener

  @listeners[key].delete(listener)
  self
end

#on(event_name, &block) ⇒ Object

Raises:

  • (ArgumentError)


10
11
12
13
14
15
# File 'lib/deftones/core/emitter.rb', line 10

def on(event_name, &block)
  raise ArgumentError, "block is required" unless block

  @listeners[event_name.to_sym] << block
  self
end

#once(event_name, &block) ⇒ Object

Raises:

  • (ArgumentError)


17
18
19
20
21
22
23
24
25
26
# File 'lib/deftones/core/emitter.rb', line 17

def once(event_name, &block)
  raise ArgumentError, "block is required" unless block

  wrapper = nil
  wrapper = proc do |*arguments|
    off(event_name, wrapper)
    block.call(*arguments)
  end
  on(event_name, &wrapper)
end