redstruct 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/redstruct/lock.rb +13 -0
- data/lib/redstruct/version.rb +1 -1
- data/test/redstruct/lock_test.rb +10 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 134acc649952b4163693f10342277431de4934fa
|
4
|
+
data.tar.gz: 19ab242fd3c80366c0904dd4f9ef774bbebe77e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7750e77d99eed37f6e8f40d2b7125309b706b53b1a21034bf79211c5c50e8cb130bd392cf4d5694c8faadd51e72c0346eb89dc9276a4d30724d229987e6ea42
|
7
|
+
data.tar.gz: 724d70a31f5b50a59bbf7b899f3bcffc0d9204ad76b3ee2141a99e2bb6ab1dafcee2ca82d0f974f7dd702716bb41e26e3b2ed5d382e5d13e59ed7a53d5d63857
|
data/lib/redstruct/lock.rb
CHANGED
@@ -51,6 +51,12 @@ module Redstruct
|
|
51
51
|
@tokens = factory.list('tokens')
|
52
52
|
end
|
53
53
|
|
54
|
+
# Deletes all traces of this lock
|
55
|
+
# @return [Boolean] true if deleted, false otherwise
|
56
|
+
def delete
|
57
|
+
return coerce_bool(delete_script(keys: [@lease.key, @tokens.key]))
|
58
|
+
end
|
59
|
+
|
54
60
|
# Executes the given block if the lock can be acquired
|
55
61
|
# @yield Block to be executed if the lock is acquired
|
56
62
|
def locked
|
@@ -172,6 +178,13 @@ module Redstruct
|
|
172
178
|
return false
|
173
179
|
LUA
|
174
180
|
|
181
|
+
# Atomically deletes the given KEYS
|
182
|
+
# @param [Array<(::String)>] keys the keys to delete
|
183
|
+
# @return [Integer] returns the number of keys deleted
|
184
|
+
defscript :delete_script, <<~LUA
|
185
|
+
return redis.call('del', unpack(KEYS))
|
186
|
+
LUA
|
187
|
+
|
175
188
|
def generate_token
|
176
189
|
return SecureRandom.uuid
|
177
190
|
end
|
data/lib/redstruct/version.rb
CHANGED
data/test/redstruct/lock_test.rb
CHANGED
@@ -99,6 +99,16 @@ module Redstruct
|
|
99
99
|
refute lock.release, 'should not be able to release lock since it was already released'
|
100
100
|
end
|
101
101
|
|
102
|
+
def test_delete
|
103
|
+
lock = create(expiry: 60)
|
104
|
+
refute lock.delete, 'should not be able to delete what does not exist'
|
105
|
+
assert lock.acquire, 'should have acquired the lock'
|
106
|
+
assert lock.delete, 'should delete the lock'
|
107
|
+
|
108
|
+
lock = create(lock.resource, expiry: 60)
|
109
|
+
assert lock.acquire, 'should be to acquire the lock again since it was deleted'
|
110
|
+
end
|
111
|
+
|
102
112
|
private
|
103
113
|
|
104
114
|
def create(resource = nil, **options)
|