unclekryon 0.4.9.pre.alpha → 0.4.12.pre.alpha

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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +10 -26
  3. data/Gemfile.lock +20 -24
  4. data/README.md +3 -2
  5. data/Rakefile +11 -30
  6. data/bin/unclekryon +4 -15
  7. data/hax/kryon.yaml +28 -0
  8. data/hax/kryon_aums_2002-2005.yaml +460 -0
  9. data/hax/kryon_aums_2006.yaml +601 -0
  10. data/hax/kryon_aums_2007.yaml +1024 -0
  11. data/hax/kryon_aums_2008.yaml +950 -0
  12. data/hax/kryon_aums_2009.yaml +496 -0
  13. data/hax/kryon_aums_2010.yaml +1443 -0
  14. data/hax/kryon_aums_2011.yaml +1458 -0
  15. data/hax/kryon_aums_2012.yaml +2123 -0
  16. data/hax/kryon_aums_2013.yaml +1647 -0
  17. data/hax/kryon_aums_2014.yaml +2478 -0
  18. data/hax/kryon_aums_2015.yaml +3386 -0
  19. data/hax/kryon_aums_2016.yaml +3476 -0
  20. data/hax/kryon_aums_2017.yaml +3712 -0
  21. data/hax/kryon_aums_2018.yaml +3654 -0
  22. data/lib/unclekryon/data/album_data.rb +74 -82
  23. data/lib/unclekryon/data/artist_data.rb +24 -36
  24. data/lib/unclekryon/data/artist_data_data.rb +29 -41
  25. data/lib/unclekryon/data/aum_data.rb +20 -32
  26. data/lib/unclekryon/data/base_data.rb +27 -39
  27. data/lib/unclekryon/data/pic_data.rb +25 -37
  28. data/lib/unclekryon/data/release_data.rb +14 -26
  29. data/lib/unclekryon/data/social_data.rb +6 -18
  30. data/lib/unclekryon/data/timespan_data.rb +16 -28
  31. data/lib/unclekryon/dev_opts.rb +7 -19
  32. data/lib/unclekryon/hacker.rb +121 -135
  33. data/lib/unclekryon/iso/base_iso.rb +69 -81
  34. data/lib/unclekryon/iso/can_prov_terr.rb +34 -47
  35. data/lib/unclekryon/iso/country.rb +34 -51
  36. data/lib/unclekryon/iso/language.rb +84 -98
  37. data/lib/unclekryon/iso/region.rb +8 -29
  38. data/lib/unclekryon/iso/subregion.rb +8 -29
  39. data/lib/unclekryon/iso/usa_state.rb +28 -41
  40. data/lib/unclekryon/iso.rb +128 -138
  41. data/lib/unclekryon/jsoner.rb +31 -50
  42. data/lib/unclekryon/log.rb +34 -46
  43. data/lib/unclekryon/parsers/kryon_aum_year_album_parser.rb +163 -167
  44. data/lib/unclekryon/parsers/kryon_aum_year_parser.rb +122 -127
  45. data/lib/unclekryon/server.rb +8 -17
  46. data/lib/unclekryon/trainer.rb +68 -85
  47. data/lib/unclekryon/uploader.rb +8 -17
  48. data/lib/unclekryon/util.rb +80 -92
  49. data/lib/unclekryon/version.rb +4 -16
  50. data/lib/unclekryon.rb +166 -166
  51. data/train/kryon.yaml +6077 -0
  52. data/unclekryon.gemspec +49 -49
  53. metadata +50 -22
@@ -1,23 +1,11 @@
1
- #!/usr/bin/env ruby
2
1
  # encoding: UTF-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  #--
6
5
  # This file is part of UncleKryon-server.
7
- # Copyright (c) 2018-2019 Jonathan Bradley Whited (@esotericpig)
8
- #
9
- # UncleKryon-server is free software: you can redistribute it and/or modify
10
- # it under the terms of the GNU General Public License as published by
11
- # the Free Software Foundation, either version 3 of the License, or
12
- # (at your option) any later version.
13
- #
14
- # UncleKryon-server is distributed in the hope that it will be useful,
15
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- # GNU General Public License for more details.
18
- #
19
- # You should have received a copy of the GNU General Public License
20
- # along with UncleKryon-server. If not, see <https://www.gnu.org/licenses/>.
6
+ # Copyright (c) 2018-2021 Jonathan Bradley Whited
7
+ #
8
+ # SPDX-License-Identifier: GPL-3.0-or-later
21
9
  #++
