diff --git a/lib/indirizzo/address.rb b/lib/indirizzo/address.rb index 89d7996..d83f92b 100644 --- a/lib/indirizzo/address.rb +++ b/lib/indirizzo/address.rb @@ -16,6 +16,7 @@ class Address attr_accessor :street attr_accessor :city attr_accessor :state + attr_accessor :full_state attr_accessor :zip, :plus4 attr_accessor :country attr_accessor :options @@ -40,7 +41,7 @@ def clean (value) end def assign_text_to_address(text) - @text, @city, @street, @number, @prenum, @sufnum, @full_state, @state, @zip, @plus4, @country = AddressHashExtractor.extract(text, @options) + @text, @city, @street, @number, @prenum, @sufnum, @full_state, @abbr_state, @state, @zip, @plus4, @country = AddressHashExtractor.extract(text, @options) end def expand_numbers (string) diff --git a/lib/indirizzo/address_hash_extractor.rb b/lib/indirizzo/address_hash_extractor.rb index 4568fa6..63e01ee 100644 --- a/lib/indirizzo/address_hash_extractor.rb +++ b/lib/indirizzo/address_hash_extractor.rb @@ -18,7 +18,7 @@ def extract handle_hash end - return @text, @city, @street, @number, @prenum, @sufnum, @full_state, @state, @zip, @plus4, @country + return @text, @city, @street, @number, @prenum, @sufnum, @full_state, @abbr_state, @state, @zip, @plus4, @country end private @@ -69,6 +69,8 @@ def handle_state @state = State[@state] if @state.length > 2 elsif !address_hash[:state].nil? @state = address_hash[:state] + @abbr_state = State.select{|k,v| k == @state}.values.first || @state + @full_state = State.select{|k,v| k == @state || v == @state}.keys.first elsif !address_hash[:country].nil? @state = address_hash[:country] end diff --git a/test/test_address.rb b/test/test_address.rb index 0b771cd..96fd4f8 100644 --- a/test/test_address.rb +++ b/test/test_address.rb @@ -11,6 +11,11 @@ def test_new_raises_exception_with_no_text end end + def test_text_parsing_city + addr = Address.new("Lake Forest") + assert_equal ["lake forest"], addr.city + end + def test_new addr = Address.new("1600 Pennsylvania Av., Washington DC") assert_equal "1600 Pennsylvania Av, Washington DC", addr.text @@ -43,7 +48,7 @@ def test_skip_parse addresses = [ {:street => "1233 Main St", :city => "Springfield", :region => "VA", :postal_code => "12345", :final_number => "1233", :parsed_street => "main st"}, {:street => "somewhere Ln", :city => "Somewhere", :region => "WI", :postal_code => "22222", :number => "402", :parsed_street => "somewhere ln", :final_number => "402"}, - {:street => "somewhere Ln", :city => "Somewhere", :state => "WI", :postal_code => "22222", :number => "402", :parsed_street => "somewhere ln", :final_number => "402"}, + {:street => "somewhere Ln", :city => "Somewhere", :state => "WI", :abbr_state => "WI", :full_state => "Wisconsin", :postal_code => "22222", :number => "402", :parsed_street => "somewhere ln", :final_number => "402"}, ] for preparsed_address in addresses address_for_geocode = Address.new preparsed_address @@ -52,6 +57,8 @@ def test_skip_parse assert_equal preparsed_address[:city],address_for_geocode.city[0] assert_equal preparsed_address[:region],address_for_geocode.state if preparsed_address[:region] assert_equal preparsed_address[:state],address_for_geocode.state if preparsed_address[:state] + assert_equal preparsed_address[:full_state],address_for_geocode.full_state if preparsed_address[:state] || preparsed_address[:region] + assert_equal preparsed_address[:abbr_state],address_for_geocode.state if preparsed_address[:state] assert_equal preparsed_address[:postal_code],address_for_geocode.zip end end @@ -73,7 +80,7 @@ def test_address_hash {:address => "Arlington, VA", :place_check => ["arlington"]} ] for preparsed_address in addresses - address_for_geocode = Address.new preparsed_address + address_for_geocode = Address.new preparsed_address assert_equal preparsed_address[:place_check],address_for_geocode.city end end @@ -153,18 +160,21 @@ def check_city(fixture) :street => "Pennsylvania Ave", :city => "Washington", :state => "DC", + :full_state => "washington dc", :zip => "20050"}, {:text => "1600 Pennsylvania, Washington DC", :number => "1600", :street => "Pennsylvania", :city => "Washington", + :full_state => "washington dc", :state => "DC"}, {:text => "1600 Pennsylvania Washington DC", :number => "1600", :city => "Washington", :street => "Pennsylvania", + :full_state => "washington dc", :state => "DC"}, {:text => "1600 Pennsylvania Washington", @@ -172,11 +182,13 @@ def check_city(fixture) :number => "1600", :street => "Pennsylvania", :city => "Washington", + :full_state => "washington dc", :state => "DC"}, {:text => "1600 Pennsylvania 20050", :number => "1600", :state => "PA", + :full_state => "pennsylvania", :zip => "20050"}, {:text => "1600 Pennsylvania Av, Washington DC 20050-9999",