graticule 0.2.10 → 0.2.12

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ test/config.yml
2
+ *.gem
3
+ pkg
4
+ coverage
data/CHANGELOG.txt CHANGED
@@ -1,3 +1,9 @@
1
+ 0.2.12 (2009-09-06)
2
+ * Fixed geocoder_us [Aubrey Holland]
3
+
4
+ 0.2.11 (2009-07-15)
5
+ * Add new MapQuest geocoder [Aubrey Holland]
6
+
1
7
  0.2.10 (2009-04-17)
2
8
  * Added #blank? to Location
3
9
 
data/Manifest.txt CHANGED
@@ -20,6 +20,7 @@ lib/graticule/geocoder/geocoder_us.rb
20
20
  lib/graticule/geocoder/google.rb
21
21
  lib/graticule/geocoder/host_ip.rb
22
22
  lib/graticule/geocoder/local_search_maps.rb
23
+ lib/graticule/geocoder/mapquest.rb
23
24
  lib/graticule/geocoder/meta_carta.rb
24
25
  lib/graticule/geocoder/multi.rb
25
26
  lib/graticule/geocoder/multimap.rb
@@ -50,6 +51,8 @@ test/fixtures/responses/host_ip/unknown.txt
50
51
  test/fixtures/responses/local_search_maps/empty.txt
51
52
  test/fixtures/responses/local_search_maps/not_found.txt
52
53
  test/fixtures/responses/local_search_maps/success.txt
54
+ test/fixtures/responses/mapquest/multi_result.xml
55
+ test/fixtures/responses/mapquest/success.xml
53
56
  test/fixtures/responses/meta_carta/bad_address.xml
54
57
  test/fixtures/responses/meta_carta/multiple.xml
55
58
  test/fixtures/responses/meta_carta/success.xml
@@ -71,6 +74,7 @@ test/unit/graticule/geocoder/geocoders.rb
71
74
  test/unit/graticule/geocoder/google_test.rb
72
75
  test/unit/graticule/geocoder/host_ip_test.rb
73
76
  test/unit/graticule/geocoder/local_search_maps_test.rb
77
+ test/unit/graticule/geocoder/mapquest_test.rb
74
78
  test/unit/graticule/geocoder/meta_carta_test.rb
75
79
  test/unit/graticule/geocoder/multi_test.rb
76
80
  test/unit/graticule/geocoder/multimap_test.rb
data/README.txt CHANGED
@@ -24,6 +24,18 @@ Graticule includes a command line interface (CLI).
24
24
  Washington, DC US
25
25
  latitude: 38.895222, longitude: -77.036758
26
26
 
27
- = Source
27
+ = How to contribute
28
28
 
