class Json::Streamer::JsonStreamer

Attributes

parser[R]

Public Class Methods

new(file_io = nil, chunk_size = 1000, event_generator = :default) click to toggle source
# File lib/json/streamer/json_streamer.rb, line 10
def initialize(file_io = nil, chunk_size = 1000, event_generator = :default)
  @event_generator = make_event_generator(event_generator)

  @file_io = file_io
  @chunk_size = chunk_size
end

Public Instance Methods

<<(data) click to toggle source
# File lib/json/streamer/json_streamer.rb, line 17
def <<(data)
  parser << data
end
aggregator() click to toggle source
# File lib/json/streamer/json_streamer.rb, line 60
def aggregator
  parser.aggregator
end
get(nesting_level: -1, key: nil, yield_values: true, symbolize_keys: false) { |obj| ... } click to toggle source
# File lib/json/streamer/json_streamer.rb, line 21
def get(nesting_level: -1, key: nil, yield_values: true, symbolize_keys: false)
  conditions = Conditions.new(yield_level: nesting_level, yield_key: key)
  conditions.yield_value = ->(aggregator:, value:) { false } unless yield_values

  @parser = Parser.new(@event_generator, symbolize_keys: symbolize_keys)
  unyielded_items = []

  parser.get(conditions) do |obj|
    if block_given?
      yield obj
    else
      unyielded_items.push(obj)
    end

    obj
  end

  process_io
  
  unyielded_items
end
get_with_conditions(conditions, options = {}) { |obj| ... } click to toggle source
# File lib/json/streamer/json_streamer.rb, line 43
def get_with_conditions(conditions, options = {})
  @parser = Parser.new(@event_generator, symbolize_keys: options[:symbolize_keys])
  unyielded_items = []

  parser.get(conditions) do |obj|
    if block_given?
      yield obj
    else
      unyielded_items.push(obj)
    end
  end

  process_io

  unyielded_items
end

Private Instance Methods

make_event_generator(generator) click to toggle source
# File lib/json/streamer/json_streamer.rb, line 70
def make_event_generator(generator)
  case generator
  when :default
    require 'json/stream'
    JSON::Stream::Parser.new
  else
    generator
  end
end
process_io() click to toggle source
# File lib/json/streamer/json_streamer.rb, line 66
def process_io
  @file_io.each(@chunk_size) { |chunk| parser << chunk } if @file_io
end