diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-11-16 00:59:12 +0300 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-11-17 20:10:13 +0300 |
commit | 1af4d29b9424b2c072a16ed37d4f5d9368399884 (patch) | |
tree | 8abe698db05f7743f58983847e3f30ebaa27c21c /app/models/concerns/subscribable.rb | |
parent | 733fbebe0e888290c3973f1655324b1648409478 (diff) |
Allow users to subscribe to a group label at group or project level
Diffstat (limited to 'app/models/concerns/subscribable.rb')
-rw-r--r-- | app/models/concerns/subscribable.rb | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/app/models/concerns/subscribable.rb b/app/models/concerns/subscribable.rb index 0723db548d8..83daa9b1a64 100644 --- a/app/models/concerns/subscribable.rb +++ b/app/models/concerns/subscribable.rb @@ -33,22 +33,41 @@ module Subscribable end def toggle_subscription(user, project = nil) + unsubscribe_from_other_levels(user, project) + find_or_initialize_subscription(user, project). update(subscribed: !subscribed?(user, project)) end def subscribe(user, project = nil) - find_or_initialize_subscription(user, project). - update(subscribed: true) + unsubscribe_from_other_levels(user, project) + + find_or_initialize_subscription(user, project) + .update(subscribed: true) end def unsubscribe(user, project = nil) - find_or_initialize_subscription(user, project). - update(subscribed: false) + unsubscribe_from_other_levels(user, project) + + find_or_initialize_subscription(user, project) + .update(subscribed: false) end private + def unsubscribe_from_other_levels(user, project) + other_subscriptions = subscriptions.where(user: user) + + other_subscriptions = + if project.blank? + other_subscriptions.where.not(project: nil) + else + other_subscriptions.where(project: nil) + end + + other_subscriptions.update_all(subscribed: false) + end + def find_or_initialize_subscription(user, project) subscriptions. find_or_initialize_by(user_id: user.id, project_id: project.try(:id)) |