Class: FFI_Yajl::Parser

### Home Classes Methods

### In Files

- lib/ffi_yajl/ext.rb
- lib/ffi_yajl/ffi.rb
- lib/ffi_yajl/parser.rb

### Parent

Object

### Methods

- ::new
- ::parse
- #parse

### Included Modules

- FFI_Yajl::Ext::Parser
- FFI_Yajl::FFI::Parser

### Files

- LICENSE
- MIT-LICENSE

### Class/Module Index

Quicksearch

- FFI_Yajl
- FFI_Yajl::Benchmark
- FFI_Yajl::Benchmark::Encode
- FFI_Yajl::Benchmark::EncodeProfile
- FFI_Yajl::Benchmark::Parse
- FFI_Yajl::Benchmark::ParseProfile
- FFI_Yajl::Benchmark::ParseProfileRubyProf
- FFI_Yajl::EncodeError
- FFI_Yajl::Encoder
- FFI_Yajl::FFI
- FFI_Yajl::FFI::Encoder
- FFI_Yajl::FFI::Parser
- FFI_Yajl::ParseError
- FFI_Yajl::Parser
- FFI_Yajl::Platform
- FFI_Yajl::YajlCallbacks
- JSON
- JSON::GeneratorError
- JSON::JSONError
- JSON::ParserError
- Array
- Bignum
- Date
- DateTime
- FalseClass
- Fixnum
- Float
- Hash
- Kernel
- NilClass
- Object
- String
- Symbol
- Time
- TrueClass

No matching classes.

# 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)
      raise FFI_Yajl::ParseError, "input must be a string or IO" unless str.is_a?(String) || str.respond_to?(:read)

      # 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]         = true

      if @opts.key?(:allow_comments)
        yajl_opts[:yajl_allow_comments]       = @opts[:allow_comments]
      end

      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

[Validate]

Generated with the Darkfish Rdoc Generator 2.