Skip to content

Commit 87dcdb9

Browse files
committed
Merge pull request #63 from cltweedie/default-reviewers
Default Reviewers
2 parents dd3ea6f + 3198e1e commit 87dcdb9

File tree

4 files changed

+134
-1
lines changed

4 files changed

+134
-1
lines changed

lib/bitbucket_rest_api/api.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ def method_missing(method, *args, &block) # :nodoc:
7979
end
8080
end
8181

82+
def update_and_validate_user_repo_params(user_name, repo_name=nil)
83+
_update_user_repo_params(user_name, repo_name)
84+
_validate_user_repo_params(user, repo) unless user? && repo?
85+
end
86+
8287
def _update_user_repo_params(user_name, repo_name=nil) # :nodoc:
8388
self.user = user_name || self.user
8489
self.repo = repo_name || self.repo

lib/bitbucket_rest_api/repos.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ class Repos < API
1515
:Commits => 'commits',
1616
:Download => 'download',
1717
:Webhooks => 'webhooks',
18-
:PullRequest => 'pull_request'
18+
:PullRequest => 'pull_request',
19+
:DefaultReviewers => 'default_reviewers'
1920

2021
DEFAULT_REPO_OPTIONS = {
2122
"website" => "",
@@ -83,6 +84,10 @@ def pull_request
8384
@pull_request ||= ApiFactory.new 'Repos::PullRequest'
8485
end
8586

87+
def default_reviewers
88+
@default_reviewers ||= ApiFactory.new 'Repos::DefaultReviewers'
89+
end
90+
8691
# List branches
8792
#
8893
# = Examples
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
module BitBucket
2+
class Repos::DefaultReviewers < API
3+
4+
# List default reviewers
5+
#
6+
# = Examples
7+
# bitbucket = BitBucket.new
8+
# bitbucket.repos.default_reviewers.list 'user-name', 'repo-name'
9+
# bitbucket.repos.default_reviewers.list 'user-name', 'repo-name' { |reviewer| ... }
10+
#
11+
def list(user_name, repo_name, params={})
12+
update_and_validate_user_repo_params(user_name, repo_name)
13+
normalize! params
14+
15+
response = get_request("/2.0/repositories/#{user_name}/#{repo_name}/default-reviewers", params)
16+
return response unless block_given?
17+
response.each { |el| yield el }
18+
end
19+
alias :all :list
20+
21+
# Get a default reviewer's info
22+
#
23+
# = Examples
24+
# bitbucket = BitBucket.new
25+
# bitbucket.repos.default_reviewers.get 'user-name', 'repo-name', 'reviewer-username'
26+
#
27+
def get(user_name, repo_name, reviewer_username, params={})
28+
update_and_validate_user_repo_params(user_name, repo_name)
29+
normalize! params
30+
31+
get_request("/2.0/repositories/#{user_name}/#{repo_name}/default-reviewers/#{reviewer_username}", params)
32+
end
33+
34+
# Add a user to the default-reviewers list for the repo
35+
#
36+
# = Examples
37+
# bitbucket = BitBucket.new
38+
# bitbucket.repos.default_reviewers.add 'user-name', 'repo-name', 'reviewer-username'
39+
#
40+
def add(user_name, repo_name, reviewer_username, params={})
41+
update_and_validate_user_repo_params(user_name, repo_name)
42+
normalize! params
43+
44+
put_request("/2.0/repositories/#{user_name}/#{repo_name}/default-reviewers/#{reviewer_username}", params)
45+
end
46+
47+
# Remove a user from the default-reviewers list for the repo
48+
#
49+
# = Examples
50+
# bitbucket = BitBucket.new
51+
# bitbucket.repos.default_reviewers.remove 'user-name', 'repo-name', 'reviewer-username'
52+
#
53+
def remove(user_name, repo_name, reviewer_username, params={})
54+
update_and_validate_user_repo_params(user_name, repo_name)
55+
normalize! params
56+
delete_request("/2.0/repositories/#{user_name}/#{repo_name}/default-reviewers/#{reviewer_username}", params)
57+
end
58+
end
59+
end
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
require 'spec_helper'
2+
3+
describe BitBucket::Repos::DefaultReviewers do
4+
subject { described_class.new }
5+
describe '#list' do
6+
before do
7+
expect(subject).to receive(:request).with(
8+
:get,
9+
'/2.0/repositories/mock_user/mock_repo/default-reviewers',
10+
{},
11+
{}
12+
)
13+
end
14+
15+
it 'makes a GET request for all default reviewers belonging to the repo' do
16+
subject.list('mock_user', 'mock_repo')
17+
end
18+
end
19+
20+
describe '#get' do
21+
before do
22+
expect(subject).to receive(:request).with(
23+
:get,
24+
'/2.0/repositories/mock_user/mock_repo/default-reviewers/mock_reviewer',
25+
{},
26+
{}
27+
)
28+
end
29+
30+
it 'makes a GET request for a default reviewer by username' do
31+
subject.get('mock_user', 'mock_repo', 'mock_reviewer')
32+
end
33+
end
34+
35+
describe '#add' do
36+
before do
37+
expect(subject).to receive(:request).with(
38+
:put,
39+
'/2.0/repositories/mock_user/mock_repo/default-reviewers/mock_reviewer',
40+
{},
41+
{}
42+
)
43+
end
44+
45+
it 'makes a PUT request to add the new reviewer to the default reviewers list' do
46+
subject.add('mock_user', 'mock_repo', 'mock_reviewer')
47+
end
48+
end
49+
50+
describe '#remove' do
51+
before do
52+
expect(subject).to receive(:request).with(
53+
:delete,
54+
'/2.0/repositories/mock_user/mock_repo/default-reviewers/mock_reviewer',
55+
{},
56+
{}
57+
)
58+
end
59+
60+
it 'makes a DELETE request to remove a reviewer from the list' do
61+
subject.remove('mock_user', 'mock_repo', 'mock_reviewer')
62+
end
63+
end
64+
end

0 commit comments

Comments
 (0)