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.