class Kredis::Types::Slots

def available?

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

def release

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

def reserve

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 reset

def reset
  del
end

def taken

def taken
  get.to_i
end