Module: Amistad::ActiveRecordFriendModel
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/amistad/active_record_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.
-
#find_any_friendship_with(user) ⇒ Object
returns friendship with given user or nil.
-
#friend_with?(user) ⇒ Boolean
checks if a user is a friend.
-
#friends ⇒ Object
returns the list of approved friends.
-
#invite(user) ⇒ Object
suggest a user to become a friend.
-
#invited?(user) ⇒ Boolean
checks if a current user invited given user.
-
#invited_by?(user) ⇒ Boolean
checks if a current user received invitation from given user.
-
#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
46 47 48 49 50 |
# File 'lib/amistad/active_record_friend_model.rb', line 46 def approve(user) friendship = find_any_friendship_with(user) return false if friendship.nil? || invited?(user) friendship.update_attribute(:pending, false) end |
#block(user) ⇒ Object
blocks a friendship
77 78 79 80 81 |
# File 'lib/amistad/active_record_friend_model.rb', line 77 def block(user) friendship = find_any_friendship_with(user) return false if friendship.nil? || !friendship.can_block?(self) friendship.update_attribute(:blocker, self) end |
#blocked ⇒ Object
returns the list of blocked friends
91 92 93 94 |
# File 'lib/amistad/active_record_friend_model.rb', line 91 def blocked self.reload self.blockades + self.blockades_by end |
#blocked?(user) ⇒ Boolean
checks if a user is blocked
102 103 104 |
# File 'lib/amistad/active_record_friend_model.rb', line 102 def blocked?(user) blocked.include?(user) end |
#common_friends_with(user) ⇒ Object
return the list of the ones among its friends which are also friend with the given use
131 132 133 |
# File 'lib/amistad/active_record_friend_model.rb', line 131 def common_friends_with(user) self.friends & user.friends end |
#connected_with?(user) ⇒ Boolean
checks if a current user is connected to given user
112 113 114 |
# File 'lib/amistad/active_record_friend_model.rb', line 112 def connected_with?(user) find_any_friendship_with(user).present? end |
#find_any_friendship_with(user) ⇒ Object
returns friendship with given user or nil
136 137 138 139 140 141 142 |
# File 'lib/amistad/active_record_friend_model.rb', line 136 def find_any_friendship_with(user) friendship = Amistad.friendship_class.where(:friendable_id => self.id, :friend_id => user.id).first if friendship.nil? friendship = Amistad.friendship_class.where(:friendable_id => user.id, :friend_id => self.id).first end friendship end |
#friend_with?(user) ⇒ Boolean
checks if a user is a friend
107 108 109 |
# File 'lib/amistad/active_record_friend_model.rb', line 107 def friend_with?(user) friends.include?(user) end |
#friends ⇒ Object
returns the list of approved friends
62 63 64 65 66 67 68 69 |
# File 'lib/amistad/active_record_friend_model.rb', line 62 def friends friendship_model = Amistad::Friendships.const_get(:"#{Amistad.friendship_model}") approved_friendship = friendship_model.where(friendable_id: id, pending: false, blocker_id: nil).select(:friend_id).to_sql approved_inverse_friendship = friendship_model.where(friend_id: id, pending: false, blocker_id: nil).select(:friendable_id).to_sql self.class.where("id in (#{approved_friendship}) OR id in (#{approved_inverse_friendship})") end |
#invite(user) ⇒ Object
suggest a user to become a friend. If the operation succeeds, the method returns true, else false
40 41 42 43 |
# File 'lib/amistad/active_record_friend_model.rb', line 40 def invite(user) return false if user == self || find_any_friendship_with(user) Amistad.friendship_class.new{ |f| f.friendable = self ; f.friend = user }.save end |
#invited?(user) ⇒ Boolean
checks if a current user invited given user
124 125 126 127 128 |
# File 'lib/amistad/active_record_friend_model.rb', line 124 def invited?(user) friendship = find_any_friendship_with(user) return false if friendship.nil? friendship.friend_id == user.id end |
#invited_by?(user) ⇒ Boolean
checks if a current user received invitation from given user
117 118 119 120 121 |
# File 'lib/amistad/active_record_friend_model.rb', line 117 def invited_by?(user) friendship = find_any_friendship_with(user) return false if friendship.nil? friendship.friendable_id == user.id end |
#remove_friendship(user) ⇒ Object
deletes a friendship
53 54 55 56 57 58 59 |
# File 'lib/amistad/active_record_friend_model.rb', line 53 def remove_friendship(user) friendship = find_any_friendship_with(user) return false if friendship.nil? friendship.destroy self.reload && user.reload if friendship.destroyed? true end |
#total_blocked ⇒ Object
total # of blockades and blockedes_by without association loading
97 98 99 |
# File 'lib/amistad/active_record_friend_model.rb', line 97 def total_blocked self.blockades(false).count + self.blockades_by(false).count end |
#total_friends ⇒ Object
total # of invited and invited_by without association loading
72 73 74 |
# File 'lib/amistad/active_record_friend_model.rb', line 72 def total_friends self.invited(false).count + self.invited_by(false).count end |
#unblock(user) ⇒ Object
unblocks a friendship
84 85 86 87 88 |
# File 'lib/amistad/active_record_friend_model.rb', line 84 def unblock(user) friendship = find_any_friendship_with(user) return false if friendship.nil? || !friendship.can_unblock?(self) friendship.update_attribute(:blocker, nil) end |