class Dry::Effects::Effects::Lock

Constants

Lock
Locked
Meta
Unlock

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/dry/effects/effects/lock.rb, line 14
def initialize
  super

  module_eval do
    define_method(:lock) do |key, meta: Undefined, &block|
      if block
        begin
          handle = ::Dry::Effects.yield(Lock.payload(key, meta))
          block.(!handle.nil?)
        ensure
          ::Dry::Effects.yield(Unlock.payload(handle)) if handle
        end
      else
        ::Dry::Effects.yield(Lock.payload(key, meta))
      end
    end

    define_method(:unlock) do |key|
      ::Dry::Effects.yield(Unlock.(key))
    end

    define_method(:locked?) do |key|
      ::Dry::Effects.yield(Locked.payload(key))
    end

    define_method(:lock_meta) do |key|
      ::Dry::Effects.yield(Meta.payload(key))
    end
  end
end