Skip to content
Snippets Groups Projects
Verified Commit ba4e9c2f authored by Alexis Reigel's avatar Alexis Reigel
Browse files

check columns (formerly `validate!`) on ron

don't execute anything from the constructor
parent 8c9446f4
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -30,19 +30,15 @@ module Excelsior
@rows = @sheet.rows
@result = Result.new(@rows.length)
validate!
end
def run(&block)
check_columns!
return unless valid?
if self.class.use_transaction
model_class.transaction do
insert_rows(&block)
raise ActiveRecord::Rollback if report.failed.positive?
end
run_with_transaction(&block)
else
insert_rows(&block)
end
......@@ -50,22 +46,30 @@ module Excelsior
result
end
def validate!
fields.to_a.each do |f|
errors[:missing_column] << { missing: f[:header] } unless @columns.include?(f[:header])
end
end
def valid?
result.status != Result::Statuses::FAILED
end
private
def check_columns!
fields.to_a.each do |f|
errors[:missing_column] << { missing: f[:header] } unless @columns.include?(f[:header])
end
end
def model_class
self.class.name.gsub('Import', '').constantize
end
def run_with_transaction(&block)
model_class.transaction do
insert_rows(&block)
raise ActiveRecord::Rollback if report.failed.positive?
end
end
def add_model_errors(record, index)
if record.errors.empty?
report_insert
......
......@@ -167,7 +167,7 @@ describe Excelsior do
describe '#errors' do
it 'returns an error when a column is missing in the excel' do
import = UserImport.new('test/files/missing-column.xlsx')
import = UserImport.new('test/files/missing-column.xlsx').tap(&:run)
assert import.errors[:missing_column].any?
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment