psych 3.0.0.beta2-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/.gitignore +16 -0
 - data/.travis.yml +20 -0
 - data/CHANGELOG.rdoc +576 -0
 - data/Gemfile +3 -0
 - data/Mavenfile +7 -0
 - data/README.md +73 -0
 - data/Rakefile +46 -0
 - data/bin/console +7 -0
 - data/bin/setup +6 -0
 - data/ext/psych/.gitignore +11 -0
 - data/ext/psych/depend +3 -0
 - data/ext/psych/extconf.rb +39 -0
 - data/ext/psych/psych.c +34 -0
 - data/ext/psych/psych.h +17 -0
 - data/ext/psych/psych_emitter.c +554 -0
 - data/ext/psych/psych_emitter.h +8 -0
 - data/ext/psych/psych_parser.c +568 -0
 - data/ext/psych/psych_parser.h +6 -0
 - data/ext/psych/psych_to_ruby.c +39 -0
 - data/ext/psych/psych_to_ruby.h +8 -0
 - data/ext/psych/psych_yaml_tree.c +24 -0
 - data/ext/psych/psych_yaml_tree.h +8 -0
 - data/ext/psych/yaml/LICENSE +19 -0
 - data/ext/psych/yaml/api.c +1392 -0
 - data/ext/psych/yaml/config.h +10 -0
 - data/ext/psych/yaml/dumper.c +394 -0
 - data/ext/psych/yaml/emitter.c +2329 -0
 - data/ext/psych/yaml/loader.c +444 -0
 - data/ext/psych/yaml/parser.c +1374 -0
 - data/ext/psych/yaml/reader.c +469 -0
 - data/ext/psych/yaml/scanner.c +3576 -0
 - data/ext/psych/yaml/writer.c +141 -0
 - data/ext/psych/yaml/yaml.h +1971 -0
 - data/ext/psych/yaml/yaml_private.h +662 -0
 - data/lib/psych.rb +511 -0
 - data/lib/psych/class_loader.rb +102 -0
 - data/lib/psych/coder.rb +95 -0
 - data/lib/psych/core_ext.rb +19 -0
 - data/lib/psych/exception.rb +14 -0
 - data/lib/psych/handler.rb +250 -0
 - data/lib/psych/handlers/document_stream.rb +23 -0
 - data/lib/psych/handlers/recorder.rb +40 -0
 - data/lib/psych/json/ruby_events.rb +20 -0
 - data/lib/psych/json/stream.rb +17 -0
 - data/lib/psych/json/tree_builder.rb +13 -0
 - data/lib/psych/json/yaml_events.rb +30 -0
 - data/lib/psych/nodes.rb +78 -0
 - data/lib/psych/nodes/alias.rb +19 -0
 - data/lib/psych/nodes/document.rb +61 -0
 - data/lib/psych/nodes/mapping.rb +57 -0
 - data/lib/psych/nodes/node.rb +56 -0
 - data/lib/psych/nodes/scalar.rb +68 -0
 - data/lib/psych/nodes/sequence.rb +82 -0
 - data/lib/psych/nodes/stream.rb +38 -0
 - data/lib/psych/omap.rb +5 -0
 - data/lib/psych/parser.rb +52 -0
 - data/lib/psych/scalar_scanner.rb +149 -0
 - data/lib/psych/set.rb +5 -0
 - data/lib/psych/stream.rb +38 -0
 - data/lib/psych/streaming.rb +28 -0
 - data/lib/psych/syntax_error.rb +22 -0
 - data/lib/psych/tree_builder.rb +97 -0
 - data/lib/psych/versions.rb +9 -0
 - data/lib/psych/visitors.rb +7 -0
 - data/lib/psych/visitors/depth_first.rb +27 -0
 - data/lib/psych/visitors/emitter.rb +52 -0
 - data/lib/psych/visitors/json_tree.rb +25 -0
 - data/lib/psych/visitors/to_ruby.rb +401 -0
 - data/lib/psych/visitors/visitor.rb +20 -0
 - data/lib/psych/visitors/yaml_tree.rb +551 -0
 - data/lib/psych/y.rb +10 -0
 - data/psych.gemspec +64 -0
 - metadata +175 -0
 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'psych/tree_builder'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Handlers
         
     | 
