Class: Cirrus::Lock
- Inherits:
-
Object
- Object
- Cirrus::Lock
- Defined in:
- lib/cirrus/lock.rb
Constant Summary collapse
- LOCKED =
"cirrus:locked"
- LOCKS =
"cirrus:locks"
Instance Attribute Summary collapse
-
#id ⇒ Object
Returns the value of attribute id.
-
#redis ⇒ Object
Returns the value of attribute redis.
-
#values ⇒ Object
Returns the value of attribute values.
Instance Method Summary collapse
-
#initialize(redis, *values) ⇒ Lock
constructor
A new instance of Lock.
- #locked? ⇒ Boolean
- #release ⇒ Object
- #set ⇒ Object
Constructor Details
#initialize(redis, *values) ⇒ Lock
Returns a new instance of Lock.
7 8 9 10 11 12 |
# File 'lib/cirrus/lock.rb', line 7 def initialize(redis, *values) @redis = redis @id = SecureRandom.hex(8) @values = values end |
Instance Attribute Details
#id ⇒ Object
Returns the value of attribute id.
2 3 4 |
# File 'lib/cirrus/lock.rb', line 2 def id @id end |
#redis ⇒ Object
Returns the value of attribute redis.
2 3 4 |
# File 'lib/cirrus/lock.rb', line 2 def redis @redis end |
#values ⇒ Object
Returns the value of attribute values.
2 3 4 |
# File 'lib/cirrus/lock.rb', line 2 def values @values end |
Instance Method Details
#locked? ⇒ Boolean
32 33 34 35 36 37 38 |
# File 'lib/cirrus/lock.rb', line 32 def locked? redis.multi do values.each do |value| redis.sismember(LOCKED, value) end end.any? { |result| result == true } end |
#release ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'lib/cirrus/lock.rb', line 22 def release releasable_ids = redis.smembers(pointer) redis.multi do redis.srem(pointer, releasable_ids) redis.srem(LOCKED, values) redis.srem(LOCKS, id) end.all? { |result| result.is_a?(Integer) ? result > 0 : result == true } end |