module UnderOs::Events::Listeners
Public Instance Methods
add(model, event, *args, block)
click to toggle source
# File lib/under_os/events.rb, line 26 def add(model, event, *args, block) list(model, event) << [block, *args] model end
all(model, event)
click to toggle source
# File lib/under_os/events.rb, line 31 def all(model, event) list(model, event) end
kick(model, event, params)
click to toggle source
# File lib/under_os/events.rb, line 40 def kick(model, event, params) event = Event.new(event, params) unless event.is_a?(Event) all(model, event.name).each do |block, method_name, *args| if !block && method_name block = Proc.new{ |e| a = method(method_name).arity == 0 ? [] : [e]; __send__(method_name, *a) } context = model elsif block && method_name # <- considering it's a context reference context = method_name else context = nil end args = block.arity == 0 ? [] : [event] if context context.instance_exec *args, &block else block.call *args end end model end
list(model, event=nil)
click to toggle source
# File lib/under_os/events.rb, line 21 def list(model, event=nil) @listeners ||= Hash.new{|h,k| h[k] = Hash.new{|h,k| h[k] = []} } event ? @listeners[model][event.to_sym] : @listeners[model] end
remove(model, event)
click to toggle source
# File lib/under_os/events.rb, line 35 def remove(model, event) list(model).delete event.to_sym model end