Method: Wool::Advice#with_advice

Defined in:
lib/wool/advice/advice.rb

#with_advice(meth, settings) ⇒ Object



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