kovid 0.2.7 β†’ 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c76d29e21beeda2615b7b70e435dbe253674a539fc8be8a30f6cd68eb7d3cf8
4
- data.tar.gz: 5a94f5237aaaf71800fbaf186bfc0d3a7ffdeb86d4448f2c8b15fb37126f0d2d
3
+ metadata.gz: 9f04b3f270cae0450368cdffa483d4968dfe6e260a19f4ff244dda25765fba32
4
+ data.tar.gz: f9381a8141630f18888ec65ced2c352eee1ddd7cd79c131e839fc77e1d4c9255
5
5
  SHA512:
6
- metadata.gz: ab21f119d7485688ecf81346c0efb070a0fd12c4caf4a7a90881a2266296e7135e131c72f1978eac7d79ba487760ee7c1ffb4a8d1ce94e485f4baa87c21b87b1
7
- data.tar.gz: 427582de7610751e7eb0eea746ec01fd33d4a6d3386711c515203d5d653279babf156cc259f4217fe6939db321de25c8cc155312c3902c9ebb4d26a8cbf169ab
6
+ metadata.gz: b09ebeaa677af45d87d3c37f347caaa9668d95e4c4d67c4462c68143b0dbe1c820faf1e50607acf0460d9acc88abc59958aa8390b1f88396c2ed127dac830fb9
7
+ data.tar.gz: 7c8a93f91fa8cc64e55cbb2ea055f2d5edc902dd7a5b1d984e0f5a76e967eaa3c239f63fc7f25d13cce4e22cb4e9e288c53ba8752a5bb5ebf41d39f5cdaca5fe
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kovid (0.2.6)
4
+ kovid (0.3.2)
5
5
  rainbow (~> 3.0)
6
6
  terminal-table (~> 1.8)
7
7
  thor (~> 1.0)
data/README.md CHANGED
@@ -1,59 +1,60 @@
1
1
  # 🦠 Kovid
2
2
 
