lib/json/streamer/json_streamer.rb in json-streamer-2.0.1 vs lib/json/streamer/json_streamer.rb in json-streamer-2.1.0

- old
+ new

@@ -1,18 +1,16 @@ -require "json/stream" - require_relative 'conditions' require_relative 'parser' module Json module Streamer class JsonStreamer attr_reader :parser - def initialize(file_io = nil, chunk_size = 1000) - @event_generator = JSON::Stream::Parser.new + 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 @@ -22,37 +20,62 @@ 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 - # TODO: deprecate symbolize_keys and move to initialize @parser = Parser.new(@event_generator, symbolize_keys: symbolize_keys) + unyielded_items = [] parser.get(conditions) do |obj| - yield obj + if block_given? + yield obj + else + unyielded_items.push(obj) + end + + obj end process_io + + unyielded_items end def get_with_conditions(conditions, options = {}) @parser = Parser.new(@event_generator, symbolize_keys: options[:symbolize_keys]) + unyielded_items = [] parser.get(conditions) do |obj| - yield obj + if block_given? + yield obj + else + unyielded_items.push(obj) + end end process_io + + unyielded_items end def aggregator parser.aggregator end private def process_io @file_io.each(@chunk_size) { |chunk| parser << chunk } if @file_io + end + + def make_event_generator(generator) + case generator + when :default + require 'json/stream' + JSON::Stream::Parser.new + else + generator + end end end end end