Class: Panda::Core::ImportSession

Inherits:
ApplicationRecord show all
Defined in:
app/models/panda/core/import_session.rb

Constant Summary collapse

STATUSES =
%w[pending mapping previewing importing complete failed].freeze

Instance Method Summary collapse

Instance Method Details

#column_optionsObject



44
45
46
47
# File 'app/models/panda/core/import_session.rb', line 44

def column_options
  return [] unless importable_class.respond_to?(:import_field_definitions)
  importable_class.import_field_definitions
end

#complete?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'app/models/panda/core/import_session.rb', line 54

def complete?
  status == "complete"
end

#failed?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'app/models/panda/core/import_session.rb', line 62

def failed?
  status == "failed"
end

#file_headersObject



32
33
34
# File 'app/models/panda/core/import_session.rb', line 32

def file_headers
  file_parser&.headers || []
end

#file_parserObject



27
28
29
30
# File 'app/models/panda/core/import_session.rb', line 27

def file_parser
  return nil unless import_file.attached?
  @file_parser ||= FileParser.new(import_file.filename.to_s, import_file.download)
end

#file_rowsObject



36
37
38
# File 'app/models/panda/core/import_session.rb', line 36

def file_rows
  file_parser&.rows || []
end

#importable_classObject

Raises:

  • (ArgumentError)


20
21
22
23
24
25
# File 'app/models/panda/core/import_session.rb', line 20

def importable_class
  klass = importable_type.safe_constantize
  raise ArgumentError, "Unknown importable type: #{importable_type}" unless klass
  raise ArgumentError, "#{importable_type} is not importable" unless klass.include?(Panda::Core::Importable)
  klass
end

#importing?Boolean

Returns:

  • (Boolean)


58
59
60
# File 'app/models/panda/core/import_session.rb', line 58

def importing?
  status == "importing"
end

#preview_rows(limit: 5) ⇒ Object



40
41
42
# File 'app/models/panda/core/import_session.rb', line 40

def preview_rows(limit: 5)
  file_rows.first(limit)
end

#progress_percentageObject



49
50
51
52
# File 'app/models/panda/core/import_session.rb', line 49

def progress_percentage
  return 0 if total_rows.zero?
  ((processed_rows.to_f / total_rows) * 100).round
end