worlddb 1.6.0 → 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
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