# frozen_string_literal: true
class ExpiringLock
def initialize(name, expiry: 60 * 60 * 24)
@name = name
@expiry = expiry
end
def with(els=nil)
REDIS.set(@name, Time.now, "EX", @expiry, "NX").then do |result|
next els&.call if result.nil?
EMPromise.resolve(yield).catch do |err|
REDIS.del(@name)
EMPromise.reject(err)
end
end
end
end