module RedisModelExtension::ClassGetFind

Get & Find

Public Instance Methods

all(args = {})
Alias for: find
find(args = {}) click to toggle source

Find method for searching in redis

* args (Integer) - search by id
* args (Hash) - search by arguments in redis_key
# File lib/redis-model-extension/get_find.rb, line 18
def find(args = {})
  # when argument is integer - search by id
  args = { id: args } if args.is_a?(Integer)
  #normalize input hash of arguments
  args = HashWithIndifferentAccess.new(args)

  out = []
  klass = self.name.constantize
  search_key = klass.generate_key(args)
  #is key specified directly? -> no needs of looking for other keys! -> faster
  unless search_key =~ /\*/
    out << klass.new_by_key(search_key) if klass.exists?(args)
  else
    RedisModelExtension::Database.redis.keys(search_key).each do |key|
      out << klass.new_by_key(key) 
    end
  end
  out
end
Also aliased as: all
find_by_alias(alias_name, args = {}) click to toggle source

Find method for searching in redis

# File lib/redis-model-extension/get_find.rb, line 40
def find_by_alias(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)

  out = []
  klass = self.name.constantize
  search_key = klass.generate_alias_key(alias_name, args)
  #is key specified directly? -> no needs of looking for other keys! -> faster
  unless search_key =~ /\*/
    out = klass.get_by_alias(alias_name, args) if klass.alias_exists?(alias_name, args)
  else
    RedisModelExtension::Database.redis.keys(search_key).each do |key|
      out << klass.get_by_alias_key(key)
    end
  end
  out.flatten
end
get(args = {}) click to toggle source

fastest method to get object from redis by getting it by arguments

* args (Integer) - search by id
* args (Hash) - search by arguments in redis_key
# File lib/redis-model-extension/get_find.rb, line 68
def get(args = {})
  # when argument is integer - search by id
  args = { id: args } if args.is_a?(Integer)

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

  klass = self.name.constantize
  if klass.valid_key?(args) && klass.exists?(args)
    klass.new_by_key(klass.generate_key(args)) 
  else
    nil
  end
end
get_by_alias(alias_name, args = {}) click to toggle source

fastest method to get object from redis by getting it by dynamic alias and arguments

# File lib/redis-model-extension/get_find.rb, line 88
def get_by_alias(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)

  klass = self.name.constantize
  if klass.valid_alias_key?(alias_name, args) && klass.alias_exists?(alias_name, args)
    out = []
    RedisModelExtension::Database.redis.smembers(klass.generate_alias_key(alias_name, args)).each do |key|
      out << klass.new_by_key(key) if RedisModelExtension::Database.redis.exists(key)
    end
    return out
  end
  nil
end
get_by_alias_key(alias_key) click to toggle source

fastest method to get object from redis by getting it by alias and arguments

# File lib/redis-model-extension/get_find.rb, line 122
def get_by_alias_key(alias_key)
  klass = self.name.constantize
  if RedisModelExtension::Database.redis.exists(alias_key)
    out = []
    RedisModelExtension::Database.redis.smembers(alias_key).each do |key|
      out << klass.new_by_key(key) if RedisModelExtension::Database.redis.exists(key)
    end
    return out
  end
  nil
end
get_by_redis_key(redis_key) click to toggle source

if you know redis key and would like to get object

# File lib/redis-model-extension/get_find.rb, line 112
def get_by_redis_key(redis_key)
  if redis_key.is_a?(String) && RedisModelExtension::Database.redis.exists(redis_key)
    klass = self.name.constantize
    klass.new_by_key(redis_key)
  else
    nil
  end
end
new_by_key(key) click to toggle source

read all data from redis and create new instance (used for Find & Get method)

# File lib/redis-model-extension/get_find.rb, line 139
def new_by_key(key)
  args = RedisModelExtension::Database.redis.hgetall(key).symbolize_keys

  new_instance = new(args)
  new_instance.store_keys

  return new_instance
end