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