namespace :db do
task :load_extensions => :environment do RORY_APP.db.extension :schema_dumper Sequel.extension :migration end desc "Migrate database to current version (or given version if arg)" task :migrate, [:version] => :load_extensions do |task, args| latest_version = `cd #{File.join(Rory.root, 'db', 'migrate')} && ls -1 [0-9]*_*.rb | tail -1 | sed -e s/_.*$//` args.with_defaults(:version => latest_version) migration_dir = File.join(Rory.root, 'db', 'migrate') Sequel::Migrator.run(RORY_APP.db, migration_dir, :target => args[:version].to_i) end desc "Drop and recreate a database" task :purge => :load_extensions do config = RORY_APP.db_config[ENV['RORY_ENV']] drop_database_from_config(config) create_database_from_config(config) end namespace :schema do desc "Dump schema from database into db/schema.rb" task :dump => :load_extensions do migration = RORY_APP.db.dump_schema_migration schema_file = File.join(Rory.root, 'db', 'schema.rb') File.open(schema_file, 'w') { |f| f.write migration } end desc "Loads schema from db/schema.rb into current environment's DB" task :load => :load_extensions do schema_file = File.read(File.join(Rory.root, 'db', 'schema.rb')) eval(schema_file).apply(RORY_APP.db, :up) end end namespace :test do desc "Loads db/schema.rb into test database" task :load => [:load_extensions, :purge] do RORY_APP.connect_db('test') Rake::Task["db:schema:load"].invoke end desc "Purges test database" task :purge => :load_extensions do ENV['RORY_ENV'] = 'test' Rake::Task["db:purge"].invoke end desc "Recreates empty test database from development's schema" task :prepare => ['db:schema:dump', 'db:test:load'] end def drop_database_from_config(config) RORY_APP.db << "DROP DATABASE IF EXISTS \"#{config['database']}\"" end def create_database_from_config(config) RORY_APP.db << "CREATE DATABASE \"#{config['database']}\"" end
end