Sha256: 33b25065dbd751436996a48e65c382481efce0bf9fd3874fc0939024ec5828cd

Contents?: true

Size: 1.63 KB

Versions: 3

Compression:

Stored size: 1.63 KB

Contents

require_relative './database_factory'

module CsvFastImporter

  # Responsible for the main process
  class Import

    def initialize(configuration)
      @configuration = configuration
    end

    def run
      @db = CsvFastImporter::DatabaseFactory.build
      @db.verify_compatibility @configuration

      row_index = 0
      within_transaction_if(@configuration.transactional?) do
        table = @configuration.destination_table
        columns = db_columns(@configuration)
        if @configuration.deletion?
          if @configuration.truncate?
            @db.truncate table
          else
            @db.delete_all table
          end
        end
        row_index = @db.bulk_import(@configuration.file,
                                    table,
                                    columns,
                                    row_index_column: @configuration.row_index_column,
                                    column_separator: @configuration.column_separator,
                                    encoding:         @configuration.encoding)
      end
      row_index
    end

    def db_columns(configuration)
      file_columns = configuration.file
                                  .gets
                                  .split(configuration.column_separator)
                                  .map(&:strip)
      db_columns = file_columns.map(&:downcase)
                               .map { |column| configuration.mapping[column] || column }
      db_columns
    end

    def within_transaction_if(transactional)
      if transactional
        @db.transaction do
          yield
        end
      else
        yield
      end
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
csv_fast_importer-1.2.0 lib/csv_fast_importer/import.rb
csv_fast_importer-1.1.0 lib/csv_fast_importer/import.rb
csv_fast_importer-1.0.0 lib/csv_fast_importer/import.rb