lib/tasks/geocoder.rake in geocoder-1.4.1 vs lib/tasks/geocoder.rake in geocoder-1.4.2
- old
+ new
@@ -1,30 +1,38 @@
+require "geocoder/models/mongoid"
+
namespace :geocode do
desc "Geocode all objects without coordinates."
task :all => :environment do
class_name = ENV['CLASS'] || ENV['class']
sleep_timer = ENV['SLEEP'] || ENV['sleep']
batch = ENV['BATCH'] || ENV['batch']
reverse = ENV['REVERSE'] || ENV['reverse']
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.
#
def class_from_string(class_name)