Sha256: 62ec60e1f8aa3882b2ed49f23e2924e1fcd7ad15563cf373811ede329a0fb516

Contents?: true

Size: 1.12 KB

Versions: 15

Compression:

Stored size: 1.12 KB

Contents

require 'oj'

require_relative '../reader'
require_relative '../writer'

module BEL::JSON

  class Implementation

    include Reader
    include Writer

    def read(data, options = {}, &block)
      if block_given?
        options = { :symbol_keys => true }.merge!(options)
        Oj.sc_parse(StreamHandler.new(block), data, options)
      else
        to_enum(:read, data, options)
      end
    end

    def write(data, output_io, options = {})
      Oj.to_stream(output_io, data)
    end
  end

  class StreamHandler < Oj::ScHandler

    def initialize(callable)
      @callable = callable
    end

    def hash_start
      {}
    end

    def hash_end
      @callable.call @hash 
    end

    def hash_set(hash, key, value)
      hash[key]  = value
      @hash = hash
    end

    def array_start
      @array = []
      @array
    end

    def array_append(array, value)
      array << value
      @array = array
    end

    def array_end()
      @callable.call @array
    end

    def error(message, line, column)
      msg = "Parse error at line #{line}, column #{column}: #{message}"
      raise Oj::ParseError.new(msg)
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
bel-0.4.2 lib/bel/json/adapter/oj.rb
bel-0.4.1 lib/bel/json/adapter/oj.rb
bel-0.4.0 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.13 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.12 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.11 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.10 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.9 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.8 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.7 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.5 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.4 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.3 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta.2 lib/bel/json/adapter/oj.rb
bel-0.4.0.beta1 lib/bel/json/adapter/oj.rb