graticule 0.2.6 → 0.2.7

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.
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: