web-dev-qa-db-fra.com

Trouver des classes disponibles dans un module

J'ai un module MyModule. J'y charge dynamiquement des classes. Comment obtenir une liste des classes définies dans son espace de noms?

Exemple:

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

Je dois dire que chaque f contient quelque chose comme "class Foo; end".

Vous pouvez également y penser comme ceci: dans Rails, comment pourrais-je trouver par programmation toutes les classes définies dans le module ActiveRecord?

69
joshuaxls

Les classes sont accessibles via des constantes. Les classes définies dans un module sont répertoriées comme constantes dans ce module. Il vous suffit donc de choisir les constantes qui se réfèrent aux classes.

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