Ruby / Ruby on Rails でメソッドがどこからインクルードされたかを調べる方法はありますか?
たとえば、Rails APIを検索すると、次のことがわかります。
link_to
から来てActionView::Helpers::UrlHelper
、そしてpluralize
から来るActionView::Helpers::TextHelper
しかし、Ruby自体で見つける方法はありますか? つまりirb
、またはRailsコンソールで?
Ruby / Ruby on Rails でメソッドがどこからインクルードされたかを調べる方法はありますか?
たとえば、Rails APIを検索すると、次のことがわかります。
link_to
から来てActionView::Helpers::UrlHelper
、そして pluralize
から来るActionView::Helpers::TextHelper
しかし、Ruby自体で見つける方法はありますか? つまりirb
、またはRailsコンソールで?
はい:
@object.method(:method_name)
例えば:
@object.method(:pluralize)
どのコンテキストにいても、次を使用してソースの場所を取得できます。
obj.method(:method).source_location
あなたが望むものを正確に提供することはできませんが、Rails のコア開発者は名前空間を適切に設定することに長けています。次の例は、Rails コンソールから実行できます。
Time.method(:zone).source_location
["/Users/pete/.rvm/gems/ruby-1.9.2-p290@gemset/gems/activesupport-3.2.3/lib/active_support/core_ext/time/zones.rb", 9]
その後、Rails ソースに移動して、そのファイルを検索できます。ヒント: Github で「t」と入力し、入力を開始します。そのファイルが表示され、Time クラスで直接定義されていることがわかります。