task protect_database: :environment do

error_msg = "\e[31m" +
            "WARNING: This action will cause permanent data loss. " +
            "To allow this action and permanently lose your data, " +
            "set ENV['ALLOW_DANGEROUS_TASKS'] = 'true'" +
            "\e[0m"

raise error_msg unless allow_dangerous_tasks?

end

def allow_dangerous_tasks?

Rails.env.development? || Rails.env.test? || ENV['ALLOW_DANGEROUS_TASKS'] == 'true'

end

DANGEROUS_TASKS = %w[ db:setup db:reset db:drop db:create db:schema:load ]

DANGEROUS_TASKS.each do |task|

Rake::Task[task].enhance do
  Rake::Task[:protect_database].execute
end

end