Я делаю драгоценный камень для внутреннего использования. В этом, я загрузить некоторые YAML из другой директории:Как загрузить файлы с определенного относительного пути в Ruby?
# in <project_root>/bin/magicwand
MagicWand::Configuration::Initializer.new(...)
# in <project_root>/lib/magicwand/configuration/initializer.rb
root_yaml = YAML.load_file(
File.expand_path("../../../../data/#{RootFileName}", __FILE__))
# in <project_root>/data/root.yaml
---
apple: 100
banana: 200
coconut: 300
Я предпочел бы не зависеть от расположения data/root.yaml
относительно initializer.rb
. Вместо этого я предпочел бы получить ссылку на <project_root>
и полагаться на относительный путь оттуда, который кажется более умным.
Во-первых, это лучший способ сделать это? Во-вторых, если да, то как мне это сделать? Я проверил различные методы File
, но я не думаю, что есть что-то в этом роде. Я использую Ruby 1.9.
Прямо сейчас, я создаю специальную константу и зависят от того, вместо:
# in lib/magicwand/magicwand.rb
module MagicWand
# Project root directory.
ROOT = File.expand_path("../..", __FILE__)
end
, но я не уверен, что мне нравится этот подход тоже.
Это хорошая идея, но во время тестов он будет разорваться, когда я буду часто тестировать классы напрямую, а не запускать полный стек приложений. Мой '$ 0' будет отличаться в таких случаях (путь к тестовому бегуну, а не к моему приложению). –
Оберните поиск простым объектом, который вы можете заглушить во время тестирования. – Theo