module

YAML

v1_8_6_287 - Show latest stable

YAML

YAML(tm) (rhymes with ‘camel’) is a straightforward machine parsable data serialization format designed for human readability and interaction with scripting languages such as Perl and Python. YAML is optimized for data serialization, formatted dumping, configuration files, log files, Internet messaging and filtering. This specification describes the YAML information model and serialization format. Together with the Unicode standard for characters, it provides all the information necessary to understand <a href="/ruby/YAML">YAML</a> Version 1.0 and construct computer programs to process it.

See http://yaml.org/ for more information. For a quick tutorial, please visit <a href="/ruby/YAML">YAML</a> In Five Minutes (http://yaml.kwiki.org/?YamlInFiveMinutes).

About This Library

The <a href="/ruby/YAML">YAML</a> 1.0 specification outlines four stages of YAML loading and dumping. This library honors all four of those stages, although data is really only available to you in three stages.

The four stages are: native, representation, serialization, and presentation.

The native stage refers to data which has been loaded completely into Ruby’s own types. (See +YAML::load+.)

The representation stage means data which has been composed into +YAML::BaseNode+ objects. In this stage, the document is available as a tree of node objects. You can perform YPath queries and transformations at this level. (See +YAML::parse+.)

The serialization stage happens inside the parser. The <a href="/ruby/YAML">YAML</a> parser used in Ruby is called Syck. Serialized nodes are available in the extension as SyckNode structs.

The presentation stage is the YAML document itself. This is accessible to you as a string. (See +YAML::dump+.)

For more information about the various information models, see Chapter 3 of the YAML 1.0 Specification (http://yaml.org/spec/#id2491269).

The <a href="/ruby/YAML">YAML</a> module provides quick access to the most common loading (YAML::load) and dumping (YAML::dump) tasks. This module also provides an API for registering global types (YAML::add_domain_type).

Example

A simple round-trip (load and dump) of an object.

    require "yaml"

    test_obj = ["dogs", "cats", "badgers"]

    yaml_obj = YAML::dump( test_obj )
                        # -> ---
                             - dogs
                             - cats
                             - badgers
    ruby_obj = YAML::load( yaml_obj )
                        # => ["dogs", "cats", "badgers"]
    ruby_obj == test_obj
                        # => true

To register your custom types with the global resolver, use add_domain_type.

    YAML::add_domain_type( "your-site.com,2004", "widget" ) do |type, val|
        Widget.new( val )
    end

Constants

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

DNS_COMP_RE = "\\\\w(?:[-\\\\w]*\\\\w)?"

DNS_NAME_RE = "(?:(?:#{DNS_COMP_RE}\\\\.)+#{DNS_COMP_RE}|#{DNS_COMP_RE})"

DefaultResolver = YAML::Syck::DefaultResolver

ERROR_ANCHOR_ALIAS = "Can't define both an anchor and an alias"

ERROR_BAD_ALIAS = "Invalid alias: %s"

ERROR_BAD_ANCHOR = "Invalid anchor: %s"

ERROR_BAD_EXPLICIT = "Unsupported explicit transfer: '%s'"

ERROR_MANY_ALIAS = "More than one alias"

ERROR_MANY_ANCHOR = "More than one anchor"

ERROR_MANY_EXPLICIT = "More than one explicit transfer"

ERROR_MANY_IMPLICIT = "More than one implicit request"

ERROR_NEED_HEADER = "With UseHeader=false, the node must be an Array or Hash"

ERROR_NO_ANCHOR = "No anchor for alias '%s'"

ERROR_NO_HEADER_NODE = "With UseHeader=false, the node Array or Hash must have elements"

ERROR_UNSUPPORTED_ENCODING = "Attempt to use unsupported encoding: %s"

ERROR_UNSUPPORTED_VERSION = "This release of YAML.rb does not support YAML version %s"

ERROR_ZERO_INDENT = "Can't use zero as an indentation width"

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 }

ESCAPE_CHAR = '[\\\\x00-\\\\x09\\\\x0b-\\\\x1f]'

Emitter = YAML::Syck::Emitter

GenericResolver = YAML::Syck::GenericResolver

INDICATOR_CHAR = '*&!|\\\\\\\\^@%{}[]='

NOT_PLAIN_CHAR = '\\x7f\\x0-\\x1f\\x80-\\x9f'

PRINTABLE_CHAR = '-_A-Za-z0-9!?/()$\\'". '

Parser = YAML::Syck::Parser

RESTRICTED_INDICATORS = '#:,}]'

Resolver = YAML::Syck::Resolver

SPACE_INDICATORS = '-#:,?'

SUPPORTED_YAML_VERSIONS = ['1.0']

UNESCAPES = { 'a' => "\\x07", 'b' => "\\x08", 't' => "\\x09", 'n' => "\\x0a", 'v' => "\\x0b", 'f' => "\\x0c", 'r' => "\\x0d", 'e' => "\\x1b", '\\\\' => '\\\\', }

VERSION = '0.60'

WORD_CHAR = 'A-Za-z0-9'

Files

  • lib/yaml.rb
  • lib/yaml/baseemitter.rb
  • lib/yaml/basenode.rb
  • lib/yaml/constants.rb
  • lib/yaml/dbm.rb
  • lib/yaml/encoding.rb
  • lib/yaml/error.rb
  • lib/yaml/loader.rb
  • lib/yaml/stream.rb
  • lib/yaml/syck.rb
  • lib/yaml/tag.rb
  • lib/yaml/types.rb
  • lib/yaml/yamlnode.rb
  • lib/yaml/ypath.rb

Nested classes and modules