Module: Psych::Nodes (Ruby 2.2.2)
Description: Module : Psych::Nodes - Ruby 2.2.2

- Home
- Core 2.2.2
- Std-lib 2.2.2
- Downloads

Support for the Ruby 2.2 series has ended. See here for reference.

### Home Classes Methods

### In Files

- psych/lib/psych/nodes.rb
- psych/lib/psych/nodes/alias.rb
- psych/lib/psych/nodes/document.rb
- psych/lib/psych/nodes/mapping.rb
- psych/lib/psych/nodes/node.rb
- psych/lib/psych/nodes/scalar.rb
- psych/lib/psych/nodes/sequence.rb
- psych/lib/psych/nodes/stream.rb
- psych/lib/psych/tree_builder.rb
- psych/lib/psych/visitors/to_ruby.rb
- psych/lib/psych/visitors/yaml_tree.rb

### Namespace

- CLASS Psych::Nodes::Alias
- CLASS Psych::Nodes::Document
- CLASS Psych::Nodes::Mapping
- CLASS Psych::Nodes::Node
- CLASS Psych::Nodes::Scalar
- CLASS Psych::Nodes::Sequence
- CLASS Psych::Nodes::Stream

### Class/Module Index

Quicksearch

- Kernel
- Module
- Object
- Psych
- Psych::BadAlias
- Psych::ClassLoader
- Psych::ClassLoader::Restricted
- Psych::Coder
- Psych::DisallowedClass
- Psych::Emitter
- Psych::Exception
- Psych::Handler
- Psych::Handler::DumperOptions
- Psych::Handlers
- Psych::Handlers::Recorder
- Psych::JSON
- Psych::JSON::Stream
- Psych::JSON::TreeBuilder
- Psych::Nodes
- Psych::Nodes::Alias
- Psych::Nodes::Document
- Psych::Nodes::Mapping
- Psych::Nodes::Node
- Psych::Nodes::Scalar
- Psych::Nodes::Sequence
- Psych::Nodes::Stream
- Psych::Omap
- Psych::Parser
- Psych::Parser::Mark
- Psych::ScalarScanner
- Psych::Set
- Psych::Stream
- Psych::Streaming
- Psych::Streaming::ClassMethods
- Psych::SyntaxError
- Psych::TreeBuilder
- Psych::Visitors
- Psych::Visitors::DepthFirst
- Psych::Visitors::Emitter
- Psych::Visitors::JSONTree
- Psych::Visitors::NoAliasRuby
- Psych::Visitors::ToRuby
- Psych::Visitors::Visitor
- Psych::Visitors::YAMLTree
- Regexp

No matching classes.

# Psych::Nodes

# Overview¶ ↑

When using Psych.load to deserialize a YAML document, the document is translated to an intermediary AST. That intermediary AST is then translated in to a Ruby object graph.

In the opposite direction, when using Psych.dump, the Ruby object graph is translated to an intermediary AST which is then converted to a YAML document.

Psych::Nodes contains all of the classes that make up the nodes of a YAML AST. You can manually build an AST and use one of the visitors (see Psych::Visitors) to convert that AST to either a YAML document or to a Ruby object graph.

Here is an example of building an AST that represents a list with one scalar:

    # Create our nodes
    stream = Psych::Nodes::Stream.new
    doc    = Psych::Nodes::Document.new
    seq    = Psych::Nodes::Sequence.new
    scalar = Psych::Nodes::Scalar.new('foo')

    # Build up our tree
    stream.children << doc
    doc.children    << seq
    seq.children    << scalar

The stream is the root of the tree. We can then convert the tree to YAML:

    stream.to_yaml => "---\n- foo\n"

Or convert it to Ruby:

    stream.to_ruby => [["foo"]]

## YAML AST Requirements¶ ↑

A valid YAML AST must have one Psych::Nodes::Stream at the root. A Psych::Nodes::Stream node must have 1 or more Psych::Nodes::Document nodes as children.

Psych::Nodes::Document nodes must have one and only one child. That child may be one of:

- Psych::Nodes::Sequence

- Psych::Nodes::Mapping

- Psych::Nodes::Scalar

Psych::Nodes::Sequence and Psych::Nodes::Mapping nodes may have many children, but Psych::Nodes::Mapping nodes should have an even number of children.

All of these are valid children for Psych::Nodes::Sequence and Psych::Nodes::Mapping nodes:

- Psych::Nodes::Sequence

- Psych::Nodes::Mapping

- Psych::Nodes::Scalar

- Psych::Nodes::Alias

Psych::Nodes::Scalar and Psych::Nodes::Alias are both terminal nodes and should not have any children.