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



28
29
30
31
# File 'lib/under_os/events.rb', line 28

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

#all(model, event) ⇒ Object



33
34
35
# File 'lib/under_os/events.rb', line 33

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

#kick(model, event, params) ⇒ Object



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 42

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{ __send__(method_name, *args) }
      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
25
26
# File 'lib/under_os/events.rb', line 21

def list(model, event=nil)
  @listeners                      ||= {}
  @listeners[model]               ||= {}
  @listeners[model][event.to_sym] ||= [] if event
  event ? @listeners[model][event.to_sym] : @listeners[model]
end

#remove(model, event) ⇒ Object



37
38
39
40
# File 'lib/under_os/events.rb', line 37

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