class RedisWrapper::Entry

Constants

DEFAULT_COMPRESS_LIMIT
FLAG_COMPRESSED
FLAG_MARSHALED

Attributes

flags[RW]
value[RW]

Public Class Methods

new(value, options = {}) click to toggle source
# File lib/redis_wrapper/entry.rb, line 12
def initialize(value, options = {})
  @flags = options[:flags] || {}
  @value = value
  @options = options
  flag_extraction if @value.class == String
end
option_keys() click to toggle source
# File lib/redis_wrapper/entry.rb, line 8
def self.option_keys
  [:expire_in,:flags, :raw]
end

Public Instance Methods

compress(val) click to toggle source
# File lib/redis_wrapper/entry.rb, line 54
def compress(val)
  if should_compress?(val) && !compressed?
    @flags[:compressed] = true
    return Zlib::Deflate.deflate(val)
  end
  val
end
decompress(val) click to toggle source
# File lib/redis_wrapper/entry.rb, line 46
def decompress(val)
  if compressed?
    @flags[:compressed] = false
    return Zlib::Inflate.inflate(val)
  end
  val
end
demarshal(val) click to toggle source
# File lib/redis_wrapper/entry.rb, line 38
def demarshal(val)
  if marshaled?
    @flags[:marshaled] = false
    return Marshal.load(val)
  end
  val
end
extracted_result() click to toggle source
# File lib/redis_wrapper/entry.rb, line 19
def extracted_result
  @value = demarshal(decompress(@value))
end
flag_extraction() click to toggle source
# File lib/redis_wrapper/entry.rb, line 69
def flag_extraction
  if @value
    pflag = @value.slice(@value.length-3..@value.length)
    if pflag == FLAG_MARSHALED
      @flags[:marshaled] = true
      @value = @value.slice(0..-4)
      flag_extraction
    elsif pflag == FLAG_COMPRESSED
      @flags[:compressed] = true
      @value = @value.slice(0..-4)
      flag_extraction
    end
  end
end
flags_string() click to toggle source
# File lib/redis_wrapper/entry.rb, line 31
def flags_string
  string = ""
  string += FLAG_MARSHALED if @flags[:marshaled]
  string += FLAG_COMPRESSED if @flags[:compressed]
  string
end
marshal(val) click to toggle source
# File lib/redis_wrapper/entry.rb, line 62
def marshal(val)
  if val && !marshaled?
    @flags[:marshaled] = true
    Marshal.dump(val)
  end
end
prepare(value) click to toggle source
# File lib/redis_wrapper/entry.rb, line 27
def prepare(value)
  compress(marshal(value)) if value
end
prepared_result() click to toggle source
# File lib/redis_wrapper/entry.rb, line 23
def prepared_result
  prepare(@value) + flags_string
end

Private Instance Methods

compressed?() click to toggle source
# File lib/redis_wrapper/entry.rb, line 85
def compressed?
  @flags[:compressed] == true
end
marshaled?() click to toggle source
# File lib/redis_wrapper/entry.rb, line 88
def marshaled?
  @flags[:marshaled] == true
end
should_compress?(val) click to toggle source
# File lib/redis_wrapper/entry.rb, line 91
def should_compress?(val)
  unless @options[:raw] || val.nil?
    compression_threshold = @options[:compression_threshold] || DEFAULT_COMPRESS_LIMIT
    return true if val.size >= compression_threshold
  end
  false
end