class Covid19::Decorators::Table

Constants

DEFAULT_HEADER
LOCALITY

Public Class Methods

create(data:, locality: nil) click to toggle source
# File lib/covid19/decorators/table.rb, line 19
def self.create(data:, locality: nil)
  table = Text::Table.new

  # Specific data
  if data.is_a?(Hash)
    table.head = DEFAULT_HEADER
    table.rows = [align_fields(filter_data(data).values)]
  end

  # Data lists
  if data.is_a?(Array) && !locality.empty?
    table.head = DEFAULT_HEADER.unshift(locality)

    data.each { |line| table.rows << align_fields(filter_data(line).values) }
  end

  table.to_s
end

Private Class Methods

align_fields(data) click to toggle source
# File lib/covid19/decorators/table.rb, line 38
def self.align_fields(data)
  data.map { |field| { value: format_number(field), align: :right } }
end
filter_data(data) click to toggle source
# File lib/covid19/decorators/table.rb, line 42
def self.filter_data(data)
  organize_fields(data).select { |key, value| DEFAULT_HEADER.include?(key) }
end
format_number(number) click to toggle source
# File lib/covid19/decorators/table.rb, line 46
def self.format_number(number)
  number.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1 ")
end
organize_fields(data) click to toggle source
# File lib/covid19/decorators/table.rb, line 50
def self.organize_fields(data)
  if DEFAULT_HEADER.include?(LOCALITY[:continent])
    continent = data.slice(LOCALITY[:continent])
    data.delete(LOCALITY[:continent])

    return continent.merge(data)
  end

  data
end