2020年5月27日水曜日

Ruby でメソッドの呼び出し元のファイルがどこにあるか確認する方法

概要

Method#source_location を使います 

環境

  • macOS 10.15.4
  • Ruby 2.7.1p83

サンプルコード

module A
  class B
    def hoge
      puts "hoge"
    end

    def self.fuga
      puts "fuga"
    end
  end
end

p A::B.instance_method(:hoge).source_location
p A::B.public_method(:fuga).source_location

インスタンスメソッドの場合は instance_method を使いクラスメソッドの場合は public_method を使いましょう
とりあえずクラス内にあるメソッド全部の場所を調べたい場合は以下のようにするといいでしょう

p (A::B.instance_methods + A::B.public_methods - Object.methods).map { |m| 
  begin
    A::B.instance_method(m).source_location
  rescue
    A::B.public_method(m).source_location
  end
}

参考サイト

0 件のコメント:

コメントを投稿