# class YAML::Nodes::Builder

- YAML::Nodes::Builder
- Reference
- Object

##
Overview

Builds a tree of YAML nodes.

This builder is similar to `YAML::Builder`, but instead of directly emitting the output to an IO it builds a YAML document tree in memory.

All "emitting" methods support specifying a "reference" object that will be associated to the emitted object, so that when that reference object is emitted again an anchor and an alias will be created. This generates both more compact documents and allows handling recursive data structures.

##
Defined in:

yaml/nodes/builder.cr

##
Constructors

- .new

##
Instance Method Summary

- #alias(anchor : String) : Nil

  Emits an alias to the given anchor.

- #document : Document

  The document this builder builds.

- #mapping(anchor : String | Nil = nil, tag : String | Nil = nil, style : YAML::MappingStyle = YAML::MappingStyle::ANY, reference = nil, &) : Nil
- #merge(anchor : String) : Nil

  Emits the scalar `"<<"` followed by an alias to the given anchor.

- #scalar(value, anchor : String | Nil = nil, tag : String | Nil = nil, style : YAML::ScalarStyle = YAML::ScalarStyle::ANY, reference = nil) : Nil
- #sequence(anchor : String | Nil = nil, tag : String | Nil = nil, style : YAML::SequenceStyle = YAML::SequenceStyle::ANY, reference = nil, &) : Nil

### Instance methods inherited from class `Reference`

==(other : self)
==(other : JSON::Any)
==(other : YAML::Any)
==(other) ==, dup dup, hash(hasher) hash, initialize initialize, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference) : Bool
same?(other : Nil) same?, to_s(io : IO) : Nil to_s

### Constructor methods inherited from class `Reference`

new new, unsafe_construct(address : Pointer, *args, **opts) : self unsafe_construct

### Class methods inherited from class `Reference`

pre_initialize(address : Pointer) pre_initialize

### Instance methods inherited from class `Object`

! : Bool !, !=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other) ===, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash hash, in?(collection : Object) : Bool
in?(*values : Object) : Bool in?, inspect(io : IO) : Nil
inspect : String inspect, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String to_json, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil to_pretty_json, to_s(io : IO) : Nil
to_s : String to_s, to_yaml(io : IO) : Nil
to_yaml : String to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as

### Class methods inherited from class `Object`

from_json(string_or_io : String | IO, root : String)
from_json(string_or_io : String | IO) from_json, from_yaml(string_or_io : String | IO) from_yaml

### Macros inherited from class `Object`

class_getter(*names, &block) class_getter, class_getter!(*names) class_getter!, class_getter?(*names, &block) class_getter?, class_property(*names, &block) class_property, class_property!(*names) class_property!, class_property?(*names, &block) class_property?, class_setter(*names) class_setter, def_clone def_clone, def_equals(*fields) def_equals, def_equals_and_hash(*fields) def_equals_and_hash, def_hash(*fields) def_hash, delegate(*methods, to object) delegate, forward_missing_to(delegate) forward_missing_to, getter(*names, &block) getter, getter!(*names) getter!, getter?(*names, &block) getter?, property(*names, &block) property, property!(*names) property!, property?(*names, &block) property?, setter(*names) setter

##
Constructor Detail

def self.new #

##
Instance Method Detail

def alias(anchor : String) : Nil #

Emits an alias to the given anchor.

    require "yaml"

    nodes_builder = YAML::Nodes::Builder.new

    nodes_builder.mapping do
      nodes_builder.scalar "foo"
      nodes_builder.alias "key"
    end

    yaml = YAML.build do |builder|
      nodes_builder.document.to_yaml builder
    end

    yaml # => "---\nfoo: *key\n"

def document : Document #

The document this builder builds.

def mapping(anchor : String | Nil = nil, tag : String | Nil = nil, style : YAML::MappingStyle = YAML::MappingStyle::ANY, reference = nil, &) : Nil #
def merge(anchor : String) : Nil #

Emits the scalar `"<<"` followed by an alias to the given anchor.

See YAML Merge.

    require "yaml"

    nodes_builder = YAML::Nodes::Builder.new

    nodes_builder.mapping do
      nodes_builder.merge "key"
    end

    yaml = YAML.build do |builder|
      nodes_builder.document.to_yaml builder
    end

    yaml # => "---\n<<: *key\n"

def scalar(value, anchor : String | Nil = nil, tag : String | Nil = nil, style : YAML::ScalarStyle = YAML::ScalarStyle::ANY, reference = nil) : Nil #
def sequence(anchor : String | Nil = nil, tag : String | Nil = nil, style : YAML::SequenceStyle = YAML::SequenceStyle::ANY, reference = nil, &) : Nil #