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
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
See Sequel::Plugins::InlineSchema::ClassMethods for documentation for the methods the plugin adds to your model class/es.
migration – define a migration
migrate – create any missing tables for the receiving model
and any subclasses, then run any unapplied migrations.
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: