class ActiveAdminImporter::Import
Attributes
controller[R]
csv_file[R]
current_row[R]
definition[R]
model[R]
Public Class Methods
new(csv_file, definition:, controller:)
click to toggle source
# File lib/active_admin_importer/import.rb, line 5 def initialize(csv_file, definition:, controller:) @csv_file = ::ActiveAdminImporter::CsvFile.new(csv_file) @controller = controller @definition = definition @model = definition[:model] @required_headers = definition[:required_headers] @current_row = 0 end
Public Instance Methods
failed_rows()
click to toggle source
# File lib/active_admin_importer/import.rb, line 14 def failed_rows @failed_rows ||= [] end
headers()
click to toggle source
# File lib/active_admin_importer/import.rb, line 18 def headers @headers ||= @csv_file.headers end
md5()
click to toggle source
# File lib/active_admin_importer/import.rb, line 22 def md5 @md5 ||= @csv_file.md5 end
result()
click to toggle source
# File lib/active_admin_importer/import.rb, line 43 def result @result ||= begin _result = [] _result << "Bad column headers, expected #{@required_headers} got #{@csv_file.headers}" unless self.valid? _result << "Failed to import rows: #{failed_rows.join(',')}" if failed_rows.any? _result << "#{current_row - failed_rows.length} / #{current_row} imported successfully" if current_row > 0 _result.join("\n") end end
run()
click to toggle source
# File lib/active_admin_importer/import.rb, line 26 def run run_before_callback if run_before_callback? log_info("STARTING IMPORT") ::CSV.parse(@csv_file, :headers => true, :header_converters => :symbol) do |row| begin process_row(row) rescue => e record_failure(row, e) end end log_error("FAILED TO PARSE ROWS #{failed_rows}") if failed_rows.any? log_info("FINISHED IMPORT") run_after_callback if run_after_callback? end
valid?()
click to toggle source
# File lib/active_admin_importer/import.rb, line 53 def valid? @required_headers.all?{ |header| self.headers.include?(header) } end
Private Instance Methods
log_error(message)
click to toggle source
# File lib/active_admin_importer/import.rb, line 59 def log_error(message) ::Rails.logger.error("[IMPORT: #{self.md5}]: #{message}") end
log_info(message)
click to toggle source
# File lib/active_admin_importer/import.rb, line 63 def log_info(message) ::Rails.logger.info("[IMPORT: #{self.md5}]: #{message}") end
process_row(row)
click to toggle source
# File lib/active_admin_importer/import.rb, line 67 def process_row(row) @current_row += 1 log_info("IMPORTING ROW - #{current_row}") data = row.to_hash if data.present? data = @definition[:transformer].new(data).to_hash if @definition[:transformer] data = @definition[:transform].call(data) if @definition[:transform] @definition[:each_row].call(data, self) end end
record_failure(row, e)
click to toggle source
# File lib/active_admin_importer/import.rb, line 79 def record_failure(row, e) log_error("FAILED TO PARSE ROW #{current_row}") failed_rows << current_row log_error("ERROR_ON_ROW\##{current_row} - #{e.message}") ::Rails.logger.error(e.message) end
run_after_callback()
click to toggle source
# File lib/active_admin_importer/import.rb, line 86 def run_after_callback self.instance_eval(&@definition[:after]) end
run_after_callback?()
click to toggle source
# File lib/active_admin_importer/import.rb, line 90 def run_after_callback? @definition[:after] end
run_before_callback()
click to toggle source
# File lib/active_admin_importer/import.rb, line 94 def run_before_callback self.instance_eval(&@definition[:before]) end
run_before_callback?()
click to toggle source
# File lib/active_admin_importer/import.rb, line 98 def run_before_callback? @definition[:before] end