worlddb 1.6.1 → 1.6.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -17,14 +17,14 @@ Hoe.spec 'worlddb' do
17
17
 
18
18
  self.author = 'Gerald Bauer'
19
19
  self.email = 'opensport@googlegroups.com'
20
-
20
+
21
21
  self.extra_deps = [
22
- ['textutils', '>= 0.5.0'],
22
+ ['textutils', '~> 0.5'], # e.g. >= 0.5 && <= 1.0
23
23
  ['commander', '~> 4.1.3'],
24
24
  ['activerecord', '~> 3.2'] # NB: will include activesupport,etc.
25
25
  ### ['sqlite3', '~> 1.3'] # NB: install on your own; remove dependency
26
26
  ]
27
-
27
+
28
28
  self.licenses = ['Public Domain']
29
29
 
30
30
  self.spec_extras = {
@@ -71,7 +71,7 @@ namespace :worlddb do
71
71
  end
72
72
 
73
73
  task :import => :env do
74
- WorldDb.read_setup( 'setups/sport.db.admin', '../world.db', skip_tags: true ) # populate world tables
74
+ WorldDb.read_setup( 'setups/europe.at', '../world.db', skip_tags: true ) # populate world tables
75
75
  WorldDb.stats
76
76
  end
77
77
 
@@ -1,3 +1,5 @@
1
+ # encoding: UTF-8
2
+
1
3
  module WorldDb
2
4
 
3
5
  class Reader
@@ -107,15 +109,18 @@ class Reader
107
109
  load_xxx( 'motor', name )
108
110
  elsif name =~ /^tag.*\.(\d)$/
109
111
  load_tags( name, :grade => $1.to_i )
110
- elsif name =~ /^([a-z][a-z\-]+[a-z])\/countries/ # e.g. africa/countries or america/countries
112
+ elsif name =~ /^([a-z][a-z\-_]+[a-z])\/countries/ # e.g. africa/countries or america/countries
111
113
  ### NB: continent changed to regions (e.g. middle-east, caribbean, north-america, etc.)
112
- ### fix/cleanup/todo:
113
114
  ## auto-add continent (from folder structure) as tag
114
- ## load_countries( name, include_path, :tags => $1 )
115
- load_countries( name )
115
+ ## fix: allow dash/hyphen/minus in tag
116
+ load_countries( name, :tags => $1.tr('-', '_') )
116
117
  elsif name =~ /\/([a-z]{2})\/cities/
117
118
  ## auto-add required country code (from folder structure)
118
119
  load_cities( $1, name )
120
+ elsif name =~ /\/([a-z]{2})\/regions\.abbr/
121
+ load_regions_xxx( $1, 'abbr', name )
122
+ elsif name =~ /\/([a-z]{2})\/regions\.iso/
123
+ load_regions_xxx( $1, 'iso', name )
119
124
  elsif name =~ /\/([a-z]{2})\/regions/
120
125
  ## auto-add required country code (from folder structure)
121
126
  load_regions( $1, name )
@@ -139,6 +144,26 @@ class Reader
139
144
  end
140
145
 
141
146
 
147
+ def load_regions_xxx( country_key, xxx, name )
148
+ path = "#{include_path}/#{name}.yml"
149
+
150
+ logger.info "parsing data '#{name}' (#{path})..."
151
+
152
+ country = Country.find_by_key!( country_key )
153
+ logger.debug "Country #{country.key} >#{country.title} (#{country.code})<"
154
+
155
+ reader = HashReader.new( path )
156
+
157
+ reader.each do |key, value|
158
+ region = Region.find_by_country_id_and_key!( country.id, key )
159
+ region.send( "#{xxx}=", value )
160
+ region.save!
161
+ end
162
+
163
+ Prop.create_from_fixture!( name, path )
164
+ end
165
+
166
+
142
167
  def load_cities( country_key, name )
143
168
  country = Country.find_by_key!( country_key )
144
169
  logger.debug "Country #{country.key} >#{country.title} (#{country.code})<"
@@ -307,7 +332,7 @@ class Reader
307
332
  def load_usages( name )
308
333
  path = "#{include_path}/#{name}.yml"
309
334
 
310
- puts "*** parsing data '#{name}' (#{path})..."
335
+ logger.info "parsing data '#{name}' (#{path})..."
311
336
 
312
337
  reader = HashReader.new( path )
313
338
 
@@ -336,7 +361,7 @@ class Reader
336
361
  def load_xxx( xxx, name )
337
362
  path = "#{include_path}/#{name}.yml"
338
363
 
339
- puts "*** parsing data '#{name}' (#{path})..."
364
+ logger.info "parsing data '#{name}' (#{path})..."
340
365
 
341
366
  reader = HashReader.new( path )
342
367
 
@@ -354,7 +379,7 @@ private
354
379
  def load_fixtures_for( clazz, name, more_values={} ) # load from file system
355
380
  path = "#{include_path}/#{name}.txt"
356
381
 
357
- puts "*** parsing data '#{name}' (#{path})..."
382
+ logger.info "parsing data '#{name}' (#{path})..."
358
383
 
359
384
  reader = ValuesReader.new( path, more_values )
360
385
 
@@ -440,9 +465,15 @@ private
440
465
  value_popm = value_popm_str.gsub(/[ _]/, '').to_i
441
466
  attribs[ :popm ] = value_popm
442
467
  attribs[ :m ] = true # auto-mark city as m|metro too
468
+ elsif value =~ /^[A-Z]{2}$/ && clazz == City ## assume region code e.g. TX for city
469
+ value_region = Region.find_by_key_and_country_id!( value.downcase, attribs[:country_id] )
470
+ attribs[ :region_id ] = value_region.id
443
471
  elsif value =~ /^[A-Z]{2,3}$/ ## assume two or three-letter code
444
472
  attribs[ :code ] = value
445
- elsif value =~ /(^[0-9]{1,2}$)|(^[0-9][0-9 _]+[0-9]$)/ ## numeric (nb: can use any _ or spaces inside digits e.g. 1_000_000 or 1 000 000)
473
+ elsif value =~ /^([0-9][0-9 _]+[0-9]|[0-9]{1,2})(?:\s*(?:km2|km²)\s*)$/
474
+ ## allow numbers like 453 km²
475
+ value_numbers << value.gsub( 'km2', '').gsub( 'km²', '' ).gsub(/[ _]/, '').to_i
476
+ elsif value =~ /^([0-9][0-9 _]+[0-9])|([0-9]{1,2})$/ ## numeric (nb: can use any _ or spaces inside digits e.g. 1_000_000 or 1 000 000)
446
477
  value_numbers << value.gsub(/[ _]/, '').to_i
447
478
  elsif (values.size==(index+1)) && value =~ /^[a-z0-9\|_ ]+$/ # tags must be last entry
448
479
 
@@ -479,7 +510,9 @@ private
479
510
  else # countries,regions
480
511
  attribs[ :area ] = value_numbers[0]
481
512
  attribs[ :pop ] = value_numbers[1]
482
-
513
+
514
+
515
+ =begin
483
516
  if clazz == Country
484
517
  # auto-add tags
485
518
  area = value_numbers[0]
@@ -516,8 +549,11 @@ private
516
549
  value_tag_keys << 'pop_10m_n_up' if pop >= 10_000_000
517
550
  value_tag_keys << 'pop_1m_n_up' if pop >= 1_000_000
518
551
  end
552
+ =end
553
+
554
+
519
555
  end
520
- end
556
+ end # if value_numbers.size > 0
521
557
 
522
558
  rec = nil
523
559
 
@@ -49,10 +49,16 @@ add_index :countries, :key, :unique => true
49
49
  add_index :countries, :code, :unique => true
50
50
 
51
51
 
52
+ ######
53
+ # NB: rename to adms/admins ??
54
+ #
55
+ # used for state/provice/land/regioni/etc.
52
56
  create_table :regions do |t|
53
57
  t.string :title, :null => false
54
58
  t.string :key, :null => false
55
59
  t.string :code # short two or three letter code e.g. NY, OAX, etc.
60
+ t.string :abbr # optional conventional abbrevation (e.g. Stmk., Gto., etc.)
61
+ t.string :iso # iso code
56
62
  t.string :synonyms # comma separated list of synonyms
57
63
  t.references :country, :null => false
58
64
  t.integer :pop # optional population count
@@ -1,6 +1,6 @@
1
1
 
2
2
  module WorldDb
3
- VERSION = '1.6.1' # sync version w/ sport.db - why? why not?
3
+ VERSION = '1.6.2' # sync version w/ sport.db - why? why not?
4
4
  end
5
5
 
6
6
  ###########################################
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: worlddb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 1.6.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-11 00:00:00.000000000 Z
12
+ date: 2013-03-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: textutils
16
- requirement: &81213940 !ruby/object:Gem::Requirement
16
+ requirement: &77745350 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ! '>='
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.5.0
21
+ version: '0.5'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *81213940
24
+ version_requirements: *77745350
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: commander
27
- requirement: &81213720 !ruby/object:Gem::Requirement
27
+ requirement: &77745130 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 4.1.3
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *81213720
35
+ version_requirements: *77745130
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activerecord
38
- requirement: &81213510 !ruby/object:Gem::Requirement
38
+ requirement: &77744920 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.2'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *81213510
46
+ version_requirements: *77744920
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdoc
49
- requirement: &81213290 !ruby/object:Gem::Requirement
49
+ requirement: &77744700 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '3.10'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *81213290
57
+ version_requirements: *77744700
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hoe
60
- requirement: &81213070 !ruby/object:Gem::Requirement
60
+ requirement: &77744480 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '3.3'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *81213070
68
+ version_requirements: *77744480
69
69
  description: worlddb - world.db command line tool
70
70
  email: opensport@googlegroups.com
71
71
  executables: