YAML (Module)

In: yaml.rb
yaml/ypath.rb
yaml/yamlnode.rb
yaml/types.rb
yaml/syck.rb
yaml/stream.rb
yaml/store.rb
yaml/rubytypes.rb
yaml/loader.rb
yaml/error.rb
yaml/encoding.rb
yaml/emitter.rb
yaml/dbm.rb
yaml/constants.rb
yaml/basenode.rb
yaml/baseemitter.rb

Constants used throughout the library

Constants

ERROR_NO_HEADER_NODE = "With UseHeader=false, the node Array or Hash must have elements"
  Error messages
ERROR_NEED_HEADER = "With UseHeader=false, the node must be an Array or Hash"
ERROR_BAD_EXPLICIT = "Unsupported explicit transfer: '%s'"
ERROR_MANY_EXPLICIT = "More than one explicit transfer"
ERROR_MANY_IMPLICIT = "More than one implicit request"
ERROR_NO_ANCHOR = "No anchor for alias '%s'"
ERROR_BAD_ANCHOR = "Invalid anchor: %s"
ERROR_MANY_ANCHOR = "More than one anchor"
ERROR_ANCHOR_ALIAS = "Can't define both an anchor and an alias"
ERROR_BAD_ALIAS = "Invalid alias: %s"
ERROR_MANY_ALIAS = "More than one alias"
ERROR_ZERO_INDENT = "Can't use zero as an indentation width"
ERROR_UNSUPPORTED_VERSION = "This release of YAML.rb does not support YAML version %s"
ERROR_UNSUPPORTED_ENCODING = "Attempt to use unsupported encoding: %s"
VERSION = '0.60'
  Constants
SUPPORTED_YAML_VERSIONS = ['1.0']
WORD_CHAR = 'A-Za-z0-9'
  Parser tokens
