lib/redis_lock.rb in redis_lock-0.1.0 vs lib/redis_lock.rb in redis_lock-0.2.0
- old
+ new
@@ -1,14 +1,14 @@
require 'redis'
require "redis_lock/version"
-require "redis_lock/config"
+require "redis_lock/configuration"
class RedisLock
attr_reader :key
def self.config
- @config ||= Config.new
+ @config ||= Configuration.new
end
def self.setup
yield config
end
@@ -19,48 +19,69 @@
@key = key
@redis = opts[:redis]
end
def redis
- @redis ||= Redis.new(config.redis)
+ @redis ||= config.redis
end
- def set(expiration_time = 600)
- redis.set(
- key,
- Time.now.strftime('%FT%T'),
- ex: expiration_time, # expires in X seconds
- nx: true # only if it does not exists
- )
+ # Redis SET options:
+ # - EX seconds -- Set the specified expire time, in seconds.
+ # - PX milliseconds -- Set the specified expire time, in milliseconds.
+ # - NX -- Only set the key if it does not already exist.
+ # - XX -- Only set the key if it already exist.
+ def set(expiration_time = 60, opts = {})
+ value = opts.delete(:value) || Time.now.strftime('%FT%T')
+ args = if opts[:px]
+ { px: expiration_time }
+ else
+ { ex: expiration_time }
+ end
+ redis.set(key, value, args.merge(opts)) == "OK" ? true : false
end
- def perform(args = {}, &block)
+ def if_open(args = {}, &block)
return if locked?
- expiration = args[:expiration] || args[:ex] || 600
- set(expiration)
- # If error occurs, we remove the lock
- out = _perform(&block)
- remove
- out
+ _perform(&block)
end
+ alias_method :perform, :if_open
+ def if_locked(args = {}, &block)
+ return if open?
+ _perform(&block)
+ end
-
def locked?
- redis.ttl(key) == -2 ? false : true
+ ttl == -2 ? false : true
end
alias_method :exists?, :locked?
- def remove
+ def ttl
+ redis.ttl(key)
+ end
+
+ def open?
+ !locked?
+ end
+ alias_method :unlocked?, :open?
+
+ def delete
redis.del(key) == 1 ? true : false
end
+ alias_method :unlock!, :delete
+ alias_method :open!, :delete
+ alias_method :remove, :delete
+ def value
+ redis.get(key)
+ end
+
private
def _perform(&block)
yield self
rescue => e
- config.logger.error "[RedisLock] key: `#{key}` error:"
+ config.logger.error "[#{self.class}] key: `#{key}` error:"
config.logger.error e
- false
+ raise e
end
end