redstruct 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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)
|