~singpolyma/sgx-jmp

ref: 2f7a1b60192a14c86ef9a1f727ea9369cfedc2c6 sgx-jmp/lib/expiring_lock.rb -rw-r--r-- 347 bytes
2f7a1b60Stephen Paul Weber Merge branch 'more-tel-selection-coverage' 9 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# frozen_string_literal: true

class ExpiringLock
	def initialize(name, expiry: 60 * 60 * 24)
		@name = name
		@expiry = expiry
	end

	def with(els=nil)
		REDIS.exists(@name).then do |exists|
			next els&.call if exists == 1

			EMPromise.resolve(yield).then do |rval|
				REDIS.setex(@name, @expiry, Time.now).then { rval }
			end
		end
	end
end