worlddb 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest.txt CHANGED
@@ -3,8 +3,17 @@ Manifest.txt
3
3
  README.markdown
4
4
  Rakefile
5
5
  bin/worlddb
6
+ db/at/cities.rb
7
+ db/cities.rb
8
+ db/countries.rb
9
+ db/de/cities.rb
6
10
  lib/worlddb.rb
7
11
  lib/worlddb/cli/opts.rb
8
12
  lib/worlddb/cli/runner.rb
13
+ lib/worlddb/loader.rb
14
+ lib/worlddb/models/city.rb
15
+ lib/worlddb/models/country.rb
16
+ lib/worlddb/models/prop.rb
17
+ lib/worlddb/models/region.rb
9
18
  lib/worlddb/schema.rb
10
19
  lib/worlddb/version.rb
data/db/at/cities.rb ADDED
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ at = Country.find_by_key!( 'at' )
4
+
5
+
6
+ ## 9 Bundeslaender
7
+
8
+ regions_at = [
9
+ ['wien', 'Wien'], # Wien
10
+ ['noe', 'NÖ'], # Niederösterreich
11
+ ['ooe', 'OÖ'], # Oberösterreich
12
+ ['bgld', 'Bgld.'], # Burgenland
13
+ ['stmk', 'Stmk.'], # Steiermark
14
+ ['sbg', 'Sbg.'], # Salzburg
15
+ ['ktn', 'Ktn.'], # Kärnten
16
+ ['tirol', 'Tirol'], # Tirol
17
+ ['vbg', 'Vbg.'] # Vorarlberg
18
+ ]
19
+
20
+ Region.create_from_ary!( regions_at, country: at )
21
+
22
+ cities_at = [
23
+ ['wien', 'Wien|Vienna', 'region:wien'],
24
+
25
+ ['stpoelten', 'St. Pölten', 'region:noe'],
26
+ ['moedling', 'Mödling|Moedling', 'region:noe'],
27
+ ['wrneustadt', 'Wiener Neustadt|Wr. Neustadt', 'region:noe'],
28
+ ['horn', 'Horn', 'region:noe'],
29
+
30
+ ['linz', 'Linz', 'region:ooe'],
31
+ ['ried', 'Ried', 'region:ooe'],
32
+
33
+ ['mattersburg', 'Mattersburg', 'region:bgld'],
34
+
35
+ ['graz', 'Graz', 'region:stmk'],
36
+ ['hartberg', 'Hartberg', 'region:stmk'],
37
+ ['kapfenberg', 'Kapfenberg', 'region:stmk'],
38
+
39
+ ['salzburg', 'Salzburg', 'region:sbg'],
40
+ ['groedig', 'Grödig', 'region:sbg'],
41
+
42
+ ['wolfsberg', 'Wolfsberg', 'region:ktn'],
43
+
44
+ ['innsbruck', 'Innsbruck', 'region:tirol'],
45
+
46
+ ['altach', 'Altach', 'region:vbg'],
47
+ ['lustenau', 'Lustenau', 'region:vbg']
48
+ ]
49
+
50
+ City.create_from_ary!( cities_at, country: at )
51
+
52
+
53
+ Prop.create!( key: 'db.at.cities.version', value: '1' )
data/db/cities.rb ADDED
@@ -0,0 +1,263 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ cities_en = [
5
+ ['manchester', 'Manchester'],
6
+ ['london', 'London'],
7
+ ['liverpool', 'Liverpool'],
8
+ ['birmingham', 'Birmingham'], # e.g.Aston Villa
9
+ ['westbrom', 'West Bromwich'],
10
+ ['newcastle', 'Newcastle upon Tyne'],
11
+ ['stoke', 'Stoke-on-Trent'],
12
+ ['sunderland', 'Sunderland'],
13
+ ['wigan', 'Wigan'],
14
+ ['southampton', 'Southampton'],
15
+ ['reading', 'Reading'],
16
+ ['norwich', 'Norwich'],
17
+ ['swansea', 'Swansea']
18
+ ]
19
+
20
+ en = Country.find_by_key!( 'en' )
21
+ City.create_from_ary!( cities_en, country: en )
22
+
23
+
24
+ cities_es = [
25
+ ['bilbao', 'Bilbao'],
26
+ ['valencia', 'Valencia'],
27
+ ['barcelona', 'Barcelona'],
28
+ ['madrid', 'Madrid'],
29
+ ['malaga', 'Málaga']
30
+ ]
31
+
32
+ es = Country.find_by_key!( 'es' )
33
+ City.create_from_ary!( cities_es, country: es )
34
+
35
+
36
+ cities_fr = [
37
+ ['lille', 'Lille'],
38
+ ['paris', 'Paris'],
39
+ ['marseille', 'Marseille'],
40
+ ['montpellier', 'Montpellier']
41
+ ]
42
+
43
+ fr = Country.find_by_key!( 'fr' )
44
+ City.create_from_ary!( cities_fr, country: fr )
45
+
46
+
47
+ cities_it = [
48
+ ['turin', 'Turin'],
49
+ ['milano', 'Mailand|Milano'],
50
+ ['napoli', 'Neapel|Napoli']
51
+ ]
52
+
53
+ it = Country.find_by_key!( 'it' )
54
+ City.create_from_ary!( cities_it, country: it )
55
+
56
+
57
+ cities_pt = [
58
+ ['porto', 'Porto'],
59
+ ['braga', 'Braga'],
60
+ ['lisboa', 'Lissabon|Lisboa']
61
+ ]
62
+
63
+ pt = Country.find_by_key!( 'pt' )
64
+ City.create_from_ary!( cities_pt, country: pt )
65
+
66
+
67
+ cities_ru = [
68
+ ['moskva', 'Moskau|Moskva'],
69
+ ['stpetersburg','St. Petersburg']
70
+ ]
71
+
72
+ ru = Country.find_by_key!( 'ru' )
73
+ City.create_from_ary!( cities_ru, country: ru )
74
+
75
+
76
+ cities_be = [
77
+ ['brussel', 'Brüssel|Brussel|Bruxelles|Brussels'] # de|nl|fr|en - RCA Anderlecht
78
+ ]
79
+
80
+ be = Country.find_by_key!( 'be' )
81
+ City.create_from_ary!( cities_be, country: be )
82
+
83
+
84
+ cities_ua = [
85
+ ['kiev', 'Kiew|Kiev|Kyiv' ],
86
+ ['donetsk', 'Donezk|Donetsk'],
87
+ ['kharkov', 'Kharkiv|Kharkov']
88
+ ]
89
+
90
+ ua = Country.find_by_key!( 'ua' )
91
+ City.create_from_ary!( cities_ua, country: ua )
92
+
93
+
94
+ cities_nl = [
95
+ ['amsterdam','Amsterdam'],
96
+ ['alkmaar','Alkmaar'] ## region: North Holland
97
+ ]
98
+
99
+ nl = Country.find_by_key!( 'nl' )
100
+ City.create_from_ary!( cities_nl, country: nl )
101
+
102
+
103
+ cities_hr = [
104
+ ['zagreb','Zagreb']
105
+ ]
106
+
107
+ hr = Country.find_by_key!( 'hr' )
108
+ City.create_from_ary!( cities_hr, country: hr )
109
+
110
+
111
+ cities_gr = [
112
+ ['piraeus','Piräus|Piraeus']
113
+ ]
114
+
115
+ gr = Country.find_by_key!( 'gr' )
116
+ City.create_from_ary!( cities_gr, country: gr )
117
+
118
+
119
+ cities_dk = [
120
+ ['farum','Farum'] ## region: North Zealand ??
121
+ ]
122
+
123
+ dk = Country.find_by_key!( 'dk' )
124
+ City.create_from_ary!( cities_dk, country: dk )
125
+
126
+
127
+ cities_by = [
128
+ ['borisov','Borissow|Borisov|Barysaw']
129
+ ]
130
+
131
+ by = Country.find_by_key!( 'by' )
132
+ City.create_from_ary!( cities_by, country: by )
133
+
134
+
135
+ cities_sc = [
136
+ ['glasgow','Glasgow']
137
+ ]
138
+
139
+ sc = Country.find_by_key!( 'sc' )
140
+ City.create_from_ary!( cities_sc, country: sc )
141
+
142
+
143
+ cities_tr = [
144
+ ['istanbul','Istanbul']
145
+ ]
146
+
147
+ tr = Country.find_by_key!( 'tr' )
148
+ City.create_from_ary!( cities_tr, country: tr )
149
+
150
+
151
+ cities_ro = [
152
+ ['cluj','Cluj']
153
+ ]
154
+
155
+ ro = Country.find_by_key!( 'ro' )
156
+ City.create_from_ary!( cities_ro, country: ro )
157
+
158
+
159
+ cities_ch = [
160
+ ['basel','Basel']
161
+ ]
162
+
163
+ ch = Country.find_by_key!( 'ch' )
164
+ City.create_from_ary!( cities_ch, country: ch )
165
+
166
+
167
+ cities_cy = [
168
+ ['nikosia','Nikosia|Nicosia']
169
+ ]
170
+
171
+ cy = Country.find_by_key!( 'cy' )
172
+ City.create_from_ary!( cities_cy, country: cy )
173
+
174
+
175
+
176
+ cities_mx = [
177
+ ['mexico', 'México' ],
178
+ ['cancun', 'Cancún' ],
179
+ ['guadalajara', 'Guadalajara' ],
180
+ ['tuxtla', 'Tuxtla Gutiérrez' ],
181
+ ['leon', 'León' ],
182
+ ['morelia', 'Morelia' ],
183
+ ['monterrey', 'Monterrey' ],
184
+ ['pachuca', 'Pachuca' ],
185
+ ['puebla', 'Puebla' ],
186
+ ['queretaro', 'Querétaro' ],
187
+ ['sanluispotosi', 'San Luis Potosì' ],
188
+ ['torreon', 'Torreón' ],
189
+ ['tijuana', 'Tijuana' ],
190
+ ['toluca', 'Toluca' ],
191
+ ['sannicolas', 'San Nicolás de los Garza' ]
192
+ ]
193
+
194
+ mx = Country.find_by_key!( 'mx' )
195
+ City.create_from_ary!( cities_mx, country: mx )
196
+
197
+
198
+ regions_ca = [
199
+ ['on', 'Ontario'],
200
+ ['qc', 'Quebec'],
201
+ ['ns', 'Nova Scotia'],
202
+ ['nb', 'New Brunswick'],
203
+ ['mb', 'Manitoba'],
204
+ ['bc', 'British Columbia'],
205
+ ['pe', 'Prince Edward Island'],
206
+ ['sk', 'Saskatchewan'],
207
+ ['ab', 'Alberta'],
208
+ ['nl', 'Newfoundland and Labrador']
209
+ ]
210
+
211
+ cities_ca = [
212
+ ['montreal', 'Montreal', 'region:qc'],
213
+ ['ottawa', 'Ottawa', 'region:on'],
214
+ ['toronto', 'Toronto', 'region:on'],
215
+ ['winnipeg', 'Winnipeg', 'region:mb'],
216
+ ['calgary', 'Calgary', 'region:ab'],
217
+ ['edmonton', 'Edmonton', 'region:ab'],
218
+ ['vancouver', 'Vancouver', 'region:bc']
219
+ ]
220
+
221
+ ca = Country.find_by_key!( 'ca' )
222
+ Region.create_from_ary!( regions_ca, country: ca )
223
+ City.create_from_ary!( cities_ca, country: ca )
224
+
225
+
226
+ regions_us = [
227
+ ['ca', 'California'],
228
+ ['ny', 'New York'],
229
+ ['ma', 'Massachusetts'],
230
+ ['pa', 'Pennsylvania'],
231
+ ['il', 'Illinois'],
232
+ ['oh', 'Ohio'],
233
+ ['mi', 'Michigan'],
234
+ ['tn', 'Tennessee'],
235
+ ['tx', 'Texas'],
236
+ ['az', 'Arizona']
237
+ ]
238
+
239
+ cities_us = [
240
+ ['newyork', 'New York', 'region:ny'],
241
+ ['buffalo', 'Buffalo', 'region:ny'],
242
+ ['philadelphia', 'Philadelphia', 'region:pa'],
243
+ ['boston', 'Boston', 'region:ma'],
244
+ ['chicago', 'Chicago', 'region:il'],
245
+ ['columbus', 'Columbus', 'region:oh'],
246
+ ['detroit', 'Detroit', 'region:mi'],
247
+ ['nashville', 'Nashville', 'region:tn'],
248
+ ['dallas', 'Dallas', 'region:tx'],
249
+ ['phoenix', 'Phoenix', 'region:az'],
250
+ ['losangeles', 'Los Angeles', 'region:ca'],
251
+ ['sanjose', 'San Jose', 'region:ca'],
252
+ ['anaheim', 'Anaheim', 'region:ca'],
253
+ ['stlouis', 'St. Louis'],
254
+ ['pittsburgh', 'Pittsburgh'],
255
+ ['washington', 'Washington']
256
+ ]
257
+
258
+ us = Country.find_by_key!( 'us' )
259
+ Region.create_from_ary!( regions_us, country: us )
260
+ City.create_from_ary!( cities_us, country: us )
261
+
262
+
263
+ Prop.create!( key: 'db.cities.version', value: '1' )
data/db/countries.rb ADDED
@@ -0,0 +1,109 @@
1
+ # encoding: utf-8
2
+
3
+ ## NB: for keys use internet domain/iso two letter code
4
+ #
5
+ # more info about iso country codes:
6
+ # -> http://en.wikipedia.org/wiki/ISO_3166-1
7
+ # two letter codes -> http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
8
+ # three letter codes -> http://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
9
+ #
10
+ # for three letter codes use fifa code or iso code
11
+ # - fifa three letter country codes
12
+ # -> http://en.wikipedia.org/wiki/List_of_FIFA_country_codes
13
+ # -> differences (fifa,ioc,iso) -> http://en.wikipedia.org/wiki/Comparison_of_IOC,_FIFA,_and_ISO_3166_country_codes
14
+
15
+
16
+ countries = [
17
+
18
+ ####################
19
+ ### europe
20
+
21
+ [ 'ad', 'Andorra', 'AND' ],
22
+ [ 'al', 'Albanien', 'ALB' ],
23
+ [ 'am', 'Armenien', 'ARM' ],
24
+ [ 'at', 'Österreich', 'AUT' ],
25
+ [ 'be', 'Belgien', 'BEL' ],
26
+ [ 'bg', 'Bulgarien', 'BUL' ], # NB: ISO (BGR) <> FIFA (BUL)
27
+ [ 'by', 'Weißrussland', 'BLR' ],
28
+ [ 'ch', 'Schweiz', 'SUI' ], # NB: ISO (CHE) <> FIFA (SUI)
29
+ [ 'cy', 'Zypern', 'CYP' ],
30
+ [ 'cz', 'Tschechien', 'CZE' ],
31
+ [ 'de', 'Deutschland', 'GER' ], # NB: ISO (DEU) <> FIFA (GER)
32
+ [ 'dk', 'Dänemark', 'DEN' ], # NB: ISO (DNK) <> FIFA (DEN)
33
+ [ 'en', 'England', 'ENG' ], # NB: FIFA (ENG); not a valid iso country n internet domain / it's uk - what to use - anything better?
34
+ [ 'es', 'Spanien', 'ESP' ],
35
+ [ 'fi', 'Finnland', 'FIN' ],
36
+ [ 'fo', 'Färöer', 'FRO' ],
37
+ [ 'fr', 'Frankreich', 'FRA' ],
38
+ [ 'ge', 'Georgien', 'GEO' ],
39
+ [ 'gr', 'Griechenland', 'GRE' ], # NB: ISO (GRC) <> FIFA (GRE)
40
+ [ 'hr', 'Kroatien', 'CRO' ], # NB: ISO (HRV) <> FIFA (CRO); local name: Hrvatska
41
+ [ 'hu', 'Ungarn', 'HUN' ],
42
+ [ 'ie', 'Irland', 'IRL' ],
43
+ [ 'it', 'Italien', 'ITA' ],
44
+ [ 'kz', 'Kasachstan', 'KAZ' ],
45
+ [ 'mt', 'Malta', 'MLT' ],
46
+ [ 'nl', 'Niederlande', 'NED' ], # NB: ISO (NLD) <> FIFA (NED)
47
+ [ 'pl', 'Polen', 'POL' ],
48
+ [ 'pt', 'Portugal', 'POR' ], # NB: ISO (PRT) <> FIFA (POR)
49
+ [ 'ro', 'Rumänien', 'ROU' ],
50
+ [ 'rs', 'Serbien', 'SRB' ],
51
+ [ 'ru', 'Russland', 'RUS' ],
52
+ [ 'sc', 'Schottland', 'SCO' ], # NB: FIFA (SCO); not a valid iso country/internet domain - it's uk - what to use - anything better?
53
+ [ 'se', 'Schweden', 'SWE' ],
54
+ [ 'si', 'Slowenien', 'SVN' ],
55
+ [ 'sk', 'Slowakei', 'SVK' ],
56
+ [ 'tr', 'Türkei', 'TUR' ],
57
+ [ 'ua', 'Ukraine', 'UKR' ],
58
+
59
+ ##############
60
+ ## south america
61
+
62
+ [ 'ar', 'Argentinien', 'ARG' ],
63
+ [ 'br', 'Brasilien', 'BRA' ],
64
+ [ 'cl', 'Chile', 'CHI' ],
65
+ [ 'py', 'Paraguay', 'PAR' ],
66
+ [ 'uy', 'Uruguay', 'URU' ],
67
+ [ 'ec', 'Ecuador', 'ECU' ],
68
+ [ 'co', 'Colombia', 'COL' ],
69
+
70
+ #####################
71
+ #### north/central america & caribbean islands
72
+
73
+ [ 'ca', 'Kanada', 'CAN' ],
74
+ [ 'mx', 'Mexiko', 'MEX' ],
75
+ [ 'us', 'United States', 'USA' ],
76
+ [ 'hn', 'Honduras', 'HON' ],
77
+ [ 'cr', 'Costa Rica', 'CRC' ],
78
+ [ 'sv', 'El Salvador', 'SLV' ],
79
+ [ 'gy', 'Guyana', 'GUY' ],
80
+
81
+ ########################
82
+ ## africa
83
+
84
+ [ 'dz', 'Algerien', 'ALG' ],
85
+ [ 'ci', 'Elfenbeinküste', 'CIV' ],
86
+ [ 'gh', 'Ghana', 'GHA' ],
87
+ [ 'cm', 'Kamerun', 'CMR' ],
88
+ [ 'ng', 'Nigeria', 'NGA' ],
89
+ [ 'za', 'Südafrika', 'RSA' ],
90
+
91
+ #############################
92
+ ## asia w/ australia
93
+
94
+ [ 'au', 'Australien', 'AUS' ],
95
+ [ 'jp', 'Japan', 'JPN' ],
96
+ [ 'kp', 'Nordkorea', 'PRK' ],
97
+ [ 'kr', 'Südkorea', 'KOR' ],
98
+
99
+ ###############################
100
+ ## oceania
101
+
102
+ [ 'nz', 'Neuseeland', 'NZL' ]
103
+ ]
104
+
105
+
106
+ Country.create_from_ary!( countries )
107
+
108
+
109
+ Prop.create!( key: 'db.countries.version', value: '1' )
data/db/de/cities.rb ADDED
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ de = Country.find_by_key!( 'de' )
4
+
5
+ regions_de = [
6
+ ['bw', 'Baden-Württemberg'],
7
+ ['by', 'Bayern'],
8
+ ['be', 'Berlin'],
9
+ ['bb', 'Brandenburg'],
10
+ ['hb', 'Bremen'],
11
+ ['hh', 'Hamburg'],
12
+ ['he', 'Hessen'],
13
+ ['mv', 'Mecklenburg-Vorpommern'],
14
+ ['ni', 'Niedersachsen'],
15
+ ['nw', 'Nordrhein-Westfalen'],
16
+ ['rp', 'Rheinland-Pfalz'],
17
+ ['sl', 'Saarland'],
18
+ ['sn', 'Sachsen'],
19
+ ['st', 'Sachsen-Anhalt'],
20
+ ['sh', 'Schleswig-Holstein'],
21
+ ['th', 'Thüringen']
22
+ ]
23
+
24
+ Region.create_from_ary!( regions_de, country: de )
25
+
26
+
27
+ cities_de = [
28
+ ['muenchen', 'München', 'region:by'],
29
+ ['nuernberg', 'Nürnberg', 'region:by'],
30
+ ['augsburg', 'Augsburg', 'region:by'],
31
+ ['fuerth', 'Fürth', 'region:by'],
32
+ ['stuttgart', 'Stuttgart', 'region:bw'],
33
+ ['hoffenheim', 'Hoffenheim', 'region:bw'],
34
+ ['freiburg', 'Freiburg', 'region:bw'],
35
+ ['hannover', 'Hannover', 'region:ni'],
36
+ ['wolfsburg', 'Wolfsburg', 'region:ni'],
37
+ ['gelsenkirchen', 'Gelsenkirchen', 'region:nw'],
38
+ ['dortmund', 'Dortmund', 'region:nw'],
39
+ ['leverkusen', 'Leverkusen', 'region:nw'],
40
+ ['duesseldorf', 'Düsseldorf', 'region:nw'],
41
+ ['mgladbach', "Mönchengladbach|M'gladbach", 'region:nw' ],
42
+ ['frankfurt', 'Frankfurt', 'region:he'],
43
+ ['mainz', 'Mainz', 'region:rp'],
44
+ ['hamburg', 'Hamburg', 'region:hh'],
45
+ ['bremen', 'Bremen', 'region:hb']
46
+ ]
47
+
48
+ City.create_from_ary!( cities_de, country: de )
49
+
50
+
51
+ Prop.create!( key: 'db.de.cities.version', value: '1' )
@@ -3,8 +3,7 @@ module WorldDB
3
3
 
