class Gitlab::ClientHelper
Public Class Methods
new(client)
click to toggle source
# File lib/gitlab_reviewbot/gitlab.rb, line 23 def initialize(client) @client = client end
Public Instance Methods
assign_mr_to_users(project_id, mr_iid, users)
click to toggle source
# File lib/gitlab_reviewbot/gitlab.rb, line 54 def assign_mr_to_users(project_id, mr_iid, users) user_ids = users.map(&:id) @client.update_merge_request(project_id, mr_iid, "assignee_ids" => user_ids) end
fetch_mr_reviewers(project_id, mr_iid)
click to toggle source
# File lib/gitlab_reviewbot/gitlab.rb, line 69 def fetch_mr_reviewers(project_id, mr_iid) @client.merge_request(project_id, mr_iid).assignees.map { |u| User.new(u["id"], u["username"]) } end
fetch_mrs_requiring_review(project_id)
click to toggle source
# File lib/gitlab_reviewbot/gitlab.rb, line 40 def fetch_mrs_requiring_review(project_id) @client.merge_requests(project_id, state: "opened", per_page: "100") end
fetch_users_for_group(group_name)
click to toggle source
# File lib/gitlab_reviewbot/gitlab.rb, line 44 def fetch_users_for_group(group_name) group_id = search_group_with_path(group_name) return nil if group_id.nil? res = @client.group_members(group_id, :per_page => 100) developer_access_level = 30 res.select { |u| u.state == "active" && u.access_level >= developer_access_level }.map { |u| User.new(u.id, u.username) } end
find_user_with_username(username)
click to toggle source
# File lib/gitlab_reviewbot/gitlab.rb, line 65 def find_user_with_username(username) @client.users({ username: username }).map { |u| User.new(u.id, u.username) } end
users_with_pending_mr_review(project_id)
click to toggle source
# File lib/gitlab_reviewbot/gitlab.rb, line 27 def users_with_pending_mr_review(project_id) outstanding_mrs = fetch_mrs_requiring_review(project_id) all_assignees = outstanding_mrs.reduce([]) { |acc, mr| acc + mr.assignees - assignees_with_review(project_id, mr.iid, mr.assignees)} assignees_id_map = all_assignees.each_with_object({}) do |a, acc| aid = a["id"] ausername = a["username"] assignee = acc[aid] || User.new(aid, ausername) assignee.review_count += 1 acc[aid] = assignee end assignees_id_map.values end
Private Instance Methods
assignees_with_review(project_id, mr_iid, gusers)
click to toggle source
# File lib/gitlab_reviewbot/gitlab.rb, line 87 def assignees_with_review(project_id, mr_iid, gusers) approvals = @client.merge_request_approval_state(project_id, mr_iid) approved_by = approvals.rules.reduce([]) { |acc, r| acc + r['approved_by'] } gusers.filter { |u| approved_by.index { |au| au['id'] == u['id'] } != nil } end
search_group_with_path(group_name)
click to toggle source
# File lib/gitlab_reviewbot/gitlab.rb, line 75 def search_group_with_path(group_name) short_name = group_name.split("/").last res = @client.group_search(short_name) res = res.find { |i| i.full_path == group_name } if res.nil? nil else res.id end end