Class: Psych::TreeBuilder
Overview
This class works in conjunction with Psych::Parser to build an in-memory parse tree that represents a YAML document.
Example
parser = Psych::Parser.new Psych::TreeBuilder.new
parser.parse('--- foo')
tree = parser.handler.root
See Psych::Handler for documentation on the event methods used in this class.
Direct Known Subclasses
Constant Summary
Constants inherited from Handler
Handler::EVENTS, Handler::OPTIONS
Instance Attribute Summary collapse
-
#root ⇒ Object
readonly
Returns the root node for the built tree.
Instance Method Summary collapse
- #alias(anchor) ⇒ Object
-
#end_document(implicit_end = !streaming?) ⇒ Object
Handles end_document events with
version
,tag_directives
, andimplicit
styling. - #end_stream ⇒ Object
- #event_location(start_line, start_column, end_line, end_column) ⇒ Object
-
#initialize ⇒ TreeBuilder
constructor
Create a new TreeBuilder instance.
- #scalar(value, anchor, tag, plain, quoted, style) ⇒ Object
-
#start_document(version, tag_directives, implicit) ⇒ Object
Handles start_document events with
version
,tag_directives
, andimplicit
styling. - #start_stream(encoding) ⇒ Object
Methods inherited from Handler
#empty, #end_mapping, #end_sequence, #start_mapping, #start_sequence, #streaming?
Constructor Details
#initialize ⇒ TreeBuilder
Create a new TreeBuilder instance
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/psych/tree_builder.rb', line 22 def initialize @stack = [] @last = nil @root = nil @start_line = nil @start_column = nil @end_line = nil @end_column = nil end |
Instance Attribute Details
Instance Method Details
#alias(anchor) ⇒ Object
103 104 105 106 107 108 |
# File 'lib/psych/tree_builder.rb', line 103 def alias anchor a = Nodes::Alias.new(anchor) set_location(a) @last.children << a a end |
#end_document(implicit_end = !streaming?) ⇒ Object
Handles end_document events with version
, tag_directives
, and implicit
styling.
See Psych::Handler#start_document
77 78 79 80 81 82 |
# File 'lib/psych/tree_builder.rb', line 77 def end_document implicit_end = !streaming? @last.implicit_end = implicit_end n = pop set_end_location(n) n end |
#end_stream ⇒ Object
90 91 92 93 94 |
# File 'lib/psych/tree_builder.rb', line 90 def end_stream n = pop set_end_location(n) n end |
#event_location(start_line, start_column, end_line, end_column) ⇒ Object
33 34 35 36 37 38 |
# File 'lib/psych/tree_builder.rb', line 33 def event_location(start_line, start_column, end_line, end_column) @start_line = start_line @start_column = start_column @end_line = end_line @end_column = end_column end |
#scalar(value, anchor, tag, plain, quoted, style) ⇒ Object
96 97 98 99 100 101 |
# File 'lib/psych/tree_builder.rb', line 96 def scalar value, anchor, tag, plain, quoted, style s = Nodes::Scalar.new(value,anchor,tag,plain,quoted,style) set_location(s) @last.children << s s end |
#start_document(version, tag_directives, implicit) ⇒ Object
Handles start_document events with version
, tag_directives
, and implicit
styling.
See Psych::Handler#start_document
65 66 67 68 69 70 |
# File 'lib/psych/tree_builder.rb', line 65 def start_document version, tag_directives, implicit n = Nodes::Document.new version, tag_directives, implicit set_start_location(n) @last.children << n push n end |