Class: Gitlab::ClientHelper

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab_reviewbot/gitlab.rb

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ ClientHelper

Returns a new instance of ClientHelper.



23
24
25
# File 'lib/gitlab_reviewbot/gitlab.rb', line 23

def initialize(client)
  @client = client
end

Instance Method Details

#assign_mr_to_users(project_id, mr_iid, users) ⇒ Object



54
55
56
57
58
# 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, "reviewer_ids" => user_ids)

end

#fetch_author_for_mr(project_id, mr_iid) ⇒ Object



60
61
62
63
# File 'lib/gitlab_reviewbot/gitlab.rb', line 60

def fetch_author_for_mr(project_id, mr_iid)
  res = @client.merge_request(project_id, mr_iid)
  User.new(res.author.id, res.author.name)
end

#fetch_mr_reviewers(project_id, mr_iid) ⇒ Object



69
70
71
# File 'lib/gitlab_reviewbot/gitlab.rb', line 69

def fetch_mr_reviewers(project_id, mr_iid)
  @client.merge_request(project_id, mr_iid).reviewers.map { |u| User.new(u["id"], u["username"]) }
end

#fetch_mrs_requiring_review(project_id) ⇒ Object



40
41
42
# 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) ⇒ Object



44
45
46
47
48
49
50
51
52
# 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, :show_seat_info => true)

  developer_access_level = 30
  res.select { |u| u.state == "active" && u.access_level >= developer_access_level && u.is_using_seat }.map { |u| User.new(u.id, u.username) }
end

#find_user_with_username(username) ⇒ Object



65
66
67
# 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) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
# 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.reviewers - assignees_with_review(project_id, mr.iid, mr.reviewers)}
  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