получение содержимого (классов и модулей) необходимых файлов в ruby - PullRequest
1 голос
/ 21 июня 2010

Есть ли способ динамически отследить, какие классы или модули включены в требуемые файлы.

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

#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 Ответ

1 голос
/ 21 июня 2010

Вы можете использовать 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

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

...