Je fais un bijou pour usage interne. Dans ce document, je charge un peu YAML dans un autre répertoire:Comment charger des fichiers à partir d'un chemin relatif spécifique dans 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
Je préfère ne pas dépendre de l'emplacement de data/root.yaml
par rapport à initializer.rb
. Au lieu de cela, je préfère obtenir une référence à <project_root>
et dépend du chemin relatif à partir de là, ce qui semble être un mouvement plus intelligent.
D'abord, est-ce la meilleure façon de procéder? Deuxièmement, si oui, comment puis-je faire cela? J'ai vérifié les différentes méthodes File
, mais je ne pense pas qu'il y ait quelque chose comme ça. J'utilise Ruby 1.9.
En ce moment, je crée une constante spéciale et dépendent de cette place:
# in lib/magicwand/magicwand.rb
module MagicWand
# Project root directory.
ROOT = File.expand_path("../..", __FILE__)
end
mais je ne suis pas sûr que j'aime cette approche soit.
C'est une bonne idée, mais elle se briserait pendant les tests, quand je teste souvent les classes directement plutôt que de lancer la pile d'applications complète. Mon '$ 0' serait différent dans de tels cas (le chemin vers le coureur de test, pas mon application). –
Enveloppez la recherche dans un objet simple que vous pouvez extraire pendant le test. – Theo