3
- [gem]: https://rubygems.org/gems/kovid
4
-
5
- Kovid is a small CLI app to fetch data surrounding the coronavirus pandemic of 2019. I found myself checking [Wikipedia](https://en.wikipedia.org/wiki/2019%E2%80%9320_coronavirus_pandemic) constantly for information and since I work mostly in the terminal, like some of you, I thought I'd build this to put the data right at our fingertips.
3
+ Kovid is a small CLI app to fetch data surrounding the coronavirus pandemic of 2019. I found myself checking [Wikipedia](https://en.wikipedia.org/wiki/2019%E2%80%9320_coronavirus_pandemic) constantly for information so I thought I'd build this to provide info directly in the terminal. It's where some of us spend time more.
6
4
 
7
5
  Code contribution and ideas welcome.
8
6
 
9
7
 
10
8
  ## βš™οΈ Installation
11
9
 
12
- Before installing:
13
-
14
- ☝️ Wash your hands with soap and water for at least 20 seconds.
10
+ To install:
15
11
 
16
- ✌️ Run `gem install kovid`
17
-
18
- UPDATE often with `gem update kovid`
12
+ * ️ Wash your hands with soap and water for at least 20 seconds.
19
13
 
14
+ * Run `gem install kovid`.
20
15
 
16
+ It's recommended you update often with `gem update kovid`.
21
17
 
22
18
  ## βš’οΈ Usage
23
19
 
24
20
  You can run `kovid --help` to see the full list of available commands.
25
21
 
26
- **NOTE:** If you find it irritating to have to type `kovid state STATE`, `covid state STATE` works as well.
27
-
28
22
  #### Commands Overview
29
23
  😷 **Fetching**
30
- * `kovid check COUNTRY` (`kovid country COUNTRY` works as well)
31
- * `kovid check COUNTRY -f` OR `kovid check COUNTRY --full`
24
+ * `kovid check COUNTRY` OR `kovid country COUNTRY`.
25
+ * `kovid check COUNTRY -f` OR `kovid check COUNTRY --full`.
26
+
27
+ πŸ‡ͺπŸ‡ΊπŸ‡ͺπŸ‡ΊπŸ‡ͺπŸ‡Ί
28
+
29
+ You can fetch aggregated EU (all 27 countries combined) data:
30
+ * `kovid eu`.
31
+
32
+ πŸ‡ΊπŸ‡ΈπŸ‡ΊπŸ‡ΈπŸ‡ΊπŸ‡Έ
32
33
 
33
- πŸ‡ΊπŸ‡ΈYou can fetch US state-specific data πŸ‡ΊπŸ‡Έ
34
- * `kovid state STATE` OR `kovid state "STATE WITH SPACES"`
34
+ You can fetch US state-specific data:
35
+ * `kovid state STATE` OR `kovid state "STATE NAME"`.
35
36
 
36
37
  😷 **Comparing**
37
- * `kovid compare COUNTRYA COUNTRYB` (sorts by cases DESC)
38
- * `kovid compare COUNTRYA COUNTRYB -f` OR `kovid compare COUNTRYA COUNTRYB --full` (sorts by cases DESC)
38
+ * `kovid compare FOO BAR` (sorts by cases DESC).
39
+ * `kovid compare FOO BAR -f` OR `kovid compare FOO BAR --full` (sorts by cases DESC).
39
40
 
40
- You can compare as many countries as you want.
41
+ Where `FOO` and `BAR` are different countries.
42
+
43
+ You can compare as many countries as you want; `kovid compare FOO BAR BAZ` OR `kovid compare FOO BAR BAZ -f`
41
44
 
42
45
  😷 **History**
43
- * `kovid history COUNTRY` (full history)
44
- * `kovid history COUNTRY N` (history in the last N days)
46
+ * `kovid history COUNTRY` (full history).
47
+ * `kovid history COUNTRY N` (history in the last N days).
45
48
 
46
49
  😷 **Total figures**
47
- * `kovid cases`
48
-
50
+ * `kovid cases` (summary of reported incidents globally).
49
51
 
52
+ **NOTE:** If you find it irritating to have to type `kovid state STATE`, `covid state STATE` works as well.
50
53
 
51
54
  #### Commands Details
52
55
  To fetch basic data on a country run:
53
56
 
54
- `kovid check ghana`
55
-
56
- If the location contains spaces: `kovid check "Diamond Princess"`
57
+ `kovid check ghana`. If the location contains spaces: `kovid check "Diamond Princess"`
57
58
 
58
59
  ![kovid](https://i.gyazo.com/ab779c3fc838ac279bae5b9d6d10d617.png "Covid data.")
59
60
 
@@ -81,6 +82,12 @@ To fetch state-specific data run:
81
82
 
82
83
  ![kovid](https://i.gyazo.com/d00b1c5bbb6251cbd517f801c856ba66.png "Covid data.")
83
84
 
85
+ To fetch EU data run:
86
+
87
+ `kovid eu`
88
+
89
+ ![kovid](https://i.gyazo.com/51d2adcb8e9feb0a0fbe38ff9cf4c550.png "Covid data.")
90
+
84
91
  You can check historical statistics by running
85
92
 
86
93
  `kovid history italy 7` eg:
@@ -106,7 +113,7 @@ To install this gem onto your local machine, run `bundle exec rake install`.
106
113
 
107
114
  ## 🀲 Contributing
108
115
 
109
- There are multiple areas in this repo that can be improved or use some refactoring(there's a lot to be refactorted in fact!). For that reason, bug reports and pull requests are welcome! This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/siaw23/kovid/blob/master/CODE_OF_CONDUCT.md).
116
+ There are multiple areas in this repo that can be improved or use some refactoring(there's a lot to be refactored in fact!). For that reason, bug reports and pull requests are welcome! This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/siaw23/kovid/blob/master/CODE_OF_CONDUCT.md).
110
117
 
111
118
 
112
119
  ## πŸ”– License
@@ -14,6 +14,29 @@ Gem::Specification.new do |spec|
14
14
 
15
15
  spec.metadata["allowed_push_host"] = "https://rubygems.org/"
16
16
 
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = "https://github.com/siaw23/kovid"
19
+ spec.metadata["changelog_uri"] = "https://github.com/siaw23/kovid"
20
+
21
+ spec.add_dependency "thor", "~> 1.0"
22
+ spec.add_dependency "terminal-table", "~> 1.8"
23
+ spec.add_dependency "typhoeus", "~> 1.3"
24
+ spec.add_dependency "rainbow", "~> 3.0"
25
+
26
+ spec.add_development_dependency "pry"
27
+ spec.add_development_dependency "cucumber"
28
+ spec.add_development_dependency "aruba"
29
+ spec.add_development_dependency "simplecov"
30
+
31
+ # Specify which files should be added to the gem when it is released.
32
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
33
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
34
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
35
+ end
36
+ spec.bindir = "exe"
37
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
38
+ spec.require_paths = ["lib"]
39
+
17
40
  spec.post_install_message = %q{
18
41
  ============================================================================
19
42
  COVID-19 has devasted the world. But while we're fighting
@@ -31,27 +54,4 @@ Gem::Specification.new do |spec|
31
54
  Emmanuel Hayford.
32
55
  ============================================================================
33
56
  }
34
-
35
- spec.metadata["homepage_uri"] = spec.homepage
36
- spec.metadata["source_code_uri"] = "https://github.com/siaw23/kovid"
37
- spec.metadata["changelog_uri"] = "https://github.com/siaw23/kovid"
38
-
39
- # Specify which files should be added to the gem when it is released.
40
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
41
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
42
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
43
- end
44
- spec.bindir = "exe"
45
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
46
- spec.require_paths = ["lib"]
47
-
48
- spec.add_dependency "thor", "~> 1.0"
49
- spec.add_dependency "terminal-table", "~> 1.8"
50
- spec.add_dependency "typhoeus", "~> 1.3"
51
- spec.add_dependency "rainbow", "~> 3.0"
52
-
53
- spec.add_development_dependency "pry"
54
- spec.add_development_dependency "cucumber"
55
- spec.add_development_dependency "aruba"
56
- spec.add_development_dependency "simplecov"
57
57
  end
@@ -8,8 +8,8 @@ module Kovid
8
8
 
9
9
  module_function
10
10
 
11
- def whatis
12
- 'Coronavirus disease 2019 (COVID-19) is an infectious disease caused by severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2).'
11
+ def eu_aggregate
12
+ Kovid::Request.eu_aggregate
13
13
  end
14
14
 
15
15
  def country(name)
@@ -3,26 +3,29 @@
3
3
  require 'thor'
4
4
  require 'kovid'
5
5
 
6
+ # ["AT", "BE", "BG", "CY", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GR", "HR", "HU", "IE", "IT", "LT", "LU", "LV", "MT", "NL", "PL", "PT", "RO", "SE", "SI", "SK"]
7
+
8
+ # Czechia has no code
6
9
  module Kovid
7
10
  class CLI < Thor
8
11
  FULL_FLAG = %w[-f --full].freeze
9
12
 
10
- desc 'define', 'Defines COVID-19'
11
- def define
12
- puts Kovid.whatis
13
+ desc 'check EU', 'Returns aggregated data on the EU.'
14
+ def eu
15
+ puts Kovid.eu_aggregate
13
16
  end
14
17
 
15
18
  desc 'check COUNTRY or check "COUNTRY NAME"', 'Returns reported data on provided country. eg: "kovid check "hong kong".'
16
19
  method_option :full, aliases: '-f'
17
20
  def check(name)
18
- if options[:full]
19
- puts Kovid.country_full(name)
20
- else
21
- puts Kovid.country(name)
22
- end
21
+ fetch_country_stats(name)
23
22
  end
23
+
24
24
  desc 'country COUNTRY or country "COUNTRY NAME"', 'Returns reported data on provided country. eg: "kovid country "hong kong".'
25
- alias country check
25
+ method_option :full, aliases: '-f'
26
+ def country(name)
27
+ fetch_country_stats(name)
28
+ end
26
29
 
27
30
  desc 'state STATE', 'Return reported data on provided state.'
28
31
  def state(state)
@@ -51,5 +54,15 @@ module Kovid
51
54
  puts Kovid.history(params.first, nil)
52
55
  end
53
56
  end
57
+
58
+ private
59
+
60
+ def fetch_country_stats(country)
61
+ if options[:full]
62
+ puts Kovid.country_full(country)
63
+ else
64
+ puts Kovid.country(country)
65
+ end
66
+ end
54
67
  end
55
68
  end
@@ -9,8 +9,25 @@ module Kovid
9
9
  class Request
10
10
  COUNTRIES_PATH = UriBuilder.new('/countries').url
11
11
  STATES_URL = UriBuilder.new('/states').url
12
+ EU_ISOS = %w[AT BE BG CY CZ DE DK EE ES FI FR GR HR HU IE IT LT LU LV MT NL PL PT RO SE SI SK].freeze
12
13
 
13
14
  class << self
15
+ def eu_aggregate
16
+ countries_array = JSON.parse(Typhoeus.get(UriBuilder.new('/countries').url, cache_ttl: 900).response_body)
17
+
18
+ eu_array = countries_array.select do |hash|
19
+ EU_ISOS.include?(hash['countryInfo']['iso2']) || hash['country'] == 'Czechia'
20
+ # Check API later to see if ISO-Alpha-2 code has been added for Czechia
21
+ end
22
+
23
+ first, *rest = eu_array
24
+ eu_data = first.merge(*rest) do |key, left, right|
25
+ left + right unless %w[country countryInfo].include?(key)
26
+ end .compact
27
+
28
+ Kovid::Tablelize.eu_aggregate(eu_data)
29
+ end
30
+
14
31
  def by_country(country_name)
15
32
  response = fetch_country(country_name)
16
33
 
@@ -59,8 +76,8 @@ module Kovid
59
76
  private
60
77
 
61
78
  def no_case_in(country)
62
- rows = [['No reported cases OR wrong spelling of country/state!']]
63
- Terminal::Table.new headings: ["You checked: #{country.capitalize}"], rows: rows
79
+ rows = [["Wrong spelling of location/API has no info on #{country.upcase} at the moment."]]
80
+ Terminal::Table.new title: "You checked: #{country.upcase}", rows: rows
64
81
  end
65
82
 
66
83
  def fetch_countries(list)
@@ -28,11 +28,12 @@ module Kovid
28
28
  rows = [[data['cases'], data['deaths'], data['recovered']]]
29
29
 
30
30
  if iso = data['countryInfo']['iso2']
31
- Terminal::Table.new(title: "#{data['country'].upcase} #{country_emoji(iso)}", headings: headings, rows: rows)
31
+ Terminal::Table.new(title: data['country'].upcase.to_s, headings: headings, rows: rows)
32
32
  else
33
33
  Terminal::Table.new(title: data['country'].upcase, headings: headings, rows: rows)
34
34
  end
35
35
  # TODO: Rafactor this
36
+ # TODO: Fix emoji
36
37
  end
37
38
 
38
39
  def full_country_table(data)
@@ -57,15 +58,15 @@ module Kovid
57
58
  data['casesPerOneMillion']
58
59
  ]
59
60
 
60
- if iso = data['countryInfo']['iso2']
61
- Terminal::Table.new(title: "#{data['country'].upcase} #{country_emoji(iso)}",
62
- headings: headings,
63
- rows: rows)
64
- else
65
- Terminal::Table.new(title: data['country'].upcase,
66
- headings: headings,
67
- rows: rows)
68
- end
61
+ # if iso = data['countryInfo']['iso2']
62
+ # Terminal::Table.new(title: "#{data['country'].upcase} #{country_emoji(iso)}",
63
+ # headings: headings,
64
+ # rows: rows)
65
+ # else
66
+ Terminal::Table.new(title: data['country'].upcase,
67
+ headings: headings,
68
+ rows: rows)
69
+ # end
69
70
  # TODO: Rafactor this
70
71
  end
71
72
 
@@ -95,7 +96,7 @@ module Kovid
95
96
  rows = []
96
97
 
97
98
  data.each do |country|
98
- rows << [country['country'].upcase, country['cases'], country['deaths'], country['recovered']]
99
+ rows << [country['country'].upcase, comma_delimit(country['cases']), comma_delimit(country['deaths']), comma_delimit(country['recovered'])]
99
100
  end
100
101
 
101
102
  Terminal::Table.new(headings: headings, rows: rows)
@@ -118,13 +119,13 @@ module Kovid
118
119
  data.each do |country|
119
120
  rows << [
120
121
  country['country'],
121
- country['cases'],
122
- country['deaths'],
123
- country['recovered'],
122
+ comma_delimit(country['cases']),
123
+ comma_delimit(country['deaths']),
124
+ comma_delimit(country['recovered']),
124
125
  check_if_positve(country['todayCases']),
125
126
  check_if_positve(country['todayDeaths']),
126
- country['critical'],
127
- country['casesPerOneMillion']
127
+ comma_delimit(country['critical']),
128
+ comma_delimit(country['casesPerOneMillion'])
128
129
  ]
129
130
  end
130
131
 
@@ -133,7 +134,13 @@ module Kovid
133
134
 
134
135
  def cases(cases)
135
136
  headings = CASES_DEATHS_RECOVERED
136
- rows = [[cases['cases'], cases['deaths'], cases['recovered']]]
137
+ rows = [
138
+ [
139
+ comma_delimit(cases['cases']),
140
+ comma_delimit(cases['deaths']),
141
+ comma_delimit(cases['recovered'])
142
+ ]
143
+ ]
137
144
 
138
145
  Terminal::Table.new(title: 'Total Number of Incidents Worldwide'.upcase, headings: headings, rows: rows)
139
146
  end
@@ -172,6 +179,16 @@ module Kovid
172
179
  Terminal::Table.new(title: country['standardizedCountryName'].upcase, headings: headings, rows: rows)
173
180
  end
174
181
 
182
+ def eu_aggregate(eu_data)
183
+ headings = ['Cases'.paint_white, 'Cases Today'.paint_white, 'Deaths'.paint_red, 'Deaths Today'.paint_red, 'Recovered'.paint_green, 'Active'.paint_yellow, 'Critical'.paint_green]
184
+
185
+ rows = []
186
+
187
+ rows << [comma_delimit(eu_data['cases']), check_if_positve(eu_data['todayCases']), comma_delimit(eu_data['deaths']), check_if_positve(eu_data['todayDeaths']), comma_delimit(eu_data['recovered']), comma_delimit(eu_data['active']), comma_delimit(eu_data['critical'])]
188
+
189
+ Terminal::Table.new(title: 'EU Aggragation'.upcase, headings: headings, rows: rows)
190
+ end
191
+
175
192
  private
176
193
 
177
194
  def comma_delimit(number)
@@ -179,7 +196,7 @@ module Kovid
179
196
  end
180
197
 
181
198
  def check_if_positve(num)
182
- num.to_i.positive? ? "+#{num}" : num.to_s
199
+ num.to_i.positive? ? "+#{comma_delimit(num)}" : comma_delimit(num).to_s
183
200
  end
184
201
 
185
202
  def country_emoji(iso)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kovid
4
- VERSION = '0.2.7'
4
+ VERSION = '0.3.3'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kovid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emmanuel Hayford