class Sir::Backends::RedisCache

Constants

DEFAULTS
META
TYPEERROR

Public Class Methods

able?() click to toggle source
# File lib/sir/backends/redis_cache.rb, line 87
def self.able?
  return TYPEERROR == @@redis.echo(TYPEERROR)
end
dump() click to toggle source
# File lib/sir/backends/redis_cache.rb, line 102
def self.dump
  raise TypeError, TYPEERROR
end
flush() click to toggle source
# File lib/sir/backends/redis_cache.rb, line 117
def self.flush
  return true if @@redis.bgsave
end
get(key) click to toggle source
Calls superclass method Sir::Backends::Base::get
# File lib/sir/backends/redis_cache.rb, line 22
def self.get(key)
  invalid = self.valid?({ key: key })
  raise ArgumentError, invalid if invalid

  nskey = self::nsed_key(key)
  got = @@redis.get(nskey)

  unless got.nil?

    case @@config[:serializer]
      when :marshal
        return Marshal.load(got)[0]
      when :json
        return JSON.parse(got)[0]
      else
        raise TypeError, "Invalid serializer: #{@@config[:serializer]}. You probably want to look at your Sir.configure() statement"
    end

  else
    super
  end
end
keys(mask = "*") click to toggle source
# File lib/sir/backends/redis_cache.rb, line 127
def self.keys(mask = "*")
  return @@redis.keys(mask).map {|x| x.gsub(/^#{self.nsed_key("")}/, '').intern}
end
kill(key) click to toggle source
# File lib/sir/backends/redis_cache.rb, line 92
def self.kill(key)
  invalid = self.valid?({ key: key })
  raise ArgumentError, invalid if invalid

  if @@redis.del(self::nsed_key(key))
    return true
  end
end
length() click to toggle source
# File lib/sir/backends/redis_cache.rb, line 122
def self.length
  return @@redis.dbsize
end
nuke() click to toggle source
# File lib/sir/backends/redis_cache.rb, line 107
def self.nuke
  return true if @@redis.flushdb
end
post_configure() click to toggle source
# File lib/sir/backends/redis_cache.rb, line 132
def self.post_configure
  @@redis = @@config[:redis_obj]
end
put(key, value, expiry = Sir.config(:default_expiry)) click to toggle source

@note We wrap `value` in `[ ]` to protect nil values and such from being misinterpreted

JSON in particular: JSON.parse(nil.to_json) #=> JSON::ParserError
                but JSON.parse([nil].to_json) #=> [nil]
# File lib/sir/backends/redis_cache.rb, line 49
def self.put(key, value, expiry = Sir.config(:default_expiry))
  invalid = self.valid?({ key: key, value: value, expiry: expiry })
  raise ArgumentError, invalid if invalid

  key = self::nsed_key(key)
  ser = nil

  case @@config[:serializer]
    when :marshal
      ser = Marshal.dump([value]).to_s
    when :json
      ser = [value].to_json
    else
      raise TypeError, "Invalid serializer: #{@@config[:serializer]}. You probably want to look at your Sir.configure() statement"
  end

  @@redis.set(key, ser)

  #### This code snippet needs to be DRYed
  expiry = expiry.to_i unless expiry.nil?

  # normalize relative/absolute times to absolute time, skip if expiry = nil
  if !expiry.nil? && Time.now.to_i > expiry
    expiry += Time.now.to_i
  end
  ####

  if expiry == nil
    @@redis.persist(key)
  else
    @@redis.expireat(key, expiry.to_i)
  end

  return value

end
sweep(include_nil_expiry = nil) click to toggle source
# File lib/sir/backends/redis_cache.rb, line 112
def self.sweep(include_nil_expiry = nil)
  raise TypeError, TYPEERROR
end

Private Class Methods

nsed_key(key) click to toggle source

returns a namespaced key

# File lib/sir/backends/redis_cache.rb, line 140
def self.nsed_key(key)
  return "#{@@config[:namespace]}-#{key}"
end