graticule 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.txt CHANGED
@@ -1,3 +1,11 @@
1
+ 0.2.7 (2008-10-03)
2
+ * Adding Multimap geocoder [Tom Taylor]
3
+ * Added MapQuest geocoder [Andrew Selder]
4
+ * Fix google geocoder for responses that only return coordinates [Andrew Selder]
5
+
6
+ 0.2.5
7
+ * fixed address mapping for local search maps (again)
8
+
1
9
  0.2.4 (2007-05-15)
2
10
  * fixed address mapping for local search maps (Tom Taylor)
3
11
 
data/Manifest.txt CHANGED
@@ -19,6 +19,7 @@ lib/graticule/geocoder/geocoder_us.rb
19
19
  lib/graticule/geocoder/google.rb
20
20
  lib/graticule/geocoder/host_ip.rb
21
21
  lib/graticule/geocoder/local_search_maps.rb
22
+ lib/graticule/geocoder/map_quest.rb
22
23
  lib/graticule/geocoder/meta_carta.rb
23
24
  lib/graticule/geocoder/multi.rb
24
25
  lib/graticule/geocoder/postcode_anywhere.rb
@@ -35,6 +36,7 @@ test/fixtures/responses/geocoder_us/unknown.xml
35
36
  test/fixtures/responses/google/badkey.xml
36
37
  test/fixtures/responses/google/limit.xml
37
38
  test/fixtures/responses/google/missing_address.xml
39
+ test/fixtures/responses/google/only_coordinates.xml
38
40
  test/fixtures/responses/google/partial.xml
39
41
  test/fixtures/responses/google/server_error.xml
40
42
  test/fixtures/responses/google/success.xml
@@ -69,4 +71,3 @@ test/unit/graticule/geocoder/postcode_anywhere_test.rb
69
71
  test/unit/graticule/geocoder/yahoo_test.rb
70
72
  test/unit/graticule/geocoder_test.rb
71
73
  test/unit/graticule/location_test.rb
72
-
data/lib/graticule.rb CHANGED
@@ -10,6 +10,7 @@ require 'graticule/geocoder/bogus'
10
10
  require 'graticule/geocoder/rest'
11
11
  require 'graticule/geocoder/google'
12
12
  require 'graticule/geocoder/host_ip'
13
+ require 'graticule/geocoder/map_quest'
13
14
  require 'graticule/geocoder/multi'
14
15
  require 'graticule/geocoder/yahoo'
15
16
  require 'graticule/geocoder/geocoder_ca'
@@ -17,6 +18,7 @@ require 'graticule/geocoder/geocoder_us'
17
18
  require 'graticule/geocoder/local_search_maps'
18
19
  require 'graticule/geocoder/meta_carta'
19
20
  require 'graticule/geocoder/postcode_anywhere'
21
+ require 'graticule/geocoder/multimap'
20
22
  require 'graticule/distance'
21
23
  require 'graticule/distance/haversine'
22
24
  require 'graticule/distance/spherical'
@@ -13,6 +13,8 @@ module Graticule #:nodoc:
13
13
  get :locate => address.is_a?(String) ? address : location_from_params(address).to_s(:country => false)
14
14
  end
15
15
 
16
+ private
17
+
16
18
  def parse_response(xml) #:nodoc:
17
19
  returning Location.new do |location|
18
20
  location.latitude = xml.elements['geodata/latt'].text.to_f
@@ -27,6 +27,8 @@ module Graticule #:nodoc:
27
27
  def locate(address)
28
28
  get :address => address.is_a?(String) ? address : location_from_params(address).to_s(:country => false)
29
29
  end
30
+
31
+ private
30
32
 
31
33
  def parse_response(xml) #:nodoc:
32
34
  location = Location.new
@@ -5,15 +5,11 @@ module Graticule #:nodoc:
5
5
  # First you need a Google Maps API key. You can register for one here:
6
6
  # http://www.google.com/apis/maps/signup.html
