diff --git a/lib/geocoder/results/test.rb b/lib/geocoder/results/test.rb index 99ceef0c2e4643931c527a471b45c4ebfe80669b..b0e6bef2fd9c397c415681ae4eb28818a93c0061 100644 --- a/lib/geocoder/results/test.rb +++ b/lib/geocoder/results/test.rb @@ -4,12 +4,26 @@ module Geocoder module Result class Test < Base + def self.add_result_attribute(attr) + return if respond_to?(attr.to_sym) + + define_method(attr) do + @data[attr.to_s] || @data[attr.to_sym] + end + end + %w[latitude longitude neighborhood city state state_code sub_state sub_state_code province province_code postal_code country country_code address street_address street_number route geometry].each do |attr| - define_method(attr) do - @data[attr.to_s] || @data[attr.to_sym] + add_result_attribute(attr) + end + + def initialize(data) + data.keys.each do |attr| + Test.add_result_attribute(attr) end + + super end end end diff --git a/test/test_mode_test.rb b/test/test_mode_test.rb index 7f4b611581829c59fbf8ba3ae57f76a38d9d04de..62911c558bd83deb49bc09dc2c8690763944d7f9 100644 --- a/test/test_mode_test.rb +++ b/test/test_mode_test.rb @@ -42,6 +42,15 @@ class TestModeTest < Test::Unit::TestCase end end + def test_search_with_custom_attributes + custom_attributes = mock_attributes.merge(:custom => 'NY, NY') + Geocoder::Lookup::Test.add_stub("New York, NY", [custom_attributes]) + + result = Geocoder.search("New York, NY").first + + assert_equal 'NY, NY', result.custom + end + private def mock_attributes coordinates = [40.7143528, -74.0059731]