Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > yamlライブラリ > YAMLモジュール
module YAML
クラスの継承リスト: YAML
Abstract
YAML (YAML Ain't Markup Language) を扱うモジュールです。
参考
* YAML Specification
* YAML4R
- http://yaml4r.sourceforge.net/
- http://yaml4r.sourceforge.net/cookbook/
- http://yaml4r.sourceforge.net/doc/
* Ruby with YAMLhttp://www.namikilab.tuat.ac.jp/~sasada/prog/yaml.html * Rubyist Magazinehttp://jp.rubyist.net/magazine/
- プログラマーのための YAML 入門 (初級編)http://jp.rubyist.net/magazine/?0009-YAML
- プログラマーのための YAML 入門 (中級編)http://jp.rubyist.net/magazine/?0010-YAML
- プログラマーのための YAML 入門 (実践編)http://jp.rubyist.net/magazine/?0011-YAML
- プログラマーのための YAML 入門 (検証編)http://jp.rubyist.net/magazine/?0012-YAML
- プログラマーのための YAML 入門 (探索編)http://jp.rubyist.net/magazine/?0013-YAML
モジュール関数
add_builtin_type(type_re) {|type, val| ...}
-
yaml.org,2002ドメインに属しているクラスをYAMLに追加し そのクラスを見つけたときの操作を指定します。
- [PARAM] type_re:
- 加えるクラスを指定する。
- [PARAM] type:
- YAMLドメインとクラスの文字列
- [PARAM] val:
- YAMLデータ構造
require 'yaml' str1=<<EOT --- !ruby.yaml.org,2002/Rational 5/6 EOT str2=<<EOT --- !yaml.org,2002/Rational 3/4 EOT p YAML.load(str1) #=> #<YAML::DomainType:0x2b07528 @type_id="Rational", @domain="ruby.yaml.org,2002", @value="5/6"> p YAML.load(str2) #=> #<YAML::DomainType:0x2b0767c @type_id="Rational", @domain="yaml.org,2002", @value="3/4"> YAML.add_builtin_type("Rational"){|type, val| md = val.split(/\//) Rational.new!(md[0].to_i, md[1].to_i) } p YAML.load(str1) #=> #<YAML::DomainType:0x2b06fec @type_id="Rational", @domain="ruby.yaml.org,2002", @value="5/6"> ## 前回と変化なし rt = YAML.load(str2) p rt + 0.25 #=> 1.0
add_domain_type(domain, type_re) {|type, val| ...}
-
YAMLドメインに属しているクラスをYAMLに追加し、 そのクラスを見つけたときの操作を指定します。
- [PARAM] domain:
- YAMLのドメインを文字列で指定する。
- [PARAM] type_re:
- 加えるクラスを指定する。
- [PARAM] type:
- YAMLドメインとクラスの文字列
- [PARAM] val:
- YAMLデータ構造
require 'yaml' class Person attr_accessor :name, :age end str=<<EOT --- !Qjitsu.com,2007-05-04/Person name: eiji age: 33 EOT YAML.each_document(str){|obj| p obj } #=> #<YAML::DomainType:0x2b07974 @type_id="Person", @domain="Qjitsu.com,2007-05-04", @value={"name"=>"eiji", "age"=>33}> # YAML.add_domain_type( "Qjitsu.com,2007-05-04", "Person" ) { |type, val| YAML.object_maker( Person, val ) } YAML.each_document(str){|obj| p obj } #=> #<Person:0x2b0762c @age=33, @name="eiji">
add_private_type(type_re) {|type, val| ...}
-
プライベートタイプのクラスをYAMLに追加し、 そのクラスを見つけたときの操作を指定します。
- [PARAM] type_re:
- プライベートタイプのクラスを文字列で指定します。
- [PARAM] type:
- YAMLドメインとクラスの文字列
- [PARAM] val:
- YAMLデータ構造
require 'yaml' class Person ; end str1=<<EOT --- !!Person name: taro country: Japan capital: Tokyo EOT YAML.each_document(str1){|obj| p obj } #=> #<YAML::PrivateType:0x2b07a14 @type_id="Person", @value={"name"=>"taro", "country"=>"Japan", "capital"=>"Tokyo"}> YAML.add_private_type("Person"){|type, val| YAML.object_maker(Person, val) } YAML.each_document(str1){|obj| p obj } #=> #<Person:0x2b07640 @country="Japan", @capital="Tokyo", @name="taro"> str2=<<EOT --- !Qjitsu.com,2007-05-04/Person name: eiji age: 33 --- !!Person name: ichiro country: Japan capital: Tokyo EOT YAML.each_document(str2){|obj| p obj } #=> #<YAML::DomainType:0x2b071a4 @type_id="Person", @domain="Qjitsu.com,2007-05-04", @value={"name"=>"eiji", "age"=>33}> #=> #<Person:0x2b06eac @country="Japan", @capital="Tokyo", @name="ichiro">
add_ruby_type(type_re) {|type, val| ...}
-
rubyタイプのクラスをYAMLに追加し、 そのクラスを見つけたときの操作を指定します。
- [PARAM] type_re:
- rubyタイプのクラスを文字列で指定します。
- [PARAM] type:
- YAMLドメインとクラスの文字列
- [PARAM] val:
- YAMLデータ構造
require 'yaml' class Dog attr_accessor :name def initialize(name) @name = name end end str1=<<EOT --- !ruby/Dog name: pochi --- !!Dog age: 0.5 --- !Qjitsu.com,2007-05-06/Dog preference: apple EOT YAML.add_ruby_type("Dog") do |type, val| YAML.object_maker(Dog, val) end YAML.each_document(str1){|dog| p dog.class p dog.respond_to?(:name) } #=> Dog #=> true #=> YAML::PrivateType #=> false #=> YAML::DomainType #=> false
detect_implicit(val)
-
文字列のタイプを検知する
- [PARAM] val:
- 判定されるオブジェクト
require 'yaml' p YAML.detect_implicit("") #=> "null" p YAML.detect_implicit("Cat") #=> "str" p YAML.detect_implicit(10) #=> "" p YAML.detect_implicit([3, "5"]) #=> "" p YAML.detect_implicit(nil) #=> ""
dump(obj, io = nil)
-
与えられた obj を YAML フォーマットに変換し、io に書き込みます。 io が与えられていない場合は、YAML フォーマットの文字列を返します。
- [PARAM] obj:
- YAMLフォーマットに変換されるオブジェクト
- [PARAM] io:
- 出力先のIOオブジェクト
YAML.dump( ['badger', 'elephant', 'tiger'], File.open('sample.yml', 'w') )
dump_stream(*objs)
-
与えられた objs を順に YAML フォーマットに変換していき、一つの文字列にまとめたものを返します。
- [PARAM] objs:
- YAMLフォーマットに変換されるオブジェクト
require "yaml" puts YAML.dump_stream( "hoge\nfoo", [1,2], {"foo" => "bar"} ) --- |- hoge foo --- - 1 - 2 --- foo: bar
each_document(io) {|obj| ...}
load_documents(io) {|obj| ...}
-
与えられた io から YAML フォーマットの文書をすべて順に読み込み Ruby のオブジェクトに変換し、 生成したオブジェクトを引数としてブロックを評価していきます。
- [PARAM] io:
- YAMLフォーマットの文書の読み込み先のIOオブジェクト
# sample.yml - apple - banana - carrot --- foo: bar #!/usr/bin/env ruby require "yaml" File.open( 'sample.yml' ) do |io| YAML.load_documents(io){|y| p y } end #=> ["apple", "banana", "carrot"] #=> {"foo"=>"bar"}
each_node(io) {|obj| ...}
-
与えられた io から YAML フォーマットの文書をすべて順に読み込み YAML::Syck::Mapオブジェクトに変換し、 生成したオブジェクトを引数としてブロックを評価していきます。
- [PARAM] YAML:
フォーマットの文書の IO オブジェクト
food: - apple - banana - carrot --- foo: bar # end of test.yml require 'yaml' File.open( 'test.yml' ) do |io| YAML.each_node(io) do |y| p y.transform end end #=> {"food"=>["apple", "banana", "carrot"]} #=> {"foo"=>"bar"}
load(io)
load(str)
-
YAML フォーマットの文書を読み込み Ruby のオブジェクトを生成して返します。 引数として IO オブジェクトと文字列を受け付けます。 io や 文字列が複数の YAML ドキュメントを含んでいても、最初のものしか Ruby のオブジェクトに変換しません。
- [PARAM] io:
- YAMLフォーマットの文書の読み込み先のIOオブジェクト
- [PARAM] str:
- YAMLフォーマットの文書の読み込み先の文字列
$ ruby-1.8 -ryaml -e ' p YAML.load(<<HERE) - apple - banana - carrot --- foo: bar HERE ' ["apple", "banana", "carrot"]
load_file(file)
-
与えられた名前のファイルから YAML フォーマットの文書を読み込み Ruby のオブジェクトを生成して返します。 ファイルが複数の YAML ドキュメントを含んでいても、 最初のものしか Ruby のオブジェクトに変換しません。
- [PARAM] file:
- YAMLフォーマットのファイル
--- - Monday - - 国語 - 算数 - 理科 - 社会 - 体育 --- - Friday - - 体育 - 算数 - 理科 - 国語 - 社会 #end of jikanwari.yaml require 'yaml' puts YAML.load_file('jikanwari.yaml').join(",") #=> Monday,国語,算数,理科,社会,体育
load_stream(io)
-
与えられた io から YAML フォーマットの文書を すべて順に読み込んで Ruby のオブジェクトに変換していき、 それらオブジェクトを含んだ YAML::Stream を返します。
- [PARAM] io:
- YAML フォーマットの文書のIOオブジェクトもしくは文字列
require 'yaml' class Dog attr_accessor :name def initialize(name) @name = name end end str1=<<EOT --- !ruby/Dog name: pochi --- !!Dog age: 0.5 EOT YAML.add_ruby_type("Dog") do |type, val| Dog.new(val["name"]) end ys = YAML.load_stream(str1) p ys #=> #<YAML::Stream:0x2b079d8 @options={}, @documents=[#<Dog:0x2b079c4 @name="pochi">, #<YAML::PrivateType:0x2b07780 @value={"age"=>0.5}, @type_id="Dog">]> ys.edit(1, Dog.new("tama")) p ys.documents #=> [#<Dog:0x2b079b0 @name="pochi">, #<Dog:0x2b0762c @name="tama">]
object_maker(obj_class, val)
-
与えられたobj_class クラスに、valハッシュをインスタンス変数として追加し obj_classクラスのインスタンスを生成して返します。
- [PARAM] obj_class:
- クラスを指定する
- [PARAM] val:
- ハッシュを指定する。obj_classのインスタンス変数作成に使用される
require 'yaml' class Cat; end YAML.load_documents(DATA){|y| p YAML.object_maker(Cat, y) } __END__ name: taro age: 13 --- name: jiro age: 23 --- name: saburo age: 8 # end of sample 結果 #=> #<Cat:0xb7ccb174 @name="taro", @age=13> #=> #<Cat:0xb7ccafa8 @name="jiro", @age=23> #=> #<Cat:0xb7ccaad0 @name="saburo", @age=8>
parse(io)
-
与えられた io から YAML フォーマットの文書をパースし YAML::Syck::Nodeオブジェクトに変換します。 複数のドキュメントを読み込む場合は、YAML.#parse_documents を使用します。
- [PARAM] io:
- YAMLフォーマットのIOオブジェクトもしくは文字列
#!/usr/bin/env ruby require 'yaml' doc = YAML.parse(DATA) doc.search("//name").each {|node| p node } __END__ cat: - name: taro age: 7 - name: jiro age: 23 --- dog: shiba: - name: goro age: 3 - name: rokuro age: 1 # end of sample #=> "/cat/0/name" #=> "/cat/1/name" # dog は読み込まない
parse_documents(io) {|obj| ...}
-
与えられた io から YAML フォーマットの文書をパースし YAML::Syck::Nodeオブジェクトに変換し、 生成したオブジェクトを引数としてブロックを評価していきます。
- [PARAM] YAML:
- フォーマットの文書のIOオブジェクトもしくは文字列
require 'yaml' YAML.parse_documents(DATA){|doc| doc.search('/dog//name').each {|node| p node } p "-->" } __END__ cat: - name: taro age: 7 - name: jiro age: 23 --- dog: shiba: - name: goro age: 3 - name: rokuro age: 1 # end of sample #=> "-->" #=> "/dog/shiba/0/name" #=> "/dog/shiba/1/name" #=> "-->"
parse_file(file_path)
-
file_pathのファイルから一つのYAMLドキュメントをパースし、 YAML::Syck::Nodeオブジェクトを返します。
- [PARAM] file_path:
- YAMLドキュメントが書かれたファイルへのパスを文字列で指定する
cat: - name: taro age: 7 - name: jiro age: 23 --- dog: shiba: - name: goro age: 3 - name: rokuro age: 1 # end of sample.yaml require 'yaml' tree = YAML.parse_file("sample.yaml") p tree.transform #=> {"cat"=>[{"name"=>"taro", "age"=>7}, {"name"=>"jiro", "age"=>23}]}
quick_emit(oid, opts={}) {|obj| ...}
read_type_class(type, obj_class)
tagurize(val)
transfer
try_implicit(obj)
定数
DEFAULTS
-
YAMLのデフォルトの設定のハッシュです。 Ruby 1.8.3 以降では変更できません。
下記のオプションがあります。
{ :SortKeys=>false, :UseFold=>false, :AnchorFormat=>"id%03d", :Encoding=>:None, :Indent=>2, :ExplicitTypes=>false, :UseHeader=>false, :WidthType=>"absolute", :UseVersion=>false, :BestWidth=>80, :Version=>"1.0", :UseBlock=>false }