25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/wool/advice/advice.rb', line 25
def with_advice(meth, settings)
counter = advice_counter
alias_method "#{meth}_old#{counter}".to_sym, meth
define_method meth do |*args|
identity = proc {|*x| x}
instance_eval(&(settings[:before] || identity))
if settings[:args]
new_args = instance_eval(& proc { send(settings[:args], *args)})
end
result = send("#{meth}_old#{counter}", *new_args)
instance_eval(&(settings[:after] || identity))
result
end
bump_advice_counter!
end
|