4
4
  class Runner
5
5
 
6
-
7
- ### include WorldDB::Models
6
+ include WorldDB::Models
8
7
 
9
8
  def initialize
10
9
  @logger = Logger.new(STDOUT)
@@ -51,7 +50,7 @@ worlddb - world.db command line tool, version #{VERSION}
51
50
  #{cmd.help}
52
51
 
53
52
  Examples:
54
- worlddb at # import austrian regions n cities
53
+ worlddb at/cities # import austrian regions n cities
55
54
  worlddb -c # create database schema
56
55
 
57
56
  More Examples:
@@ -89,13 +88,8 @@ EOS
89
88
  # tbd
90
89
  end
91
90
 
91
+ Loader.new( logger ).run( opts, args ) # load ruby fixtures
92
92
 
93
- args.each do |arg|
94
- name = arg # File.basename( arg, '.*' )
95
-
96
- # tbd
97
- end
98
-
99
93
  dump_stats
100
94
  dump_props
101
95
 
@@ -106,22 +100,19 @@ EOS
106
100
 
107
101
  def dump_stats
108
102
  # todo: use %5d or similar to format string
109
- =begin
110
103
  puts "Stats:"
111
104
  puts " #{Country.count} countries"
112
- =end
105
+ puts " #{Region.count} regions"
106
+ puts " #{City.count} cities"
113
107
  end
