geogov 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,28 +7,29 @@ module Geogov
7
7
  def initialize(&block)
8
8
  if block_given?
9
9
  yield self
10
+ raise ArgumentError, "fuzzy point required" unless fuzzy_point
10
11
  else
11
12
  self.fuzzy_point = calculate_fuzzy_point
12
13
  end
13
14
  end
14
15
 
15
16
  def calculate_fuzzy_point
16
- if self.lat and self.lon
17
- return FuzzyPoint.new(self.lat, self.lon, :point)
17
+ if lat && lon
18
+ return FuzzyPoint.new(lat, lon, :point)
18
19
  end
19
20
 
20
- if self.postcode
21
+ if postcode
21
22
  district = postcode.split(" ")[0]
22
23
  district_centre = Geogov.centre_of_district(district)
23
24
  if district_centre
24
- return FuzzyPoint.new(district_centre["lat"],district_centre["lon"],:postcode_district)
25
+ return FuzzyPoint.new(district_centre["lat"], district_centre["lon"],:postcode_district)
25
26
  end
26
27
  end
27
28
 
28
- if self.country
29
- country_centre = Geogov.centre_of_country(self.country)
29
+ if country
30
+ country_centre = Geogov.centre_of_country(country)
30
31
  if country_centre
31
- return FuzzyPoint.new(country_centre["lat"],country_centre["lon"],:country)
32
+ return FuzzyPoint.new(country_centre["lat"], country_centre["lon"],:country)
32
33
  end
33
34
  end
34
35
 
@@ -37,38 +38,31 @@ module Geogov
37
38
 
38
39
  def self.new_from_ip(ip_address)
39
40
  remote_location = Geogov.remote_location(ip_address)
40
- new() do |gs|
41
- if remote_location
42
- gs.country = remote_location['country']
43
- end
41
+ new { |gs|
42
+ gs.country = remote_location['country'] if remote_location
44
43
  gs.fuzzy_point = gs.calculate_fuzzy_point
45
- end
44
+ }
46
45
  end
47
46
 
48
47
  def self.new_from_hash(hash)
49
- new() do |gs|
50
- gs.set_fields(hash)
51
- unless hash['fuzzy_point']
52
- raise ArgumentError, "fuzzy point required"
53
- end
54
- end
48
+ new { |gs| gs.set_fields hash }
55
49
  end
56
50
 
57
51
  def to_hash
58
52
  {
59
- :fuzzy_point => self.fuzzy_point.to_hash,
60
- :postcode => self.postcode,
61
- :council => self.council,
62
- :ward => self.ward,
63
- :friendly_name => self.friendly_name,
64
- :nation => self.nation
65
- }#.select {|k,v| !(v.nil?) }
53
+ :fuzzy_point => fuzzy_point.to_hash,
54
+ :postcode => postcode,
55
+ :council => council,
56
+ :ward => ward,
57
+ :friendly_name => friendly_name,
58
+ :nation => nation
59
+ }
66
60
  end
67
61
 
68
62
  def update(hash)
69
- self.class.new() do |empty|
63
+ self.class.new do |empty|
70
64
  full_postcode = hash['postcode']
71
- empty.set_fields(hash)
65
+ empty.set_fields hash
72
66
  if has_valid_lat_lon(hash)
73
67
  empty.fetch_missing_fields_for_coords(hash['lat'], hash['lon'])
74
68
  elsif full_postcode
@@ -77,55 +71,73 @@ module Geogov
77
71
  empty.fuzzy_point = empty.calculate_fuzzy_point
78
72
  end
79
73
  end
80
-
74
+
81
75
  def friendly_name
82
76
  @friendly_name ||= build_locality
83
77
  end
84
78
 