7
7
  #
8
- # Then you create a GoogleGeocode object and start locating addresses:
9
- #
10
- # require 'rubygems'
11
- # require 'graticule'
12
- #
13
- # gg = Graticule.service(:google).new(:key => MAPS_API_KEY)
8
+ # gg = Graticule.service(:google).new(MAPS_API_KEY)
14
9
  # location = gg.locate '1600 Amphitheater Pkwy, Mountain View, CA'
15
10
  # p location.coordinates
16
- #
11
+ # #=> [37.423111, -122.081783
12
+ #
17
13
  class Google < Rest
18
14
  # http://www.google.com/apis/maps/documentation/#Geocoding_HTTP_Request
19
15
 
@@ -30,10 +26,7 @@ module Graticule #:nodoc:
30
26
  8 => :address # Address level accuracy. (Since 2.59)
31
27
  }
32
28
 
33
- # Creates a new GoogleGeocode that will use Google Maps API key +key+. You
34
- # can sign up for an API key here:
35
- #
36
- # http://www.google.com/apis/maps/signup.html
29
+ # Creates a new GoogleGeocode that will use Google Maps API +key+.
37
30
  def initialize(key)
38
31
  @key = key
39
32
  @url = URI.parse 'http://maps.google.com/maps/geo'
@@ -44,21 +37,24 @@ module Graticule #:nodoc:
44
37
  get :q => address.is_a?(String) ? address : location_from_params(address).to_s
45
38
  end
46
39
 
40
+ private
41
+
47
42
  # Extracts a Location from +xml+.
48
43
  def parse_response(xml) #:nodoc:
49
- address = REXML::XPath.first(xml, '//xal:AddressDetails', 'xal' => "urn:oasis:names:tc:ciq:xsdschema:xAL:2.0")
50
-
51
44
  longitude, latitude, = xml.elements['/kml/Response/Placemark/Point/coordinates'].text.split(',').map { |v| v.to_f }
52
-
53
- Location.new \
54
- :street => value(address.elements['//ThoroughfareName/text()']),
55
- :locality => value(address.elements['//LocalityName/text()']),
56
- :region => value(address.elements['//AdministrativeAreaName/text()']),
57
- :postal_code => value(address.elements['//PostalCodeNumber/text()']),
58
- :country => value(address.elements['//CountryNameCode/text()']),
59
- :latitude => latitude,
60
- :longitude => longitude,
61
- :precision => PRECISION[address.attribute('Accuracy').value.to_i] || :unknown
45
+ returning Location.new(:latitude => latitude, :longitude => longitude) do |l|
46
+ address = REXML::XPath.first(xml, '//xal:AddressDetails',
47
+ 'xal' => "urn:oasis:names:tc:ciq:xsdschema:xAL:2.0")
48
+
49
+ if address
50
+ l.street = value(address.elements['//ThoroughfareName/text()'])
51
+ l.locality = value(address.elements['//LocalityName/text()'])
52
+ l.region = value(address.elements['//AdministrativeAreaName/text()'])
53
+ l.postal_code = value(address.elements['//PostalCodeNumber/text()'])
54
+ l.country = value(address.elements['//CountryNameCode/text()'])
55
+ l.precision = PRECISION[address.attribute('Accuracy').value.to_i] || :unknown
56
+ end
57
+ end
62
58
  end
63
59
 
64
60
  # Extracts and raises an error from +xml+, if any.
@@ -92,15 +88,13 @@ module Graticule #:nodoc:
92
88
  super params
93
89
  end
94
90
 
95
- private
96
-
97
- def value(element)
98
- element.value if element
99
- end
100
-
101
- def text(element)
102
- element.text if element
103
- end
91
+ def value(element)
92
+ element.value if element
93
+ end
94
+
95
+ def text(element)
96
+ element.text if element
97
+ end
104
98
  end
105
99
  end
106
100
  end
@@ -20,7 +20,7 @@ module Graticule #:nodoc:
20
20
  private
