tasks/db.rake in pact_broker-0.0.10 vs tasks/db.rake in pact_broker-1.0.0.alpha1
- old
+ new
@@ -1,24 +1,69 @@
require 'pact_broker/tasks'
PactBroker::DB::MigrationTask.new do | task |
- require 'pact_broker/db'
+ require 'db'
task.database_connection = DB::PACT_BROKER_DB
end
+namespace :bundler do
+ task :setup do
+ require 'rubygems'
+ require 'bundler/setup'
+ end
+end
namespace :db do
- desc 'drop and recreate DB'
- task :recreate => [:drop, 'pact_broker:db:migrate']
+ task :env => ['bundler:setup'] do
+ # Require RACK_ENV to be set for tasks that will be called in production
+ raise "Please specify RACK_ENV" unless ENV['RACK_ENV']
+ RACK_ENV = ENV['RACK_ENV']
+ require File.dirname(__FILE__) + '/database.rb'
+ end
- desc 'drop DB'
- task :drop do
- require 'yaml'
- puts "Removing database #{db_file}"
- FileUtils.rm_f db_file
- FileUtils.mkdir_p File.dirname(db_file)
+ desc 'Print current schema version'
+ task :version => 'db:env' do
+ puts "Schema Version: #{PactBroker::Database.version}"
end
- def db_file
- @@db_file ||= YAML.load(ERB.new(File.read(File.join('./config', 'database.yml'))).result)[RACK_ENV]["database"]
+ desc 'Migrate the Database'
+ task :migrate => 'db:env' do
+ PactBroker::Database.migrate
end
-end
\ No newline at end of file
+
+ desc 'Rollback database to specified version'
+ task :rollback, [:target] => 'db:env' do |t, args|
+ args.with_defaults(target: 0)
+ PactBroker::Database.migrate(args[:target].to_i)
+ end
+
+ desc 'Prepare the test database for running specs - RACK_ENV will be hardcoded to "test"'
+ task 'prepare:test' => ['db:set_test_env','db:prepare_dir','db:migrate']
+
+ desc 'Reset the database (rollback then migrate) - uses RACK_ENV, defaulting to "development"'
+ task :reset => ['db:rollback', 'db:migrate']
+
+ desc 'Delete the dev/test database - uses RACK_ENV, defaulting to "development"'
+ task 'delete' => 'db:env' do
+ PactBroker::Database.delete_database_file
+ end
+
+ # Private: Ensure the dev/test database directory exists
+ task 'prepare_dir' => 'db:env' do
+ PactBroker::Database.ensure_database_dir_exists
+ PactBroker::Database.delete_database_file
+ end
+
+ # Private
+ task :set_test_env do
+ ENV['RACK_ENV'] = 'test'
+ end
+
+ # Private
+ task 'env:nonprod' => ['bundler:setup'] do
+ # Allow default RACK_ENV to be set when not in production
+ RACK_ENV = ENV['RACK_ENV'] ||= 'development'
+ end
+end
+
+task 'db:env' => 'db:env:nonprod'
+task 'db:migrate' => 'db:prepare_dir'