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
key?(key)
Alias for: has_key?
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