Рубиновый метод перехвата
Я хочу перехватывать вызовы методов в классе ruby и иметь возможность что-то делать до и после фактического выполнения метода. Я попробовал следующий код, но получаю ошибку:
MethodInterception.rb: 16: вbefore_filter': (eval):2:in
alias_method ': неопределенный методsay_hello' for class
HomeWork '(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