module RedisModelExtension::SaveDestroy
Public Instance Methods
create_aliases()
click to toggle source
create aliases (create key value [STRING] key is alias redis key and value is redis key)
# File lib/redis-model-extension/save_destroy.rb, line 65 def create_aliases main_key = redis_key redis_alias_config.each do |alias_name, fields| RedisModelExtension::Database.redis.sadd(redis_alias_key(alias_name), main_key) if valid_alias_key? alias_name end end
destroy!()
click to toggle source
remove record form database
# File lib/redis-model-extension/save_destroy.rb, line 83 def destroy! if exists? run_callbacks :destroy do #destroy main object RedisModelExtension::Database.redis.del(redis_key) destroy_aliases! end end end
Also aliased as: destroy
destroy_aliases!()
click to toggle source
remove all aliases
# File lib/redis-model-extension/save_destroy.rb, line 96 def destroy_aliases! #do it only if it is existing object! if redis_old_keys[:aliases].size > 0 redis_old_keys[:aliases].each do |alias_key| RedisModelExtension::Database.redis.srem alias_key, redis_old_keys[:key] #delete alias with 0 keys RedisModelExtension::Database.redis.del(alias_key) if RedisModelExtension::Database.redis.scard(alias_key).to_i == 0 end end end
save()
click to toggle source
save method - save all attributes (fields) and create aliases
# File lib/redis-model-extension/save_destroy.rb, line 17 def save perform = lambda do # can be saved into redis? if valid? #autoicrement id self.send("id=", increment_id) if redis_key_config.include?(:id) && !self.id? #generate key (possibly new) generated_key = redis_key #take care about renaming saved hash in redis (if key changed) if redis_old_keys[:key] && redis_old_keys[:key] != generated_key && RedisModelExtension::Database.redis.exists(redis_old_keys[:key]) RedisModelExtension::Database.redis.rename(redis_old_keys[:key], generated_key) end #ignore nil values for save args = self.class.redis_save_fields_with_nil_conf ? to_arg : to_arg.reject{|k,v| v.nil?} #perform save to redis hash RedisModelExtension::Database.redis.hmset(generated_key, *args.inject([]){ |arr,kv| arr + [kv[0], value_to_redis(kv[0], kv[1])]}) # destroy aliases destroy_aliases! create_aliases #after save make sure instance remember old key to know if it needs to be ranamed store_keys end end run_callbacks :save do unless exists? run_callbacks :create do perform.() end else perform.() end end unless errors.any? return self else return false end end
update(args)
click to toggle source
update multiple attrubutes at once
# File lib/redis-model-extension/save_destroy.rb, line 73 def update args args.each do |key, value| method = "#{key}=".to_sym if self.respond_to? method self.send(method, value) end end end