class Mongokit::CsvIO

Attributes

column_mapping[R]
columns[R]
csv[R]
options[R]

Public Class Methods

new(operation, file, columns, options = {}) click to toggle source
# File lib/mongokit/csv_transformer/csv_io.rb, line 11
def initialize(operation, file, columns, options = {})
  @options = options
  @column_mapping = build_column_mapping(columns)
  @columns = @column_mapping.keys.map(&:to_sym)

  if operation == :write
    @csv = CSV.open(file, 'wb')
    write_headers
  else
    @csv = CSV.open(file)
    @csv.readline if options[:headers]
  end
end

Public Instance Methods

build_column_mapping(columns) click to toggle source
# File lib/mongokit/csv_transformer/csv_io.rb, line 25
def build_column_mapping(columns)
  if columns.is_a?(Array)
    columns.zip((0..columns.length).to_a).to_h.reject{|k| k.nil? }
  else
    columns.sort_by{|_, pos| pos }.to_h
  end
end
to_attrs(row, block) click to toggle source
# File lib/mongokit/csv_transformer/csv_io.rb, line 43
def to_attrs(row, block)
  attrs = column_mapping.inject({}) do |r, (f, pos)|
    r[f] = row[pos]
    r
  end

  if block
    return false if block.call(row, attrs) == false
  end

  attrs
end
to_row(record, block) click to toggle source
# File lib/mongokit/csv_transformer/csv_io.rb, line 56
def to_row(record, block)
  row = CSV::Row.new(columns, columns.map {|f| record[f] })

  if block
    return false if block.call(row, record) == false
  end

  row
end
write_headers() click to toggle source
# File lib/mongokit/csv_transformer/csv_io.rb, line 33
def write_headers
  return if options[:headers].nil?

  if options[:headers] === true
    csv << column_mapping.map { |f, _|  f.to_s.titleize }
  else
    csv << options[:headers]
  end
end