| 
      
 6 
     | 
    
         
            +
                class DocumentStream < Psych::TreeBuilder # :nodoc:
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def initialize &block
         
     | 
| 
      
 8 
     | 
    
         
            +
                    super
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @block = block
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def start_document version, tag_directives, implicit
         
     | 
| 
      
 13 
     | 
    
         
            +
                    n = Nodes::Document.new version, tag_directives, implicit
         
     | 
| 
      
 14 
     | 
    
         
            +
                    push n
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def end_document implicit_end = !streaming?
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @last.implicit_end = implicit_end
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @block.call pop
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'psych/handler'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Handlers
         
     | 
| 
      
 6 
     | 
    
         
            +
                ###
         
     | 
| 
      
 7 
     | 
    
         
            +
                # This handler will capture an event and record the event.  Recorder events
         
     | 
| 
      
 8 
     | 
    
         
            +
                # are available vial Psych::Handlers::Recorder#events.
         
     | 
| 
      
 9 
     | 
    
         
            +
                #
         
     | 
| 
      
 10 
     | 
    
         
            +
                # For example:
         
     | 
| 
      
 11 
     | 
    
         
            +
                #
         
     | 
| 
      
 12 
     | 
    
         
            +
                #   recorder = Psych::Handlers::Recorder.new
         
     | 
| 
      
 13 
     | 
    
         
            +
                #   parser = Psych::Parser.new recorder
         
     | 
| 
      
 14 
     | 
    
         
            +
                #   parser.parse '--- foo'
         
     | 
| 
      
 15 
     | 
    
         
            +
                #
         
     | 
| 
      
 16 
     | 
    
         
            +
                #   recorder.events # => [list of events]
         
     | 
| 
      
 17 
     | 
    
         
            +
                #
         
     | 
| 
      
 18 
     | 
    
         
            +
                #   # Replay the events
         
     | 
| 
      
 19 
     | 
    
         
            +
                #
         
     | 
| 
      
 20 
     | 
    
         
            +
                #   emitter = Psych::Emitter.new $stdout
         
     | 
| 
      
 21 
     | 
    
         
            +
                #   recorder.events.each do |m, args|
         
     | 
| 
      
 22 
     | 
    
         
            +
                #     emitter.send m, *args
         
     | 
| 
      
 23 
     | 
    
         
            +
                #   end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                class Recorder < Psych::Handler
         
     | 
| 
      
 26 
     | 
    
         
            +
                  attr_reader :events
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def initialize
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @events = []
         
     | 
| 
      
 30 
     | 
    
         
            +
                    super
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  EVENTS.each do |event|
         
     | 
| 
      
 34 
     | 
    
         
            +
                    define_method event do |*args|
         
     | 
| 
      
 35 
     | 
    
         
            +
                      @events << [event, args]
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 3 
     | 
    
         
            +
              module JSON
         
     | 
| 
      
 4 
     | 
    
         
            +
                module RubyEvents # :nodoc:
         
     | 
| 
      
 5 
     | 
    
         
            +
                  def visit_Time o
         
     | 
| 
      
 6 
     | 
    
         
            +
                    formatted = format_time o
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @emitter.scalar formatted, nil, nil, false, true, Nodes::Scalar::DOUBLE_QUOTED
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def visit_DateTime o
         
     | 
| 
      
 11 
     | 
    
         
            +
                    visit_Time o.to_time
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def visit_String o
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @emitter.scalar o.to_s, nil, nil, false, true, Nodes::Scalar::DOUBLE_QUOTED
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  alias :visit_Symbol :visit_String
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'psych/json/ruby_events'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'psych/json/yaml_events'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 6 
     | 
    
         
            +
              module JSON
         
     | 
| 
      
 7 
     | 
    
         
            +
                class Stream < Psych::Visitors::JSONTree
         
     | 
| 
      
 8 
     | 
    
         
            +
                  include Psych::JSON::RubyEvents
         
     | 
| 
      
 9 
     | 
    
         
            +
                  include Psych::Streaming
         
     | 
| 
      
 10 
     | 
    
         
            +
                  extend Psych::Streaming::ClassMethods
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  class Emitter < Psych::Stream::Emitter # :nodoc:
         
     | 
