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?
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}