From f5e28fd293fd144c5ea5c1b21575affe80a8489a Mon Sep 17 00:00:00 2001 From: Alexis Reigel <mail@koffeinfrei.org> Date: Thu, 31 May 2018 16:59:05 +0200 Subject: [PATCH] add report (number of inserts, failures, total) --- lib/excelsior/import.rb | 12 ++++++++++-- lib/excelsior/report.rb | 14 ++++++++++++++ test/excelsior_test.rb | 7 +++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 lib/excelsior/report.rb diff --git a/lib/excelsior/import.rb b/lib/excelsior/import.rb index fd17e42..c859ce8 100644 --- a/lib/excelsior/import.rb +++ b/lib/excelsior/import.rb @@ -4,13 +4,14 @@ require 'active_record' require 'excelsior/source' require 'excelsior/mapping' require 'excelsior/error' +require 'excelsior/report' module Excelsior class Import include Source include Mapping - attr_accessor :source, :fields, :errors + attr_accessor :source, :fields, :errors, :report attr_accessor :rows, :columns def initialize(file = nil) @@ -23,6 +24,8 @@ module Excelsior @columns = @sheet.rows.shift @rows = @sheet.rows + @report = Report.new + valid? end @@ -56,7 +59,12 @@ module Excelsior end def add_model_errors(record, index) - return if record.errors.empty? + if record.errors.empty? + @report.inserted += 1 + return + end + + @report.failed += 1 @errors[:model] ||= [] diff --git a/lib/excelsior/report.rb b/lib/excelsior/report.rb new file mode 100644 index 0000000..ce93fca --- /dev/null +++ b/lib/excelsior/report.rb @@ -0,0 +1,14 @@ +module Excelsior + Report = Struct.new(:inserted, :failed) do + def initialize(*args) + super(*args) + + self.inserted ||= 0 + self.failed ||= 0 + end + + def total + inserted + failed + end + end +end diff --git a/test/excelsior_test.rb b/test/excelsior_test.rb index 40b3c3f..0fd4a65 100644 --- a/test/excelsior_test.rb +++ b/test/excelsior_test.rb @@ -81,4 +81,11 @@ class ExcelsiorTest < Minitest::Test assert import.errors[:model].any? assert_equal import.errors[:model], [Excelsior::Error.new(3, ["First name can't be blank"])] end + + def test_report + import = UserImport.new("test/files/missing-first-name.xlsx").tap(&:run) + assert_equal 2, import.report.inserted + assert_equal 1, import.report.failed + assert_equal 3, import.report.total + end end -- GitLab