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