worlddb-models 2.3.2 → 2.3.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: af7ca070ea7895fb6595ea3c09d9081945bb9810
4
- data.tar.gz: eabe0f34bb806d94ea6a24fe69fcf8656b9aad22
3
+ metadata.gz: 7fd3e4a124d077f78bb176f7a6bc5b57ae15e5a9
4
+ data.tar.gz: 4cc9e212e7fb37bb21d557a262698411daacb754
5
5
  SHA512:
6
- metadata.gz: 31b2084fb1d59c8e663d36e25be45aa03111f51af310923369b64336f3d628436686a7c39fa8044dd39cb98eb1830fce55fafa41362a55499ebcc4b300e23675
7
- data.tar.gz: e2651f5001624057d10444c333c4d4a497ec4044f02a8cf2ad67183a19a974b866ffbe4e50f28030296a9fbed841d75620c1e3ff9df9771cde814f5c4415ebdc
6
+ metadata.gz: 563ffc1f779a443c5126c41c8ab6385a653a74634cacbbc7d6a397f17d83be00c73b40356c1d2c7878122f8ad96138d71a5dbef934b4fa3123958add12319534
7
+ data.tar.gz: 1bf7aa7c891b4d404a60a08d3e24abecaeb042a71758f1463c5704104bd85ca1c2d0f06e0e1131d24de083f4d98e8736894f8fd60116f114238e2cbb3d03db04
data/Manifest.txt CHANGED
@@ -74,3 +74,4 @@ test/test_parse_state.rb
74
74
  test/test_report_country.rb
75
75
  test/test_state_tree_reader_at.rb
76
76
  test/test_state_tree_reader_de.rb
