Sha256: a99d125a9b5c321839343efb4d63df3ce8bbf101b5974d7594387ddbe7342b82

Contents?: true

Size: 1.81 KB

Versions: 11

Compression:

Stored size: 1.81 KB

Contents

module ActiveRecordCSVImporter
  # The Report you get back from an import.
  #
  # * It has a status (pending, invalid_csv_file, invalid_header, in_progress, done, aborted)
  # * It lists out missing columns
  # * It reports parser_error
  # * It lists out (created / updated) * (success / failed) records
  # * It provides a human readable message
  #
  class Report
    include Virtus.model

    attribute :status, Symbol, default: proc { :pending }

    attribute :missing_columns, Array[Symbol], default: proc { [] }

    attribute :parser_error, String

    attribute :ids, Array, default: []
    attribute :total_count, Integer, default: 0
    attribute :completed_count, Integer, default: 0
    attribute :invalid_rows, Array[Array], default: {}

    attribute :message_generator, Class, default: proc { ReportMessage }

    def progress_percentage
      return 0 if total_count.zero?
      (completed_count.to_f / total_count * 100).round
    end

    def success?
      done? && invalid_rows.empty?
    end

    def pending?
      status == :pending
    end

    def in_progress?
      status == :in_progress
    end

    def done?
      status == :done
    end

    def aborted?
      status == :aborted
    end

    def invalid_header?
      status == :invalid_header
    end

    def invalid_csv_file?
      status == :invalid_csv_file
    end

    def pending!
      self.status = :pending
      self
    end

    def in_progress!
      self.status = :in_progress
      self
    end

    def done!
      self.status = :done
      self
    end

    def aborted!
      self.status = :aborted
      self
    end

    def invalid_header!
      self.status = :invalid_header
      self
    end

    def invalid_csv_file!
      self.status = :invalid_csv_file
      self
    end

    def message
      message_generator.call(self)
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
activerecord_csv_importer-0.4.0 lib/activerecord_csv_importer/report.rb
activerecord_csv_importer-0.3.0 lib/activerecord_csv_importer/report.rb
activerecord_csv_importer-0.2.3 lib/activerecord_csv_importer/report.rb
activerecord_csv_importer-0.2.2 lib/activerecord_csv_importer/report.rb
activerecord_csv_importer-0.2.1 lib/activerecord_csv_importer/report.rb
activerecord_csv_importer-0.2.0 lib/activerecord_csv_importer/report.rb
activerecord_csv_importer-0.1.9 lib/activerecord_csv_importer/report.rb
activerecord_csv_importer-0.1.8 lib/activerecord_csv_importer/report.rb
activerecord_csv_importer-0.1.7 lib/activerecord_csv_importer/report.rb
activerecord_csv_importer-0.1.6 lib/activerecord_csv_importer/report.rb
activerecord_csv_importer-0.1.5 lib/activerecord_csv_importer/report.rb