From a39c6d524ee23c009c25c2f1edaeeadfd6dfd912 Mon Sep 17 00:00:00 2001 From: Alexis Reigel <mail@koffeinfrei.org> Date: Fri, 1 Jun 2018 13:55:21 +0200 Subject: [PATCH] don't run when the initial valid check fails --- lib/excelsior/import.rb | 14 ++++++++++---- test/excelsior_test.rb | 6 ++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/excelsior/import.rb b/lib/excelsior/import.rb index c2525f1..0370470 100644 --- a/lib/excelsior/import.rb +++ b/lib/excelsior/import.rb @@ -30,10 +30,12 @@ module Excelsior @report = Report.new - valid? + validate! end def run(&block) + return unless valid? + if self.class.use_transaction model_class.transaction do insert_rows(&block) @@ -45,7 +47,7 @@ module Excelsior end end - def valid? + def validate! @errors = fields.to_a.each_with_object({}) do |f, acc| acc[:missing_column] ||= [] @@ -53,6 +55,10 @@ module Excelsior end end + def valid? + @errors[:missing_column].empty? + end + private def model_class @@ -60,6 +66,8 @@ module Excelsior end def add_model_errors(record, index) + @errors[:model] ||= [] + if record.errors.empty? report_insert return @@ -67,8 +75,6 @@ module Excelsior report_failure - @errors[:model] ||= [] - @errors[:model] << Error.new(index + 1, record.errors.full_messages) end diff --git a/test/excelsior_test.rb b/test/excelsior_test.rb index 2d97bb3..b8d2ed5 100644 --- a/test/excelsior_test.rb +++ b/test/excelsior_test.rb @@ -156,6 +156,12 @@ describe Excelsior do assert import.errors[:missing_column].any? end + it 'does not run the import' do + import = UserImport.new('test/files/missing-column.xlsx') + import.run + assert_equal 0, import.report.total + end + it 'returns the model validation errors' do import = UserImport.new('test/files/missing-first-name.xlsx').tap(&:run) assert import.errors[:model].any? -- GitLab