class Lit::RedisStorage
Public Class Methods
new()
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 17 def initialize Lit.redis end
Public Instance Methods
[](key)
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 30 def [](key) if exists?(_prefixed_key_for_array(key)) Lit.redis.lrange(_prefixed_key(key), 0, -1) elsif exists?(_prefixed_key_for_nil(key)) nil else val = Lit.redis.get(_prefixed_key(key)) return val if val.present? subtree_of_key(key) end end
[]=(k, v)
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 43 def []=(k, v) delete(k) if v.is_a?(Array) Lit.redis.set(_prefixed_key_for_array(k), '1') v.each do |ve| Lit.redis.rpush(_prefixed_key(k), ve.to_s) end elsif v.nil? Lit.redis.set(_prefixed_key_for_nil(k), '1') Lit.redis.set(_prefixed_key(k), '') else Lit.redis.set(_prefixed_key(k), v) end end
clear()
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 64 def clear Lit.redis.del(keys) unless keys.empty? end
delete(k)
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 58 def delete(k) Lit.redis.del(_prefixed_key_for_array(k)) Lit.redis.del(_prefixed_key_for_nil(k)) Lit.redis.del(_prefixed_key(k)) end
exists?(key)
click to toggle source
This handles a change in the redis-rb gem that changes exists => exists?
# File lib/lit/adapters/redis_storage.rb, line 22 def exists?(key) # Use recommended binary-returning method create [with this redis-rb commit](https://github.com/redis/redis-rb/commit/bf42fc9e0db4a1719d9b1ecc65aeb20425d44427). return Lit.redis.exists?(key) if Lit.redis.respond_to?(:exists?) # Fall back with older gem Lit.redis.exists(key) end
has_key?(key)
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 72 def has_key?(key) exists?(_prefixed_key(key)) end
Also aliased as: key?
incr(key)
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 77 def incr(key) Lit.redis.incr(_prefixed_key(key)) end
keys()
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 68 def keys Lit.redis.keys(_prefixed_key + '*') end
prefix()
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 87 def prefix _prefix end
sort()
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 81 def sort Lit.redis.keys.sort.map do |k| [k, self.[](k)] end end
Private Instance Methods
_prefix()
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 93 def _prefix return @prefix_cached if @prefix_cached.present? @prefix_cached = 'lit:' if Lit.storage_options.is_a?(Hash) && Lit.storage_options.key?(:prefix) @prefix_cached += "#{Lit.storage_options[:prefix]}:" end @prefix_cached end
_prefixed_key(key = '')
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 103 def _prefixed_key(key = '') _prefix + key.to_s end
_prefixed_key_for_array(key = '')
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 107 def _prefixed_key_for_array(key = '') _prefix + 'array_flags:' + key.to_s end
_prefixed_key_for_nil(key = '')
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 111 def _prefixed_key_for_nil(key = '') _prefix + 'nil_flags:' + key.to_s end
form_cache_localizations(keys, values)
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 130 def form_cache_localizations(keys, values) Hash[keys.map { |k| k.sub(_prefix, '') }.zip(values)] end
subtree_of_key(key)
click to toggle source
# File lib/lit/adapters/redis_storage.rb, line 115 def subtree_of_key(key) keys_of_subtree = Lit.redis.keys("#{_prefixed_key(key)}*") return nil if keys_of_subtree.empty? values_of_subtree = Lit.redis.mget(keys_of_subtree) cache_localizations = form_cache_localizations(keys_of_subtree, values_of_subtree) full_subtree = Lit::LocalizationKeysToHashService.call(cache_localizations) requested_part = full_subtree.dig(*key.split('.')) return nil if requested_part.blank? return requested_part if requested_part.is_a?(String) requested_part.deep_transform_keys(&:to_sym) end