module CovidPT::Printer

Public Instance Methods

json(report) click to toggle source
# File lib/covid_pt/printer.rb, line 33
def json(report)
  report.to_json
end
md(report) click to toggle source
# File lib/covid_pt/printer.rb, line 20
def md(report)
  case report[:type]
  when "report"
    md_report(report)
  when "comparison"
    md_comparison(report)
  when "range"
    md_range(report)
  else
    "Error: unknown report type"
  end
end
pp(report) click to toggle source
# File lib/covid_pt/printer.rb, line 7
def pp(report)
  case report[:type]
  when "report"
    pp_report(report)
  when "comparison"
    pp_comparison(report)
  when "range"
    pp_range(report)
  else
    "Error: unknown report type"
  end
end

Private Instance Methods

diff_to_string(number) click to toggle source
# File lib/covid_pt/printer.rb, line 356
def diff_to_string(number)
  if number.negative?
    number.to_s
  else
    "+#{number}"
  end
end
md_comparison(report) click to toggle source
# File lib/covid_pt/printer.rb, line 243
    def md_comparison(report)
      overall = report[:overall]

      sorted_municipalities =
        report[:regional].
        sort_alphabetical_by(&:first).
        map { |m| "- **#{m.first}:** #{variation_to_string(m.last)}" }.
        join("\n")

      <<~MD
      # Relatório de Situação Nacional COVID-19

      Data: #{report[:dates][:from]} - #{report[:dates][:to]}

      ## Situação Nacional

      - **Total de casos suspeitos:** #{variation_to_string(overall[:total_suspect_cases])}
      - **Total de casos confirmados:** #{variation_to_string(overall[:total_confirmed_cases])}
      - **Total de casos não confirmados:** #{variation_to_string(overall[:total_unconfirmed_cases])}
      - **Aguardam resultado laboratorial:** #{variation_to_string(overall[:awaiting_lab_results])}
      - **Casos recuperados:** #{variation_to_string(overall[:total_recovered_cases])}
      - **Óbitos:** #{variation_to_string(overall[:total_deaths])}
      - **Total sob vigília:** #{variation_to_string(overall[:total_under_suspicion])}

      ### Situação Regional

      - **Total de Casos ARS Norte**: #{overall[:cases_in_north]}
      - **Total de Casos ARS Centro**: #{overall[:cases_in_centre]}
      - **Total de Casos ARS LVT**: #{overall[:cases_in_lisbon]}
      - **Total de Casos ARS Alentejo**: #{overall[:cases_in_alentejo]}
      - **Total de Casos ARS Algarve**: #{overall[:cases_in_algarve]}
      - **Total de Casos ARS Açores**: #{overall[:cases_in_azores]}
      - **Total de Casos ARS Madeira**: #{overall[:cases_in_madeira]}

      - **Total de Óbitos ARS Norte**: #{overall[:deaths_in_north]}
      - **Total de Óbitos ARS Centro**: #{overall[:deaths_in_centre]}
      - **Total de Óbitos ARS LVT**: #{overall[:deaths_in_lisbon]}
      - **Total de Óbitos ARS Alentejo**: #{overall[:deaths_in_alentejo]}
      - **Total de Óbitos ARS Algarve**: #{overall[:deaths_in_algarve]}
      - **Total de Óbitos ARS Açores**: #{overall[:deaths_in_azores]}
      - **Total de Óbitos ARS Madeira**: #{overall[:deaths_in_madeira]}

      ## Situação Municipal

      #{sorted_municipalities}
      MD
    end