22
10
 
23
11
 
@@ -32,120 +20,120 @@ module UncleKryon
32
20
  class BaseIso < BaseData
33
21
  attr_reader :name
34
22
  attr_reader :code
35
-
36
- def initialize()
23
+
24
+ def initialize
37
25
  super()
38
-
26
+
39
27
  @name = nil
40
28
  @code = nil
41
29
  end
42
-
30
+
43
31
  def self.fix_name(name)
44
- return self.flip_word_order(self.simplify_name(name))
32
+ return flip_word_order(simplify_name(name))
45
33
  end
46
-
34
+
47
35
  def self.flip_word_order(word)
48
36
  # e.g., change 'English, Old' to 'Old English'
49
- return word.gsub(/([^\,\;]+)[[:space:]]*[\,\;]+[[:space:]]*([^\,\;]+)/,'\\2 \\1').strip()
37
+ return word.gsub(/([^\,\;]+)[[:space:]]*[\,\;]+[[:space:]]*([^\,\;]+)/,'\\2 \\1').strip
50
38
  end
51
-
39
+
52
40
  def self.simplify_code(code)
53
41
  # e.g., remove 'US-' from 'US-AL'
54
- return code.gsub(/[[:alnum:][:space:]]+\-[[:space:]]*/,'').strip()
42
+ return code.gsub(/[[:alnum:][:space:]]+\-[[:space:]]*/,'').strip
55
43
  end
56
-
44
+
57
45
  def self.simplify_name(name)
58
46
  # e.g., remove '(the)' from 'United States of America (the)'
59
- return name.gsub(/[[:space:]]*\([^\)]*\)[[:space:]]*/,'').strip()
47
+ return name.gsub(/[[:space:]]*\([^\)]*\)[[:space:]]*/,'').strip
60
48
  end
61
-
62
- def ==(y)
63
- return @name == y.name && @code == y.code
49
+
50
+ def ==(other)
51
+ return @name == other.name && @code == other.code
64
52
  end