77
+ test/test_state_tree_reader_name_finder.rb
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ Hoe.spec 'worlddb-models' do
17
17
  self.extra_deps = [
18
18
  ['props', '>= 1.1.2'], # settings / prop(ertie)s / env / INI
19
19
  ['logutils', '>= 0.6.1'], # logging
20
- ['textutils', '>= 1.3.0'],
20
+ ['textutils', '>= 1.3.1'],
21
21
 
22
22
  ['tagutils', '>= 0.3.0'], # tags n categories for activerecord
23
23
  ['activerecord-utils', '>= 0.2.0'],
@@ -6,6 +6,8 @@ module WorldDb
6
6
 
7
7
  class Name < ActiveRecord::Base
8
8
 
9
+ belongs_to :place, class_name: 'Place', foreign_key: 'place_id'
10
+
9
11
 
10
12
  def self.parse( *args )
11
13
  ## remove (extract) attribs hash (if last arg is a hash n present)
@@ -7,6 +7,10 @@ class Place < ActiveRecord::Base
7
7
 
8
8
  ## todo: depending on type
9
9
  ## has_one continent, country, state, city etc.
10
+ has_one :state, class_name: 'State', foreign_key: 'place_id'
11
+ has_one :county, class_name: 'County', foreign_key: 'place_id'
12
+ has_one :muni, class_name: 'Muni', foreign_key: 'place_id'
13
+ ## add more types..
10
14
 
11
15
  end # class Place
12
16
 
@@ -36,17 +36,55 @@ class StateTreeReader < ReaderBaseWithMoreAttribs
36
36
  puts " #{names.join( ' › ' )}:"
37
37
  puts " key: >#{node.key}<, level: >#{node.level}<, value: >#{node.value}<"
38
38
 
39
+ ## use name for lookup - use where() to find - might match more than 1 record!!
40
+ ## todo/fix: check for multiple or no matches!!!
41
+ ## todo/fix: check how to add state.id scope (and country.id scope) etc.
42
+ ## add state.id to name - why? why not?
43
+ ## move finders to name model for reuse (and testing) - why? why not ??
39
44
  if node.level == state_level # 1
40
- rec = State.where( "name like '#{node.value}%'" ).first
45
+ ## was: rec = State.where( "name like '#{node.value}%'" ).first
46
+ names = Name.joins(
47
+ :place => :state
48
+ ).find_by(
49
+ :name => node.value,
50
+ :place_kind => 'STAT',
51
+ :'states.country_id' => country.id )
52
+ rec = if names.nil?
53
+ nil
54
+ else
55
+ names.place.state # get first record; fix: use where instead of find_by etc.
56
+ end
41
57
  elsif node.level == part_level # 2
42
58
  state = stack[0]
43
59
  rec = Part.where( "name like '#{node.value}%' AND state_id = #{state.id}" ).first
44
60
  elsif node.level == county_level # 2 or 3
45
61
  state = stack[0]
46
- rec = County.where( "name like '#{node.value}%' AND state_id = #{state.id}" ).first
62
+ ## was: rec = County.where( "name like '#{node.value}%' AND state_id = #{state.id}" ).first
63
+ names = Name.joins(
64
+ :place => :county
65
+ ).find_by(
66
+ :name => node.value,
67
+ :place_kind => 'COUN',
68
+ :'counties.state_id' => state.id )
69
+ rec = if names.nil?
70
+ nil
71
+ else
72
+ names.place.county # get first record
73
+ end
47
74
  elsif node.level == muni_level # 3 or 4
48
75
  state = stack[0]
49
- rec = Muni.where( "name like '#{node.value}%' AND state_id = #{state.id}" ).first
76
+ ## was: rec = Muni.where( "name like '#{node.value}%' AND state_id = #{state.id}" ).first
77
+ names = Name.joins(
78
+ :place => :muni
79
+ ).find_by(
80
+ :name => node.value,
81
+ :place_kind => 'MUNI',
82
+ :'munis.state_id' => state.id )
83
+ rec = if names.nil?
84
+ nil
85
+ else
86
+ names.place.muni # get first record
87
+ end
50
88
  elsif node.level == city_level # 4 or 5
51
89
  ## note: city requires country scope for lookup
52
90
  ## todo/fix: how to deal with cities with the same name
@@ -5,7 +5,7 @@ module WorldDb
5
5
  # sync version w/ sport.db n friends - why? why not?
6
6
  MAJOR = 2 ## todo: namespace inside version or something - why? why not??
7
7
  MINOR = 3
8
- PATCH = 2
8
+ PATCH = 3
9
9
  VERSION = [MAJOR,MINOR,PATCH].join('.')
10
10
 
11
11
  def self.version
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_state_tree_reader_name_finder.rb
6
+
7
+
8
+ require 'helper'
9
+
10
+ class TestStateTreeReaderNameFinder < MiniTest::Test
11
+
12
+ def setup
13
+ # delete all countries, states, cities in in-memory only db
14
+ WorldDb.delete!
15
+ end
16
+
17
+ def test_at
18
+ at = Country.create!( key: 'at',
19
+ name: 'Austria',
20
+ code: 'AUT',
21
+ pop: 0,
22
+ area: 0 )
23
+
24
+ reader = WorldDb::Reader.new( "#{WorldDb.root}/test/data/at-austria" )
25
+ reader.load_setup( 'setups/adm' )
26
+
27
+ n = State.find_by!( key: 'n' )
28
+
29
+
30
+ ## find counties w/ state_id using names
31
+ names = Name.joins( :place => :county ).where(
32
+ :name => 'Horn',
33
+ :place_kind => 'COUN',
34
+ :'counties.state_id' => n.id )
35
+ ## results in:
36
+ ## SELECT "names".* FROM "names"
37
+ ## INNER JOIN "places" ON "places"."id" = "names"."place_id"
38
+ ## INNER JOIN "counties" ON "counties"."place_id" = "places"."id"
39
+ ## WHERE "names"."name" = ?
40
+ ## AND "names"."place_kind" = ?
41
+ ## AND "counties"."state_id" = 2
42
+ ## [["name", "Horn"], ["place_kind", "COUN"]]
43
+
44
+ pp names
45
+
46
+
47
+ ## find munies w/ state_id using names
48
+ names = Name.joins( :place => :muni ).where(
49
+ :name => 'Horn',
50
+ :place_kind => 'MUNI',
51
+ :'munis.state_id' => n.id )
52
+
53
+ ## results in:
54
+ ## SELECT "names".* FROM "names"
55
+ ## INNER JOIN "places" ON "places"."id" = "names"."place_id"
56
+ ## INNER JOIN "munis" ON "munis"."place_id" = "places"."id"
57
+ ## WHERE "names"."name" = ?
58
+ ## AND "names"."place_kind" = ?
59
+ ## AND "munis"."state_id" = 2
60
+ ## [["name", "Horn"], ["place_kind", "MUNI"]]
61
+
62
+ pp names
63
+
64
+ end
65
+
66
+ end # class TestStateTreeReaderNameFinder
67
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: worlddb-models
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.2
4
+ version: 2.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-14 00:00:00.000000000 Z
11
+ date: 2015-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: props
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 1.3.0
47
+ version: 1.3.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.3.0
54
+ version: 1.3.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: tagutils
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -250,6 +250,7 @@ files:
250
250
  - test/test_report_country.rb
251
251
  - test/test_state_tree_reader_at.rb
252
252
  - test/test_state_tree_reader_de.rb
253
+ - test/test_state_tree_reader_name_finder.rb
253
254
  homepage: https://github.com/worlddb/world.db.models
254
255
  licenses:
255
256
  - Public Domain
@@ -288,6 +289,7 @@ test_files:
288
289
  - test/test_model_state.rb
289
290
  - test/test_model_city.rb
290
291
  - test/test_fixture_matchers.rb
292
+ - test/test_state_tree_reader_name_finder.rb
291
293
  - test/test_model_country.rb
292
294
  - test/test_parse_city.rb
293
295
  - test/test_report_country.rb