unclekryon 0.4.10 → 0.4.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -19
  3. data/Gemfile.lock +19 -23
  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.rb +165 -165
  23. data/lib/unclekryon/data/album_data.rb +74 -82
  24. data/lib/unclekryon/data/artist_data.rb +24 -36
  25. data/lib/unclekryon/data/artist_data_data.rb +29 -41
  26. data/lib/unclekryon/data/aum_data.rb +20 -32
  27. data/lib/unclekryon/data/base_data.rb +27 -39
  28. data/lib/unclekryon/data/pic_data.rb +25 -37
  29. data/lib/unclekryon/data/release_data.rb +14 -26
  30. data/lib/unclekryon/data/social_data.rb +6 -18
  31. data/lib/unclekryon/data/timespan_data.rb +16 -28
  32. data/lib/unclekryon/dev_opts.rb +7 -19
  33. data/lib/unclekryon/hacker.rb +119 -133
  34. data/lib/unclekryon/iso.rb +128 -138
  35. data/lib/unclekryon/iso/base_iso.rb +69 -81
  36. data/lib/unclekryon/iso/can_prov_terr.rb +34 -47
  37. data/lib/unclekryon/iso/country.rb +36 -49
  38. data/lib/unclekryon/iso/language.rb +86 -96
  39. data/lib/unclekryon/iso/region.rb +11 -25
  40. data/lib/unclekryon/iso/subregion.rb +11 -25
  41. data/lib/unclekryon/iso/usa_state.rb +28 -41
  42. data/lib/unclekryon/jsoner.rb +31 -50
  43. data/lib/unclekryon/log.rb +34 -46
  44. data/lib/unclekryon/parsers/kryon_aum_year_album_parser.rb +163 -167
  45. data/lib/unclekryon/parsers/kryon_aum_year_parser.rb +122 -127
  46. data/lib/unclekryon/server.rb +8 -17
  47. data/lib/unclekryon/trainer.rb +69 -83
  48. data/lib/unclekryon/uploader.rb +8 -17
  49. data/lib/unclekryon/util.rb +80 -92
  50. data/lib/unclekryon/version.rb +4 -16
  51. data/train/kryon.yaml +6077 -0
  52. data/unclekryon.gemspec +44 -42
  53. metadata +59 -16
@@ -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-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
  require 'yaml'
@@ -42,90 +28,91 @@ 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()
65
+
66
+ def initialize
81
67
  super()
82
68
  end
83
-
69
+
84
70
  def self.load_file(filepath=DEFAULT_FILEPATH)
85
- return Countries.new().load_file(filepath)
71
+ return Countries.new.load_file(filepath)
86
72
  end
87
-
88
- # @param parse_filepath [String] use web browser's developer tools to copy & paste table HTML into local file
73
+
74
+ # @param parse_filepath [String] use web browser's developer tools to copy & paste table HTML
75
+ # into local file
89
76
  # @param save_filepath [String] local file to save YAML to
90
77
  # @see https://www.iso.org/obp/ui/#search/code/
91
78
  def self.parse_and_save_to_file(parse_filepath,save_filepath=DEFAULT_FILEPATH)
92
- doc = Nokogiri::HTML(open(parse_filepath),nil,'utf-8')
79
+ doc = Nokogiri::HTML(URI(parse_filepath).open,nil,'utf-8')
93
80
  tds = doc.css('td')
94
-
95
- countries = Countries.new()
81
+
82
+ countries = Countries.new
96
83
  i = 0
97
84
  tr = []
98
-
85
+
99
86
  tds.each do |td|
100
87
  c = td.content
101
88
  c.gsub!(/[[:space:]]+/,' ')
102
- c.strip!()
89
+ c.strip!
103
90
  tr.push(c)
104
-
91
+
105
92
  if (i += 1) >= 5
106
93
  #puts tr.inspect()
107
94
  country = Country.new(tr)
