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