62 lines
2.0 KiB
Ruby
62 lines
2.0 KiB
Ruby
namespace :cartodb do
|
|
namespace :tables do
|
|
namespace :maintenance do
|
|
def ask_for_confirmation(key = 'continue')
|
|
puts "\nType '#{key}' to proceed or anything else to abort:"
|
|
|
|
raise 'user aborted' unless STDIN.gets.strip == key
|
|
end
|
|
|
|
desc "Sync user's UserTable(s)' table_id(s) with their corresponding physical table's oid"
|
|
task :sync_user_table_oids, [:username] => :environment do |_, args|
|
|
raise 'A username must be provided' unless args[:username].present?
|
|
|
|
user = ::User.where(username: args[:username]).first
|
|
|
|
raise "No user with username '#{args[:username]}' found" if user.nil?
|
|
|
|
user_tables = user.tables.all
|
|
|
|
unsynced_user_tables = user_tables.reject do |user_table|
|
|
user_table.table_id != user_table.service.fetch_table_id
|
|
end
|
|
|
|
user_tables_count = unsynced_user_tables.count
|
|
puts "#{user_tables_count} #{'table'.pluralize(user_tables_count)} will be processed, see a list below:"
|
|
|
|
unsynced_user_tables.each do |user_table|
|
|
puts "\t'#{user_table.name}'"
|
|
end
|
|
|
|
ask_for_confirmation('c')
|
|
|
|
synced_tables = 0
|
|
errored_tables = 0
|
|
|
|
unsynced_user_tables.each do |user_table|
|
|
printf "\tSynching '#{user_table.name}'... \r"
|
|
|
|
user_table.sync_table_id
|
|
|
|
if user_table.save
|
|
printf "\tSynching '#{user_table.name}'... ok\n"
|
|
synced_tables += 1
|
|
else
|
|
printf "\tSynching '#{user_table.name}'... ok\n"
|
|
errored_tables += 1
|
|
|
|
puts "ATENTION: errored save for table '#{user_table.name}':"
|
|
puts user_table.errors.full_messages
|
|
|
|
ask_for_confirmation
|
|
end
|
|
end
|
|
|
|
puts "\n#{user_tables_count} #{'table'.pluralize(user_tables_count)} processed"
|
|
puts "\t#{synced_tables} #{'table'.pluralize(synced_tables)} synced"
|
|
puts "\t#{errored_tables} #{'table'.pluralize(errored_tables)} errored"
|
|
end
|
|
end
|
|
end
|
|
end
|