diff --git a/lib/excelsior/import.rb b/lib/excelsior/import.rb index c2525f1471115fe3c4cc28b8179469d6d3c7a83b..03704704b080c47146c15f629ba6b1e2ed7c0bb2 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 2d97bb39f85222a089a73e982c06a53bc59a950c..b8d2ed5ab38ceb8737da414a028e61882657a4f6 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?