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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3e699e92aa673d70280aa80258169eaad2c8edad
4
- data.tar.gz: f1de7e921d57040ae2e74d1cc1db2b481b25d5f8
3
+ metadata.gz: 134acc649952b4163693f10342277431de4934fa
4
+ data.tar.gz: 19ab242fd3c80366c0904dd4f9ef774bbebe77e7
5
5
  SHA512:
6
- metadata.gz: d74321747fb7d5afa0d2f87ab1e7f6487b5e3a20289c071b5dd2a4ebb1068b601389de8d0e8003300436ae824331e6a5e9dc922e469503bdfb66ee6476270c37
7
- data.tar.gz: 8b58b8d2c16aba6bc6efc9213b19d894fbad8a362a1466e372afa5fd448753f055219ef68596e18fc903eb929c579515bce05640c27bd50ff5d210227e78e8dd
6
+ metadata.gz: d7750e77d99eed37f6e8f40d2b7125309b706b53b1a21034bf79211c5c50e8cb130bd392cf4d5694c8faadd51e72c0346eb89dc9276a4d30724d229987e6ea42
7
+ data.tar.gz: 724d70a31f5b50a59bbf7b899f3bcffc0d9204ad76b3ee2141a99e2bb6ab1dafcee2ca82d0f974f7dd702716bb41e26e3b2ed5d382e5d13e59ed7a53d5d63857
@@ -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
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Redstruct
4
4
  # Current version
5
- VERSION = '0.2.0'
5
+ VERSION = '0.2.1'
6
6
  end
@@ -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)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redstruct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas Pepin-Perreault