class Blazer::ExcelParser

Attributes

excel[R]
query[R]

Public Class Methods

new(query, columns, rows) click to toggle source
# File lib/blazer/excel_parser.rb, line 4
def initialize(query, columns, rows)
  @query = query
  @columns = columns
  @rows = rows
  @excel = ::Axlsx::Package.new
end

Public Instance Methods

export() click to toggle source
# File lib/blazer/excel_parser.rb, line 11
def export
  load_data!
  save_file!
end

Private Instance Methods

blazer_time_value(key, value) click to toggle source
# File lib/blazer/excel_parser.rb, line 35
def blazer_time_value(key, value)
  value_with_time_zone = (value.in_time_zone(Blazer.time_zone) rescue value)
  if key.end_with?('_date')
    value_with_time_zone.strftime("%Y/%m/%d")
  elsif key.end_with?('_time')
    value_with_time_zone.strftime("%H:%M")
  elsif data_source.local_time_suffix.any? { |s| key.ends_with?(s) }
    value.to_s.sub(" UTC", "")
  else
    value_with_time_zone
  end
rescue
  return value
end
load_data!() click to toggle source
# File lib/blazer/excel_parser.rb, line 20
def load_data!
  excel.workbook.add_worksheet(name: "ID #{query.id}") do |sheet|
    sheet.add_row @columns
    @rows.each do |row|
      sheet.add_row row.each_with_index.map { |v, i| v.is_a?(Time) ? blazer_time_value(@columns[i], v) : v }
    end
  end
end
save_file!() click to toggle source
# File lib/blazer/excel_parser.rb, line 29
def save_file!
  tmp_file = Tempfile.new.path
  excel.serialize(tmp_file)
  return tmp_file
end