Class: Psych::Stream

Inherits:
Visitors::YAMLTree show all
Defined in:
lib/psych/stream.rb

Overview

Psych::Stream is a streaming YAML emitter. It will not buffer your YAML, but send it straight to an IO.

Here is an example use:

stream = Psych::Stream.new($stdout)
stream.start
stream.push({:foo => 'bar'})
stream.finish

YAML will be immediately emitted to $stdout with no buffering.

Psych::Stream#start will take a block and ensure that Psych::Stream#finish is called, so you can do this form:

stream = Psych::Stream.new($stdout)
stream.start do |em|
  em.push(:foo => 'bar')
end

Direct Known Subclasses

JSON::Stream

Defined Under Namespace

Classes: Emitter

Instance Attribute Summary

Attributes inherited from Visitors::Visitor

#finished, #started

Instance Method Summary collapse

Methods inherited from Visitors::YAMLTree

#accept, #finish, #push, #tree, #visit_Array, #visit_Class, #visit_Complex, #visit_DateTime, #visit_Exception, #visit_Float, #visit_Hash, #visit_Integer, #visit_NilClass, #visit_Object, #visit_Psych_Omap, #visit_Psych_Set, #visit_Range, #visit_Rational, #visit_Regexp, #visit_String, #visit_Struct, #visit_Symbol, #visit_Time

Methods inherited from Visitors::Visitor

#accept

Constructor Details

#initialize(io) ⇒ Stream

Create a new streaming emitter. Emitter will print to io. See Psych::Stream for an example.



37
38
39
# File 'lib/psych/stream.rb', line 37

def initialize io
  super({}, self.class.const_get(:Emitter).new(io))
end

Instance Method Details

#start(encoding = Nodes::Stream::UTF8) ⇒ Object

Start streaming using encoding



43
44
45
46
47
# File 'lib/psych/stream.rb', line 43

def start encoding = Nodes::Stream::UTF8
  super.tap { yield self if block_given?  }
ensure
  finish if block_given?
end