Class: Sequel::TimestampMigrator
- Defined in:
- lib/sequel/extensions/migration.rb
Overview
The migrator used if any migration file version is greater than 20000101. Stores filenames of migration files, and can figure out which migrations have not been applied and apply them, even if earlier migrations are added after later migrations. If you plan to do that, the responsibility is on you to make sure the migrations don’t conflict. Part of the migration
extension.
Constant Summary collapse
Constants inherited from Migrator
Migrator::MIGRATION_FILE_PATTERN, Migrator::MUTEX
Instance Attribute Summary collapse
-
#applied_migrations ⇒ Object
readonly
Array of strings of applied migration filenames.
-
#migration_tuples ⇒ Object
readonly
Get tuples of migrations, filenames, and actions for each migration.
Attributes inherited from Migrator
#column, #db, #directory, #ds, #files, #table, #target
Instance Method Summary collapse
-
#initialize(db, directory, opts = OPTS) ⇒ TimestampMigrator
constructor
Set up all state for the migrator instance.
-
#is_current? ⇒ Boolean
The timestamp migrator is current if there are no migrations to apply in either direction.
-
#run ⇒ Object
Apply all migration tuples on the database.
Methods inherited from Migrator
apply, check_current, is_current?, migrator_class, run
Constructor Details
#initialize(db, directory, opts = OPTS) ⇒ TimestampMigrator
Set up all state for the migrator instance
664 665 666 667 668 669 |
# File 'lib/sequel/extensions/migration.rb', line 664 def initialize(db, directory, opts=OPTS) super @target = opts[:target] @applied_migrations = get_applied_migrations @migration_tuples = get_migration_tuples end |
Instance Attribute Details
#applied_migrations ⇒ Object (readonly)
Array of strings of applied migration filenames
658 659 660 |
# File 'lib/sequel/extensions/migration.rb', line 658 def applied_migrations @applied_migrations end |
#migration_tuples ⇒ Object (readonly)
Get tuples of migrations, filenames, and actions for each migration
661 662 663 |
# File 'lib/sequel/extensions/migration.rb', line 661 def migration_tuples @migration_tuples end |
Instance Method Details
#is_current? ⇒ Boolean
The timestamp migrator is current if there are no migrations to apply in either direction.
673 674 675 |
# File 'lib/sequel/extensions/migration.rb', line 673 def is_current? migration_tuples.empty? end |
#run ⇒ Object
Apply all migration tuples on the database
678 679 680 681 682 683 684 685 686 687 688 689 690 |
# File 'lib/sequel/extensions/migration.rb', line 678 def run migration_tuples.each do |m, f, direction| t = Time.now db.log_info("Begin applying migration #{f}, direction: #{direction}") checked_transaction(m) do m.apply(db, direction) fi = f.downcase direction == :up ? ds.insert(column=>fi) : ds.where(column=>fi).delete end db.log_info("Finished applying migration #{f}, direction: #{direction}, took #{sprintf('%0.6f', Time.now - t)} seconds") end nil end |