diff --git a/lib/geocoder/lookups/telize.rb b/lib/geocoder/lookups/telize.rb index 4719e998d7c4f13d69ae68ce568e357e7ef7efda..b66cdae8494a7f43f060e41bf365f09d19e783e8 100644 --- a/lib/geocoder/lookups/telize.rb +++ b/lib/geocoder/lookups/telize.rb @@ -18,24 +18,19 @@ module Geocoder::Lookup def results(query) # don't look up a loopback address, just return the stored result return [reserved_result(query.text)] if query.loopback_ip_address? - # note: Telize returns json with a code attribute of 401 on bad request - doc = fetch_data(query) - (doc && doc['code'] == 401) ? [] : [doc] + if (doc = fetch_data(query)).nil? or doc['code'] == 401 or empty_result?(doc) + [] + else + [doc] + end + end + + def empty_result?(doc) + !doc.is_a?(Hash) or doc.keys == ["ip"] end def reserved_result(ip) - { - "ip" => ip, - "city" => "", - "region_code" => "", - "region_name" => "", - "metrocode" => "", - "zipcode" => "", - "latitude" => "0", - "longitude" => "0", - "country_name" => "Reserved", - "country_code" => "RD" - } + {"message" => "Input string is not a valid IP address", "code" => 401} end end end diff --git a/lib/geocoder/results/telize.rb b/lib/geocoder/results/telize.rb index 84aec721e787d54efefc428f521ce249e73315f0..ee8880b7696fe7c9139cb255572e0f8f2ddabe40 100644 --- a/lib/geocoder/results/telize.rb +++ b/lib/geocoder/results/telize.rb @@ -13,7 +13,7 @@ module Geocoder::Result end def state - @data['region_name'] + @data['region'] end def state_code @@ -21,7 +21,7 @@ module Geocoder::Result end def country - @data['country_name'] + @data['country'] end def country_code @@ -29,11 +29,11 @@ module Geocoder::Result end def postal_code - @data['zipcode'] + @data['postal_code'] end def self.response_attributes - %w[metrocode ip] + %w[timezone isp dma_code area_code ip asn continent_code country_code3] end response_attributes.each do |a| diff --git a/test/fixtures/telize_10_10_10_10 b/test/fixtures/telize_10_10_10_10 index b85a5590334e3afd7ebe5d3e9ccb6eb0d5493c8b..700f75cc5041bd44b8d7a22081be711783549737 100644 --- a/test/fixtures/telize_10_10_10_10 +++ b/test/fixtures/telize_10_10_10_10 @@ -1,4 +1 @@ -{ -"message": "Input string is not a valid IP address", -"code": 401 -} +{"ip":"10.10.10.10"} diff --git a/test/fixtures/telize_555_555_555_555 b/test/fixtures/telize_555_555_555_555 new file mode 100644 index 0000000000000000000000000000000000000000..b85a5590334e3afd7ebe5d3e9ccb6eb0d5493c8b --- /dev/null +++ b/test/fixtures/telize_555_555_555_555 @@ -0,0 +1,4 @@ +{ +"message": "Input string is not a valid IP address", +"code": 401 +} diff --git a/test/fixtures/telize_74_200_247_59 b/test/fixtures/telize_74_200_247_59 index 78c7ce3e57bcf79534475006a19c0cbeba3422ad..a8c64d324a97108bc79092c7d4ba0cb24f3f764f 100644 --- a/test/fixtures/telize_74_200_247_59 +++ b/test/fixtures/telize_74_200_247_59 @@ -1,12 +1 @@ -{ - "city": "Plano", - "region_code": "TX", - "region_name": "Texas", - "metrocode": "623", - "zipcode": "75093", - "longitude": "-96.8134", - "country_name": "United States", - "country_code": "US", - "ip": "74.200.247.59", - "latitude": "33.0347" -} +{"timezone":"America\/Chicago","isp":"Layered Technologies, Inc.","region_code":"TX","country":"United States","dma_code":"0","area_code":"0","region":"Texas","ip":"74.200.247.59","asn":"AS22576","continent_code":"NA","city":"Plano","postal_code":"75093","longitude":-96.8134,"latitude":33.0347,"country_code":"US","country_code3":"USA"} diff --git a/test/fixtures/telize_no_results b/test/fixtures/telize_no_results index b85a5590334e3afd7ebe5d3e9ccb6eb0d5493c8b..700f75cc5041bd44b8d7a22081be711783549737 100644 --- a/test/fixtures/telize_no_results +++ b/test/fixtures/telize_no_results @@ -1,4 +1 @@ -{ -"message": "Input string is not a valid IP address", -"code": 401 -} +{"ip":"10.10.10.10"} diff --git a/test/unit/lookups/telize_test.rb b/test/unit/lookups/telize_test.rb index aa112b2091b29a1bfb90f82fcf12f7ed7bb5b317..864b9b70989acaee5e63eb09925d0213152329ef 100644 --- a/test/unit/lookups/telize_test.rb +++ b/test/unit/lookups/telize_test.rb @@ -22,4 +22,9 @@ class TelizeTest < GeocoderTestCase results = Geocoder.search("10.10.10.10") assert_equal 0, results.length end + + def test_invalid_address + results = Geocoder.search("555.555.555.555") + assert_equal 0, results.length + end end