require 'dm-rails/setup' require 'dm-rails/storage' namespace :db do desc 'Create the database, load the schema, and initialize with the seed data' task :setup => [ 'db:create', 'db:automigrate', 'db:seed' ] namespace :create do desc 'Create all the local databases defined in config/database.yml' task :all => :environment do Rails::DataMapper.storage.create_all end end desc "Create all local databases defined for the current Rails.env" task :create => :environment do Rails::DataMapper.storage.create_environment(Rails::DataMapper.configuration.repositories[Rails.env]) end namespace :drop do desc 'Drop all the local databases defined in config/database.yml' task :all => :environment do Rails::DataMapper.storage.drop_all end end desc "Drop all local databases defined for the current Rails.env" task :drop => :environment do Rails::DataMapper.storage.drop_environment(Rails::DataMapper.configuration.repositories[Rails.env]) end desc 'Perform destructive automigration of all repositories in the current Rails.env' task :automigrate => :environment do require 'dm-migrations' Rails::DataMapper.configuration.repositories[Rails.env].each do |repository, config| ::DataMapper.auto_migrate!(repository.to_sym) puts "[datamapper] Finished auto_migrate! for :#{repository} repository '#{config['database']}'" end end desc 'Perform non destructive automigration of all repositories in the current Rails.env' task :autoupgrade => :environment do require 'dm-migrations' Rails::DataMapper.configuration.repositories[Rails.env].each do |repository, config| ::DataMapper.auto_upgrade!(repository.to_sym) puts "[datamapper] Finished auto_upgrade! for :#{repository} repository '#{config['database']}'" end end desc 'Load the seed data from db/seeds.rb' task :seed => :environment do seed_file = File.join(Rails.root, 'db', 'seeds.rb') load(seed_file) if File.exist?(seed_file) end namespace :migrate do task :load => :environment do require 'dm-migrations/migration_runner' FileList['db/migrate/*.rb'].each do |migration| load migration end end desc 'Migrate up using migrations' task :up, [:version] => [:load] do |t, args| ::DataMapper::MigrationRunner.migrate_up!(args[:version]) end desc 'Migrate down using migrations' task :down, [:version] => [:load] do |t, args| ::DataMapper::MigrationRunner.migrate_down!(args[:version]) end end desc 'Migrate the database to the latest version' task :migrate do migrate_task = if Dir['db/migrate/*.rb'].empty? 'db:autoupgrade' else 'db:migrate:up' end Rake::Task[migrate_task].invoke end namespace :sessions do desc "Creates the sessions table for DataMapperStore" task :create => :environment do require 'dm-rails/session_store' Rails::DataMapper::SessionStore::Session.auto_migrate! database = Rails::DataMapper.configuration.repositories[Rails.env]['database'] puts "Created '#{database}.sessions'" end desc "Clear the sessions table for DataMapperStore" task :clear => :environment do require 'dm-rails/session_store' Rails::DataMapper::SessionStore::Session.destroy! database = Rails::DataMapper.configuration.repositories[Rails.env]['database'] puts "Deleted entries from '#{database}.sessions'" end end end