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