65
-
66
- def to_s()
53
+
54
+ def to_s
67
55
  return %Q(["#{@name}",#{@code}])
68
56
  end
69
57
  end
70
-
58
+
71
59
  class BaseIsos
72
60
  include Logging
73
-
61
+
74
62
  DEFAULT_DIR = 'iso'
75
-
63
+
76
64
  attr_reader :id
77
65
  attr_reader :values
78
-
79
- def initialize()
66
+
67
+ def initialize
80
68
  super()
81
-
69
+
82
70
  @id = self.class.get_class_name(self)
83
71
  @values = {}
84
72
  end
85
-
73
+
86
74
  def find(text)
87
75
  lang = find_by_name(text)
88
- return lang unless lang.nil?()
89
-
76
+ return lang unless lang.nil?
77
+
90
78
  lang = find_by_code(text)
91
79
  return lang
92
80
  end
93
-
81
+
94
82
  def find_by_code(code)
95
- code = code.gsub(/[[:space:]]+/,'').downcase()
96
-
97
- @values.each() do |k,v|
83
+ code = code.gsub(/[[:space:]]+/,'').downcase
84
+
85
+ @values.each do |k,v|
98
86
  codes = nil
99
-
87
+
100
88
  if v.respond_to?(:codes)
101
89
  codes = v.codes()
102
90
  elsif v.respond_to?(:code)
103
- codes = [v.code()]
91
+ codes = [v.code]
104
92
  else
105
93
  raise "No codes()/code() method for class #{v.class.name}"
106
94
  end
107
-
108
- codes.each() do |c|
109
- next if c.nil?()
110
- c = c.gsub(/[[:space:]]+/,'').downcase()
95
+
96
+ codes.each do |c|
97
+ next if c.nil?
98
+ c = c.gsub(/[[:space:]]+/,'').downcase
111
99
  return v if c == code
112
100
  end
113
101
  end
114
-
102
+
115
103
  return nil
116
104
  end
117
-
105
+
118
106
  def find_by_name(name)
119
- name = name.gsub(/[[:space:]]+/,'').downcase()
120
-
121
- @values.each() do |k,v|
107
+ name = name.gsub(/[[:space:]]+/,'').downcase
108
+
109
+ @values.each do |k,v|
122
110
  names = nil
123
-
111
+
124
112
  if v.respond_to?(:names)
125
113
  names = v.names()
126
114
  elsif v.respond_to?(:name)
127
- names = [v.name()]
115
+ names = [v.name]
128
116
  else
129
117
  raise "No names()/name() method for class #{v.class.name}"
130
118
  end
131
-
132
- names.each() do |n|
133
- next if n.nil?()
134
- n = n.gsub(/[[:space:]]+/,'').downcase()
119
+
120
+ names.each do |n|
121
+ next if n.nil?
122
+ n = n.gsub(/[[:space:]]+/,'').downcase
135
123
  return v if n == name
136
124
  end
137
125
  end
138
-
126
+
139
127
  return nil
140
128
  end
141
-
129
+
142
130
  def load_file(filepath)
143
131
  y = YAML.load_file(filepath)
144
132
  @values.merge!(y[@id])
145
-
133
+
146
134
  return self
147
135
  end
148
-
136
+
149
137
  def save_to_file(filepath)
150
138
  File.open(filepath,'w') do |f|
151
139
  v = {}
@@ -153,43 +141,43 @@ module UncleKryon
153
141
  YAML.dump(v,f)
154
142
  end
155
143
  end
156
-
157
- def sort_keys!()
144
+
145
+ def sort_keys!
158
146
  # Old way: @values = @values.sort().to_h()
159
-
147
+
160
148
  new_values = {}
161
-
162
- @values.keys().sort().each() do |code|
149
+
150
+ @values.keys.sort.each do |code|
163
151
  new_values[code] = @values[code]
164
152
  end
165
-
153
+
166
154
  @values = new_values
167
155
  return self
168
156
  end
169
-
157
+
170
158
  def [](code)
171
159
  @values[code]
172
160
  end
173
-
161
+
174
162
  def []=(code,value)
175
163
  @values[code] = value
176
164
  end
177
-
165
+
178
166
  def self.get_class_name(class_var)
179
167
  return class_var.class.name.split('::').last
180
168
  end
181
-
169
+
182
170
  def key?(code)
183
171
  @values.key?(code)
184
172
  end
185
-
186
- def to_s()
187
- s = ''.dup()
188
-
189
- @values.each() do |code,value|
173
+
174
+ def to_s
175
+ s = ''.dup
176
+
177
+ @values.each do |code,value|
190
178
  s << "#{code}: #{value}\n"
191
179
  end
192
-
180
+
193
181
  return s
194
182
  end
195
183
  end
@@ -1,28 +1,14 @@
1
- #!/usr/bin/env ruby
2
1
  # encoding: UTF-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  #--
6
5
  # This file is part of UncleKryon-server.
7
- # Copyright (c) 2018-2019 Jonathan Bradley Whited (@esotericpig)
8
- #
9
- # UncleKryon-server is free software: you can redistribute it and/or modify
10
- # it under the terms of the GNU General Public License as published by
11
- # the Free Software Foundation, either version 3 of the License, or
12
- # (at your option) any later version.
13
- #
14
- # UncleKryon-server is distributed in the hope that it will be useful,
15
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- # GNU General Public License for more details.
18
- #
19
- # You should have received a copy of the GNU General Public License
20
- # along with UncleKryon-server. If not, see <https://www.gnu.org/licenses/>.
6
+ # Copyright (c) 2018-2021 Jonathan Bradley Whited
7
+ #
8
+ # SPDX-License-Identifier: GPL-3.0-or-later
21
9
  #++
22
10
 
23
11
 
24
- require 'bundler/setup'
25
-
26
12
  require 'nokogiri'
27
13
  require 'open-uri'
28
14
 
@@ -36,76 +22,77 @@ module UncleKryon
36
22
  class CanProvTerr < BaseIso
37
23
  def initialize(row=nil)
38
24
  super()
39
-
25
+
40
26
  if row.is_a?(Array)
41
27
  @name = self.class.simplify_name(row[2])
42
28
  @code = self.class.simplify_code(row[1])
43
29
  end
44
30
  end
45
31
  end
46
-
32
+
47
33
  class CanProvsTerrs < BaseIsos
48
34
  DEFAULT_FILEPATH = "#{DEFAULT_DIR}/can_provs_terrs.yaml"
49
-
50
- def initialize()
35
+
36
+ def initialize
51
37
  super()
52
-
38
+
53
39
  @id = 'CAN Provinces & Territories'
54
40
  end
55
-
41
+
56
42
  def self.load_file(filepath=DEFAULT_FILEPATH)
57
- return CanProvsTerrs.new().load_file(filepath)
43
+ return CanProvsTerrs.new.load_file(filepath)
58
44
  end
59
-
60
- # @param parse_filepath [String] use web browser's developer tools to copy & paste table HTML into local file
45
+
46
+ # @param parse_filepath [String] use web browser's developer tools to copy & paste table HTML
47
+ # into local file
61
48
  # @param save_filepath [String] local file to save YAML to
62
49
  # @see https://www.iso.org/obp/ui/#iso:code:3166:CA
63
50
  def self.parse_and_save_to_file(parse_filepath,save_filepath=DEFAULT_FILEPATH)
64
- doc = Nokogiri::HTML(open(parse_filepath),nil,'utf-8')
51
+ doc = Nokogiri::HTML(URI(parse_filepath).open,nil,'utf-8')
65
52
  trs = doc.css('tr')
66
-
67
- provs_terrs = CanProvsTerrs.new()
68
-
69
- trs.each() do |tr|
53
+
54
+ provs_terrs = CanProvsTerrs.new
55
+
56
+ trs.each do |tr|
70
57
  tds = tr.css('td')
71
-
58
+
72
59
  # Skip French; we just want English
73
- next if tds[4].content.gsub(/[[:space:]]+/,' ').strip().downcase() == 'fr'
74
-
60
+ next if tds[4].content.gsub(/[[:space:]]+/,' ').strip.downcase == 'fr'
61
+
75
62
  i = 0
76
63
  tr = []
77
-
78
- tds.each() do |td|
64
+
65
+ tds.each do |td|
79
66
  c = td.content
80
67
  c.gsub!(/[[:space:]]+/,' ')
81
- c.strip!()
68
+ c.strip!
82
69
  tr.push(c)
83
-
70
+
84
71
  if (i += 1) >= 7
85
72
  #puts tr.inspect()
86
73
  prov_terr = CanProvTerr.new(tr)
87
- raise "CAN prov/terr already exists: #{prov_terr.inspect()}" if provs_terrs.key?(prov_terr.code)
88
-
89
- provs_terrs.values.each_value() do |v|
74
+ raise "CAN prov/terr already exists: #{prov_terr.inspect}" if provs_terrs.key?(prov_terr.code)
75
+
76
+ provs_terrs.values.each_value do |v|
90
77
  puts "Duplicate CAN prov/terr names: #{v.name}" if v.name == prov_terr.name
91
78
  end
92
-
79
+
93
80
  provs_terrs[prov_terr.code] = prov_terr
94
- tr.clear()
81
+ tr.clear
95
82
  i = 0
96
83
  end
97
84
  end
98
85
  end
99
-
100
- provs_terrs.sort_keys!()
86
+
87
+ provs_terrs.sort_keys!
101
88
  provs_terrs.save_to_file(save_filepath)
102
89
  end
103
90
  end
104
91
  end
105
92
 
106
- if $0 == __FILE__
93
+ if $PROGRAM_NAME == __FILE__
107
94
  if ARGV.length < 1
108
- puts UncleKryon::CanProvsTerrs.load_file().to_s()
95
+ puts UncleKryon::CanProvsTerrs.load_file.to_s
109
96
  else
110
97
  UncleKryon::CanProvsTerrs.parse_and_save_to_file(ARGV[0],(ARGV.length >= 2) ? ARGV[1] :
111
98
  UncleKryon::CanProvsTerrs::DEFAULT_FILEPATH)
@@ -1,28 +1,14 @@
1
- #!/usr/bin/env ruby
2
1
  # encoding: UTF-8
3
2
  # frozen_string_literal: true
4
3
 
5
4
  #--
6
5
  # This file is part of UncleKryon-server.
7
- # Copyright (c) 2018-2019 Jonathan Bradley Whited (@esotericpig)
8
- #
9
- # UncleKryon-server is free software: you can redistribute it and/or modify
10
- # it under the terms of the GNU General Public License as published by
11
- # the Free Software Foundation, either version 3 of the License, or
12
- # (at your option) any later version.
13
- #
14
- # UncleKryon-server is distributed in the hope that it will be useful,
15
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- # GNU General Public License for more details.
18
- #
19
- # You should have received a copy of the GNU General Public License
20
- # along with UncleKryon-server. If not, see <https://www.gnu.org/licenses/>.
6
+ # Copyright (c) 2018-2022 Jonathan Bradley Whited
7
+ #
8
+ # SPDX-License-Identifier: GPL-3.0-or-later
21
9
  #++
22
10
 
23
11
 
24
- require 'bundler/setup'
25
-
26
12
  require 'nokogiri'
27
13
  require 'open-uri'
28
14
  require 'yaml'
@@ -42,90 +28,87 @@ module UncleKryon
42
28
  attr_reader :alpha2_code
43
29
  attr_reader :alpha3_code
44
30
  attr_reader :region
45
-
31
+
46
32
  def initialize(row=nil)
47
33
  super()
48
-
34
+
49
35
  @names = nil
50
36
  @codes = nil
51
37
  @alpha2_code = nil
52
38
  @alpha3_code = nil
53
39
  @region = nil
54
-
40
+
55
41
  if row.is_a?(Array)
56
42
  @name = self.class.simplify_name(row[0])
57
43
  @alpha2_code = row[2]
58
44
  @alpha3_code = row[3]
59
-
45
+
60
46
  @names = @name
61
47
  @code = @alpha3_code
62
- @codes = [@alpha3_code,@alpha2_code].compact().uniq()
48
+ @codes = [@alpha3_code,@alpha2_code].compact.uniq
63
49
  end
64
50
  end
65
-
66
- def to_s()
67
- s = '['.dup()
51
+
52
+ def to_s
53
+ s = '['.dup
68
54
  s << %Q("#{@name}","#{@names.join(';')}")
69
55
  s << %Q(,#{@code},"#{@codes.join(';')}",#{@alpha2_code},#{@alpha3_code})
70
- s << %Q(,#{@region})
56
+ s << ",#{@region}"
71
57
  s << ']'
72
-
58
+
73
59
  return s
74
60
  end
75
61
  end
76
-
62
+
77
63
  class Countries < BaseIsos
78
64
  DEFAULT_FILEPATH = "#{DEFAULT_DIR}/countries.yaml"
79
-
80
- def initialize()
81
- super()
82
- end
83
-
65
+
84
66
  def self.load_file(filepath=DEFAULT_FILEPATH)
85
- return Countries.new().load_file(filepath)
67
+ return Countries.new.load_file(filepath)
86
68
  end
87
-
88
- # @param parse_filepath [String] use web browser's developer tools to copy & paste table HTML into local file
69
+
70
+ # @param parse_filepath [String] use web browser's developer tools to copy & paste table HTML
71
+ # into local file
89
72
  # @param save_filepath [String] local file to save YAML to
90
73
  # @see https://www.iso.org/obp/ui/#search/code/
91
74
  def self.parse_and_save_to_file(parse_filepath,save_filepath=DEFAULT_FILEPATH)
92
- doc = Nokogiri::HTML(open(parse_filepath),nil,'utf-8')
75
+ doc = Nokogiri::HTML(URI(parse_filepath).open,nil,'utf-8')
93
76
  tds = doc.css('td')
94
-
95
- countries = Countries.new()
77
+
78
+ countries = Countries.new
96
79
  i = 0
97
80
  tr = []
98
-
81
+
99
82
  tds.each do |td|
100
83
  c = td.content
101
84
  c.gsub!(/[[:space:]]+/,' ')
102
- c.strip!()
85
+ c.strip!
103
86
  tr.push(c)
104
-
87
+
105
88
  if (i += 1) >= 5
106
89
  #puts tr.inspect()
107
90
  country = Country.new(tr)
108
- raise "Country already exists: #{country.inspect()}" if countries.key?(country.code)
109
-
110
- countries.values.each_value() do |v|
91
+ raise "Country already exists: #{country.inspect}" if countries.key?(country.code)
92
+
93
+ countries.values.each_value do |v|
111
94
  puts "Duplicate country names: #{v.name}" if v.name == country.name
112
95
  end
113
-
96
+
114
97
  countries[country.code] = country
115
- tr.clear()
98
+ tr.clear
116
99
  i = 0
117
100
  end
118
101
  end
119
-
120
- countries.sort_keys!()
102
+
103
+ countries.sort_keys!
121
104
  countries.save_to_file(save_filepath)
122
105
  end
123
106
  end
124
107
  end
125
108
 
126
- if $0 == __FILE__
109
+ if $PROGRAM_NAME == __FILE__
127
110
  if ARGV.length < 1
128
- puts UncleKryon::Countries.load_file().to_s()
111
+ puts UncleKryon::Countries.load_file.to_s
129
112
  else
130
113
  UncleKryon::Countries.parse_and_save_to_file(ARGV[0],(ARGV.length >= 2) ? ARGV[1] :
131
114
  UncleKryon::Countries::DEFAULT_FILEPATH)