diff --git a/lib/geocoder/stores/active_record.rb b/lib/geocoder/stores/active_record.rb index cbbb5914296a60ebc64f968c046920fa394369fc..67b78e76eccc7cd8345a63675e3fff5fd229d1f6 100644 --- a/lib/geocoder/stores/active_record.rb +++ b/lib/geocoder/stores/active_record.rb @@ -217,12 +217,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 fe1682004ef4c537d7d6882e320c3c4b40d680a5..a31b82c184a2a5635ece5b536b5d8de9643dbe09 100644 --- a/test/geocoder_test.rb +++ b/test/geocoder_test.rb @@ -32,6 +32,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 a6fe5ceabc11e5a1fe7fd188e01aae10e4265b47..d34b63c0359256e40432bea7c691d83042dc94ad 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -200,6 +200,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