29
- The source code for Graticule is available at http://github.com/collectiveidea/graticule. Patches and bug reports are welcome at http://collectiveidea.lighthouseapp.com/projects/20262-graticule
29
+ If you find what you might think is a bug:
30
+
31
+ 1. Check the GitHub issue tracker to see if anyone else has had the same issue.
32
+ http://github.com/collectiveidea/graticule/issues/
33
+ 2. If you don't see anything, create an issue with information on how to reproduce it.
34
+
35
+ If you want to contribute an enhancement or a fix:
36
+
37
+ 1. Fork the project on github.
38
+ http://github.com/collectiveidea/graticule/
39
+ 2. Make your changes with tests.
40
+ 3. Commit the changes without making changes to the Rakefile, VERSION, or any other files that aren't related to your enhancement or fix
41
+ 4. Send a pull request.
data/Rakefile CHANGED
@@ -1,23 +1,79 @@
1
- require 'rubygems'
2
- require 'active_support'
3
- require 'hoe'
4
- require File.join(File.dirname(__FILE__), 'lib', 'graticule', 'version.rb')
5
-
6
- Hoe.new("graticule", Graticule::Version::STRING) do |p|
7
- p.rubyforge_name = "graticule"
8
- p.author = 'Brandon Keepers'
9
- p.email = 'brandon@opensoul.org'
10
- p.summary = "API for using all the popular geocoding services."
11
- p.description = 'Graticule is a geocoding API that provides a common interface to all the popular services, including Google, Yahoo, Geocoder.us, and MetaCarta.'
12
- p.url = 'http://graticule.rubyforge.org'
13
- p.need_tar = true
14
- p.need_zip = true
15
- p.test_globs = ['test/**/*_test.rb']
16
- p.changes = p.paragraphs_of('CHANGELOG.txt', 0..1).join("\n\n")
17
- p.extra_deps << ['activesupport']
1
+ begin
2
+ require 'jeweler'
3
+ rescue LoadError
4
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
5
+ exit 1
6
+ end
7
+ require 'rake/testtask'
8
+ require 'rake/rdoctask'
9
+ require 'rcov/rcovtask'
10
+
11
+ Jeweler::Tasks.new do |s|
12
+ s.name = "graticule"
13
+ s.rubyforge_project = "graticule"
14
+ s.author = 'Brandon Keepers'
15
+ s.email = 'brandon@opensoul.org'
16
+ s.summary = "API for using all the popular geocoding services."
17
+ s.description = 'Graticule is a geocoding API that provides a common interface to all the popular services, including Google, Yahoo, Geocoder.us, and MetaCarta.'
18
+ s.homepage = "http://github.com/collectiveidea/graticule"
19
+ s.add_dependency "activesupport"
20
+ s.has_rdoc = true
21
+ s.extra_rdoc_files = ["README.txt"]
22
+ s.rdoc_options = ["--main", "README.rdoc", "--inline-source", "--line-numbers"]
23
+ s.test_files = Dir['test/**/*.{yml,rb}']
18
24
  end
19
25
 
26
+ desc 'Default: run unit tests.'
27
+ task :default => :test
28
+
29
+ desc 'Run the unit tests'
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.pattern = 'test/**/*_test.rb'
33
+ t.verbose = true
34
+ end
20
35
 
36
+ desc 'Generate documentatio'
37
+ Rake::RDocTask.new(:rdoc) do |rdoc|
38
+ rdoc.rdoc_dir = 'rdoc'
39
+ rdoc.title = 'Graticule'
40
+ rdoc.options << '--line-numbers' << '--inline-source'
41
+ rdoc.rdoc_files.include('README.txt')
42
+ rdoc.rdoc_files.include('lib/**/*.rb')
43
+ end
44
+
45
+ namespace :test do
46
+ desc "just rcov minus html output"
47
+ Rcov::RcovTask.new(:coverage) do |t|
48
+ # t.libs << 'test'
49
+ t.test_files = FileList['test/**/*_test.rb']
50
+ t.output_dir = 'coverage'
51
+ t.verbose = true
52
+ t.rcov_opts = %w(--exclude test,/usr/lib/ruby,/Library/Ruby,$HOME/.gem --sort coverage)
53
+ end
54
+ end
55
+
56
+ require 'rake/contrib/sshpublisher'
57
+ namespace :rubyforge do
58
+
59
+ desc "Release gem and RDoc documentation to RubyForge"
60
+ task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
61
+
62
+ namespace :release do
63
+ desc "Publish RDoc to RubyForge."
64
+ task :docs => [:rdoc] do
65
+ config = YAML.load(
66
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
67
+ )
68
+
69
+ host = "#{config['username']}@rubyforge.org"
70
+ remote_dir = "/var/www/gforge-projects/the-perfect-gem/"
71
+ local_dir = 'rdoc'
72
+
73
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
74
+ end
75
+ end
76
+ end
21
77
 
22
78
  namespace :test do
23
79
  namespace :cache do
@@ -57,6 +113,7 @@ namespace :test do
57
113
  end
58
114
  end
59
115
 
116
+ require 'active_support'
60
117
  require 'net/http'
61
118
  require 'uri'
