class ActiveRecordImporter::Dispatcher

Public Instance Methods

call() click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 10
def call
  divide_and_conquer
  create_import_failed_file
end

Private Instance Methods

create_import_failed_file() click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 54
def create_import_failed_file
  return if import.nil? || !File.exists?(temp_failed_file_path)
  File.open(temp_failed_file_path) do |file|
    import.failed_file = file

    # I forced to save it as 'text/csv' because
    # the file is being saved as 'text/x-pascal'
    # and I still have no idea why?!?

    import.failed_file_content_type = 'text/csv'
    import.save!
  end

  destroy_temp_failed_file
end
csv_options() click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 27
def csv_options
  opts = klass_csv_opts
  return opts if import.nil? || import.batch_size.blank?
  opts.merge(chunk_size: import.batch_size)
end
destroy_temp_failed_file() click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 70
def destroy_temp_failed_file
  FileUtils.rm(temp_failed_file_path)
end
divide_and_conquer() click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 17
def divide_and_conquer
  File.open(import_file, 'r:bom|utf-8') do |file|
    SmarterCSV.process(file, csv_options) do |collection|
      queue_or_execute(collection)
    end
  end

  true
end
klass_csv_opts() click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 33
def klass_csv_opts
  importable.importer_options.csv_opts.to_hash
end
process_import(collection) click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 42
def process_import(collection)
  BatchImporter.new(
    import: import,
    importable: importable,
    data: collection
  ).process!
end
queue(_collection) click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 50
def queue(_collection)
  # To follow
end
queue_or_execute(collection) click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 37
def queue_or_execute(collection)
  process_import(collection) if execute
  queue(collection)
end
target_file_name() click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 78
def target_file_name
  "failed_file_#{import.id}.csv"
end
temp_failed_file_path() click to toggle source
# File lib/active_record_importer/dispatcher.rb, line 74
def temp_failed_file_path
  "/tmp/#{target_file_name}"
end