kovid 0.6.4 → 0.6.9

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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'terminal-table'
4
4
  require 'date'
5
- require 'ascii_charts'
5
+ require_relative 'ascii_charts'
6
6
  require_relative 'painter'
7
7
  require_relative 'constants'
8
8
  require_relative 'aggregators'
@@ -16,120 +16,50 @@ module Kovid
16
16
 
17
17
  class << self
18
18
  def country_table(data)
19
- rows = [
20
- [
21
- comma_delimit(data['cases']),
22
- check_if_positve(data['todayCases']),
23
- comma_delimit(data['deaths']),
24
- check_if_positve(data['todayDeaths']),
25
- comma_delimit(data['recovered'])
26
- ]
27
- ]
28
-
29
- if (iso = data['countryInfo']['iso2'])
30
- Terminal::Table.new(title: "#{country_emoji(iso)} #{data['country'].upcase}",
31
- headings: CASES_DEATHS_RECOVERED_CTODAY_DTODAY,
32
- rows: rows)
33
- else
34
- Terminal::Table.new(title: data['country'].upcase,
35
- headings: CASES_DEATHS_RECOVERED_CTODAY_DTODAY,
36
- rows: rows)
37
- end
19
+ Terminal::Table.new(title: country_title(data),
20
+ headings: CASES_DEATHS_RECOVERED_CTODAY_DTODAY,
21
+ rows: [country_row(data)])
38
22
  end
39
23
 
40
24
  def full_country_table(data)
41
- rows = []
42
- rows << [
43
- comma_delimit(data['cases']),
44
- comma_delimit(data['deaths']),
45
- comma_delimit(data['recovered']),
46
- check_if_positve(data['todayCases']),
47
- check_if_positve(data['todayDeaths']),
48
- comma_delimit(data['critical']),
49
- comma_delimit(data['casesPerOneMillion'])
50
- ]
51
-
52
- if iso = data['countryInfo']['iso2']
53
- Terminal::Table.new(title: "#{country_emoji(iso)} #{data['country'].upcase}",
54
- headings: FULL_COUNTRY_TABLE_HEADINGS,
55
- rows: rows)
56
- else
57
- Terminal::Table.new(title: data['country'].upcase,
58
- headings: FULL_COUNTRY_TABLE_HEADINGS,
59
- rows: rows)
60
- end
25
+ Terminal::Table.new(title: country_title(data),
26
+ headings: FULL_COUNTRY_TABLE_HEADINGS,
27
+ rows: [full_country_row(data)])
61
28
  end
62
29
 
63
30
  def full_province_table(province)
64
- headings = [
65
- 'Confirmed'.paint_white,
66
- 'Deaths'.paint_red,
67
- 'Recovered'.paint_green
68
- ]
69
- rows = []
70
- rows << [province['stats']['confirmed'], province['stats']['deaths'], province['stats']['recovered']]
71
-
72
- Terminal::Table.new(title: province['province'].upcase, headings: headings, rows: rows)
31
+ Terminal::Table.new(
32
+ title: province['province'].upcase,
33
+ headings: FULL_PROVINCE_TABLE_HEADINGS,
34
+ rows: [province_row(province)]
35
+ )
73
36
  end
74
37
 
75
38
  def full_state_table(state)
76
- headings = [
77
- 'Cases'.paint_white,
78
- 'Cases Today'.paint_white,
79
- 'Deaths'.paint_red,
80
- 'Deaths Today'.paint_red,
81
- 'Active'.paint_yellow
82
- ]
83
-
84
- rows = []
85
- rows << [
86
- comma_delimit(state['cases']),
87
- check_if_positve(state['todayCases']),
88
- comma_delimit(state['deaths']),
89
- check_if_positve(state['todayDeaths']),
90
- comma_delimit(state['active'])
91
- ]
92
-
93
- Terminal::Table.new(title: state['state'].upcase, headings: headings, rows: rows)
39
+ Terminal::Table.new(
40
+ title: state['state'].upcase,
41
+ headings: FULL_STATE_TABLE_HEADINGS,
42
+ rows: [country_row(state)]
43
+ )
94
44
  end
95
45
 
96
46
  def compare_countries_table(data)
97
47
  rows = []
98
48
 
99
49
  data.each do |country|
100
- base_rows = [
101
- comma_delimit(country['cases']),
102
- check_if_positve(country['todayCases']),
103
- comma_delimit(country['deaths']),
104
- check_if_positve(country['todayDeaths']),
105
- comma_delimit(country['recovered'])
106
- ]
107
-
108
- rows << if (iso = country['countryInfo']['iso2'])
109
- base_rows.unshift("#{country_emoji(iso)} #{country['country'].upcase}")
110
- else
111
- base_rows.unshift(country['country'].upcase.to_s)
112
- end
50
+ base_rows = country_row(country)
51
+ rows << base_rows.unshift(country_title(country))
113
52
  end
114
53
 
115
54
  align_columns(:compare_country_table,
116
- Terminal::Table.new(headings: COMPARE_COUNTRIES_TABLE_HEADINGS,
117
- rows: rows))
55
+ Terminal::Table.new(
56
+ headings: COMPARE_COUNTRIES_TABLE_HEADINGS,
57
+ rows: rows
58
+ ))
118
59
  end
