module Emittr::Events::InstanceMethods

Public Instance Methods

emit(event, *payload) click to toggle source
# 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) click to toggle source
# File lib/emittr/events.rb, line 74
def listeners_for(event)
  listeners[event.to_sym].dup
end
listeners_for_any() click to toggle source
# File lib/emittr/events.rb, line 78
def listeners_for_any
  listeners[:*].dup
end
off(event=nil, &block) click to toggle source
# 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) click to toggle source
# File lib/emittr/events.rb, line 52
def off_any(&block)
  raise_no_block_error unless block_given?
  off(:*, &block)
end
on(event, &block) click to toggle source
# 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) click to toggle source
# File lib/emittr/events.rb, line 47
def on_any(&block)
  raise_no_block_error unless block_given?
  on(:*, &block)
end
once(event, &block) click to toggle source
# 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) click to toggle source
# File lib/emittr/events.rb, line 57
def once_any(&block)
  raise_no_block_error unless block_given?
  once(:*, &block)
end

Private Instance Methods

emit_any(event, *payload) click to toggle source
# File lib/emittr/events.rb, line 88
def emit_any(event, *payload)
  any_listeners = listeners[:*]
  any_listeners.each { |l| l.call(event, *payload) } if any_listeners.any?
end
listeners() click to toggle source
# File lib/emittr/events.rb, line 84
def listeners
  @listeners ||= Hash.new { |h,k| h[k] = [] }
end
raise_no_block_error() click to toggle source
# File lib/emittr/events.rb, line 93
def raise_no_block_error
  raise ArgumentError, 'required block not passed'
end