| 
      
 13 
     | 
    
         
            +
                    include Psych::JSON::YAMLEvents
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'psych/json/yaml_events'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 5 
     | 
    
         
            +
              module JSON
         
     | 
| 
      
 6 
     | 
    
         
            +
                ###
         
     | 
| 
      
 7 
     | 
    
         
            +
                # Psych::JSON::TreeBuilder is an event based AST builder.  Events are sent
         
     | 
| 
      
 8 
     | 
    
         
            +
                # to an instance of Psych::JSON::TreeBuilder and a JSON AST is constructed.
         
     | 
| 
      
 9 
     | 
    
         
            +
                class TreeBuilder < Psych::TreeBuilder
         
     | 
| 
      
 10 
     | 
    
         
            +
                  include Psych::JSON::YAMLEvents
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 3 
     | 
    
         
            +
              module JSON
         
     | 
| 
      
 4 
     | 
    
         
            +
                module YAMLEvents # :nodoc:
         
     | 
| 
      
 5 
     | 
    
         
            +
                  def start_document version, tag_directives, implicit
         
     | 
| 
      
 6 
     | 
    
         
            +
                    super(version, tag_directives, !streaming?)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  def end_document implicit_end = !streaming?
         
     | 
| 
      
 10 
     | 
    
         
            +
                    super(implicit_end)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def start_mapping anchor, tag, implicit, style
         
     | 
| 
      
 14 
     | 
    
         
            +
                    super(anchor, nil, true, Nodes::Mapping::FLOW)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def start_sequence anchor, tag, implicit, style
         
     | 
| 
      
 18 
     | 
    
         
            +
                    super(anchor, nil, true, Nodes::Sequence::FLOW)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def scalar value, anchor, tag, plain, quoted, style
         
     | 
| 
      
 22 
     | 
    
         
            +
                    if "tag:yaml.org,2002:null" == tag
         
     | 
| 
      
 23 
     | 
    
         
            +
                      super('null', nil, nil, true, false, Nodes::Scalar::PLAIN)
         
     | 
| 
      
 24 
     | 
    
         
            +
                    else
         
     | 
| 
      
 25 
     | 
    
         
            +
                      super
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/psych/nodes.rb
    ADDED
    
    | 
         @@ -0,0 +1,78 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'psych/nodes/node'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'psych/nodes/stream'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'psych/nodes/document'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'psych/nodes/sequence'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'psych/nodes/scalar'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'psych/nodes/mapping'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'psych/nodes/alias'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 11 
     | 
    
         
            +
              ###
         
     | 
| 
      
 12 
     | 
    
         
            +
              # = Overview
         
     | 
| 
      
 13 
     | 
    
         
            +
              #
         
     | 
| 
      
 14 
     | 
    
         
            +
              # When using Psych.load to deserialize a YAML document, the document is
         
     | 
| 
      
 15 
     | 
    
         
            +
              # translated to an intermediary AST.  That intermediary AST is then
         
     | 
| 
      
 16 
     | 
    
         
            +
              # translated in to a Ruby object graph.
         
     | 
| 
      
 17 
     | 
    
         
            +
              #
         
     | 
| 
      
 18 
     | 
    
         
            +
              # In the opposite direction, when using Psych.dump, the Ruby object graph is
         
     | 
| 
      
 19 
     | 
    
         
            +
              # translated to an intermediary AST which is then converted to a YAML
         
     | 
| 
      
 20 
     | 
    
         
            +
              # document.
         
     | 
| 
      
 21 
     | 
    
         
            +
              #
         
     | 
| 
      
 22 
     | 
    
         
            +
              # Psych::Nodes contains all of the classes that make up the nodes of a YAML
         
     | 
| 
      
 23 
     | 
    
         
            +
              # AST.  You can manually build an AST and use one of the visitors (see
         
     | 
| 
      
 24 
     | 
    
         
            +
              # Psych::Visitors) to convert that AST to either a YAML document or to a
         
     | 
| 
      
 25 
     | 
    
         
            +
              # Ruby object graph.
         
     | 
| 
      
 26 
     | 
    
         
            +
              #
         
     | 
