kovid 0.6.2 → 0.6.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba5ca0fe0f0b4f13d4ae3fa0796df0fdda1bd0029c8e1f908a4ac7b79766f928
4
- data.tar.gz: 11328de6b6c9e1a4f4bad7bb42d65ed3575e0efc7677dc4aa916bfe1ba4b5000
3
+ metadata.gz: a77d1ad2686877dfe810f0df3cbc817b46c287f2a6025ce999108213ad0e54c8
4
+ data.tar.gz: 888dab7db56dc55241512e24bef98fb9f9117abd9e09790a19894630d691e0c2
5
5
  SHA512:
6
- metadata.gz: d3ad984c1cef60884ec75512763f759eca655c09d69d7db0a237a015fc78b05e2a2059fd84441d60aa090a08452df388c51cd10de51cf2ce52c2cce8c71da1b6
7
- data.tar.gz: 9277e293560db60a004a4f388789a790d5da74a3a650e39b21a6eca0f01e1431c54ad09a66cf467cf22a3f57c2dce94cba121185ab6e87096410d29a3e1586bf
6
+ metadata.gz: 6394d6904a073fef5c4fa1d6429c3789a84dfc329a519346dd90e53b082b22284405a044a13c984cf231f7cdd02fb790c49450c47c1d6c0fecb124fbc67783e5
7
+ data.tar.gz: 7c45571d9683f723068c6d17a97427348c5d3f8ed64db76e2bd71db72af322f3611bd0d66af8dc3732d4a251f1253d2ea0d49c0db34f8c905739f7cc7dd885cc
@@ -0,0 +1,7 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ AllCops:
4
+ TargetRubyVersion: 2.6
5
+
6
+ Style/Documentation:
7
+ Enabled: false
@@ -0,0 +1,59 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2020-04-07 20:38:28 -0300 using RuboCop version 0.67.2.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 2
10
+ Metrics/AbcSize:
11
+ Max: 54
12
+ Exclude:
13
+ - 'lib/kovid/historians.rb'
14
+
15
+ # Offense count: 2
16
+ Metrics/BlockLength:
17
+ Exclude:
18
+ - 'kovid.gemspec'
19
+ - 'spec/kovid_spec.rb'
20
+
21
+ # Offense count: 3
22
+ # Configuration parameters: CountComments.
23
+ Metrics/ClassLength:
24
+ Max: 220
25
+ Exclude:
26
+ - 'lib/kovid/cli.rb'
27
+ - 'lib/kovid/request.rb'
28
+ - 'lib/kovid/tablelize.rb'
29
+
30
+ # Offense count: 2
31
+ # Configuration parameters: CountComments, ExcludedMethods.
32
+ Metrics/MethodLength:
33
+ Max: 44
34
+ Exclude:
35
+ - 'lib/kovid/historians.rb'
36
+
37
+ # Offense count: 1
38
+ Metrics/PerceivedComplexity:
39
+ Max: 8
40
+ Exclude:
41
+ - 'lib/kovid/historians.rb'
42
+
43
+ # Offense count: 1
44
+ Style/CaseEquality:
45
+ Exclude:
46
+ - 'lib/kovid/request.rb'
47
+
48
+ Style/Documentation:
49
+ Exclude:
50
+ - 'spec/**/*'
51
+ - 'test/**/*'
52
+ - 'lib/kovid.rb'
53
+ - 'lib/kovid/helpers.rb'
54
+
55
+ # Offense count: 5
56
+ Style/MultilineBlockChain:
57
+ Exclude:
58
+ - 'lib/kovid/historians.rb'
59
+ - 'lib/kovid/request.rb'
data/Gemfile CHANGED
@@ -7,3 +7,6 @@ gemspec
7
7
 
8
8
  gem 'rake', '~> 12.0'
9
9
  gem 'rspec', '~> 3.0'
10
+
11
+ # Repo of geogrpahic locations
12
+ gem 'carmen', '~> 1.1.3'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kovid (0.6.1)
4
+ kovid (0.6.6)
5
5
  ascii_charts (~> 0.9.1)
6
6
  rainbow (~> 3.0)
7
7
  terminal-table (~> 1.8)
@@ -11,12 +11,24 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
+ activesupport (6.0.2.2)
15
+ concurrent-ruby (~> 1.0, >= 1.0.2)
16
+ i18n (>= 0.7, < 2)
17
+ minitest (~> 5.1)
18
+ tzinfo (~> 1.1)
19
+ zeitwerk (~> 2.2)
14
20
  ascii_charts (0.9.1)
21
+ carmen (1.1.3)
22
+ activesupport (>= 3.0.0)
23
+ concurrent-ruby (1.1.6)
15
24
  diff-lcs (1.3)
16
25
  docile (1.3.2)
17
26
  ethon (0.12.0)
