2016-04-11 19 views
3

Ruby 1.8を使用するアプリケーションがあります。 Rails 2.2.2アプリでは6です。メソッド呼び出しを処理するメソッドを取得する方法

コードベースのさまざまな部分(クラス、モジュールなど)に多くのメソッドurl_forがあります。

デバッグ時に、どのメソッドがurl_forへの特定の呼び出しを処理するかをログで確認したいと思います。例えば、

foo = "bar" 
baz = url_for(foo) 
#would like to log the location of the url_for method which actually 
#handled the call, here. 

これを行うための唯一の方法はurl_for内で例外を発生し、スタックトレースを見ているならばそれは結構です、例えば

baz = url_for(something_which_wont_raise_here_but_will_raise_inside_the_url_for_method) 

方法がされているものならば、先に進むために(重くパッチを適用)クラスのインスタンスで呼び出さ:

foo = @baz.bar("qux") 

編集:私はそれは私の質問でのRuby 1.8.6であったことを指定していない、と私は.source_locationを使用することはできませんように見えます方法。以前のバージョンを指定しなかったのは大変申し訳ありません!誰にも他のアイデアはありますか?

+0

明確ではありません。メソッドが定義されている場所(つまり、どのメソッドが呼び出されているか)、またはそのメソッドがどこに呼び出されているのかを知りたいですか? – sawa

+0

このメソッドは、 "メソッドが定義されている場所(つまり、どのメソッドが呼び出されているか)" –

+0

このバージョンのRubyは長い間維持されておらず、未修正のバグセキュリティホールに限られています。 –

答えて

2

それはあなたがMethodオブジェクトを取得するために

method(:url_for) 

をやりたいように聞こえる、その後、あなたが取得するmethodsource_locationメソッドチェーンを使用することができ、それが

+1

ありがとうございます。 V申し訳ありませんが、私はこのアプリのRubyバージョンではこのメソッドを持っていないことに気付きました。私の編集を参照してください。 –

+0

いいえ、ごめんなさい申し訳ありません - バージョンがリリースされてから非常に長い時間がかかりました。 –

1

を定義した場所を見つけるためにsource_locationを使用メソッド定義の場所。そうした場合

Example

+0

ありがとうございます。 'foo = @ baz.bar(" qux ")'のように、メソッドがオブジェクトに対して呼び出されている場合はどうしますか?どの 'bar'メソッドが呼び出されたのか知りたかったのですか? @baz.method(:bar).source_location' –

+0

ありがとう。 V申し訳ありませんが、私はこのアプリのRubyバージョンではこのメソッドを持っていないことに気付きました。私の編集を参照してください。 –

1

:たとえば

method(:url_for).owner 

をそれはあなたのメソッドが定義されているモジュール/クラスを提供します。同じメソッドが同じモジュールに複数回重複して定義されている場合を除き、これはメソッドを識別できるだけのものでなければなりません。そのモジュール/クラスのurl_forの定義を見ることができます。

+1

ありがとうございます。 V申し訳ありませんが、私はこのアプリのRubyバージョンではこのメソッドを持っていないことに気付きました。私の編集を参照してください。 –

関連する問題