class AmazonOrder::Writer

Public Class Methods

new(file_glob_pattern, options = {}) click to toggle source
# File lib/amazon_order/writer.rb, line 3
def initialize(file_glob_pattern, options = {})
  @file_glob_pattern = file_glob_pattern
  @output_dir = options.fetch(:output_dir, 'tmp')
end

Public Instance Methods

generate_csv() click to toggle source
# File lib/amazon_order/writer.rb, line 16
def generate_csv
  require 'csv'
  FileUtils.mkdir_p(@output_dir)
  %w[orders products].map do |resource|
    next if data[resource].blank?
    csv_file = "#{@output_dir}/#{resource}#{Time.current.strftime('%Y%m%d%H%M%S')}.csv"
    puts "    Writing #{csv_file}"
    CSV.open(csv_file, 'wb') do |csv|
      csv << attributes_for(resource)
      data[resource].each { |r| csv << r }
    end
    csv_file
  end
end
print_orders() click to toggle source
print_products() click to toggle source

Private Instance Methods

attributes_for(resource) click to toggle source
# File lib/amazon_order/writer.rb, line 46
def attributes_for(resource)
  case resource
  when 'orders'
    AmazonOrder::Parsers::Order::ATTRIBUTES
  when 'products'
    AmazonOrder::Parsers::Product::ATTRIBUTES
  end
end
data() click to toggle source
# File lib/amazon_order/writer.rb, line 33
def data
  @_data ||= begin
    data = {'orders' => [], 'products' => []}
    Dir.glob(@file_glob_pattern).each do |filepath|
      puts "    Parsing #{filepath}"
      parser = AmazonOrder::Parser.new(filepath)
      data['orders'] += parser.orders.map(&:values)
      data['products'] += parser.orders.map(&:products).flatten.map(&:values)
    end
    data
  end
end