module ActiveRedis::Relation::InstanceMethods
Public Instance Methods
create_relation_methods()
click to toggle source
Generate methods for relations.
@return [void]
# File lib/active_redis/relation.rb, line 13 def create_relation_methods self.class.instance_eval do (@has_many || []).each do |x| define_method(x.to_s.pluralize) do klazz = Object.const_get(x.to_s.capitalize.singularize) klazz.where( basename: "#{basename}:#{x.to_s.downcase.pluralize}") end end (@belongs_to || []).each do |x| keys.merge!({"#{x.to_s.downcase.singularize}_id".to_sym => Integer}) define_method(x.to_s.singularize) do klazz = Object.const_get(x.to_s.capitalize.singularize) klazz.find send("#{x.to_s.downcase.singularize}_id") end end (@has_one || []).each do |x| define_method(x.to_s) do klazz = Object.const_get(x.to_s.capitalize.singularize) klazz.find_by(basename: "#{basename}:"+ "#{x.to_s.downcase.singularize}") end end end end
handle_relation(relation_key: nil, value: nil, action: :add)
click to toggle source
Create a set for each relation. This is needed to fetch directly the objects by id from redis store. Nobody wan’t to do it only at application level.
@param relation_key [String] Like Author - Post.author_id @param value [String] @param action [:add,:del]
@return [void]
# File lib/active_redis/relation.rb, line 50 def handle_relation relation_key: nil, value: nil, action: :add blto = self.class.instance_variable_get(:@belongs_to) relation = relation_key.to_s[/^([a-z_]+)_id$/,1].to_s if blto.is_a?(Array) and blto.include?(relation.to_sym) if action == :add connection.sadd( "#{relation.pluralize}:#{value}:#{self.class.cname}", id) elsif action == :del connection.srem( "#{relation.pluralize}:"+ "#{value || send(relation_key)}:"+ "#{self.class.cname}", id) end end end