module DataImporter class ImporterService attr_accessor :reader, :report, :klass def initialize(file_name, klass, mappings=nil, required_keys=[]) @klass = klass @report = Report.new @reader = CsvReader.new(file_name, mappings) end def run @report.time_elapsed = Benchmark.realtime do while row = @reader.get_mapped_row_hash new_entry = @klass.new(row) if new_entry.save @report.successful += 1 else @report.unsuccessful += 1 end @report.total = @report.successful + @report.unsuccessful end end end end end