module RedisModelExtension::ClassRedisKey

Class Redis Key

generators of redis keys used for creating keys for search and save of models & aliases

Public Instance Methods

alias_exists?(alias_name, args = {}) click to toggle source

Check if key by alias name and arguments exists in db

# File lib/redis-model-extension/redis_key.rb, line 72
def alias_exists? alias_name, args = {}
  RedisModelExtension::Database.redis.exists(self.name.constantize.generate_alias_key(alias_name, args))
end
exists?(args = {}) click to toggle source

Check if key by arguments exists in db

# File lib/redis-model-extension/redis_key.rb, line 67
def exists? args = {}
  RedisModelExtension::Database.redis.exists(self.name.constantize.generate_key(args))
end
generate_alias_key(alias_name, args = {}) click to toggle source

Generates redis key for storing indexes for dynamic aliases will produce something like: your_class:dynamic:name_of_your_dynami_alias:field_value2:field_value1… (field values are sorted by fields order)

  • dynamic_alias_name (Symbol) - name of your dynamic alias

  • args (Hash) - arguments of your model

  • field_order (Array of symbols) - order of fields (ex. [:field2, :field1])

  • field_args (Hash) - hash of values for aliasing (ex. {:field1 => “field_value1”, :field2 => “field_value2”})

# File lib/redis-model-extension/redis_key.rb, line 31
def generate_alias_key alias_name, args = {}
  #check if asked dynamic alias exists
  raise ArgumentError, "Unknown dynamic alias: '#{alias_name}', use: #{redis_alias_config.keys.join(", ")} " unless redis_alias_config.has_key?(alias_name.to_sym)

  #normalize input hash of arguments
  args = HashWithIndifferentAccess.new(args)

  # prepare class name + dynamic + alias name
  out = "#{self.name.to_s.underscore.to_sym}:alias:#{alias_name}"

  #get config
  config = redis_alias_config[alias_name.to_sym]

  # use all specified keys
  config[:main_fields].each do |key|
    out += add_item_to_redis_key args, key
  end

  #is alias dynamic?
  if config[:order_field] && config[:args_field]
    #check if input arguments has order field
    if args.has_key?(config[:order_field]) && args[config[:order_field]] && args.has_key?(config[:args_field]) && args[config[:args_field]]
      #use filed order from defined field in args
      args[config[:order_field]].each do |key|
        out += add_item_to_redis_key args[config[:args_field]], key
      end
    else 
      # use global search
      out += ":*"
    end
  end

  out    
end
generate_key(args = {}) click to toggle source

Generates redis key for storing object

  • will produce something like: your_class:key:field_value1:field_value2…

(depending on your redis_key setting)

# File lib/redis-model-extension/redis_key.rb, line 12
def generate_key args = {}, key = "key"
  #normalize input hash of arguments
  args = HashWithIndifferentAccess.new(args)

  out = "#{self.name.to_s.underscore.to_sym}:#{key}"
  redis_key_config.each do |key|
    out += add_item_to_redis_key args, key
  end
  out
end

Private Instance Methods

add_item_to_redis_key(args, key) click to toggle source

return one item of redis key (will decide to input value or to add * for search)

# File lib/redis-model-extension/redis_key.rb, line 79
def add_item_to_redis_key args, key
  if args.has_key?(key) && !args[key].nil?
    key = ":#{args[key]}"
    key = key.mb_chars.downcase if redis_key_normalize_conf.include?(:downcase)
    key = ActiveSupport::Inflector::transliterate(key) if redis_key_normalize_conf.include?(:transliterate)
    key 
  else
    ":*"
  end
end