md_range(report) click to toggle source
# File lib/covid_pt/printer.rb, line 291
    def md_range(report)
      overall = report[:overall]

      sorted_municipalities =
        report[:regional].
        sort_alphabetical_by(&:first).
        map { |m| "- **#{m.first}:** #{multiple_variations_to_string(m.last)}" }.
        join("\n")

      <<~MD
      # Relatório de Situação Nacional COVID-19

      Datas: #{report[:dates].first} - #{report[:dates].last}

      ## Situação Nacional

      - **Total de casos suspeitos:** #{multiple_variations_to_string(overall[:total_suspect_cases])}
      - **Total de casos confirmados:** #{multiple_variations_to_string(overall[:total_confirmed_cases])}
      - **Total de casos não confirmados:** #{multiple_variations_to_string(overall[:total_unconfirmed_cases])}
      - **Aguardam resultado laboratorial:** #{multiple_variations_to_string(overall[:awaiting_lab_results])}
      - **Casos recuperados:** #{multiple_variations_to_string(overall[:total_recovered_cases])}
      - **Óbitos:** #{multiple_variations_to_string(overall[:total_deaths])}
      - **Total sob vigília:** #{multiple_variations_to_string(overall[:total_under_suspicion])}

      ### Situação Regional

      - **Total de Casos ARS Norte**: #{overall[:cases_in_north]}
      - **Total de Casos ARS Centro**: #{overall[:cases_in_centre]}
      - **Total de Casos ARS LVT**: #{overall[:cases_in_lisbon]}
      - **Total de Casos ARS Alentejo**: #{overall[:cases_in_alentejo]}
      - **Total de Casos ARS Algarve**: #{overall[:cases_in_algarve]}
      - **Total de Casos ARS Açores**: #{overall[:cases_in_azores]}
      - **Total de Casos ARS Madeira**: #{overall[:cases_in_madeira]}

      - **Total de Óbitos ARS Norte**: #{overall[:deaths_in_north]}
      - **Total de Óbitos ARS Centro**: #{overall[:deaths_in_centre]}
      - **Total de Óbitos ARS LVT**: #{overall[:deaths_in_lisbon]}
      - **Total de Óbitos ARS Alentejo**: #{overall[:deaths_in_alentejo]}
      - **Total de Óbitos ARS Algarve**: #{overall[:deaths_in_algarve]}
      - **Total de Óbitos ARS Açores**: #{overall[:deaths_in_azores]}
      - **Total de Óbitos ARS Madeira**: #{overall[:deaths_in_madeira]}

      ## Situação Municipal

      #{sorted_municipalities}
      MD
    end
md_report(report) click to toggle source
# File lib/covid_pt/printer.rb, line 195
    def md_report(report)
      overall = report[:overall]

      sorted_municipalities =
        report[:regional].
        sort_alphabetical_by(&:first).
        map { |m| "- **#{m.first}:** #{m.last}" }.
        join("\n")

      <<~MD
      # Relatório de Situação Nacional COVID-19

      Data: #{report[:date]}

      ## Situação Nacional

      - **Total de casos suspeitos:** #{overall[:total_suspect_cases]}
      - **Total de casos confirmados:** #{overall[:total_confirmed_cases]}
      - **Total de casos não confirmados:** #{overall[:total_unconfirmed_cases]}
      - **Aguardam resultado laboratorial:** #{overall[:awaiting_lab_results]}
      - **Casos recuperados:** #{overall[:total_recovered_cases]}
      - **Óbitos:** #{overall[:total_deaths]}
      - **Total sob vigília:** #{overall[:total_under_suspicion]}

      ### Situação Regional

      - **Total de Casos ARS Norte**: #{overall[:cases_in_north]}
      - **Total de Casos ARS Centro**: #{overall[:cases_in_centre]}
      - **Total de Casos ARS LVT**: #{overall[:cases_in_lisbon]}
      - **Total de Casos ARS Alentejo**: #{overall[:cases_in_alentejo]}
      - **Total de Casos ARS Algarve**: #{overall[:cases_in_algarve]}
      - **Total de Casos ARS Açores**: #{overall[:cases_in_azores]}
      - **Total de Casos ARS Madeira**: #{overall[:cases_in_madeira]}

      - **Total de Óbitos ARS Norte**: #{overall[:deaths_in_north]}
      - **Total de Óbitos ARS Centro**: #{overall[:deaths_in_centre]}
      - **Total de Óbitos ARS LVT**: #{overall[:deaths_in_lisbon]}
      - **Total de Óbitos ARS Alentejo**: #{overall[:deaths_in_alentejo]}
      - **Total de Óbitos ARS Algarve**: #{overall[:deaths_in_algarve]}
      - **Total de Óbitos ARS Açores**: #{overall[:deaths_in_azores]}
      - **Total de Óbitos ARS Madeira**: #{overall[:deaths_in_madeira]}

      ## Situação Municipal

      #{sorted_municipalities}
      MD
    end
