Skip to content
Snippets Groups Projects
Commit 40ac60c4 authored by Robert Wachs's avatar Robert Wachs
Browse files

Adds possibility to raise error when response parsing fails

parent 7e49f75e
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,14 @@ module Geocoder
class OverQueryLimitError < Error
end
class ResponseParseError < Error
attr_reader :response
def initialize(response)
@response = response
end
end
class RequestDenied < Error
end
......
......@@ -182,6 +182,8 @@ module Geocoder
else
JSON.parse(data)
end
rescue => err
raise_error(ResponseParseError.new(data)) or warn "Geocoding API's response was not valid JSON."
end
##
......@@ -189,8 +191,6 @@ module Geocoder
#
def parse_raw_data(raw_data)
parse_json(raw_data)
rescue
warn "Geocoding API's response was not valid JSON."
end
##
......
......@@ -111,6 +111,10 @@ module Geocoder
raise TimeoutError if query.text == "timeout"
raise SocketError if query.text == "socket_error"
raise Errno::ECONNREFUSED if query.text == "connection_refused"
if query.text == "invalid_json"
return MockHttpResponse.new(:body => 'invalid json', :code => 200)
end
read_fixture fixture_for_query(query)
end
end
......@@ -413,4 +417,8 @@ class MockHttpResponse
@code = options[:code].to_s
@body = options[:body]
end
def [](key)
send key if respond_to?(key)
end
end
......@@ -18,6 +18,29 @@ class ErrorHandlingTest < GeocoderTestCase
end
end
def test_always_raise_response_parse_error
Geocoder.configure(:always_raise => [Geocoder::ResponseParseError])
[:freegeoip, :google, :okf].each do |l|
lookup = Geocoder::Lookup.get(l)
set_api_key!(l)
assert_raises Geocoder::ResponseParseError do
lookup.send(:results, Geocoder::Query.new("invalid_json"))
end
end
end
def test_never_raise_response_parse_error
[:freegeoip, :google, :okf].each do |l|
lookup = Geocoder::Lookup.get(l)
set_api_key!(l)
silence_warnings do
assert_nothing_raised do
lookup.send(:results, Geocoder::Query.new("invalid_json"))
end
end
end
end
def test_always_raise_timeout_error
Geocoder.configure(:always_raise => [TimeoutError])
Geocoder::Lookup.all_services_except_test.each do |l|
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment