Class: Sequel::IntegerMigrator

Inherits:
Migrator show all
Defined in:
lib/sequel/extensions/migration.rb

Overview

The default migrator, recommended in most cases. Uses a simple incrementing version number starting with 1, where missing or duplicate migration file versions are not allowed. Part of the migration extension.

Constant Summary

DEFAULT_SCHEMA_COLUMN =
:version
DEFAULT_SCHEMA_TABLE =
:schema_info
Error =
Migrator::Error

Constants inherited from Migrator

Migrator::MIGRATION_FILE_PATTERN, Migrator::MIGRATION_SPLITTER, Migrator::MINIMUM_TIMESTAMP

Instance Attribute Summary (collapse)

Attributes inherited from Migrator

#column, #db, #directory, #ds, #files, #table, #target

Instance Method Summary (collapse)

Methods inherited from Migrator

apply, check_current, is_current?, migrator_class, run

Constructor Details

- (IntegerMigrator) initialize(db, directory, opts = OPTS)

Set up all state for the migrator instance

Raises:



504
505
506
507
508
509
510
511
512
513
514
# File 'lib/sequel/extensions/migration.rb', line 504

def initialize(db, directory, opts=OPTS)
  super
  @target = opts[:target] || latest_migration_version
  @current = opts[:current] || current_migration_version

  raise(Error, "No current version available") unless current
  raise(Error, "No target version available, probably because no migration files found or filenames don't follow the migration filename convention") unless target

  @direction = current < target ? :up : :down
  @migrations = get_migrations
end

Instance Attribute Details

- (Object) current (readonly)

The current version for this migrator



495
496
497
# File 'lib/sequel/extensions/migration.rb', line 495

def current
  @current
end

- (Object) direction (readonly)

The direction of the migrator, either :up or :down



498
499
500
# File 'lib/sequel/extensions/migration.rb', line 498

def direction
  @direction
end

- (Object) migrations (readonly)

The migrations used by this migrator



501
502
503
# File 'lib/sequel/extensions/migration.rb', line 501

def migrations
  @migrations
end

Instance Method Details

- (Boolean) is_current?

The integer migrator is current if the current version is the same as the target version.

Returns:

  • (Boolean)


517
518
519
# File 'lib/sequel/extensions/migration.rb', line 517

def is_current?
  current_migration_version == target
end

- (Object) run

Apply all migrations on the database



522
523
524
525
526
527
528
529
530
531
532
533
534
535
# File 'lib/sequel/extensions/migration.rb', line 522

def run
  migrations.zip(version_numbers).each do |m, v|
    t = Time.now
    lv = up? ? v : v + 1
    db.log_info("Begin applying migration version #{lv}, direction: #{direction}")
    checked_transaction(m) do
      m.apply(db, direction)
      set_migration_version(v)
    end
    db.log_info("Finished applying migration version #{lv}, direction: #{direction}, took #{sprintf('%0.6f', Time.now - t)} seconds")
  end
  
  target
end