Rioでyaml

Rioではyamlも扱えるみたい.ほんと何でもアリだな.
rails野郎にはもう未飽きたであろう,database.ymlをどっかから適当にコピーしてきて,コレを元に試してみる.
内容は,まぁこんな感じ.

development:
  adapter: mysql
  database: scheduler_development
  username: omochi
  password: hoge
  host: localhost
  encoding: utf8
  (以下略)

新しい事をするときはいつもirbと決めているので,irbで試す.

入力

yamlファイルの中身を読み込んでハッシュに落とし込むのは,こうする.

> rio('database.yml').yaml.load
=> {"development"=>{"encoding"=>"utf8", "username"=>"omochi", "adapter"=>"mysql", 
"host"=>"localhost", "password"=>"hoge", "database"=>"scheduler_development"}, 
(以下略)

yamlファイルの属性の値を参照するには,こうする.

> rio('database.yml').yaml.getobj['development']
=> {"encoding"=>"utf8", "username"=>"omochi", "adapter"=>"mysql", 
"host"=>"localhost", "password"=>"hoge", "database"=>"scheduler_development"}
> rio('database.yml').yaml.getobj['development']['adapter']
=> "mysql"

また,オブジェクトに落とし込むときはこう.

> hash = rio('database.yml').yaml.getobj

上からすると当たり前な気が.ちなみに,sub(/getobj/,'load')でも良い.

出力

ハッシュをyamlファイルに書き出すには,こうする.

> yaml = {'development' => {
  'adapter' => 'sqlite3',
  'database' => 'development.sqlite3'
  }
}
> rio('database2.yml').yaml.dump(yaml)

もしくは,

> rio('database2.yml').yaml < yaml

ダンプがこれでできるのに,getobjは

> rio('database2.yml').yaml > yaml

ってできないんだな.

出力されたファイルをlessしてみると,こうなってる.

--- 
development: 
  adapter: sqlite3
  database: development.sqlite3

よくわかんない機能

array_of_objects = rio('afile.yaml').yaml[0..2]

rio('afile.yaml').yaml(::Hash) {|ahash| ...}

anarray = rio('afile.yaml').yaml(proc{|anobject| ...}).to_a

どうすれば有効に使えるのかが分かんない.上から2番目に至っては,ちゃんと動かない

おまけ

CSVyamlに変換するには,これでいい.

rio('afile.yaml').yaml < rio('afile.csv').csv

簡単だなぁ.