Как «импортировать» вложенные классы в текущий класс в Ruby?

В Ruby я могу вкладывать модули/классы в другие модули/классы. Я хочу добавить некоторое объявление внутри файла или класса, чтобы иметь возможность ссылаться на вложенные классы по их коротким именам, например. использовать Innerдля получения Outer::Inner, как в Java, C #и т. д. Синтаксис может быть таким:

module Outer
  class Inner; end
  class AnotherInner; end
end
class C
  import Outer: [:Inner, :AnotherInner]
  def f
    Inner
  end
end

Упрощенная реализация может быть такой:

class Class
  def import(constants)
    @imported_constants = 
      (@imported_constants || {}).merge Hash[
        constants.flat_map { |namespace, names|
          [*names].map { |name| [name.to_sym, "#{namespace}::#{name}"] }
        }]
  end

  def const_missing(name)
    const_set name, eval(@imported_constants[name] || raise)
  end
end

Есть ли надежная реализация в Rails или какой-нибудь гем, который делает аналогичный импорт, но при этом совместим с механизмом автоматической загрузки -Rails?

6
задан Alexey 9 August 2012 в 20:15
поделиться