geogov 0.0.7 → 0.0.8

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.
@@ -20,15 +20,15 @@ module Geogov
20
20
  raise ArgumentError.new("#{instance.class} doesn't respond to #{method}")
21
21
  end
22
22
 
23
- # caching_instance = SimpleCache.new(instance)
23
+ caching_instance = SimpleCache.new(instance)
24
24
  @@methods ||= {}
25
- @@methods[method] = instance
25
+ @@methods[method] = caching_instance
26
26
 
27
27
  unless self.methods().include?(method)
28
28
  dispatcher = <<-EOS
29
- def #{method}(*args, &block)
30
- @@methods[:#{method}].__send__(#{method.inspect}, *args, &block)
31
- end
29
+ def #{method}(*args, &block)
30
+ @@methods[:#{method}].__send__(#{method.inspect}, *args, &block)
31
+ end
32
32
  EOS
33
33
  module_eval(dispatcher)
34
34
  end
@@ -38,16 +38,6 @@ module Geogov
38
38
  yield self
39
39
  end
40
40
 
41
- def lat_lon_from_postcode(postcode)
42
- result = Mapit.new().lat_lon_from_postcode(postcode)
43
-
44
- if result.nil?
45
- raise UnrecognizedLocationError
46
- end
47
-
48
- result
49
- end
50
-
51
41
  provider_for :nearest_place_name, DracosGazetteer.new()
52
42
 
53
43
  provider_for :lat_lon_to_country, Geonames.new()
@@ -65,6 +55,3 @@ module Geogov
65
55
  extend self
66
56
 
67
57
  end
68
-
69
-
70
-
@@ -1,8 +1,8 @@
1
1
  module Geogov
2
2
  class GeoStack
3
3
 
4
- attr_accessor :ward, :council, :nation, :country, :region, :lat, :lon, :authorities, :fuzzy_point
5
- attr_reader :postcode
4
+ attr_accessor :ward, :council, :nation, :country, :wmc, :lat, :lon, :friendly_name
5
+ attr_reader :postcode, :fuzzy_point
6
6
 
7
7
  def initialize(&block)
8
8
  if block_given?
@@ -58,10 +58,13 @@ module Geogov
58
58
  {
59
59
  :fuzzy_point => self.fuzzy_point.to_hash,
60
60
  :postcode => self.postcode,
61
- :council => self.council,
62
61
  :ward => self.ward,
62
+ :council => self.council,
63
+ :nation => self.nation,
64
+ :country => self.country,
65
+ :wmc => self.wmc,
63
66
  :friendly_name => self.friendly_name
64
- }#.select {|k,v| !(v.nil?) }
67
+ }.select {|k,v| !(v.nil?) }
65
68
  end
66
69
 
67
70
  def update(hash)
@@ -76,52 +79,6 @@ module Geogov
76
79
  empty.fuzzy_point = empty.calculate_fuzzy_point
77
80
  end
78
81
  end
79
-
80
- def friendly_name
81
- @friendly_name ||= build_locality
82
- end
83
-
84
- def has_authority?( type )
85
- get_authority(type) ? true : false
86
- end
87
-
88
- def get_authority( type )
89
- return false if self.authorities[type.upcase.to_sym] == true
90
- self.authorities.nil? or self.authorities[type.upcase.to_sym].nil? ? false : self.authorities[type.upcase.to_sym]
91
- end
92
-
93
- def formatted_authority_name( type )
94
- return false unless has_authority?(type)
95
- name = get_authority(type)['name'].dup
96
-
97
- name.sub!(/ *((District Council|Borough Council|Community|County Council|City Council|Council) ?)+/,'')
98
- name.sub!(/ (North|East|South|West|Central)$/,'')
99
- name.sub!(/Mid /,'')
100
-
101
- name
102
- end
103
-
104
- def build_locality
105
- return false unless self.authorities
106
-
107
- case
108
- when has_authority?('DIS') && has_authority?('CTY')
109
- locality = ['DIS','CTY']
110
- when has_authority?('LBO')
111
- locality = ['LBO','London']
112
- when has_authority?('UTA') && has_authority?('CPC') # for cornwall civil parishes
113
- locality = ['CPC','UTA']
114
- when has_authority?('UTA') && has_authority?('UTE')
115
- locality = ['UTE','UTA']
116
- when has_authority?('UTA') && has_authority?('UTW')
117
- locality = ['UTW','UTA']
118
- when has_authority?('MTW') && has_authority?('MTD')
119
- locality = ['MTW','MTD']
120
- else
121
- return false
122
- end
123
- locality.map {|t| formatted_authority_name(t) || t }.uniq.join(', ')
124
- end
125
82
 
126
83
  def has_valid_lat_lon(hash)
127
84
  return (hash['lon'] and hash['lat'] and hash['lon'] != "" and hash['lat'] != "")
@@ -133,12 +90,16 @@ module Geogov
133
90
  fields = Geogov.areas_for_stack_from_postcode(postcode)
134
91
  if fields
135
92
  lat_lon = fields[:point]
93
+ if lat_lon
94
+ self.friendly_name = Geogov.nearest_place_name(lat_lon['lat'],lat_lon['lon'])
95
+ end
136
96
  set_fields(fields.select {|k,v| k != :point})
137
97
  end
138
98
  end
139
99
  end
140
100
 
141
101
  def fetch_missing_fields_for_coords(lat, lon)
102
+ self.friendly_name = Geogov.nearest_place_name(lat, lon)
142
103
  fields = Geogov.areas_for_stack_from_coords(lat, lon)
143
104
  if ['England', 'Scotland', 'Northern Ireland', 'Wales'].include?(fields[:nation])
144
105
  self.country = 'UK'
@@ -154,9 +115,7 @@ module Geogov
154
115
  self.send(setter,value)
155
116
  end
156
117
  else
157
- self.authorities ||= { }
158
- self.authorities[geo] = value
159
- # raise ArgumentError, "geo type '#{geo}' is not a valid geo type"
118
+ raise ArgumentError, "geo type '#{geo}' is not a valid geo type"
160
119
  end
161
120
  end
162
121
  self
@@ -51,10 +51,12 @@ module Geogov
51
51
  def translate_area_type_to_shortcut(area_type)
52
52
  if ['COP', 'LBW', 'LGE', 'MTW', 'UTE', 'UTW', 'DIW'].include?(area_type)
53
53
  return 'ward'
54
- elsif ['CTY', 'CED', 'MTD', 'UTA', 'DIS', 'LBO', 'LGD'].include?(area_type)
55
- return 'council'
56
- elsif area_type == 'EUR'
57
- return 'region'
54
+ elsif ['CTY', 'CED'].include?(area_type)
55
+
56
+ git
57
+ return 'council' # county
58
+ elsif ['DIS', 'LBO'].include?(area_type)
59
+ return 'council' # district
58
60
  elsif area_type == 'WMC' # XXX Also maybe 'EUR', 'NIE', 'SPC', 'SPE', 'WAC', 'WAE', 'OLF', 'OLG', 'OMF', 'OMG')
59
61
  return 'WMC'
60
62
  end
@@ -63,12 +65,8 @@ module Geogov
63
65
  def areas_for_stack_from_coords(lat, lon)
64
66
  query = self.point("4326", [lon, lat])
65
67
  results = {:point => {'lat' => lat, 'lon' => lon}}
66
- councils = { }
67
-
68
68
  query.each do |id, area_info|
69
- type = area_info['type'].upcase.to_sym
70
69
  level = translate_area_type_to_shortcut(area_info['type'])
71
-
72
70
  if level
73
71
  level = level.downcase.to_sym
74
72
  results[level] = [] unless results[level]
@@ -77,24 +75,15 @@ module Geogov
77
75
  results[level] << level_info
78
76
  results[:nation] = area_info['country_name'] if results[:nation].nil?
79
77
  end
80
-
81
- councils[type] = { 'name' => area_info['name'], 'type' => area_info['type'], 'id' => area_info['id'] }
82
78
  end
83
-
84
- return councils.merge results
79
+ return results
85
80
  end
86
81
 
87
82
  def areas_for_stack_from_postcode(postcode)
88
83
  query = self.postcode(postcode)
89
84
  results = {}
90
85
 
91
- if query && query['areas']
92
-
93
- query['areas'].each do |i, area|
94
- type = area['type'].to_sym
95
- results[type] = area
96
- end
97
-
86
+ if query && query['shortcuts'] && query['areas']
98
87
  query['shortcuts'].each do |typ, i|
99
88
  if i.is_a? Hash
100
89
  ids = i.values()
@@ -3,6 +3,7 @@ require 'test_helper'
3
3
  class GovspeakTest < Test::Unit::TestCase
4
4
 
5
5
  test "IP-located stack should have country" do
6
+
6
7
  Geogov.configure do |g|
7
8
  g.provider_for :centre_of_country, stub(:centre_of_country => {"lat"=>37, "lon"=>-96})
8
9
  g.provider_for :remote_location, stub(:remote_location => {'country' => 'US'})
@@ -73,52 +74,4 @@ class GovspeakTest < Test::Unit::TestCase
73
74
  assert_equal :country, stack.fuzzy_point.accuracy
74
75
  end
75
76
 
76
- test "stack with postcode returns correct locality" do
77
- stack = Geogov::GeoStack.new
78
- stack = stack.update( 'postcode' => "SW1A 1AA" )
79
-
80
- assert_equal "Westminster, London", stack.friendly_name
81
- end
82
-
83
- test "stack with coordinates returns correct locality" do
84
- stack = Geogov::GeoStack.new
85
- stack = stack.update( 'lat' => "51.501009", "lon" => "-0.1415870" )
86
-
87
- assert_equal "Westminster, London", stack.friendly_name
88
- end
89
-
90
- test "stack with postcode returns authorities" do
91
- stack = Geogov::GeoStack.new
92
- stack = stack.update( 'postcode' => "SW1A 1AA" )
93
-
94
- assert stack.authorities.any?
95
- end
96
-
97
- test "stack with coordinates returns authorities" do
98
- stack = Geogov::GeoStack.new
99
- stack = stack.update( 'lat' => "51.501009", "lon" => "-0.1415870" )
100
-
101
- assert stack.authorities.any?
102
- end
103
-
104
- test "stack with postcode returns correct locality, ward and council" do
105
- stack = Geogov::GeoStack.new
106
- stack = stack.update( 'postcode' => "SW1A 1AA" )
107
-
108
- assert_equal "Westminster, London", stack.friendly_name
109
- assert stack.ward and stack.ward.any?
110
- assert stack.council and stack.council.any?
111
- assert_equal "Westminster City Council", stack.council.first['name']
112
- end
113
-
114
- test "stack with coordinates returns correct locality, ward and council" do
115
- stack = Geogov::GeoStack.new
116
- stack = stack.update( 'lat' => "51.501009", "lon" => "-0.1415870" )
117
-
118
- assert_equal "Westminster, London", stack.friendly_name
119
- assert stack.ward and stack.ward.any?
120
- assert stack.council and stack.council.any?
121
- assert_equal "Westminster City Council", stack.council.first['name']
122
- end
123
-
124
77
  end
metadata CHANGED
@@ -1,51 +1,47 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: geogov
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.8
4
5
  prerelease:
5
- version: 0.0.7
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Ben Griffiths
9
9
  - James Stewart
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
-
14
- date: 2012-01-26 00:00:00 Z
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
13
+ date: 2012-01-30 00:00:00.000000000Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
17
16
  name: rake
18
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &70356750291540 !ruby/object:Gem::Requirement
19
18
  none: false
20
- requirements:
19
+ requirements:
21
20
  - - ~>
22
- - !ruby/object:Gem::Version
21
+ - !ruby/object:Gem::Version
23
22
  version: 0.9.0
24
23
  type: :development
25
24
  prerelease: false
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
25
+ version_requirements: *70356750291540
26
+ - !ruby/object:Gem::Dependency
28
27
  name: mocha
29
- requirement: &id002 !ruby/object:Gem::Requirement
28
+ requirement: &70356750291060 !ruby/object:Gem::Requirement
30
29
  none: false
31
- requirements:
30
+ requirements:
32
31
  - - ~>
33
- - !ruby/object:Gem::Version
32
+ - !ruby/object:Gem::Version
34
33
  version: 0.9.0
35
34
  type: :development
36
35
  prerelease: false
37
- version_requirements: *id002
36
+ version_requirements: *70356750291060
38
37
  description: Geolocation and utilities for UK Government single domain
39
- email:
38
+ email:
40
39
  - ben@alphagov.co.uk
41
40
  - jystewart@gmail.com
42
41
  executables: []
43
-
44
42
  extensions: []
45
-
46
43
  extra_rdoc_files: []
47
-
48
- files:
44
+ files:
49
45
  - lib/geogov/fuzzy_point.rb
50
46
  - lib/geogov/geo_stack.rb
51
47
  - lib/geogov/providers/dracos_gazetteer.rb
@@ -62,37 +58,28 @@ files:
62
58
  - test/test_helper.rb
63
59
  homepage: http://github.com/alphagov/geogov
64
60
  licenses: []
65
-
66
61
  post_install_message:
67
62
  rdoc_options: []
68
-
69
- require_paths:
63
+ require_paths:
70
64
  - lib
71
- required_ruby_version: !ruby/object:Gem::Requirement
65
+ required_ruby_version: !ruby/object:Gem::Requirement
72
66
  none: false
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 672697299
77
- segments:
78
- - 0
79
- version: "0"
80
- required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
72
  none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 672697299
86
- segments:
87
- - 0
88
- version: "0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
89
77
  requirements: []
90
-
91
78
  rubyforge_project:
92
- rubygems_version: 1.8.12
79
+ rubygems_version: 1.8.10
93
80
  signing_key:
94
81
  specification_version: 3
95
82
  summary: Geolocation and utilities for UK Government single domain
96
- test_files:
83
+ test_files:
97
84
  - test/geogov_test.rb
98
85
  - test/test_helper.rb