From 34f410ada776a94107220fc4d9364ee250f52f6f Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Mon, 7 Mar 2011 22:40:26 -0500
Subject: [PATCH] Cache request location lookup result.

---
 lib/geocoder/request.rb | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/lib/geocoder/request.rb b/lib/geocoder/request.rb
index e2b1a9c8..9409074c 100644
--- a/lib/geocoder/request.rb
+++ b/lib/geocoder/request.rb
@@ -5,12 +5,15 @@ module Geocoder
   module Request
 
     def location
-      if ip.nil? or ip == "0.0.0.0" or ip.match /^127/ # don't look up loopback
-        # but return a Geocoder::Result for consistency
-        Geocoder::Result::Freegeoip.new("ip" => ip)
-      else
-        Geocoder.search(ip).first
+      unless defined?(@location)
+        if ip.nil? or ip == "0.0.0.0" or ip.match /^127/ # don't look up loopback
+          # but return a Geocoder::Result for consistency
+          @location = Geocoder::Result::Freegeoip.new("ip" => ip)
+        else
+          @location = Geocoder.search(ip).first
+        end
       end
+      @location
     end
   end
 end
-- 
GitLab