Как загрузить файлы с определенного относительного пути в Ruby? - PullRequest
5 голосов
/ 19 июня 2010

Я делаю драгоценный камень для внутреннего использования. В нем я загружаю YAML из другого каталога:

# 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

но я не уверен, что мне тоже нравится такой подход.

1 Ответ

4 голосов
/ 19 июня 2010

Если есть основной файл, который вы всегда запускаете, вы можете использовать этот файл в качестве ориентира.Относительный путь (между текущим каталогом и) этого файла будет в $0, поэтому, чтобы получить относительный путь к data/root.yaml (при условии, что это относительный путь между основным файлом и root.yaml), вы делаете

path_to_root_yaml = File.dirname($0) + '/data/root.yaml'
...