| 
      
 27 
     | 
    
         
            +
              # Here is an example of building an AST that represents a list with one
         
     | 
| 
      
 28 
     | 
    
         
            +
              # scalar:
         
     | 
| 
      
 29 
     | 
    
         
            +
              #
         
     | 
| 
      
 30 
     | 
    
         
            +
              #   # Create our nodes
         
     | 
| 
      
 31 
     | 
    
         
            +
              #   stream = Psych::Nodes::Stream.new
         
     | 
| 
      
 32 
     | 
    
         
            +
              #   doc    = Psych::Nodes::Document.new
         
     | 
| 
      
 33 
     | 
    
         
            +
              #   seq    = Psych::Nodes::Sequence.new
         
     | 
| 
      
 34 
     | 
    
         
            +
              #   scalar = Psych::Nodes::Scalar.new('foo')
         
     | 
| 
      
 35 
     | 
    
         
            +
              #
         
     | 
| 
      
 36 
     | 
    
         
            +
              #   # Build up our tree
         
     | 
| 
      
 37 
     | 
    
         
            +
              #   stream.children << doc
         
     | 
| 
      
 38 
     | 
    
         
            +
              #   doc.children    << seq
         
     | 
| 
      
 39 
     | 
    
         
            +
              #   seq.children    << scalar
         
     | 
| 
      
 40 
     | 
    
         
            +
              #
         
     | 
| 
      
 41 
     | 
    
         
            +
              # The stream is the root of the tree.  We can then convert the tree to YAML:
         
     | 
| 
      
 42 
     | 
    
         
            +
              #
         
     | 
| 
      
 43 
     | 
    
         
            +
              #   stream.to_yaml => "---\n- foo\n"
         
     | 
| 
      
 44 
     | 
    
         
            +
              #
         
     | 
| 
      
 45 
     | 
    
         
            +
              # Or convert it to Ruby:
         
     | 
| 
      
 46 
     | 
    
         
            +
              #
         
     | 
| 
      
 47 
     | 
    
         
            +
              #   stream.to_ruby => [["foo"]]
         
     | 
| 
      
 48 
     | 
    
         
            +
              #
         
     | 
| 
      
 49 
     | 
    
         
            +
              # == YAML AST Requirements
         
     | 
| 
      
 50 
     | 
    
         
            +
              #
         
     | 
| 
      
 51 
     | 
    
         
            +
              # A valid YAML AST *must* have one Psych::Nodes::Stream at the root.  A
         
     | 
| 
      
 52 
     | 
    
         
            +
              # Psych::Nodes::Stream node must have 1 or more Psych::Nodes::Document nodes
         
     | 
| 
      
 53 
     | 
    
         
            +
              # as children.
         
     | 
| 
      
 54 
     | 
    
         
            +
              #
         
     | 
| 
      
 55 
     | 
    
         
            +
              # Psych::Nodes::Document nodes must have one and *only* one child.  That child
         
     | 
| 
      
 56 
     | 
    
         
            +
              # may be one of:
         
     | 
| 
      
 57 
     | 
    
         
            +
              #
         
     | 
| 
      
 58 
     | 
    
         
            +
              # * Psych::Nodes::Sequence
         
     | 
| 
      
 59 
     | 
    
         
            +
              # * Psych::Nodes::Mapping
         
     | 
| 
      
 60 
     | 
    
         
            +
              # * Psych::Nodes::Scalar
         
     | 
| 
      
 61 
     | 
    
         
            +
              #
         
     | 
| 
      
 62 
     | 
    
         
            +
              # Psych::Nodes::Sequence and Psych::Nodes::Mapping nodes may have many
         
     | 
| 
      
 63 
     | 
    
         
            +
              # children, but Psych::Nodes::Mapping nodes should have an even number of
         
     | 
| 
      
 64 
     | 
    
         
            +
              # children.
         
     | 
| 
      
 65 
     | 
    
         
            +
              #
         
     | 
| 
      
 66 
     | 
    
         
            +
              # All of these are valid children for Psych::Nodes::Sequence and
         
     | 
| 
      
 67 
     | 
    
         
            +
              # Psych::Nodes::Mapping nodes:
         
     | 
