[Ruby] home directory に置いた YAML ファイルを開く
設定ファイルを持って、読み込みたい。
[markdown]
ENVオブジェクトで home ディレクトリのパスを取得。
> [object ENV (Ruby 2.4.0)](https://docs.ruby-lang.org/ja/2.4.0/class/ENV.html)
“`ruby
% pry
[1] pry(main)> ENV[‘HOME’]
=> “/Users/****”
“`
`File.join` でパスを整える。
> [How to do a safe join pathname in ruby? – Stack Overflow](http://stackoverflow.com/questions/597488/how-to-do-a-safe-join-pathname-in-ruby)
“`ruby
[2] pry(main)> file = File.join(ENV[‘HOME’], ‘.foo’)
=> “/Users/****/.foo”
“`
YAML ファイルを読み込み、Ruby オブジェクトに変換する。
> [Rubyist Magazine – プログラマーのための YAML 入門 (中級編)](http://magazine.rubyist.net/?0010-YAML)
“`ruby
[3] pry(main)> require ‘yaml’
=> true
[4] pry(main)> config = YAML.load_file(file)
=> {“ignore”=>[“atom”, “omniplan1”]}
[5] pry(main)> config[‘ignore’]
=> [“atom”, “omniplan1″]
“`
ファイルの存在は `File.exist?` でチェックする。
> [module function FileTest.#exist? (Ruby 2.4.0)](https://docs.ruby-lang.org/ja/latest/method/FileTest/m/exist=3f.html)
“`ruby
[6] pry(main)> File.exist?(file)
=> true
“`
サンプルの YAML ファイルは、以下の形式。
“`yaml:~/.foo
ignore:
– atom
– omniplan1
“`
Rspec で ENV を stub するには、こんな形で書くよう。
> [RspecでENVをどうstubするのがよいのか – Qiita](http://qiita.com/vivid_muimui/items/5e0bc229a688afefbce2)
“`ruby
allow(ENV).to receive(:[]).with(‘HOME’).and_return(”)
“`
[/markdown]