21
21
 
22
22
  def map_attributes(location)
23
- mapping = {:street => :address, :locality => :city, :region => :state, :postal_code => :zip, :country => :country}
23
+ mapping = {:street => :street, :locality => :city, :region => :state, :postal_code => :zip, :country => :country}
24
24
  mapping.keys.inject({}) do |result,attribute|
25
25
  result[mapping[attribute]] = location.attributes[attribute] unless location.attributes[attribute].blank?
26
26
  result
@@ -0,0 +1,109 @@
1
+ module Graticule #:nodoc:
2
+ module Geocoder #:nodoc:
3
+
4
+ # First you need a Mapquest API key. You can register for one here:
5
+ # http://www.mapquest.com/features/main.adp?page=developer_tools_oapi
6
+ #
7
+ # Then you create a MapquestGeocode object and start locating addresses:
8
+ #
9
+ # gg = Graticule.service(:map_quest).new(MAPS_API_KEY)
10
+ # location = gg.locate :street => '1600 Amphitheater Pkwy', :locality => 'Mountain View', :region => 'CA'
11
+ # p location.coordinates
12
+ #
13
+ class MapQuest < Rest
14
+ # http://trc.mapquest.com
15
+
16
+ PRECISION = {
17
+ 0 => :unknown,
18
+ 'COUNTRY' => :country,
19
+ 'STATE' => :state,
20
+ 'COUNTY' => :state,
21
+ 'CITY' => :city,
22
+ 'ZIP' => :zip,'ZIP7' => :zip,'ZIP9' => :zip,
23
+ 'INTERSECTIONS' => :street,
24
+ 'STREET' => :street,
25
+ 'ADDRESS' => :address
26
+ }
27
+
28
+ # Creates a new MapquestGeocode that will use Mapquest API key +key+.
29
+ #
30
+ # WARNING: The MapQuest API Keys tend to be already URI encoded. If this is the case
31
+ # be sure to URI.unescape the key in the call to new
32
+ def initialize(key)
33
+ @key = key
34
+ @url = URI.parse 'http://web.openapi.mapquest.com/oapi/transaction'
35
+ end
36
+
37
+ # Locates +address+ returning a Location
38
+ def locate(address)
39
+ get map_attributes(location_from_params(address))
40
+ end
41
+
42
+ private
43
+
44
+ def map_attributes(location)
45
+ mapping = {:street => :address, :locality => :city, :region => :stateProvince, :postal_code => :postalcoe, :country => :country}
46
+ mapping.keys.inject({}) do |result,attribute|
47
+ result[mapping[attribute]] = location.attributes[attribute] unless location.attributes[attribute].blank?
48
+ result
49
+ end
50
+ end
51
+
52
+ # Extracts a Location from +xml+.
53
+ def parse_response(xml) #:nodoc:
54
+ address = REXML::XPath.first(xml, '/advantage/geocode/locations/location')
55
+
56
+ Location.new \
57
+ :street => value(address.elements['//address/text()']),
58
+ :locality => value(address.elements['//city/text()']),
59
+ :region => value(address.elements['//stateProvince/text()']),
60
+ :postal_code => value(address.elements['//postalCode/text()']),
61
+ :country => value(address.elements['//country/text()']),
62
+ :latitude => value(address.elements['//latitude/text()']),
63
+ :longitude => value(address.elements['//longitude/text()']),
64
+ :precision => PRECISION[address.elements['//geocodeQuality'].text] || :unknown
65
+ end
66
+
67
+ # Extracts and raises an error from +xml+, if any.
68
+ def check_error(xml) #:nodoc:
69
+ return unless xml.elements['//error']
70
+ status = xml.elements['//error/code'].text.to_i
71
+ msg = xml.elements['//error/text'].text
72
+ case status
73
+ when 255..299 then
74
+ raise CredentialsError, msg
75
+ when 400..500 then
76
+ raise AddressError, msg
77
+ when 600.699 then
78
+ raise Error, msg
79
+ when 900 then
80
+ raise AddressError, 'invalid latitude'
81
+ when 901 then
82
+ raise AddressError, 'invalid longitude'
83
+ when 902 then
84
+ raise AddressError, 'error parsing params'
85
+ when 9902 then
86
+ raise CredentialsError, 'invalid key'
87
+ when 9904 then
88
+ raise CredentialsError, 'key missing'
89
+ else
90
+ raise Error, "unknown error #{status}: #{msg}"
91
+ end
92
+ end
93
+
94
+ # Creates a URL from the Hash +params+. Automatically adds the key and
95
+ # sets the output type to 'xml'.
96
+ def make_url(params) #:nodoc:
97
+ super params.merge({:key => @key, :transaction => 'geocode', :ambiguities => 0})
98
+ end
99
+
100
+ def value(element)
101
+ element.value if element
102
+ end
103
+
104
+ def text(element)
105
+ element.text if element
106
+ end
107
+ end
108
+ end
109
+ end
@@ -2,7 +2,7 @@ module Graticule #:nodoc:
2
2
  module Version #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 6