18
27
  ffi (>= 1.3.0)
19
28
  ffi (1.12.2)
29
+ i18n (1.8.2)
30
+ concurrent-ruby (~> 1.0)
31
+ minitest (5.14.0)
20
32
  rainbow (3.0.0)
21
33
  rake (12.3.3)
22
34
  rspec (3.9.0)
@@ -39,14 +51,19 @@ GEM
39
51
  terminal-table (1.8.0)
40
52
  unicode-display_width (~> 1.1, >= 1.1.1)
41
53
  thor (1.0.1)
54
+ thread_safe (0.3.6)
42
55
  typhoeus (1.3.1)
43
56
  ethon (>= 0.9.0)
57
+ tzinfo (1.2.7)
58
+ thread_safe (~> 0.1)
44
59
  unicode-display_width (1.7.0)
60
+ zeitwerk (2.3.0)
45
61
 
46
62
  PLATFORMS
47
63
  ruby
48
64
 
49
65
  DEPENDENCIES
66
+ carmen (~> 1.1.3)
50
67
  kovid!
51
68
  rake (~> 12.0)
52
69
  rspec (~> 3.0)
data/README.md CHANGED
@@ -46,6 +46,8 @@ You can fetch US state-specific data:
46
46
  * `kovid state STATE` OR `kovid state "STATE NAME"`.
47
47
  * `kovid states --all` or `kovid states -a` for data on all US states.
48
48
 
49
+ You can also use USPS abbreviations. Example: `kovid state me`
50
+
49
51
  Provinces
50
52
 
51
53
  You can fetch province specific data:
