unclekryon 0.4.9.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 (45) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +34 -0
  3. data/Gemfile.lock +43 -0
  4. data/LICENSE +674 -0
  5. data/README.md +55 -0
  6. data/Rakefile +59 -0
  7. data/bin/unclekryon +30 -0
  8. data/iso/can_provs_terrs.yaml +54 -0
  9. data/iso/countries.yaml +3050 -0
  10. data/iso/iso.yaml +8 -0
  11. data/iso/languages.yaml +5641 -0
  12. data/iso/regions.yaml +42 -0
  13. data/iso/subregions.yaml +6 -0
  14. data/iso/usa_states.yaml +230 -0
  15. data/lib/unclekryon.rb +384 -0
  16. data/lib/unclekryon/data/album_data.rb +147 -0
  17. data/lib/unclekryon/data/artist_data.rb +109 -0
  18. data/lib/unclekryon/data/artist_data_data.rb +146 -0
  19. data/lib/unclekryon/data/aum_data.rb +75 -0
  20. data/lib/unclekryon/data/base_data.rb +79 -0
  21. data/lib/unclekryon/data/pic_data.rb +76 -0
  22. data/lib/unclekryon/data/release_data.rb +57 -0
  23. data/lib/unclekryon/data/social_data.rb +39 -0
  24. data/lib/unclekryon/data/timespan_data.rb +70 -0
  25. data/lib/unclekryon/dev_opts.rb +41 -0
  26. data/lib/unclekryon/hacker.rb +327 -0
  27. data/lib/unclekryon/iso.rb +341 -0
  28. data/lib/unclekryon/iso/base_iso.rb +196 -0
  29. data/lib/unclekryon/iso/can_prov_terr.rb +113 -0
  30. data/lib/unclekryon/iso/country.rb +133 -0
  31. data/lib/unclekryon/iso/language.rb +241 -0
  32. data/lib/unclekryon/iso/region.rb +53 -0
  33. data/lib/unclekryon/iso/subregion.rb +53 -0
  34. data/lib/unclekryon/iso/usa_state.rb +106 -0
  35. data/lib/unclekryon/jsoner.rb +124 -0
  36. data/lib/unclekryon/log.rb +111 -0
  37. data/lib/unclekryon/parsers/kryon_aum_year_album_parser.rb +499 -0
  38. data/lib/unclekryon/parsers/kryon_aum_year_parser.rb +413 -0
  39. data/lib/unclekryon/server.rb +29 -0
  40. data/lib/unclekryon/trainer.rb +231 -0
  41. data/lib/unclekryon/uploader.rb +29 -0
  42. data/lib/unclekryon/util.rb +228 -0
  43. data/lib/unclekryon/version.rb +26 -0
  44. data/unclekryon.gemspec +67 -0
  45. metadata +189 -0
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+ # frozen_string_literal: true
4
+
5
+ #--
6
+ # 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/>.
21
+ #++
22
+
23
+
24
+ require 'bundler/setup'
25
+
26
+ require 'unclekryon/iso/base_iso'
27
+
28
+ ##
29
+ # @see https://en.wikipedia.org/wiki/Continent
30
+ ##
31
+ module UncleKryon
32
+ class Region < BaseIso
33
+ def initialize()
34
+ super()
35
+ end
36
+ end
37
+
38
+ class Regions < BaseIsos
39
+ DEFAULT_FILEPATH = "#{DEFAULT_DIR}/regions.yaml"
40
+
41
+ def initialize()
42
+ super()
43
+ end
44
+
45
+ def self.load_file(filepath=DEFAULT_FILEPATH)
46
+ return Regions.new().load_file(filepath)
47
+ end
48
+ end
49
+ end
50
+
51
+ if $0 == __FILE__
52
+ puts UncleKryon::Regions.load_file().to_s()
53
+ end
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+ # frozen_string_literal: true
4
+
5
+ #--
6
+ # This file is part of UncleKryon-server.
7
+ # Copyright (c) 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/>.
21
+ #++
22
+
23
+
24
+ require 'bundler/setup'
25
+
26
+ require 'unclekryon/iso/base_iso'
27
+
28
+ ##
29
+ # @see https://en.wikipedia.org/wiki/Subregion
30
+ ##
31
+ module UncleKryon
32
+ class Subregion < BaseIso
33
+ def initialize()
34
+ super()
35
+ end
36
+ end
37
+
38
+ class Subregions < BaseIsos
39
+ DEFAULT_FILEPATH = "#{DEFAULT_DIR}/subregions.yaml"
40
+
41
+ def initialize()
42
+ super()
43
+ end
44
+
45
+ def self.load_file(filepath=DEFAULT_FILEPATH)
46
+ return Subregions.new().load_file(filepath)
47
+ end
48
+ end
49
+ end
50
+
51
+ if $0 == __FILE__
52
+ puts UncleKryon::Subregions.load_file().to_s()
53
+ end
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+ # frozen_string_literal: true
4
+
5
+ #--
6
+ # 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/>.
21
+ #++
22
+
23
+
24
+ require 'bundler/setup'
25
+
26
+ require 'nokogiri'
27
+ require 'open-uri'
28
+ require 'yaml'
29
+
30
+ require 'unclekryon/iso/base_iso'
31
+
32
+ ##
33
+ # @see https://en.wikipedia.org/wiki/ISO_3166-2:US
34
+ # @see https://www.iso.org/obp/ui/#iso:code:3166:US
35
+ ##
36
+ module UncleKryon
37
+ class UsaState < BaseIso
38
+ def initialize(row=nil)
39
+ super()
40
+
41
+ if row.is_a?(Array)
42
+ @name = self.class.simplify_name(row[2])
43
+ @code = self.class.simplify_code(row[1])
44
+ end
45
+ end
46
+ end
47
+
48
+ class UsaStates < BaseIsos
49
+ DEFAULT_FILEPATH = "#{DEFAULT_DIR}/usa_states.yaml"
50
+
51
+ def initialize()
52
+ super()
53
+
54
+ @id = 'USA States'
55
+ end
56
+
57
+ def self.load_file(filepath=DEFAULT_FILEPATH)
58
+ return UsaStates.new().load_file(filepath)
59
+ end
60
+
61
+ # @param parse_filepath [String] use web browser's developer tools to copy & paste table HTML into local file
62
+ # @param save_filepath [String] local file to save YAML to
63
+ # @see https://www.iso.org/obp/ui/#iso:code:3166:US
64
+ def self.parse_and_save_to_file(parse_filepath,save_filepath=DEFAULT_FILEPATH)
65
+ doc = Nokogiri::HTML(open(parse_filepath),nil,'utf-8')
66
+ tds = doc.css('td')
67
+
68
+ states = UsaStates.new()
69
+ i = 0
70
+ tr = []
71
+
72
+ tds.each do |td|
73
+ c = td.content
74
+ c.gsub!(/[[:space:]]+/,' ')
75
+ c.strip!()
76
+ tr.push(c)
77
+
78
+ if (i += 1) >= 7
79
+ #puts tr.inspect()
80
+ state = UsaState.new(tr)
81
+ raise "USA state already exists: #{state.inspect()}" if states.key?(state.code)
82
+
83
+ states.values.each_value() do |v|
84
+ puts "Duplicate USA state names: #{v.name}" if v.name == state.name
85
+ end
86
+
87
+ states[state.code] = state
88
+ tr.clear()
89
+ i = 0
90
+ end
91
+ end
92
+
93
+ states.sort_keys!()
94
+ states.save_to_file(save_filepath)
95
+ end
96
+ end
97
+ end
98
+
99
+ if $0 == __FILE__
100
+ if ARGV.length < 1
101
+ puts UncleKryon::UsaStates.load_file().to_s()
102
+ else
103
+ UncleKryon::UsaStates.parse_and_save_to_file(ARGV[0],(ARGV.length >= 2) ? ARGV[1] :
104
+ UncleKryon::UsaStates::DEFAULT_FILEPATH)
105
+ end
106
+ end
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+ # frozen_string_literal: true
4
+
5
+ #--
6
+ # This file is part of UncleKryon-server.
7
+ # Copyright (c) 2020 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/>.
21
+ #++
22
+
23
+
24
+ IS_SCRIPT = $0 == __FILE__
25
+
26
+ if IS_SCRIPT
27
+ require 'rubygems'
28
+ require 'bundler/setup'
29
+ end
30
+
31
+ require 'json'
32
+ require 'yaml'
33
+
34
+ require 'unclekryon/iso'
35
+ require 'unclekryon/util'
36
+
37
+ require 'unclekryon/data/artist_data'
38
+ require 'unclekryon/data/artist_data_data'
39
+
40
+ module UncleKryon
41
+ class Jsoner
42
+ def jsonify_all(pretty=false)
43
+ json = {}
44
+
45
+ #jsonify_iso(json)
46
+ jsonify_artists(json)
47
+
48
+ return pretty ? JSON.pretty_generate(json) : json.to_json()
49
+ end
50
+
51
+ def jsonify_artists(json)
52
+ json['aum'] = {}
53
+ json['scroll'] = {}
54
+ json['vision'] = {}
55
+ json['pic'] = {}
56
+
57
+ kryon = to_hash(ArtistData.load_file(File.join('hax','kryon.yaml')))
58
+
59
+ kryon['release'] = {}
60
+ kryon['album'] = {}
61
+
62
+ jsonify_artist_data(json,kryon,File.join('hax','kryon_aums_2002-2005.yaml'))
63
+
64
+ json['artist'] = {
65
+ kryon['id'] => kryon
66
+ }
67
+ end
68
+
69
+ def jsonify_artist_data(json,artist,file)
70
+ data = ArtistDataData.load_file(file)
71
+
72
+ data.albums.each() do |album_id,album|
73
+ album.aums.each() do |aum_id,aum|
74
+ json[ArtistDataData::AUMS_ID][aum_id] = to_hash(aum)
75
+ end
76
+ album.aums = album.aums.keys
77
+
78
+ album.pics.each() do |pic_id,pic|
79
+ json[ArtistDataData::PICS_ID][pic_id] = to_hash(pic)
80
+ end
81
+ album.pics = album.pics.keys
82
+ end
83
+
84
+ artist[ArtistDataData::ALBUMS_ID] = to_hash(data.albums)
85
+
86
+ #attr_accessor :scrolls
87
+ #attr_accessor :visions
88
+ end
89
+
90
+ def jsonify_iso(json)
91
+ json['iso'] = to_hash(Iso.iso)
92
+ json['can_proter'] = to_hash(Iso.can_provs_terrs.values)
93
+ json['country'] = to_hash(Iso.countries.values)
94
+ json['language'] = to_hash(Iso.languages.values)
95
+ json['region'] = to_hash(Iso.regions.values)
96
+ json['subregion'] = to_hash(Iso.subregions.values)
97
+ json['usa_state'] = to_hash(Iso.usa_states.values)
98
+ end
99
+
100
+ def to_hash(obj)
101
+ hash = {}
102
+
103
+ if obj.respond_to?(:instance_variables) && obj.instance_variables.length > 0
104
+ obj.instance_variables.each() do |var|
105
+ hash[var.to_s().delete('@')] = to_hash(obj.instance_variable_get(var))
106
+ end
107
+ elsif obj.is_a?(Hash)
108
+ obj.each() do |k,v|
109
+ hash[k] = to_hash(v)
110
+ end
111
+ else
112
+ return Util.empty_s?(obj.to_s()) ? nil : obj
113
+ end
114
+
115
+ return hash
116
+ end
117
+ end
118
+ end
119
+
120
+ if IS_SCRIPT
121
+ j = UncleKryon::Jsoner.new()
122
+
123
+ puts j.jsonify_all(true)
124
+ end
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+ # frozen_string_literal: true
4
+
5
+ #--
6
+ # This file is part of UncleKryon-server.
7
+ # Copyright (c) 2017-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/>.
21
+ #++
22
+
23
+
24
+ require 'logger'
25
+ require 'singleton'
26
+
27
+ module UncleKryon
28
+ class UncleKryonLogger < Logger
29
+ def initialize
30
+ super(STDOUT)
31
+
32
+ @progname = self.class.to_s()
33
+ end
34
+
35
+ def build_message(message,error: nil,**options)
36
+ # Don't use mutable methods
37
+ message += error.backtrace().map(){|e| "\n > " + e}.join('') if !error.nil?
38
+
39
+ return message
40
+ end
41
+
42
+ def error(message,error: nil,**options)
43
+ super(build_message(message,error: error,**options))
44
+ end
45
+
46
+ def fatal(message,error: nil,**options)
47
+ super(build_message(message,error: error,**options))
48
+ end
49
+
50
+ def unknown(message,error: nil,**options)
51
+ super(build_message(message,error: error,**options))
52
+ end
53
+
54
+ def warn(message,error: nil,**options)
55
+ super(build_message(message,error: error,**options))
56
+ end
57
+ end
58
+
59
+ # Global for non-class use
60
+ class Log < UncleKryonLogger
61
+ include Singleton
62
+
63
+ # Do NOT define vars here; had problems with @dev/@test breaking this class
64
+ end
65
+
66
+ # Mixin for class use
67
+ module Logging
68
+ def init_log()
69
+ end
70
+
71
+ def log()
72
+ if !@log
73
+ @log = UncleKryonLogger.new()
74
+ @log.progname = self.class.to_s()
75
+
76
+ init_log()
77
+ end
78
+ return @log
79
+ end
80
+ end
81
+ end
82
+
83
+ if $0 == __FILE__
84
+ class Tester
85
+ include UncleKryon::Logging
86
+
87
+ def init_log()
88
+ @log.progname.prepend("[Risky]")
89
+ end
90
+
91
+ def take_risk()
92
+ log.fatal('Risky! Risky! Risky!')
93
+ end
94
+ end
95
+
96
+ begin
97
+ t = Tester.new()
98
+ t.take_risk()
99
+
100
+ raise 'Oops!'
101
+ rescue StandardError => e
102
+ UncleKryon::Log.instance.error(e.message,error: e)
103
+ UncleKryon::Log.instance.fatal(e.message,error: e)
104
+ UncleKryon::Log.instance.unknown(e.message,error: e)
105
+ UncleKryon::Log.instance.warn(e.message,error: e)
106
+
107
+ UncleKryon::Log.instance.warn("Don't Worry") do
108
+ 'This still works'
109
+ end
110
+ end
111
+ end