class Dry::Effects::Providers::Lock

Constants

Locate

Public Instance Methods

call(backend = Undefined) { || ... } click to toggle source

Yield the block with the handler installed

@api private

# File lib/dry/effects/providers/lock.rb, line 92
def call(backend = Undefined)
  backend_replace = Undefined.default(backend) do
    parent = ::Dry::Effects.yield(Locate) { Undefined }
    Undefined.map(parent, &:backend)
  end

  with_backend(backend_replace) do
    yield
  ensure
    owned.each { |handle| unlock(handle) }
  end
end
locate() click to toggle source

Locate handler in the stack

@return [Provider] @api private

# File lib/dry/effects/providers/lock.rb, line 85
def locate
  self
end
lock(key, meta = Undefined) click to toggle source
# File lib/dry/effects/providers/lock.rb, line 63
def lock(key, meta = Undefined)
  locked = backend.lock(key, meta)
  owned << locked if locked
  locked
end
locked?(key) click to toggle source
# File lib/dry/effects/providers/lock.rb, line 69
def locked?(key)
  backend.locked?(key)
end
meta(key) click to toggle source
# File lib/dry/effects/providers/lock.rb, line 77
def meta(key)
  backend.meta(key)
end
owned() click to toggle source
# File lib/dry/effects/providers/lock.rb, line 118
def owned
  @owned ||= []
end
represent() click to toggle source
Calls superclass method
# File lib/dry/effects/providers/lock.rb, line 122
def represent
  if owned.empty?
    super
  else
    "lock[owned=#{owned.size}]"
  end
end
unlock(handle) click to toggle source
# File lib/dry/effects/providers/lock.rb, line 73
def unlock(handle)
  backend.unlock(handle)
end
with_backend(backend) { || ... } click to toggle source
# File lib/dry/effects/providers/lock.rb, line 105
def with_backend(backend)
  if Undefined.equal?(backend)
    yield
  else
    begin
      before, @backend = @backend, backend
      yield
    ensure
      @backend = before
    end
  end
end