module Sequel::Plugins::InlineMigrations

A plugin for Sequel::Model that allows migrations for the model to be defined directly in the class declaration. It uses the ‘inline_schema` plugin internally, and will add it for you if necessary.

## Example

Define a base (abstract) model class:

“‘ # lib/acme/model.rb module Acme

Model = Class.new( Sequel::Model )
Model.def_Model( Acme )

class Model
    plugin :inline_schema
    plugin :inline_migrations
end

end “‘

Defining a model class with two migrations:

“‘ # lib/acme/vendor.rb require ’acme/model’

class Acme::Vendor < Acme::Model( :vendor )

# The schema should always be kept up-to-date. I.e., it should be
# modified along with each migration to reflect the state of the table
# after the migration is applied.
set_schema do
    primary_key :id
    String :name
    String :contact
    timestamp :created_at, :null => false
    timestamp :updated_at

    add_index :name
end

# Similar to Sequel's TimeStampMigrator, inline migrations have a symbolic
# name, which is how they're tracked in the migrations table, and how
# they're ordered when they're applied. The second argument is a human-readable
# description that can be used for automated change control descriptions or
# other tooling.
migration( '20110228_1115_add_timestamps', "Add timestamp fields" ) do
    change do
        alter_table do
            add_column :created_at, :timestamp, :null => false
            add_column :updated_at, :timestamp
        end
        update( :created_at => :now[] )
    end
end

migration( '20110303_1751_index_name', "Add an index to the name field" ) do
    change do
        alter_table do
            add_index :name
        end
    end
end

end “‘

Apply pending migrations.

“‘ # bin/migrate

require ‘acme/model’ require ‘acme/vendor’ # …

puts “Creating new tables, applying any pending migrations…” Acme::Model.migrate “‘

## Notable Model Methods

See Sequel::Plugins::InlineSchema::ClassMethods for documentation for the methods the plugin adds to your model class/es.

Inline migrations also have model hook methods:

There’s also a method that will return a configured Sequel::Plugins::InlineMigrations::Migrator in case you want to inspect what will happen when you call migrate: