diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-10-31 22:19:14 +0300 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-11-17 20:10:12 +0300 |
commit | 9a2157a64684a32ba815cd33b0f48cd7ad3945a5 (patch) | |
tree | af979242a62d182c84a2f42e1941c87fb1fa5d8c /app/models/concerns/subscribable.rb | |
parent | de629eaa80f16363c1a651e546b4a73d7071df0a (diff) |
Refactoring Subscribable concern to accept a project
Diffstat (limited to 'app/models/concerns/subscribable.rb')
-rw-r--r-- | app/models/concerns/subscribable.rb | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/app/models/concerns/subscribable.rb b/app/models/concerns/subscribable.rb index 083257f1005..2210a210f33 100644 --- a/app/models/concerns/subscribable.rb +++ b/app/models/concerns/subscribable.rb @@ -12,39 +12,45 @@ module Subscribable has_many :subscriptions, dependent: :destroy, as: :subscribable end - def subscribed?(user) - if subscription = subscriptions.find_by_user_id(user.id) + def subscribed?(user, to_project = nil) + if subscription = subscriptions.find_by(user: user, project: (to_project || project)) subscription.subscribed else - subscribed_without_subscriptions?(user) + subscribed_without_subscriptions?(user, to_project) end end # Override this method to define custom logic to consider a subscribable as # subscribed without an explicit subscription record. - def subscribed_without_subscriptions?(user) + def subscribed_without_subscriptions?(user, to_project = nil) false end - def subscribers - subscriptions.where(subscribed: true).map(&:user) + def subscribers(to_project = nil) + subscriptions.where(project: (to_project || project), subscribed: true).map(&:user) end - def toggle_subscription(user) - subscriptions. - find_or_initialize_by(user_id: user.id). - update(subscribed: !subscribed?(user)) + def toggle_subscription(user, to_project = nil) + subscribed = subscribed?(user, (to_project || project)) + + find_or_initialize_subscription(user, to_project). + update(subscribed: !subscribed) end - def subscribe(user) - subscriptions. - find_or_initialize_by(user_id: user.id). + def subscribe(user, to_project = nil) + find_or_initialize_subscription(user, to_project). update(subscribed: true) end - def unsubscribe(user) - subscriptions. - find_or_initialize_by(user_id: user.id). + def unsubscribe(user, to_project = nil) + find_or_initialize_subscription(user, to_project). update(subscribed: false) end + + private + + def find_or_initialize_subscription(user, to_project = nil) + subscriptions. + find_or_initialize_by(user_id: user.id, project_id: (to_project || project).id) + end end |