class Cue::Store::Redis

Attributes

namespace[W]
redis[W]

Public Class Methods

configure() { |klass| ... } click to toggle source
# File lib/cue/store/redis.rb, line 13
def configure(&block)
  self.tap { |klass| yield(klass) }
end
namespace() click to toggle source
# File lib/cue/store/redis.rb, line 17
def namespace
  @namespace ||= 'cue'
end
redis() click to toggle source
# File lib/cue/store/redis.rb, line 21
def redis
  @redis ||= ::Redis.new
end

Public Instance Methods

clear() click to toggle source
# File lib/cue/store/redis.rb, line 26
def clear
  item_keys = redis.smembers(redis_key('keys'))
  keys_key  = redis_key('keys')
  
  redis.del(item_keys, keys_key)
end
delete(key) click to toggle source
# File lib/cue/store/redis.rb, line 33
def delete(key)
  item_key = item_key(key)
  
  redis.del(item_key)
  redis.srem(redis_key('keys'), item_key)
end
each() { |items| ... } click to toggle source
# File lib/cue/store/redis.rb, line 40
def each
  items = keys.map(&method(:read)).sort
  yield(items)
end
keys() click to toggle source
# File lib/cue/store/redis.rb, line 45
def keys
  redis.smembers(redis_key('keys')).map do |redis_key|
    redis_key.split(':').last
  end
end
read(key) click to toggle source
# File lib/cue/store/redis.rb, line 51
def read(key)
  item_hash = redis.hgetall(item_key(key))
  return nil if item_hash.empty?
  
  deserialize(item_hash)
end
write(key, item) click to toggle source
# File lib/cue/store/redis.rb, line 58
def write(key, item)
  add_key(key)
  add_item(key, item)
end

Private Instance Methods

add_item(key, item) click to toggle source
# File lib/cue/store/redis.rb, line 65
def add_item(key, item)
  redis.mapped_hmset(item_key(key), serialize(item))
end
add_key(key) click to toggle source
# File lib/cue/store/redis.rb, line 69
def add_key(key)
  redis.sadd(redis_key('keys'), item_key(key))
end
deserialize(item_hash) click to toggle source
# File lib/cue/store/redis.rb, line 73
def deserialize(item_hash)
  content    = item_hash['content']
  created_at = Time.parse(item_hash['created_at']) if item_hash['created_at']
  state      = item_hash['state'].to_sym
  
  Cue::Item.new(content, created_at: created_at, state: state)
end
item_key(key) click to toggle source
# File lib/cue/store/redis.rb, line 81
def item_key(key)
  redis_key('item', key)
end
namespace() click to toggle source
# File lib/cue/store/redis.rb, line 85
def namespace
  self.class.namespace
end
redis() click to toggle source
# File lib/cue/store/redis.rb, line 89
def redis
  self.class.redis
end
redis_key(*components) click to toggle source
# File lib/cue/store/redis.rb, line 93
def redis_key(*components)
  key = *components
  key.unshift(namespace)
  
  key.join(':')
end
serialize(item) click to toggle source
# File lib/cue/store/redis.rb, line 100
def serialize(item)
  {
    'state'      => item.state.to_s,
    'content'    => item.content
  }.tap do |hash|
    hash['created_at'] = item.created_at.to_s if item.created_at
  end
end