Constants used throughout the library
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 |
Add a transfer method for a builtin type
# 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
# 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
# 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
# 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
# File yaml.rb, line 132 def YAML.detect_implicit( val ) @@loader.detect_implicit( val ) end
Load a single document from the current stream
# File yaml.rb, line 29 def YAML.dump( obj, io = nil ) io ||= "" io << obj.to_yaml io end
Dump documents to a stream
# 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
# 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
# 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
# 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
# File yaml.rb, line 38 def YAML.load( io ) yp = @@parser.new.load( io ) end
Identical to each_document
# 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
# 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
# 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
# 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
# File yaml.rb, line 45 def YAML.parse( io ) yp = @@parser.new( :Model => :Generic ).load( io ) end
Parse all documents from the current stream
# File yaml.rb, line 73 def YAML.parse_documents( io, &doc_proc ) YAML.each_node( io, &doc_proc ) end
Allocate an Emitter if needed
# 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
# 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
# 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
# File yaml.rb, line 146 def YAML.try_implicit( obj ) YAML.transfer( YAML.detect_implicit( obj ), obj ) end