Рубиновый метод перехвата

Я хочу перехватывать вызовы методов в классе ruby ​​и иметь возможность что-то делать до и после фактического выполнения метода. Я попробовал следующий код, но получаю ошибку:

MethodInterception.rb: 16: вbefore_filter': (eval):2:inalias_method ': неопределенный методsay_hello' for classHomeWork '(NameError) из (eval): 2: в `before_filter'

Кто-нибудь может помочь мне сделать это правильно?

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

Ответы на вопрос(3)

Ваш ответ на вопрос