Module: UnderOs::Events::Listeners

Extended by:
Listeners
Included in:
Listeners
Defined in:
lib/under_os/events.rb

Instance Method Summary collapse

Instance Method Details

#add(model, event, *args, block) ⇒ Object



26
27
28
29
# File 'lib/under_os/events.rb', line 26

def add(model, event, *args, block)
  list(model, event) << [block, *args]
  model
end

#all(model, event) ⇒ Object



31
32
33
# File 'lib/under_os/events.rb', line 31

def all(model, event)
  list(model, event)
end

#kick(model, event, params) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 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) ⇒ Object



21
22
23
24
# 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) ⇒ Object



35
36
37
38
# File 'lib/under_os/events.rb', line 35

def remove(model, event)
  list(model).delete event.to_sym
  model
end