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番目に至っては,ちゃんと動かない