2010-06-21 1 views
1

Есть ли способ, чтобы динамически отслеживать, какие классы или модули включены в требуемые файлы.Получение содержимого (классов и модулей) необходимых файлов в ruby ​​

короткий пример:

#my_module.rb 
module MyCustomModule 
    def foo 
    end 
end 

#custom.rb 
require 'my_module.rb' 
#is here any way to track which modules are in the required 'my_module.rb' 
#without parsing the file or having some naming conventions? 

Цель состоит в том, чтобы требовать динамически кучу файлов и в том числе содержащихся в ней модулей в классе, независимо от того, как они называются.

ответ

1

Вы можете использовать ObjectSpace для определения новых модулей.

#custom.rb 
existing_modules = ObjectSpace.each_object(Module).to_a 
require 'my_module.rb' 
new_modules = ObjectSpace.each_object(Module).to_a - existing_modules 
# => [MyCustomModule] 

class X 
    new_modules.each{|m| include m} 
end 

Примечание: Вы, вероятно, хотите, чтобы включить только верхние из них на уровне, хотя, так что проверить имена для ::

+0

ТНХ, который выглядит великолепно. – Sebastian

Смежные вопросы