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
48 49 50 51 52 |
# File 'lib/amistad/active_record_friend_model.rb', line 48 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
91 92 93 94 95 |
# File 'lib/amistad/active_record_friend_model.rb', line 91 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
105 106 107 108 |
# File 'lib/amistad/active_record_friend_model.rb', line 105 def blocked self.reload self.blockades + self.blockades_by end |
#blocked?(user) ⇒ Boolean
checks if a user is blocked
116 117 118 |
# File 'lib/amistad/active_record_friend_model.rb', line 116 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
145 146 147 |
# File 'lib/amistad/active_record_friend_model.rb', line 145 def common_friends_with(user) self.friends & user.friends end |
#connected_with?(user) ⇒ Boolean
checks if a current user is connected to given user
126 127 128 |
# File 'lib/amistad/active_record_friend_model.rb', line 126 def connected_with?(user) find_any_friendship_with(user).present? end |
#find_any_friendship_with(user) ⇒ Object
returns friendship with given user or nil
150 151 152 153 154 155 156 |
# File 'lib/amistad/active_record_friend_model.rb', line 150 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
121 122 123 |
# File 'lib/amistad/active_record_friend_model.rb', line 121 def friend_with?(user) friends.include?(user) end |
#friends ⇒ Object
returns the list of approved friends
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/amistad/active_record_friend_model.rb', line 64 def friends friendship_model = Amistad::Friendships.const_get(:"#{Amistad.friendship_model}") approved_friendships = friendship_model.where{ ( friendable_id == my{id} ) & ( pending == false ) & ( blocker_id == nil ) } approved_inverse_friendships = friendship_model.where{ ( friend_id == my{id} ) & ( pending == false ) & ( blocker_id == nil ) } self.class.where{ ( id.in(approved_friendships.select{friend_id}) ) | ( id.in(approved_inverse_friendships.select{friendable_id}) ) } end |
#invite(user) ⇒ Object
suggest a user to become a friend. If the operation succeeds, the method returns true, else false
42 43 44 45 |
# File 'lib/amistad/active_record_friend_model.rb', line 42 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
138 139 140 141 142 |
# File 'lib/amistad/active_record_friend_model.rb', line 138 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
131 132 133 134 135 |
# File 'lib/amistad/active_record_friend_model.rb', line 131 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
55 56 57 58 59 60 61 |
# File 'lib/amistad/active_record_friend_model.rb', line 55 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
111 112 113 |
# File 'lib/amistad/active_record_friend_model.rb', line 111 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
86 87 88 |
# File 'lib/amistad/active_record_friend_model.rb', line 86 def total_friends self.invited(false).count + self.invited_by(false).count end |
#unblock(user) ⇒ Object
unblocks a friendship
98 99 100 101 102 |
# File 'lib/amistad/active_record_friend_model.rb', line 98 def unblock(user) friendship = find_any_friendship_with(user) return false if friendship.nil? || !friendship.can_unblock?(self) friendship.update_attribute(:blocker, nil) end |