Class: ActiveAdminImporter::CsvFile

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/active_admin_importer/csv_file.rb

Constant Summary collapse

CSV_READ_OPTIONS =
{ :headers => true, :header_converters => :symbol }.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(descriptor) ⇒ CsvFile

Returns a new instance of CsvFile.



12
13
14
# File 'lib/active_admin_importer/csv_file.rb', line 12

def initialize(descriptor)
  @descriptor = descriptor
end

Class Method Details

.read(path) ⇒ Object



8
9
10
# File 'lib/active_admin_importer/csv_file.rb', line 8

def self.read(path)
  new(::File.new(path))
end

Instance Method Details

#__getobj__Object



16
17
18
# File 'lib/active_admin_importer/csv_file.rb', line 16

def __getobj__
  @descriptor
end

#each_row(&block) ⇒ Object



20
21
22
# File 'lib/active_admin_importer/csv_file.rb', line 20

def each_row(&block)
  ::CSV.parse(self, CSV_READ_OPTIONS, &block)
end

#find_row_by_number(number) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/active_admin_importer/csv_file.rb', line 24

def find_row_by_number(number)
  result = ::CSV.foreach(self, CSV_READ_OPTIONS).with_index do |row, i|
    return row if i == number - 1
  end

  result
end

#headersObject



32
33
34
# File 'lib/active_admin_importer/csv_file.rb', line 32

def headers
  @headers ||= ::CSV.open(@descriptor, 'r') { |csv| csv.first }
end

#md5Object

read file in chunks for memory efficiency



37
38
39
40
41
42
43
44
# File 'lib/active_admin_importer/csv_file.rb', line 37

def md5
  @md5 ||= ::File.open(@descriptor, "rb") do |io|
    _md5 = ::Digest::MD5.new
    buffer = ""
    _md5.update(buffer) while io.read(4096, buffer)
    _md5
  end
end