worlddb 1.6.0 → 1.6.1

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.
data/Manifest.txt CHANGED
@@ -10,6 +10,7 @@ lib/worlddb/console.rb
10
10
  lib/worlddb/data/fixtures.rb
11
11
  lib/worlddb/deleter.rb
12
12
  lib/worlddb/models/city.rb
13
+ lib/worlddb/models/continent.rb
13
14
  lib/worlddb/models/country.rb
14
15
  lib/worlddb/models/lang.rb
15
16
  lib/worlddb/models/prop.rb
@@ -14,12 +14,13 @@ require 'yaml'
14
14
 
15
15
  ## shortcuts for models
16
16
 
17
- Tag = WorldDb::Models::Tag
18
- Tagging = WorldDb::Models::Tagging
19
- Country = WorldDb::Models::Country
20
- Region = WorldDb::Models::Region
21
- City = WorldDb::Models::City
22
- Prop = WorldDb::Models::Prop
17
+ Tag = WorldDb::Models::Tag
18
+ Tagging = WorldDb::Models::Tagging
19
+ Continent = WorldDb::Models::Continent
20
+ Country = WorldDb::Models::Country
21
+ Region = WorldDb::Models::Region
22
+ City = WorldDb::Models::City
23
+ Prop = WorldDb::Models::Prop
23
24
 
24
25
  ## connect to db
25
26
 
@@ -36,11 +37,9 @@ ActiveRecord::Base.establish_connection( DB_CONFIG )
36
37
  ## test drive
37
38
 
38
39
  puts "Welcome to world.db, version #{WorldDb::VERSION}!"
39
- puts " #{'%6d' % Country.count} countries"
40
- puts " #{'%6d' % Region.count} regions"
41
- puts " #{'%6d' % City.count} cities"
42
- puts " #{'%6d' % Tagging.count} taggings"
43
- puts " #{'%6d' % Tag.count} tags"
40
+
41
+ WorldDb.stats
42
+
44
43
  puts "Ready."
45
44
 
46
45
  ## some countries
@@ -16,6 +16,7 @@ module WorldDb
16
16
  City.delete_all
17
17
  Region.delete_all
18
18
  Country.delete_all
19
+ Continent.delete_all
19
20
  Usage.delete_all
20
21
  Lang.delete_all
21
22
  Prop.delete_all
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ module WorldDb::Models
4
+
5
+ class Continent < ActiveRecord::Base
6
+
7
+ has_many :countries
8
+
9
+ # NB: allow dots in keys e.g. concacaf.naf etc.
10
+
11
+ end # class Continent
12
+
13
+ end # module WorldDb::Models
@@ -5,6 +5,8 @@ module WorldDb::Models
5
5
  class Country < ActiveRecord::Base
6
6
  self.table_name = 'countries'
7
7
 
8
+ belongs_to :continent, :class_name => 'Continent', :foreign_key => 'continent_id'
9
+
8
10
  has_many :usages
9
11
  has_many :langs, :through => :usages # lang(uage)s through usages (that is, countries_langs) join table
10
12
 
@@ -89,7 +89,11 @@ class Reader
89
89
 
90
90
  def load( name )
91
91
 
92
- if name =~ /^lang/
92
+ if name =~ /^continents/
93
+ load_continent_defs( name )
94
+ elsif name =~ /\/continents/
95
+ load_continent_refs( name )
96
+ elsif name =~ /^lang/
93
97
  load_langs( name )
94
98
  elsif name =~ /\/lang/
95
99
  load_usages( name )
@@ -158,6 +162,55 @@ class Reader
158
162
  end
159
163
 
160
164
 
165
+ def load_continent_refs( name )
166
+ path = "#{include_path}/#{name}.yml"
167
+
168
+ logger.info "parsing data '#{name}' (#{path})..."
169
+
170
+ reader = HashReader.new( path )
171
+
172
+ reader.each do |key, value|
173
+ country = Country.find_by_key!( key )
174
+ continent = Continent.find_by_key!( value )
175
+ country.continent_id = continent.id
176
+ country.save!
177
+ end
178
+
179
+ Prop.create_from_fixture!( name, path )
180
+ end
181
+
182
+ def load_continent_defs( name, more_values={} )
183
+ path = "#{include_path}/#{name}.txt"
184
+
185
+ logger.info "parsing data '#{name}' (#{path})..."
186
+
187
+ reader = ValuesReader.new( path, more_values )
188
+
189
+ reader.each_line do |attribs, values|
190
+
191
+ ## check optional values
192
+ values.each_with_index do |value, index|
193
+ logger.warn "unknown type for value >#{value}<"
194
+ end
195
+
196
+ rec = Continent.find_by_key( attribs[ :key ] )
197
+ if rec.present?
198
+ logger.debug "update Continent #{rec.id}-#{rec.key}:"
199
+ else
200
+ logger.debug "create Continent:"
201
+ rec = Continent.new
202
+ end
203
+
204
+ logger.debug attribs.to_json
205
+
206
+ rec.update_attributes!( attribs )
207
+
208
+ end # each lines
209
+
210
+ Prop.create_from_fixture!( name, path )
211
+
212
+ end # load_continent_defs
213
+
161
214
 
