Как правильно обращаться с исходными файлами ruby с одинаковыми именами и обеспечить загрузку правильного файла данным оператором require
?
Фон
Я хочу использовать гем ruby-geometry в моем приложении Rails 3.
Я пытаюсь использовать класс ruby-geometry Polygon
:
require 'geometry' # the main ruby-geometry gem file
module SomeModule
def SomeMethod(vertices)
polygon = Geometry::Polygon.new(vertices)
# Do some stuff with polygon...
end
end
Однако всякий раз, когда я пытаюсь запустить этот код, я получаю следующую ошибку:
NameError: uninitialized constant Geometry::Polygon
Это странно, потому что мне кажется, что я могу без проблем работать с любыми другими классами ruby-geometry (например, Geometry::Point
, Geometry::Segment
).
Проблема
Проблема в том, что мое приложение содержит исходный файл с именем polygon.rb
(содержит модель ActiveRecord) и , так же как и гем ruby-geometry . Поэтому, когда гем ruby-geometry require
имеет свой собственный polygon.rb
, он заканчивает тем, что загружает polygon.rb
моего приложения вместо этого. Предположительно, это все в том порядке, в котором рубин просматривает каталоги.
Каков «правильный» подход к разрешению этого конфликта имен?
Очевидно, в коде вы можете использовать модули, чтобы различать пространства имен для разрешения конфликтов имен классов. Есть ли простой способ различать исходные файлы с одинаковыми именами, когда require
-ing их?