Interceptação do método Ruby

Eu quero interceptar chamadas de método em uma classe ruby e poder fazer algo antes e depois da execução real do método. Eu tentei o seguinte código, mas obtenha o erro:

MethodInterception.rb: 16: embefore_filter': (eval):2:inalias_method ': método indefinidosay_hello' for classHomeWork '(NameError) de (eval): 2: em `before_filter'

Alguém pode me ajudar a fazer certo?

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

questionAnswers(3)

yourAnswerToTheQuestion