114
108
 
115
109
 
116
110
  def dump_props
117
-
118
- =begin
119
111
  # todo: use %5 or similar to format string
120
112
  puts "Props:"
121
113
  Prop.order( 'created_at asc' ).all.each do |prop|
122
114
  puts " #{prop.key} / #{prop.value} || #{prop.created_at}"
123
115
  end
124
- =end
125
116
  end
126
117
 
127
118
  end # class Runner
@@ -0,0 +1,75 @@
1
+ module WorldDB
2
+
3
+ class Loader
4
+
5
+ ## make models available in worlddb module by default with namespace
6
+ # e.g. lets you use City instead of Models::City
7
+ include WorldDB::Models
8
+
9
+
10
+ def initialize( logger=nil )
11
+ if logger.nil?
12
+ @logger = Logger.new(STDOUT)
13
+ @logger.level = Logger::INFO
14
+ else
15
+ @logger = logger
16
+ end
17
+ end
18
+
19
+ attr_reader :logger
20
+
21
+
22
+ def run( opts, args )
23
+
24
+ args.each do |arg|
25
+ name = arg # File.basename( arg, '.*' )
26
+
27
+ if opts.load?
28
+ load_fixtures_builtin( name )
29
+ else
30
+ load_fixtures_with_include_path( name, opts.data_path )
31
+ end
32
+ end
33
+
34
+ end # method run
35
+
36
+
37
+ def load_fixtures_with_include_path( name, include_path ) # load from file system
38
+ path = "#{include_path}/#{name}.rb"
39
+
40
+ puts "*** loading data '#{name}' (#{path})..."
41
+
42
+ code = File.read( path )
43
+
44
+ load_fixtures_worker( code )
45
+ end
46
+
47
+ def load_fixtures_builtin( name ) # load from gem (built-in)
48
+ path = "#{WorldDB.root}/db/#{name}.rb"
49
+
50
+ puts "*** loading data '#{name}' (#{path})..."
51
+
52
+ code = File.read( path )
53
+
54
+ load_fixtures_worker( code )
55
+ end
56
+
57
+
58
+ private
59
+ def load_fixtures_worker( code )
60
+
61
+ self.class_eval( code )
62
+
63
+ # NB: same as
64
+ #
65
+ # module WorldDB
66
+ # include WorldDB::Models
67
+ # <code here>
68
+ # end
69
+
70
+ # Prop.create!( :key => "db.#{name}.version", :value => SportDB::VERSION )
71
+
72
+ end
73
+
74
+ end # class Loader
75
+ end # module WorldDB
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ module WorldDB::Models
4
+
5
+ class City < ActiveRecord::Base
6
+ self.table_name = 'cities'
7
+
8
+ belongs_to :country, :class_name => 'Country', :foreign_key => 'country_id'
9
+ belongs_to :region, :class_name => 'Region', :foreign_key => 'region_id'
10
+
11
+ def self.create_from_ary!( cities, more_values={} )
12
+ cities.each do |values|
13
+
14
+ ## key & title & country required
15
+ attr = {
16
+ key: values[0]
17
+ }
18
+
19
+ ## title (split of optional synonyms)
20
+ # e.g. FC Bayern Muenchen|Bayern Muenchen|Bayern
21
+ titles = values[1].split('|')
22
+
23
+ attr[ :title ] = titles[0]
24
+ ## add optional synonyms
25
+ attr[ :synonyms ] = titles[1..-1].join('|') if titles.size > 1
26
+
27
+ attr = attr.merge( more_values )
28
+
29
+ ## check for optional values
30
+ values[2..-1].each do |value|
31
+ if value.is_a? Country
32
+ attr[ :country_id ] = value.id
33
+ elsif value =~ /^region:/ ## region:
34
+ value_region_key = value[7..-1] ## cut off region: prefix
35
+ value_region = Region.find_by_key!( value_region_key )
36
+ attr[ :region_id ] = value_region.id
37
+ else
38
+ # issue warning: unknown type for value
39
+ end
40
+ end
41
+
42
+ City.create!( attr )
43
+ end # each city
44
+ end
45
+
46
+ end # class Cities
47
+
48
+ end # module WorldDB::Models
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ module WorldDB::Models
4
+
5
+ class Country < ActiveRecord::Base
6
+ self.table_name = 'countries'
7
+
8
+ has_many :regions, :class_name => 'Region', :foreign_key => 'country_id'
9
+ has_many :cities, :class_name => 'City', :foreign_key => 'country_id'
10
+
11
+ def self.create_from_ary!( countries )
12
+ countries.each do |values|
13
+
14
+ ## key & title required
15
+ attr = {
16
+ :key => values[0],
17
+ :title => values[1],
18
+ :tag => values[2]
19
+ }
20
+
21
+ Country.create!( attr )
22
+ end # each country
23
+ end
24
+
25
+ end # class Country
26
+
27
+
28
+ end # module WorldDB::Models
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ module WorldDB::Models
4
+
5
+ class Prop < ActiveRecord::Base
6
+
7
+ end # class Prop
8
+
9
+ end # module WorldDB::Models
@@ -0,0 +1,35 @@
1
+ module WorldDB::Models
2
+
3
+ class Region < ActiveRecord::Base
4
+
5
+ belongs_to :country, :class_name => 'Country', :foreign_key => 'country_id'
6
+
7
+ has_many :cities, :class_name => 'City', :foreign_key => 'region_id'
8
+
9
+ def self.create_from_ary!( regions, more_values={} )
10
+ regions.each do |values|
11
+
12
+ ## key & title & country required
13
+ attr = {
14
+ key: values[0],
15
+ title: values[1]
16
+ }
17
+
18
+ attr = attr.merge( more_values )
19
+
20
+ ## check for optional values
21
+ values[2..-1].each do |value|
22
+ if value.is_a? Country
23
+ attr[ :country_id ] = value.id
24
+ else
25
+ # issue warning: unknown type for value
26
+ end
27
+ end
28
+
29
+ Region.create!( attr )
30
+ end # each region
31
+ end
32
+
33
+ end # class Region
34
+
35
+ end # module WorldDB::Models
@@ -3,7 +3,7 @@ module WorldDB
3
3
 
