class Danger::AssignStrategies::Strategy

Attributes

client[RW]
excluded_users[RW]
group_name[RW]
mr_iid[RW]
project_id[RW]

Public Class Methods

new(client:, project:, mr_iid:) click to toggle source
# File lib/gitlab_reviewbot/strategies/strategy.rb, line 12
def initialize(client:, project:, mr_iid:)
  @client = client
  @project_id = project
  @mr_iid = mr_iid
  @excluded_users = []
end

Public Instance Methods

assign!(amount) click to toggle source
# File lib/gitlab_reviewbot/strategies/strategy.rb, line 19
def assign!(amount)
  currently_assigned = fetch_assigned_reviewers
  return [] if (amount - currently_assigned.length) <= 0

  to_be_assigned = assignees(amount - currently_assigned.length)
  all_assignees = currently_assigned + to_be_assigned

  client.assign_mr_to_users(project_id, mr_iid, all_assignees)
  all_assignees.map(&:username)
end
assignees(amount) click to toggle source
# File lib/gitlab_reviewbot/strategies/strategy.rb, line 30
def assignees(amount)
  raise "To be implemented in the subclasses"
end
fetch_assigned_reviewers() click to toggle source
# File lib/gitlab_reviewbot/strategies/strategy.rb, line 38
def fetch_assigned_reviewers
  client.fetch_mr_reviewers(@project_id, @mr_iid)
end
fetch_author() click to toggle source
# File lib/gitlab_reviewbot/strategies/strategy.rb, line 34
def fetch_author
  client.fetch_author_for_mr(@project_id, @mr_iid)
end
fetch_users_in_group() click to toggle source
# File lib/gitlab_reviewbot/strategies/strategy.rb, line 42
def fetch_users_in_group
  excluded = @excluded_users.map do |u|
    server_user = client.find_user_with_username(u).first
    raise "ERROR: Invalid username #{u} among excluded_users" if server_user.nil?
    server_user
  end
  client.fetch_users_for_group(@group_name).filter { |u| !excluded.include? u }
end