module BubbleWrap::Reactor::Eventable

A simple mixin that adds events to your object.

Public Instance Methods

off(event, method = nil, &blk) click to toggle source

When `event` is triggered, do not call the given block any more

# File motion/reactor/eventable.rb, line 17
def off(event, method = nil, &blk)
  events = _events_for_key(event)
  if method
    events.delete_if { |m| m.receiver == method.receiver and m.name == method.name }
  elsif blk
    events.delete_if { |b| b == blk }
  else
    __events__[event] = Array.new
  end
  blk
end
on(event, method = nil, &blk) click to toggle source

When `event` is triggered the block will execute and be passed the arguments that are passed to `trigger`.

# File motion/reactor/eventable.rb, line 9
def on(event, method = nil, &blk)
  events = _events_for_key(event)
  method_or_block = method ? method : blk
  events.push method_or_block
end
trigger(event, *args) click to toggle source

Trigger an event

# File motion/reactor/eventable.rb, line 30
def trigger(event, *args)
  blks = _events_for_key(event).clone
  blks.map do |blk|
    blk.call(*args)
  end
end

Private Instance Methods

__events__() click to toggle source
# File motion/reactor/eventable.rb, line 39
def __events__
  @__events__ ||= Hash.new
end
_events_for_key(event) click to toggle source
# File motion/reactor/eventable.rb, line 43
def _events_for_key(event)
  __events__[event] ||= Array.new
end