Ниже приведен код класса, который может динамически добавлять запись в метод.Это работает в случае, когда метод не принимает параметров и не принимает блок.
Как я могу переписать код, чтобы я мог добавить запись метода, даже если он принимает параметры и принимает блок?
class X
def greet
puts "hi"
end
def self.add_logging(method_name)
alias_method("original_#{method_name}".to_sym, method_name)
#How do i rewrie this to account for method_name's arguments and ability to accept a block?
define_method(method_name) do
puts "calling #{method_name}"
send "original_#{method_name}".to_sym
puts "done #{method_name}"
end
end
end
x = X.new
x.greet
X.add_logging(:greet)
x.greet
выходы
>hi
>calling greet
>hi
>done greet