PRINTABLE_CHAR = '-_A-Za-z0-9!?/()$\'". '
NOT_PLAIN_CHAR = '\x7f\x0-\x1f\x80-\x9f'
ESCAPE_CHAR = '[\\x00-\\x09\\x0b-\\x1f]'
INDICATOR_CHAR = '*&!|\\\\^@%{}[]='
SPACE_INDICATORS = '-#:,?'
RESTRICTED_INDICATORS = '#:,}]'
DNS_COMP_RE = "\\w(?:[-\\w]*\\w)?"
DNS_NAME_RE = "(?:(?:#{DNS_COMP_RE}\\.)+#{DNS_COMP_RE}|#{DNS_COMP_RE})"
ESCAPES = %w{\x00 \x01 \x02 \x03 \x04 \x05 \x06 \a \x08 \t \n \v \f \r \x0e \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 \x1a \e \x1c \x1d \x1e \x1f }
UNESCAPES = { 'a' => "\x07", 'b' => "\x08", 't' => "\x09", 'n' => "\x0a", 'v' => "\x0b", 'f' => "\x0c", 'r' => "\x0d", 'e' => "\x1b", '\\' => '\\', }
DEFAULTS = { :Indent => 2, :UseHeader => false, :UseVersion => false, :Version => '1.0', :SortKeys => false, :AnchorFormat => 'id%03d', :ExplicitTypes => false, :WidthType => 'absolute', :BestWidth => 80, :UseBlock => false, :UseFold => false, :Encoding => :None
  Default settings

Public Class methods

Add a transfer method for a builtin type

[Source]

# File yaml.rb, line 111
        def YAML.add_builtin_type( type_re, &transfer_proc )
            @@loader.add_builtin_type( type_re, &transfer_proc )
        end

Add a transfer method to a domain

[Source]

# File yaml.rb, line 104
        def YAML.add_domain_type( domain, type_re, &transfer_proc )
        @@loader.add_domain_type( domain, type_re, &transfer_proc )
        end

Add a private document type

[Source]

# File yaml.rb, line 125
        def YAML.add_private_type( type_re, &transfer_proc )
            @@loader.add_private_type( type_re, &transfer_proc )
        end

Add a transfer method for a builtin type

[Source]

# File yaml.rb, line 118
        def YAML.add_ruby_type( type, &transfer_proc )
        @@loader.add_ruby_type( type, &transfer_proc )
        end

Detect typing of a string

[Source]

# File yaml.rb, line 132
    def YAML.detect_implicit( val )
        @@loader.detect_implicit( val )
    end

Load a single document from the current stream

[Source]

# File yaml.rb, line 29
        def YAML.dump( obj, io = nil )
        io ||= ""
        io << obj.to_yaml
        io
        end

Dump documents to a stream

[Source]

# File yaml.rb, line 93
        def YAML.dump_stream( *objs )
                d = YAML::Stream.new
        objs.each do |doc|
                        d.add( doc ) 
        end
        d.emit
        end

Load all documents from the current stream

[Source]

# File yaml.rb, line 52
        def YAML.each_document( io, &doc_proc )
                yp = @@parser.new.load_documents( io, &doc_proc )
    end

Parse all documents from the current stream

[Source]

# File yaml.rb, line 66
        def YAML.each_node( io, &doc_proc )
                yp = @@parser.new( :Model => :Generic ).load_documents( io, &doc_proc )
    end

Escape the string, condensing common escapes

[Source]

# File yaml/encoding.rb, line 10
        def YAML.escape( value )
                value.gsub( /\\/, "\\\\\\" ).gsub( /"/, "\\\"" ).gsub( /([\x00-\x1f])/ ) { |x| ESCAPES[ x.unpack("C")[0] ] }
        end

Load a single document from the current stream

[Source]

# File yaml.rb, line 38
        def YAML.load( io )
                yp = @@parser.new.load( io )
        end

Identical to each_document

[Source]

# File yaml.rb, line 59
        def YAML.load_documents( io, &doc_proc )
                YAML.each_document( io, &doc_proc )
    end

Load all documents from the current stream

[Source]

# File yaml.rb, line 80
        def YAML.load_stream( io )
                yp = @@parser.new
                d = nil
                yp.load_documents( io ) { |doc|
                        d = YAML::Stream.new( yp.options ) if not d
                        d.add( doc ) 
                }
                return d
        end

Class method for creating streams

[Source]

# File yaml/stringio.rb, line 55
        def YAML.make_stream( io )
        if String === io
            io = StringIO.new( io )
        elsif not IO === io
            raise YAML::Error, "YAML stream must be an IO or String object."
        end
        if YAML::unicode
            def io.readline
                YAML.utf_to_internal( readline( @ln_sep ), @utf_encoding )
            end
            def io.check_unicode
                @utf_encoding = YAML.sniff_encoding( read( 4 ) )
                @ln_sep = YAML.enc_separator( @utf_encoding )
                seek( -4, IO::SEEK_CUR )
            end
                    def io.utf_encoding
                      @utf_encoding
                    end
            io.check_unicode
        else
            def io.utf_encoding
                :None
            end
        end
        io
        end

Allocate blank object

[Source]

# File yaml.rb, line 163
    def YAML.object_maker( obj_class, val, is_attr = false )
        if Hash === val
            # name = obj_class.name

            # ostr = sprintf( "%c%co:%c%s\000", ::Marshal::MAJOR_VERSION, ::Marshal::MINOR_VERSION,

            #                 name.length + 5, name )

            # if is_attr

            #     ostr[ -1, 1 ] = ::Marshal.dump( val ).sub( /^[^{]+\{/, '' )

            # end

            o = obj_class.allocate
            unless is_attr
                val.each_pair { |k,v|
                    o.instance_variable_set("@#{k}", v)
                }
            end
            o
        else
            raise YAML::Error, "Invalid object explicitly tagged !ruby/Object: " + val.inspect
        end
    end

Parse a single document from the current stream

[Source]

# File yaml.rb, line 45
        def YAML.parse( io )
                yp = @@parser.new( :Model => :Generic ).load( io )
        end

Parse all documents from the current stream

[Source]

# File yaml.rb, line 73
        def YAML.parse_documents( io, &doc_proc )
                YAML.each_node( io, &doc_proc )
    end

Allocate an Emitter if needed

[Source]

# File yaml.rb, line 186
        def YAML.quick_emit( oid, opts = {}, &e )
                old_opt = nil
                if opts[:Emitter].is_a? @@emitter
                        out = opts.delete( :Emitter )
                        old_opt = out.options.dup
                        out.options.update( opts )
                else
                        out = @@emitter.new( opts )
                end
        aidx = out.start_object( oid )
        if aidx
            out.simple( "*#{ aidx }" )
        else
            e.call( out )
        end
                if old_opt.is_a? Hash
                        out.options = old_opt
                end 
                out.end_object
        end

Method to extract colon-separated type and class, returning the type and the constant of the class

[Source]

# File yaml.rb, line 154
    def YAML.read_type_class( type, obj_class )
        scheme, domain, type, tclass = type.split( ':', 4 )
        tclass.split( "::" ).each { |c| obj_class = obj_class.const_get( c ) } if tclass
        return [ type, obj_class ]
    end

Apply a transfer method to a Ruby object

[Source]

# File yaml.rb, line 139
    def YAML.transfer( type_id, obj )
        @@loader.transfer( type_id, obj )
    end

Apply any implicit a node may qualify for

[Source]

# File yaml.rb, line 146
        def YAML.try_implicit( obj )
                YAML.transfer( YAML.detect_implicit( obj ), obj )
        end

Unescape the condenses escapes

[Source]

# File yaml/encoding.rb, line 17
        def YAML.unescape( value )
                value.gsub( /\\(?:([nevfbart\\])|0?x([0-9a-fA-F]{2})|u([0-9a-fA-F]{4}))/ ) { |x| 
                        if $3
                                ["#$3".hex ].pack('U*')
                        elsif $2
                                [$2].pack( "H2" ) 
                        else
                                UNESCAPES[$1] 
                        end
                }
        end

[Validate]