108
- raise "Country already exists: #{country.inspect()}" if countries.key?(country.code)
109
-
110
- countries.values.each_value() do |v|
95
+ raise "Country already exists: #{country.inspect}" if countries.key?(country.code)
96
+
97
+ countries.values.each_value do |v|
111
98
  puts "Duplicate country names: #{v.name}" if v.name == country.name
112
99
  end
113
-
100
+
114
101
  countries[country.code] = country
115
- tr.clear()
102
+ tr.clear
116
103
  i = 0
117
104
  end
118
105
  end
119
-
120
- countries.sort_keys!()
106
+
107
+ countries.sort_keys!
121
108
  countries.save_to_file(save_filepath)
122
109
  end
123
110
  end
124
111
  end
125
112
 
126
- if $0 == __FILE__
113
+ if $PROGRAM_NAME == __FILE__
127
114
  if ARGV.length < 1
128
- puts UncleKryon::Countries.load_file().to_s()
115
+ puts UncleKryon::Countries.load_file.to_s
129
116
  else
130
117
  UncleKryon::Countries.parse_and_save_to_file(ARGV[0],(ARGV.length >= 2) ? ARGV[1] :
131
118
  UncleKryon::Countries::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-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
  require 'yaml'
@@ -44,196 +30,200 @@ module UncleKryon
44
30
  attr_reader :alpha2_code
45
31
  attr_reader :alpha3_code
46
32
  attr_reader :alpha3_code_b
47
-
33
+
48
34
  def initialize(row=nil)
49
35
  super()
50
-
36
+
51
37
  @names = nil
52
38
  @codes = nil
53
39
  @alpha2_code = nil
54
40
  @alpha3_code = nil
55
41
  @alpha3_code_b = nil
56
-
42
+
57
43
  if row.is_a?(Array)
58
- @names = row[2].split(';').compact().uniq().map(&self.class.method(:fix_name))
59
- @alpha2_code = row[1].empty?() ? nil : row[1]
44
+ @names = row[2].split(';').compact.uniq.map(&self.class.method(:fix_name))
45
+ @alpha2_code = row[1].empty? ? nil : row[1]
60
46
  @alpha3_code = row[0].split(/[[:space:]]*[\(\)][[:space:]]*/)
61
-
47
+
62
48
  if @alpha3_code.length <= 1
63
49
  @alpha3_code = row[0]
64
50
  else
65
51
  prev_was_tag = true
66
-
67
- @alpha3_code.each_with_index() do |c,i|
68
- c.strip!()
69
- c_up = c.upcase()
70
-
52
+
53
+ @alpha3_code.each_with_index do |c,i|
54
+ c.strip!
55
+ c_up = c.upcase
56
+
71
57
  if c_up == 'B' || c_up == 'T'
72
58
  if prev_was_tag
73
59
  raise "Invalid alpha-3 code for: #{@names},#{@alpha2_code},#{@alpha3_code}"
74
60
  end
75
-
61
+
76
62
  case c_up
77
63
  when 'B'
78
- raise "Multiple alpha3_code_b: #{@alpha3_code}" unless @alpha3_code_b.nil?()
64
+ raise "Multiple alpha3_code_b: #{@alpha3_code}" unless @alpha3_code_b.nil?
79
65
  @alpha3_code_b = @alpha3_code[i - 1]
80
66
  when 'T'
81
67
  raise "Multiple alpha3_code (T): #{@alpha3_code}" unless @alpha3_code.is_a?(Array)
82
68
  @alpha3_code = @alpha3_code[i - 1]
83
69
  end
84
-
70
+
85
71
  prev_was_tag = true
86
72
  else
87
73
  prev_was_tag = false
88
74
  end
89
75
  end
90
-
76
+
91
77
  # Wasn't set in the above loop?
92
78
  if @alpha3_code.is_a?(Array)
93
79
  raise "Invalid alpha-3 code for: #{@names},#{@alpha2_code},#{@alpha3_code}"
94
80
  end
95
81
  end
96
-
82
+
97
83
  @name = @names[0]
98
- @names = @names
84
+ #@names = @names
99
85
  @code = @alpha3_code
100
- @codes = [@alpha3_code,@alpha3_code_b,@alpha2_code].compact().uniq()
86
+ @codes = [@alpha3_code,@alpha3_code_b,@alpha2_code].compact.uniq
101
87
  end
102
88
  end
103
-
89
+
104
90
  # @see Languages.parse_and_save_to_file(...)
105
- def ==(lang)
106
- return super(lang) &&
107
- @names == lang.names &&
108
- @codes == lang.codes &&
109
- @alpha2_code == lang.alpha2_code &&
110
- @alpha3_code == lang.alpha3_code &&
111
- @alpha3_code_b == lang.alpha3_code_b
91
+ def ==(other)
92
+ return super(other) &&
93
+ @names == other.names &&
94
+ @codes == other.codes &&
95
+ @alpha2_code == other.alpha2_code &&
96
+ @alpha3_code == other.alpha3_code &&
97
+ @alpha3_code_b == other.alpha3_code_b
112
98
  end
113
-
114
- def to_s()
115
- s = '['.dup()
99
+
100
+ def to_s
101
+ s = '['.dup
116
102
  s << %Q("#{@name}","#{@names.join(';')}",)
117
103
  s << %Q(#{@code},"#{@codes.join(';')}",)
118
- s << %Q(#{@alpha2_code},#{@alpha3_code},#{@alpha3_code_b})
104
+ s << "#{@alpha2_code},#{@alpha3_code},#{@alpha3_code_b}"
119
105
  s << ']'
120
-
106
+
121
107
  return s
122
108
  end
123
109
  end
124
-
110
+
125
111
  class Languages < BaseIsos
126
112
  DEFAULT_FILEPATH = "#{DEFAULT_DIR}/languages.yaml"
127
-
128
- def initialize()
113
+
114
+ def initialize
129
115
  super()
130
116
  end
131
-
117
+
132
118
  def find_by_kryon(text,add_english: false,**options)
133
119
  langs = []
134
120
  regexes = [
135
- /[[:space:]]*[\/\+][[:space:]]*/, # Multiple languages are usually separated by '/'
136
- /[[:space:]]+/ # Sometimes separated by space/newline
137
- ]
138
-
139
- regexes.each_with_index() do |regex,i|
140
- text.split(regex).each() do |t|
121
+ %r{[[:space:]]*[/\+][[:space:]]*}, # Multiple languages are usually separated by '/'
122
+ /[[:space:]]+/ # Sometimes separated by space/newline
123
+ ]
124
+
125
+ regexes.each_with_index do |regex,i|
126
+ try_next_regex = false
127
+
128
+ text.split(regex).each do |t|
141
129
  # Fix misspellings and/or weird shortenings
142
- t = t.clone()
130
+ t = t.clone
143
131
  t.gsub!(/\AFRENC\z/i,'French')
144
132
  t.gsub!(/[\+\*]+/,'') # Means more languages, but won't worry about it (since not listed)
145
133
  t.gsub!(/\ASPAN\z/i,'Spanish')
146
134
  t.gsub!(/\AENGLSH\z/i,'English')
147
135
  t.gsub!(/\AHUNGARY\z/i,'Hungarian')
148
-
136
+
149
137
  lang = find(t)
150
-
151
- if lang.nil?()
152
- if i >= (regexes.length() - 1)
138
+
139
+ if lang.nil?
140
+ if i >= (regexes.length - 1)
153
141
  msg = "No language found for: #{t}"
154
-
155
- if DevOpts.instance.dev?()
142
+
143
+ if DevOpts.instance.dev?
156
144
  raise msg
157
145
  else
158
146
  log.warn(msg)
159
147
  end
160
148
  else
161
149
  log.warn("Not a language; trying next regex: #{t}")
162
-
163
- # Try next regex
164
- langs.clear()
165
- next
150
+
151
+ # Try next regex.
152
+ langs.clear
153
+ try_next_regex = true
154
+ break
166
155
  end
167
156
  else
168
157
  langs.push(lang.code)
169
158
  end
170
159
  end
171
-
172
- # No problem with this regex, so bail out
173
- break
160
+
161
+ # No problem with this regex, so bail out.
162
+ break unless try_next_regex
174
163
  end
175
-
164
+
176
165
  eng_code = find_by_code('eng').code
177
-
166
+
178
167
  if add_english && !langs.include?(eng_code)
179
168
  langs.push(eng_code)
180
169
  end
181
-
182
- return langs.empty?() ? nil : langs
170
+
171
+ return langs.empty? ? nil : langs
183
172
  end
184
-
173
+
185
174
  def self.load_file(filepath=DEFAULT_FILEPATH)
186
- return Languages.new().load_file(filepath)
175
+ return Languages.new.load_file(filepath)
187
176
  end
188
-
189
- # @param parse_filepath [String] use web browser's developer tools to copy & paste table HTML into local file
177
+
178
+ # @param parse_filepath [String] use web browser's developer tools to copy & paste table HTML
179
+ # into local file
190
180
  # @param save_filepath [String] local file to save YAML to
191
181
  # @see http://www.loc.gov/standards/iso639-2/php/code_list.php
192
182
  def self.parse_and_save_to_file(parse_filepath,save_filepath=DEFAULT_FILEPATH)
193
- doc = Nokogiri::HTML(open(parse_filepath),nil,'utf-8')
183
+ doc = Nokogiri::HTML(URI(parse_filepath).open,nil,'utf-8')
194
184
  tds = doc.css('td')
195
-
196
- langs = Languages.new()
185
+
186
+ langs = Languages.new
197
187
  i = 0
198
188
  tr = []
199
-
189
+
200
190
  tds.each do |td|
201
191
  c = td.content
202
192
  c.gsub!(/[[:space:]]+/,' ')
203
- c.strip!()
193
+ c.strip!
204
194
  tr.push(c)
205
-
195
+
206
196
  if (i += 1) >= 5
207
197
  #puts tr.inspect()
208
-
198
+
209
199
  add_it = true
210
200
  lang = Language.new(tr)
211
-
201
+
212
202
  if langs.key?(lang.code)
213
203
  # There were so many duplicates, so added comparison check
214
- raise "Language already exists: #{lang.inspect()}" if lang != langs[lang.code]
204
+ raise "Language already exists: #{lang.inspect}" if lang != langs[lang.code]
215
205
  add_it = false
216
206
  else
217
- langs.values.each_value() do |v|
207
+ langs.values.each_value do |v|
218
208
  puts "Duplicate lang names: #{v.name}" if v.name == lang.name
219
209
  end
220
210
  end
221
-
211
+
222
212
  langs[lang.code] = lang if add_it
223
- tr.clear()
213
+ tr.clear
224
214
  i = 0
225
215
  end
226
216
  end
227
-
228
- langs.sort_keys!()
217
+
218
+ langs.sort_keys!
229
219
  langs.save_to_file(save_filepath)
230
220
  end
231
221
  end
232
222
  end
233
223
 
234
- if $0 == __FILE__
224
+ if $PROGRAM_NAME == __FILE__
235
225
  if ARGV.length < 1
236
- puts UncleKryon::Languages.load_file().to_s()
226
+ puts UncleKryon::Languages.load_file.to_s
237
227
  else
238
228
  UncleKryon::Languages.parse_and_save_to_file(ARGV[0],(ARGV.length >= 2) ? ARGV[1] :
239
229
  UncleKryon::Languages::DEFAULT_FILEPATH)