geocoder-sensis 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/geocoder/sensis/version.rb +1 -1
- data/lib/geocoder/sensis.rb +15 -1
- data/spec/lib/geocoder/sensis_spec.rb +42 -19
- data/spec/support/mock_sensis.rb +2 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29daad5f5ef3f4435d7367d5b9788c2656193039
|
4
|
+
data.tar.gz: 541861a9642e1368528214631a2b09a845204890
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48e759a781a1b0f1e7f9cdd8f7ac4e020aaa314ec446bc19b061a0d813329ecae7ce1fcf1c5b05096b4d71870dc23093df19073cc0e25ebf8a32b13ea3ab0f05
|
7
|
+
data.tar.gz: a532bb5ba3e27e6c1dede487195e5bfd1ac9bee33137b73c1699d958977781f2f523163ab7fe4b4defa540b10db5b5b8b43ba03b7ac46a168965e6e2faf87ba8
|
data/lib/geocoder/sensis.rb
CHANGED
@@ -30,6 +30,10 @@ module Geocoder
|
|
30
30
|
"https"
|
31
31
|
end
|
32
32
|
|
33
|
+
def cache_key(query)
|
34
|
+
query.to_s
|
35
|
+
end
|
36
|
+
|
33
37
|
def results(query)
|
34
38
|
doc = fetch_data(query)
|
35
39
|
return [] unless doc
|
@@ -42,7 +46,7 @@ module Geocoder
|
|
42
46
|
# TODO: Raise PR upstream to allow other request methods.
|
43
47
|
#
|
44
48
|
def make_api_request(query)
|
45
|
-
timeout(configuration.timeout) do
|
49
|
+
response = timeout(configuration.timeout) do
|
46
50
|
uri = URI.parse(query_url(query))
|
47
51
|
http_client.start(uri.host, uri.port, :use_ssl => true) do |client|
|
48
52
|
req = Net::HTTP::Post.new(uri.request_uri, configuration.http_headers)
|
@@ -54,6 +58,15 @@ module Geocoder
|
|
54
58
|
client.request(req)
|
55
59
|
end
|
56
60
|
end
|
61
|
+
case response.code.to_i
|
62
|
+
when 200
|
63
|
+
return response
|
64
|
+
when 400
|
65
|
+
raise_error ::Geocoder::InvalidRequest.new("Bad Request: #{response.body}")
|
66
|
+
else
|
67
|
+
raise_error ::Geocoder::Error.new("Unable to access Sensis API: #{response.code}. Body:\n#{response.body}")
|
68
|
+
end
|
69
|
+
response
|
57
70
|
end
|
58
71
|
|
59
72
|
def result_class
|
@@ -94,6 +107,7 @@ module Geocoder
|
|
94
107
|
end
|
95
108
|
|
96
109
|
class SensisStructured < SensisBase
|
110
|
+
|
97
111
|
def name
|
98
112
|
:sensis_structured
|
99
113
|
end
|
@@ -35,36 +35,59 @@ describe Geocoder::Sensis do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
describe "Geocoding an address via structured api" do
|
38
|
+
|
38
39
|
before do
|
39
40
|
Geocoder.configure(
|
40
41
|
:lookup => :sensis_structured,
|
41
42
|
:api_key => [sensis_api_token, sensis_api_password],
|
42
43
|
:use_https => true,
|
43
|
-
:timeout => 30000
|
44
|
+
:timeout => 30000,
|
45
|
+
:always_raise => :all,
|
44
46
|
)
|
45
|
-
mock_sensis_api :request_type => :structured,
|
46
|
-
:address => '12 Powlett Street, East Melbourne',
|
47
|
-
:latitude => 44.66,
|
48
|
-
:longitude => 55.66
|
49
47
|
end
|
50
48
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
"type" => "Street",
|
60
|
-
"suffix" => ""
|
61
|
-
})
|
49
|
+
describe "with an invalid address (returning http 400)" do
|
50
|
+
it "throws an ::Geocoder::InvalidRequest" do
|
51
|
+
mock_sensis_api :request_type => :structured, :response_code => 400
|
52
|
+
expect {
|
53
|
+
Geocoder.coordinates({})
|
54
|
+
}.to raise_error(::Geocoder::InvalidRequest)
|
55
|
+
end
|
56
|
+
end
|
62
57
|
|
63
|
-
|
58
|
+
describe "when sensis is down (returning http 500)" do
|
59
|
+
it "throws an ::Geocoder::Error" do
|
60
|
+
mock_sensis_api :request_type => :structured, :response_code => 500
|
61
|
+
expect {
|
62
|
+
Geocoder.coordinates({})
|
63
|
+
}.to raise_error(::Geocoder::Error)
|
64
|
+
end
|
64
65
|
end
|
65
66
|
|
66
|
-
|
67
|
+
describe "with a valid address" do
|
68
|
+
before do
|
69
|
+
mock_sensis_api(:request_type => :structured,
|
70
|
+
:address => '12 Powlett Street, East Melbourne',
|
71
|
+
:latitude => 44.66,
|
72
|
+
:longitude => 55.66)
|
73
|
+
end
|
67
74
|
|
68
|
-
|
75
|
+
it "returns the geocode from sensis" do
|
76
|
+
coords = Geocoder.coordinates(
|
77
|
+
"state" => "Vic",
|
78
|
+
"suburb" => "Richmond",
|
79
|
+
"postcode" => "3121",
|
80
|
+
"number" => "9",
|
81
|
+
"street" => {
|
82
|
+
"name" => "Victoria",
|
83
|
+
"type" => "Street",
|
84
|
+
"suffix" => ""
|
85
|
+
})
|
86
|
+
|
87
|
+
expect(coords).to eq [44.66, 55.66]
|
88
|
+
end
|
69
89
|
|
90
|
+
end
|
91
|
+
end
|
70
92
|
|
93
|
+
end
|
data/spec/support/mock_sensis.rb
CHANGED
@@ -25,12 +25,11 @@ def mock_sensis_api(options = {})
|
|
25
25
|
'X-Auth-Token' => sensis_api_token,
|
26
26
|
'X-Auth-Password' => sensis_api_password
|
27
27
|
}).
|
28
|
-
to_return(:status => sensis_response.
|
28
|
+
to_return(:status => sensis_response.response_code, :body => sensis_response.raw, :headers => {})
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
31
|
class SensisResponse
|
33
|
-
attr_reader :request_address, :request_type, :latitude, :longitude, :street_lat, :street_lon, :granularity, :
|
32
|
+
attr_reader :request_address, :request_type, :latitude, :longitude, :street_lat, :street_lon, :granularity, :response_code, :state, :suburb
|
34
33
|
|
35
34
|
def initialize(options = {})
|
36
35
|
defaults.merge(options).each do |k, v|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geocoder-sensis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Heath
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: geocoder
|