現在のコンテキストで使用可能なメソッドの一覧

昨日も書いたけれども、Rails でコードを書いていてイヤになるのは、Ruby の動的な性格から、いま self が何で、使用可能なメソッド名は何かということがわかりずらいということである。

そんなときこんなふうにしてみるといいかもしれない。

logger.debug "self = " + self.inspect
logger.debug "methods = \n" + self.methods.collect { |m| self.method(m).inspect }.sort.join("\n")

(標準出力に出力するなら、logger.debug の代わりに puts でもよい)

このコードをコントローラ・ビュー・テストなど、コンテキストを知りたい場所に挿入しておく。

いまテストでどんなアサーションが使えるか知りたかったので、テストコードのなかで実行してみた。すると、

self = #<EventTest:0x40e63a94 @loaded_fixtures={...(中略)..>
methods = 
#<Method: EventTest#events>
#<Method: EventTest#setup>
#<Method: EventTest#setup_without_fixtures>
#<Method: EventTest#test_owner>
#<Method: EventTest#test_create>
#<Method: EventTest(ActionController::Assertions)#clean_backtrace>
#<Method: EventTest(ActionController::Assertions::DeprecatedAssertions)#assert_assigned_equal>
#<Method: EventTest(ActionController::Assertions::DeprecatedAssertions)#assert_assigned_equal_with_deprecation>
...(後略)...

と表示される。おもしろいのは、たとえば、

#

という行で括弧の中にもともとメソッドが定義された場所が書かれている。この場合、clearn_backtrace は ActionController::Assertions というモジュールの中で定義されているのだ。定義元のソースコードが探しやすくなる。