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