From 99a449f1696ba00756681f2efb525ce66e129f7f Mon Sep 17 00:00:00 2001 From: Alessio Fanelli <fana@alessiofanelli.com> Date: Wed, 25 Nov 2015 20:31:05 +0100 Subject: [PATCH] Add batch reverse geocoding task --- lib/geocoder/stores/active_record.rb | 5 +++++ lib/tasks/geocoder.rake | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/geocoder/stores/active_record.rb b/lib/geocoder/stores/active_record.rb index 15e45ba1..771d5f89 100644 --- a/lib/geocoder/stores/active_record.rb +++ b/lib/geocoder/stores/active_record.rb @@ -28,6 +28,11 @@ module Geocoder::Store "OR #{table_name}.#{geocoder_options[:longitude]} IS NULL") } + # scope: not-reverse geocoded objects + scope :not_reverse_geocoded, lambda { + where("#{table_name}.#{geocoder_options[:fetched_address]} IS NULL") + } + ## # Find all objects within a radius of the given location. # Location may be either a string to geocode or an array of diff --git a/lib/tasks/geocoder.rake b/lib/tasks/geocoder.rake index 2b6039af..febbf3fe 100644 --- a/lib/tasks/geocoder.rake +++ b/lib/tasks/geocoder.rake @@ -4,13 +4,22 @@ namespace :geocode 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? + reverse = false unless reverse.to_s.downcase == 'true' - klass.not_geocoded.find_each(batch_size: batch) do |obj| - obj.geocode; obj.save - sleep(sleep_timer.to_f) unless sleep_timer.nil? + 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? + 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? + end end end end -- GitLab