Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > syck/streamライブラリ > Syck::Streamクラス
クラスの継承リスト: Syck::Stream < Object < Kernel < BasicObject
YAML ドキュメントを複数保持することができるストリームクラスです。
Rubyist Magazine: http://magazine.rubyist.net/
new(opts = {}) -> Syck::Stream[permalink][rdoc]ストリームを返します。ストリームはYAMLドキュメントを複数保持することができます。
[SEE_ALSO] Syck::Stream#options, Syck::Stream#options=
self[i] -> object[permalink][rdoc]i番目のドキュメントを参照します。
require 'yaml'
class Dog
attr_accessor :name
def initialize(name)
@name = name
end
end
ys = YAML::Stream.new
begin
ys[0] = Dog.new("kuro")
rescue
p $!
#=> #<NoMethodError: undefined method `[]=' for #<YAML::Stream:0x2b07d48 @documents=[], @options={}>>
end
ys.add Dog.new("pochi")
p ys[0]
#=> #<Dog:0x2b07b04 @name="pochi">
add(doc) -> ()[permalink][rdoc]オブジェクトをドキュメントに追加します。
require 'yaml'
class Dog
attr_accessor :name
def initialize(name)
@name = name
end
end
str1=<<EOT
--- !ruby/Dog
name: pochi
EOT
ys = YAML.load_stream(str1)
p ys.documents
#=> [#<YAML::DomainType:0x2b07af0 @value={"name"=>"pochi"}, @type_id="Dog", @domain="ruby.yaml.org,2002">]
ys.add(Dog.new("tama"))
p ys.documents
#=> [#<YAML::DomainType:0x2b07af0 @value={"name"=>"pochi"}, @type_id="Dog", @domain="ruby.yaml.org,2002">, #<Dog:0x2b079b0 @name="tama">]
documents -> Array[permalink][rdoc]自身のドキュメントを配列で返します。
require 'yaml'
str1=<<EOT
--- !ruby/Dog
name: pochi
---
:age: 17
:color: white
EOT
ys = YAML.load_stream(str1)
p ys.documents.pop
#=> {:age=>17, :color=>"white"}
p ys.documents.pop
#=> #<YAML::DomainType:0x2b07e24 @type_id="Dog", @domain="ruby.yaml.org,2002", @value={"name"=>"pochi"}>
p ys.documents.pop
#=> nil
documents=(val)[permalink][rdoc]現在のドキュメントを配列で設定します。
edit(doc_num, doc) -> ()[permalink][rdoc]doc_num番目のドキュメントをdocに変更します。 もし、doc_numが現在のドキュメント数より大きい場合は間にはnilが挿入されます。
require 'yaml'
class Dog
attr_accessor :name
def initialize(name)
@name = name
end
end
ys = YAML::Stream.new
ys.add(Dog.new("tama"))
ys.edit(1, Dog.new("pochi"))
ys.edit(5, Dog.new("jack"))
p ys.documents
#=> [#<Dog:0x2b07c44 @name="tama">, #<Dog:0x2b07c1c @name="pochi">, nil, nil, nil, #<Dog:0x2b07bf4 @name="jack">]
emit(io = nil) -> IO | String[permalink][rdoc]ストリームに含まれる各ドキュメントを引数 io に YAML 形式で書き込みます。 io が nil の場合は文字列を返します。
require 'yaml'
class Dog
attr_accessor :name
def initialize(name)
@name = name
end
end
ys = YAML::Stream.new
ys.add(Dog.new("pochi"))
ys.edit(1, { :age => 17, :color => "white"})
ys.edit(2, [ "Chiba", "Saitama"])
ys.emit.split(/\n/).each {|l|
puts l
}
#結果
--- !ruby/object:Dog
name: pochi
---
:age: 17
:color: white
---
- Chiba
- Saitama
options -> {Symbol => object}[permalink][rdoc]オプションの一覧を返します。
options=(val)[permalink][rdoc]オプションの一覧を設定します。