6157d8b4bd
If you're added as an assignee, or if you comment, then your watching preference will be toggled on.
36 lines
1.0 KiB
Ruby
36 lines
1.0 KiB
Ruby
module Bubble::Assignable
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
has_many :assignments, dependent: :delete_all
|
|
has_many :assignees, through: :assignments
|
|
|
|
scope :unassigned, -> { where.missing :assignments }
|
|
scope :assigned_to, ->(users) { joins(:assignments).where(assignments: { assignee: users }).distinct }
|
|
scope :assigned_by, ->(users) { joins(:assignments).where(assignments: { assigner: users }).distinct }
|
|
end
|
|
|
|
def toggle_assignment(user)
|
|
assigned_to?(user) ? unassign(user) : assign(user)
|
|
end
|
|
|
|
def assigned_to?(user)
|
|
assignments.exists? assignee: user
|
|
end
|
|
|
|
private
|
|
def assign(user)
|
|
assignments.create! assignee: user, assigner: Current.user
|
|
set_watching(user, true)
|
|
|
|
track_event :assigned, assignee_ids: [ user.id ]
|
|
rescue ActiveRecord::RecordNotUnique
|
|
# Already assigned
|
|
end
|
|
|
|
def unassign(user)
|
|
destructions = assignments.destroy_by assignee: user
|
|
track_event :unassigned, assignee_ids: [ user.id ] if destructions.any?
|
|
end
|
|
end
|