diff options
Diffstat (limited to 'app/services/issuable/process_assignees.rb')
-rw-r--r-- | app/services/issuable/process_assignees.rb | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/app/services/issuable/process_assignees.rb b/app/services/issuable/process_assignees.rb new file mode 100644 index 00000000000..c9c6b0bed85 --- /dev/null +++ b/app/services/issuable/process_assignees.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +# This follows the rules specified in the specs. +# See spec/requests/api/graphql/mutations/merge_requests/set_assignees_spec.rb + +module Issuable + class ProcessAssignees + def initialize(assignee_ids:, add_assignee_ids:, remove_assignee_ids:, existing_assignee_ids: nil, extra_assignee_ids: nil) + @assignee_ids = assignee_ids + @add_assignee_ids = add_assignee_ids + @remove_assignee_ids = remove_assignee_ids + @existing_assignee_ids = existing_assignee_ids || [] + @extra_assignee_ids = extra_assignee_ids || [] + end + + def execute + if assignee_ids.blank? + updated_new_assignees = new_assignee_ids + updated_new_assignees |= add_assignee_ids if add_assignee_ids + updated_new_assignees -= remove_assignee_ids if remove_assignee_ids + else + updated_new_assignees = assignee_ids + end + + updated_new_assignees.uniq + end + + private + + attr_accessor :assignee_ids, :add_assignee_ids, :remove_assignee_ids, :existing_assignee_ids, :extra_assignee_ids + + def new_assignee_ids + existing_assignee_ids | extra_assignee_ids + end + end +end |