5
+ TINY = 7
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -0,0 +1 @@
1
+ <?xml version='1.0' encoding='UTF-8'?><kml xmlns='http://earth.google.com/kml/2.0'><Response><name>15-17 </name><Status><code>200</code><request>geocode</request></Status><Placemark id='p1'><Point><coordinates>-17.000000,15.000000,0</coordinates></Point></Placemark></Response></kml>
data/test/test_helper.rb CHANGED
@@ -1,12 +1,9 @@
1
- #!/usr/bin/env ruby
2
1
  $:.unshift(File.dirname(__FILE__) + '/../lib')
3
2
  $:.unshift(File.dirname(__FILE__) + '/mocks')
4
- $:.unshift(File.dirname(__FILE__)+ '/extra')
5
3
 
6
4
  require 'rubygems'
7
5
  require 'yaml'
8
6
  require 'test/unit'
9
- require 'breakpoint'
10
7
  require 'graticule'
11
8
  require 'mocha'
12
9
 
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
2
 
3
3
  module Graticule
4
4
  module Distance
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
2
 
3
3
  module Graticule
4
4
  module Geocoder
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
2
 
3
3
  module Graticule
4
4
  module Geocoder
@@ -25,6 +25,16 @@ module Graticule
25
25
  assert_equal location, @geocoder.locate('1600 Amphitheatre Parkway, Mountain View, CA')
26
26
  end
27
27
 
28
+ # <?xml version='1.0' encoding='UTF-8'?><kml xmlns='http://earth.google.com/kml/2.0'><Response><name>15-17 </name><Status><code>200</code><request>geocode</request></Status><Placemark id='p1'><Point><coordinates>-17.000000,15.000000,0</coordinates></Point></Placemark></Response></kml>
29
+ def test_only_coordinates
30
+ return unless prepare_response(:only_coordinates)
31
+
32
+ location = Location.new(:longitude => -17.000000, :latitude => 15.000000)
33
+ assert_equal location, @geocoder.locate('15-17 & 16 Railroad Square, Nashua, NH, 03064')
34
+ end
35
+
36
+
37
+
28
38
  def test_partial
29
39
  return unless prepare_response(:partial)
30
40
 
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
2
 
3
3
  module Graticule
4
4
  module Geocoder
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
2
 
3
3
  module Graticule
4
4
  module Geocoder
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
2
 
3
3
  module Graticule
4
4
  module Geocoder
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
2
 
3
3
  module Graticule
4
4
  module Geocoder
@@ -7,7 +7,7 @@ module Graticule
7
7
  def setup
8
8
  @mock_geocoders = [mock("geocoder 1"), mock("geocoder 2")]
9
9
  @mock_geocoders.each {|g| g.stubs(:locate) }
10
- @geocoder = Multi.new *@mock_geocoders
10
+ @geocoder = Multi.new(*@mock_geocoders)
11
11
  end
