Sto facendo un gioiello per uso interno. In esso, ho caricare alcuni YAML da un'altra directory:Come caricare i file da un percorso relativo specifico in 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
Preferirei non dipende dalla posizione del data/root.yaml
rispetto al initializer.rb
. Invece, preferisco avere un riferimento a <project_root>
e dipendere dal percorso relativo da lì, che sembra una mossa più intelligente.
In primo luogo, è il modo migliore per farlo? In secondo luogo, se sì, come faccio? Ho controllato i vari metodi File
, ma non penso che ci sia qualcosa del genere. Sto usando Ruby 1.9.
In questo momento, creo una costante speciale e dipendere da quello invece:
# in lib/magicwand/magicwand.rb
module MagicWand
# Project root directory.
ROOT = File.expand_path("../..", __FILE__)
end
ma non sono sicuro che mi piace questo approccio sia.
Questo è un buona idea, ma si romperà durante i test, quando spesso collaudo le classi direttamente piuttosto che accendere lo stack completo dell'applicazione. Il mio '$ 0' sarebbe diverso in questi casi (il percorso per il runner di test, non per la mia applicazione). –
Completa la ricerca in un oggetto semplice che puoi eliminare durante il test. – Theo