From bd37a2401d01ee7245818ea774ce621627e60433 Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Fri, 14 Mar 2014 21:17:11 -0400
Subject: [PATCH] Handle different response structures explicitly.

---
 lib/geocoder/results/smarty_streets.rb | 28 ++++++++++++++++----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/lib/geocoder/results/smarty_streets.rb b/lib/geocoder/results/smarty_streets.rb
index 425328b2..6bdb5143 100644
--- a/lib/geocoder/results/smarty_streets.rb
+++ b/lib/geocoder/results/smarty_streets.rb
@@ -4,7 +4,7 @@ module Geocoder::Result
   class SmartyStreets < Base
     def coordinates
       %w(latitude longitude).map do |i|
-        (zipcode_result? && zipcodes.first[i]) || metadata[i]
+        zipcode_endpoint? ? zipcodes.first[i] : metadata[i]
       end
     end
 
@@ -17,15 +17,15 @@ module Geocoder::Result
     end
 
     def state
-      components['state_abbreviation'] || city_states.first['state']
+      zipcode_endpoint? ?
+        city_states.first['state'] :
+        components['state_abbreviation']
     end
 
     def state_code
-      if cs = city_states.first
-        cs['state_abbreviation']
-      else
-        state
-      end
+      zipcode_endpoint? ?
+        city_states.first['state_abbreviation'] :
+        components['state_abbreviation']
     end
 
     def country
@@ -45,11 +45,15 @@ module Geocoder::Result
     end
 
     def city
-      components['city_name'] || city_states.first['city']
+      zipcode_endpoint? ?
+        city_states.first['city'] :
+        components['city_name']
     end
 
     def zipcode
-      components['zipcode'] || zipcodes.first['zipcode']
+      zipcode_endpoint? ?
+        zipcodes.first['zipcode'] :
+        components['zipcode']
     end
     alias_method :postal_code, :zipcode
 
@@ -59,10 +63,12 @@ module Geocoder::Result
     alias_method :postal_code_extended, :zip4
 
     def fips
-      metadata['county_fips'] || zipcodes.first['county_fips']
+      zipcode_endpoint? ?
+        zipcodes.first['county_fips'] :
+        metadata['county_fips']
     end
 
-    def zipcode_result?
+    def zipcode_endpoint?
       zipcodes.any?
     end
 
-- 
GitLab