From fc818cc9738c8772be0edd900ceb5bb9fbc1f68f Mon Sep 17 00:00:00 2001 From: Alex Reisner <alex@alexreisner.com> Date: Sat, 5 Mar 2011 15:15:30 -0500 Subject: [PATCH] Add attributes to Geocoder::Result objects. city, country, country_code, postal_code --- lib/geocoder/results/base.rb | 8 ++++++++ lib/geocoder/results/freegeoip.rb | 18 +++++++++++++++++- lib/geocoder/results/google.rb | 16 ++++++++++++++++ lib/geocoder/results/yahoo.rb | 16 ++++++++++++++++ test/geocoder_test.rb | 4 ++++ 5 files changed, 61 insertions(+), 1 deletion(-) diff --git a/lib/geocoder/results/base.rb b/lib/geocoder/results/base.rb index 85966828..10844002 100644 --- a/lib/geocoder/results/base.rb +++ b/lib/geocoder/results/base.rb @@ -31,6 +31,14 @@ module Geocoder def longitude coordinates[1] end + + def country + fail + end + + def country_code + fail + end end end end diff --git a/lib/geocoder/results/freegeoip.rb b/lib/geocoder/results/freegeoip.rb index aebdd20e..c1e6e0ab 100644 --- a/lib/geocoder/results/freegeoip.rb +++ b/lib/geocoder/results/freegeoip.rb @@ -4,7 +4,23 @@ module Geocoder::Result class Freegeoip < Base def address(format = :full) - "#{city}#{', ' + region_code unless region_code == ''} #{zipcode}, #{country_name}" + "#{city}#{', ' + region_code unless region_code == ''} #{postal_code}, #{country}" + end + + def city + @data['city'] + end + + def country + @data['country_name'] + end + + def country_code + @data['country_code'] + end + + def postal_code + @data['zipcode'] end def self.response_attributes diff --git a/lib/geocoder/results/google.rb b/lib/geocoder/results/google.rb index 01d7b69a..5e7f44ae 100644 --- a/lib/geocoder/results/google.rb +++ b/lib/geocoder/results/google.rb @@ -11,6 +11,22 @@ module Geocoder::Result formatted_address end + def city + address_components_of_type(:locality).first['long_name'] + end + + def country + address_components_of_type(:country).first['long_name'] + end + + def country_code + address_components_of_type(:country).first['short_name'] + end + + def postal_code + address_components_of_type(:postal_code).first['long_name'] + end + def types @data['types'] end diff --git a/lib/geocoder/results/yahoo.rb b/lib/geocoder/results/yahoo.rb index 7af45d55..1c6ae430 100644 --- a/lib/geocoder/results/yahoo.rb +++ b/lib/geocoder/results/yahoo.rb @@ -7,6 +7,22 @@ module Geocoder::Result (1..4).to_a.map{ |i| @data["line#{i}"] }.reject{ |i| i.nil? or i == "" }.join(", ") end + def city + @data['city'] + end + + def country + @data['country'] + end + + def country_code + @data['countrycode'] + end + + def postal_code + @data['postal'] + end + def self.response_attributes %w[quality offsetlat offsetlon radius boundingbox name line1 line2 line3 line4 cross house street xstreet unittype unit postal diff --git a/test/geocoder_test.rb b/test/geocoder_test.rb index 65dcdecf..1a7dc97c 100644 --- a/test/geocoder_test.rb +++ b/test/geocoder_test.rb @@ -134,6 +134,10 @@ class GeocoderTest < Test::Unit::TestCase assert result.coordinates.is_a?(Array) assert result.latitude.is_a?(Float) assert result.longitude.is_a?(Float) + assert result.city.is_a?(String) + assert result.postal_code.is_a?(String) + assert result.country.is_a?(String) + assert result.country_code.is_a?(String) assert_not_nil result.address end end -- GitLab