| 
      
 68 
     | 
    
         
            +
              #
         
     | 
| 
      
 69 
     | 
    
         
            +
              # * Psych::Nodes::Sequence
         
     | 
| 
      
 70 
     | 
    
         
            +
              # * Psych::Nodes::Mapping
         
     | 
| 
      
 71 
     | 
    
         
            +
              # * Psych::Nodes::Scalar
         
     | 
| 
      
 72 
     | 
    
         
            +
              # * Psych::Nodes::Alias
         
     | 
| 
      
 73 
     | 
    
         
            +
              #
         
     | 
| 
      
 74 
     | 
    
         
            +
              # Psych::Nodes::Scalar and Psych::Nodes::Alias are both terminal nodes and
         
     | 
| 
      
 75 
     | 
    
         
            +
              # should not have any children.
         
     | 
| 
      
 76 
     | 
    
         
            +
              module Nodes
         
     | 
| 
      
 77 
     | 
    
         
            +
              end
         
     | 
| 
      
 78 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 3 
     | 
    
         
            +
              module Nodes
         
     | 
| 
      
 4 
     | 
    
         
            +
                ###
         
     | 
| 
      
 5 
     | 
    
         
            +
                # This class represents a {YAML Alias}[http://yaml.org/spec/1.1/#alias].
         
     | 
| 
      
 6 
     | 
    
         
            +
                # It points to an +anchor+.
         
     | 
| 
      
 7 
     | 
    
         
            +
                #
         
     | 
| 
      
 8 
     | 
    
         
            +
                # A Psych::Nodes::Alias is a terminal node and may have no children.
         
     | 
| 
      
 9 
     | 
    
         
            +
                class Alias < Psych::Nodes::Node
         
     | 
| 
      
 10 
     | 
    
         
            +
                  # The anchor this alias links to
         
     | 
| 
      
 11 
     | 
    
         
            +
                  attr_accessor :anchor
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  # Create a new Alias that points to an +anchor+
         
     | 
| 
      
 14 
     | 
    
         
            +
                  def initialize anchor
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @anchor = anchor
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,61 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 3 
     | 
    
         
            +
              module Nodes
         
     | 
| 
      
 4 
     | 
    
         
            +
                ###
         
     | 
| 
      
 5 
     | 
    
         
            +
                # This represents a YAML Document.  This node must be a child of
         
     | 
| 
      
 6 
     | 
    
         
            +
                # Psych::Nodes::Stream.  A Psych::Nodes::Document must have one child,
         
     | 
| 
      
 7 
     | 
    
         
            +
                # and that child may be one of the following:
         
     | 
| 
      
 8 
     | 
    
         
            +
                #
         
     | 
| 
      
 9 
     | 
    
         
            +
                # * Psych::Nodes::Sequence
         
     | 
| 
      
 10 
     | 
    
         
            +
                # * Psych::Nodes::Mapping
         
     | 
| 
      
 11 
     | 
    
         
            +
                # * Psych::Nodes::Scalar
         
     | 
| 
      
 12 
     | 
    
         
            +
                class Document < Psych::Nodes::Node
         
     | 
| 
      
 13 
     | 
    
         
            +
                  # The version of the YAML document
         
     | 
| 
      
 14 
     | 
    
         
            +
                  attr_accessor :version
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  # A list of tag directives for this document
         
     | 
| 
      
 17 
     | 
    
         
            +
                  attr_accessor :tag_directives
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  # Was this document implicitly created?
         
     | 
| 
      
 20 
     | 
    
         
            +
                  attr_accessor :implicit
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  # Is the end of the document implicit?
         
     | 
| 
      
 23 
     | 
    
         
            +
                  attr_accessor :implicit_end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  ###
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # Create a new Psych::Nodes::Document object.
         
     | 
| 
      
 27 
     | 
    
         
            +
                  #
         
     | 
| 
      
 28 
     | 
    
         
            +
                  # +version+ is a list indicating the YAML version.
         
     | 
| 
      
 29 
     | 
    
         
            +
                  # +tags_directives+ is a list of tag directive declarations
         
     | 
| 
      
 30 
     | 
    
         
            +
                  # +implicit+ is a flag indicating whether the document will be implicitly
         
     | 
