class Danger::DangerPrReviewers

The idea of the plugin is to let the machine rules the PR reviewers decision =)

@example Assigns reviewers for the PR

pr_reviewers.run

@see conichiGMBH/danger-pr_reviewers @tags github, review, mention

Public Instance Methods

run(developers, designers, number_of_code_reviewers = 1, number_of_design_reviewers = 1) click to toggle source

Request a review from potential reviewers.

@param [Integer] number_of_code_reviewers

Maximum number of developers to request a review from, default is 1.

@param [Integer] number_of_design_reviewers

Maximum number of designers to request a review from, default is 1.

@param [Array<String>] developers

List of developers GitHub's usernames.

@param [Array<String>] designers

List of designers GitHub's usernames.

@return [void]

# File lib/pr_reviewers/plugin.rb, line 28
def run(developers, designers, number_of_code_reviewers = 1, number_of_design_reviewers = 1)
  unless @dangerfile.github.pr_author.nil?
    developers -= [@dangerfile.github.pr_author]
    designers -= [@dangerfile.github.pr_author]
  end
  reviewers = find_developers(number_of_code_reviewers, developers)
  reviewers += find_designers(number_of_design_reviewers, designers) if need_design_review?
  request_review(reviewers)
  message("Danger has assigned @#{reviewers.join(' @')} to review the PR", sticky: true)
end

Private Instance Methods

find_designers(number_of_design_reviewers, designers) click to toggle source
# File lib/pr_reviewers/plugin.rb, line 45
def find_designers(number_of_design_reviewers, designers)
  designers.sample([number_of_design_reviewers, designers.count].min)
end
find_developers(number_of_code_reviewers, developers) click to toggle source
# File lib/pr_reviewers/plugin.rb, line 41
def find_developers(number_of_code_reviewers, developers)
  developers.sample([number_of_code_reviewers, developers.count].min)
end
need_design_review?() click to toggle source
# File lib/pr_reviewers/plugin.rb, line 49
def need_design_review?
  pr_body = @dangerfile.github.pr_body
  return true if pr_body =~ /<img([\w\W]+?)>/
  return true if pr_body =~ %r{\[.*\]\((https|http):\/\/.*\.(PNG|png|jpeg|jpg)\)}
  false
end
request_review(reviewers) click to toggle source
# File lib/pr_reviewers/plugin.rb, line 56
def request_review(reviewers)
  github = @dangerfile.env.request_source
  pr_id = @dangerfile.env.ci_source.pull_request_id
  repo = @dangerfile.env.ci_source.repo_slug
  github.client.request_pull_request_review(repo, pr_id, reviewers)
end