Sha256: fd4d2745b67f7739b992b5a510b50a5d0637b85cfc679071bf030ab486cebbe2

Contents?: true

Size: 1.21 KB

Versions: 7

Compression:

Stored size: 1.21 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
    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

7 entries across 7 versions & 2 rubygems

Version Path
redis-objects-2.0.0.beta lib/redis/value.rb
redis-objects-2.0.0.alpha lib/redis/value.rb
redis-objects-1.7.0 lib/redis/value.rb
redis-objects-1.6.0 lib/redis/value.rb
redis-objects-legacy-1.6.0 lib/redis/value.rb
redis-objects-1.5.1 lib/redis/value.rb
redis-objects-1.5.0 lib/redis/value.rb