web-dev-qa-db-ja.com

モジュールで利用可能なクラスを見つける

モジュール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には「class Foo; end」のようなものが含まれていると言う必要があります。

また、次のように考えることもできます。Railsでは、ActiveRecordモジュール内で定義されたすべてのクラスをプログラムで見つけるにはどうすればよいですか?

69
joshuaxls

クラスは定数を介してアクセスされます。モジュール内で定義されたクラスは、そのモジュールの定数としてリストされます。したがって、クラスを参照する定数を選択するだけです。

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