module Psych::Nodes

Übersicht

Wenn Sie Psych.load zum Deserialisieren eines YAML-Dokuments verwenden, wird das Dokument in eine zwischengeschaltete AST übersetzt. Diese zwischengeschaltete AST wird dann in einen Ruby-Objektgraphen übersetzt.

In umgekehrter Richtung, wenn Sie Psych.dump verwenden, wird der Ruby-Objektgraph in eine zwischengeschaltete AST übersetzt, die dann in ein YAML-Dokument konvertiert wird.

Psych::Nodes enthält alle Klassen, die die Knoten einer YAML-AST bilden. Sie können manuell eine AST erstellen und einen der Besucher (siehe Psych::Visitors) verwenden, um diese AST entweder in ein YAML-Dokument oder in einen Ruby-Objektgraphen zu konvertieren.

Hier ist ein Beispiel für die Erstellung einer AST, die eine Liste mit einem Skalar darstellt

# 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

Der Stream ist die Wurzel des Baums. Wir können den Baum dann in YAML konvertieren

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

Oder in Ruby konvertieren

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

YAML AST-Anforderungen

Eine gültige YAML-AST muss einen Psych::Nodes::Stream an der Wurzel haben. Ein Psych::Nodes::Stream-Knoten muss 1 oder mehr Psych::Nodes::Document-Knoten als Kinder haben.

Psych::Nodes::Document-Knoten müssen ein und nur ein Kind haben. Dieses Kind kann eines der folgenden sein:

Psych::Nodes::Sequence- und Psych::Nodes::Mapping-Knoten können viele Kinder haben, aber Psych::Nodes::Mapping-Knoten sollten eine gerade Anzahl von Kindern haben.

Alle diese sind gültige Kinder für Psych::Nodes::Sequence- und Psych::Nodes::Mapping-Knoten

Psych::Nodes::Scalar und Psych::Nodes::Alias sind beides terminale Knoten und sollten keine Kinder haben.