12
12
 
13
13
  def test_locate_calls_each_geocoder_and_raises_error
@@ -0,0 +1,53 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
+
3
+ module Graticule
4
+ module Geocoder
5
+ class MultimapTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ URI::HTTP.responses = []
9
+ URI::HTTP.uris = []
10
+ @geocoder = Multimap.new 'API_KEY'
11
+ @location = Location.new(
12
+ :street => "Oxford Street",
13
+ :locality => "London",
14
+ :region => "London",
15
+ :postal_code => "W1",
16
+ :country => "GB",
17
+ :longitude => -0.14839,
18
+ :latitude => 51.51452,
19
+ :precision => :address
20
+ )
21
+ end
22
+
23
+ def test_locate
24
+ prepare_response(:success)
25
+ assert_equal @location, @geocoder.locate('Oxford Street, LONDON, W1')
26
+ end
27
+
28
+ def test_url_from_string
29
+ prepare_response(:success)
30
+ @geocoder.locate('Oxford Street, LONDON, W1')
31
+ assert_equal 'http://clients.multimap.com/API/geocode/1.2/API_KEY?qs=Oxford%20Street,%20LONDON,%20W1', URI::HTTP.uris.first
32
+ end
33
+
34
+ def test_url_from_location
35
+ prepare_response(:success)
36
+ @geocoder.locate(:street => 'Oxford Street', :city => 'London')
37
+ assert_equal 'http://clients.multimap.com/API/geocode/1.2/API_KEY?city=&countryCode=&postalCode=&region=&street=Oxford%20Street', URI::HTTP.uris.first
38
+ end
39
+
40
+
41
+ def test_locate_bad_address
42
+ prepare_response(:no_matches)
43
+ assert_raise(Error) { @geocoder.locate('yucksthoeusthaoeusnhtaosu') }
44
+ end
45
+
46
+ protected
47
+ def prepare_response(id)
48
+ URI::HTTP.responses << response('multimap', id)
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -1,6 +1,6 @@
1
1
  # account code: INDIV30777
2
2
  # license key: KG39-HM17-PZ95-NR98
3
- require File.dirname(__FILE__) + '/../../../test_helper'
3
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
4
4
 
5
5
  module Graticule
6
6
  module Geocoder
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../test_helper')
2
2
 
3
3
  module Graticule
4
4
  module Geocoder
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
2
 
3
3
  module Graticule
4
4
  class GeocoderTest < Test::Unit::TestCase
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
2
 
3
3
  module Graticule
4
4
  class LocationTest < Test::Unit::TestCase
metadata CHANGED
@@ -1,33 +1,54 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: graticule
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.2.6
7
- date: 2007-09-12 00:00:00 -04:00
8
- summary: API for using all the popular geocoding services.
9
- require_paths:
10
- - lib
11
- email: brandon@opensoul.org
12
- homepage: http://graticule.rubyforge.org
13
- rubyforge_project: graticule
14
- description: Graticule is a geocoding API that provides a common interface to all the popular services, including Google, Yahoo, Geocoder.us, and MetaCarta.
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.2.7
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Brandon Keepers
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-10-03 00:00:00 -04:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: hoe
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.7.0
34
+ version:
35
+ description: Graticule is a geocoding API that provides a common interface to all the popular services, including Google, Yahoo, Geocoder.us, and MetaCarta.
36
+ email: brandon@opensoul.org
37
+ executables:
38
+ - geocode
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - CHANGELOG.txt
43
+ - LICENSE.txt
44
+ - Manifest.txt
45
+ - README.txt
46
+ - test/fixtures/responses/host_ip/private.txt
47
+ - test/fixtures/responses/host_ip/success.txt
48
+ - test/fixtures/responses/host_ip/unknown.txt
49
+ - test/fixtures/responses/local_search_maps/empty.txt
50
+ - test/fixtures/responses/local_search_maps/not_found.txt
51
+ - test/fixtures/responses/local_search_maps/success.txt
31
52
  files:
