Sha256: 42faf840fb99c5079e11c6fac076dff598fa07cc04210e16da027caebeef366f

Contents?: true

Size: 1.43 KB

Versions: 5

Compression:

Stored size: 1.43 KB

Contents

class Memcache
  class Base
    attr_accessor :prefix

    def clear
      flush_all
    end

    # Default implementations based on get and set.

    def gets(keys)
      get(keys, true)
    end

    def incr(key, amount = 1)
      result = get(key)
      return unless result

      value = result[:value]
      return unless value =~ /^\d+$/

      value = value.to_i + amount
      value = 0 if value < 0
      set(key, value.to_s)
      value
    end

    def decr(key, amount = 1)
      incr(key, -amount)
    end

    def add(key, value, expiry = 0, flags = 0)
      return nil if get(key)
      set(key, value, expiry)
    end

    def cas(key, value, cas, expiry = 0, flags = 0)
      # No cas implementation yet, just do a set for now.
      set(key, value, expiry, flags)
    end

    def replace(key, value, expiry = 0, flags = 0)
      return nil if get(key).nil?
      set(key, value, expiry)
    end

    def append(key, value)
      existing = get(key)
      return false if existing.nil?
      set(key, existing[:value] + value) && true
    end

    def prepend(key, value)
      existing = get(key)
      return false if existing.nil?
      set(key, value + existing[:value]) && true
    end

  protected

    def cache_key(key)
      raise Memcache::Error, "length zero key not permitted" if key.length == 0
      key = "#{prefix}#{key}"
      raise Memcache::Error, "key too long #{key.inspect}" if key.length > 250
      key
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
memcache-1.5.1 lib/memcache/base.rb
memcache-1.5.0 lib/memcache/base.rb
memcache-1.4.2 lib/memcache/base.rb
memcache-1.4.1 lib/memcache/base.rb
memcache-1.4.0 lib/memcache/base.rb