module Pghub::AutoAssign
Constants
- VERSION
Public Class Methods
post(issue_path, opened_pr_user)
click to toggle source
# File lib/pghub/auto_assign.rb, line 21 def post(issue_path, opened_pr_user) assignees = select_members(Pghub.config.num_of_assignees_per_team, opened_pr_user, [opened_pr_user]) reviewers = select_members(Pghub.config.num_of_reviewers_per_team, opened_pr_user) assign(issue_path, assignees) request_review(issue_path, reviewers) end
Private Class Methods
all_members()
click to toggle source
# File lib/pghub/auto_assign.rb, line 30 def all_members teams_data.each_with_object({}) do |team, members| members[team[:name].to_sym] = team_members(team[:id]) end end
assign(issue_path, assignees)
click to toggle source
# File lib/pghub/auto_assign.rb, line 77 def assign(issue_path, assignees) connection.post do |req| req.url request_url("#{issue_path}/assignees") req.headers['Content-Type'] = 'application/json' req.body = { assignees: assignees }.to_json end end
request_review(issue_path, reviewers)
click to toggle source
# File lib/pghub/auto_assign.rb, line 85 def request_review(issue_path, reviewers) pr_path = issue_path.gsub('issues', 'pulls') connection.post do |req| req.url request_url("#{pr_path}/requested_reviewers") req.headers['Content-Type'] = 'application/json' req.body = { reviewers: reviewers }.to_json end end
request_url(path)
click to toggle source
# File lib/pghub/auto_assign.rb, line 95 def request_url(path) "/repos/#{Pghub.config.github_organization}/#{path}?access_token=#{Pghub.config.github_access_token}" end
select_members(num_of_members_per_team, opened_pr_user, members = [])
click to toggle source
# File lib/pghub/auto_assign.rb, line 62 def select_members(num_of_members_per_team, opened_pr_user, members = []) return members if num_of_members_per_team.empty? num_of_members_per_team.each do |team, number| team_members = all_members[team.to_sym] raise TooManyNumOfMembersError, team if number > team_members.length team_members.delete(opened_pr_user) selected_members = team_members.sample(number) members += selected_members end members end
team_members(team_id)
click to toggle source
# File lib/pghub/auto_assign.rb, line 55 def team_members(team_id) response = connection.get("/teams/#{team_id}/members?access_token=#{Pghub.config.github_access_token}") body = JSON.parse(response.body).map(&:with_indifferent_access) body.map { |h| h[:login] } end
teams_data()
click to toggle source
# File lib/pghub/auto_assign.rb, line 36 def teams_data response = connection.get("/orgs/#{Pghub.config.github_organization}/teams?access_token=#{Pghub.config.github_access_token}") body = JSON.parse(response.body).map(&:with_indifferent_access) team_names = body.map { |data| data[:name] } validate_teams(team_names) body.map { |data| { id: data[:id], name: data[:name] } } end
validate_teams(valid_teams)
click to toggle source
# File lib/pghub/auto_assign.rb, line 46 def validate_teams(valid_teams) Pghub.config.num_of_assignees_per_team.each_key do |team| raise UnknownTeamError, "Unknown #{team}" unless valid_teams.include?(team.to_s) end Pghub.config.num_of_reviewers_per_team.each_key do |team| raise UnknownTeamError, "Unknown #{team}" unless valid_teams.include?(team.to_s) end end