Class: Sequel::IntegerMigrator
- 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 collapse
Constants inherited from Migrator
Migrator::MIGRATION_FILE_PATTERN, Migrator::MUTEX
Instance Attribute Summary collapse
-
#current ⇒ Object
readonly
The current version for this migrator.
-
#direction ⇒ Object
readonly
The direction of the migrator, either :up or :down.
-
#migrations ⇒ Object
readonly
The migrations used by this migrator.
Attributes inherited from Migrator
#column, #db, #directory, #ds, #files, #table, #target
Instance Method Summary collapse
-
#initialize(db, directory, opts = OPTS) ⇒ IntegerMigrator
constructor
Set up all state for the migrator instance.
-
#is_current? ⇒ Boolean
The integer migrator is current if the current version is the same as the target version.
-
#run ⇒ Object
Apply all migrations on the database.
Methods inherited from Migrator
apply, check_current, is_current?, migrator_class, run
Constructor Details
#initialize(db, directory, opts = OPTS) ⇒ IntegerMigrator
Set up all state for the migrator instance
516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 |
# File 'lib/sequel/extensions/migration.rb', line 516 def initialize(db, directory, opts=OPTS) super @current = opts[:current] || current_migration_version raise(Error, "No current version available") unless current latest_version = latest_migration_version @target = if opts[:target] opts[:target] elsif opts[:relative] @current + opts[:relative] else latest_version end raise(Error, "No target version available, probably because no migration files found or filenames don't follow the migration filename convention") unless target if @target > latest_version @target = latest_version elsif @target < 0 @target = 0 end @direction = current < target ? :up : :down @migrations = get_migrations end |
Instance Attribute Details
#current ⇒ Object (readonly)
The current version for this migrator
507 508 509 |
# File 'lib/sequel/extensions/migration.rb', line 507 def current @current end |
#direction ⇒ Object (readonly)
The direction of the migrator, either :up or :down
510 511 512 |
# File 'lib/sequel/extensions/migration.rb', line 510 def direction @direction end |
#migrations ⇒ Object (readonly)
The migrations used by this migrator
513 514 515 |
# File 'lib/sequel/extensions/migration.rb', line 513 def migrations @migrations end |
Instance Method Details
#is_current? ⇒ Boolean
The integer migrator is current if the current version is the same as the target version.
544 545 546 |
# File 'lib/sequel/extensions/migration.rb', line 544 def is_current? current_migration_version == target end |
#run ⇒ Object
Apply all migrations on the database
549 550 551 552 553 554 555 556 557 558 559 560 561 |
# File 'lib/sequel/extensions/migration.rb', line 549 def run migrations.zip(version_numbers).each do |m, v| timer = Sequel.start_timer db.log_info("Begin applying migration version #{v}, direction: #{direction}") checked_transaction(m) do m.apply(db, direction) set_migration_version(up? ? v : v-1) end db.log_info("Finished applying migration version #{v}, direction: #{direction}, took #{sprintf('%0.6f', Sequel.elapsed_seconds_since(timer))} seconds") end target end |