85
- def has_authority?( type )
86
- get_authority(type) ? true : false
87
- end
88
-
89
- def get_authority( type )
90
- return false if self.authorities[type.upcase.to_sym] == true
91
- self.authorities.nil? or self.authorities[type.upcase.to_sym].nil? ? false : self.authorities[type.upcase.to_sym]
92
- end
93
-
94
- def formatted_authority_name( type )
95
- return false unless has_authority?(type)
96
- name = get_authority(type)['name'].dup
97
-
98
- name.sub!(/ *((District Council|Borough Council|Community|County Council|City Council|Council) ?)+/,'')
99
- name.sub!(/ (North|East|South|West|Central)$/,'')
100
- name.sub!(/Mid /,'')
101
-
102
- name
103
- end
79
+ def get_authority(type)
80
+ authorities[type.upcase.to_sym]
81
+ end
82
+
83
+ def formatted_authority_name(type)
84
+ authority = get_authority(type) or return type
85
+ authority["name"].gsub(%r{
86
+ \s*((((District|Borough|County|City)\s|)Council|Community)\s?)+ |
87
+ \s(North|East|South|West|Central)$ |
88
+ Mid\s
89
+ }x, "")
90
+ end
91
+
92
+ # Key to the three-letter abbreviations
93
+ # CTY | County
94
+ # CED | County Electoral Division
95
+ # DIS | District
96
+ # DIW | District Ward
97
+ # EUR | European Region
98
+ # GLA | Greater London Authority
99
+ # LAC | Greater London Authority Assembly Constituency
100
+ # LBR | London Borough
101
+ # LBW | London Borough Ward
102
+ # MTD | Metropolitan District
103
+ # MTW | Metropolitan District Ward
104
+ # SPE | Scottish Parliament Electoral Region
105
+ # SPC | Scottish Parliament Constituency
106
+ # UTA | Unitary Authority
107
+ # UTE | Unitary Authority Electoral Division
108
+ # UTW | Unitary Authority Ward
109
+ # WAE | Welsh Assembly Electoral Region
110
+ # WAC | Welsh Assembly Constituency
111
+ # WMC | Westminster Constituency
112
+ # LGW | NI Ward
113
+ # LGD | NI Council
114
+ # LGE | NI Electoral Area
115
+ # NIE | NI Assembly Constituency
116
+ # NIA | NI Assembly
117
+
118
+ LOCALITY_KEYS = [
119
+ [:LBO], # London (special case)
120
+ [:DIS, :CTY],
121
+ [:CPC, :UTA], # Cornwall civil parishes
122
+ [:UTE, :UTA],
123
+ [:UTW, :UTA],
124
+ [:MTW, :MTD],
125
+ [:LGW, :LGD]
126
+ ]
104
127
 
105
128
  def build_locality
106
- return false unless self.authorities
107
-
108
- case
109
- when has_authority?('DIS') && has_authority?('CTY')
110
- locality = ['DIS','CTY']
111
- when has_authority?('LBO')
112
- locality = ['LBO','London']
113
- when has_authority?('UTA') && has_authority?('CPC') # for cornwall civil parishes
114
- locality = ['CPC','UTA']
115
- when has_authority?('UTA') && has_authority?('UTE')
116
- locality = ['UTE','UTA']
117
- when has_authority?('UTA') && has_authority?('UTW')
118
- locality = ['UTW','UTA']
119
- when has_authority?('MTW') && has_authority?('MTD')
120
- locality = ['MTW','MTD']
121
- else
122
- return false
123
- end
124
- locality.map {|t| formatted_authority_name(t) || t }.uniq.join(', ')
129
+ return false unless authorities
130
+ selected_keys = LOCALITY_KEYS.find { |t|
131
+ (t - authorities.keys).none?
132
+ } or return false
133
+
134
+ parts = selected_keys.map { |a| formatted_authority_name(a) }
135
+ parts << "London" if selected_keys == [:LBO]
136
+ parts.uniq.join(", ")
125
137
  end
126
138
 
127
139
  def has_valid_lat_lon(hash)
