[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]