93 lines
2.3 KiB
Ruby
93 lines
2.3 KiB
Ruby
namespace :app do
|
|
desc "flaredown | setup application"
|
|
task setup: :environment do
|
|
setup
|
|
end
|
|
|
|
desc "flaredown | invite beta user to join in"
|
|
task invite: :environment do
|
|
invite
|
|
end
|
|
|
|
desc "flaredown | delete a user's account"
|
|
task delete_account: :environment do
|
|
delete_account
|
|
end
|
|
|
|
class OperationAbortedException < StandardError; end
|
|
|
|
def invite
|
|
email = prompt "Please insert email address: "
|
|
User.invite!(email: email)
|
|
end
|
|
|
|
def setup
|
|
puts "This will create the necessary stuff. You will lose any previous data stored"
|
|
# NOTE: asking for confirmation is actually a good idea
|
|
# as DBs will be purged but it messes with CI atm
|
|
p "Rails env is:"
|
|
p Rails.env
|
|
ask_to_continue unless Rails.env.test?
|
|
|
|
build_database
|
|
rescue OperationAbortedException
|
|
puts "\nQuitting...".red
|
|
exit 1
|
|
end
|
|
|
|
def build_database
|
|
header "build database"
|
|
# Rake::Task["db:mongoid:purge"].invoke
|
|
|
|
if Rails.env.development?
|
|
Rake::Task["db:drop"].invoke
|
|
Rake::Task["db:create"].invoke
|
|
Rake::Task["db:migrate"].invoke
|
|
ActiveRecord::Base.connection.schema_cache.clear!
|
|
ActiveRecord::Base.descendants.each(&:reset_column_information)
|
|
end
|
|
Rake::Task["db:fixtures:load"].invoke
|
|
Rake::Task["db:seed"].invoke
|
|
rescue ::PG::ObjectInUse => e
|
|
puts "\n#{e.message}.".red
|
|
end
|
|
|
|
def header(message)
|
|
puts ">>> #{message}".bold.blue
|
|
end
|
|
|
|
def ask_to_continue
|
|
answer = prompt("Do you want to continue (yes/no)? ", %w[yes no])
|
|
fail OperationAbortedException unless answer.eql?("yes")
|
|
end
|
|
|
|
def prompt(message, choices = nil)
|
|
begin
|
|
print(message)
|
|
input = STDIN.gets
|
|
raise OperationAbortedException if input.nil?
|
|
|
|
answer = input.chomp
|
|
p "got answer: #{answer}"
|
|
end while choices.present? && !choices.include?(answer)
|
|
answer
|
|
rescue Interrupt
|
|
raise OperationAbortedException
|
|
end
|
|
|
|
def delete_account
|
|
puts "DANGER ZONE: This action can't be undone!".yellow
|
|
email = prompt "Please insert user's email address: "
|
|
user = User.find_by(email: email)
|
|
if user.nil?
|
|
puts "No user found for the entered email address".red
|
|
else
|
|
user.destroy!
|
|
puts "User account successfully deleted".blue
|
|
end
|
|
rescue OperationAbortedException
|
|
puts "\nQuitting..."
|
|
exit 1
|
|
end
|
|
end
|