From 982c884a8d97667ea88034aa12fa9f0b208943e2 Mon Sep 17 00:00:00 2001
From: Alexis Reigel <mail@koffeinfrei.org>
Date: Thu, 31 May 2018 17:10:45 +0200
Subject: [PATCH] report for run with custom block

---
 lib/excelsior/import.rb | 20 +++++++++++++++++---
 test/excelsior_test.rb  | 11 +++++++++++
 2 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/lib/excelsior/import.rb b/lib/excelsior/import.rb
index c859ce8..98087a5 100644
--- a/lib/excelsior/import.rb
+++ b/lib/excelsior/import.rb
@@ -33,7 +33,13 @@ module Excelsior
       @rows.map.with_index do |row, i|
         attributes = map_row_values(row, @columns)
         if block_given?
-          yield attributes
+          begin
+            result = yield attributes
+            report_insert
+            result
+          rescue
+            report_failure
+          end
         else
           record = model_class.create(attributes)
           add_model_errors(record, i)
@@ -60,15 +66,23 @@ module Excelsior
 
     def add_model_errors(record, index)
       if record.errors.empty?
-        @report.inserted += 1
+        report_insert
         return
       end
 
-      @report.failed += 1
+      report_failure
 
       @errors[:model] ||= []
 
       @errors[:model] << Error.new(index + 1, record.errors.full_messages)
     end
+
+    def report_insert
+      @report.inserted += 1
+    end
+
+    def report_failure
+      @report.failed += 1
+    end
   end
 end
diff --git a/test/excelsior_test.rb b/test/excelsior_test.rb
index 0fd4a65..60f8efb 100644
--- a/test/excelsior_test.rb
+++ b/test/excelsior_test.rb
@@ -88,4 +88,15 @@ class ExcelsiorTest < Minitest::Test
     assert_equal 1, import.report.failed
     assert_equal 3, import.report.total
   end
+
+  def test_report_with_block
+    import = UserImport.new("test/files/missing-first-name.xlsx")
+    import.run do |v|
+      raise "failure!" if v[:first_name].nil?
+      v
+    end
+    assert_equal 2, import.report.inserted
+    assert_equal 1, import.report.failed
+    assert_equal 3, import.report.total
+  end
 end
-- 
GitLab