4
4
  class CreateDB
5
5
 
6
- ## include WorldDB::Models
6
+ include WorldDB::Models
7
7
 
8
8
 
9
9
  def self.up
@@ -12,14 +12,38 @@ def self.up
12
12
 
13
13
  create_table :countries do |t|
14
14
  t.string :title, :null => false
15
- t.string :tag, :null => false # short three letter tag
16
15
  t.string :key, :null => false
16
+ t.string :tag, :null => false # short three letter tag (FIFA country code)
17
+ t.string :synonyms # comma separated list of synonyms
17
18
  t.timestamps
18
19
  end
19
-
20
+
21
+ create_table :regions do |t|
22
+ t.string :title, :null => false
23
+ t.string :key, :null => false
24
+ t.string :synonyms # comma separated list of synonyms
25
+ t.references :country, :null => false
26
+ t.timestamps
27
+ end
28
+
29
+ create_table :cities do |t|
30
+ t.string :title, :null => false
31
+ t.string :key, :null => false
32
+ t.string :synonyms # comma separated list of synonyms
33
+ t.references :country, :null => false
34
+ t.references :region # optional for now
35
+ t.timestamps
36
+ end
37
+
38
+ create_table :props do |t|
39
+ t.string :key, :null => false
40
+ t.string :value, :null => false
41
+ t.timestamps
42
+ end
43
+
20
44
  end # block Schema.define
