lib/redis_lock.rb in redis_lock-0.3.1 vs lib/redis_lock.rb in redis_lock-0.4.0
- old
+ new
@@ -1,8 +1,7 @@
require 'redis'
require "redis_lock/version"
-require "redis_lock/configuration"
class RedisLock
attr_reader :key
def self.config
@@ -11,20 +10,23 @@
def self.setup
yield config
end
- def self.semaphore(key, args = {}, &block)
- setup_instance(key, args).semaphore(args, &block)
+ def self.semaphore(*args, &block)
+ opts = extract_options!(args)
+ Semaphore.new(MultiLock.new(*args, opts), opts).call(&block)
end
- def self.if_open(key, args = {}, &block)
- setup_instance(key, args).if_open(args, &block)
+ def self.if_open(*args, &block)
+ opts = extract_options!(args)
+ IfOpen.new(MultiLock.new(*args, opts), opts).call(&block)
end
- def self.if_locked(key, args = {}, &block)
- setup_instance(key, args).if_locked(args, &block)
+ def self.if_locked(*args, &block)
+ opts = extract_options!(args)
+ IfLocked.new(MultiLock.new(*args, opts), opts).call(&block)
end
def config; self.class.config; end
def initialize(key, opts = {})
@@ -49,29 +51,21 @@
{ ex: expiration_time }
end
redis.set(key, value, args.merge(opts)) == "OK" ? true : false
end
- def semaphore(args = {}, &block)
- ttl = args[:ttl] || config.default_ttl
- set_opts = args[:set_opts] || {}
- while locked?
- sleep (args[:wait] || 3)
- end
- set(ttl, set_opts)
- _semaphore_perform(&block)
+ def semaphore(opts = {}, &block)
+ Semaphore.new(self, opts).call(&block)
end
- def if_open(args = {}, &block)
- return if locked?
- _perform(&block)
+ def if_open(opts = {}, &block)
+ IfOpen.new(self, opts).call(&block)
end
alias_method :perform, :if_open
- def if_locked(args = {}, &block)
- return if open?
- _perform(&block)
+ def if_locked(opts = {}, &block)
+ IfLocked.new(self, opts).call(&block)
end
def locked?
ttl == -2 ? false : true
end
@@ -96,30 +90,15 @@
def value
redis.get(key)
end
- private
-
- def self.setup_instance(key, args)
- inst_opts = { redis: args.delete(:redis) }.reject{ |_, v| v.nil? }
- new(key, inst_opts)
+ def self.extract_options!(args)
+ args.last.is_a?(::Hash) ? args.pop : {}
end
-
- def _semaphore_perform(&block)
- yield self
- rescue => e
- config.logger.error "[#{self.class}] key: `#{key}` error:"
- config.logger.error e
- raise e
- ensure
- unlock!
- end
-
- def _perform(&block)
- yield self
- rescue => e
- config.logger.error "[#{self.class}] key: `#{key}` error:"
- config.logger.error e
- raise e
- end
end
+
+require "redis_lock/configuration"
+require "redis_lock/semaphore"
+require "redis_lock/if_open"
+require "redis_lock/if_locked"
+require "redis_lock/multi_lock"