kovid 0.6.13 → 0.6.14
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 +11 -11
- data/lib/kovid/constants.rb +9 -3
- data/lib/kovid/helpers.rb +0 -6
- data/lib/kovid/historians.rb +33 -28
- data/lib/kovid/request.rb +22 -22
- data/lib/kovid/tablelize.rb +22 -9
- 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: 2896f04560ac519045555f79fc0d8cdcbcee7ed9069aecd1ebdbcba181584927
|
4
|
+
data.tar.gz: fe15af9091b1a03ae8ac6a78e712c5a7dc7dd1a7b433e45b9c6bdad05c709f22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a4260377fa1d38f2b9dd9f7b94bdcf3527e437f2c89e15d15d1a0b87df11a09934baa56a6d8b13f1e1a588b0590b4a1646f7ca6f9c96a141f1b2178054bc358
|
7
|
+
data.tar.gz: c9c313cf8982980845c5d73d5da9e9d9cab82738825762bbceb3a07e511f7ccae1d12516cadd80bfb86fa88c8a2dd4b58615db396a0ba901d7fa94fbddcd21c7
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
kovid (0.6.
|
4
|
+
kovid (0.6.13)
|
5
5
|
carmen (~> 1.1.3)
|
6
6
|
rainbow (~> 3.0)
|
7
7
|
terminal-table (~> 1.8)
|
@@ -11,12 +11,12 @@ PATH
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
-
activesupport (6.0.
|
14
|
+
activesupport (6.0.3.1)
|
15
15
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
16
16
|
i18n (>= 0.7, < 2)
|
17
17
|
minitest (~> 5.1)
|
18
18
|
tzinfo (~> 1.1)
|
19
|
-
zeitwerk (~> 2.2)
|
19
|
+
zeitwerk (~> 2.2, >= 2.2.2)
|
20
20
|
carmen (1.1.3)
|
21
21
|
activesupport (>= 3.0.0)
|
22
22
|
concurrent-ruby (1.1.6)
|
@@ -24,25 +24,25 @@ GEM
|
|
24
24
|
docile (1.3.2)
|
25
25
|
ethon (0.12.0)
|
26
26
|
ffi (>= 1.3.0)
|
27
|
-
ffi (1.
|
28
|
-
i18n (1.8.
|
27
|
+
ffi (1.13.0)
|
28
|
+
i18n (1.8.3)
|
29
29
|
concurrent-ruby (~> 1.0)
|
30
|
-
minitest (5.14.
|
30
|
+
minitest (5.14.1)
|
31
31
|
rainbow (3.0.0)
|
32
32
|
rake (12.3.3)
|
33
33
|
rspec (3.9.0)
|
34
34
|
rspec-core (~> 3.9.0)
|
35
35
|
rspec-expectations (~> 3.9.0)
|
36
36
|
rspec-mocks (~> 3.9.0)
|
37
|
-
rspec-core (3.9.
|
38
|
-
rspec-support (~> 3.9.
|
39
|
-
rspec-expectations (3.9.
|
37
|
+
rspec-core (3.9.2)
|
38
|
+
rspec-support (~> 3.9.3)
|
39
|
+
rspec-expectations (3.9.2)
|
40
40
|
diff-lcs (>= 1.2.0, < 2.0)
|
41
41
|
rspec-support (~> 3.9.0)
|
42
42
|
rspec-mocks (3.9.1)
|
43
43
|
diff-lcs (>= 1.2.0, < 2.0)
|
44
44
|
rspec-support (~> 3.9.0)
|
45
|
-
rspec-support (3.9.
|
45
|
+
rspec-support (3.9.3)
|
46
46
|
simplecov (0.18.5)
|
47
47
|
docile (~> 1.1)
|
48
48
|
simplecov-html (~> 0.11)
|
@@ -51,7 +51,7 @@ GEM
|
|
51
51
|
unicode-display_width (~> 1.1, >= 1.1.1)
|
52
52
|
thor (1.0.1)
|
53
53
|
thread_safe (0.3.6)
|
54
|
-
typhoeus (1.
|
54
|
+
typhoeus (1.4.0)
|
55
55
|
ethon (>= 0.9.0)
|
56
56
|
tzinfo (1.2.7)
|
57
57
|
thread_safe (~> 0.1)
|
data/lib/kovid/constants.rb
CHANGED
@@ -13,8 +13,9 @@ module Kovid
|
|
13
13
|
'Cases Today'.paint_white,
|
14
14
|
'Deaths'.paint_red,
|
15
15
|
'Deaths Today'.paint_red,
|
16
|
+
'Active'.paint_yellow,
|
16
17
|
'Recovered'.paint_green,
|
17
|
-
'Tests'.paint_white
|
18
|
+
'Tests'.paint_white
|
18
19
|
].freeze
|
19
20
|
|
20
21
|
DATE_CASES_DEATHS_RECOVERED = [
|
@@ -63,10 +64,12 @@ module Kovid
|
|
63
64
|
|
64
65
|
FULL_COUNTRY_TABLE_HEADINGS = [
|
65
66
|
'Cases'.paint_white,
|
66
|
-
'Deaths'.paint_red,
|
67
|
-
'Recovered'.paint_green,
|
68
67
|
'Cases Today'.paint_white,
|
68
|
+
'Deaths'.paint_red,
|
69
69
|
'Deaths Today'.paint_red,
|
70
|
+
'Active'.paint_yellow,
|
71
|
+
'Recovered'.paint_green,
|
72
|
+
'Tests'.paint_white,
|
70
73
|
'Critical'.paint_yellow,
|
71
74
|
'Cases/Million'.paint_white
|
72
75
|
].freeze
|
@@ -110,6 +113,9 @@ module Kovid
|
|
110
113
|
|
111
114
|
FOOTER_LINE_FOUR_COLUMNS = FOOTER_LINE_COLUMN * 4
|
112
115
|
|
116
|
+
# Add footer if rows exceed this number
|
117
|
+
ADD_FOOTER_SIZE = 10
|
118
|
+
|
113
119
|
COUNTRY_LETTERS = 'A'.upto('Z').with_index(127_462).to_h.freeze
|
114
120
|
|
115
121
|
RIGHT_ALIGN_COLUMNS = {
|
data/lib/kovid/helpers.rb
CHANGED
@@ -25,12 +25,6 @@ module Kovid
|
|
25
25
|
num.to_i.positive? ? "+#{comma_delimit(num)}" : comma_delimit(num).to_s
|
26
26
|
end
|
27
27
|
|
28
|
-
def format_country_history_numbers(load)
|
29
|
-
load['timeline'].values.map(&:values).transpose.each do |data|
|
30
|
-
data.map! { |number| Kovid.comma_delimit(number) }
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
28
|
def lookup_us_state(state)
|
35
29
|
us = Carmen::Country.coded('USA')
|
36
30
|
lookup = us.subregions.coded(state) || us.subregions.named(state)
|
data/lib/kovid/historians.rb
CHANGED
@@ -5,42 +5,32 @@ module Kovid
|
|
5
5
|
include Constants
|
6
6
|
include AsciiCharts
|
7
7
|
|
8
|
-
def history(
|
9
|
-
rows =
|
8
|
+
def history(data, days)
|
9
|
+
rows = history_rows(data, days)
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
if days.to_i >= 30
|
15
|
-
stats = stats.reject { |stat| stat[0].to_i.zero? && stat[1].to_i.zero? }
|
16
|
-
dates = dates.last(stats.count)
|
11
|
+
if rows.size > ADD_FOOTER_SIZE
|
12
|
+
rows << FOOTER_LINE_FOUR_COLUMNS
|
13
|
+
rows << DATE_CASES_DEATHS_RECOVERED
|
17
14
|
end
|
18
15
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
rows
|
23
|
-
|
16
|
+
Terminal::Table.new(
|
17
|
+
title: data['country'].try(:upcase),
|
18
|
+
headings: DATE_CASES_DEATHS_RECOVERED,
|
19
|
+
rows: rows
|
20
|
+
)
|
21
|
+
end
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
title = location['country'].try(:upcase)
|
28
|
-
col_format = DATE_CASES_DEATHS_RECOVERED
|
29
|
-
footer = FOOTER_LINE_FOUR_COLUMNS
|
30
|
-
else
|
31
|
-
title = location['state'].try(:upcase)
|
32
|
-
col_format = DATE_CASES_DEATHS
|
33
|
-
footer = FOOTER_LINE_THREE_COLUMNS
|
34
|
-
end
|
23
|
+
def history_us_state(data, days)
|
24
|
+
rows = history_rows(data, days)
|
35
25
|
|
36
|
-
if
|
37
|
-
rows <<
|
38
|
-
rows <<
|
26
|
+
if rows.size > ADD_FOOTER_SIZE
|
27
|
+
rows << FOOTER_LINE_THREE_COLUMNS
|
28
|
+
rows << DATE_CASES_DEATHS
|
39
29
|
end
|
40
30
|
|
41
31
|
Terminal::Table.new(
|
42
|
-
title:
|
43
|
-
headings:
|
32
|
+
title: data['state'].try(:upcase),
|
33
|
+
headings: DATE_CASES_DEATHS,
|
44
34
|
rows: rows
|
45
35
|
)
|
46
36
|
end
|
@@ -106,5 +96,20 @@ module Kovid
|
|
106
96
|
AsciiCharts::Cartesian.new(data, bar: true, hide_zero: true).draw
|
107
97
|
end
|
108
98
|
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def history_rows(data, days)
|
103
|
+
data['timeline']['cases'].map do |date, cases|
|
104
|
+
formatted_date = Kovid.dateman(date)
|
105
|
+
cases = Kovid.comma_delimit(cases)
|
106
|
+
deaths = Kovid.comma_delimit(data['timeline']['deaths'][date])
|
107
|
+
recovered = Kovid.comma_delimit(data['timeline']['recovered'][date]) if data['timeline'].has_key? 'recovered'
|
108
|
+
|
109
|
+
row = [formatted_date, cases, deaths]
|
110
|
+
row << recovered unless recovered.nil?
|
111
|
+
row
|
112
|
+
end.last(days.to_i)
|
113
|
+
end
|
109
114
|
end
|
110
115
|
end
|
data/lib/kovid/request.rb
CHANGED
@@ -162,13 +162,7 @@ module Kovid
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def history(country, days)
|
165
|
-
|
166
|
-
|
167
|
-
response = JSON.parse(
|
168
|
-
Typhoeus.get(
|
169
|
-
history_path + "/#{country}", cache_ttl: 900
|
170
|
-
).response_body
|
171
|
-
)
|
165
|
+
response = fetch_history(country)
|
172
166
|
|
173
167
|
if response.key?('message')
|
174
168
|
not_found(country) do |c|
|
@@ -182,14 +176,8 @@ module Kovid
|
|
182
176
|
end
|
183
177
|
|
184
178
|
def history_us_state(state, days)
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
response = JSON.parse(
|
189
|
-
Typhoeus.get(
|
190
|
-
history_path + "/#{state}", cache_ttl: 900
|
191
|
-
).response_body
|
192
|
-
)
|
179
|
+
state = Kovid.lookup_us_state(state).downcase
|
180
|
+
response = fetch_us_history(state)
|
193
181
|
|
194
182
|
if response.respond_to?(:key?) && response.key?('message')
|
195
183
|
return not_found(state)
|
@@ -201,22 +189,20 @@ module Kovid
|
|
201
189
|
cases = usacounties_aggregator(response, 'cases')
|
202
190
|
deaths = usacounties_aggregator(response, 'deaths')
|
203
191
|
|
204
|
-
# normalize data so we can call Kovid::Tablelize.history on US State data
|
205
192
|
response = {
|
206
193
|
'state' => state,
|
207
194
|
'timeline' => { 'cases' => cases, 'deaths' => deaths }
|
208
195
|
}
|
209
196
|
|
210
|
-
Kovid::Tablelize.
|
197
|
+
Kovid::Tablelize.history_us_state(response, days)
|
211
198
|
rescue JSON::ParserError
|
212
199
|
puts SERVER_DOWN
|
213
200
|
end
|
214
201
|
|
215
202
|
def histogram(country, date)
|
216
|
-
history_path = UriBuilder.new('/v2/historical').url
|
217
203
|
response = JSON.parse(
|
218
204
|
Typhoeus.get(
|
219
|
-
|
205
|
+
HISTORICAL_URL + "/#{country}", cache_ttl: 900
|
220
206
|
).response_body
|
221
207
|
)
|
222
208
|
|
@@ -312,6 +298,22 @@ module Kovid
|
|
312
298
|
end.first
|
313
299
|
end
|
314
300
|
|
301
|
+
def fetch_history(country)
|
302
|
+
JSON.parse(
|
303
|
+
Typhoeus.get(
|
304
|
+
HISTORICAL_URL + "/#{country}", cache_ttl: 900
|
305
|
+
).response_body
|
306
|
+
)
|
307
|
+
end
|
308
|
+
|
309
|
+
def fetch_us_history(state)
|
310
|
+
JSON.parse(
|
311
|
+
Typhoeus.get(
|
312
|
+
HISTORICAL_US_URL + "/#{state}", cache_ttl: 900
|
313
|
+
).response_body
|
314
|
+
)
|
315
|
+
end
|
316
|
+
|
315
317
|
def aggregator(isos, meth)
|
316
318
|
countries_array = JSON.parse(countries_request)
|
317
319
|
country_array = countries_array.select do |hash|
|
@@ -325,9 +327,7 @@ module Kovid
|
|
325
327
|
end
|
326
328
|
|
327
329
|
def countries_request
|
328
|
-
Typhoeus.get(
|
329
|
-
UriBuilder.new('/v2/countries').url, cache_ttl: 900
|
330
|
-
).response_body
|
330
|
+
Typhoeus.get(COUNTRIES_PATH, cache_ttl: 900).response_body
|
331
331
|
end
|
332
332
|
|
333
333
|
def countries_aggregator(country_array)
|
data/lib/kovid/tablelize.rb
CHANGED
@@ -39,7 +39,7 @@ module Kovid
|
|
39
39
|
Terminal::Table.new(
|
40
40
|
title: state['state'].upcase,
|
41
41
|
headings: FULL_STATE_TABLE_HEADINGS,
|
42
|
-
rows: [
|
42
|
+
rows: [state_row(state)]
|
43
43
|
)
|
44
44
|
end
|
45
45
|
|
@@ -136,7 +136,6 @@ module Kovid
|
|
136
136
|
]
|
137
137
|
end
|
138
138
|
|
139
|
-
# Also works for state
|
140
139
|
def country_row(data)
|
141
140
|
[
|
142
141
|
Kovid.comma_delimit(data['cases']),
|
@@ -144,6 +143,7 @@ module Kovid
|
|
144
143
|
Kovid.comma_delimit(data['deaths']),
|
145
144
|
Kovid.add_plus_sign(data['todayDeaths']),
|
146
145
|
Kovid.comma_delimit(data['active']),
|
146
|
+
Kovid.comma_delimit(data['recovered']),
|
147
147
|
Kovid.comma_delimit(data['tests'])
|
148
148
|
]
|
149
149
|
end
|
@@ -151,15 +151,29 @@ module Kovid
|
|
151
151
|
def full_country_row(data)
|
152
152
|
[
|
153
153
|
Kovid.comma_delimit(data['cases']),
|
154
|
-
Kovid.comma_delimit(data['deaths']),
|
155
|
-
Kovid.comma_delimit(data['recovered']),
|
156
154
|
Kovid.add_plus_sign(data['todayCases']),
|
155
|
+
Kovid.comma_delimit(data['deaths']),
|
157
156
|
Kovid.add_plus_sign(data['todayDeaths']),
|
157
|
+
Kovid.comma_delimit(data['active']),
|
158
|
+
Kovid.comma_delimit(data['recovered']),
|
159
|
+
Kovid.comma_delimit(data['tests']),
|
160
|
+
|
158
161
|
Kovid.comma_delimit(data['critical']),
|
159
162
|
Kovid.comma_delimit(data['casesPerOneMillion'])
|
160
163
|
]
|
161
164
|
end
|
162
165
|
|
166
|
+
def state_row(data)
|
167
|
+
[
|
168
|
+
Kovid.comma_delimit(data['cases']),
|
169
|
+
Kovid.add_plus_sign(data['todayCases']),
|
170
|
+
Kovid.comma_delimit(data['deaths']),
|
171
|
+
Kovid.add_plus_sign(data['todayDeaths']),
|
172
|
+
Kovid.comma_delimit(data['active']),
|
173
|
+
Kovid.comma_delimit(data['tests'])
|
174
|
+
]
|
175
|
+
end
|
176
|
+
|
163
177
|
def province_row(data)
|
164
178
|
[
|
165
179
|
data['stats']['confirmed'],
|
@@ -255,17 +269,16 @@ module Kovid
|
|
255
269
|
end
|
256
270
|
|
257
271
|
def top_heading(options)
|
258
|
-
|
259
|
-
|
260
|
-
end
|
272
|
+
full_country_table = ['Country'.paint_white] + FULL_COUNTRY_TABLE_HEADINGS
|
273
|
+
full_state_table = ['State'.paint_white] + FULL_STATE_TABLE_HEADINGS
|
261
274
|
|
262
|
-
[
|
275
|
+
options[:location] == :countries ? full_country_table : full_state_table
|
263
276
|
end
|
264
277
|
|
265
278
|
def top_title(options)
|
266
279
|
incident = options[:incident].to_s
|
267
280
|
location = options[:location].to_s
|
268
|
-
"🌍 Top #{options[:count]} #{location}
|
281
|
+
"🌍 Top #{options[:count]} #{location} by #{incident}".upcase
|
269
282
|
end
|
270
283
|
end
|
271
284
|
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.6.
|
4
|
+
version: 0.6.14
|
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-
|
11
|
+
date: 2020-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: carmen
|