# class PSON::Pure::Parser

This class implements the PSON parser that is used to parse a PSON string into a Ruby data structure.

### Constants

ARRAY_CLOSE
ARRAY_OPEN
COLLECTION_DELIMITER
FALSE
FLOAT
IGNORE
INFINITY
INTEGER
MINUS_INFINITY
NAN
NULL
OBJECT_CLOSE
OBJECT_OPEN
PAIR_DELIMITER
STRING
TRUE
UNESCAPE_MAP

  Unescape characters in strings.

UNPARSED

### Public Class Methods

new(source, opts = {}) click to toggle source

Creates a new PSON::Pure::Parser instance for the string source.

It will be configured by the opts hash. opts can have the following keys:

- max_nesting: The maximum depth of nesting allowed in the parsed data structures. Disable depth checking with :max_nesting => false|nil|0, it defaults to 19.

- allow_nan: If set to true, allow NaN, Infinity and -Infinity in defiance of RFC 4627 to be parsed by the Parser. This option defaults to false.

- create_additions: If set to false, the Parser doesn't create additions even if a matchin class and create_id was found. This option defaults to true.

- object_class: Defaults to Hash

- array_class: Defaults to Array

Calls superclass method

    # File lib/puppet/external/pson/pure/parser.rb, line 68
    def initialize(source, opts = {})
      super
      if !opts.key?(:max_nesting) # defaults to 19
        @max_nesting = 19
      elsif opts[:max_nesting]
        @max_nesting = opts[:max_nesting]
      else
        @max_nesting = 0
      end
      @allow_nan = !!opts[:allow_nan]
      ca = true
      ca = opts[:create_additions] if opts.key?(:create_additions)
      @create_id = ca ? PSON.create_id : nil
      @object_class = opts[:object_class] || Hash
      @array_class = opts[:array_class] || Array
    end

### Public Instance Methods

parse() click to toggle source

Parses the current PSON string source and returns the complete data structure as a result.

    # File lib/puppet/external/pson/pure/parser.rb, line 89
    def parse
      reset
      obj = nil
      until eos?
        case
        when scan(OBJECT_OPEN)
          obj and raise ParserError, "source '#{peek(20)}' not in PSON!"
          @current_nesting = 1
          obj = parse_object
        when scan(ARRAY_OPEN)
          obj and raise ParserError, "source '#{peek(20)}' not in PSON!"
          @current_nesting = 1
          obj = parse_array
        when skip(IGNORE)
          ;
        else
          raise ParserError, "source '#{peek(20)}' not in PSON!"
        end
      end
      obj or raise ParserError, "source did not contain any PSON!"
      obj
    end