128
- return (hash['lon'] and hash['lat'] and hash['lon'] != "" and hash['lat'] != "")
140
+ %w[ lat lon ].none? { |k| hash[k].to_s.empty? }
129
141
  end
130
142
 
131
143
  def fetch_missing_fields_for_postcode(postcode)
@@ -134,30 +146,29 @@ module Geogov
134
146
  fields = Geogov.areas_for_stack_from_postcode(postcode)
135
147
  if fields
136
148
  lat_lon = fields[:point]
137
- set_fields(fields.select {|k,v| k != :point})
149
+ set_fields fields.select { |k,v| k != :point }
138
150
  end
139
151
  end
140
152
  end
141
-
153
+
154
+ UK_NATIONS = ['England', 'Scotland', 'Northern Ireland', 'Wales']
155
+
142
156
  def fetch_missing_fields_for_coords(lat, lon)
143
157
  fields = Geogov.areas_for_stack_from_coords(lat, lon)
144
- if ['England', 'Scotland', 'Northern Ireland', 'Wales'].include?(fields[:nation])
158
+ if UK_NATIONS.include?(fields[:nation])
145
159
  self.country = 'UK'
146
- set_fields(fields.select {|k,v| k != :point})
160
+ set_fields fields.select { |k,v| k != :point }
147
161
  end
148
162
  end
149
163
 
150
164
  def set_fields(hash)
151
165
  hash.each do |geo, value|
152
- setter = (geo.to_s+"=").to_sym
153
- if self.respond_to?(setter)
154
- unless value == ""
155
- self.send(setter,value)
156
- end
166
+ setter = "#{geo.to_s}=".to_sym
167
+ if respond_to?(setter)
168
+ self.send(setter, value) unless value == ""
157
169
  else
158
- self.authorities ||= { }
170
+ self.authorities ||= {}
159
171
  self.authorities[geo] = value
160
- # raise ArgumentError, "geo type '#{geo}' is not a valid geo type"
161
172
  end
162
173
  end
163
174
  self
@@ -165,7 +176,7 @@ module Geogov
165
176
 
166
177
  def fuzzy_point=(point)
167
178
  if point.is_a?(Hash)
168
- @fuzzy_point = FuzzyPoint.new(point["lat"],point["lon"],point["accuracy"])
179
+ @fuzzy_point = FuzzyPoint.new(point["lat"], point["lon"], point["accuracy"])
169
180
  else
170
181
  @fuzzy_point = point
171
182
  end
@@ -176,7 +187,7 @@ module Geogov
176
187
 
177
188
  def postcode=(postcode)
178
189
  if (matches = (postcode.match(POSTCODE_REGEXP) || postcode.match(SECTOR_POSTCODE_REGEXP)))
179
- @postcode = matches[1]+" "+matches[2]
190
+ @postcode = [matches[1], matches[2]].join(" ")
180
191
  end
181
192
  end
182
193
  end
@@ -1,5 +1,5 @@
1
1
  module Geogov
2
- class DracosGazetteer
2
+ class DracosGazetteer
3
3
  def initialize(default_url = "http://gazetteer.dracos.vm.bytemark.co.uk")
4
4
  @base = default_url
5
5
  end
@@ -13,7 +13,7 @@ module Geogov
13
13
  return nil
14
14
  end
15
15
  end
16
-
16
+
17
17
 
18
18
  end
19
19
  end
@@ -1,10 +1,10 @@
1
1
  module Geogov
2
2
 
3
3
  class Google
4
-
4
+
5
5
  def dimension(l1,l2)
6
6
  "#{l1}x#{l2}"
7
- end
7
+ end
8
8
 
9
9
  def location(l1,l2)
10
10
  "#{l1},#{l2}"
@@ -19,9 +19,9 @@ module Geogov
19
19
  }
20
20
  if options[:marker_lat] && options[:marker_lon]
21
21
  location = location(options[:marker_lat],options[:marker_lon])
