Module: UnderOs::Events::Listeners
Instance Method Summary collapse
- #add(model, event, *args, block) ⇒ Object
- #all(model, event) ⇒ Object
- #kick(model, event, params) ⇒ Object
- #list(model, event = nil) ⇒ Object
- #remove(model, event) ⇒ Object
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 |