2009-05-07 16 views
57

Ho un modulo MyModule. Io carico dinamicamente le classi in esso. Come posso ottenere un elenco delle classi definite all'interno del suo spazio dei nomi?Trova classi disponibili in un modulo

Esempio:

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 

dovrei dire che ogni f contiene qualcosa come "classe Foo; end".

Si può anche pensare in questo modo: in Rails, come è possibile trovare in modo programmatico tutte le classi definite all'interno del modulo ActiveRecord?

risposta

98

Le classi sono accessibili tramite costanti. Le classi definite all'interno di un modulo sono elencate come costanti in quel modulo. Quindi devi solo scegliere le costanti che si riferiscono alle classi.

+1

Impressionante. Grazie. – joshuaxls

+7

Una cosa: perché usi quel test invece di "MyModule.const_get (c) .is_a? Class"? Non ho familiarità con l'utilizzo di "===" in questo modo. – joshuaxls

+3

Nessun motivo valido. La versione === era appena più leggibile per me. Usare is_a? funzionerebbe altrettanto bene – Chuck

Problemi correlati