Module: Amistad::MongoFriendModel
- Defined in:
- lib/amistad/mongo_friend_model.rb
Instance Method Summary collapse
-
#approve(user) ⇒ Object
approve a friendship invitation.
-
#block(user) ⇒ Object
blocks a friendship.
-
#blocked ⇒ Object
returns the list of blocked friends.
-
#blocked?(user) ⇒ Boolean
checks if a user is blocked.
-
#common_friends_with(user) ⇒ Object
return the list of the ones among its friends which are also friend with the given use.
-
#connected_with?(user) ⇒ Boolean
checks if a current user is connected to given user.
-
#delete_all_friendships ⇒ Object
deletes all the friendships.
-
#friend_with?(user) ⇒ Boolean
checks if a user is a friend.
-
#friends ⇒ Object
returns the list of approved friends.
-
#friendshiped_with?(user) ⇒ Boolean
check if any friendship exists with another user.
-
#invite(user) ⇒ Object
suggest a user to become a friend.
-
#invited ⇒ Object
return the list of invited friends.
-
#invited?(user) ⇒ Boolean
checks if a current user invited given user.
-
#invited_by ⇒ Object
return the list of friends who invited.
-
#invited_by?(user) ⇒ Boolean
checks if a current user received invitation from given user.
-
#pending_invited ⇒ Object
return the list of pending invited friends.
-
#pending_invited_by ⇒ Object
return the list of pending friends who invited.
-
#remove_friendship(user) ⇒ Object
deletes a friendship.
-
#total_blocked ⇒ Object
total # of blockades and blockedes_by without association loading.
-
#total_friends ⇒ Object
total # of invited and invited_by without association loading.
-
#unblock(user) ⇒ Object
unblocks a friendship.
Instance Method Details
#approve(user) ⇒ Object
approve a friendship invitation. If the operation succeeds, the method returns true, else false
12 13 14 15 16 17 18 19 |
# File 'lib/amistad/mongo_friend_model.rb', line 12 def approve(user) return false unless pending_inverse_friend_ids.include?(user.id) && user.pending_friend_ids.include?(self.id) pending_inverse_friend_ids.delete(user.id) user.pending_friend_ids.delete(self.id) inverse_friend_ids << user.id user.friend_ids << self.id self.save && user.save end |
#block(user) ⇒ Object
blocks a friendship
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/amistad/mongo_friend_model.rb', line 91 def block(user) if inverse_friend_ids.include?(user.id) inverse_friend_ids.delete(user.id) user.friend_ids.delete(self.id) blocked_inverse_friend_ids << user.id elsif pending_inverse_friend_ids.include?(user.id) pending_inverse_friend_ids.delete(user.id) user.pending_friend_ids.delete(self.id) blocked_pending_inverse_friend_ids << user.id elsif friend_ids.include?(user.id) friend_ids.delete(user.id) user.inverse_friend_ids.delete(user.id) blocked_friend_ids << user.id else return false end self.save end |
#blocked ⇒ Object
returns the list of blocked friends
135 136 137 138 |
# File 'lib/amistad/mongo_friend_model.rb', line 135 def blocked blocked_ids = blocked_friend_ids + blocked_inverse_friend_ids + blocked_pending_inverse_friend_ids self.class.find(blocked_ids) end |
#blocked?(user) ⇒ Boolean
checks if a user is blocked
146 147 148 |
# File 'lib/amistad/mongo_friend_model.rb', line 146 def blocked?(user) (blocked_friend_ids + blocked_inverse_friend_ids + blocked_pending_inverse_friend_ids).include?(user.id) or user.blocked_pending_inverse_friend_ids.include?(self.id) end |
#common_friends_with(user) ⇒ Object
return the list of the ones among its friends which are also friend with the given use
52 53 54 |
# File 'lib/amistad/mongo_friend_model.rb', line 52 def common_friends_with(user) self.friends & user.friends end |
#connected_with?(user) ⇒ Boolean
checks if a current user is connected to given user
63 64 65 |
# File 'lib/amistad/mongo_friend_model.rb', line 63 def connected_with?(user) friendshiped_with?(user) end |
#delete_all_friendships ⇒ Object
deletes all the friendships
156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/amistad/mongo_friend_model.rb', line 156 def delete_all_friendships friend_ids.clear inverse_friend_ids.clear pending_friend_ids.clear pending_inverse_friend_ids.clear blocked_friend_ids.clear blocked_inverse_friend_ids.clear blocked_pending_friend_ids.clear blocked_pending_inverse_friend_ids.clear self.save end |
#friend_with?(user) ⇒ Boolean
checks if a user is a friend
57 58 59 60 |
# File 'lib/amistad/mongo_friend_model.rb', line 57 def friend_with?(user) return false if user == self (friend_ids + inverse_friend_ids).include?(user.id) end |
#friends ⇒ Object
returns the list of approved friends
22 23 24 |
# File 'lib/amistad/mongo_friend_model.rb', line 22 def friends self.invited + self.invited_by end |
#friendshiped_with?(user) ⇒ Boolean
check if any friendship exists with another user
151 152 153 |
# File 'lib/amistad/mongo_friend_model.rb', line 151 def friendshiped_with?(user) (friend_ids + inverse_friend_ids + pending_friend_ids + pending_inverse_friend_ids + blocked_friend_ids).include?(user.id) end |
#invite(user) ⇒ Object
suggest a user to become a friend. If the operation succeeds, the method returns true, else false
4 5 6 7 8 9 |
# File 'lib/amistad/mongo_friend_model.rb', line 4 def invite(user) return false if friendshiped_with?(user) or user == self or blocked?(user) pending_friend_ids << user.id user.pending_inverse_friend_ids << self.id self.save && user.save end |
#invited ⇒ Object
return the list of invited friends
32 33 34 |
# File 'lib/amistad/mongo_friend_model.rb', line 32 def invited self.class.find(friend_ids) end |
#invited?(user) ⇒ Boolean
checks if a current user invited given user
73 74 75 |
# File 'lib/amistad/mongo_friend_model.rb', line 73 def invited?(user) self.friend_ids.include?(user.id) or self.pending_friend_ids.include?(user.id) end |
#invited_by ⇒ Object
return the list of friends who invited
37 38 39 |
# File 'lib/amistad/mongo_friend_model.rb', line 37 def invited_by self.class.find(inverse_friend_ids) end |
#invited_by?(user) ⇒ Boolean
checks if a current user received invitation from given user
68 69 70 |
# File 'lib/amistad/mongo_friend_model.rb', line 68 def invited_by?(user) user.friend_ids.include?(self.id) or user.pending_friend_ids.include?(self.id) end |
#pending_invited ⇒ Object
return the list of pending invited friends
42 43 44 |
# File 'lib/amistad/mongo_friend_model.rb', line 42 def pending_invited self.class.find(pending_friend_ids) end |
#pending_invited_by ⇒ Object
return the list of pending friends who invited
47 48 49 |
# File 'lib/amistad/mongo_friend_model.rb', line 47 def pending_invited_by self.class.find(pending_inverse_friend_ids) end |
#remove_friendship(user) ⇒ Object
deletes a friendship
78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/amistad/mongo_friend_model.rb', line 78 def remove_friendship(user) friend_ids.delete(user.id) user.inverse_friend_ids.delete(self.id) inverse_friend_ids.delete(user.id) user.friend_ids.delete(self.id) pending_friend_ids.delete(user.id) user.pending_inverse_friend_ids.delete(self.id) pending_inverse_friend_ids.delete(user.id) user.pending_friend_ids.delete(self.id) self.save && user.save end |
#total_blocked ⇒ Object
total # of blockades and blockedes_by without association loading
141 142 143 |
# File 'lib/amistad/mongo_friend_model.rb', line 141 def total_blocked (blocked_friend_ids + blocked_inverse_friend_ids + blocked_pending_inverse_friend_ids).count end |
#total_friends ⇒ Object
total # of invited and invited_by without association loading
27 28 29 |
# File 'lib/amistad/mongo_friend_model.rb', line 27 def total_friends (friend_ids + inverse_friend_ids).count end |
#unblock(user) ⇒ Object
unblocks a friendship
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/amistad/mongo_friend_model.rb', line 112 def unblock(user) if blocked_inverse_friend_ids.include?(user.id) blocked_inverse_friend_ids.delete(user.id) user.blocked_friend_ids.delete(self.id) inverse_friend_ids << user.id user.friend_ids << self.id elsif blocked_pending_inverse_friend_ids.include?(user.id) blocked_pending_inverse_friend_ids.delete(user.id) pending_inverse_friend_ids << user.id user.pending_friend_ids << self.id elsif blocked_friend_ids.include?(user.id) blocked_friend_ids.delete(user.id) user.blocked_inverse_friend_ids.delete(self.id) friend_ids << user.id user.inverse_friend_ids << self.id else return false end self.save && user.save end |