class ActiveSupport::Cache::MemcachedStore::Codec

Constants

COMPRESSED_FLAG
RAW_FLAG

Older versions of this gem would use 0 for the flags whether or not the value was marshal dumped. By setting this flag, we can tell if it were set with an older version for backwards compatible decoding.

SERIALIZED_FLAG

use dalli compatible flags

Public Class Methods

new(serializer: Marshal, compressor: nil) click to toggle source
# File lib/active_support/cache/memcached_store.rb, line 27
def initialize(serializer: Marshal, compressor: nil)
  @serializer = serializer
  @compressor = compressor
end

Public Instance Methods

decode(_key, value, flags) click to toggle source
# File lib/active_support/cache/memcached_store.rb, line 45
def decode(_key, value, flags)
  if (flags & COMPRESSED_FLAG) != 0
    value = @compressor.decompress(value)
  end

  if (flags & SERIALIZED_FLAG) != 0
    @serializer.load(value)
  elsif flags == 0 # legacy cache value
    @serializer.load(value) rescue value
  else
    value
  end
end
encode(_key, value, flags) click to toggle source
# File lib/active_support/cache/memcached_store.rb, line 32
def encode(_key, value, flags)
  unless value.is_a?(String)
    flags |= SERIALIZED_FLAG
    value = @serializer.dump(value)
  end
  if @compressor
    flags |= COMPRESSED_FLAG
    value = @compressor.compress(value)
  end
  flags |= RAW_FLAG if flags == 0
  [value, flags]
end