module Plum module EventEmitter # Registers an event handler to specified event. An event can have multiple handlers. # @param name [String] The name of event. # @yield Gives event-specific parameters. def on(name, &blk) (callbacks[name] ||= []) << blk end def callback(name, *args) (cbs = callbacks[name]) && cbs.each {|cb| cb.call(*args) } end private def callbacks @callbacks ||= {} end end end