Sha256: 07e81ecb51eb90ace7c24971e6a967989b748d9c805d421ffcc41ef90e1730f1

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require File.dirname(__FILE__) + '/base_object'
require 'zlib'

class Redis
  #
  # Class representing a simple value.  You can use standard Ruby operations on it.
  #
  class Value < BaseObject
    require 'redis/helpers/core_commands'
    include Redis::Helpers::CoreCommands

    attr_reader :key, :options

    def value=(val)
      allow_expiration do
        if val.nil?
          delete
        else
          redis.set key, marshal(val)
        end
      end
    end
    alias_method :set, :value=

    def value
      value = unmarshal(redis.get(key))
      if value.nil? && !@options[:default].nil?
        @options[:default]
      else
        value
      end
    end
    alias_method :get, :value

    def marshal(value, *args)
      if !value.nil? && options[:compress]
        compress(super)
      else
        super
      end
    end

    def unmarshal(value, *args)
      if !value.nil? && options[:compress]
        super(decompress(value), *args)
      else
        super
      end
    end

    def decompress(value)
      Zlib::Inflate.inflate(value)
    end

    def compress(value)
      Zlib::Deflate.deflate(value)
    end

    def inspect
      "#<Redis::Value #{value.inspect}>"
    end

    def ==(other); value == other end
    def nil?; value.nil? end

    def method_missing(*args)
      self.value.send *args
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
redis-objects-1.4.3 lib/redis/value.rb