Class: Panda::Core::ImportSession
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Panda::Core::ImportSession
- 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
- #column_options ⇒ Object
- #complete? ⇒ Boolean
- #failed? ⇒ Boolean
- #file_headers ⇒ Object
- #file_parser ⇒ Object
- #file_rows ⇒ Object
- #importable_class ⇒ Object
- #importing? ⇒ Boolean
- #preview_rows(limit: 5) ⇒ Object
- #progress_percentage ⇒ Object
Instance Method Details
#column_options ⇒ Object
44 45 46 47 |
# File 'app/models/panda/core/import_session.rb', line 44 def return [] unless importable_class.respond_to?(:import_field_definitions) importable_class.import_field_definitions end |
#complete? ⇒ Boolean
54 55 56 |
# File 'app/models/panda/core/import_session.rb', line 54 def complete? status == "complete" end |
#failed? ⇒ Boolean
62 63 64 |
# File 'app/models/panda/core/import_session.rb', line 62 def failed? status == "failed" end |
#file_headers ⇒ Object
32 33 34 |
# File 'app/models/panda/core/import_session.rb', line 32 def file_headers file_parser&.headers || [] end |
#file_parser ⇒ Object
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_rows ⇒ Object
36 37 38 |
# File 'app/models/panda/core/import_session.rb', line 36 def file_rows file_parser&.rows || [] end |
#importable_class ⇒ Object
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
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_percentage ⇒ Object
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 |