From d88a46e38508507475830b371352069ce2a98be2 Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Sat, 5 Mar 2011 16:38:09 -0500
Subject: [PATCH] Add obj argument to block taken by geocode method.

This fixes a scope problem: blocks are evaluated in the context in which
they are declared so custom routines were being evaluated in the context
of the class, not the object.
---
 lib/geocoder/orms/active_record.rb | 10 +++++-----
 lib/geocoder/orms/base.rb          |  4 ++--
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/lib/geocoder/orms/active_record.rb b/lib/geocoder/orms/active_record.rb
index b1bac032..90e54067 100644
--- a/lib/geocoder/orms/active_record.rb
+++ b/lib/geocoder/orms/active_record.rb
@@ -149,11 +149,11 @@ module Geocoder::Orm
     # coordinates as an array: <tt>[lat, lon]</tt>.
     #
     def fetch_coordinates(save = false)
-      geocode do |r|
+      geocode do |o,r|
         unless r.latitude.nil? or r.longitude.nil?
           method = (save ? "update" : "write") + "_attribute"
-          send method, self.class.geocoder_options[:latitude],  r.latitude
-          send method, self.class.geocoder_options[:longitude], r.longitude
+          o.send method, self.class.geocoder_options[:latitude],  r.latitude
+          o.send method, self.class.geocoder_options[:longitude], r.longitude
         end
         r.coordinates
       end
@@ -171,10 +171,10 @@ module Geocoder::Orm
     # address as a string.
     #
     def fetch_address(save = false)
-      geocode do |r|
+      geocode do |o,r|
         unless r.address.nil?
           method = (save ? "update" : "write") + "_attribute"
-          send method, self.class.geocoder_options[:fetched_address], r.address
+          o.send method, self.class.geocoder_options[:fetched_address], r.address
         end
         r.address
       end
diff --git a/lib/geocoder/orms/base.rb b/lib/geocoder/orms/base.rb
index 1edf7e45..dedeefe4 100644
--- a/lib/geocoder/orms/base.rb
+++ b/lib/geocoder/orms/base.rb
@@ -52,9 +52,9 @@ module Geocoder
         # passing a block to this method overrides the one given in the model
         if result = Geocoder.search(*args).first
           if block_given?
-            yield(result)
+            yield(self, result)
           else
-            self.class.geocoder_options[:block].call(result)
+            self.class.geocoder_options[:block].call(self, result)
           end
         end
       end
-- 
GitLab