class RailsAsyncMigrations::Migration::Lock

Attributes

method_name[R]
resource_class[R]

Public Class Methods

new(resource_class, method_name) click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 9
def initialize(resource_class, method_name)
  @resource_class = resource_class
  @method_name = method_name
end

Public Instance Methods

perform() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 14
def perform
  return false unless locked_method?
  return false if unlocked?

  preserve_method_logics

  suspend_lock do
    overwrite_method
  end
end
suspend_lock() { || ... } click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 25
def suspend_lock(&block)
  unlock
  yield if block_given?
  lock
end

Private Instance Methods

captured_method() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 45
def captured_method
  resource_class.new.method(method_name).clone
end
clone_method_name() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 37
def clone_method_name
  "async_#{method_name}"
end
lock() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 67
def lock
  self.locked = true
end
lockable?() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 59
def lockable?
  unlocked? && locked_method?
end
locked() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 79
def locked
  resource_class.instance_variable_get(:@locked)
end
locked=(value) click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 75
def locked=(value)
  resource_class.instance_variable_set(:@locked, value)
end
locked_method?() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 63
def locked_method?
  RailsAsyncMigrations.config.locked_methods.include? method_name
end
overwrite_closure() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 53
def overwrite_closure
  proc do
    Overwrite.new(self, __method__).perform
  end
end
overwrite_method() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 49
def overwrite_method
  resource_class.define_method(method_name, &overwrite_closure)
end
preserve_method_logics() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 41
def preserve_method_logics
  resource_class.define_method(clone_method_name, &captured_method)
end
unlock() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 71
def unlock
  self.locked = false
end
unlocked?() click to toggle source
# File lib/rails_async_migrations/migration/lock.rb, line 33
def unlocked?
  locked == false
end