eprothro/cassie

View on GitHub
lib/cassie/tasks/schema/migrate.rake

Summary

Maintainability
Test Coverage
namespace :cassie do
  namespace :schema do
    desc "Migrates the schema by running the `up` methods for any migrations starting after the current schema version"
    task :migrate do
      include Cassie::Tasks::IO

      begin
        version = argv[0]

        migrator = Cassie::Schema::Migrator.new(version)
        puts "-- Migrating '#{Cassie.env}' schema to version #{migrator.target_version}"

        if migrator.commands.count == 0
          if migrator.target_version == migrator.current_version
            puts "   > Already at #{migrator.target_version}, nothing to do..."
            abort
          else
            raise "No migration files found to migrate to #{migrator.target_version}, staying at #{migrator.current_version}"
          end
        else
          migrator.before_each = Proc.new do |v, direction|
            puts "   - Migragting version #{v} #{direction.upcase}"
          end
          migrator.after_each = Proc.new do |_migration, duration|
            puts "   - done (#{duration} ms)"
          end
          migrator.migrate
          puts "-- done"
        end
      rescue => e
        output_error(e)
        abort
      end
    end
  end
  desc "alias for schema:migrate"
  task :migrate => "schema:migrate"
end

Rake::Task["cassie:schema:migrate"].enhance do
  Rake::Task["cassie:schema:dump"].invoke
end