From 0f6ebfeac30b6538649e1e18f09faf061fc34451 Mon Sep 17 00:00:00 2001
From: brendandillon <br.lyle.dillon@gmail.com>
Date: Wed, 18 Jan 2017 20:20:44 -0700
Subject: [PATCH] Use manual batching in rake task (#1140)

Changes batching in the rake task to work using a loop instead of the find_each method which does not work with Mongoid. This should fix #1126.
---
 lib/tasks/geocoder.rake | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/lib/tasks/geocoder.rake b/lib/tasks/geocoder.rake
index 121e9910..b4d8c504 100644
--- a/lib/tasks/geocoder.rake
+++ b/lib/tasks/geocoder.rake
@@ -1,3 +1,5 @@
+require "geocoder/models/mongoid" 
+
 namespace :geocode do
   desc "Geocode all objects without coordinates."
   task :all => :environment do
@@ -8,22 +10,28 @@ namespace :geocode do
     raise "Please specify a CLASS (model)" unless class_name
     klass = class_from_string(class_name)
     batch = (batch.to_i unless batch.nil?) || 1000
+    orm = (klass < Geocoder::Model::Mongoid) ? 'mongoid' : 'active_record'
     reverse = false unless reverse.to_s.downcase == 'true'
 
-    if reverse
-      klass.not_reverse_geocoded.find_each(batch_size: batch) do |obj|
-        obj.reverse_geocode; obj.save
-        sleep(sleep_timer.to_f) unless sleep_timer.nil?
+    geocode_record = lambda { |obj|
+      reverse ? obj.reverse_geocode : obj.geocode
+      obj.save
+      sleep(sleep_timer.to_f) unless sleep_timer.nil?
+    }
+
+    scope = reverse ? klass.not_reverse_geocoded : klass.not_geocoded
+    if orm == 'mongoid'
+      scope.each do |obj|
+        geocode_record.call(obj)
       end
-    else
-      klass.not_geocoded.find_each(batch_size: batch) do |obj|
-        obj.geocode; obj.save
-        sleep(sleep_timer.to_f) unless sleep_timer.nil?
+    elsif orm == 'active_record'
+      scope.find_each(batch_size: batch) do |obj|
+        geocode_record.call(obj)
       end
     end
+
   end
 end
-
 ##
 # Get a class object from the string given in the shell environment.
 # Similar to ActiveSupport's +constantize+ method.
-- 
GitLab