Module: DataMapper::MigrationRunner

Public Visibility

Public Instance Method Summary

#migrate_down!

Run all the down steps for the migrations that have already been run.

#migrate_up!

Run all migrations that need to be run.

#migration( number, name, opts = {}, &block )

Creates a new migration, and adds it to the list of migrations to be run.

#migrations

Public Instance Method Details

migrate_down!

public migrate_down!

Run all the down steps for the migrations that have already been run.

[View source]


56
57
58
59
60
61
62
# File 'dm-more/dm-migrations/lib/migration_runner.rb', line 56

def migrate_down!


  @@migrations.sort.reverse.each do |migration|
    migration.perform_down()
  end
end

migrate_up!

public migrate_up!

Run all migrations that need to be run. In most cases, this would be called by a rake task as part of a larger project, but this provides the ability to run them in a script or test.

[View source]


49
50
51
52
53
54
55
# File 'dm-more/dm-migrations/lib/migration_runner.rb', line 49

def migrate_up!


  @@migrations.sort.each do |migration|
    migration.perform_up()
  end
end

migration

public migration( number, name, opts = {}, &block )

Creates a new migration, and adds it to the list of migrations to be run. Migrations can be defined in any order, they will be sorted and run in the correct order.

The order that migrations are run in is set by the first argument. It is not neccessary that this be unique; migrations with the same version number are expected to be able to be run in any order.

The second argument is the name of the migration. This name is used internally to track if the migration has been run. It is required that this name be unique across all migrations.

Addtionally, it accepts a number of options:

  • :database If you defined several DataMapper::database instances use this to choose which one to run the migration gagainst. Defaults to :default. Migrations are tracked individually per database.
  • :verbose true/false, defaults to true. Determines if the migration should output its status messages when it runs.

Example of a simple migration:

  migration( 1, :create_people_table ) do
    up do
      execute "CREATE TABLE people (id serial, name varchar)"
    end
    down do
      execute "DROP TABLE people"
    end
  end

Its recommended that you stick with raw SQL for migrations that manipulate data. If you write a migration using a model, then later change the model, there’s a possibility the migration will no longer work. Using SQL will always work.

[View source]


39
40
41
42
43
44
# File 'dm-more/dm-migrations/lib/migration_runner.rb', line 39

def migration( number, name, opts = {}, &block )
  @@migrations ||= []
  raise "Migration name conflict: '#{name}'" if @@migrations.map(&:name).include?(name.to_s)

  @@migrations << DataMapper::Migration.new( number, name.to_s, opts, &block )
end

migrations

public migrations
[View source]


62
63
64
65
66
# File 'dm-more/dm-migrations/lib/migration_runner.rb', line 62

def migrations


  @@migrations
end