Class: FileImportProcessorJob

Inherits:
ApplicationJob
  • Object
show all
Defined in:
app/jobs/file_import_processor_job.rb

Instance Method Summary collapse

Instance Method Details

#perform(file_import) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
# File 'app/jobs/file_import_processor_job.rb', line 4

def perform(file_import)
  model = CmAdmin::Model.find_by({name: file_import.associated_model_name})
  content = file_import.import_file.download
  importer = model.importer.class_name.classify.constantize.new(content: content)
  case model.importer.importer_type.to_s
  when 'csv_importer'
    run_csv_importer(importer, file_import)
  when 'custom_importer'
    run_custom_importer(importer, file_import)
  end
end

#run_csv_importer(importer, file_import) ⇒ Object

All logic are from csv_importer gem



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'app/jobs/file_import_processor_job.rb', line 17

def run_csv_importer(importer, file_import)
  if importer.valid_header?
    importer.run!
    if importer.report.success?
      file_import.update(status: :success, completed_at: DateTime.now)
    else
      identifier = importer.config.identifiers.first
      invalid_items_array = importer.report.invalid_rows.map { |row| [row.line_number, row.model.send(identifier), row.errors] }
      file_import.update(status: :failed, completed_at: DateTime.now, invalid_row_items: invalid_items_array)
    end
  else
    file_import.update(status: :failed, completed_at: DateTime.now, invalid_row_items: [[1, 'invalid_header', {invalid_header: importer.report.message}]])
  end
end

#run_custom_importer(importer, file_import) ⇒ Object



32
33
34
35
36
37
# File 'app/jobs/file_import_processor_job.rb', line 32

def run_custom_importer(importer, file_import)
  importer.run!
  invalid_items_array = importer.invalid_rows.map { |row| [row.line_number, row.identifier, row.errors] }
  status = importer.invalid_rows.empty? ? :success : :failed
  file_import.update(status: status, completed_at: DateTime.now, invalid_row_items: invalid_items_array)
end