From 2d44d602a8c538d6be1a43c594ae17bf084d2d2f Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Sat, 5 Mar 2011 14:08:55 -0500
Subject: [PATCH] Add Rack::Request#location method.

---
 lib/geocoder.rb         |  1 +
 lib/geocoder/request.rb | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)
 create mode 100644 lib/geocoder/request.rb

diff --git a/lib/geocoder.rb b/lib/geocoder.rb
index 2030b787..b9e9c704 100644
--- a/lib/geocoder.rb
+++ b/lib/geocoder.rb
@@ -1,6 +1,7 @@
 require "geocoder/configuration"
 require "geocoder/calculations"
 require "geocoder/railtie"
+require "geocoder/request"
 
 module Geocoder
   extend self
diff --git a/lib/geocoder/request.rb b/lib/geocoder/request.rb
new file mode 100644
index 00000000..e2b1a9c8
--- /dev/null
+++ b/lib/geocoder/request.rb
@@ -0,0 +1,20 @@
+require 'geocoder'
+require 'geocoder/results/freegeoip'
+
+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
+      end
+    end
+  end
+end
+
+if defined?(Rack) and defined?(Rack::Request)
+  Rack::Request.send :include, Geocoder::Request
+end
-- 
GitLab