Module: Followable

Extended by:
ActiveSupport::Concern
Defined in:
lib/followable.rb,
lib/followable/version.rb

Constant Summary collapse

VERSION =
"0.0.1"

Instance Method Summary collapse

Instance Method Details

#follow!(object) ⇒ Object

follow an object



8
9
10
11
12
13
# File 'lib/followable.rb', line 8

def follow!(object)
  $redis.multi do
    $redis.sadd(self.redis_key(:following, object), object.id)
    $redis.sadd(object.redis_key(:followers, object), self.id)
  end
end

#followed_by?(object) ⇒ Boolean

does the object follow self

Returns:

  • (Boolean)


42
43
44
# File 'lib/followable.rb', line 42

def followed_by?(object)
  $redis.sismember(self.redis_key(:followers, object), object.id)
end

#followersObject

objects that self follows



24
25
26
27
# File 'lib/followable.rb', line 24

def followers
  object_ids = $redis.smembers(self.redis_key(:followers, self))
  self.class.where(:id => object_ids)
end

#followers_countObject

number of followers



52
53
54
# File 'lib/followable.rb', line 52

def followers_count
  $redis.scard(self.redis_key(:followers, self))
end

#followingObject

objects that follow self



30
31
32
33
# File 'lib/followable.rb', line 30

def following
  object_ids = $redis.smembers(self.redis_key(:following, self))
  self.class.where(:id => object_ids)
end

#following?(object) ⇒ Boolean

does self follow user

Returns:

  • (Boolean)


47
48
49
# File 'lib/followable.rb', line 47

def following?(object)
  $redis.sismember(self.redis_key(:following, object), object.id)
end

#following_countObject

number of users being followed



57
58
59
# File 'lib/followable.rb', line 57

def following_count
  $redis.scard(self.redis_key(:following, self))
end

#redis_key(str, object) ⇒ Object

helper method to generate redis keys



62
63
64
# File 'lib/followable.rb', line 62

def redis_key(str, object)
  "user:#{self.id}:#{str}:#{object.class.name.downcase}"
end

#unfollow!(object) ⇒ Object

unfollow an object



16
17
18
19
20
21
# File 'lib/followable.rb', line 16

def unfollow!(object)
  $redis.multi do
    $redis.srem(self.redis_key(:following, object), user.id)
    $redis.srem(user.redis_key(:followers, object), self.id)
  end
end