diff --git a/lib/excelsior/import.rb b/lib/excelsior/import.rb index fd17e4285e828b273d892803c3ecb1c5e78f749d..c859ce8280bc6d88c7c0775acfec32a742eb593a 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 0000000000000000000000000000000000000000..ce93fca389325eadf4175985505943178fa22723 --- /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 40b3c3feec892f48d5b0a5cbbc1e263d1137e36d..0fd4a657842279520a364d0cdb539bbdff9dd582 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