5
나는 내부 용 보석을 만들고 있습니다. 그것은, 나는 또 다른 디렉토리에서 일부 YAML를로드 : 나는 오히려 initializer.rb
에 data/root.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
. 대신, 나는 <project_root>
에 대한 참조를 얻고 거기에서 상대 경로에 의존합니다. 더 똑똑한 움직임처럼 보입니다.
먼저이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 둘째, 그렇다면 어떻게해야합니까? 다양한 File
메소드를 체크 아웃했는데 그런 것은 없다고 생각합니다. Ruby 1.9를 사용하고 있습니다.
# in lib/magicwand/magicwand.rb
module MagicWand
# Project root directory.
ROOT = File.expand_path("../..", __FILE__)
end
하지만 나도 그 방식을 좋아 모르겠어요.
을 (즉, 기본 파일 및
root.yaml
사이의 상대 경로입니다 가정)data/root.yaml
에 상대 경로를 얻기 위해,$0
에있을 것입니다 좋은 생각이지만 테스트 중에는 전체 응용 프로그램 스택을 실행하는 대신 클래스를 직접 단위 테스트 할 때 중단됩니다. 이 경우 (테스트 러너에 대한 경로, 내 애플리케이션이 아닌) '$ 0'이 다를 수 있습니다. –테스트 중에 스텁 (stub) 할 수있는 간단한 개체에 조회를 감싸십시오. – Theo