| 
      
 31 
     | 
    
         
            +
                  # started.
         
     | 
| 
      
 32 
     | 
    
         
            +
                  #
         
     | 
| 
      
 33 
     | 
    
         
            +
                  # == Example:
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # This creates a YAML document object that represents a YAML 1.1 document
         
     | 
| 
      
 35 
     | 
    
         
            +
                  # with one tag directive, and has an implicit start:
         
     | 
| 
      
 36 
     | 
    
         
            +
                  #
         
     | 
| 
      
 37 
     | 
    
         
            +
                  #   Psych::Nodes::Document.new(
         
     | 
| 
      
 38 
     | 
    
         
            +
                  #     [1,1],
         
     | 
| 
      
 39 
     | 
    
         
            +
                  #     [["!", "tag:tenderlovemaking.com,2009:"]],
         
     | 
| 
      
 40 
     | 
    
         
            +
                  #     true
         
     | 
| 
      
 41 
     | 
    
         
            +
                  #   )
         
     | 
| 
      
 42 
     | 
    
         
            +
                  #
         
     | 
| 
      
 43 
     | 
    
         
            +
                  # == See Also
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # See also Psych::Handler#start_document
         
     | 
| 
      
 45 
     | 
    
         
            +
                  def initialize version = [], tag_directives = [], implicit = false
         
     | 
| 
      
 46 
     | 
    
         
            +
                    super()
         
     | 
| 
      
 47 
     | 
    
         
            +
                    @version        = version
         
     | 
| 
      
 48 
     | 
    
         
            +
                    @tag_directives = tag_directives
         
     | 
| 
      
 49 
     | 
    
         
            +
                    @implicit       = implicit
         
     | 
| 
      
 50 
     | 
    
         
            +
                    @implicit_end   = true
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  ###
         
     | 
| 
      
 54 
     | 
    
         
            +
                  # Returns the root node.  A Document may only have one root node:
         
     | 
| 
      
 55 
     | 
    
         
            +
                  # http://yaml.org/spec/1.1/#id898031
         
     | 
| 
      
 56 
     | 
    
         
            +
                  def root
         
     | 
| 
      
 57 
     | 
    
         
            +
                    children.first
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,57 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 3 
     | 
    
         
            +
              module Nodes
         
     | 
| 
      
 4 
     | 
    
         
            +
                ###
         
     | 
| 
      
 5 
     | 
    
         
            +
                # This class represents a {YAML Mapping}[http://yaml.org/spec/1.1/#mapping].
         
     | 
| 
      
 6 
     | 
    
         
            +
                #
         
     | 
| 
      
 7 
     | 
    
         
            +
                # A Psych::Nodes::Mapping node may have 0 or more children, but must have
         
     | 
| 
      
 8 
     | 
    
         
            +
                # an even number of children.  Here are the valid children a
         
     | 
| 
      
 9 
     | 
    
         
            +
                # Psych::Nodes::Mapping node may have:
         
     | 
| 
      
 10 
     | 
    
         
            +
                #
         
     | 
| 
      
 11 
     | 
    
         
            +
                # * Psych::Nodes::Sequence
         
     | 
| 
      
 12 
     | 
    
         
            +
                # * Psych::Nodes::Mapping
         
     | 
| 
      
 13 
     | 
    
         
            +
                # * Psych::Nodes::Scalar
         
     | 
| 
      
 14 
     | 
    
         
            +
                # * Psych::Nodes::Alias
         
     | 
| 
      
 15 
     | 
    
         
            +
                class Mapping < Psych::Nodes::Node
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # Any Map Style
         
     | 
| 
      
 17 
     | 
    
         
            +
                  ANY   = 0
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  # Block Map Style
         
     | 
| 
      
 20 
     | 
    
         
            +
                  BLOCK = 1
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  # Flow Map Style
         
     | 
| 
      
 23 
     | 
    
         
            +
                  FLOW  = 2
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  # The optional anchor for this mapping
         
     | 
| 
      
 26 
     | 
    
         
            +
                  attr_accessor :anchor
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  # The optional tag for this mapping
         
     | 
