module EventEmitter::InstanceMethods
Public Instance Methods
__events()
click to toggle source
# File lib/event_emitter/emitter.rb, line 16 def __events @__events ||= [] end
add_listener(type, params={}, &block)
click to toggle source
# File lib/event_emitter/emitter.rb, line 20 def add_listener(type, params={}, &block) raise ArgumentError, 'listener block not given' unless block_given? id = __events.empty? ? 0 : __events.last[:id]+1 __events << { :type => type.to_sym, :listener => block, :params => params, :id => id } id end
Also aliased as: on
emit(type, *data)
click to toggle source
# File lib/event_emitter/emitter.rb, line 46 def emit(type, *data) type = type.to_sym __events.each do |e| case e[:type] when type listener = e[:listener] e[:type] = nil if e[:params][:once] instance_exec(*data, &listener) when :* listener = e[:listener] e[:type] = nil if e[:params][:once] instance_exec(type, *data, &listener) end end __events.each do |e| remove_listener e[:id] unless e[:type] end end
once(type, &block)
click to toggle source
# File lib/event_emitter/emitter.rb, line 65 def once(type, &block) add_listener type, {:once => true}, &block end
remove_listener(id_or_type)
click to toggle source
# File lib/event_emitter/emitter.rb, line 34 def remove_listener(id_or_type) if id_or_type.is_a? Integer __events.delete_if do |e| e[:id] == id_or_type end elsif [String, Symbol].include? id_or_type.class __events.delete_if do |e| e[:type] == id_or_type.to_sym end end end