unclekryon 0.4.10 → 0.4.11
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 +6 -19
- data/Gemfile.lock +19 -23
- data/README.md +3 -2
- data/Rakefile +11 -30
- data/bin/unclekryon +4 -15
- data/hax/kryon.yaml +28 -0
- data/hax/kryon_aums_2002-2005.yaml +460 -0
- data/hax/kryon_aums_2006.yaml +601 -0
- data/hax/kryon_aums_2007.yaml +1024 -0
- data/hax/kryon_aums_2008.yaml +950 -0
- data/hax/kryon_aums_2009.yaml +496 -0
- data/hax/kryon_aums_2010.yaml +1443 -0
- data/hax/kryon_aums_2011.yaml +1458 -0
- data/hax/kryon_aums_2012.yaml +2123 -0
- data/hax/kryon_aums_2013.yaml +1647 -0
- data/hax/kryon_aums_2014.yaml +2478 -0
- data/hax/kryon_aums_2015.yaml +3386 -0
- data/hax/kryon_aums_2016.yaml +3476 -0
- data/hax/kryon_aums_2017.yaml +3712 -0
- data/hax/kryon_aums_2018.yaml +3654 -0
- data/lib/unclekryon.rb +165 -165
- data/lib/unclekryon/data/album_data.rb +74 -82
- data/lib/unclekryon/data/artist_data.rb +24 -36
- data/lib/unclekryon/data/artist_data_data.rb +29 -41
- data/lib/unclekryon/data/aum_data.rb +20 -32
- data/lib/unclekryon/data/base_data.rb +27 -39
- data/lib/unclekryon/data/pic_data.rb +25 -37
- data/lib/unclekryon/data/release_data.rb +14 -26
- data/lib/unclekryon/data/social_data.rb +6 -18
- data/lib/unclekryon/data/timespan_data.rb +16 -28
- data/lib/unclekryon/dev_opts.rb +7 -19
- data/lib/unclekryon/hacker.rb +119 -133
- data/lib/unclekryon/iso.rb +128 -138
- data/lib/unclekryon/iso/base_iso.rb +69 -81
- data/lib/unclekryon/iso/can_prov_terr.rb +34 -47
- data/lib/unclekryon/iso/country.rb +36 -49
- data/lib/unclekryon/iso/language.rb +86 -96
- data/lib/unclekryon/iso/region.rb +11 -25
- data/lib/unclekryon/iso/subregion.rb +11 -25
- data/lib/unclekryon/iso/usa_state.rb +28 -41
- data/lib/unclekryon/jsoner.rb +31 -50
- data/lib/unclekryon/log.rb +34 -46
- data/lib/unclekryon/parsers/kryon_aum_year_album_parser.rb +163 -167
- data/lib/unclekryon/parsers/kryon_aum_year_parser.rb +122 -127
- data/lib/unclekryon/server.rb +8 -17
- data/lib/unclekryon/trainer.rb +69 -83
- data/lib/unclekryon/uploader.rb +8 -17
- data/lib/unclekryon/util.rb +80 -92
- data/lib/unclekryon/version.rb +4 -16
- data/train/kryon.yaml +6077 -0
- data/unclekryon.gemspec +44 -42
- metadata +59 -16
data/lib/unclekryon/iso.rb
CHANGED
@@ -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-
|
8
|
-
#
|
9
|
-
#
|
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 'yaml'
|
27
13
|
|
28
14
|
require 'unclekryon/dev_opts'
|
@@ -43,7 +29,7 @@ module UncleKryon
|
|
43
29
|
class Iso
|
44
30
|
DEFAULT_FILEPATH = "#{BaseIsos::DEFAULT_DIR}/iso.yaml"
|
45
31
|
ID = 'ISO'
|
46
|
-
|
32
|
+
|
47
33
|
@@can_provs_terrs = nil
|
48
34
|
@@countries = nil
|
49
35
|
@@iso = nil
|
@@ -51,42 +37,43 @@ module UncleKryon
|
|
51
37
|
@@regions = nil
|
52
38
|
@@subregions = nil
|
53
39
|
@@usa_states = nil
|
54
|
-
|
40
|
+
|
55
41
|
attr_accessor :updated_can_provs_terrs_on
|
56
42
|
attr_accessor :updated_countries_on
|
57
43
|
attr_accessor :updated_languages_on
|
58
44
|
attr_accessor :updated_regions_on
|
59
45
|
attr_accessor :updated_subregions_on
|
60
46
|
attr_accessor :updated_usa_states_on
|
61
|
-
|
62
|
-
def initialize
|
47
|
+
|
48
|
+
def initialize
|
63
49
|
super()
|
64
|
-
|
65
|
-
update_all
|
50
|
+
|
51
|
+
update_all
|
66
52
|
end
|
67
|
-
|
68
|
-
def self.can_provs_terrs
|
53
|
+
|
54
|
+
def self.can_provs_terrs
|
69
55
|
if !@@can_provs_terrs
|
70
|
-
@@can_provs_terrs = CanProvsTerrs.load_file
|
56
|
+
@@can_provs_terrs = CanProvsTerrs.load_file
|
71
57
|
end
|
72
58
|
return @@can_provs_terrs
|
73
59
|
end
|
74
|
-
|
75
|
-
def self.countries
|
60
|
+
|
61
|
+
def self.countries
|
76
62
|
if !@@countries
|
77
|
-
@@countries = Countries.load_file
|
63
|
+
@@countries = Countries.load_file
|
78
64
|
end
|
79
65
|
return @@countries
|
80
66
|
end
|
81
|
-
|
67
|
+
|
82
68
|
def self.find_kryon_locations(text)
|
83
69
|
locs = []
|
84
|
-
|
70
|
+
|
85
71
|
# Fix bad data
|
86
|
-
text = text.gsub(/\A[[:space:]]*SASKATOON\-CALGARY[[:space:]]*\z/,
|
87
|
-
|
72
|
+
text = text.gsub(/\A[[:space:]]*SASKATOON\-CALGARY[[:space:]]*\z/,
|
73
|
+
'SASKATOON, SASKATCHEWAN, CANADA / CALGARY, ALBERTA, CANADA')
|
74
|
+
|
88
75
|
# Multiple countries are separated by '/' or '&'
|
89
|
-
text.split(
|
76
|
+
text.split(%r{[[:space:]]*[/\&][[:space:]]*}).each do |t|
|
90
77
|
# Fix misspellings and/or weird shortenings
|
91
78
|
t = t.gsub(/Kansas[[:space:]]*\,[[:space:]]*City/i,'Kansas City')
|
92
79
|
t = t.gsub(/[\+\*]+/,'') # Means more countries, but won't worry about it (since not listed)
|
@@ -95,9 +82,12 @@ module UncleKryon
|
|
95
82
|
t = t.gsub(/\A[[:space:]]*NEWPORT[[:space:]]+BEACH[[:space:]]*\z/,'Newport Beach, California')
|
96
83
|
t = t.gsub(/\A[[:space:]]*SAN[[:space:]]+RAFAEL[[:space:]]*\z/,'San Rafael, California')
|
97
84
|
t = t.gsub(/\A[[:space:]]*MILANO\,[[:space:]]*MARITTIMA[[:space:]]*\z/,'MILANO MARITTIMA, ITALY')
|
98
|
-
t = t.gsub(/\A[[:space:]]*MAR[[:space:]]+DEL[[:space:]]+PLATA[[:space:]]*\z/,
|
99
|
-
|
100
|
-
t = t.gsub(/\A[[:space:]]*
|
85
|
+
t = t.gsub(/\A[[:space:]]*MAR[[:space:]]+DEL[[:space:]]+PLATA[[:space:]]*\z/,
|
86
|
+
'MAR DEL PLATA, ARGENTINA')
|
87
|
+
t = t.gsub(/\A[[:space:]]*PATAGONIA[[:space:]]+CRUISE[[:space:]]+2012[[:space:]]*\z/,
|
88
|
+
'Patagonia, South America')
|
89
|
+
t = t.gsub(/\A[[:space:]]*PHILADELPHIA,[[:space:]]+PENNSYLVANNIA[[:space:]]*\z/,
|
90
|
+
'Philadelphia, Pennsylvania')
|
101
91
|
t = t.gsub(/\ATHE[[:space:]]+AWAKENING[[:space:]]+ZONE.COM\z/,'World')
|
102
92
|
t = t.gsub(/\ASEDONA, AZ - Summer Light Conference\z/,'Sedona, AZ')
|
103
93
|
t = t.gsub(/\AHAWAII CRUISE 11\z/,'Hawaii')
|
@@ -113,72 +103,72 @@ module UncleKryon
|
|
113
103
|
t = t.gsub(/\AHAWAI\'I\s+CRUISE\s+[[:digit:]]+\z/i,'Hawaii')
|
114
104
|
t = t.gsub(/\AALASKA\s+CRUISE\s+[[:digit:]]+\z/i,'Alaska')
|
115
105
|
t = t.gsub(/\AGLASS\s+HOUSE\s+MT\.\s+\(AU\)\z/i,'Glass House Mountains, Australia')
|
116
|
-
|
106
|
+
|
117
107
|
parts = t.split(/[[:space:]\,\-]+/)
|
118
108
|
last = parts.last
|
119
|
-
last2 = (parts.length
|
120
|
-
|
109
|
+
last2 = (parts.length >= 2) ? (parts[-2] + last) : nil
|
110
|
+
|
121
111
|
city = nil
|
122
112
|
state = nil
|
123
|
-
country = countries
|
113
|
+
country = countries.find_by_name(last) # By name because e.g. code CO is Colorado and Colombia
|
124
114
|
subregion = nil
|
125
115
|
region = nil
|
126
|
-
|
116
|
+
|
127
117
|
parse_state = true
|
128
|
-
state_i = parts.length
|
129
|
-
|
118
|
+
state_i = parts.length - 1
|
119
|
+
|
130
120
|
# USA state?
|
131
|
-
if country.nil?
|
121
|
+
if country.nil?
|
132
122
|
parse_state = false
|
133
|
-
state = usa_states
|
134
|
-
|
135
|
-
if state.nil?
|
136
|
-
state = usa_states
|
137
|
-
state_i = parts.length
|
123
|
+
state = usa_states.find(last)
|
124
|
+
|
125
|
+
if state.nil? && !last2.nil?
|
126
|
+
state = usa_states.find_by_name(last2)
|
127
|
+
state_i = parts.length - 2 unless state.nil?
|
138
128
|
end
|
139
|
-
|
140
|
-
if state.nil?
|
129
|
+
|
130
|
+
if state.nil?
|
141
131
|
# CAN prov/terr? (use state var)
|
142
|
-
state = can_provs_terrs
|
143
|
-
|
144
|
-
if state.nil?
|
145
|
-
state = can_provs_terrs
|
146
|
-
state_i = parts.length
|
132
|
+
state = can_provs_terrs.find(last)
|
133
|
+
|
134
|
+
if state.nil? && !last2.nil?
|
135
|
+
state = can_provs_terrs.find_by_name(last2)
|
136
|
+
state_i = parts.length - 2 unless state.nil?
|
147
137
|
end
|
148
|
-
|
149
|
-
if state.nil?
|
138
|
+
|
139
|
+
if state.nil?
|
150
140
|
# Try country code
|
151
|
-
country = countries
|
152
|
-
|
153
|
-
if country.nil?
|
154
|
-
country = countries
|
155
|
-
state_i = 0 unless country.nil?
|
141
|
+
country = countries.find_by_code(last) # Try by code; e.g., CAN for Canada
|
142
|
+
|
143
|
+
if country.nil?
|
144
|
+
country = countries.find_by_name(t)
|
145
|
+
state_i = 0 unless country.nil?
|
156
146
|
end
|
157
|
-
if country.nil?
|
158
|
-
country = countries
|
159
|
-
state_i = 0 unless country.nil?
|
147
|
+
if country.nil? && !last2.nil?
|
148
|
+
country = countries.find_by_name(last2)
|
149
|
+
state_i = 0 unless country.nil?
|
160
150
|
end
|
161
|
-
|
162
|
-
if country.nil?
|
151
|
+
|
152
|
+
if country.nil?
|
163
153
|
# Subregion?
|
164
|
-
subregion = subregions
|
165
|
-
|
166
|
-
if subregion.nil?
|
167
|
-
subregion = subregions
|
154
|
+
subregion = subregions.find_by_name(t)
|
155
|
+
|
156
|
+
if subregion.nil? && !last2.nil?
|
157
|
+
subregion = subregions.find_by_name(last2)
|
168
158
|
end
|
169
|
-
|
170
|
-
if subregion.nil?
|
159
|
+
|
160
|
+
if subregion.nil?
|
171
161
|
# Region?
|
172
|
-
region = regions
|
173
|
-
|
174
|
-
if region.nil?
|
175
|
-
region = regions
|
162
|
+
region = regions.find_by_name(t)
|
163
|
+
|
164
|
+
if region.nil? && !last2.nil?
|
165
|
+
region = regions.find_by_name(last2)
|
176
166
|
end
|
177
|
-
|
178
|
-
if region.nil?
|
167
|
+
|
168
|
+
if region.nil?
|
179
169
|
msg = %Q(No state/country/region: "#{text}","#{t}","#{last}")
|
180
|
-
|
181
|
-
if DevOpts.instance.dev?
|
170
|
+
|
171
|
+
if DevOpts.instance.dev?
|
182
172
|
raise msg
|
183
173
|
else
|
184
174
|
log.warn(msg)
|
@@ -197,111 +187,111 @@ module UncleKryon
|
|
197
187
|
end
|
198
188
|
else
|
199
189
|
state = state.code
|
200
|
-
country = countries
|
190
|
+
country = countries.find_by_code('CAN').code
|
201
191
|
end
|
202
192
|
else
|
203
193
|
state = state.code
|
204
|
-
country = countries
|
194
|
+
country = countries.find_by_code('USA').code
|
205
195
|
end
|
206
196
|
else
|
207
197
|
country = country.code
|
208
198
|
end
|
209
|
-
|
210
|
-
if region.nil?
|
199
|
+
|
200
|
+
if region.nil? || subregion.nil?
|
211
201
|
# Not USA
|
212
202
|
if parse_state
|
213
|
-
if parts.length
|
214
|
-
state = parts[-2].gsub(/[[:space:]]+/,' ').strip
|
215
|
-
|
203
|
+
if parts.length >= 2
|
204
|
+
state = parts[-2].gsub(/[[:space:]]+/,' ').strip
|
205
|
+
|
216
206
|
# CAN prov/terr? (use state var)
|
217
|
-
if country == countries
|
218
|
-
state = can_provs_terrs
|
219
|
-
|
220
|
-
if state.nil?
|
221
|
-
if parts.length
|
222
|
-
state = can_provs_terrs
|
223
|
-
state_i = parts.length
|
207
|
+
if country == countries.find_by_code('CAN').code
|
208
|
+
state = can_provs_terrs.find(state)
|
209
|
+
|
210
|
+
if state.nil?
|
211
|
+
if parts.length >= 3
|
212
|
+
state = can_provs_terrs.find_by_name(parts[-3] + parts[-2])
|
213
|
+
state_i = parts.length - 3 unless state.nil?
|
224
214
|
end
|
225
215
|
else
|
226
216
|
state = state.code
|
227
|
-
state_i = parts.length
|
217
|
+
state_i = parts.length - 2
|
228
218
|
end
|
229
219
|
else
|
230
|
-
if state.length
|
231
|
-
state = state.upcase
|
232
|
-
state_i = parts.length
|
220
|
+
if state.length == 2
|
221
|
+
state = state.upcase
|
222
|
+
state_i = parts.length - 2
|
233
223
|
else
|
234
224
|
state = nil
|
235
225
|
end
|
236
226
|
end
|
237
227
|
end
|
238
228
|
end
|
239
|
-
|
229
|
+
|
240
230
|
# City
|
241
231
|
city = []
|
242
|
-
|
243
|
-
c = parts[i].gsub(/[[:space:]]+/,' ').strip
|
244
|
-
city.push(c) unless c.empty?
|
232
|
+
(0...state_i).each do |i|
|
233
|
+
c = parts[i].gsub(/[[:space:]]+/,' ').strip
|
234
|
+
city.push(c) unless c.empty?
|
245
235
|
end
|
246
|
-
city = city.compact
|
247
|
-
city = city.empty?
|
248
|
-
|
236
|
+
city = city.compact
|
237
|
+
city = city.empty? ? nil : city.map(&:capitalize).join(' ')
|
238
|
+
|
249
239
|
# Region
|
250
|
-
if !country.nil?
|
251
|
-
region = countries
|
240
|
+
if !country.nil?
|
241
|
+
region = countries.find_by_code(country).region
|
252
242
|
end
|
253
243
|
end
|
254
|
-
|
244
|
+
|
255
245
|
# Location
|
256
246
|
loc = [city,state,country,subregion,region] # Don't do compact(); we want all 4 ','
|
257
|
-
locs.push(loc.join(',')) unless loc.compact
|
247
|
+
locs.push(loc.join(',')) unless loc.compact.empty?
|
258
248
|
end
|
259
|
-
|
260
|
-
return locs.empty?
|
249
|
+
|
250
|
+
return locs.empty? ? nil : locs
|
261
251
|
end
|
262
|
-
|
263
|
-
def self.iso
|
252
|
+
|
253
|
+
def self.iso
|
264
254
|
if !@@iso
|
265
|
-
@@iso = Iso.load_file
|
255
|
+
@@iso = Iso.load_file
|
266
256
|
end
|
267
257
|
return @@iso
|
268
258
|
end
|
269
|
-
|
270
|
-
def self.languages
|
259
|
+
|
260
|
+
def self.languages
|
271
261
|
if !@@languages
|
272
|
-
@@languages = Languages.load_file
|
262
|
+
@@languages = Languages.load_file
|
273
263
|
end
|
274
264
|
return @@languages
|
275
265
|
end
|
276
|
-
|
266
|
+
|
277
267
|
def self.load_file(filepath=DEFAULT_FILEPATH)
|
278
268
|
y = YAML.load_file(filepath)
|
279
269
|
iso = y[ID]
|
280
270
|
return iso
|
281
271
|
end
|
282
|
-
|
283
|
-
def self.regions
|
272
|
+
|
273
|
+
def self.regions
|
284
274
|
if !@@regions
|
285
|
-
@@regions = Regions.load_file
|
275
|
+
@@regions = Regions.load_file
|
286
276
|
end
|
287
277
|
return @@regions
|
288
278
|
end
|
289
|
-
|
279
|
+
|
290
280
|
def save_to_file(filepath=DEFAULT_FILEPATH)
|
291
281
|
File.open(filepath,'w') do |f|
|
292
|
-
iso = {ID=>self}
|
282
|
+
iso = {ID => self}
|
293
283
|
YAML.dump(iso,f)
|
294
284
|
end
|
295
285
|
end
|
296
|
-
|
297
|
-
def self.subregions
|
286
|
+
|
287
|
+
def self.subregions
|
298
288
|
if !@@subregions
|
299
|
-
@@subregions = Subregions.load_file
|
289
|
+
@@subregions = Subregions.load_file
|
300
290
|
end
|
301
291
|
return @@subregions
|
302
292
|
end
|
303
|
-
|
304
|
-
def update_all
|
293
|
+
|
294
|
+
def update_all
|
305
295
|
@updated_can_provs_terrs_on = BaseData.max_updated_on_s(self.class.can_provs_terrs.values)
|
306
296
|
@updated_countries_on = BaseData.max_updated_on_s(self.class.countries.values)
|
307
297
|
@updated_languages_on = BaseData.max_updated_on_s(self.class.languages.values)
|
@@ -309,16 +299,16 @@ module UncleKryon
|
|
309
299
|
@updated_subregions_on = BaseData.max_updated_on_s(self.class.subregions.values)
|
310
300
|
@updated_usa_states_on = BaseData.max_updated_on_s(self.class.usa_states.values)
|
311
301
|
end
|
312
|
-
|
313
|
-
def self.usa_states
|
302
|
+
|
303
|
+
def self.usa_states
|
314
304
|
if !@@usa_states
|
315
|
-
@@usa_states = UsaStates.load_file
|
305
|
+
@@usa_states = UsaStates.load_file
|
316
306
|
end
|
317
307
|
return @@usa_states
|
318
308
|
end
|
319
|
-
|
320
|
-
def to_s
|
321
|
-
s = 'Updated On:'.dup
|
309
|
+
|
310
|
+
def to_s
|
311
|
+
s = 'Updated On:'.dup
|
322
312
|
s << "\n- CAN Provs/Terrs: #{@updated_can_provs_terrs_on}"
|
323
313
|
s << "\n- Countries: #{@updated_countries_on}"
|
324
314
|
s << "\n- Languages: #{@updated_languages_on}"
|
@@ -330,7 +320,7 @@ module UncleKryon
|
|
330
320
|
end
|
331
321
|
end
|
332
322
|
|
333
|
-
if $
|
323
|
+
if $PROGRAM_NAME == __FILE__
|
334
324
|
puts UncleKryon::Iso.can_provs_terrs['ON']
|
335
325
|
puts UncleKryon::Iso.countries['USA']
|
336
326
|
puts UncleKryon::Iso.languages['eng']
|
@@ -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-
|
8
|
-
#
|
9
|
-
#
|
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
|
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 ==(
|
63
|
-
return @name ==
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|