From 83b6c7437d112150fae0895607b4c5a355a24257 Mon Sep 17 00:00:00 2001 From: Alex Reisner <alex@alexreisner.com> Date: Fri, 22 Apr 2011 12:54:38 -0400 Subject: [PATCH] Add Result#state and #state_code attributes. Also alias as #province and #province_code. --- lib/geocoder/results/base.rb | 16 ++++++++++++++++ lib/geocoder/results/freegeoip.rb | 12 ++++++++++-- lib/geocoder/results/geocoder_ca.rb | 2 +- lib/geocoder/results/google.rb | 17 +++++++++++++++-- lib/geocoder/results/yahoo.rb | 12 ++++++++++-- lib/geocoder/results/yandex.rb | 8 ++++++++ test/geocoder_test.rb | 20 ++++++++++++-------- 7 files changed, 72 insertions(+), 15 deletions(-) diff --git a/lib/geocoder/results/base.rb b/lib/geocoder/results/base.rb index 10844002..645e3c2a 100644 --- a/lib/geocoder/results/base.rb +++ b/lib/geocoder/results/base.rb @@ -32,6 +32,22 @@ module Geocoder coordinates[1] end + def state + fail + end + + def province + state + end + + def state_code + fail + end + + def province_code + state_code + end + def country fail end diff --git a/lib/geocoder/results/freegeoip.rb b/lib/geocoder/results/freegeoip.rb index bb8f1cd2..e2d437e2 100644 --- a/lib/geocoder/results/freegeoip.rb +++ b/lib/geocoder/results/freegeoip.rb @@ -4,13 +4,21 @@ module Geocoder::Result class Freegeoip < Base def address(format = :full) - "#{city}#{', ' + region_code unless region_code == ''} #{postal_code}, #{country}" + "#{city}#{', ' + state_code unless state_code == ''} #{postal_code}, #{country}" end def city @data['city'] end + def state + @data['region_name'] + end + + def state_code + @data['region_code'] + end + def country @data['country_name'] end @@ -24,7 +32,7 @@ module Geocoder::Result end def self.response_attributes - %w[region_code region_name metrocode zipcode country_name ip] + %w[metrocode ip] end response_attributes.each do |a| diff --git a/lib/geocoder/results/geocoder_ca.rb b/lib/geocoder/results/geocoder_ca.rb index db52765e..37d1c09a 100644 --- a/lib/geocoder/results/geocoder_ca.rb +++ b/lib/geocoder/results/geocoder_ca.rb @@ -23,7 +23,7 @@ module Geocoder::Result @data['prov'] end - alias_method :province, :state + alias_method :state_code, :state def postal_code @data['postal'] diff --git a/lib/geocoder/results/google.rb b/lib/geocoder/results/google.rb index 5455004d..de99a002 100644 --- a/lib/geocoder/results/google.rb +++ b/lib/geocoder/results/google.rb @@ -12,8 +12,9 @@ module Geocoder::Result end def city - fields = [:locality, :sublocality, :administrative_area_level_3, - :administrative_area_level_2, :administrative_area_level_1] + fields = [:locality, :sublocality, + :administrative_area_level_3, + :administrative_area_level_2] fields.each do |f| if entity = address_components_of_type(f).first return entity['long_name'] @@ -21,6 +22,18 @@ module Geocoder::Result end end + def state + if state = address_components_of_type(:administrative_area_level_1).first + state['long_name'] + end + end + + def state_code + if state = address_components_of_type(:administrative_area_level_1).first + state['short_name'] + end + end + def country if country = address_components_of_type(:country).first country['long_name'] diff --git a/lib/geocoder/results/yahoo.rb b/lib/geocoder/results/yahoo.rb index d8e3e0d7..fab775c5 100644 --- a/lib/geocoder/results/yahoo.rb +++ b/lib/geocoder/results/yahoo.rb @@ -11,6 +11,14 @@ module Geocoder::Result @data['city'] end + def state + @data['state'] + end + + def state_code + @data['statecode'] + end + def country @data['country'] end @@ -25,8 +33,8 @@ module Geocoder::Result def self.response_attributes %w[quality offsetlat offsetlon radius boundingbox name - line1 line2 line3 line4 cross house street xstreet unittype unit postal - neighborhood county state countrycode statecode countycode + line1 line2 line3 line4 cross house street xstreet unittype unit + neighborhood county countycode level0 level1 level2 level3 level4 level0code level1code level2code timezone areacode uzip hash woeid woetype] end diff --git a/lib/geocoder/results/yandex.rb b/lib/geocoder/results/yandex.rb index 2227a521..ca2b3f20 100644 --- a/lib/geocoder/results/yandex.rb +++ b/lib/geocoder/results/yandex.rb @@ -23,6 +23,14 @@ module Geocoder::Result address_details['CountryNameCode'] end + def state + "" + end + + def state_code + "" + end + def postal_code "" end diff --git a/test/geocoder_test.rb b/test/geocoder_test.rb index 1d18853e..752a4ec9 100644 --- a/test/geocoder_test.rb +++ b/test/geocoder_test.rb @@ -427,13 +427,17 @@ class GeocoderTest < Test::Unit::TestCase def assert_result_has_required_attributes(result) m = "Lookup #{Geocoder::Configuration.lookup} does not support %s attribute." - assert result.coordinates.is_a?(Array), m % "coordinates" - assert result.latitude.is_a?(Float), m % "latitude" - assert result.longitude.is_a?(Float), m % "longitude" - assert result.city.is_a?(String), m % "city" - assert result.postal_code.is_a?(String), m % "postal_code" - assert result.country.is_a?(String), m % "country" - assert result.country_code.is_a?(String), m % "country_code" - assert_not_nil result.address, m % "address" + assert result.coordinates.is_a?(Array), m % "coordinates" + assert result.latitude.is_a?(Float), m % "latitude" + assert result.longitude.is_a?(Float), m % "longitude" + assert result.city.is_a?(String), m % "city" + assert result.state.is_a?(String), m % "state" + assert result.state_code.is_a?(String), m % "state_code" + assert result.province.is_a?(String), m % "province" + assert result.province_code.is_a?(String), m % "province_code" + assert result.postal_code.is_a?(String), m % "postal_code" + assert result.country.is_a?(String), m % "country" + assert result.country_code.is_a?(String), m % "country_code" + assert_not_nil result.address, m % "address" end end -- GitLab