This class implements the PSON parser that is used to parse a PSON string into a Ruby data structure.
Unescape characters in strings.
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
# 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
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