multiple_variations_to_string(variation) click to toggle source
# File lib/covid_pt/printer.rb, line 339
def multiple_variations_to_string(variation)
  variation[:values].each_with_index.inject("") do |acc, (value, idx)|
    if idx.zero?
      value.to_s
    else
      difference = variation[:differences][idx - 1]
      formatted_difference = diff_to_string(difference)

      acc + ", #{value} (#{formatted_difference})"
    end
  end
end
pp_comparison(report) click to toggle source
# File lib/covid_pt/printer.rb, line 91
    def pp_comparison(report)
      sorted_municipalities =
        report[:regional].
        sort_alphabetical_by(&:first).
        map { |m| "#{m.first}: #{variation_to_string(m.last)}" }.
        join("\n")

      overall = report[:overall]

      <<~TXT
      ###############################################
      #                                             #
      ### Relatório de Situação Nacional COVID-19 ###
      #                                             #
      ###############################################

      Data: #{report[:dates][:from]} - #{report[:dates][:to]}

      ### Situação Nacional

      Total de casos suspeitos: #{variation_to_string(overall[:total_suspect_cases])}
      Total de casos confirmados: #{variation_to_string(overall[:total_confirmed_cases])}
      Total de casos não confirmados: #{variation_to_string(overall[:total_unconfirmed_cases])}
      Aguardam resultado laboratorial: #{variation_to_string(overall[:awaiting_lab_results])}
      Casos recuperados: #{variation_to_string(overall[:total_recovered_cases])}
      Óbitos: #{variation_to_string(overall[:total_deaths])}
      Total sob vigília: #{variation_to_string(overall[:total_under_suspicion])}

      ### Situação Regional

      Total de Casos ARS Norte: #{variation_to_string(overall[:cases_in_north])}
      Total de Casos ARS Centro: #{variation_to_string(overall[:cases_in_centre])}
      Total de Casos ARS LVT: #{variation_to_string(overall[:cases_in_lisbon])}
      Total de Casos ARS Alentejo: #{variation_to_string(overall[:cases_in_alentejo])}
      Total de Casos ARS Algarve: #{variation_to_string(overall[:cases_in_algarve])}
      Total de Casos ARS Açores: #{variation_to_string(overall[:cases_in_azores])}
      Total de Casos ARS Madeira: #{variation_to_string(overall[:cases_in_madeira])}

      Total de Óbitos ARS Norte: #{variation_to_string(overall[:deaths_in_north])}
      Total de Óbitos ARS Centro: #{variation_to_string(overall[:deaths_in_centre])}
      Total de Óbitos ARS LVT: #{variation_to_string(overall[:deaths_in_lisbon])}
      Total de Óbitos ARS Alentejo: #{variation_to_string(overall[:deaths_in_alentejo])}
      Total de Óbitos ARS Algarve: #{variation_to_string(overall[:deaths_in_algarve])}
      Total de Óbitos ARS Açores: #{variation_to_string(overall[:deaths_in_azores])}
      Total de Óbitos ARS Madeira: #{variation_to_string(overall[:deaths_in_madeira])}

      ### Situação Municipal

      #{sorted_municipalities}
      TXT
    end
