Module: Emittr::Events::InstanceMethods

Defined in:
lib/emittr/events.rb

Instance Method Summary collapse

Instance Method Details

#emit(event, *payload) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
# File 'lib/emittr/events.rb', line 62

def emit(event, *payload)
  emit_any(event, *payload)

  return unless listeners.key? event

  listeners[event].each do |l|
    l.call(*payload)
  end

  self
end

#listeners_for(event) ⇒ Object



74
75
76
# File 'lib/emittr/events.rb', line 74

def listeners_for(event)
  listeners[event.to_sym].dup
end

#listeners_for_anyObject



78
79
80
# File 'lib/emittr/events.rb', line 78

def listeners_for_any
  listeners[:*].dup
end

#off(event = nil, &block) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/emittr/events.rb', line 15

def off(event=nil, &block)
  unless event
    listeners.clear
    return self
  end

  if block_given?
    listeners[event].reject! { |l| l == block }
  else
    listeners.delete event
  end

  self
end

#off_any(&block) ⇒ Object



52
53
54
55
# File 'lib/emittr/events.rb', line 52

def off_any(&block)
  raise_no_block_error unless block_given?
  off(:*, &block)
end

#on(event, &block) ⇒ Object



8
9
10
11
12
13
# File 'lib/emittr/events.rb', line 8

def on(event, &block)
  raise_no_block_error unless block_given?

  listeners[event.to_sym] << ::Emittr::Callback.new(&block)
  self
end

#on_any(&block) ⇒ Object



47
48
49
50
# File 'lib/emittr/events.rb', line 47

def on_any(&block)
  raise_no_block_error unless block_given?
  on(:*, &block)
end

#once(event, &block) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/emittr/events.rb', line 30

def once(event, &block)
  raise_no_block_error unless block_given?

  callback = ::Emittr::Callback.new &block

  off_block = Proc.new do |args|
    callback.call(*args)
    block_to_send = callback.wrapper || callback.callback

    off(event, &block_to_send)
  end

  callback.wrapper = off_block

  on(event, &off_block)
end

#once_any(&block) ⇒ Object



57
58
59
60
# File 'lib/emittr/events.rb', line 57

def once_any(&block)
  raise_no_block_error unless block_given?
  once(:*, &block)
end