Module: Runaround::CallbackHook

Defined in:
lib/runaround/callback_hook.rb

Class Method Summary collapse

Class Method Details

.build_for(method, manager) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/runaround/callback_hook.rb', line 6

def self.build_for(method, manager)
  Module.new do
    define_method(method) do |*args,**opts,&block|
      mc = MethodCall.new(method, args, opts, block)
      blocks, fibers = manager.callbacks(method)
      blocks[:before].each { |b| b.call(mc) }
      fibers.each { |f| f.resume(mc) }
      mc.return_value = super(*mc.argsopts, &mc.block)
      fibers.reverse_each { |f| f.resume(mc.return_value) }
      blocks[:after].each { |b| b.call(mc) }
      mc.return_value
    end
  end
end