Sha256: c9eccca2bca27d5ad8c1707780a420442a45bda979d883a4d0ff6a193dab48ce

Contents?: true

Size: 935 Bytes

Versions: 4

Compression:

Stored size: 935 Bytes

Contents

class RedisLock
  class MultiLock
    extend Forwardable
    attr_reader :keys, :locks, :opts
    def_delegators :locks, :any?, :all?, :each, :map

    def initialize(*args)
      @opts = extract_options!(args)
      @keys = args
      @locks = @keys.map do |k|
                 RedisLock.new(k, @opts)
               end
    end

    def extract_options!(args)
      args.last.is_a?(::Hash) ? args.pop : {}
    end

    def set(ttl, opts = {})
      map { |l| l.set(ttl, opts) }.all?{ |e| e === true }
    end

    def config
      RedisLock.config
    end

    def delete
      map(&:delete).all?{ |e| e === true }
    end
    alias_method :unlock!, :delete
    alias_method :open!, :delete
    alias_method :remove, :delete

    def open?
      all?(&:open?)
    end
    alias_method :unlocked?, :open?

    def locked?
      any?(&:locked?)
    end
    alias_method :exists?, :locked?
    alias_method :in_use?, :locked?
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
redis_lock-0.4.3 lib/redis_lock/multi_lock.rb
redis_lock-0.4.2 lib/redis_lock/multi_lock.rb
redis_lock-0.4.1 lib/redis_lock/multi_lock.rb
redis_lock-0.4.0 lib/redis_lock/multi_lock.rb