162
215
  def load_langs( name )
163
216
 
@@ -5,6 +5,18 @@ class CreateDb < ActiveRecord::Migration
5
5
 
6
6
  def up
7
7
 
8
+ create_table :continents do |t|
9
+ t.string :title, :null => false
10
+ t.string :key, :null => false
11
+ t.string :synonyms # comma separated list of synonyms
12
+
13
+ ## timestamp at last
14
+ t.timestamps
15
+ end
16
+
17
+ add_index :continents, :key, :unique => true
18
+
19
+
8
20
  create_table :countries do |t|
9
21
  t.string :title, :null => false
10
22
  t.string :key, :null => false
@@ -12,7 +24,8 @@ create_table :countries do |t|
12
24
  t.string :synonyms # comma separated list of synonyms
13
25
  t.integer :pop, :null => false # population count
14
26
  t.integer :area, :null => false # area in square km (sq. km)
15
- t.references :country # for supra(nationals) n depend(encies)
27
+ t.references :continent
28
+ t.references :country # for supra(nationals) n depend(encies)
16
29
 
17
30
  ## flags (use single int named flags - why? why not?
18
31
  t.boolean :s, :null => false, :default => false # supra(national) flag e.g. eu
data/lib/worlddb/stats.rb CHANGED
@@ -7,6 +7,7 @@ module WorldDb
7
7
 
8
8
  def tables
9
9
  puts "Stats:"
10
+ puts " #{'%5d' % Continent.count} continents"
10
11
  puts " #{'%5d' % Country.count} countries (#{Country.where(s: true).count} supras, #{Country.where(d:true).count} deps)"
11
12
  puts " #{'%5d' % Region.count} regions"
12
13
  puts " #{'%5d' % City.where(m: true).where(c: false).count} metros"
@@ -1,6 +1,6 @@
1
1
 
2
2
  module WorldDb
3
- VERSION = '1.6.0' # sync version w/ sport.db - why? why not?
3
+ VERSION = '1.6.1' # sync version w/ sport.db - why? why not?
4
4
  end
5
5
 
6
6
  ###########################################
data/lib/worlddb.rb CHANGED
@@ -27,6 +27,7 @@ require 'textutils'
27
27
  require 'worlddb/version'
28
28
 
29
29
  require 'worlddb/models/prop'
30
+ require 'worlddb/models/continent'
30
31
  require 'worlddb/models/country'
31
32
  require 'worlddb/models/region'
32
33
  require 'worlddb/models/city'
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.0
4
+ version: 1.6.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-06 00:00:00.000000000 Z
12
+ date: 2013-03-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: textutils
16
- requirement: &82489880 !ruby/object:Gem::Requirement
16
+ requirement: &81213940 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.5.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *82489880
24
+ version_requirements: *81213940
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: commander
27
- requirement: &82489650 !ruby/object:Gem::Requirement
27
+ requirement: &81213720 !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: *82489650
35
+ version_requirements: *81213720
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activerecord
38
- requirement: &82489410 !ruby/object:Gem::Requirement
38
+ requirement: &81213510 !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: *82489410
46
+ version_requirements: *81213510
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rdoc
49
- requirement: &82489190 !ruby/object:Gem::Requirement
49
+ requirement: &81213290 !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: *82489190
57
+ version_requirements: *81213290
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hoe
60
- requirement: &82488960 !ruby/object:Gem::Requirement
60
+ requirement: &81213070 !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: *82488960
68
+ version_requirements: *81213070
69
69
  description: worlddb - world.db command line tool
70
70
  email: opensport@googlegroups.com
71
71
  executables:
@@ -86,6 +86,7 @@ files:
86
86
  - lib/worlddb/data/fixtures.rb
87
87
  - lib/worlddb/deleter.rb
88
88
  - lib/worlddb/models/city.rb
89
+ - lib/worlddb/models/continent.rb
89
90
  - lib/worlddb/models/country.rb
90
91
  - lib/worlddb/models/lang.rb
91
92
  - lib/worlddb/models/prop.rb