class Idcf::Cli::Lib::Convert::Formatter::CsvFormat

csv formatter

Public Instance Methods

format(data) click to toggle source
# File lib/idcf/cli/lib/convert/formatter/csv_format.rb, line 11
def format(data)
  result = CSV.generate(force_quotes: true) do |csv|
    scrape_line(data).each do |v|
      csv << v
    end
  end

  result.strip
end

Protected Instance Methods

flat_hash(data) click to toggle source
# File lib/idcf/cli/lib/convert/formatter/csv_format.rb, line 83
def flat_hash(data)
  result = {}
  return result unless data.class == Hash
  data.each do |k, v|
    value = v
    value = JSON.generate(value) if v.class == Array || v.class == Hash
    result[k.to_sym] = value
  end
  result
end
make_header(first_list) click to toggle source
# File lib/idcf/cli/lib/convert/formatter/csv_format.rb, line 33
def make_header(first_list)
  result = []
  if first_list.class == Hash
    first_list.each_key do |k|
      result << k
    end
  else
    result = [*(0..(first_list.size - 1))]
  end
  result
end
push_list(list, headers, result) click to toggle source
# File lib/idcf/cli/lib/convert/formatter/csv_format.rb, line 45
def push_list(list, headers, result)
  list.each do |v|
    col = []
    headers.each do |h|
      col << v[h]
    end
    result << col
  end

  result
end
scrape(data) click to toggle source

scrape @param data [Hash] @return Array in Hash

# File lib/idcf/cli/lib/convert/formatter/csv_format.rb, line 60
def scrape(data)
  return [flat_hash(data)] if data.class == Hash
  return [[data]] unless data.class == Array

  two_dimensional(data)
end
scrape_line(data) click to toggle source
# File lib/idcf/cli/lib/convert/formatter/csv_format.rb, line 23
def scrape_line(data)
  list = scrape(data)
  return [] if list.size.zero?

  result = []
  headers = make_header(list.first)
  result << headers
  push_list(list, headers, result)
end
two_dimensional(list) click to toggle source

two dimensional @param list [Array] One-dimensional [array or Hash List] @return Array

# File lib/idcf/cli/lib/convert/formatter/csv_format.rb, line 70
def two_dimensional(list)
  [].tap do |result|
    list.each do |v|
      next if v.class == Array
      unless v.class == Hash
        result << [v]
        next
      end
      result << flat_hash(v)
    end
  end
end