class Concussion::RedisAdapter

Constants

DEFAULT_BATCH_SIZE
KEY

Attributes

namespace[RW]
redis[RW]

Public Class Methods

new(opts = {}) click to toggle source
# File lib/concussion/redis_adapter.rb, line 34
def initialize(opts = {})
  self.redis = opts.fetch(:redis) { Redis.new }
  self.namespace = opts.fetch(:namespace) { "" }
end

Public Instance Methods

del(key) click to toggle source
# File lib/concussion/redis_adapter.rb, line 52
def del(key)
  redis.hdel(namespaced_key, key)
end
find_each(opts = {}) { |key, decode_from_redis(data)| ... } click to toggle source
# File lib/concussion/redis_adapter.rb, line 56
def find_each(opts = {})
  return enum_for(:find_each, opts) unless block_given?
  batch_size = opts.fetch(:batch_size) { DEFAULT_BATCH_SIZE }
  keys = redis.hkeys namespaced_key

  keys.each_slice(batch_size).each do |key_slice|
      Hash[key_slice.zip(redis.hmget(namespaced_key, key_slice))].each do |key, data|
        yield key, decode_from_redis(data)
      end
  end
end
get(key) click to toggle source
# File lib/concussion/redis_adapter.rb, line 43
def get(key)
  decode_from_redis redis.hget(namespaced_key, key)
end
namespaced_key() click to toggle source
# File lib/concussion/redis_adapter.rb, line 39
def namespaced_key
  "#{namespace}#{KEY}"
end
set(key, data) click to toggle source
# File lib/concussion/redis_adapter.rb, line 47
def set(key, data)
  redis.hset(namespaced_key, key, encode_for_redis(data))
  data
end

Private Instance Methods

decode_from_redis(str) click to toggle source
# File lib/concussion/redis_adapter.rb, line 70
def decode_from_redis(str)
  val = str.to_s.force_encoding('iso-8859-1')
  val.present? ? Marshal.restore(val) : nil
end
encode_for_redis(data) click to toggle source
# File lib/concussion/redis_adapter.rb, line 75
def encode_for_redis(data)
  Marshal.dump(data)
end