module ActsAsLockableBy::Lockable::InstanceMethods

Public Instance Methods

lock(locked_by_id) click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 39
def lock(locked_by_id)
  # Set if not exist
  redis.set(lock_key, locked_by_id, ex: ttl, nx: true)
end
lock!(locked_by_id) click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 44
def lock!(locked_by_id)
  lock(locked_by_id) || raise(LockError)
end
locked?() click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 52
def locked?
  locked_by_id.present?
end
locked_by_id() click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 48
def locked_by_id
  redis.get(lock_key)
end
renew_lock(locked_by_id) click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 68
def renew_lock(locked_by_id)
  # Set if only exist
  redis.eval(
    renew_lock_atomic_script,
    keys: [lock_key],
    argv: [locked_by_id, 'EX', ttl, 'XX']
  ) == 'OK'
end
unlock(locked_by_id) click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 56
def unlock(locked_by_id)
  redis.eval(
    unlock_atomic_script,
    keys: [lock_key],
    argv: [locked_by_id]
  ) == 1
end
unlock!(locked_by_id) click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 64
def unlock!(locked_by_id)
  unlock(locked_by_id) || raise(UnLockError)
end

Private Instance Methods

lock_id_value() click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 87
def lock_id_value
  send(lock_id)
end
lock_key() click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 83
def lock_key
  "ActsAsLockableBy:#{self.class.name}:#{lock_id_value}"
end
redis() click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 79
def redis
  ActsAsLockableBy.configuration.redis
end
renew_lock_atomic_script() click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 102
      def renew_lock_atomic_script
        <<LUA_SCRIPT
        redis.log(redis.LOG_WARNING, ARGV[2])
        if redis.call("get",KEYS[1]) == ARGV[1]
        then
          return redis.call("set", KEYS[1], ARGV[1], ARGV[2], ARGV[3], ARGV[4])
        else
          return 0
        end
LUA_SCRIPT
      end
unlock_atomic_script() click to toggle source
# File lib/acts_as_lockable_by/lockable.rb, line 91
      def unlock_atomic_script
        <<LUA_SCRIPT
        if redis.call("get",KEYS[1]) == ARGV[1]
        then
          return redis.call("del",KEYS[1])
        else
          return 0
        end
LUA_SCRIPT
      end