Module | RIO::IF::YAML | lib/rio/if/yaml.rb |
Calls YAML.load.
Loads a single YAML object from the stream referenced by the Rio
rio('database.yml').yaml.getobj
See yaml and RIO::Doc::INTRO
Calls YAML.load.
Loads a single YAML object from the stream referenced by the Rio
rio('database.yml').yaml.load
See yaml and RIO::Doc::INTRO
Dumps an object to a Rio as with putobj, and closes the Rio.
rio('afile.yaml').yaml.putobj!(anobject)
is identical to
rio('afile.yaml').yaml.putobj(anobject).close
Reject documents from a YAML file. Calls skiprows. See yaml and RIO::Doc::INTRO
Reject objects from a YAML file. Calls skiprecords. See yaml and RIO::Doc::INTRO
Puts a Rio in YAML mode.
Rio uses the YAML class from the Ruby standard library to provide support for reading and writing YAML files. Normally using (skip)records is identical to (skip)lines because while records only selects and does not specify the record-type, lines is the default.
The YAML extension distingishes between items selected using records, rows and lines. Rio returns objects loaded via YAML#load when records or objects is used; returns the YAML text as a String when rows or documents is used; and returns lines as Strings as normal when lines is used. records is the default.
To read a single YAML document, Rio provides getobj and load. For example, consider the following partial ‘database.yml’ from the rails distribution:
development: adapter: mysql database: rails_development test: adapter: mysql database: rails_test
To get the object represented in the yaml file:
rio('database.yml').yaml.load ==>{"development"=>{"adapter"=>"mysql", "database"=>"rails_development"}, "test"=>{"adapter"=>"mysql", "database"=>"rails_test"}}
Or one could read parts of the file like so:
rio('database.yml').yaml.getobj['development']['database'] ==>"rails_development"
Single objects can be written using putobj and putobj! which is aliased to dump
anobject = { 'production' => { 'adapter' => 'mysql', 'database' => 'rails_production', } } rio('afile.yaml').yaml.dump(anobject)
Single objects can be written using putrec (aliased to putobj and dump)
rio('afile.yaml').yaml.putobj(anobject)
Single objects can be loaded using getrec (aliased to getobj and load)
anobject = rio('afile.yaml').yaml.getobj
A Rio in yaml-mode is just like any other Rio. And all the things you can do with any Rio come for free. They can be iterated over using each and read into an array using [] just like any other Rio. All the selection criteria are identical also.
Get the first three objects into an array:
array_of_objects = rio('afile.yaml').yaml[0..2]
Iterate over only YAML documents that are a kind_of ::Hash:
rio('afile.yaml').yaml(::Hash) {|ahash| ...}
This takes advantage of the fact that the default for matching records is ===
Selecting records using a Proc can be used as normal:
anarray = rio('afile.yaml').yaml(proc{|anobject| ...}).to_a
One could even use the copy operator to convert a CSV file to a YAML representation of the same data:
rio('afile.yaml').yaml < rio('afile.csv').csv
Copyright © 2005,2006,2007 Christopher Kleckner. All rights reserved.