@@ -64,7 +66,7 @@ You can compare as many countries as you want; `kovid compare FOO BAR BAZ` OR `k
64
66
  🇺🇸🇺🇸🇺🇸
65
67
 
66
68
  You can compare US states with:
67
- * `kovid states STATE STATE` Example: `kovid states illinois "new york" california`
69
+ * `kovid states STATE STATE` Example: `kovid states illinois "new york" california` OR `kovid states il ny ca`
68
70
 
69
71
  You can compare provicnes with:
70
72
  * `kovid provinces PROVINCE PROVINCE` Example: `kovid provinces ontario manitoba`
data/Rakefile CHANGED
@@ -7,3 +7,4 @@ RSpec::Core::RakeTask.new(:spec)
7
7
 
8
8
  # rubocop:disable Style/HashSyntax
9
9
  task :default => :spec
10
+ # rubocop:enable Style/HashSyntax
@@ -8,8 +8,10 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['Emmanuel Hayford']
9
9
  spec.email = ['siawmensah@gmail.com']
10
10
 
11
- spec.summary = 'A CLI to fetch and compare the 2019 coronavirus pandemic statistics.'
12
- spec.description = 'A CLI to fetch and compare the 2019 coronavirus pandemic statistics.'
11
+ summary = 'A CLI to fetch and compare the 2019 ' \
12
+ 'coronavirus pandemic statistics.'
13
+ spec.summary = summary
14
+ spec.description = summary
13
15
  spec.homepage = 'https://github.com/siaw23/kovid'
14
16
  spec.license = 'MIT'
15
17
  spec.required_ruby_version = Gem::Requirement.new('>= 2.4.0')
@@ -29,9 +31,12 @@ Gem::Specification.new do |spec|
29
31
  spec.add_development_dependency 'simplecov', '~> 0.18'
30
32
 
31
33
  # 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.
34
+ # The `git ls-files -z` loads the files in the RubyGem
35
+ # that have been added into git.
33
36
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
34
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
37
+ `git ls-files -z`.split("\x0").reject do |f|
38
+ f.match(%r{^(test|spec|features)/})
39
+ end
35
40
  end
36
41
  spec.bindir = 'exe'
37
42
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -6,8 +6,6 @@ require 'kovid/request'
6
6
  module Kovid
7
7
  require 'kovid/helpers'
8
8
 
9
- class Error < StandardError; end
10
-
11
9
  module_function
12
10
 
13
11
  def eu_aggregate
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kovid
4
+ module Aggregators
5
+ def eu_aggregate(eu_data)
6
+ aggregated_table(eu_data, 'The EU', Kovid::Request::EU_ISOS, '🇪🇺')
7
+ end
8
+
9
+ def europe_aggregate(europe_data)
10
+ aggregated_table(europe_data, 'Europe', Kovid::Request::EUROPE_ISOS, '🏰')
11
+ end
12
+
13
+ def africa_aggregate(africa_data)
14
+ aggregated_table(africa_data, 'Africa',
15
+ Kovid::Request::AFRICA_ISOS, '🌍')
16
+ end
17
+
18
+ def south_america_aggregate(south_america_data)
19
+ aggregated_table(south_america_data,
20
+ 'South America',
21
+ Kovid::Request::SOUTH_AMERICA_ISOS, '🌎')
22
+ end
23
+
24
+ def asia_aggregate(asia_data)
25
+ aggregated_table(asia_data, 'Asia', Kovid::Request::ASIA_ISOS, '🌏')
26
+ end
27
+ end
28
+ end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'typhoeus'
4
-
5
4
  module Kovid
6
5
  class Cache
7
6
  def initialize
@@ -5,37 +5,47 @@ require 'kovid'
5
5
 
6
6
  module Kovid
7
7
  class CLI < Thor
8
- FULL_FLAG = %w[-f --full].freeze
9
-
10
8
  def self.exit_on_failure?
11
9
  true
12
10
  end
13
11
 
14
- desc 'province PROVINCE or province "PROVINCE NAME"', 'Returns reported data on provided province. eg "kovid check "new brunswick".'
12
+ desc 'province PROVINCE or province "PROVINCE NAME"',
13
+ 'Returns reported data on provided province. ' \
14
+ 'eg "kovid check "new brunswick".'
15
15
  method_option :full, aliases: '-p'
16
16
  def province(name)
17
17
  puts Kovid.province(name)
18
18
  data_source
19
19
  end
20
20
 
21
- desc 'provinces PROVINCE PROVINCE', 'Returns full comparison table for the given provinces. Accepts multiple provinces.'
21
+ desc 'provinces PROVINCE PROVINCE',
22
+ 'Returns full comparison table for the given provinces. ' \
23
+ 'Accepts multiple provinces.'
22
24
  def provinces(*names)
23
25
  puts Kovid.provinces(names)
24
26
  data_source
25
27
  end
26
28
 
27
- desc 'check COUNTRY or check "COUNTRY NAME"', 'Returns reported data on provided country. eg: "kovid check "hong kong".'
29
+ desc 'check COUNTRY or check "COUNTRY NAME"',
30
+ 'Returns reported data on provided country. ' \
31
+ 'eg: "kovid check "hong kong".'
28
32
  method_option :full, aliases: '-f'
29
- def check(name)
30
- fetch_country_stats(name)
33
+ def check(*name)
34
+ if name.size == 1
35
+ fetch_country_stats(name.pop)
36
+ elsif options[:full]
37
+ puts Kovid.country_comparison_full(name)
38
+ else
39
+ puts Kovid.country_comparison(name)
40
+ end
31
41
  data_source
32
42
  end
43
+ map country: :check
33
44
 
34
- desc 'country COUNTRY or country "COUNTRY NAME"', 'Returns reported data on provided country. eg: "kovid country "hong kong".'
35
- method_option :full, aliases: '-f'
36
- def country(name)
37
- fetch_country_stats(name)
38
- data_source
45
+ desc 'compare COUNTRY COUNTRY', 'Deprecated. Will be removed in v7.0.0'
46
+ def compare(*_name)
47
+ Kovid.info_table("#compare is deprecated and will be removed in v7.0.0. \
48
+ \nPlease do `kovid check COUNTRY COUNTRY ...` instead.")
39
49
  end
40
50
 
41
51
  desc 'state STATE', 'Return reported data on provided state.'
@@ -44,29 +54,18 @@ module Kovid
44
54
  data_source
45
55
  end
46
56
 
47
- desc 'compare COUNTRY COUNTRY', 'Returns full comparison table for given countries. Accepts multiple countries.'
48
- def compare(*name)
49
- if FULL_FLAG.include?(name.fetch(-1))
50
- puts Kovid.country_comparison_full(name[0..-2])
57
+ desc 'states STATE STATE or states --all',
58
+ 'Returns full comparison table for the given states. ' \
59
+ 'Accepts multiple states.'
60
+ method_option :all, aliases: '-a'
61
+ def states(*states)
62
+ if options[:all]
63
+ puts Kovid.all_us_states
51
64
  else
52
- puts Kovid.country_comparison(name)
65
+ downcased_states = states.map(&:downcase)
66
+ puts Kovid.states(downcased_states)
53
67
  end
54
- data_source
55
- end
56
-
57
- desc 'states STATE STATE', 'Returns full comparison table for the given states. Accepts multiple states.'
58
- def states(*states)
59
- # This ensures this command is case insensitive.
60
- downcased_states = states.map(&:downcase)
61
68
 
62
- puts Kovid.states(downcased_states)
63
- data_source
64
- end
65
-
66
- desc 'states -a', 'Returns full comparison table for all US states'
67
- method_option :all, aliases: '-a'
68
- def states
69
- puts Kovid.all_us_states
70
69
  data_source
71
70
  end
72
71
 
@@ -76,7 +75,8 @@ module Kovid
76
75
  data_source
77
76
  end
78
77
 
79
- desc 'history COUNTRY or history COUNTRY N', 'Return history of incidents of COUNTRY (in the last N days)'
78
+ desc 'history COUNTRY or history COUNTRY N',
79
+ 'Return history of incidents of COUNTRY (in the last N days)'
80
80
  def history(*params)
81
81
  if params.size == 2
82
82
  puts Kovid.history(params.first, params.last)
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kovid
4
+ module Constants
5
+ CASES_DEATHS_RECOVERED = [
6
+ 'Cases'.paint_white,
7
+ 'Deaths'.paint_red,
8
+ 'Recovered'.paint_green
9
+ ].freeze
10
+
11
+ CASES_DEATHS_RECOVERED_CTODAY_DTODAY = [
12
+ 'Cases'.paint_white,
13
+ 'Cases Today'.paint_white,
14
+ 'Deaths'.paint_red,
15
+ 'Deaths Today'.paint_red,
16
+ 'Recovered'.paint_green
17
+ ].freeze
18
+
19
+ DATE_CASES_DEATHS_RECOVERED = [
20
+ 'Date'.paint_white,
21
+ 'Cases'.paint_white,
22
+ 'Deaths'.paint_red,
23
+ 'Recovered'.paint_green
24
+ ].freeze
25
+
26
+ CONTINENTAL_AGGREGATE_HEADINGS = [
27
+ 'Cases'.paint_white,
28
+ 'Cases Today'.paint_white,
29
+ 'Deaths'.paint_red,
30
+ 'Deaths Today'.paint_red,
31
+ 'Recovered'.paint_green,
32
+ 'Active'.paint_yellow,
33
+ 'Critical'.paint_red
34
+ ].freeze
35
+
36
+ COMPARE_COUNTRY_TABLE_FULL = [
37
+ 'Country'.paint_white,
38
+ 'Cases'.paint_white,
39
+ 'Deaths'.paint_red,
40
+ 'Recovered'.paint_green,
41
+ 'Cases Today'.paint_white,
42
+ 'Deaths Today'.paint_red,
43
+ 'Critical'.paint_yellow,
44
+ 'Cases/Million'.paint_white
45
+ ].freeze
46
+
47
+ COMPARE_COUNTRIES_TABLE_HEADINGS = [
48
+ 'Country'.paint_white,
49
+ 'Cases'.paint_white,
50
+ 'Cases Today'.paint_white,
51
+ 'Deaths'.paint_red,
52
+ 'Deaths Today'.paint_red,
53
+ 'Recovered'.paint_green
54
+ ].freeze
55
+
56
+ FULL_COUNTRY_TABLE_HEADINGS = [
57
+ 'Cases'.paint_white,
58
+ 'Deaths'.paint_red,
59
+ 'Recovered'.paint_green,
60
+ 'Cases Today'.paint_white,
61
+ 'Deaths Today'.paint_red,
62
+ 'Critical'.paint_yellow,
63
+ 'Cases/Million'.paint_white
64
+ ].freeze
65
+
66
+ FULL_PROVINCE_TABLE_HEADINGS = [
67
+ 'Confirmed'.paint_white,
68
+ 'Deaths'.paint_red,
69
+ 'Recovered'.paint_green
70
+ ].freeze
71
+
72
+ FULL_STATE_TABLE_HEADINGS = [
73
+ 'Cases'.paint_white,
74
+ 'Cases Today'.paint_white,
75
+ 'Deaths'.paint_red,
76
+ 'Deaths Today'.paint_red,
77
+ 'Active'.paint_yellow
78
+ ].freeze
79
+
80
+ COMPARE_STATES_HEADINGS = [
81
+ 'State'.paint_white,
82
+ 'Cases'.paint_white,
83
+ 'Cases Today'.paint_white,
84
+ 'Deaths'.paint_red,
85
+ 'Deaths Today'.paint_red,
86
+ 'Active'.paint_yellow
87
+ ].freeze
88
+
89
+ COMPARE_PROVINCES_HEADINGS = [
90
+ 'Province'.paint_white,
91
+ 'Confirmed'.paint_white,
92
+ 'Deaths'.paint_red,
93
+ 'Recovered'.paint_green
94
+ ].freeze
95
+
96
+ FOOTER_LINE = [
97
+ '------------',
98
+ '------------',
99
+ '------------',
100
+ '------------'
101
+ ].freeze
102
+
103
+ COUNTRY_LETTERS = 'A'.upto('Z').with_index(127_462).to_h.freeze
104
+
105
+ RIGHT_ALIGN_COLUMNS = {
106
+ compare_country_table_full: [1, 2, 3, 4, 5, 6, 7],
107
+ compare_country_table: [1, 2, 3, 4, 5],
108
+ compare_us_states: [1, 2, 3, 4, 5],
109
+ compare_provinces: [1, 2, 3]
110
+ }.freeze
111
+ end
112
+ end