1. ホーム
  2. ruby

モジュールで利用可能なクラスを検索する

2023-09-09 20:34:11

質問

私は、モジュール MyModule . 私はそこにクラスを動的にロードします。どのように私はその名前空間内で定義されたクラスのリストを取得することができますか?

例を挙げます。

def load_plugins
  Dir.glob(File.dirname(__FILE__) + '/plugins/*.rb') do |f|
    MyModule.class_eval File.read(f)
  end

  # now how can I find the new classes I've loaded into MyModule?
end

というのは、それぞれの f は "クラス Foo; end" のようなものを含んでいます。

Railsで、ActiveRecordモジュール内で定義されているすべてのクラスをプログラム的に見つけるにはどうしたらよいでしょうか。

どのように解決するのか?

クラスは定数でアクセスします。あるモジュール内で定義されたクラスは、そのモジュール内の定数としてリストアップされます。そのため、クラスを参照する定数を選択すればよいのです。

MyModule.constants.select {|c| MyModule.const_get(c).is_a? Class}