From ed10f782cb31f50856c4adc7307c4a0babb0483a Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Sat, 29 Sep 2012 14:20:53 -0400
Subject: [PATCH] Merge two methods into one.

Reduces code duplication.
---
 lib/geocoder/stores/active_record.rb | 61 ++++++++--------------------
 1 file changed, 16 insertions(+), 45 deletions(-)

diff --git a/lib/geocoder/stores/active_record.rb b/lib/geocoder/stores/active_record.rb
index 03e0b370..5002a9f0 100644
--- a/lib/geocoder/stores/active_record.rb
+++ b/lib/geocoder/stores/active_record.rb
@@ -98,10 +98,22 @@ module Geocoder::Store
       # * +:exclude+ - an object to exclude (used by the +nearbys+ method)
       #
       def near_scope_options(latitude, longitude, radius = 20, options = {})
-        method_prefix = using_sqlite? ? "approx" : "full"
-        send(
-          method_prefix + "_near_scope_options",
-          latitude, longitude, radius, options
+        options[:units] ||= (geocoder_options[:units] || Geocoder::Configuration.units)
+        bearing = bearing_from_sql_options(latitude, longitude, options)
+        distance = distance_from_sql_options(latitude, longitude, options)
+        if using_sqlite?
+          b = Geocoder::Calculations.bounding_box([latitude, longitude], radius, options)
+          args = b + [
+            full_column_name(geocoder_options[:latitude]),
+            full_column_name(geocoder_options[:longitude])
+          ]
+          conditions = Geocoder::Sql.within_bounding_box(*args)
+        else
+          conditions = ["#{distance} <= ?", radius]
+        end
+        default_near_scope_options(latitude, longitude, radius, options).merge(
+          :select => select_clause(options[:select], distance, bearing),
+          :conditions => add_exclude_condition(conditions, options[:exclude])
         )
       end
 
@@ -132,47 +144,6 @@ module Geocoder::Store
         end
       end
 
-      ##
-      # Scope options hash for use with a database that supports POWER(),
-      # SQRT(), PI(), and trigonometric functions SIN(), COS(), ASIN(),
-      # ATAN2(), DEGREES(), and RADIANS().
-      #
-      def full_near_scope_options(latitude, longitude, radius, options)
-        options[:units] ||= (geocoder_options[:units] || Geocoder::Configuration.units)
-        bearing = bearing_from_sql_options(latitude, longitude, options)
-        distance = distance_from_sql_options(latitude, longitude, options)
-        conditions = ["#{distance} <= ?", radius]
-        default_near_scope_options(latitude, longitude, radius, options).merge(
-          :select => select_clause(options[:select], distance, bearing),
-          :conditions => add_exclude_condition(conditions, options[:exclude])
-        )
-      end
-
-      ##
-      # Scope options hash for use with a database without trigonometric
-      # functions, like SQLite. Approach is to find objects within a square
-      # rather than a circle, so results are very approximate (will include
-      # objects outside the given radius).
-      #
-      # Distance and bearing calculations are *extremely inaccurate*. They
-      # only exist for interface consistency--not intended for production!
-      #
-      def approx_near_scope_options(latitude, longitude, radius, options)
-        options[:units] ||= (geocoder_options[:units] || Geocoder::Configuration.units)
-        bearing = bearing_from_sql_options(latitude, longitude, options)
-        distance = distance_from_sql_options(latitude, longitude, options)
-        b = Geocoder::Calculations.bounding_box([latitude, longitude], radius, options)
-        args = b + [
-          full_column_name(geocoder_options[:latitude]),
-          full_column_name(geocoder_options[:longitude])
-        ]
-        conditions = Geocoder::Sql.within_bounding_box(*args)
-        default_near_scope_options(latitude, longitude, radius, options).merge(
-          :select => select_clause(options[:select], distance, bearing),
-          :conditions => add_exclude_condition(conditions, options[:exclude])
-        )
-      end
-
       ##
       # Generate the SELECT clause.
       #
-- 
GitLab