119
60
 
120
61
  def compare_countries_table_full(data)
121
- rows = data.map do |country|
122
- [
123
- country.fetch('country'),
124
- comma_delimit(country.fetch('cases')),
125
- comma_delimit(country.fetch('deaths')),
126
- comma_delimit(country.fetch('recovered')),
127
- check_if_positve(country.fetch('todayCases')),
128
- check_if_positve(country.fetch('todayDeaths')),
129
- comma_delimit(country.fetch('critical')),
130
- comma_delimit(country.fetch('casesPerOneMillion'))
131
- ]
132
- end
62
+ rows = data.map { |country| compare_countries_full_row(country) }
133
63
 
134
64
  align_columns(:compare_country_table_full,
135
65
  Terminal::Table.new(headings: COMPARE_COUNTRY_TABLE_FULL,
@@ -139,23 +69,9 @@ module Kovid
139
69
  def compare_us_states(data)
140
70
  rows = data.map.with_index do |state, index|
141
71
  if index.odd?
142
- [
143
- state.fetch('state').upcase,
144
- comma_delimit(state.fetch('cases')),
145
- check_if_positve(state['todayCases']),
146
- comma_delimit(state['deaths']),
147
- check_if_positve(state['todayDeaths']),
148
- comma_delimit(state.fetch('active'))
149
- ]
72
+ us_state_row(state)
150
73
  else
151
- [
152
- state.fetch('state').upcase.paint_highlight,
153
- comma_delimit(state.fetch('cases')).paint_highlight,
154
- check_if_positve(state['todayCases']).paint_highlight,
155
- comma_delimit(state['deaths']).paint_highlight,
156
- check_if_positve(state['todayDeaths']).paint_highlight,
157
- comma_delimit(state.fetch('active')).paint_highlight
158
- ]
74
+ us_state_row(state).map(&:paint_highlight)
159
75
  end
160
76
  end
161
77
 
@@ -165,14 +81,7 @@ module Kovid
165
81
  end
166
82
 
167
83
  def compare_provinces(data)
168
- rows = data.map do |province|
169
- [
170
- province['province'].upcase,
171
- province['stats']['confirmed'],
172
- province['stats']['deaths'],
173
- province['stats']['recovered']
174
- ]
175
- end
84
+ rows = data.map { |province| compare_provinces_row(province) }
176
85
 
177
86
  align_columns(:compare_provinces,
178
87
  Terminal::Table.new(headings: COMPARE_PROVINCES_HEADINGS,
@@ -180,29 +89,22 @@ module Kovid
180
89
  end
181
90
 
182
91
  def cases(cases)
183
- headings = CASES_DEATHS_RECOVERED
184
- rows = [
185
- [
186
- comma_delimit(cases['cases']),
187
- comma_delimit(cases['deaths']),
188
- comma_delimit(cases['recovered'])
189
- ]
190
- ]
191
-
192
- Terminal::Table.new(title: '🌍 Total Number of Incidents Worldwide'.upcase, headings: headings, rows: rows)
92
+ Terminal::Table.new(
93
+ title: '🌍 Total Number of Incidents Worldwide'.upcase,
94
+ headings: CASES_DEATHS_RECOVERED,
95
+ rows: [cases_row(cases)]
96
+ )
193
97
  end
194
98
 
195
99
  private
196
100
 
197
- def comma_delimit(number)
198
- number.to_s.chars.to_a.reverse.each_slice(3)
199
- .map(&:join)
200
- .join(',')
201
- .reverse
202
- end
203
-
204
- def check_if_positve(num)
205
- num.to_i.positive? ? "+#{comma_delimit(num)}" : comma_delimit(num).to_s
101
+ def country_title(data)
102
+ iso = data['countryInfo']['iso2']
103
+ if iso.nil?
104
+ data['country'].upcase
105
+ else
106
+ "#{country_emoji(iso)} #{data['country'].upcase}"
107
+ end
206
108
  end
207
109
 
208
110
  def country_emoji(iso)
@@ -210,10 +112,80 @@ module Kovid
210
112
  8203.chr(Encoding::UTF_8)
211
113
  end
212
114
 
213
- def transpose(load)
214
- load['timeline'].values.map(&:values).transpose.each do |data|
215
- data.map! { |number| comma_delimit(number) }
216
- end
115
+ def cases_row(data)
116
+ [
117
+ Kovid.comma_delimit(data['cases']),
118
+ Kovid.comma_delimit(data['deaths']),
119
+ Kovid.comma_delimit(data['recovered'])
120
+ ]
121
+ end
122
+
123
+ # Also works for state
124
+ def country_row(data)
125
+ [
126
+ Kovid.comma_delimit(data['cases']),
127
+ Kovid.add_plus_sign(data['todayCases']),
128
+ Kovid.comma_delimit(data['deaths']),
129
+ Kovid.add_plus_sign(data['todayDeaths']),
130
+ Kovid.comma_delimit(data['recovered'])
131
+ ]
132
+ end
133
+
134
+ def full_country_row(data)
135
+ [
136
+ Kovid.comma_delimit(data['cases']),
137
+ Kovid.comma_delimit(data['deaths']),
138
+ Kovid.comma_delimit(data['recovered']),
139
+ Kovid.add_plus_sign(data['todayCases']),
140
+ Kovid.add_plus_sign(data['todayDeaths']),
141
+ Kovid.comma_delimit(data['critical']),
142
+ Kovid.comma_delimit(data['casesPerOneMillion'])
143
+ ]
144
+ end
145
+
146
+ def province_row(data)
147
+ [
148
+ data['stats']['confirmed'],
149
+ data['stats']['deaths'],
150
+ data['stats']['recovered']
151
+ ]
152
+ end
153
+
154
+ def compare_provinces_row(data)
155
+ [
156
+ data['province'].upcase,
157
+ province_row(data)
158
+ ].flatten
159
+ end
160
+
161
+ def compare_countries_full_row(data)
162
+ [
163
+ data.fetch('country'),
164
+ full_country_row(data)
165
+ ].flatten
166
+ end
167
+
168
+ def us_state_row(data)
169
+ [
170
+ data.fetch('state').upcase,
171
+ Kovid.comma_delimit(data.fetch('cases')),
172
+ Kovid.add_plus_sign(data['todayCases']),
173
+ Kovid.comma_delimit(data['deaths']),
174
+ Kovid.add_plus_sign(data['todayDeaths']),
175
+ Kovid.comma_delimit(data.fetch('active'))
176
+ ]
177
+ end
178
+
179
+ def aggregated_row(data)
180
+ [
181
+ Kovid.comma_delimit(data['cases']),
182
+ Kovid.add_plus_sign(data['todayCases']),
183
+ Kovid.comma_delimit(data['deaths']),
184
+ Kovid.add_plus_sign(data['todayDeaths']),
185
+ Kovid.comma_delimit(data['recovered']),
186
+ Kovid.comma_delimit(data['active']),
187
+ Kovid.comma_delimit(data['critical'])
188
+ ]
217
189
  end
218
190
 
219
191
  def scale(msg)
@@ -222,32 +194,26 @@ module Kovid
222
194
  end
223
195
 
224
196
  def aggregated_table(collated_data, continent, iso, emoji)
225
- title = if emoji.codepoints.size > 1
226
- emoji + 8203.chr(Encoding::UTF_8) + \
227
- " Aggregated Data on #{continent} (#{iso.size} States)".upcase
228
- else
229
- emoji + \
230
- " Aggregated Data on #{continent} (#{iso.size} States)".upcase
231
- end
232
-
233
- rows = []
234
- rows << [
235
- comma_delimit(collated_data['cases']),
236
- check_if_positve(collated_data['todayCases']),
237
- comma_delimit(collated_data['deaths']),
238
- check_if_positve(collated_data['todayDeaths']),
239
- comma_delimit(collated_data['recovered']),
240
- comma_delimit(collated_data['active']),
241
- comma_delimit(collated_data['critical'])
242
- ]
197
+ title = aggregated_table_title(continent, iso, emoji)
243
198
 
244
199
  Terminal::Table.new(
245
200
  title: title,
246
201
  headings: CONTINENTAL_AGGREGATE_HEADINGS,
247
- rows: rows
202
+ rows: [aggregated_row(collated_data)]
248
203
  )
249
204
  end
250
205
 
206
+ def aggregated_table_title(continent, iso, emoji)
207
+ aggregated_data_continent = ' Aggregated Data on ' \
208
+ "#{continent} (#{iso.size} States)".upcase
209
+
210
+ if emoji.codepoints.size > 1
211
+ emoji + 8203.chr(Encoding::UTF_8) + aggregated_data_continent
212
+ else
213
+ emoji + aggregated_data_continent
214
+ end
215
+ end
216
+
251
217
  def align_columns(table_type, table)
252
218
  return table unless RIGHT_ALIGN_COLUMNS[table_type]
253
219
 
data/lib/kovid/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kovid
4
- VERSION = '0.6.4'
4
+ VERSION = '0.6.9'
5
5
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kovid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.9
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-04-09 00:00:00.000000000 Z
11
+ date: 2020-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: ascii_charts
14
+ name: carmen
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.1
19
+ version: 1.1.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.9.1
26
+ version: 1.1.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rainbow
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -105,6 +105,8 @@ extra_rdoc_files: []
105
105
  files:
106
106
  - ".gitignore"
107
107
  - ".rspec"
108
+ - ".rubocop.yml"
109
+ - ".rubocop_todo.yml"
108
110
  - ".travis.yml"
109
111
  - CODE_OF_CONDUCT.md
110
112
  - Gemfile
@@ -119,6 +121,7 @@ files:
119
121
  - kovid.gemspec
120
122
  - lib/kovid.rb
121
123
  - lib/kovid/aggregators.rb
124
+ - lib/kovid/ascii_charts.rb
122
125
  - lib/kovid/cache.rb
123
126
  - lib/kovid/cli.rb
124
127
  - lib/kovid/constants.rb