32
53
  - CHANGELOG.txt
33
54
  - LICENSE.txt
@@ -50,6 +71,7 @@ files:
50
71
  - lib/graticule/geocoder/google.rb
51
72
  - lib/graticule/geocoder/host_ip.rb
52
73
  - lib/graticule/geocoder/local_search_maps.rb
74
+ - lib/graticule/geocoder/map_quest.rb
53
75
  - lib/graticule/geocoder/meta_carta.rb
54
76
  - lib/graticule/geocoder/multi.rb
55
77
  - lib/graticule/geocoder/postcode_anywhere.rb
@@ -66,6 +88,7 @@ files:
66
88
  - test/fixtures/responses/google/badkey.xml
67
89
  - test/fixtures/responses/google/limit.xml
68
90
  - test/fixtures/responses/google/missing_address.xml
91
+ - test/fixtures/responses/google/only_coordinates.xml
69
92
  - test/fixtures/responses/google/partial.xml
70
93
  - test/fixtures/responses/google/server_error.xml
71
94
  - test/fixtures/responses/google/success.xml
@@ -100,6 +123,33 @@ files:
100
123
  - test/unit/graticule/geocoder/yahoo_test.rb
101
124
  - test/unit/graticule/geocoder_test.rb
102
125
  - test/unit/graticule/location_test.rb
126
+ has_rdoc: true
127
+ homepage: http://graticule.rubyforge.org
128
+ post_install_message:
129
+ rdoc_options:
130
+ - --main
131
+ - README.txt
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: "0"
139
+ version:
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: "0"
145
+ version:
146
+ requirements: []
147
+
148
+ rubyforge_project: graticule
149
+ rubygems_version: 1.2.0
150
+ signing_key:
151
+ specification_version: 2
152
+ summary: API for using all the popular geocoding services.
103
153
  test_files:
104
154
  - test/unit/graticule/distance_test.rb
105
155
  - test/unit/graticule/geocoder/geocoder_us_test.rb
@@ -108,46 +158,8 @@ test_files:
108
158
  - test/unit/graticule/geocoder/local_search_maps_test.rb
109
159
  - test/unit/graticule/geocoder/meta_carta_test.rb
110
160
  - test/unit/graticule/geocoder/multi_test.rb
161
+ - test/unit/graticule/geocoder/multimap_test.rb
111
162
  - test/unit/graticule/geocoder/postcode_anywhere_test.rb
112
163
  - test/unit/graticule/geocoder/yahoo_test.rb
113
164
  - test/unit/graticule/geocoder_test.rb
114
165
  - test/unit/graticule/location_test.rb
115
- rdoc_options:
116
- - --main
117
- - README.txt
118
- extra_rdoc_files:
119
- - CHANGELOG.txt
120
- - LICENSE.txt
121
- - Manifest.txt
122
- - README.txt
123
- - test/fixtures/responses/host_ip/private.txt
124
- - test/fixtures/responses/host_ip/success.txt
125
- - test/fixtures/responses/host_ip/unknown.txt
126
- - test/fixtures/responses/local_search_maps/empty.txt
127
- - test/fixtures/responses/local_search_maps/not_found.txt
128
- - test/fixtures/responses/local_search_maps/success.txt
129
- executables:
130
- - geocode
131
- extensions: []
132
-
133
- requirements: []
134
-
135
- dependencies:
136
- - !ruby/object:Gem::Dependency
137
- name: activesupport
138
- version_requirement:
139
- version_requirements: !ruby/object:Gem::Version::Requirement
140
- requirements:
141
- - - ">"
142
- - !ruby/object:Gem::Version
143
- version: 0.0.0
144
- version:
145
- - !ruby/object:Gem::Dependency
146
- name: hoe
147
- version_requirement:
148
- version_requirements: !ruby/object:Gem::Version::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: 1.3.0
153
- version: