Ruby 2.5.0 リファレンスマニュアル > ライブラリ一覧 > psychライブラリ > Psych::Nodesモジュール

module Psych::Nodes

クラスの継承リスト: Psych::Nodes

要約

Psych が中間データとして利用している AST (Abstract Syntax Tree) に 関するモジュール。

Psych.load によって YAML ドキュメントを Ruby オブジェクトに変換 するときには、一度中間的な AST に変換され、その AST が Ruby の オブジェクトに変換されます。

逆向き、つまり Psych.dump で Ruby のオブジェクトを YAML ドキュメントに変換するときには、中間的な AST に変換してから それを YAML ドキュメントに変換します。

YAML AST の各ノードのクラスはすべて Psych::Nodes の下にあります。 AST を手作業で構築して、visitor を使って AST を YAML ドキュメントや Ruby のオブジェクトに変換したりすることができます。

以下の例ではスカラを1つ持つリストの AST を構築しています。

# 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

stream は AST のルートです。以下のようにして AST を YAML ドキュメントに 変換できます。

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

Ruby のオブジェクトに変換するためには以下のようにします。

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

YAML AST 仕様

正しい YAML AST は Psych::Nodes::Stream ノードが 木のルートでなければなりません。Psych::Nodes::Stream ノードは 1つ以上の Psych::Nodes::Document ノードを子として 持っていなければなりません。

Psych::Nodes::Document は子ノードをちょうど1個持っていなければなりません。 子ノードは以下のいずれかでなければなりません。

Psych::Nodes::SequencePsych::Nodes::Mapping は複数の 子ノードを持つことができます。Psych::Nodes::Mapping の子ノード数は 偶数でなければなりません。

Psych::Nodes::Sequence と Psych::Nodes::Mapping の子ノードとして有効な ものは以下のいずれかです。

Psych::Nodes::ScalarPsych::Nodes::Alias は子ノードを持つ ことができません。

目次