Class: FFI_Yajl::Parser
- Includes:
- Ext::Parser, FFI::Parser
- Defined in:
- lib/ffi_yajl/ext.rb,
lib/ffi_yajl/ffi.rb,
lib/ffi_yajl/parser.rb
Instance Attribute Summary collapse
-
#finished ⇒ Object
Returns the value of attribute finished.
-
#key ⇒ Object
Returns the value of attribute key.
-
#key_stack ⇒ Object
stack to keep track of keys as we create nested hashes.
-
#opts ⇒ Object
Returns the value of attribute opts.
-
#stack ⇒ Object
stack used to build up our complex object.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(opts = {}) ⇒ Parser
constructor
A new instance of Parser.
- #parse(str) ⇒ Object
Methods included from FFI::Parser
#do_yajl_parse, #key_pop, #key_push, #set_value, #setup_callbacks, #stack_pop
Methods included from Ext::Parser
Constructor Details
#initialize(opts = {}) ⇒ Parser
Returns a new instance of Parser.
27 28 29 30 31 |
# 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 |
Instance Attribute Details
#finished ⇒ Object
Returns the value of attribute finished.
5 6 7 |
# File 'lib/ffi_yajl/parser.rb', line 5 def finished @finished end |
#key ⇒ Object
Returns the value of attribute key.
5 6 7 |
# File 'lib/ffi_yajl/parser.rb', line 5 def key @key end |
#key_stack ⇒ Object
stack to keep track of keys as we create nested hashes
19 20 21 |
# File 'lib/ffi_yajl/parser.rb', line 19 def key_stack @key_stack end |
#opts ⇒ Object
Returns the value of attribute opts.
7 8 9 |
# File 'lib/ffi_yajl/parser.rb', line 7 def opts @opts end |
#stack ⇒ Object
stack used to build up our complex object
12 13 14 |
# File 'lib/ffi_yajl/parser.rb', line 12 def stack @stack end |
Class Method Details
.parse(obj, *args) ⇒ Object
23 24 25 |
# File 'lib/ffi_yajl/parser.rb', line 23 def self.parse(obj, *args) new(*args).parse(obj) end |
Instance Method Details
#parse(str) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# 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 |