graticule 0.2.5 → 0.2.6
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/Manifest.txt +2 -0
- data/lib/graticule/geocoder/multi.rb +46 -0
- data/lib/graticule/version.rb +1 -1
- metadata +3 -1
data/Manifest.txt
CHANGED
@@ -20,6 +20,7 @@ lib/graticule/geocoder/google.rb
|
|
20
20
|
lib/graticule/geocoder/host_ip.rb
|
21
21
|
lib/graticule/geocoder/local_search_maps.rb
|
22
22
|
lib/graticule/geocoder/meta_carta.rb
|
23
|
+
lib/graticule/geocoder/multi.rb
|
23
24
|
lib/graticule/geocoder/postcode_anywhere.rb
|
24
25
|
lib/graticule/geocoder/rest.rb
|
25
26
|
lib/graticule/geocoder/yahoo.rb
|
@@ -63,6 +64,7 @@ test/unit/graticule/geocoder/google_test.rb
|
|
63
64
|
test/unit/graticule/geocoder/host_ip_test.rb
|
64
65
|
test/unit/graticule/geocoder/local_search_maps_test.rb
|
65
66
|
test/unit/graticule/geocoder/meta_carta_test.rb
|
67
|
+
test/unit/graticule/geocoder/multi_test.rb
|
66
68
|
test/unit/graticule/geocoder/postcode_anywhere_test.rb
|
67
69
|
test/unit/graticule/geocoder/yahoo_test.rb
|
68
70
|
test/unit/graticule/geocoder_test.rb
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Graticule #:nodoc:
|
2
|
+
module Geocoder #:nodoc:
|
3
|
+
class Multi
|
4
|
+
|
5
|
+
# The Multi geocoder allows you to use multiple geocoders in succession.
|
6
|
+
#
|
7
|
+
# geocoder = Graticule.service(:multi).new(
|
8
|
+
# Graticule.service(:google).new("api_key"),
|
9
|
+
# Graticule.service(:yahoo).new("api_key"),
|
10
|
+
# )
|
11
|
+
# geocoder.locate '49423' # <= tries geocoders in succession
|
12
|
+
#
|
13
|
+
# The Multi geocoder will try the geocoders in order if a Graticule::AddressError
|
14
|
+
# is raised. You can customize this behavior by passing in a block to the Multi
|
15
|
+
# geocoder. For example, to try the geocoders until one returns a result with a
|
16
|
+
# high enough precision:
|
17
|
+
#
|
18
|
+
# geocoder = Graticule.service(:multi).new(geocoders) do |result|
|
19
|
+
# [:address, :street].include?(result.precision)
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# Geocoders will be tried in order until the block returned true for one of the results
|
23
|
+
#
|
24
|
+
def initialize(*geocoders, &acceptable)
|
25
|
+
@acceptable = acceptable || lambda { true }
|
26
|
+
@geocoders = geocoders.flatten
|
27
|
+
end
|
28
|
+
|
29
|
+
def locate(address)
|
30
|
+
last_error = nil
|
31
|
+
@geocoders.each do |geocoder|
|
32
|
+
begin
|
33
|
+
result = geocoder.locate address
|
34
|
+
return result if @acceptable.call(result)
|
35
|
+
rescue Error => e
|
36
|
+
last_error = e
|
37
|
+
rescue Errno::ECONNREFUSED
|
38
|
+
logger.error("Connection refused to #{service}")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
raise last_error || AddressError.new("Couldn't find '#{address}' with any of the services")
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/graticule/version.rb
CHANGED
metadata
CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: graticule
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
6
|
+
version: 0.2.6
|
7
7
|
date: 2007-09-12 00:00:00 -04:00
|
8
8
|
summary: API for using all the popular geocoding services.
|
9
9
|
require_paths:
|
@@ -51,6 +51,7 @@ files:
|
|
51
51
|
- lib/graticule/geocoder/host_ip.rb
|
52
52
|
- lib/graticule/geocoder/local_search_maps.rb
|
53
53
|
- lib/graticule/geocoder/meta_carta.rb
|
54
|
+
- lib/graticule/geocoder/multi.rb
|
54
55
|
- lib/graticule/geocoder/postcode_anywhere.rb
|
55
56
|
- lib/graticule/geocoder/rest.rb
|
56
57
|
- lib/graticule/geocoder/yahoo.rb
|
@@ -94,6 +95,7 @@ files:
|
|
94
95
|
- test/unit/graticule/geocoder/host_ip_test.rb
|
95
96
|
- test/unit/graticule/geocoder/local_search_maps_test.rb
|
96
97
|
- test/unit/graticule/geocoder/meta_carta_test.rb
|
98
|
+
- test/unit/graticule/geocoder/multi_test.rb
|
97
99
|
- test/unit/graticule/geocoder/postcode_anywhere_test.rb
|
98
100
|
- test/unit/graticule/geocoder/yahoo_test.rb
|
99
101
|
- test/unit/graticule/geocoder_test.rb
|