Я использую модули в качестве пространств имен и хочу динамически заполнять их классами, например:
module Module1
# ...
end
module Module2
# ...
end
[Module1, Module2].each do |the_module|
the_module.module_eval do
class ApiTest < ActiveSupport::TestCase
# ...
end
end
end
module_eval
будет работать, за исключением того, что не меняет вложенность, сохраняя внешнюю. В результате содержащиеся константы не вкладываются в модули.
Первоначальной мотивацией является создание одинаковых тестов для различных реализаций API, каждый из которых содержится в своем собственном модуле.