class FFI_Yajl::Parser
Attributes
finished[RW]
key[RW]
key_stack[RW]
opts[RW]
stack[RW]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/ffi_yajl/parser.rb, line 27 def initialize(opts = {}) @opts = opts ? opts.dup : {} # JSON gem uses 'symbolize_names' and ruby-yajl supports this as well @opts[:symbolize_keys] = true if @opts[:symbolize_names] end
parse(obj, *args)
click to toggle source
# File lib/ffi_yajl/parser.rb, line 23 def self.parse(obj, *args) new(*args).parse(obj) end
Public Instance Methods
parse(str)
click to toggle source
# File lib/ffi_yajl/parser.rb, line 33 def parse(str) # initialization that we can do in pure ruby yajl_opts = {} if @opts[:check_utf8] == false && @opts[:dont_validate_strings] == false raise ArgumentError, "options check_utf8 and dont_validate_strings are both false which conflict" end if @opts[:check_utf8] == true && @opts[:dont_validate_strings] == true raise ArgumentError, "options check_utf8 and dont_validate_strings are both true which conflict" end yajl_opts[:yajl_allow_comments] = @opts[:allow_comments] yajl_opts[:yajl_dont_validate_strings] = (@opts[:check_utf8] == false || @opts[:dont_validate_strings]) yajl_opts[:yajl_allow_trailing_garbage] = @opts[:allow_trailing_garbage] yajl_opts[:yajl_allow_multiple_values] = @opts[:allow_multiple_values] yajl_opts[:yajl_allow_partial_values] = @opts[:allow_partial_values] # XXX: bug-compat with ruby-yajl return nil if str == "" if str.respond_to?(:read) str = str.read() end # call either the ext or ffi hook do_yajl_parse(str, yajl_opts) end