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