kovid 0.2.7 β†’ 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
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