| 
      
 29 
     | 
    
         
            +
                  attr_accessor :tag
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  # Is this an implicit mapping?
         
     | 
| 
      
 32 
     | 
    
         
            +
                  attr_accessor :implicit
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  # The style of this mapping
         
     | 
| 
      
 35 
     | 
    
         
            +
                  attr_accessor :style
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  ###
         
     | 
| 
      
 38 
     | 
    
         
            +
                  # Create a new Psych::Nodes::Mapping object.
         
     | 
| 
      
 39 
     | 
    
         
            +
                  #
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # +anchor+ is the anchor associated with the map or +nil+.
         
     | 
| 
      
 41 
     | 
    
         
            +
                  # +tag+ is the tag associated with the map or +nil+.
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # +implicit+ is a boolean indicating whether or not the map was implicitly
         
     | 
| 
      
 43 
     | 
    
         
            +
                  # started.
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # +style+ is an integer indicating the mapping style.
         
     | 
| 
      
 45 
     | 
    
         
            +
                  #
         
     | 
| 
      
 46 
     | 
    
         
            +
                  # == See Also
         
     | 
| 
      
 47 
     | 
    
         
            +
                  # See also Psych::Handler#start_mapping
         
     | 
| 
      
 48 
     | 
    
         
            +
                  def initialize anchor = nil, tag = nil, implicit = true, style = BLOCK
         
     | 
| 
      
 49 
     | 
    
         
            +
                    super()
         
     | 
| 
      
 50 
     | 
    
         
            +
                    @anchor   = anchor
         
     | 
| 
      
 51 
     | 
    
         
            +
                    @tag      = tag
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @implicit = implicit
         
     | 
| 
      
 53 
     | 
    
         
            +
                    @style    = style
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,56 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'stringio'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'psych/class_loader'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'psych/scalar_scanner'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 7 
     | 
    
         
            +
              module Nodes
         
     | 
| 
      
 8 
     | 
    
         
            +
                ###
         
     | 
| 
      
 9 
     | 
    
         
            +
                # The base class for any Node in a YAML parse tree.  This class should
         
     | 
| 
      
 10 
     | 
    
         
            +
                # never be instantiated.
         
     | 
| 
      
 11 
     | 
    
         
            +
                class Node
         
     | 
| 
      
 12 
     | 
    
         
            +
                  include Enumerable
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  # The children of this node
         
     | 
| 
      
 15 
     | 
    
         
            +
                  attr_reader :children
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  # An associated tag
         
     | 
| 
      
 18 
     | 
    
         
            +
                  attr_reader :tag
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  # Create a new Psych::Nodes::Node
         
     | 
| 
      
 21 
     | 
    
         
            +
                  def initialize
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @children = []
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  ###
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # Iterate over each node in the tree. Yields each node to +block+ depth
         
     | 
| 
      
 27 
     | 
    
         
            +
                  # first.
         
     | 
| 
      
 28 
     | 
    
         
            +
                  def each &block
         
     | 
| 
      
 29 
     | 
    
         
            +
                    return enum_for :each unless block_given?
         
     | 
| 
      
 30 
     | 
    
         
            +
                    Visitors::DepthFirst.new(block).accept self
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  ###
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # Convert this node to Ruby.
         
     | 
| 
      
 35 
     | 
    
         
            +
                  #
         
     | 
| 
      
 36 
     | 
    
         
            +
                  # See also Psych::Visitors::ToRuby
         
     | 
| 
      
 37 
     | 
    
         
            +
                  def to_ruby
         
     | 
| 
      
 38 
     | 
    
         
            +
                    Visitors::ToRuby.create.accept(self)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  alias :transform :to_ruby
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  ###
         
     | 
| 
      
 43 
     | 
    
         
            +
                  # Convert this node to YAML.
         
     | 
| 
      
 44 
     | 
    
         
            +
                  #
         
     | 
| 
      
 45 
     | 
    
         
            +
                  # See also Psych::Visitors::Emitter
         
     | 
| 
      
 46 
     | 
    
         
            +
                  def yaml io = nil, options = {}
         
     | 
| 
      
 47 
     | 
    
         
            +
                    real_io = io || StringIO.new(''.encode('utf-8'))
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    Visitors::Emitter.new(real_io, options).accept self
         
     | 