22
- g_options[:markers] = ["color:blue",location].join("|")
22
+ g_options[:markers] = ["color:blue",location].join("|")
23
23
  end
24
-
24
+
25
25
  params = Geogov.hash_to_params(g_options)
26
26
 
27
27
  "http://maps.google.com/maps/api/staticmap?#{params}"
@@ -32,11 +32,11 @@ module Geogov
32
32
  g_options = {
33
33
  :z => options[:z] || 14,
34
34
  :ie => "UTF8",
35
- :q => location(lat,lon)
35
+ :q => location(lat,lon)
36
36
  }
37
37
  if options[:marker_lat] && options[:marker_lon]
38
38
  location = location(options[:marker_lat],options[:marker_lon])
39
- g_options[:sll] = location
39
+ g_options[:sll] = location
40
40
  end
41
41
 
42
42
  params = Geogov.hash_to_params(g_options)
@@ -8,7 +8,7 @@ module Geogov
8
8
  end
9
9
 
10
10
  def remote_location(ip_address)
11
- params = {:ip => ip_address, :position => true}
11
+ params = {:ip => ip_address, :position => true}
12
12
  results = Geogov.get(@url + "?" + Geogov.hash_to_params(params))
13
13
  return nil if results.nil?
14
14
  response = YAML.load(results + "\n")
@@ -21,7 +21,7 @@ module Geogov
21
21
  end
22
22
  return nil if location['city'] =~ /Unknown City/
23
23
  return nil if location['city'] =~ /Private Address/
24
-
24
+
25
25
  # I found these very unreliable, so better they're
26
26
  # not there to tempt anyone
27
27
  location.delete("city")
@@ -64,11 +64,11 @@ module Geogov
64
64
  query = self.point("4326", [lon, lat])
65
65
  results = {:point => {'lat' => lat, 'lon' => lon}}
66
66
  councils = { }
67
-
67
+
68
68
  query.each do |id, area_info|
69
69
  type = area_info['type'].upcase.to_sym
70
70
  level = translate_area_type_to_shortcut(area_info['type'])
71
-
71
+
72
72
  if level
73
73
  level = level.downcase.to_sym
74
74
  results[level] = [] unless results[level]
@@ -77,11 +77,11 @@ module Geogov
77
77
  results[level] << level_info
78
78
  results[:nation] = area_info['country_name'] if results[:nation].nil?
79
79
  end
80
-
80
+
81
81
  councils[type] = { 'name' => area_info['name'], 'type' => area_info['type'], 'id' => area_info['id'] }
82
82
  end
83
83
 
84
- return councils.merge results
84
+ return councils.merge results
85
85
  end
86
86
 
87
87
  def areas_for_stack_from_postcode(postcode)
@@ -93,7 +93,7 @@ module Geogov
93
93
  query['areas'].each do |i, area|
94
94
  type = area['type'].to_sym
95
95
  results[type] = area
96
- end
96
+ end
97
97
 
98
98
  query['shortcuts'].each do |typ, i|
99
99
  if i.is_a? Hash
@@ -16,12 +16,12 @@ module Geogov
16
16
  :lon => long,
17
17
  :show => 1
18
18
  }.merge(options)
19
-
19
+
20
20
  if options[:marker_lat] && options[:marker_lon]
21
21
  options[:mlat0] = options.delete(:marker_lat)
22
22
  options[:mlon0] = options.delete(:marker_lon)
23
23
  end
24
-
24
+
25
25
  params = Geogov.hash_to_params(options)
26
26
 
27
27
  "#{@url}/StaticMap?#{params}"
@@ -34,12 +34,12 @@ module Geogov
34
34
  :lon => long,
35
35
  :layers => "M"
36
36
  }.merge(options)
37
-
37
+
38
38
  if options[:marker_lat] && options[:marker_lon]
39
39
  options[:mlat0] = options.delete(:marker_lat)
