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