pp_range(report) click to toggle source
# File lib/covid_pt/printer.rb, line 143
    def pp_range(report)
      sorted_municipalities =
        report[:regional].
        sort_alphabetical_by(&:first).
        map { |m| "#{m.first}: #{multiple_variations_to_string(m.last)}" }.
        join("\n")

      overall = report[:overall]

      <<~TXT
      ###############################################
      #                                             #
      ### Relatório de Situação Nacional COVID-19 ###
      #                                             #
      ###############################################

      Datas: #{report[:dates].first} - #{report[:dates].last}

      ### Situação Nacional

      Total de casos suspeitos: #{multiple_variations_to_string(overall[:total_suspect_cases])}
      Total de casos confirmados: #{multiple_variations_to_string(overall[:total_confirmed_cases])}
      Total de casos não confirmados: #{multiple_variations_to_string(overall[:total_unconfirmed_cases])}
      Aguardam resultado laboratorial: #{multiple_variations_to_string(overall[:awaiting_lab_results])}
      Casos recuperados: #{multiple_variations_to_string(overall[:total_recovered_cases])}
      Óbitos: #{multiple_variations_to_string(overall[:total_deaths])}
      Total sob vigília: #{multiple_variations_to_string(overall[:total_under_suspicion])}

      ### Situação Regional

      Total de Casos ARS Norte: #{multiple_variations_to_string(overall[:cases_in_north])}
      Total de Casos ARS Centro: #{multiple_variations_to_string(overall[:cases_in_centre])}
      Total de Casos ARS LVT: #{multiple_variations_to_string(overall[:cases_in_lisbon])}
      Total de Casos ARS Alentejo: #{multiple_variations_to_string(overall[:cases_in_alentejo])}
      Total de Casos ARS Algarve: #{multiple_variations_to_string(overall[:cases_in_algarve])}
      Total de Casos ARS Açores: #{multiple_variations_to_string(overall[:cases_in_azores])}
      Total de Casos ARS Madeira: #{multiple_variations_to_string(overall[:cases_in_madeira])}

      Total de Óbitos ARS Norte: #{multiple_variations_to_string(overall[:deaths_in_north])}
      Total de Óbitos ARS Centro: #{multiple_variations_to_string(overall[:deaths_in_centre])}
      Total de Óbitos ARS LVT: #{multiple_variations_to_string(overall[:deaths_in_lisbon])}
      Total de Óbitos ARS Alentejo: #{multiple_variations_to_string(overall[:deaths_in_alentejo])}
      Total de Óbitos ARS Algarve: #{multiple_variations_to_string(overall[:deaths_in_algarve])}
      Total de Óbitos ARS Açores: #{multiple_variations_to_string(overall[:deaths_in_azores])}
      Total de Óbitos ARS Madeira: #{multiple_variations_to_string(overall[:deaths_in_madeira])}

      ### Situação Municipal

      #{sorted_municipalities}
      TXT
    end
pp_report(report) click to toggle source
# File lib/covid_pt/printer.rb, line 39
    def pp_report(report)
      sorted_municipalities =
        report[:regional].
        sort_alphabetical_by(&:first).
        map { |m| "#{m.first}: #{m.last}" }.
        join("\n")

      overall = report[:overall]

      <<~TXT
      ###############################################
      #                                             #
      ### Relatório de Situação Nacional COVID-19 ###
      #                                             #
      ###############################################

      Data: #{report[:date]}

      ### Situação Nacional

      Total de casos suspeitos: #{overall[:total_suspect_cases]}
      Total de casos confirmados: #{overall[:total_confirmed_cases]}
      Total de casos não confirmados: #{overall[:total_unconfirmed_cases]}
      Aguardam resultado laboratorial: #{overall[:awaiting_lab_results]}
      Casos recuperados: #{overall[:total_recovered_cases]}
      Óbitos: #{overall[:total_deaths]}
      Total sob vigília: #{overall[:total_under_suspicion]}

      ### Situação Regional

      Total de Casos ARS Norte: #{overall[:cases_in_north]}
      Total de Casos ARS Centro: #{overall[:cases_in_centre]}
      Total de Casos ARS LVT: #{overall[:cases_in_lisbon]}
      Total de Casos ARS Alentejo: #{overall[:cases_in_alentejo]}
      Total de Casos ARS Algarve: #{overall[:cases_in_algarve]}
      Total de Casos ARS Açores: #{overall[:cases_in_azores]}
      Total de Casos ARS Madeira: #{overall[:cases_in_madeira]}

      Total de Óbitos ARS Norte: #{overall[:deaths_in_north]}
      Total de Óbitos ARS Centro: #{overall[:deaths_in_centre]}
      Total de Óbitos ARS LVT: #{overall[:deaths_in_lisbon]}
      Total de Óbitos ARS Alentejo: #{overall[:deaths_in_alentejo]}
      Total de Óbitos ARS Algarve: #{overall[:deaths_in_algarve]}
      Total de Óbitos ARS Açores: #{overall[:deaths_in_azores]}
      Total de Óbitos ARS Madeira: #{overall[:deaths_in_madeira]}

      ### Situação Municipal

      #{sorted_municipalities}
      TXT
    end
variation_to_string(variation) click to toggle source
# File lib/covid_pt/printer.rb, line 352
def variation_to_string(variation)
  "#{variation[:value]} (#{diff_to_string(variation[:difference])})"
end