From 6db3848149aa1ba4e82b1c7446afd6bcb7cb4b0d Mon Sep 17 00:00:00 2001
From: mdalton <mdalton@weblinc.com>
Date: Sat, 23 Nov 2013 12:47:54 -0500
Subject: [PATCH] Change mongodb near query so that a nil radius omits the
 maxDistance instead of setting to 0.0

---
 lib/geocoder/stores/mongo_base.rb | 7 +++++--
 test/mongoid_test.rb              | 7 +++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/lib/geocoder/stores/mongo_base.rb b/lib/geocoder/stores/mongo_base.rb
index bfc295d2..6b5bebc7 100644
--- a/lib/geocoder/stores/mongo_base.rb
+++ b/lib/geocoder/stores/mongo_base.rb
@@ -31,8 +31,11 @@ module Geocoder::Store
           field = geocoder_options[:coordinates]
           conds[field] = empty.clone
           conds[field]["$nearSphere"]  = coords.reverse
-          conds[field]["$maxDistance"] = \
-            Geocoder::Calculations.distance_to_radians(radius, options[:units])
+
+          if radius
+            conds[field]["$maxDistance"] = \
+              Geocoder::Calculations.distance_to_radians(radius, options[:units])
+          end
 
           if obj = options[:exclude]
             conds[:_id.ne] = obj.id
diff --git a/test/mongoid_test.rb b/test/mongoid_test.rb
index 1af5e9cd..8bd91bc7 100644
--- a/test/mongoid_test.rb
+++ b/test/mongoid_test.rb
@@ -36,4 +36,11 @@ class MongoidTest < Test::Unit::TestCase
     result = PlaceWithoutIndex.index_options.keys.flatten[0] == :coordinates
     assert !result
   end
+
+  def test_nil_radius_omits_max_distance
+    location = [40.750354, -73.993371]
+    p = Place.near(location, nil)
+    key = Mongoid::VERSION >= "3" ? "location" : :location
+    assert_equal nil, p.selector[key]['$maxDistance']
+  end
 end
-- 
GitLab