| 
      
 50 
     | 
    
         
            +
                    return real_io.string unless io
         
     | 
| 
      
 51 
     | 
    
         
            +
                    io
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                  alias :to_yaml :yaml
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
            module Psych
         
     | 
| 
      
 3 
     | 
    
         
            +
              module Nodes
         
     | 
| 
      
 4 
     | 
    
         
            +
                ###
         
     | 
| 
      
 5 
     | 
    
         
            +
                # This class represents a {YAML Scalar}[http://yaml.org/spec/1.1/#id858081].
         
     | 
| 
      
 6 
     | 
    
         
            +
                #
         
     | 
| 
      
 7 
     | 
    
         
            +
                # This node type is a terminal node and should not have any children.
         
     | 
| 
      
 8 
     | 
    
         
            +
                class Scalar < Psych::Nodes::Node
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # Any style scalar, the emitter chooses
         
     | 
| 
      
 10 
     | 
    
         
            +
                  ANY           = 0
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  # Plain scalar style
         
     | 
| 
      
 13 
     | 
    
         
            +
                  PLAIN         = 1
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  # Single quoted style
         
     | 
| 
      
 16 
     | 
    
         
            +
                  SINGLE_QUOTED = 2
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  # Double quoted style
         
     | 
| 
      
 19 
     | 
    
         
            +
                  DOUBLE_QUOTED = 3
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  # Literal style
         
     | 
| 
      
 22 
     | 
    
         
            +
                  LITERAL       = 4
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  # Folded style
         
     | 
| 
      
 25 
     | 
    
         
            +
                  FOLDED        = 5
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  # The scalar value
         
     | 
| 
      
 28 
     | 
    
         
            +
                  attr_accessor :value
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  # The anchor value (if there is one)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  attr_accessor :anchor
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  # The tag value (if there is one)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  attr_accessor :tag
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  # Is this a plain scalar?
         
     | 
| 
      
 37 
     | 
    
         
            +
                  attr_accessor :plain
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  # Is this scalar quoted?
         
     | 
| 
      
 40 
     | 
    
         
            +
                  attr_accessor :quoted
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  # The style of this scalar
         
     | 
| 
      
 43 
     | 
    
         
            +
                  attr_accessor :style
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  ###
         
     | 
| 
      
 46 
     | 
    
         
            +
                  # Create a new Psych::Nodes::Scalar object.
         
     | 
| 
      
 47 
     | 
    
         
            +
                  #
         
     | 
| 
      
 48 
     | 
    
         
            +
                  # +value+ is the string value of the scalar
         
     | 
| 
      
 49 
     | 
    
         
            +
                  # +anchor+ is an associated anchor or nil
         
     | 
| 
      
 50 
     | 
    
         
            +
                  # +tag+ is an associated tag or nil
         
     | 
| 
      
 51 
     | 
    
         
            +
                  # +plain+ is a boolean value
         
     | 
| 
      
 52 
     | 
    
         
            +
                  # +quoted+ is a boolean value
         
     | 
| 
      
 53 
     | 
    
         
            +
                  # +style+ is an integer idicating the string style
         
     | 
| 
      
 54 
     | 
    
         
            +
                  #
         
     | 
| 
      
 55 
     | 
    
         
            +
                  # == See Also
         
     | 
| 
      
 56 
     | 
    
         
            +
                  #
         
     | 
| 
      
 57 
     | 
    
         
            +
                  # See also Psych::Handler#scalar
         
     | 
| 
      
 58 
     | 
    
         
            +
                  def initialize value, anchor = nil, tag = nil, plain = true, quoted = false, style = ANY
         
     | 
| 
      
 59 
     | 
    
         
            +
                    @value  = value
         
     | 
| 
      
 60 
     | 
    
         
            +
                    @anchor = anchor
         
     | 
| 
      
 61 
     | 
    
         
            +
                    @tag    = tag
         
     | 
| 
      
 62 
     | 
    
         
            +
                    @plain  = plain
         
     | 
| 
      
 63 
     | 
    
         
            +
                    @quoted = quoted
         
     | 
| 
      
 64 
     | 
    
         
            +
                    @style  = style
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     |