Ruby method interception

Ich möchte Methodenaufrufe für eine Ruby-Klasse abfangen und in der Lage sein, vor und nach der eigentlichen Ausführung der Methode etwas zu tun. Ich habe den folgenden Code ausprobiert, erhalte aber den Fehler:

MethodInterception.rb: 16: inbefore_filter': (eval):2:inalias_method ': undefined methodsay_hello' for classHomeWork '(NameError) von (eval): 2: in `before_filter'

ann mir jemand helfen, es richtig zu mache

class MethodInterception

  def self.before_filter(method)
    puts "before filter called"
    method = method.to_s
    eval_string = "
      alias_method :old_#{method}, :#{method}

      def #{method}(*args)
        puts 'going to call former method'
        old_#{method}(*args)
        puts 'former method called'
      end
    "
    puts "going to call #{eval_string}"
    eval(eval_string)
    puts "return"
  end
end

class HomeWork < MethodInterception
  before_filter(:say_hello)

  def say_hello
    puts "say hello"
  end

end

Antworten auf die Frage(6)

Ihre Antwort auf die Frage