kovid 0.4.3 β 0.4.8
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +17 -15
- data/lib/kovid.rb +16 -0
- data/lib/kovid/cli.rb +24 -0
- data/lib/kovid/request.rb +57 -12
- data/lib/kovid/tablelize.rb +68 -35
- data/lib/kovid/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb4f2a55aae94609d2348161b6228065372705e980e4d3e35209a5e1d259371f
|
4
|
+
data.tar.gz: 45d8b57b5270fd21831cdb6153914a32a4c8d1dfbca65b922ca84b4443286ee9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75aa05406a1e3aa47a2f50dd92828c60f559a029e23d6dd155993d8a58c229b0bb90639378b7f5551410cfe9835c6e2bf4f0ea69dc039ab8b69b78f34272a5e1
|
7
|
+
data.tar.gz: a3aef9a944a811784c2c1b9503d3f958f76e130ce9698020ed74bcaad9383bcaee76a57fadf0671c4a0fc71a28bd5e6be1f3a14bd9547857159da5b9c48f8627
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -29,22 +29,20 @@ You can run `kovid --help` to see the full list of available commands.
|
|
29
29
|
* `kovid check COUNTRY` OR `kovid country COUNTRY`.
|
30
30
|
* `kovid check COUNTRY -f` OR `kovid check COUNTRY --full`.
|
31
31
|
|
32
|
-
|
32
|
+
You can get continental information with the following commands:
|
33
33
|
|
34
|
-
|
35
|
-
* `kovid
|
34
|
+
* `kovid africa`.
|
35
|
+
* `kovid europe`.
|
36
|
+
* `kovid eu`. (The European Union)
|
37
|
+
* `kovid sa`. (South America)
|
38
|
+
* `kovid asia`.
|
39
|
+
* `kovid world`. (Worldwide Statistics)
|
36
40
|
|
37
41
|
πΊπΈπΊπΈπΊπΈ
|
38
42
|
|
39
43
|
You can fetch US state-specific data:
|
40
44
|
* `kovid state STATE` OR `kovid state "STATE NAME"`.
|
41
45
|
|
42
|
-
##### π Upcoming Fetch Features π·ββοΈ
|
43
|
-
|
44
|
-
* `kovid europe` Aggrated stats on Europe
|
45
|
-
* `kovid africa` Aggrated stats on Africa
|
46
|
-
* `kovid asia` Aggrated stats on Asia
|
47
|
-
* `kovid south_america` Aggrated stats on South America
|
48
46
|
___
|
49
47
|
π· **Comparing**
|
50
48
|
* `kovid compare FOO BAR` (sorts by cases DESC).
|
@@ -61,8 +59,6 @@ ___
|
|
61
59
|
* `kovid history COUNTRY` (full history).
|
62
60
|
* `kovid history COUNTRY N` (history in the last N days).
|
63
61
|
___
|
64
|
-
π· **Total figures**
|
65
|
-
* `kovid world` (summary of reported incidents globally).
|
66
62
|
|
67
63
|
**NOTE:** If you find it irritating to have to type `kovid state STATE`, `covid state STATE` works as well.
|
68
64
|
|
@@ -75,19 +71,19 @@ To fetch basic data on a country run:
|
|
75
71
|
|
76
72
|
`kovid check ghana`. If the location contains spaces: `kovid check "Diamond Princess"`
|
77
73
|
|
78
|
-

|
79
75
|
|
80
76
|
For full table info on a country:
|
81
77
|
|
82
78
|
`kovid check italy -f` OR `kovid check italy --full`
|
83
79
|
|
84
|
-

|
85
81
|
|
86
82
|
To compare country stats:
|
87
83
|
|
88
|
-
`kovid compare germany poland`
|
84
|
+
`kovid compare germany poland spain`
|
89
85
|
|
90
|
-

|
91
87
|
|
92
88
|
To compare a countries stats with a full table:
|
93
89
|
|
@@ -107,6 +103,12 @@ To fetch EU data run:
|
|
107
103
|
|
108
104
|

|
109
105
|
|
106
|
+
To fetch data on Africa:
|
107
|
+
|
108
|
+
`kovid africa`
|
109
|
+
|
110
|
+

|
111
|
+
|
110
112
|
You can check historical statistics by running
|
111
113
|
|
112
114
|
`kovid history italy 7` eg:
|
data/lib/kovid.rb
CHANGED
@@ -14,6 +14,22 @@ module Kovid
|
|
14
14
|
Kovid::Request.eu_aggregate
|
15
15
|
end
|
16
16
|
|
17
|
+
def europe_aggregate
|
18
|
+
Kovid::Request.europe_aggregate
|
19
|
+
end
|
20
|
+
|
21
|
+
def africa_aggregate
|
22
|
+
Kovid::Request.africa_aggregate
|
23
|
+
end
|
24
|
+
|
25
|
+
def south_america_aggregate
|
26
|
+
Kovid::Request.south_america_aggregate
|
27
|
+
end
|
28
|
+
|
29
|
+
def asia_aggregate
|
30
|
+
Kovid::Request.asia_aggregate
|
31
|
+
end
|
32
|
+
|
17
33
|
def country(name)
|
18
34
|
Kovid::Request.by_country(name)
|
19
35
|
end
|
data/lib/kovid/cli.rb
CHANGED
@@ -59,6 +59,30 @@ module Kovid
|
|
59
59
|
data_source
|
60
60
|
end
|
61
61
|
|
62
|
+
desc 'europe', 'Returns aggregated data on Europe.'
|
63
|
+
def europe
|
64
|
+
puts Kovid.europe_aggregate
|
65
|
+
data_source
|
66
|
+
end
|
67
|
+
|
68
|
+
desc 'africa', 'Returns aggregated data on Africa.'
|
69
|
+
def africa
|
70
|
+
puts Kovid.africa_aggregate
|
71
|
+
data_source
|
72
|
+
end
|
73
|
+
|
74
|
+
desc 'sa', 'Returns aggregated data on South America.'
|
75
|
+
def sa
|
76
|
+
puts Kovid.south_america_aggregate
|
77
|
+
data_source
|
78
|
+
end
|
79
|
+
|
80
|
+
desc 'asia', 'Returns aggregated data on Asia.'
|
81
|
+
def asia
|
82
|
+
puts Kovid.asia_aggregate
|
83
|
+
data_source
|
84
|
+
end
|
85
|
+
|
62
86
|
desc 'version', 'Returns version of kovid'
|
63
87
|
def version
|
64
88
|
puts Kovid::VERSION
|
data/lib/kovid/request.rb
CHANGED
@@ -10,27 +10,52 @@ module Kovid
|
|
10
10
|
COUNTRIES_PATH = UriBuilder.new('/countries').url
|
11
11
|
STATES_URL = UriBuilder.new('/states').url
|
12
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
|
13
|
+
EUROPE_ISOS = EU_ISOS + %w[GB IS NO CH MC AD SM VA BA RS ME MK AL BY UA RU MD]
|
14
|
+
AFRICA_ISOS = %w[DZ AO BJ BW BF BI CM CV CF TD KM CD CG CI DJ EG GQ ER SZ ET GA GM GH GN GW KE LS LR LY MG MW ML MR MU MA MZ NA NE NG RW ST SN SC SL SO ZA SS SD TZ TG TN UG ZM ZW EH].freeze
|
15
|
+
SOUTH_AMERICA_ISOS = ['AR' 'BO', 'BV', 'BR', 'CL', 'CO', 'EC', 'FK', 'GF', 'GY', 'PY', 'PE', 'GS', 'SR', 'UY', 'VE'].freeze
|
16
|
+
ASIA_ISOS = %w[AE AF AM AZ BD BH BN BT CC CN CX GE HK ID IL IN IQ IR JO JP KG KH KP KR KW KZ LA LB LK MM MN MO MY NP OM PH PK PS QA SA SG SY TH TJ TL TM TR TW UZ VN YE].freeze
|
17
|
+
|
13
18
|
SERVER_DOWN = 'Server overwhelmed. Please try again in a moment.'
|
14
19
|
|
15
20
|
class << self
|
16
21
|
def eu_aggregate
|
17
|
-
|
22
|
+
eu_proc = proc do |data|
|
23
|
+
Kovid::Tablelize.eu_aggregate(data)
|
24
|
+
end
|
25
|
+
|
26
|
+
aggregator(EU_ISOS, eu_proc)
|
27
|
+
end
|
18
28
|
|
19
|
-
|
20
|
-
|
29
|
+
def europe_aggregate
|
30
|
+
europe_proc = proc do |data|
|
31
|
+
Kovid::Tablelize.europe_aggregate(data)
|
21
32
|
end
|
22
33
|
|
23
|
-
|
24
|
-
|
25
|
-
left ||= 0
|
26
|
-
right ||= 0
|
34
|
+
aggregator(EUROPE_ISOS, europe_proc)
|
35
|
+
end
|
27
36
|
|
28
|
-
|
29
|
-
|
37
|
+
def africa_aggregate
|
38
|
+
africa_proc = proc do |data|
|
39
|
+
Kovid::Tablelize.africa_aggregate(data)
|
40
|
+
end
|
30
41
|
|
31
|
-
|
32
|
-
|
33
|
-
|
42
|
+
aggregator(AFRICA_ISOS, africa_proc)
|
43
|
+
end
|
44
|
+
|
45
|
+
def south_america_aggregate
|
46
|
+
south_america_proc = proc do |data|
|
47
|
+
Kovid::Tablelize.south_america_aggregate(data)
|
48
|
+
end
|
49
|
+
|
50
|
+
aggregator(SOUTH_AMERICA_ISOS, south_america_proc)
|
51
|
+
end
|
52
|
+
|
53
|
+
def asia_aggregate
|
54
|
+
asia_proc = proc do |data|
|
55
|
+
Kovid::Tablelize.asia_aggregate(data)
|
56
|
+
end
|
57
|
+
|
58
|
+
aggregator(ASIA_ISOS, asia_proc)
|
34
59
|
end
|
35
60
|
|
36
61
|
def by_country(country_name)
|
@@ -151,6 +176,26 @@ module Kovid
|
|
151
176
|
|
152
177
|
states_array.select { |state_name| state_name['state'] == capitalize_words(state) }.first
|
153
178
|
end
|
179
|
+
|
180
|
+
def aggregator(isos, meth)
|
181
|
+
countries_array = JSON.parse(Typhoeus.get(UriBuilder.new('/countries').url, cache_ttl: 900).response_body)
|
182
|
+
|
183
|
+
country_array = countries_array.select do |hash|
|
184
|
+
isos.include?(hash['countryInfo']['iso2'])
|
185
|
+
end
|
186
|
+
|
187
|
+
head, *tail = country_array
|
188
|
+
data = head.merge(*tail) do |key, left, right|
|
189
|
+
left ||= 0
|
190
|
+
right ||= 0
|
191
|
+
|
192
|
+
left + right unless %w[country countryInfo].include?(key)
|
193
|
+
end.compact
|
194
|
+
|
195
|
+
meth === data
|
196
|
+
rescue JSON::ParserError
|
197
|
+
puts SERVER_DOWN
|
198
|
+
end
|
154
199
|
end
|
155
200
|
end
|
156
201
|
end
|
data/lib/kovid/tablelize.rb
CHANGED
@@ -28,7 +28,7 @@ module Kovid
|
|
28
28
|
'Deaths'.paint_red
|
29
29
|
].freeze
|
30
30
|
|
31
|
-
|
31
|
+
CONTINENTAL_AGGREGATE_HEADINGS = [
|
32
32
|
'Cases'.paint_white,
|
33
33
|
'Cases Today'.paint_white,
|
34
34
|
'Deaths'.paint_red,
|
@@ -49,6 +49,15 @@ module Kovid
|
|
49
49
|
'Cases/Million'.paint_white
|
50
50
|
].freeze
|
51
51
|
|
52
|
+
COMPARE_COUNTRIES_TABLE_HEADINGS = [
|
53
|
+
'Country'.paint_white,
|
54
|
+
'Cases'.paint_white,
|
55
|
+
'Cases Today'.paint_white,
|
56
|
+
'Deaths'.paint_red,
|
57
|
+
'Deaths Today'.paint_red,
|
58
|
+
'Recovered'.paint_green
|
59
|
+
].freeze
|
60
|
+
|
52
61
|
FOOTER_LINE = ['------------', '------------', '------------'].freeze
|
53
62
|
COUNTRY_LETTERS = 'A'.upto('Z').with_index(127_462).to_h.freeze
|
54
63
|
|
@@ -69,8 +78,6 @@ module Kovid
|
|
69
78
|
else
|
70
79
|
Terminal::Table.new(title: data['country'].upcase, headings: headings, rows: rows)
|
71
80
|
end
|
72
|
-
# TODO: Rafactor this
|
73
|
-
# TODO: Fix emoji
|
74
81
|
end
|
75
82
|
|
76
83
|
def full_country_table(data)
|
@@ -123,29 +130,25 @@ module Kovid
|
|
123
130
|
end
|
124
131
|
|
125
132
|
def compare_countries_table(data)
|
126
|
-
headings = [
|
127
|
-
'Country'.paint_white,
|
128
|
-
'Cases'.paint_white,
|
129
|
-
'Deaths'.paint_red,
|
130
|
-
'Recovered'.paint_green,
|
131
|
-
'Cases Today'.paint_white,
|
132
|
-
'Deaths Today'.paint_red
|
133
|
-
]
|
134
|
-
|
135
133
|
rows = []
|
136
134
|
|
137
135
|
data.each do |country|
|
138
|
-
|
139
|
-
country['country'].upcase,
|
136
|
+
base_rows = [
|
140
137
|
comma_delimit(country['cases']),
|
141
|
-
comma_delimit(country['deaths']),
|
142
|
-
comma_delimit(country['recovered']),
|
143
138
|
check_if_positve(country['todayCases']),
|
144
|
-
|
139
|
+
comma_delimit(country['deaths']),
|
140
|
+
check_if_positve(country['todayDeaths']),
|
141
|
+
comma_delimit(country['recovered'])
|
145
142
|
]
|
143
|
+
|
144
|
+
rows << if iso = country['countryInfo']['iso2']
|
145
|
+
base_rows.unshift("#{country_emoji(iso)} #{country['country'].upcase}")
|
146
|
+
else
|
147
|
+
base_rows.unshift(country['country'].upcase.to_s)
|
148
|
+
end
|
146
149
|
end
|
147
150
|
|
148
|
-
Terminal::Table.new(headings:
|
151
|
+
Terminal::Table.new(headings: COMPARE_COUNTRIES_TABLE_HEADINGS, rows: rows)
|
149
152
|
end
|
150
153
|
|
151
154
|
def compare_countries_table_full(data)
|
@@ -159,7 +162,6 @@ module Kovid
|
|
159
162
|
check_if_positve(country.fetch('todayDeaths')),
|
160
163
|
comma_delimit(country.fetch('critical')),
|
161
164
|
comma_delimit(country.fetch('casesPerOneMillion'))
|
162
|
-
|
163
165
|
]
|
164
166
|
end
|
165
167
|
|
@@ -269,22 +271,25 @@ module Kovid
|
|
269
271
|
end
|
270
272
|
|
271
273
|
def eu_aggregate(eu_data)
|
272
|
-
|
273
|
-
|
274
|
-
comma_delimit(eu_data['cases']),
|
275
|
-
check_if_positve(eu_data['todayCases']),
|
276
|
-
comma_delimit(eu_data['deaths']),
|
277
|
-
check_if_positve(eu_data['todayDeaths']),
|
278
|
-
comma_delimit(eu_data['recovered']),
|
279
|
-
comma_delimit(eu_data['active']),
|
280
|
-
comma_delimit(eu_data['critical'])
|
281
|
-
]
|
274
|
+
aggregated_table(eu_data, 'The EU', Kovid::Request::EU_ISOS, 'πͺπΊ')
|
275
|
+
end
|
282
276
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
277
|
+
def europe_aggregate(europe_data)
|
278
|
+
aggregated_table(europe_data, 'Europe', Kovid::Request::EUROPE_ISOS, 'π°')
|
279
|
+
end
|
280
|
+
|
281
|
+
def africa_aggregate(africa_data)
|
282
|
+
aggregated_table(africa_data, 'Africa', Kovid::Request::AFRICA_ISOS, 'π')
|
283
|
+
end
|
284
|
+
|
285
|
+
def south_america_aggregate(south_america_data)
|
286
|
+
aggregated_table(south_america_data,
|
287
|
+
'South America',
|
288
|
+
Kovid::Request::SOUTH_AMERICA_ISOS, 'π')
|
289
|
+
end
|
290
|
+
|
291
|
+
def asia_aggregate(asia_data)
|
292
|
+
aggregated_table(asia_data, 'Asia', Kovid::Request::ASIA_ISOS, 'π')
|
288
293
|
end
|
289
294
|
|
290
295
|
private
|
@@ -301,7 +306,8 @@ module Kovid
|
|
301
306
|
end
|
302
307
|
|
303
308
|
def country_emoji(iso)
|
304
|
-
COUNTRY_LETTERS.values_at(*iso.chars).pack('U*') +
|
309
|
+
COUNTRY_LETTERS.values_at(*iso.chars).pack('U*') + \
|
310
|
+
8203.chr(Encoding::UTF_8)
|
305
311
|
end
|
306
312
|
|
307
313
|
def transpose(load)
|
@@ -314,6 +320,33 @@ module Kovid
|
|
314
320
|
rows = [[msg]]
|
315
321
|
puts Terminal::Table.new title: 'SCALE', rows: rows
|
316
322
|
end
|
323
|
+
|
324
|
+
def aggregated_table(collated_data, continent, iso, emoji)
|
325
|
+
title = if emoji.codepoints.size > 1
|
326
|
+
emoji + 8203.chr(Encoding::UTF_8) + \
|
327
|
+
" Aggregated Data on #{continent} (#{iso.size} States)".upcase
|
328
|
+
else
|
329
|
+
emoji + \
|
330
|
+
" Aggregated Data on #{continent} (#{iso.size} States)".upcase
|
331
|
+
end
|
332
|
+
|
333
|
+
rows = []
|
334
|
+
rows << [
|
335
|
+
comma_delimit(collated_data['cases']),
|
336
|
+
check_if_positve(collated_data['todayCases']),
|
337
|
+
comma_delimit(collated_data['deaths']),
|
338
|
+
check_if_positve(collated_data['todayDeaths']),
|
339
|
+
comma_delimit(collated_data['recovered']),
|
340
|
+
comma_delimit(collated_data['active']),
|
341
|
+
comma_delimit(collated_data['critical'])
|
342
|
+
]
|
343
|
+
|
344
|
+
Terminal::Table.new(
|
345
|
+
title: title,
|
346
|
+
headings: CONTINENTAL_AGGREGATE_HEADINGS,
|
347
|
+
rows: rows
|
348
|
+
)
|
349
|
+
end
|
317
350
|
end
|
318
351
|
end
|
319
352
|
end
|
data/lib/kovid/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kovid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emmanuel Hayford
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|