-7
自分のネームスペースに定義されているすべてのメソッドをaround/before/afterフィルタでラップして、コールの発生や未使用のメソッドをログできるようにする方法はありますか?ルビのすべてのメソッド呼び出しを監視する
自分のネームスペースに定義されているすべてのメソッドをaround/before/afterフィルタでラップして、コールの発生や未使用のメソッドをログできるようにする方法はありますか?ルビのすべてのメソッド呼び出しを監視する
あなたがしたいことをするためにかなりの仕事があります。 。
#!/usr/bin/env ruby
require 'aspector'
watcher = Aspector do
around(/.*/, except: Object.methods) do |proxy, *args, &block|
puts "before #{proxy.name} on #{proxy.receiver}"
proxy.call(*args, &block)
puts "after #{proxy.name} on #{proxy.receiver}"
end
end
class Foo
def self.klass
puts "class method"
end
def inst
puts "instance method"
end
end
watcher.apply(Foo)
watcher.apply(Foo, class_methods: true)
# => before singleton_method_added on Foo
# after singleton_method_added on Foo
Foo.klass
# => before klass on Foo
# class method
# after klass on Foo
Foo.new.inst
# => before inst on #<Foo:0x007f9b648c83c0>
# instance method
# after inst on #<Foo:0x007f9b648c83c0>
:幸いにも、あなたがそれを望んでいる人だけじゃない、と私はコメントで言ったようにそれは、「アスペクト指向プログラミング」の下で、(前に行われています
をここでAspectorの宝石を使用した例です
このパターンは通常「アスペクト指向プログラミング」と呼ばれ、Rubyを検索すると、アスペクトや水族館など、あなたが使用できるさまざまな宝石が得られるはずです – Amadan
可能な[ Rubyモジュールですべてのメソッド呼び出しのコードを実行する](http://stackoverflow.com/questions/5513558/executing-code-for-every-method-call-in-a-ruby-module) –