Подтвердить что ты не робот

Найти классы, доступные в модуле

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

4b9b3361

Ответ 1

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

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