Найти классы, доступные в модуле - PullRequest
68 голосов
/ 07 мая 2009

У меня есть модуль 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?

1 Ответ

114 голосов
/ 07 мая 2009

Классы доступны через константы. Классы, определенные в модуле, перечислены как константы в этом модуле. Так что вам просто нужно выбрать константы, которые относятся к классам.

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