summaryrefslogtreecommitdiff
path: root/app/models/concerns/subscribable.rb
diff options
context:
space:
mode:
authorDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-11-15 19:59:12 -0200
committerDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-11-17 15:10:13 -0200
commit1af4d29b9424b2c072a16ed37d4f5d9368399884 (patch)
tree8abe698db05f7743f58983847e3f30ebaa27c21c /app/models/concerns/subscribable.rb
parent733fbebe0e888290c3973f1655324b1648409478 (diff)
downloadgitlab-ce-1af4d29b9424b2c072a16ed37d4f5d9368399884.tar.gz
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.rb27
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))