Sha256: 72bec66923df5bf62e069144ae05519516f0ee875e20b44098caa4e18572baa5
Contents?: true
Size: 1.21 KB
Versions: 2
Compression:
Stored size: 1.21 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 ids = collection.scope.where(legacy_id: @batch.map { |hash| hash[:legacy_id] }) id_map.merge! collection.table_name, ids summary.created += ids.length @batch = [] end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
abstract_importer-1.3.4 | lib/abstract_importer/strategies/insert_strategy.rb |
abstract_importer-1.3.3 | lib/abstract_importer/strategies/insert_strategy.rb |