# 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, "").then { rval }
end
end
end
end