kovid 0.2.5 → 0.3.1
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 +4 -4
- data/README.md +7 -4
- data/kovid.gemspec +1 -1
- data/lib/kovid/cli.rb +10 -2
- data/lib/kovid/painter.rb +5 -5
- data/lib/kovid/request.rb +5 -8
- data/lib/kovid/tablelize.rb +45 -21
- data/lib/kovid/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ced083e926d055a20281a468cc923214709badda8fa4a489bcbaa2a0a30aecfa
|
4
|
+
data.tar.gz: 88f862b715a3ba136683511700f68edfa2c25716e373152b4151ebaaf717e184
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a265dcf1170bed905c522ae4aa038b2368561f9aed9c56c1f3e8dd8db89464a4c8ed576b215f94c1a2a4f9687e4e754f3c12ad1dd24a1a30c316c700e04eb93f
|
7
|
+
data.tar.gz: 58780c213b132e4b5047386d8c03f3127a09ab51512d09892eaa1ea4ddeb08d507daaa335658746fd6579b85758a1d2eba2cc28906217ecbac6d4c41c37e3282
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
kovid (0.
|
5
|
-
|
4
|
+
kovid (0.3.0)
|
5
|
+
rainbow (~> 3.0)
|
6
6
|
terminal-table (~> 1.8)
|
7
7
|
thor (~> 1.0)
|
8
8
|
typhoeus (~> 1.3)
|
@@ -21,7 +21,6 @@ GEM
|
|
21
21
|
builder (3.2.4)
|
22
22
|
childprocess (3.0.0)
|
23
23
|
coderay (1.1.2)
|
24
|
-
colorize (0.8.1)
|
25
24
|
contracts (0.16.0)
|
26
25
|
cucumber (3.1.2)
|
27
26
|
builder (>= 2.1.2)
|
@@ -51,6 +50,7 @@ GEM
|
|
51
50
|
pry (0.12.2)
|
52
51
|
coderay (~> 1.1.0)
|
53
52
|
method_source (~> 0.9.0)
|
53
|
+
rainbow (3.0.0)
|
54
54
|
rake (12.3.3)
|
55
55
|
rspec (3.9.0)
|
56
56
|
rspec-core (~> 3.9.0)
|
@@ -89,4 +89,4 @@ DEPENDENCIES
|
|
89
89
|
simplecov
|
90
90
|
|
91
91
|
BUNDLED WITH
|
92
|
-
2.1.
|
92
|
+
2.1.4
|
data/README.md
CHANGED
@@ -4,7 +4,8 @@
|
|
4
4
|
|
5
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.
|
6
6
|
|
7
|
-
|
7
|
+
Code contribution and ideas welcome.
|
8
|
+
|
8
9
|
|
9
10
|
## ⚙️ Installation
|
10
11
|
|
@@ -14,6 +15,8 @@ Before installing:
|
|
14
15
|
|
15
16
|
✌️ Run `gem install kovid`
|
16
17
|
|
18
|
+
UPDATE often with `gem update kovid`
|
19
|
+
|
17
20
|
|
18
21
|
|
19
22
|
## ⚒️ Usage
|
@@ -24,7 +27,7 @@ You can run `kovid --help` to see the full list of available commands.
|
|
24
27
|
|
25
28
|
#### Commands Overview
|
26
29
|
😷 **Fetching**
|
27
|
-
* `kovid check COUNTRY`
|
30
|
+
* `kovid check COUNTRY` (`kovid country COUNTRY` works as well)
|
28
31
|
* `kovid check COUNTRY -f` OR `kovid check COUNTRY --full`
|
29
32
|
|
30
33
|
🇺🇸You can fetch US state-specific data 🇺🇸
|
@@ -37,8 +40,8 @@ You can run `kovid --help` to see the full list of available commands.
|
|
37
40
|
You can compare as many countries as you want.
|
38
41
|
|
39
42
|
😷 **History**
|
40
|
-
* `kovid history COUNTRY` (
|
41
|
-
* `kovid history COUNTRY N` (
|
43
|
+
* `kovid history COUNTRY` (full history)
|
44
|
+
* `kovid history COUNTRY N` (history in the last N days)
|
42
45
|
|
43
46
|
😷 **Total figures**
|
44
47
|
* `kovid cases`
|
data/kovid.gemspec
CHANGED
@@ -48,7 +48,7 @@ Gem::Specification.new do |spec|
|
|
48
48
|
spec.add_dependency "thor", "~> 1.0"
|
49
49
|
spec.add_dependency "terminal-table", "~> 1.8"
|
50
50
|
spec.add_dependency "typhoeus", "~> 1.3"
|
51
|
-
spec.add_dependency "
|
51
|
+
spec.add_dependency "rainbow", "~> 3.0"
|
52
52
|
|
53
53
|
spec.add_development_dependency "pry"
|
54
54
|
spec.add_development_dependency "cucumber"
|
data/lib/kovid/cli.rb
CHANGED
@@ -21,8 +21,16 @@ module Kovid
|
|
21
21
|
puts Kovid.country(name)
|
22
22
|
end
|
23
23
|
end
|
24
|
+
|
24
25
|
desc 'country COUNTRY or country "COUNTRY NAME"', 'Returns reported data on provided country. eg: "kovid country "hong kong".'
|
25
|
-
|
26
|
+
method_option :full, aliases: '-f'
|
27
|
+
def country(name)
|
28
|
+
if options[:full]
|
29
|
+
puts Kovid.country_full(name)
|
30
|
+
else
|
31
|
+
puts Kovid.country(name)
|
32
|
+
end
|
33
|
+
end
|
26
34
|
|
27
35
|
desc 'state STATE', 'Return reported data on provided state.'
|
28
36
|
def state(state)
|
@@ -43,7 +51,7 @@ module Kovid
|
|
43
51
|
puts Kovid.cases
|
44
52
|
end
|
45
53
|
|
46
|
-
desc 'history COUNTRY', 'Return history of incidents of COUNTRY'
|
54
|
+
desc 'history COUNTRY or history COUNTRY N', 'Return history of incidents of COUNTRY (in the last N days)'
|
47
55
|
def history(*params)
|
48
56
|
if params.size == 2
|
49
57
|
puts Kovid.history(params.first, params.last)
|
data/lib/kovid/painter.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'rainbow'
|
4
4
|
|
5
5
|
class String
|
6
6
|
def paint_white
|
7
|
-
|
7
|
+
Rainbow(self).white.bg(:black).bold
|
8
8
|
end
|
9
9
|
|
10
10
|
def paint_red
|
11
|
-
|
11
|
+
Rainbow(self).red.bg(:black).bold
|
12
12
|
end
|
13
13
|
|
14
14
|
def paint_green
|
15
|
-
|
15
|
+
Rainbow(self).green.bg(:black).bold
|
16
16
|
end
|
17
17
|
|
18
18
|
def paint_yellow
|
19
|
-
|
19
|
+
Rainbow(self).yellow.bg(:black).bold
|
20
20
|
end
|
21
21
|
end
|
data/lib/kovid/request.rb
CHANGED
@@ -8,6 +8,7 @@ require_relative 'uri_builder'
|
|
8
8
|
module Kovid
|
9
9
|
class Request
|
10
10
|
COUNTRIES_PATH = UriBuilder.new('/countries').url
|
11
|
+
STATES_URL = UriBuilder.new('/states').url
|
11
12
|
|
12
13
|
class << self
|
13
14
|
def by_country(country_name)
|
@@ -58,7 +59,7 @@ module Kovid
|
|
58
59
|
private
|
59
60
|
|
60
61
|
def no_case_in(country)
|
61
|
-
rows = [['No reported cases OR
|
62
|
+
rows = [['No reported cases OR wrong spelling of country/state!']]
|
62
63
|
Terminal::Table.new headings: ["You checked: #{country.capitalize}"], rows: rows
|
63
64
|
end
|
64
65
|
|
@@ -73,21 +74,17 @@ module Kovid
|
|
73
74
|
end
|
74
75
|
|
75
76
|
def fetch_country(country_name)
|
76
|
-
|
77
|
+
country_url = COUNTRIES_PATH + "/#{country_name}"
|
77
78
|
|
78
|
-
JSON.parse(Typhoeus.get(
|
79
|
+
JSON.parse(Typhoeus.get(country_url, cache_ttl: 900).response_body)
|
79
80
|
end
|
80
81
|
|
81
82
|
def fetch_state(state)
|
82
|
-
|
83
|
-
|
84
|
-
states_array = JSON.parse(Typhoeus.get(url, cache_ttl: 900).response_body)
|
83
|
+
states_array = JSON.parse(Typhoeus.get(STATES_URL, cache_ttl: 900).response_body)
|
85
84
|
|
86
85
|
states_array.select { |state_name| state_name['state'] == capitalize_words(state) }.first
|
87
86
|
end
|
88
87
|
|
89
|
-
private
|
90
|
-
|
91
88
|
def capitalize_words(string)
|
92
89
|
string.split.map(&:capitalize).join(' ')
|
93
90
|
end
|
data/lib/kovid/tablelize.rb
CHANGED
@@ -21,12 +21,19 @@ module Kovid
|
|
21
21
|
].freeze
|
22
22
|
|
23
23
|
FOOTER_LINE = ['------------', '------------', '------------', '------------'].freeze
|
24
|
+
COUNTRY_LETTERS = 'A'.upto('Z').with_index(127_462).to_h.freeze
|
24
25
|
|
25
26
|
def country_table(data)
|
26
27
|
headings = CASES_DEATHS_RECOVERED
|
27
28
|
rows = [[data['cases'], data['deaths'], data['recovered']]]
|
28
29
|
|
29
|
-
|
30
|
+
if iso = data['countryInfo']['iso2']
|
31
|
+
Terminal::Table.new(title: "#{data['country'].upcase}", headings: headings, rows: rows)
|
32
|
+
else
|
33
|
+
Terminal::Table.new(title: data['country'].upcase, headings: headings, rows: rows)
|
34
|
+
end
|
35
|
+
# TODO: Rafactor this
|
36
|
+
# TODO: Fix emoji
|
30
37
|
end
|
31
38
|
|
32
39
|
def full_country_table(data)
|
@@ -45,14 +52,22 @@ module Kovid
|
|
45
52
|
data['cases'],
|
46
53
|
data['deaths'],
|
47
54
|
data['recovered'],
|
48
|
-
data['todayCases'],
|
49
|
-
data['todayDeaths'],
|
55
|
+
check_if_positve(data['todayCases']),
|
56
|
+
check_if_positve(data['todayDeaths']),
|
50
57
|
data['critical'],
|
51
58
|
data['casesPerOneMillion']
|
52
59
|
]
|
53
|
-
|
54
|
-
|
55
|
-
|
60
|
+
|
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
|
70
|
+
# TODO: Rafactor this
|
56
71
|
end
|
57
72
|
|
58
73
|
def full_state_table(state)
|
@@ -61,16 +76,11 @@ module Kovid
|
|
61
76
|
'Cases Today'.paint_white,
|
62
77
|
'Deaths'.paint_red,
|
63
78
|
'Deaths Today'.paint_red,
|
64
|
-
'Recovered'.paint_green,
|
65
79
|
'Active'.paint_yellow
|
66
80
|
]
|
67
81
|
|
68
82
|
rows = []
|
69
|
-
rows << [state['cases'], state['todayCases'], state['deaths'], state['todayDeaths'], state['
|
70
|
-
|
71
|
-
puts
|
72
|
-
puts "‼️ Swap value of 'Recovered' for 'Active'. API scraper broke."
|
73
|
-
puts "‼️ So 'Active' is #{state['recovered']} and not #{state['active']}."
|
83
|
+
rows << [state['cases'], check_if_positve(state['todayCases']), state['deaths'], check_if_positve(state['todayDeaths']), state['active']]
|
74
84
|
|
75
85
|
Terminal::Table.new(title: state['state'].upcase, headings: headings, rows: rows)
|
76
86
|
end
|
@@ -86,7 +96,7 @@ module Kovid
|
|
86
96
|
rows = []
|
87
97
|
|
88
98
|
data.each do |country|
|
89
|
-
rows << [country['country'], country['cases'], country['deaths'], country['recovered']]
|
99
|
+
rows << [country['country'].upcase, comma_delimit(country['cases']), comma_delimit(country['deaths']), comma_delimit(country['recovered'])]
|
90
100
|
end
|
91
101
|
|
92
102
|
Terminal::Table.new(headings: headings, rows: rows)
|
@@ -109,13 +119,13 @@ module Kovid
|
|
109
119
|
data.each do |country|
|
110
120
|
rows << [
|
111
121
|
country['country'],
|
112
|
-
country['cases'],
|
113
|
-
country['deaths'],
|
114
|
-
country['recovered'],
|
115
|
-
country['todayCases'],
|
116
|
-
country['todayDeaths'],
|
117
|
-
country['critical'],
|
118
|
-
country['casesPerOneMillion']
|
122
|
+
comma_delimit(country['cases']),
|
123
|
+
comma_delimit(country['deaths']),
|
124
|
+
comma_delimit(country['recovered']),
|
125
|
+
check_if_positve(country['todayCases']),
|
126
|
+
check_if_positve(country['todayDeaths']),
|
127
|
+
comma_delimit(country['critical']),
|
128
|
+
comma_delimit(country['casesPerOneMillion'])
|
119
129
|
]
|
120
130
|
end
|
121
131
|
|
@@ -124,7 +134,13 @@ module Kovid
|
|
124
134
|
|
125
135
|
def cases(cases)
|
126
136
|
headings = CASES_DEATHS_RECOVERED
|
127
|
-
rows = [
|
137
|
+
rows = [
|
138
|
+
[
|
139
|
+
comma_delimit(cases['cases']),
|
140
|
+
comma_delimit(cases['deaths']),
|
141
|
+
comma_delimit(cases['recovered'])
|
142
|
+
]
|
143
|
+
]
|
128
144
|
|
129
145
|
Terminal::Table.new(title: 'Total Number of Incidents Worldwide'.upcase, headings: headings, rows: rows)
|
130
146
|
end
|
@@ -168,6 +184,14 @@ module Kovid
|
|
168
184
|
def comma_delimit(number)
|
169
185
|
number.to_s.chars.to_a.reverse.each_slice(3).map(&:join).join(',').reverse
|
170
186
|
end
|
187
|
+
|
188
|
+
def check_if_positve(num)
|
189
|
+
num.to_i.positive? ? "+#{comma_delimit(num)}" : comma_delimit(num).to_s
|
190
|
+
end
|
191
|
+
|
192
|
+
def country_emoji(iso)
|
193
|
+
COUNTRY_LETTERS.values_at(*iso.chars).pack('U*')
|
194
|
+
end
|
171
195
|
end
|
172
196
|
end
|
173
197
|
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
|
+
version: 0.3.1
|
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-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -53,19 +53,19 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rainbow
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0
|
61
|
+
version: '3.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0
|
68
|
+
version: '3.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|