Class: Gitlab::Client

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

Instance Method Summary collapse

Instance Method Details

#assign_mr_to_users(project_id, mr_iid, users) ⇒ Object



31
32
33
34
# File 'lib/gitlab_reviewbot/gitlab.rb', line 31

def assign_mr_to_users(project_id, mr_iid, users)
  user_ids = users.map(&:id)
  update_merge_request(project_id, mr_iid, 'assignee_ids' => user_ids)
end

#fetch_author_for_mr(project_id, mr_iid) ⇒ Object



36
37
38
39
# File 'lib/gitlab_reviewbot/gitlab.rb', line 36

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

#fetch_mr_reviewers(project_id, mr_iid) ⇒ Object



63
64
65
# File 'lib/gitlab_reviewbot/gitlab.rb', line 63

def fetch_mr_reviewers(project_id, mr_iid)
  merge_request(project_id, mr_iid).assignees.map { |u| User.new(u['id'], u['username']) }
end

#fetch_mrs_requiring_review(project_id) ⇒ Object



41
42
43
# File 'lib/gitlab_reviewbot/gitlab.rb', line 41

def fetch_mrs_requiring_review(project_id)
  merge_requests(project_id, :state => 'opened', :per_page => '100').select { |mr| mr.merge_status != 'can_be_merged' }
end

#fetch_users_for_group(group_name) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/gitlab_reviewbot/gitlab.rb', line 21

def fetch_users_for_group(group_name)
  group_id = search_group(group_name)
  return nil if group_id.nil?

  res = group_members(group_id)

  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) ⇒ Object



45
46
47
# File 'lib/gitlab_reviewbot/gitlab.rb', line 45

def find_user_with_username(username)
  users({:username => username}).map { |u| User.new(u.id, u.username) }
end

#users_with_pending_mr_review(project_id) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/gitlab_reviewbot/gitlab.rb', line 49

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_id_map = all_assignees.reduce({}) { |acc, a|
    aid = a['id']
    ausername = a['username']
    assignee = acc[aid] || User.new(aid, ausername)
    assignee.review_count += 1
    acc[aid] = assignee
    acc
  }
  assignees_id_map.values
end