class Rake::TaskMigration::Migrator

Attributes

tasks[R]

Public Class Methods

get_all_tasks() click to toggle source
# File lib/rake/task_migration/migrator.rb, line 9
def get_all_tasks
  RakeTaskMigration.all.map { |x| x.version.to_s }.sort
end
migrate(tasks) click to toggle source
# File lib/rake/task_migration/migrator.rb, line 5
def migrate(tasks)
  new(tasks).migrate
end
new(tasks) click to toggle source
# File lib/rake/task_migration/migrator.rb, line 16
def initialize(tasks)
  @tasks = Array(tasks)
end

Public Instance Methods

migrate() click to toggle source
# File lib/rake/task_migration/migrator.rb, line 20
def migrate
  pending_tasks.each { |task| migrate_task(task.name.to_s) }
end

Private Instance Methods

announce(text) click to toggle source
# File lib/rake/task_migration/migrator.rb, line 68
def announce(text)
  length = [0, 75 - text.length].max
  write format('== %s %s', text, '=' * length)
end
invoke(task) click to toggle source
# File lib/rake/task_migration/migrator.rb, line 47
def invoke(task)
  Rake::Task[task].invoke
end
load_migrated() click to toggle source
# File lib/rake/task_migration/migrator.rb, line 60
def load_migrated
  @migrated_tasks = Set.new(self.class.get_all_tasks)
end
migrate_task(task) click to toggle source
# File lib/rake/task_migration/migrator.rb, line 26
def migrate_task(task)
  fail "#{task} has already been migrated." if RakeTaskMigration.where(version: task).first

  announce "#{task}: migrating"

  ActiveRecord::Base.transaction do
    time = Benchmark.measure do
      invoke(task)
    end

    # Create record
    migration = RakeTaskMigration.new
    migration.version = task
    migration.runtime = time.real.to_i
    migration.migrated_on = DateTime.now
    migration.save!

    announce "#{task}: migrated (#{format('%.4fs', time.real)})"
  end
end
migrated() click to toggle source
# File lib/rake/task_migration/migrator.rb, line 56
def migrated
  @migrated_tasks || load_migrated
end
pending_tasks() click to toggle source
# File lib/rake/task_migration/migrator.rb, line 51
def pending_tasks
  already_migrated = migrated
  tasks.reject { |task| already_migrated.include?(task.name) }
end
write(text) click to toggle source
# File lib/rake/task_migration/migrator.rb, line 64
def write(text)
  puts text
end