7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/netfira/web_connect/events.rb', line 7
def self.dispatch_event(timing, event, *args)
return timing.each{ |t| dispatch_event(t, event, *args) { yield } } if timing.respond_to? :each
target = :"#{timing}_#{event}"
delegates = event_delegates.select { |d| d.respond_to? target }
if timing == :around
chain_runner = -> do
delegate = delegates.shift
if delegate
delegate.__send__ target, *args, &chain_runner
else
yield
end
end
chain_runner.call
else
delegates.map { |d| d.__send__ target, *args }
end
end
|