21
45
 
22
- ## Prop.create!( key: 'db.schema.version', value: BeerDB::VERSION )
46
+ Prop.create!( key: 'db.schema.world.version', value: WorldDB::VERSION )
23
47
 
24
48
  end # method up
25
49
 
@@ -1,4 +1,4 @@
1
1
 
2
2
  module WorldDB
3
- VERSION = '0.0.1'
3
+ VERSION = '0.1.0'
4
4
  end
data/lib/worlddb.rb CHANGED
@@ -19,7 +19,15 @@ require 'active_record' ## todo: add sqlite3? etc.
19
19
 
20
20
  # our own code
21
21
 
22
+ module WorldDB # forward reference; more to come later
23
+ end
24
+
25
+ require 'worlddb/models/prop'
26
+ require 'worlddb/models/country'
27
+ require 'worlddb/models/region'
28
+ require 'worlddb/models/city'
22
29
  require 'worlddb/schema' # NB: requires worlddb/models (include WorldDB::Models)
30
+ require 'worlddb/loader'
23
31
  require 'worlddb/version'
24
32
  require 'worlddb/cli/opts'
25
33
  require 'worlddb/cli/runner'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: worlddb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 0
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gerald Bauer
@@ -76,9 +76,18 @@ files:
76
76
  - README.markdown
77
77
  - Rakefile
78
78
  - bin/worlddb
79
+ - db/at/cities.rb
80
+ - db/cities.rb
81
+ - db/countries.rb
82
+ - db/de/cities.rb
79
83
  - lib/worlddb.rb
80
84
  - lib/worlddb/cli/opts.rb
81
85
  - lib/worlddb/cli/runner.rb
86
+ - lib/worlddb/loader.rb
87
+ - lib/worlddb/models/city.rb
88
+ - lib/worlddb/models/country.rb
89
+ - lib/worlddb/models/prop.rb
90
+ - lib/worlddb/models/region.rb
82
91
  - lib/worlddb/schema.rb
83
92
  - lib/worlddb/version.rb
84
93
  homepage: http://geraldb.github.com/world.db