class RocketJob::LookupCollection::BatchUploader

Internal class for uploading records in batches

Attributes

record_count[R]

Public Class Methods

new(collection, batch_size:) click to toggle source
# File lib/rocket_job/lookup_collection.rb, line 37
def initialize(collection, batch_size:)
  @batch_size   = batch_size
  @record_count = 0
  @batch_count  = 0
  @documents    = []
  @collection   = collection
end
upload(collection, **args) { |writer| ... } click to toggle source
# File lib/rocket_job/lookup_collection.rb, line 29
def self.upload(collection, **args)
  writer = new(collection, **args)
  yield(writer)
  writer.record_count
ensure
  writer&.close
end

Public Instance Methods

<<(record) click to toggle source
# File lib/rocket_job/lookup_collection.rb, line 45
def <<(record)
  raise(ArgumentError, "Record must be a Hash") unless record.is_a?(Hash)

  unless record.key?(:id) || record.key?("id") || record.key?("_id")
    raise(ArgumentError, "Record must include an :id key")
  end

  @documents << record
  @record_count += 1
  @batch_count  += 1
  if @batch_count >= @batch_size
    @collection.insert_many(@documents)
    @documents.clear
    @batch_count = 0
  end

  self
end
close() click to toggle source
# File lib/rocket_job/lookup_collection.rb, line 64
def close
  @collection.insert_many(@documents) unless @documents.empty?
end