diff --git a/lib/geocoder/stores/active_record.rb b/lib/geocoder/stores/active_record.rb index fb0b478bcf2318f299f8993eda62790df04fb9e9..3887104004b364c97db4d621d2e8f7e2148e94e2 100644 --- a/lib/geocoder/stores/active_record.rb +++ b/lib/geocoder/stores/active_record.rb @@ -194,12 +194,13 @@ module Geocoder::Store # def geocode do_lookup(false) do |o,rs| - r = rs.first - unless r.latitude.nil? or r.longitude.nil? - o.send :write_attribute, self.class.geocoder_options[:latitude], r.latitude - o.send :write_attribute, self.class.geocoder_options[:longitude], r.longitude + if r = rs.first + unless r.latitude.nil? or r.longitude.nil? + o.send :write_attribute, self.class.geocoder_options[:latitude], r.latitude + o.send :write_attribute, self.class.geocoder_options[:longitude], r.longitude + end + r.coordinates end - r.coordinates end end diff --git a/lib/geocoder/stores/base.rb b/lib/geocoder/stores/base.rb index 13a0a3532c56d07ed3e8489aa0467e13ab4bc826..f7726c645153738566b4d8468e2e506720a6704b 100644 --- a/lib/geocoder/stores/base.rb +++ b/lib/geocoder/stores/base.rb @@ -98,18 +98,17 @@ module Geocoder return end - if (results = Geocoder.search(query)).size > 0 + results = Geocoder.search(query) - # execute custom block, if specified in configuration - block_key = reverse ? :reverse_block : :geocode_block - if custom_block = options[block_key] - custom_block.call(self, results) + # execute custom block, if specified in configuration + block_key = reverse ? :reverse_block : :geocode_block + if custom_block = options[block_key] + custom_block.call(self, results) - # else execute block passed directly to this method, - # which generally performs the "auto-assigns" - elsif block_given? - yield(self, results) - end + # else execute block passed directly to this method, + # which generally performs the "auto-assigns" + elsif block_given? + yield(self, results) end end end diff --git a/lib/geocoder/stores/mongo_base.rb b/lib/geocoder/stores/mongo_base.rb index 9203e2147b8dc0a0a4542bb76576cefbceaaef68..fa84801402f831f1006f9750904e9460b8fb8ac6 100644 --- a/lib/geocoder/stores/mongo_base.rb +++ b/lib/geocoder/stores/mongo_base.rb @@ -56,11 +56,12 @@ module Geocoder::Store # def geocode do_lookup(false) do |o,rs| - r = rs.first - unless r.coordinates.nil? - o.send :write_attribute, self.class.geocoder_options[:coordinates], r.coordinates.reverse + if r = rs.first + unless r.coordinates.nil? + o.send :write_attribute, self.class.geocoder_options[:coordinates], r.coordinates.reverse + end + r.coordinates end - r.coordinates end end diff --git a/test/geocoder_test.rb b/test/geocoder_test.rb index 2a0b02461f9e71268e47cc03814a7417ac1c7ae0..a4d55aa432ad9cf0ff7bd5e2424b3c71f2308826 100644 --- a/test/geocoder_test.rb +++ b/test/geocoder_test.rb @@ -36,6 +36,12 @@ class GeocoderTest < Test::Unit::TestCase assert_equal coords, [v.latitude, v.longitude] end + def test_geocode_block_executed_when_no_results + v = Event.new("Nowhere", "no results") + v.geocode + assert_equal "NOT FOUND", v.coords_string + end + def test_reverse_geocode_assigns_and_returns_address v = Landmark.new(*landmark_params(:msg)) address = "4 Penn Plaza, New York, NY 10001, USA" diff --git a/test/test_helper.rb b/test/test_helper.rb index f491504aaed96ec1748d11ce86f3640fa1a395cf..c302f759946af66f0fb117b611aaeb0f36f83548 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -180,6 +180,8 @@ class Event < ActiveRecord::Base geocoded_by :address do |obj,results| if result = results.first obj.coords_string = "#{result.latitude},#{result.longitude}" + else + obj.coords_string = "NOT FOUND" end end