Sha256: 7556ad3311e67bdcfb849006502914865e7c5c44c127d14affae5e47bcb195eb
Contents?: true
Size: 1.16 KB
Versions: 3
Compression:
Stored size: 1.16 KB
Contents
require "abstract_importer/strategies/base" require "activerecord/insert_many" module AbstractImporter module Strategies class InsertStrategy < Base def initialize(collection) super @batch = [] @batch_size = 250 end def process_record(hash) summary.total += 1 if already_imported?(hash) summary.already_imported += 1 return end remap_foreign_keys!(hash) if redundant_record?(hash) summary.redundant += 1 return end @batch << prepare_attributes(hash) flush if @batch.length >= @batch_size rescue ::AbstractImporter::Skip summary.skipped += 1 end def flush invoke_callback(:before_batch, @batch) begin tries = (tries || 0) + 1 collection.scope.insert_many(@batch) rescue raise if tries > 1 invoke_callback(:rescue_batch, @batch) retry end id_map.merge! collection.table_name, collection.scope .where(legacy_id: @batch.map { |hash| hash[:legacy_id] }) @batch = [] end end end end
Version data entries
3 entries across 3 versions & 1 rubygems