From 18c9dd28b233c5f46248319298ddeeedc83ef0db Mon Sep 17 00:00:00 2001 From: Alex Reisner <alex@alexreisner.com> Date: Mon, 16 Jun 2014 19:10:52 -0400 Subject: [PATCH] Fix Telize result handling. Use correct fixtures in tests and make required changes so tests pass. --- lib/geocoder/lookups/telize.rb | 25 ++++++++++--------------- lib/geocoder/results/telize.rb | 8 ++++---- test/fixtures/telize_10_10_10_10 | 5 +---- test/fixtures/telize_555_555_555_555 | 4 ++++ test/fixtures/telize_74_200_247_59 | 13 +------------ test/fixtures/telize_no_results | 5 +---- test/unit/lookups/telize_test.rb | 5 +++++ 7 files changed, 26 insertions(+), 39 deletions(-) create mode 100644 test/fixtures/telize_555_555_555_555 diff --git a/lib/geocoder/lookups/telize.rb b/lib/geocoder/lookups/telize.rb index 4719e998..b66cdae8 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 84aec721..ee8880b7 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 b85a5590..700f75cc 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 00000000..b85a5590 --- /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 78c7ce3e..a8c64d32 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 b85a5590..700f75cc 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 aa112b20..864b9b70 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 -- GitLab