diff --git a/lib/geocoder/stores/active_record.rb b/lib/geocoder/stores/active_record.rb index 15e45ba150239fcff46ac1b6a0f646a3f7dcc31f..771d5f89aa963a8ca38bda40289ed1f2232d7a14 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 2b6039af365118f3cf668007b820c229f8b660a8..febbf3fea224edf8e888c5cd6c1c937ec25db708 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