62
119
  RESPONSES_PATH = File.dirname(__FILE__) + '/test/fixtures/responses'
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.12
data/graticule.gemspec ADDED
@@ -0,0 +1,147 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{graticule}
8
+ s.version = "0.2.12"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Brandon Keepers"]
12
+ s.date = %q{2009-09-06}
13
+ s.default_executable = %q{geocode}
14
+ s.description = %q{Graticule is a geocoding API that provides a common interface to all the popular services, including Google, Yahoo, Geocoder.us, and MetaCarta.}
15
+ s.email = %q{brandon@opensoul.org}
16
+ s.executables = ["geocode"]
17
+ s.extra_rdoc_files = [
18
+ "README.txt"
19
+ ]
20
+ s.files = [
21
+ ".gitignore",
22
+ "CHANGELOG.txt",
23
+ "LICENSE.txt",
24
+ "Manifest.txt",
25
+ "README.txt",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/geocode",
29
+ "graticule.gemspec",
30
+ "init.rb",
31
+ "lib/graticule.rb",
32
+ "lib/graticule/cli.rb",
33
+ "lib/graticule/core_ext.rb",
34
+ "lib/graticule/distance.rb",
35
+ "lib/graticule/distance/haversine.rb",
36
+ "lib/graticule/distance/spherical.rb",
37
+ "lib/graticule/distance/vincenty.rb",
38
+ "lib/graticule/geocoder.rb",
39
+ "lib/graticule/geocoder/base.rb",
40
+ "lib/graticule/geocoder/bogus.rb",
41
+ "lib/graticule/geocoder/geocoder_ca.rb",
42
+ "lib/graticule/geocoder/geocoder_us.rb",
43
+ "lib/graticule/geocoder/google.rb",
44
+ "lib/graticule/geocoder/host_ip.rb",
45
+ "lib/graticule/geocoder/local_search_maps.rb",
46
+ "lib/graticule/geocoder/mapquest.rb",
47
+ "lib/graticule/geocoder/meta_carta.rb",
48
+ "lib/graticule/geocoder/multi.rb",
49
+ "lib/graticule/geocoder/multimap.rb",
50
+ "lib/graticule/geocoder/postcode_anywhere.rb",
51
+ "lib/graticule/geocoder/rest.rb",
52
+ "lib/graticule/geocoder/yahoo.rb",
53
+ "lib/graticule/location.rb",
54
+ "lib/graticule/version.rb",
55
+ "site/index.html",
56
+ "site/plugin.html",
57
+ "site/stylesheets/style.css",
58
+ "test/config.yml.default",
59
+ "test/fixtures/responses/geocoder_us/success.xml",
60
+ "test/fixtures/responses/geocoder_us/unknown.xml",
61
+ "test/fixtures/responses/google/badkey.xml",
62
+ "test/fixtures/responses/google/limit.xml",
63
+ "test/fixtures/responses/google/missing_address.xml",
64
+ "test/fixtures/responses/google/only_coordinates.xml",
65
+ "test/fixtures/responses/google/partial.xml",
66
+ "test/fixtures/responses/google/server_error.xml",
67
+ "test/fixtures/responses/google/success.xml",
68
+ "test/fixtures/responses/google/success_multiple_results.xml",
69
+ "test/fixtures/responses/google/unavailable.xml",
70
+ "test/fixtures/responses/google/unknown_address.xml",
71
+ "test/fixtures/responses/host_ip/private.txt",
72
+ "test/fixtures/responses/host_ip/success.txt",
73
+ "test/fixtures/responses/host_ip/unknown.txt",
74
+ "test/fixtures/responses/local_search_maps/empty.txt",
75
+ "test/fixtures/responses/local_search_maps/not_found.txt",
76
+ "test/fixtures/responses/local_search_maps/success.txt",
77
+ "test/fixtures/responses/mapquest/multi_result.xml",
78
+ "test/fixtures/responses/mapquest/success.xml",
79
+ "test/fixtures/responses/meta_carta/bad_address.xml",
80
+ "test/fixtures/responses/meta_carta/multiple.xml",
81
+ "test/fixtures/responses/meta_carta/success.xml",
82
+ "test/fixtures/responses/multimap/missing_params.xml",
83
+ "test/fixtures/responses/multimap/no_matches.xml",
84
+ "test/fixtures/responses/multimap/success.xml",
85
+ "test/fixtures/responses/postcode_anywhere/badkey.xml",
86
+ "test/fixtures/responses/postcode_anywhere/canada.xml",
87
+ "test/fixtures/responses/postcode_anywhere/empty.xml",
88
+ "test/fixtures/responses/postcode_anywhere/success.xml",
89
+ "test/fixtures/responses/postcode_anywhere/uk.xml",
90
+ "test/fixtures/responses/yahoo/success.xml",
91
+ "test/fixtures/responses/yahoo/unknown_address.xml",
92
+ "test/mocks/uri.rb",
93
+ "test/test_helper.rb",
94
+ "test/unit/graticule/distance_test.rb",
95
+ "test/unit/graticule/geocoder/geocoder_us_test.rb",
96
+ "test/unit/graticule/geocoder/geocoders.rb",
97
+ "test/unit/graticule/geocoder/google_test.rb",
98
+ "test/unit/graticule/geocoder/host_ip_test.rb",
99
+ "test/unit/graticule/geocoder/local_search_maps_test.rb",
100
+ "test/unit/graticule/geocoder/mapquest_test.rb",
101
+ "test/unit/graticule/geocoder/meta_carta_test.rb",
102
+ "test/unit/graticule/geocoder/multi_test.rb",
103
+ "test/unit/graticule/geocoder/multimap_test.rb",
104
+ "test/unit/graticule/geocoder/postcode_anywhere_test.rb",
105
+ "test/unit/graticule/geocoder/yahoo_test.rb",
106
+ "test/unit/graticule/geocoder_test.rb",
107
+ "test/unit/graticule/location_test.rb"
108
+ ]
109
+ s.has_rdoc = true
110
+ s.homepage = %q{http://github.com/collectiveidea/graticule}
111
+ s.rdoc_options = ["--main", "README.rdoc", "--inline-source", "--line-numbers"]
112
+ s.require_paths = ["lib"]
113
+ s.rubyforge_project = %q{graticule}
114
+ s.rubygems_version = %q{1.3.1}
115
+ s.summary = %q{API for using all the popular geocoding services.}
116
+ s.test_files = [
117
+ "test/mocks/uri.rb",
118
+ "test/test_helper.rb",
119
+ "test/unit/graticule/distance_test.rb",
120
+ "test/unit/graticule/geocoder/geocoder_us_test.rb",
121
+ "test/unit/graticule/geocoder/geocoders.rb",
122
+ "test/unit/graticule/geocoder/google_test.rb",
123
+ "test/unit/graticule/geocoder/host_ip_test.rb",
124
+ "test/unit/graticule/geocoder/local_search_maps_test.rb",
125
+ "test/unit/graticule/geocoder/mapquest_test.rb",
126
+ "test/unit/graticule/geocoder/meta_carta_test.rb",
127
+ "test/unit/graticule/geocoder/multi_test.rb",
128
+ "test/unit/graticule/geocoder/multimap_test.rb",
129
+ "test/unit/graticule/geocoder/postcode_anywhere_test.rb",
130
+ "test/unit/graticule/geocoder/yahoo_test.rb",
131
+ "test/unit/graticule/geocoder_test.rb",
132
+ "test/unit/graticule/location_test.rb"
133
+ ]
134
+
135
+ if s.respond_to? :specification_version then
136
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
137
+ s.specification_version = 2
138
+
139
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
140
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
141
+ else
142
+ s.add_dependency(%q<activesupport>, [">= 0"])
143
+ end
144
+ else
145
+ s.add_dependency(%q<activesupport>, [">= 0"])
146
+ end
147
+ end
data/lib/graticule.rb CHANGED
@@ -19,6 +19,7 @@ require 'graticule/geocoder/local_search_maps'
19
19
  require 'graticule/geocoder/meta_carta'
20
20
  require 'graticule/geocoder/postcode_anywhere'
21
21
  require 'graticule/geocoder/multimap'
22
+ require 'graticule/geocoder/mapquest'
22
23
  require 'graticule/distance'
23
24
  require 'graticule/distance/haversine'
24
25
  require 'graticule/distance/spherical'
@@ -109,4 +109,4 @@ module Graticule #:nodoc:
109
109
 
110
110
  end
111
111
  end
112
- end
112
+ end
@@ -41,9 +41,10 @@ module Graticule #:nodoc:
41
41
  end
42
42
 
43
43
  def check_error(xml) #:nodoc:
44
- raise AddressError, xml.text if xml.text =~ /couldn't find this address! sorry/
45
- raise Error, xml.text if xml.text =~ /Your browser sent a request that this server could not understand./
46
- raise Error, xml.text if !(xml.text =~ /geo:Point/)
44
+ text = xml.to_s
45
+ raise AddressError, text if text =~ /couldn't find this address! sorry/
46
+ raise Error, text if text =~ /Your browser sent a request that this server could not understand./
47
+ raise Error, text if !(text =~ /geo:Point/)
47
48
  end
48
49
 
49
50
  end
@@ -0,0 +1,87 @@
1
+ module Graticule #:nodoc:
2
+ module Geocoder #:nodoc:
3
+
4
+ # Mapquest requires both a client id and a password, which you can
5
+ # get by registering at:
6
+ # http://developer.mapquest.com/Home/Register?_devAPISignup_WAR_devAPISignup_action=signup&_devAPISignup_WAR_devAPISignup_clientType=Developer
7
+ #
8
+ # mq = Graticule.service(:mapquest).new(CLIENT_ID, PASSWORD)
9
+ # location = gg.locate('44 Allen Rd., Lovell, ME 04051')
10
+ # [42.78942, -86.104424]
11
+ #
12
+ class Mapquest < Rest
13
+ # I would link to the documentation here, but there is none that will do anything but confuse you.
14
+
15
+ PRECISION = {
16
+ 'L1' => :address,
17
+ 'I1' => :street,
18
+ 'B1' => :street,
19
+ 'B2' => :street,
20
+ 'B3' => :street,
21
+ 'Z3' => :zip,
22
+ 'Z4' => :zip,
23
+ 'Z2' => :zip,
24
+ 'Z1' => :zip,
25
+ 'A5' => :city,
26
+ 'A4' => :county,
27
+ 'A3' => :state,
28
+ 'A1' => :country
29
+ }
30
+
31
+ def initialize(client_id, password)
32
+ @password = password
33
+ @client_id = client_id
34
+ @url = URI.parse('http://geocode.dev.mapquest.com/mq/mqserver.dll')
35
+ end
36
+
37
+ # Locates +address+ returning a Location
38
+ def locate(address)
39
+ get :q => address.is_a?(String) ? address : location_from_params(address).to_s
40
+ end
41
+
42
+ protected
43
+
44
+ def make_url(params) #:nodoc
45
+ query = "e=5&<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><Geocode Version=\"1\"> \
46
+ #{address_string(params[:q])}#{authentication_string}</Geocode>"
47
+ url = @url.dup
48
+ url.query = URI.escape(query)
49
+ url
50
+ end
51
+
52
+ # Extracts a location from +xml+.
53
+ def parse_response(xml) #:nodoc:
54
+ longitude = xml.elements['/GeocodeResponse/LocationCollection/GeoAddress/LatLng/Lng'].text.to_f
55
+ latitude = xml.elements['/GeocodeResponse/LocationCollection/GeoAddress/LatLng/Lat'].text.to_f
56
+ returning Location.new(:latitude => latitude, :longitude => longitude) do |l|
57
+ address = REXML::XPath.first(xml, '/GeocodeResponse/LocationCollection/GeoAddress')
58
+
59
+ if address
60
+ l.street = value(address.elements['./Street/text()'])
61
+ l.locality = value(address.elements['./AdminArea5/text()'])
62
+ l.region = value(address.elements['./AdminArea3/text()'])
63
+ l.postal_code = value(address.elements['./PostalCode/text()'])
64
+ l.country = value(address.elements['./AdminArea1/text()'])
65
+ l.precision = PRECISION[value(address.elements['./ResultCode/text()'])[0,2]]
66
+ end
67
+ end
68
+ end
69
+
70
+ # Extracts and raises any errors in +xml+
71
+ def check_error(xml) #:nodoc
72
+ end
73
+
74
+ def value(element)
75
+ element.value if element
76
+ end
77
+
78
+ def authentication_string
79
+ "<Authentication Version=\"2\"><Password>#{@password}</Password><ClientId>#{@client_id}</ClientId></Authentication>"
80
+ end
81
+
82
+ def address_string(query)
83
+ "<Address><Street>#{query}</Street></Address><GeocodeOptionsCollection Count=\"0\"/>"
84
+ end
85
+ end
86
+ end
87
+ end
@@ -58,4 +58,4 @@ module Graticule
58
58
  end
59
59
 
60
60
  end
61
- end
61
+ end
@@ -2,7 +2,7 @@ module Graticule #:nodoc:
2
2
  module Version #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 10
5
+ TINY = 11
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?><GeocodeResponse><LocationCollection Count="10"><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>NY</AdminArea3><AdminArea4>Suffolk County</AdminArea4><AdminArea5>Stony Brook</AdminArea5><LatLng><Lat>40.925598</Lat><Lng>-73.141403</Lng></LatLng><ResultCode>A5XCX</ResultCode><SourceId>gaz_us</SourceId></GeoAddress><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>NY</AdminArea3><AdminArea4>Rockland County</AdminArea4><AdminArea5>Stony Point</AdminArea5><LatLng><Lat>41.229401</Lat><Lng>-73.987503</Lng></LatLng><ResultCode>A5XCX</ResultCode><SourceId>gaz_us</SourceId></GeoAddress><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>NY</AdminArea3><AdminArea4>Dutchess County</AdminArea4><AdminArea5>Staatsburg</AdminArea5><LatLng><Lat>41.849701</Lat><Lng>-73.930603</Lng></LatLng><ResultCode>A5XCX</ResultCode><SourceId>gaz_us</SourceId></GeoAddress><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>NY</AdminArea3><AdminArea4>Delaware County</AdminArea4><AdminArea5>Stamford</AdminArea5><LatLng><Lat>42.407200</Lat><Lng>-74.614700</Lng></LatLng><ResultCode>A5XCX</ResultCode><SourceId>gaz_us</SourceId></GeoAddress><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>NY</AdminArea3><AdminArea4>Clinton County</AdminArea4><AdminArea5>Standish</AdminArea5><LatLng><Lat>44.689201</Lat><Lng>-73.949402</Lng></LatLng><ResultCode>A5XCX</ResultCode><SourceId>gaz_us</SourceId></GeoAddress><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>NY</AdminArea3><AdminArea4>Albany County</AdminArea4><AdminArea5>Stanford Heights</AdminArea5><LatLng><Lat>42.765598</Lat><Lng>-73.889397</Lng></LatLng><ResultCode>A5XCX</ResultCode><SourceId>gaz_us</SourceId></GeoAddress><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>NY</AdminArea3><AdminArea4>Dutchess County</AdminArea4><AdminArea5>Stanfordville</AdminArea5><LatLng><Lat>41.867199</Lat><Lng>-73.714699</Lng></LatLng><ResultCode>A5XCX</ResultCode><SourceId>gaz_us</SourceId></GeoAddress><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>NY</AdminArea3><AdminArea4>Allegany County</AdminArea4><AdminArea5>Stannards</AdminArea5><LatLng><Lat>42.086399</Lat><Lng>-77.922501</Lng></LatLng><ResultCode>A5XCX</ResultCode><SourceId>gaz_us</SourceId></GeoAddress><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>NY</AdminArea3><AdminArea4>Saint Lawrence County</AdminArea4><AdminArea5>Star Lake</AdminArea5><LatLng><Lat>44.159698</Lat><Lng>-75.031898</Lng></LatLng><ResultCode>A5XCX</ResultCode><SourceId>gaz_us</SourceId></GeoAddress><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>NY</AdminArea3><AdminArea4>Rensselaer County</AdminArea4><AdminArea5>Stephentown</AdminArea5><LatLng><Lat>42.548599</Lat><Lng>-73.374397</Lng></LatLng><ResultCode>A5XCX</ResultCode><SourceId>gaz_us</SourceId></GeoAddress></LocationCollection></GeocodeResponse>
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?><GeocodeResponse><LocationCollection Count="1"><GeoAddress><AdminArea1>US</AdminArea1><AdminArea3>ME</AdminArea3><AdminArea4>Oxford County</AdminArea4><AdminArea5>Lovell</AdminArea5><PostalCode>04051-3919</PostalCode><Street>44 Allen Rd</Street><LatLng><Lat>44.152019</Lat><Lng>-70.892706</Lng></LatLng><ResultCode>L1AAA</ResultCode><SourceId>navt</SourceId></GeoAddress></LocationCollection></GeocodeResponse>
@@ -0,0 +1,47 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
2
+
3
+ module Graticule
4
+ module Geocoder
5
+ class MapquestTest < Test::Unit::TestCase
6
+ def setup
7
+ @geocoder = Mapquest.new('client_id', 'password')
8
+ end
9
+
10
+ def test_success
11
+ prepare_response(:success)
12
+ location = Location.new(
13
+ :country => "US",
14
+ :latitude => 44.152019,
15
+ :locality => "Lovell",
16
+ :longitude => -70.892706,
17
+ :postal_code => "04051-3919",
18
+ :precision => :address,
19
+ :region => "ME",
20
+ :street => "44 Allen Rd"
21
+ )
22
+ assert_equal(location, @geocoder.locate('44 Allen Rd., Lovell, ME 04051'))
23
+ end
24
+
25
+ def test_multi_result
26
+ prepare_response(:multi_result)
27
+ location = Location.new(
28
+ :country => "US",
29
+ :latitude => 40.925598,
30
+ :locality => "Stony Brook",
31
+ :longitude => -73.141403,
32
+ :postal_code => nil,
33
+ :precision => :city,
34
+ :region => "NY",
35
+ :street => nil
36
+ )
37
+ assert_equal(location, @geocoder.locate('217 Union St., NY'))
38
+ end
39
+
40
+ protected
41
+
42
+ def prepare_response(id)
43
+ URI::HTTP.responses << response('mapquest', id)
44
+ end
45
+ end
46
+ end
47
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graticule
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.2.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Keepers
@@ -9,8 +9,8 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-17 00:00:00 -04:00
13
- default_executable:
12
+ date: 2009-09-06 00:00:00 -04:00
13
+ default_executable: geocode
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -22,16 +22,6 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: "0"
24
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.8.2
34
- version:
35
25
  description: Graticule is a geocoding API that provides a common interface to all the popular services, including Google, Yahoo, Geocoder.us, and MetaCarta.
36
26
  email: brandon@opensoul.org
37
27
  executables:
@@ -39,23 +29,17 @@ executables:
39
29
  extensions: []
40
30
 
41
31
  extra_rdoc_files:
42
- - CHANGELOG.txt
43
- - LICENSE.txt
44
- - Manifest.txt
45
32
  - 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
52
33
  files:
34
+ - .gitignore
53
35
  - CHANGELOG.txt
54
36
  - LICENSE.txt
55
37
  - Manifest.txt
56
38
  - README.txt
57
39
  - Rakefile
40
+ - VERSION
58
41
  - bin/geocode
42
+ - graticule.gemspec
59
43
  - init.rb
60
44
  - lib/graticule.rb
61
45
  - lib/graticule/cli.rb
@@ -72,6 +56,7 @@ files:
72
56
  - lib/graticule/geocoder/google.rb
73
57
  - lib/graticule/geocoder/host_ip.rb
74
58
  - lib/graticule/geocoder/local_search_maps.rb
59
+ - lib/graticule/geocoder/mapquest.rb
75
60
  - lib/graticule/geocoder/meta_carta.rb
76
61
  - lib/graticule/geocoder/multi.rb
77
62
  - lib/graticule/geocoder/multimap.rb
@@ -102,6 +87,8 @@ files:
102
87
  - test/fixtures/responses/local_search_maps/empty.txt
103
88
  - test/fixtures/responses/local_search_maps/not_found.txt
104
89
  - test/fixtures/responses/local_search_maps/success.txt
90
+ - test/fixtures/responses/mapquest/multi_result.xml
91
+ - test/fixtures/responses/mapquest/success.xml
105
92
  - test/fixtures/responses/meta_carta/bad_address.xml
106
93
  - test/fixtures/responses/meta_carta/multiple.xml
107
94
  - test/fixtures/responses/meta_carta/success.xml
@@ -123,6 +110,7 @@ files:
123
110
  - test/unit/graticule/geocoder/google_test.rb
124
111
  - test/unit/graticule/geocoder/host_ip_test.rb
125
112
  - test/unit/graticule/geocoder/local_search_maps_test.rb
113
+ - test/unit/graticule/geocoder/mapquest_test.rb
126
114
  - test/unit/graticule/geocoder/meta_carta_test.rb
127
115
  - test/unit/graticule/geocoder/multi_test.rb
128
116
  - test/unit/graticule/geocoder/multimap_test.rb
@@ -131,11 +119,15 @@ files:
131
119
  - test/unit/graticule/geocoder_test.rb
132
120
  - test/unit/graticule/location_test.rb
133
121
  has_rdoc: true
134
- homepage: http://graticule.rubyforge.org
122
+ homepage: http://github.com/collectiveidea/graticule
123
+ licenses: []
124
+
135
125
  post_install_message:
136
126
  rdoc_options:
137
127
  - --main
138
- - README.txt
128
+ - README.rdoc
129
+ - --inline-source
130
+ - --line-numbers
139
131
  require_paths:
140
132
  - lib
141
133
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -153,16 +145,20 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
145
  requirements: []
154
146
 
155
147
  rubyforge_project: graticule
156
- rubygems_version: 1.3.1
148
+ rubygems_version: 1.3.3
157
149
  signing_key:
158
150
  specification_version: 2
159
151
  summary: API for using all the popular geocoding services.
160
152
  test_files:
153
+ - test/mocks/uri.rb
154
+ - test/test_helper.rb
161
155
  - test/unit/graticule/distance_test.rb
162
156
  - test/unit/graticule/geocoder/geocoder_us_test.rb
157
+ - test/unit/graticule/geocoder/geocoders.rb
163
158
  - test/unit/graticule/geocoder/google_test.rb
164
159
  - test/unit/graticule/geocoder/host_ip_test.rb
165
160
  - test/unit/graticule/geocoder/local_search_maps_test.rb
161
+ - test/unit/graticule/geocoder/mapquest_test.rb
166
162
  - test/unit/graticule/geocoder/meta_carta_test.rb
167
163
  - test/unit/graticule/geocoder/multi_test.rb
168
164
  - test/unit/graticule/geocoder/multimap_test.rb