40
40
  options[:mlon0] = options.delete(:marker_lon)
41
41
  end
42
-
42
+
43
43
  params = Geogov.hash_to_params(options)
44
44
 
45
45
  "http://www.openstreetmap.org/?#{params}"
@@ -2,7 +2,7 @@ require 'json'
2
2
  require 'net/http'
3
3
 
4
4
  module Geogov
5
-
5
+
6
6
  def get(url)
7
7
  url = URI.parse(url) unless url.is_a? URI
8
8
  response = Net::HTTP.start(url.host, url.port) { |http|
@@ -31,7 +31,7 @@ module Geogov
31
31
  class LruCache
32
32
 
33
33
  def initialize(size = 100)
34
- @size = size
34
+ @size = size
35
35
  @bucket1 = {}
36
36
  @bucket2 = {}
37
37
  end
@@ -67,14 +67,14 @@ module Geogov
67
67
  class SimpleCache
68
68
  def initialize(delegate)
69
69
  @delegate = delegate
70
- @cache = LruCache.new(1000)
70
+ @cache = LruCache.new(1000)
71
71
  end
72
72
 
73
73
  def method_missing(m, *args)
74
74
  arg_key = args.inspect
75
75
  cache_key = "#{m}--#{arg_key}"
76
76
  if @cache[cache_key]
77
- return @cache[cache_key]
77
+ return @cache[cache_key]
78
78
  else
79
79
  result = @delegate.send(m,*args)
80
80
  @cache[cache_key] = result
@@ -82,6 +82,6 @@ module Geogov
82
82
  end
83
83
  end
84
84
  end
85
-
85
+
86
86
 
87
87
  end
@@ -75,35 +75,49 @@ class GovspeakTest < Test::Unit::TestCase
75
75
 
76
76
  test "stack with postcode returns correct locality" do
77
77
  stack = Geogov::GeoStack.new
78
- stack = stack.update( 'postcode' => "SW1A 1AA" )
78
+ stack = stack.update('postcode' => "SW1A 1AA")
79
79
 
80
80
  assert_equal "Westminster, London", stack.friendly_name
81
81
  end
82
-
82
+
83
+ test "stack with Belfast postcode returns correct locality" do
84
+ stack = Geogov::GeoStack.new
85
+ stack = stack.update('postcode' => "BT2 8BP")
86
+
87
+ assert_equal "Shaftesbury, Belfast", stack.friendly_name
88
+ end
89
+
90
+ test "stack with non-Belfast Northern Ireland postcode returns correct locality" do
91
+ stack = Geogov::GeoStack.new
92
+ stack = stack.update('postcode' => "BT35 6AZ")
93
+
94
+ assert_equal "Ballybot, Newry and Mourne", stack.friendly_name
95
+ end
96
+
83
97
  test "stack with coordinates returns correct locality" do
84
98
  stack = Geogov::GeoStack.new
85
- stack = stack.update( 'lat' => "51.501009", "lon" => "-0.1415870" )
99
+ stack = stack.update('lat' => "51.501009", "lon" => "-0.1415870")
86
100
 
87
101
  assert_equal "Westminster, London", stack.friendly_name
88
102
  end
89
103
 
90
104
  test "stack with postcode returns authorities" do
91
105
  stack = Geogov::GeoStack.new
92
- stack = stack.update( 'postcode' => "SW1A 1AA" )
106
+ stack = stack.update('postcode' => "SW1A 1AA")
93
107
 
94
108
  assert stack.authorities.any?
95
109
  end
96
110
 
97
111
  test "stack with coordinates returns authorities" do
98
112
  stack = Geogov::GeoStack.new
99
- stack = stack.update( 'lat' => "51.501009", "lon" => "-0.1415870" )
113
+ stack = stack.update('lat' => "51.501009", "lon" => "-0.1415870")
100
114
 
101
115
  assert stack.authorities.any?
102
116
  end
103
117
 
104
118
  test "stack with postcode returns correct locality, ward and council" do
105
119
  stack = Geogov::GeoStack.new
106
- stack = stack.update( 'postcode' => "SW1A 1AA" )
120
+ stack = stack.update('postcode' => "SW1A 1AA")
107
121
 
108
122
  assert_equal "Westminster, London", stack.friendly_name
109
123
  assert stack.ward and stack.ward.any?
@@ -113,7 +127,7 @@ class GovspeakTest < Test::Unit::TestCase
113
127
 
114
128
  test "stack with coordinates returns correct locality, ward and council" do
115
129
  stack = Geogov::GeoStack.new
116
- stack = stack.update( 'lat' => "51.501009", "lon" => "-0.1415870" )
130
+ stack = stack.update('lat' => "51.501009", "lon" => "-0.1415870")
117
131
 
118
132
  assert_equal "Westminster, London", stack.friendly_name
119
133
  assert stack.ward and stack.ward.any?
@@ -121,4 +135,4 @@ class GovspeakTest < Test::Unit::TestCase
121
135
  assert_equal "Westminster City Council", stack.council.first['name']
122
136
  end
123
137
 
124
- end
138
+ end
@@ -1,4 +1,5 @@
1
- $:.unshift(File.expand_path("../lib")) unless $:.include?(File.expand_path("../lib"))
1
+ lib = File.expand_path("../../lib", __FILE__)
2
+ $:.unshift lib unless $:.include?(lib)
2
3
 
3
4
  require 'test/unit'
4
5
  require 'mocha'
@@ -10,7 +11,7 @@ class Test::Unit::TestCase
10
11
  clean_name = name.gsub(/\s+/,'_')
11
12
  method = "test_#{clean_name.gsub(/\s+/,'_')}".to_sym
12
13
  already_defined = instance_method(method) rescue false
13
- raise "#{method} exists" if already_defined
14
+ raise "#{method} exists" if already_defined
14
15
  define_method(method, &block)
15
16
  end
16
17
  end
metadata CHANGED
@@ -1,98 +1,86 @@
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.11
4
5
  prerelease:
5
- version: 0.0.10
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-04-13 00:00:00 Z
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
13
+ date: 2012-05-04 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
17
16
  name: rake
18
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &15045680 !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: *15045680
26
+ - !ruby/object:Gem::Dependency
28
27
  name: mocha
29
- requirement: &id002 !ruby/object:Gem::Requirement
28
+ requirement: &15045200 !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: *15045200
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:
45
+ - lib/geogov.rb
46
+ - lib/geogov/utils.rb
49
47
  - lib/geogov/fuzzy_point.rb
50
- - lib/geogov/geo_stack.rb
51
- - lib/geogov/providers/dracos_gazetteer.rb
52
- - lib/geogov/providers/geonames.rb
53
- - lib/geogov/providers/google.rb
54
48
  - lib/geogov/providers/hostip.rb
49
+ - lib/geogov/providers/dracos_gazetteer.rb
55
50
  - lib/geogov/providers/mapit.rb
51
+ - lib/geogov/providers/google.rb
52
+ - lib/geogov/providers/geonames.rb
56
53
  - lib/geogov/providers/open_street_map.rb
57
- - lib/geogov/utils.rb
58
- - lib/geogov.rb
54
+ - lib/geogov/geo_stack.rb
59
55
  - Gemfile
60
56
  - Rakefile
61
- - test/geogov_test.rb
62
57
  - test/test_helper.rb
58
+ - test/geogov_test.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: 4469512638868208598
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: 4469512638868208598
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.11
93
80
  signing_key:
94
81
  specification_version: 3
95
82
  summary: Geolocation and utilities for UK Government single domain
96
- test_files:
97
- - test/geogov_test.rb
83
+ test_files:
98
84
  - test/test_helper.rb
85
+ - test/geogov_test.rb
86
+ has_rdoc: