class SunatBooks::Csv::Base

Attributes

file[RW]

Public Class Methods

new(tickets, options = {}) click to toggle source
# File lib/sunat_books/csv/base.rb, line 14
def initialize(tickets, options = {})
  # options
  # - layout => Array of strings used to get data for csv
  # - filename
  raise SunatBooks::Csv::OptionError, "Layout option is required" if options[:layout].nil?

  filename = options[:filename] || "#{tmp_path}book.csv"
  fields = options[:layout]
  get_file(filename, fields, tickets)
end

Public Instance Methods

append_data(tickets, filename, fields) click to toggle source
# File lib/sunat_books/csv/base.rb, line 44
def append_data(tickets, filename, fields)
  tickets&.each do |ticket|
    data = []
    fields&.each do |field|
      data << available_value?(ticket, field)
    end
    append_to_csv(filename, data, "a+")
  end
end
append_headers(filename, fields) click to toggle source
# File lib/sunat_books/csv/base.rb, line 40
def append_headers(filename, fields)
  append_to_csv(filename, fields, "w+")
end
append_to_csv(filename, data, mode) click to toggle source
# File lib/sunat_books/csv/base.rb, line 54
def append_to_csv(filename, data, mode)
  return if data.nil?

  CSV.open(filename, mode) do |csv|
    csv << data
  end
end
get_file(filename, fields, tickets) click to toggle source
# File lib/sunat_books/csv/base.rb, line 25
def get_file(filename, fields, tickets)
  send("file=", filename)
  File.exist?(filename) ? File.delete(filename) : nil
  FileUtils.touch(filename)
  append_headers(filename, fields)
  append_data(tickets, filename, fields)
end
tmp_path() click to toggle source
# File lib/sunat_books/csv/base.rb, line 33
def tmp_path
  dir = File.dirname(__FILE__)
  tmp_path = "#{dir}/tmp/"
  Dir.mkdir(tmp_path) unless Dir.exist?(tmp_path)
  tmp_path
end