class Socialization::RedisStores::Base
Protected Class Methods
actors(subject, klass, options = {})
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 7 def actors(subject, klass, options = {}) if options[:pluck] Socialization.redis.smembers(generate_forward_key(subject)).inject([]) do |result, element| result << element.match(/\:(\d+)$/)[1] if element.match(/^#{klass}\:/) result end else actors_relation(subject, klass, options).to_a end end
actors_relation(subject, klass, options = {})
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 18 def actors_relation(subject, klass, options = {}) ids = actors(subject, klass, :pluck => :id) klass.where("#{klass.table_name}.id IN (?)", ids) end
relation!(actor, subject, options = {})
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 41 def relation!(actor, subject, options = {}) unless options[:skip_check] || relation?(actor, subject) Socialization.redis.sadd generate_forward_key(subject), generate_redis_value(actor) Socialization.redis.sadd generate_backward_key(actor), generate_redis_value(subject) call_after_create_hooks(actor, subject) true else false end end
relation?(actor, subject)
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 63 def relation?(actor, subject) Socialization.redis.sismember generate_forward_key(subject), generate_redis_value(actor) end
remove_actor_relations(subject)
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 67 def remove_actor_relations(subject) forward_key = generate_forward_key(subject) actors = Socialization.redis.smembers forward_key Socialization.redis.del forward_key actors.each do |actor| Socialization.redis.srem generate_backward_key(actor), generate_redis_value(subject) end true end
remove_subject_relations(actor)
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 77 def remove_subject_relations(actor) backward_key = generate_backward_key(actor) subjects = Socialization.redis.smembers backward_key Socialization.redis.del backward_key subjects.each do |subject| Socialization.redis.srem generate_forward_key(subject), generate_redis_value(actor) end true end
Also aliased as: remove_victim_relations
subjects(actor, klass, options = {})
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 29 def subjects(actor, klass, options = {}) if options[:pluck] Socialization.redis.smembers(generate_backward_key(actor)).inject([]) do |result, element| result << element.match(/\:(\d+)$/)[1] if element.match(/^#{klass}\:/) result end else subjects_relation(actor, klass, options).to_a end end
Also aliased as: victims
subjects_relation(actor, klass, options = {})
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 23 def subjects_relation(actor, klass, options = {}) ids = subjects(actor, klass, :pluck => :id) klass.where("#{klass.table_name}.id IN (?)", ids) end
Also aliased as: victims_relation
unrelation!(actor, subject, options = {})
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 52 def unrelation!(actor, subject, options = {}) if options[:skip_check] || relation?(actor, subject) Socialization.redis.srem generate_forward_key(subject), generate_redis_value(actor) Socialization.redis.srem generate_backward_key(actor), generate_redis_value(subject) call_after_destroy_hooks(actor, subject) true else false end end
Private Class Methods
generate_backward_key(actor)
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 111 def generate_backward_key(actor) keys = key_type_to_type_names(self) if actor.is_a?(String) "#{keys[1].pluralize.capitalize}:#{actor}" else "#{keys[1].pluralize.capitalize}:#{actor.class}:#{actor.id}" end end
generate_forward_key(subject)
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 102 def generate_forward_key(subject) keys = key_type_to_type_names(self) if subject.is_a?(String) "#{keys[0].pluralize.capitalize}:#{subject}" else "#{keys[0].pluralize.capitalize}:#{subject.class}:#{subject.id}" end end
generate_redis_value(obj)
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 120 def generate_redis_value(obj) "#{obj.class.name}:#{obj.id}" end
key_type_to_type_names(klass)
click to toggle source
# File lib/socialization/stores/redis/base.rb, line 90 def key_type_to_type_names(klass) if klass.name.match(/Follow$/) ['follower', 'followable'] elsif klass.name.match(/Like$/) ['liker', 'likeable'] elsif klass.name.match(/Mention$/) ['mentioner', 'mentionable'] else raise Socialization::ArgumentError.new("Can't find matching type for #{klass}.") end end