lib/geocoder/results/smarty_streets.rb
require 'geocoder/lookups/base'
module Geocoder::Result
class SmartyStreets < Base
def coordinates
result = %w(latitude longitude).map do |i|
zipcode_endpoint? ? zipcodes.first[i] : metadata[i]
end
if result.compact.empty?
nil
else
result
end
end
def address
parts =
if international_endpoint?
(1..12).map { |i| @data["address#{i}"] }
else
[
delivery_line_1,
delivery_line_2,
last_line
]
end
parts.select{ |i| i.to_s != "" }.join(" ")
end
def state
if international_endpoint?
components['administrative_area']
elsif zipcode_endpoint?
city_states.first['state']
else
components['state_abbreviation']
end
end
def state_code
if international_endpoint?
components['administrative_area']
elsif zipcode_endpoint?
city_states.first['state_abbreviation']
else
components['state_abbreviation']
end
end
def country
international_endpoint? ?
components['country_iso_3'] :
"United States"
end
def country_code
international_endpoint? ?
components['country_iso_3'] :
"US"
end
## Extra methods not in base.rb ------------------------
def street
international_endpoint? ?
components['thoroughfare_name'] :
components['street_name']
end
def city
if international_endpoint?
components['locality']
elsif zipcode_endpoint?
city_states.first['city']
else
components['city_name']
end
end
def zipcode
if international_endpoint?
components['postal_code']
elsif zipcode_endpoint?
zipcodes.first['zipcode']
else
components['zipcode']
end
end
alias_method :postal_code, :zipcode
def zip4
components['plus4_code']
end
alias_method :postal_code_extended, :zip4
def fips
zipcode_endpoint? ?
zipcodes.first['county_fips'] :
metadata['county_fips']
end
def zipcode_endpoint?
zipcodes.any?
end
def international_endpoint?
!@data['address1'].nil?
end
[
:delivery_line_1,
:delivery_line_2,
:last_line,
:delivery_point_barcode,
:addressee
].each do |m|
define_method(m) do
@data[m.to_s] || ''
end
end
[
:components,
:metadata,
:analysis
].each do |m|
define_method(m) do
@data[m.to_s] || {}
end
end
[
:city_states,
:zipcodes
].each do |m|
define_method(m) do
@data[m.to_s] || []
end
end
end
end