From 11f2bd98e3f6e070b2c4f7e1e16981c872d1839d Mon Sep 17 00:00:00 2001 From: Jon Psaila Date: Mon, 30 Jun 2025 20:38:01 -0400 Subject: [PATCH] Add error handling case for HTTP 405 --- lib/geocoder/exceptions.rb | 3 +++ lib/geocoder/lookups/base.rb | 3 +++ test/unit/lookups/nominatim_test.rb | 9 +++++++++ 3 files changed, 15 insertions(+) diff --git a/lib/geocoder/exceptions.rb b/lib/geocoder/exceptions.rb index 2e6a21beb..d6aa626c7 100644 --- a/lib/geocoder/exceptions.rb +++ b/lib/geocoder/exceptions.rb @@ -37,4 +37,7 @@ class LookupTimeout < ::Timeout::Error class NetworkError < Error end + class MethodNotAllowed < Error + end + end diff --git a/lib/geocoder/lookups/base.rb b/lib/geocoder/lookups/base.rb index f0c113784..d117d9ec1 100644 --- a/lib/geocoder/lookups/base.rb +++ b/lib/geocoder/lookups/base.rb @@ -281,6 +281,9 @@ def check_response_for_errors!(response) elsif response.code.to_i == 402 raise_error(Geocoder::OverQueryLimitError) || Geocoder.log(:warn, "Geocoding API error: 402 Payment Required") + elsif response.code.to_i == 405 + raise_error(Geocoder::MethodNotAllowed) || + Geocoder.log(:warn, "Geocoding API error: 405 Method Not Allowed") elsif response.code.to_i == 429 raise_error(Geocoder::OverQueryLimitError) || Geocoder.log(:warn, "Geocoding API error: 429 Too Many Requests") diff --git a/test/unit/lookups/nominatim_test.rb b/test/unit/lookups/nominatim_test.rb index f4a6fa4b8..41f42dd7e 100644 --- a/test/unit/lookups/nominatim_test.rb +++ b/test/unit/lookups/nominatim_test.rb @@ -48,4 +48,13 @@ def test_raises_exception_when_over_query_limit l.send(:results, Geocoder::Query.new("over limit")) end end + + def test_raises_exception_when_method_not_allowed + Geocoder.configure(:always_raise => [Geocoder::MethodNotAllowed]) + l = Geocoder::Lookup.get(:nominatim) + assert_raises Geocoder::MethodNotAllowed do + response = MockHttpResponse.new(code: 405) + l.send(:check_response_for_errors!, response) + end + end end