Sha256: 18b8b8efedf1aba5550578a5b2d128a9c1da93540e78dea939f8c81c2432004c

Contents?: true

Size: 802 Bytes

Versions: 3

Compression:

Stored size: 802 Bytes

Contents

# frozen_string_literal: true

class Kredis::Types::Slots < Kredis::Types::Proxying
  class NotAvailable < StandardError; end

  proxying :incr, :decr, :get, :del, :exists?

  attr_accessor :available

  def reserve
    failsafe returning: false do
      if block_given?
        begin
          if reserve
            yield
            true
          else
            false
          end
        ensure
          release
        end
      else
        if available?
          incr
          true
        else
          false
        end
      end
    end
  end

  def release
    if taken > 0
      decr
      true
    else
      false
    end
  end

  def available?
    failsafe returning: false do
      taken < available
    end
  end

  def reset
    del
  end

  def taken
    get.to_i
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kredis-1.7.0 lib/kredis/types/slots.rb
kredis-1.6.1 lib/kredis/types/slots.rb
kredis-1.6.0 lib/kredis/types/slots.rb