diff options
Diffstat (limited to 'ext/psych/lib/psych/visitors/yaml_tree.rb')
-rw-r--r-- | ext/psych/lib/psych/visitors/yaml_tree.rb | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb index 4adb8d4c66..93ccc5832b 100644 --- a/ext/psych/lib/psych/visitors/yaml_tree.rb +++ b/ext/psych/lib/psych/visitors/yaml_tree.rb @@ -10,11 +10,9 @@ module Psych class YAMLTree < Psych::Visitors::Visitor def initialize options = {}, emitter = Psych::TreeBuilder.new super() - @emitter = emitter - @st = {} - @ss = ScalarScanner.new - - @emitter.start_stream Psych::Nodes::Stream::UTF8 + @emitter = emitter + @st = {} + @ss = ScalarScanner.new @dispatch_cache = Hash.new do |h,klass| method = "visit_#{(klass.name || '').split('::').join('_')}" @@ -27,15 +25,29 @@ module Psych end end + def start encoding = Nodes::Stream::UTF8 + @emitter.start_stream(encoding).tap do + @started = true + end + end + + def finish + @emitter.end_stream.tap do + @finished = true + end + end + def tree - @emitter.end_stream + finish unless finished? end - def << object + def push object + start unless started? @emitter.start_document [], [], false accept object - @emitter.end_document true + @emitter.end_document end + alias :<< :push def accept target # return any aliases we find |