Estoy haciendo una gema para uso interno. En él, me carga alguna YAML de otro directorio:¿Cómo puedo cargar archivos desde una ruta relativa específica en 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
prefiero no dependen de la localización de data/root.yaml
relativa a initializer.rb
. En su lugar, prefiero obtener una referencia al <project_root>
y depender de la ruta relativa desde allí, lo que parece un movimiento más inteligente.
En primer lugar, es que la mejor manera de ir sobre esto? Segundo, si es así, ¿cómo hago eso? Revisé los diversos métodos File
, pero no creo que haya nada de eso. Estoy usando Ruby 1.9.
En este momento, crear una constante especial y confiar en que en su lugar:
# in lib/magicwand/magicwand.rb
module MagicWand
# Project root directory.
ROOT = File.expand_path("../..", __FILE__)
end
pero no estoy seguro de que me gusta ese enfoque tampoco.
Esa es una buena idea, pero se rompería durante las pruebas, cuando a menudo realizo una prueba individual de las clases directamente en lugar de activar toda la pila de aplicaciones. Mi '$ 0 'sería diferente en tales casos (la ruta al corredor de prueba, no mi aplicación). –
Envuelva la búsqueda en un objeto simple que pueda anular durante la prueba. – Theo