From cf98f9161e7cab760d7c865f2c21a97ce8ed253d Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Mon, 21 Mar 2011 21:47:13 -0400
Subject: [PATCH] Move Earth's radius to separate method.

---
 lib/geocoder/calculations.rb       | 12 +++++++++++-
 lib/geocoder/orms/active_record.rb |  2 +-
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/lib/geocoder/calculations.rb b/lib/geocoder/calculations.rb
index b617bad2..a3c69ce8 100644
--- a/lib/geocoder/calculations.rb
+++ b/lib/geocoder/calculations.rb
@@ -22,7 +22,10 @@ module Geocoder
       options[:units] ||= :mi
 
       # define conversion factors
-      conversions = { :mi => 3956, :km => 6371 }
+      conversions = {
+        :mi => earth_radius,
+        :km => earth_radius / km_in_mi
+      }
 
       # convert degrees to radians
       lat1 = to_radians(lat1)
@@ -113,6 +116,13 @@ module Geocoder
       (radians * 180.0) / Math::PI
     end
 
+    ##
+    # Radius of the earth, in miles.
+    #
+    def earth_radius
+      3956
+    end
+
     ##
     # Conversion factor: km to mi.
     #
diff --git a/lib/geocoder/orms/active_record.rb b/lib/geocoder/orms/active_record.rb
index 2633fb27..25d44ef3 100644
--- a/lib/geocoder/orms/active_record.rb
+++ b/lib/geocoder/orms/active_record.rb
@@ -93,7 +93,7 @@ module Geocoder::Orm
           "(SIN(RADIANS(#{latitude})) * " +
           "COS(RADIANS(#{lat_attr})) * " +
           "COS(RADIANS(#{lon_attr} - #{longitude}))))) + 360) % 360"
-        distance = "3956 * 2 * ASIN(SQRT(" +
+        distance = "#{Geocoder::Calculations.earth_radius} * 2 * ASIN(SQRT(" +
           "POWER(SIN((#{latitude} - #{lat_attr}) * " +
           "PI() / 180 / 2), 2) + COS(#{latitude} * PI() / 180) * " +
           "COS(#{lat_attr} * PI() / 180) * " +
-- 
GitLab