codenamev_bitbucket_api 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +43 -0
- data/README.md +169 -0
- data/Rakefile +3 -0
- data/lib/bitbucket_rest_api/api/actions.rb +50 -0
- data/lib/bitbucket_rest_api/api/arguments.rb +248 -0
- data/lib/bitbucket_rest_api/api/config/property.rb +30 -0
- data/lib/bitbucket_rest_api/api/config/property_set.rb +118 -0
- data/lib/bitbucket_rest_api/api/config.rb +107 -0
- data/lib/bitbucket_rest_api/api/factory.rb +29 -0
- data/lib/bitbucket_rest_api/api.rb +242 -0
- data/lib/bitbucket_rest_api/authorization.rb +34 -0
- data/lib/bitbucket_rest_api/client/invitations.rb +16 -0
- data/lib/bitbucket_rest_api/client/issues/comments.rb +109 -0
- data/lib/bitbucket_rest_api/client/issues/components.rb +103 -0
- data/lib/bitbucket_rest_api/client/issues/milestones.rb +103 -0
- data/lib/bitbucket_rest_api/client/issues.rb +214 -0
- data/lib/bitbucket_rest_api/client/repos/changesets.rb +55 -0
- data/lib/bitbucket_rest_api/client/repos/following.rb +40 -0
- data/lib/bitbucket_rest_api/client/repos/keys.rb +88 -0
- data/lib/bitbucket_rest_api/client/repos/pull_requests/comments.rb +42 -0
- data/lib/bitbucket_rest_api/client/repos/pull_requests/commits.rb +24 -0
- data/lib/bitbucket_rest_api/client/repos/pull_requests.rb +199 -0
- data/lib/bitbucket_rest_api/client/repos/services.rb +104 -0
- data/lib/bitbucket_rest_api/client/repos/sources.rb +32 -0
- data/lib/bitbucket_rest_api/client/repos.rb +224 -0
- data/lib/bitbucket_rest_api/client/user.rb +96 -0
- data/lib/bitbucket_rest_api/client/users/account.rb +54 -0
- data/lib/bitbucket_rest_api/client/users.rb +14 -0
- data/lib/bitbucket_rest_api/client.rb +54 -0
- data/lib/bitbucket_rest_api/compatibility.rb +23 -0
- data/lib/bitbucket_rest_api/configuration.rb +59 -0
- data/lib/bitbucket_rest_api/connection.rb +61 -0
- data/lib/bitbucket_rest_api/constants.rb +50 -0
- data/lib/bitbucket_rest_api/core_ext/array.rb +17 -0
- data/lib/bitbucket_rest_api/core_ext/hash.rb +56 -0
- data/lib/bitbucket_rest_api/core_ext/ordered_hash.rb +107 -0
- data/lib/bitbucket_rest_api/deprecation.rb +39 -0
- data/lib/bitbucket_rest_api/error/bad_request.rb +12 -0
- data/lib/bitbucket_rest_api/error/client_error.rb +20 -0
- data/lib/bitbucket_rest_api/error/forbidden.rb +12 -0
- data/lib/bitbucket_rest_api/error/internal_server_error.rb +12 -0
- data/lib/bitbucket_rest_api/error/invalid_options.rb +18 -0
- data/lib/bitbucket_rest_api/error/not_found.rb +12 -0
- data/lib/bitbucket_rest_api/error/required_params.rb +18 -0
- data/lib/bitbucket_rest_api/error/service_error.rb +19 -0
- data/lib/bitbucket_rest_api/error/service_unavailable.rb +12 -0
- data/lib/bitbucket_rest_api/error/unauthorized.rb +12 -0
- data/lib/bitbucket_rest_api/error/unknown_value.rb +18 -0
- data/lib/bitbucket_rest_api/error/unprocessable_entity.rb +12 -0
- data/lib/bitbucket_rest_api/error/validations.rb +18 -0
- data/lib/bitbucket_rest_api/error.rb +35 -0
- data/lib/bitbucket_rest_api/ext/faraday.rb +38 -0
- data/lib/bitbucket_rest_api/middleware.rb +31 -0
- data/lib/bitbucket_rest_api/normalizer.rb +27 -0
- data/lib/bitbucket_rest_api/null_encoder.rb +25 -0
- data/lib/bitbucket_rest_api/page_iterator.rb +90 -0
- data/lib/bitbucket_rest_api/page_links.rb +33 -0
- data/lib/bitbucket_rest_api/paged_request.rb +29 -0
- data/lib/bitbucket_rest_api/pagination.rb +97 -0
- data/lib/bitbucket_rest_api/parameter_filter.rb +32 -0
- data/lib/bitbucket_rest_api/params_hash.rb +100 -0
- data/lib/bitbucket_rest_api/request/basic_auth.rb +33 -0
- data/lib/bitbucket_rest_api/request/jsonize.rb +51 -0
- data/lib/bitbucket_rest_api/request/oauth.rb +51 -0
- data/lib/bitbucket_rest_api/request/verbs.rb +53 -0
- data/lib/bitbucket_rest_api/request.rb +91 -0
- data/lib/bitbucket_rest_api/response/header.rb +68 -0
- data/lib/bitbucket_rest_api/response/helpers.rb +21 -0
- data/lib/bitbucket_rest_api/response/jsonize.rb +30 -0
- data/lib/bitbucket_rest_api/response/mashify.rb +24 -0
- data/lib/bitbucket_rest_api/response/raise_error.rb +31 -0
- data/lib/bitbucket_rest_api/response/xmlize.rb +26 -0
- data/lib/bitbucket_rest_api/response.rb +28 -0
- data/lib/bitbucket_rest_api/response_wrapper.rb +157 -0
- data/lib/bitbucket_rest_api/result.rb +68 -0
- data/lib/bitbucket_rest_api/users.rb +20 -0
- data/lib/bitbucket_rest_api/utils/url.rb +56 -0
- data/lib/bitbucket_rest_api/validations/format.rb +24 -0
- data/lib/bitbucket_rest_api/validations/presence.rb +30 -0
- data/lib/bitbucket_rest_api/validations/required.rb +24 -0
- data/lib/bitbucket_rest_api/validations/token.rb +43 -0
- data/lib/bitbucket_rest_api/validations.rb +25 -0
- data/lib/bitbucket_rest_api/version.rb +11 -0
- data/lib/bitbucket_rest_api.rb +136 -0
- metadata +238 -0
@@ -0,0 +1,199 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module BitBucket
|
4
|
+
class Client::Repos::PullRequests < API
|
5
|
+
|
6
|
+
# Load all the modules after initializing Repos to avoid superclass mismatch
|
7
|
+
require_all 'bitbucket_rest_api/client/repos/pull_requests',
|
8
|
+
'comments',
|
9
|
+
'commits'
|
10
|
+
|
11
|
+
REQUIRED_PULL_REQUEST_OPTIONS = %w[
|
12
|
+
title
|
13
|
+
source
|
14
|
+
]
|
15
|
+
|
16
|
+
VALID_PULL_REQUEST_PARAM_NAMES = %w[
|
17
|
+
title
|
18
|
+
description
|
19
|
+
source
|
20
|
+
destination
|
21
|
+
reviewers
|
22
|
+
close_source_branch
|
23
|
+
].freeze
|
24
|
+
|
25
|
+
VALID_PULL_REQUEST_STATE_VALUES = {
|
26
|
+
state: ['OPEN', 'MERGED', 'DECLINED']
|
27
|
+
}
|
28
|
+
|
29
|
+
@version = '2.0'
|
30
|
+
|
31
|
+
# Access to Client::Repos::PullRequests::Comments API
|
32
|
+
namespace :comments
|
33
|
+
namespace :commits
|
34
|
+
|
35
|
+
# List pull requests for a repository
|
36
|
+
#
|
37
|
+
# = Inputs
|
38
|
+
# <tt>:state</tt> - Optional - State of the pull request (OPEN, MERGED, DECLINED)
|
39
|
+
#
|
40
|
+
def list(*args)
|
41
|
+
arguments(args, required: [:user, :repo], optional: [:state])
|
42
|
+
params = arguments.params
|
43
|
+
user = arguments.user
|
44
|
+
repo = arguments.repo
|
45
|
+
|
46
|
+
params['state'] ||= 'OPEN'
|
47
|
+
# Bitbucket requires the state to be all caps or it returns all
|
48
|
+
params['state'] = params['state'].upcase
|
49
|
+
|
50
|
+
response = get_request("/repositories/#{user}/#{repo}/pullrequests/", params)
|
51
|
+
|
52
|
+
return response unless block_given?
|
53
|
+
response.each { |el| yield el }
|
54
|
+
end
|
55
|
+
alias :all :list
|
56
|
+
|
57
|
+
# Get a single pull request
|
58
|
+
#
|
59
|
+
# = Examples
|
60
|
+
# bitbucket = BitBucket.new
|
61
|
+
# bitbucket.repos.pull_requests.find 'user-name', 'repo-name', 'pull-request-id'
|
62
|
+
#
|
63
|
+
def get(*args)
|
64
|
+
arguments(args, required: [:user, :repo, :pull_request_id])
|
65
|
+
|
66
|
+
get_request("/repositories/#{arguments.user}/#{arguments.repo.downcase}/pullrequests/#{arguments.pull_request_id}", arguments.params)
|
67
|
+
end
|
68
|
+
|
69
|
+
alias :find :get
|
70
|
+
|
71
|
+
# Create a pull request
|
72
|
+
#
|
73
|
+
# = Inputs
|
74
|
+
# <tt>:title</tt> - Required string
|
75
|
+
# <tt>:description</tt> - Optional string
|
76
|
+
# <tt>:source</tt> - Required hash - The source branch name and/or repository (for example, { develop)
|
77
|
+
# * <tt>{ "branch": { "name": "REQUIRED branch_name" }, "repository": { "full_name": "owner/repo_slug" } }</tt>
|
78
|
+
# <tt>:destination</tt> - Optional hash - The destination branch or commit
|
79
|
+
# * <tt>{ "branch": { "name": "branch_name" }, "commit": { "hash": "name" } }</tt>
|
80
|
+
# <tt>:reviewers</tt> - Optional array - Users currently reviewiing the pull
|
81
|
+
# * <tt>[{ "username": "accountname" }]</tt>
|
82
|
+
#
|
83
|
+
# = Examples
|
84
|
+
# bitbucket = BitBucket.new
|
85
|
+
# bitbucket.repos.pull_requests.create 'user-name', 'repo-name',
|
86
|
+
# "title" => "Fixes a bug",
|
87
|
+
# "description" => "Fixes not being able to see anything.",
|
88
|
+
# "source" => { "branch" => { "name" => "bug-fixes" } },
|
89
|
+
# "destination" => { "branch" => { "name" => "master" } },
|
90
|
+
# "reviewers" => [ { "username" => "octocat" } ],
|
91
|
+
# "close_source_branch" => true
|
92
|
+
#
|
93
|
+
def create(*args)
|
94
|
+
arguments(args, required: [:user, :repo]) do
|
95
|
+
permit VALID_PULL_REQUEST_PARAM_NAMES
|
96
|
+
assert_required REQUIRED_PULL_REQUEST_OPTIONS
|
97
|
+
end
|
98
|
+
|
99
|
+
post_request("/repositories/#{arguments.user}/#{arguments.repo.downcase}/pullrequests", arguments.params)
|
100
|
+
end
|
101
|
+
|
102
|
+
# Edit a pull request
|
103
|
+
#
|
104
|
+
# = Inputs
|
105
|
+
# <tt>:title</tt> - Required string
|
106
|
+
# <tt>:description</tt> - Optional string
|
107
|
+
# <tt>:destination</tt> - Optional hash - The destination branch or commit
|
108
|
+
# * <tt>{ "branch": { "name": "branch_name" }, "commit": { "hash": "name" } }</tt>
|
109
|
+
# <tt>:reviewers</tt> - Optional array - Users currently reviewiing the pull
|
110
|
+
# * <tt>[{ "username": "accountname" }]</tt>
|
111
|
+
#
|
112
|
+
# = Examples
|
113
|
+
# bitbucket = BitBucket.new
|
114
|
+
# bitbucket.repos.pull_requests.update 'user-name', 'repo-name', 'pull-request-id',
|
115
|
+
# "title" => "Fixes a bug",
|
116
|
+
# "description" => "Fixes not being able to see anything.",
|
117
|
+
# "destination" => { "branch" => { "name" => "master" } },
|
118
|
+
# "reviewers" => [ { "username" => "octocat" } ],
|
119
|
+
# "close_source_branch" => true
|
120
|
+
#
|
121
|
+
def update(*args)
|
122
|
+
arguments(args, required: [:user, :repo, :pull_request_id]) do
|
123
|
+
permit VALID_PULL_REQUEST_PARAM_NAMES
|
124
|
+
end
|
125
|
+
|
126
|
+
user = arguments.user
|
127
|
+
repo = arguments.repo
|
128
|
+
pull_request_id = arguments.pull_request_id
|
129
|
+
|
130
|
+
# BitBucket will drop any data if it is not included, so we have to check for pre-existing data
|
131
|
+
existing_pull = get(user, repo, pull_request_id)
|
132
|
+
existing_pull_data = {
|
133
|
+
'title' => existing_pull.title,
|
134
|
+
'description' => existing_pull.description,
|
135
|
+
'destination' => {
|
136
|
+
'branch' => existing_pull.destination.branch
|
137
|
+
},
|
138
|
+
'reviewers' => existing_pull.reviewers,
|
139
|
+
'close_source_branch' => existing_pull.close_source_branch
|
140
|
+
}
|
141
|
+
params = normalize!(existing_pull_data).merge!(normalize!(arguments.params))
|
142
|
+
|
143
|
+
put_request("/repositories/#{user}/#{repo.downcase}/pullrequests/#{pull_request_id}/", params)
|
144
|
+
end
|
145
|
+
alias :edit :update
|
146
|
+
|
147
|
+
# Decline or reject a single pull request
|
148
|
+
#
|
149
|
+
# = Examples
|
150
|
+
# bitbucket = BitBucket.new
|
151
|
+
# bitbucket.repos.pull_requests.reject 'user-name', 'repo-name', 'pull-request-id'
|
152
|
+
#
|
153
|
+
def decline(user_name, repo_name, pull_request_id)
|
154
|
+
arguments(args, required: [:user, :repo, :pull_request_id])
|
155
|
+
|
156
|
+
post_request("/repositories/#{arguments.user}/#{arguments.repo}/pullrequests/#{arguments.pull_request_id}/decline")
|
157
|
+
end
|
158
|
+
alias :reject :decline
|
159
|
+
|
160
|
+
# Give approval on a pull request
|
161
|
+
#
|
162
|
+
# = Examples
|
163
|
+
# bitbucket = BitBucket.new
|
164
|
+
# bitbucket.repos.pull_requests.approve 'user-name', 'repo-name', 'pull-request-id'
|
165
|
+
#
|
166
|
+
def approve(user_name, repo_name, pull_request_id)
|
167
|
+
arguments(args, required: [:user, :repo, :pull_request_id])
|
168
|
+
|
169
|
+
post_request("/repositories/#{arguments.user}/#{arguments.repo}/pullrequests/#{arguments.pull_request_id}/approve")
|
170
|
+
end
|
171
|
+
|
172
|
+
# Get the diff for a pull request
|
173
|
+
#
|
174
|
+
# = Examples
|
175
|
+
# bitbucket = BitBucket.new
|
176
|
+
# bitbucket.repos.pull_requests.diff 'user-name', 'repo-name', 'pull-request-id'
|
177
|
+
#
|
178
|
+
def diff(user_name, repo_name, pull_request_id)
|
179
|
+
arguments(args, required: [:user, :repo, :pull_request_id])
|
180
|
+
|
181
|
+
get_request("/repositories/#{arguments.user}/#{arguments.repo}/pullrequests/#{arguments.pull_request_id}/diff")
|
182
|
+
end
|
183
|
+
|
184
|
+
# Get a log of all activity for a pull request
|
185
|
+
#
|
186
|
+
# = Examples
|
187
|
+
# bitbucket = BitBucket.new
|
188
|
+
# bitbucket.repos.pull_requests.activity 'user-name', 'repo-name'
|
189
|
+
#
|
190
|
+
def activity(*args)
|
191
|
+
arguments(args, required: [:user, :repo, :pull_request_id])
|
192
|
+
|
193
|
+
response = get_request("/repositories/#{arguments.user}/#{arguments.repo}/pullrequests/#{arguments.pull_request_id}/activity")
|
194
|
+
|
195
|
+
return response unless block_given?
|
196
|
+
response.each { |el| yield el }
|
197
|
+
end
|
198
|
+
end # Repos::PullRequests
|
199
|
+
end # BitBucket
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module BitBucket
|
4
|
+
class Client::Repos::Services < API
|
5
|
+
@version = '2.0'
|
6
|
+
|
7
|
+
REQUIRED_KEY_PARAM_NAMES = %w[ type ].freeze
|
8
|
+
|
9
|
+
# List services
|
10
|
+
#
|
11
|
+
# = Examples
|
12
|
+
# bitbucket = BitBucket.new
|
13
|
+
# bitbucket.repos.services.list 'user-name', 'repo-name'
|
14
|
+
# bitbucket.repos.services.list 'user-name', 'repo-name' { |service| ... }
|
15
|
+
#
|
16
|
+
def list(user_name, repo_name, params={})
|
17
|
+
_update_user_repo_params(user_name, repo_name)
|
18
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
19
|
+
normalize! params
|
20
|
+
|
21
|
+
response = get_request("/repositories/#{user}/#{repo.downcase}/services", params)
|
22
|
+
return response unless block_given?
|
23
|
+
response.each { |el| yield el }
|
24
|
+
end
|
25
|
+
alias :all :list
|
26
|
+
|
27
|
+
# Gets a single service
|
28
|
+
#
|
29
|
+
# = Examples
|
30
|
+
# @bitbucket = BitBucket.new
|
31
|
+
# @bitbucket.repos.services.get 'user-name', 'repo-name', 109172378)
|
32
|
+
#
|
33
|
+
def get(user_name, repo_name, service_id, params={})
|
34
|
+
_update_user_repo_params(user_name, repo_name)
|
35
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
36
|
+
_validate_presence_of(service_id)
|
37
|
+
normalize! params
|
38
|
+
|
39
|
+
get_request("/repositories/#{user}/#{repo.downcase}/services/#{service_id}", params)
|
40
|
+
end
|
41
|
+
alias :find :get
|
42
|
+
|
43
|
+
# Create a service
|
44
|
+
#
|
45
|
+
# = Inputs
|
46
|
+
# * <tt>:type</tt> - One of the supported services. The type is a case-insensitive value.
|
47
|
+
#
|
48
|
+
# = Examples
|
49
|
+
# bitbucket = BitBucket.new
|
50
|
+
# bitbucket.repos.services.create 'user-name', 'repo-name',
|
51
|
+
# "type" => "Basecamp",
|
52
|
+
# "Password" => "...",
|
53
|
+
# "Username" => "...",
|
54
|
+
# "Discussion URL" => "..."
|
55
|
+
#
|
56
|
+
def create(user_name, repo_name, params={})
|
57
|
+
_update_user_repo_params(user_name, repo_name)
|
58
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
59
|
+
normalize! params
|
60
|
+
assert_required_keys(REQUIRED_KEY_PARAM_NAMES, params)
|
61
|
+
|
62
|
+
post_request("/repositories/#{user}/#{repo.downcase}/services", params)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Edit a service
|
66
|
+
#
|
67
|
+
# = Inputs
|
68
|
+
# * <tt>:type</tt> - One of the supported services. The type is a case-insensitive value.
|
69
|
+
#
|
70
|
+
# = Examples
|
71
|
+
# bitbucket = BitBucket.new
|
72
|
+
# bitbucket.repos.services.edit 'user-name', 'repo-name', 109172378,
|
73
|
+
# "type" => "Basecamp",
|
74
|
+
# "Password" => "...",
|
75
|
+
# "Username" => "...",
|
76
|
+
# "Discussion URL" => "..."
|
77
|
+
#
|
78
|
+
def edit(user_name, repo_name, service_id, params={})
|
79
|
+
_update_user_repo_params(user_name, repo_name)
|
80
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
81
|
+
_validate_presence_of(service_id)
|
82
|
+
|
83
|
+
normalize! params
|
84
|
+
|
85
|
+
put_request("/repositories/#{user}/#{repo.downcase}/services/#{service_id}", params)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Delete service
|
89
|
+
#
|
90
|
+
# = Examples
|
91
|
+
# @bitbucket = BitBucket.new
|
92
|
+
# @bitbucket.repos.services.delete 'user-name', 'repo-name', 109172378
|
93
|
+
#
|
94
|
+
def delete(user_name, repo_name, service_id, params={})
|
95
|
+
_update_user_repo_params(user_name, repo_name)
|
96
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
97
|
+
_validate_presence_of(service_id)
|
98
|
+
normalize! params
|
99
|
+
|
100
|
+
delete_request("/repositories/#{user}/#{repo.downcase}/services/#{service_id}", params)
|
101
|
+
end
|
102
|
+
|
103
|
+
end # Repos::Keys
|
104
|
+
end # BitBucket
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module BitBucket
|
4
|
+
class Client::Repos::Sources < API
|
5
|
+
@version = '1.0'
|
6
|
+
|
7
|
+
REQUIRED_COMMENT_PARAMS = %w[
|
8
|
+
body
|
9
|
+
changeset_id
|
10
|
+
line
|
11
|
+
path
|
12
|
+
position
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
# Gets a source of repo
|
16
|
+
#
|
17
|
+
# = Examples
|
18
|
+
# @bitbucket = BitBucket.new
|
19
|
+
# @bitbucket.repos.sources.get 'user-name', 'repo-name', '6dcb09b5b57875f334f61aebed6', 'app/contorllers/')
|
20
|
+
#
|
21
|
+
def get(user_name, repo_name, sha, path, params={})
|
22
|
+
_update_user_repo_params(user_name, repo_name)
|
23
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
24
|
+
_validate_presence_of sha
|
25
|
+
normalize! params
|
26
|
+
|
27
|
+
get_request("/repositories/#{user}/#{repo.downcase}/src/#{sha}/#{path}", params)
|
28
|
+
end
|
29
|
+
alias :find :get
|
30
|
+
|
31
|
+
end # Repos::Sources
|
32
|
+
end # BitBucket
|
@@ -0,0 +1,224 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module BitBucket
|
4
|
+
class Client::Repos < API
|
5
|
+
|
6
|
+
require_all 'bitbucket_rest_api/client/repos',
|
7
|
+
'changesets',
|
8
|
+
'keys',
|
9
|
+
'services',
|
10
|
+
'following',
|
11
|
+
'sources',
|
12
|
+
'pull_requests'
|
13
|
+
|
14
|
+
@version = '1.0'
|
15
|
+
|
16
|
+
DEFAULT_REPO_OPTIONS = {
|
17
|
+
"website" => "",
|
18
|
+
"is_private" => false,
|
19
|
+
"has_issues" => false,
|
20
|
+
"has_wiki" => false,
|
21
|
+
"scm" => "git",
|
22
|
+
"no_public_forks" => false
|
23
|
+
}.freeze
|
24
|
+
|
25
|
+
VALID_REPO_OPTIONS = %w[
|
26
|
+
owner
|
27
|
+
name
|
28
|
+
description
|
29
|
+
website
|
30
|
+
is_private
|
31
|
+
has_issues
|
32
|
+
has_wiki
|
33
|
+
no_public_forks
|
34
|
+
language
|
35
|
+
scm
|
36
|
+
].freeze
|
37
|
+
|
38
|
+
# Access to Repos::Commits API
|
39
|
+
namespace :changesets
|
40
|
+
|
41
|
+
# Access to Repos::Keys API
|
42
|
+
namespace :keys
|
43
|
+
|
44
|
+
# Access to Repos::Watchin API
|
45
|
+
namespace :following
|
46
|
+
|
47
|
+
# Access to Repos::Commits API
|
48
|
+
namespace :sources
|
49
|
+
|
50
|
+
# Access to Repos::Services API
|
51
|
+
namespace :services
|
52
|
+
|
53
|
+
# Access to Repos::PullRequests API
|
54
|
+
namespace :pull_requests
|
55
|
+
|
56
|
+
# List branches
|
57
|
+
#
|
58
|
+
# = Examples
|
59
|
+
#
|
60
|
+
# bitbucket = BitBucket.new
|
61
|
+
# bibucket.repos.branches 'user-name', 'repo-name'
|
62
|
+
#
|
63
|
+
# repos = BitBucket::Repos.new
|
64
|
+
# repos.branches 'user-name', 'repo-name'
|
65
|
+
#
|
66
|
+
def branches(user_name, repo_name, params={ })
|
67
|
+
_update_user_repo_params(user_name, repo_name)
|
68
|
+
_validate_user_repo_params(user, repo) unless (user? && repo?)
|
69
|
+
normalize! params
|
70
|
+
|
71
|
+
response = get_request("/repositories/#{user}/#{repo.downcase}/branches/", params)
|
72
|
+
return response unless block_given?
|
73
|
+
response.each { |el| yield el }
|
74
|
+
end
|
75
|
+
|
76
|
+
alias :list_branches :branches
|
77
|
+
|
78
|
+
# Create a new repository for the authenticated user.
|
79
|
+
#
|
80
|
+
# = Parameters
|
81
|
+
# <tt>:name</tt> - Required string
|
82
|
+
# <tt>:description</tt> - Optional string
|
83
|
+
# <tt>:website</tt> - Optional string
|
84
|
+
# <tt>:is_private</tt> - Optional boolean - <tt>true</tt> to create a private repository, <tt>false</tt> to create a public one.
|
85
|
+
# <tt>:has_issues</tt> - Optional boolean - <tt>true</tt> to enable issues for this repository, <tt>false</tt> to disable them
|
86
|
+
# <tt>:has_wiki</tt> - Optional boolean - <tt>true</tt> to enable the wiki for this repository, <tt>false</tt> to disable it. Default is <tt>true</tt>
|
87
|
+
# <tt>:owner</tt> Optional string - The team in which this repository will be created
|
88
|
+
#
|
89
|
+
# = Examples
|
90
|
+
# bitbucket = BitBucket.new
|
91
|
+
# bitbucket.repos.create "name" => 'repo-name'
|
92
|
+
# "description": "This is your first repo",
|
93
|
+
# "website": "https://bitbucket.com",
|
94
|
+
# "is_private": false,
|
95
|
+
# "has_issues": true,
|
96
|
+
# "has_wiki": true
|
97
|
+
#
|
98
|
+
# Create a new repository in this team. The authenticated user
|
99
|
+
# must be a member of this team
|
100
|
+
#
|
101
|
+
# Examples:
|
102
|
+
# bitbucket = BitBucket.new :oauth_token => '...', :oauth_secret => '...'
|
103
|
+
# bitbucket.repos.create :name => 'repo-name', :owner => 'team-name'
|
104
|
+
#
|
105
|
+
def create(*args)
|
106
|
+
params = args.extract_options!
|
107
|
+
normalize! params
|
108
|
+
filter! VALID_REPO_OPTIONS + %w[ org ], params
|
109
|
+
assert_required_keys(%w[ name ], params)
|
110
|
+
|
111
|
+
# Requires authenticated user
|
112
|
+
post_request("/repositories/", DEFAULT_REPO_OPTIONS.merge(params))
|
113
|
+
end
|
114
|
+
|
115
|
+
# Edit a repository
|
116
|
+
#
|
117
|
+
# = Parameters
|
118
|
+
# * <tt>:name</tt> Required string
|
119
|
+
# * <tt>:description</tt> Optional string
|
120
|
+
# * <tt>:website</tt> Optional string
|
121
|
+
# * <tt>:private</tt> - Optional boolean - <tt>false</tt> to create public reps, <tt>false</tt> to create a private one
|
122
|
+
# * <tt>:has_issues</tt> Optional boolean - <tt>true</tt> to enable issues for this repository, <tt>false</tt> to disable them
|
123
|
+
# * <tt>:has_wiki</tt> Optional boolean - <tt>true</tt> to enable the wiki for this repository, <tt>false</tt> to disable it. Default is <tt>true</tt>
|
124
|
+
# * <tt>:has_downloads</tt> Optional boolean - <tt>true</tt> to enable downloads for this repository
|
125
|
+
#
|
126
|
+
# = Examples
|
127
|
+
#
|
128
|
+
# bitbucket = BitBucket.new
|
129
|
+
# bitbucket.repos.edit 'user-name', 'repo-name',
|
130
|
+
# :name => 'hello-world',
|
131
|
+
# :description => 'This is your first repo',
|
132
|
+
# :website => "https://bitbucket.com",
|
133
|
+
# :public => true, :has_issues => true
|
134
|
+
#
|
135
|
+
def edit(user_name, repo_name, params={ })
|
136
|
+
_update_user_repo_params(user_name, repo_name)
|
137
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
138
|
+
|
139
|
+
normalize! params
|
140
|
+
filter! VALID_REPO_OPTIONS, params
|
141
|
+
|
142
|
+
put_request("/repositories/#{user}/#{repo.downcase}/", DEFAULT_REPO_OPTIONS.merge(params))
|
143
|
+
end
|
144
|
+
|
145
|
+
# Get a repository
|
146
|
+
#
|
147
|
+
# = Examples
|
148
|
+
# bitbucket = BitBucket.new
|
149
|
+
# bitbucket.repos.get 'user-name', 'repo-name'
|
150
|
+
#
|
151
|
+
def get(user_name, repo_name, params={ })
|
152
|
+
_update_user_repo_params(user_name, repo_name)
|
153
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
154
|
+
normalize! params
|
155
|
+
|
156
|
+
get_request("/repositories/#{user}/#{repo.downcase}", params)
|
157
|
+
end
|
158
|
+
|
159
|
+
alias :find :get
|
160
|
+
|
161
|
+
# Delete a repository
|
162
|
+
#
|
163
|
+
# = Examples
|
164
|
+
# @bitbucket = BitBucket.new
|
165
|
+
# @bitbucket.repos.delete 'user-name', 'repo-name'
|
166
|
+
#
|
167
|
+
def delete(user_name, repo_name)
|
168
|
+
_update_user_repo_params(user_name, repo_name)
|
169
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
170
|
+
|
171
|
+
delete_request("/repositories/#{user}/#{repo.downcase}")
|
172
|
+
end
|
173
|
+
|
174
|
+
# List repositories for the authenticated user
|
175
|
+
#
|
176
|
+
# = Examples
|
177
|
+
# bitbucket = BitBucket.new :oauth_token => '...', :oauth_secret => '...'
|
178
|
+
# bitbucket.repos.list
|
179
|
+
# bitbucket.repos.list { |repo| ... }
|
180
|
+
#
|
181
|
+
# List public repositories for the specified user.
|
182
|
+
#
|
183
|
+
# = Examples
|
184
|
+
# bitbucket = BitBucket.new
|
185
|
+
# bitbucket.repos.list :user => 'user-name'
|
186
|
+
# bitbucket.repos.list :user => 'user-name', { |repo| ... }
|
187
|
+
def list(*args)
|
188
|
+
#_merge_user_into_params!(params) unless params.has_key?('user')
|
189
|
+
arguments(args) do
|
190
|
+
permit %w[ user type ]
|
191
|
+
end
|
192
|
+
params = arguments.params
|
193
|
+
|
194
|
+
response = get_request("/user/repositories", params)
|
195
|
+
|
196
|
+
return response unless block_given?
|
197
|
+
response.each { |el| yield el }
|
198
|
+
end
|
199
|
+
|
200
|
+
alias :all :list
|
201
|
+
|
202
|
+
# List tags
|
203
|
+
#
|
204
|
+
# = Examples
|
205
|
+
# bitbucket = BitBucket.new
|
206
|
+
# bitbucket.repos.tags 'user-name', 'repo-name'
|
207
|
+
# bitbucket.repos.tags 'user-name', 'repo-name' { |tag| ... }
|
208
|
+
#
|
209
|
+
def tags(user_name, repo_name, params={ })
|
210
|
+
_update_user_repo_params(user_name, repo_name)
|
211
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
212
|
+
normalize! params
|
213
|
+
|
214
|
+
response = get_request("/repositories/#{user}/#{repo.downcase}/tags/", params)
|
215
|
+
return response unless block_given?
|
216
|
+
response.each { |el| yield el }
|
217
|
+
end
|
218
|
+
|
219
|
+
alias :list_tags :tags
|
220
|
+
alias :repo_tags :tags
|
221
|
+
alias :repository_tags :tags
|
222
|
+
|
223
|
+
end # Repos
|
224
|
+
end # BitBucket
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module BitBucket
|
4
|
+
class Client::User < API
|
5
|
+
@version = '1.0'
|
6
|
+
|
7
|
+
DEFAULT_USER_OPTIONS = {
|
8
|
+
"first_name" => "",
|
9
|
+
"last_name" => "",
|
10
|
+
"avatar" => ""
|
11
|
+
# TODO: can this filed be modified?
|
12
|
+
# "resource_uri" => ""
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
# Gets the basic information associated with an account and
|
16
|
+
# a list of all of the repositories owned by the user.
|
17
|
+
# See https://confluence.atlassian.com/display/BITBUCKET/user+Endpoint#userEndpoint-GETauserprofile
|
18
|
+
#
|
19
|
+
# = Examples
|
20
|
+
# bitbucket = BitBucket.new
|
21
|
+
# bitbucket.user_api.profile
|
22
|
+
#
|
23
|
+
def profile
|
24
|
+
get_request("/user")
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
# Update a user
|
29
|
+
|
30
|
+
# = Parameters
|
31
|
+
# * <tt>:first_name</tt> Optional string
|
32
|
+
# * <tt>:last_name</tt> Optional string
|
33
|
+
# * <tt>:avatar</tt> Optional string
|
34
|
+
# * <tt>:resource_uri</tt> Optional string
|
35
|
+
#
|
36
|
+
# = Examples
|
37
|
+
#
|
38
|
+
# bitbucket = BitBucket.new
|
39
|
+
# bitbucket.user_api.update :first_name => 'first-name', :last_name => 'last-name'
|
40
|
+
#
|
41
|
+
|
42
|
+
def update( params={ })
|
43
|
+
normalize! params
|
44
|
+
filter! DEFAULT_USER_OPTIONS, params
|
45
|
+
|
46
|
+
put_request("/user", DEFAULT_USER_OPTIONS.merge(params))
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
# GET a list of user privileges
|
52
|
+
def privileges
|
53
|
+
get_request("/user/privileges")
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
# GET a list of repositories an account follows
|
59
|
+
# Gets the details of the repositories that the individual or team account follows.
|
60
|
+
# This call returns the full data about the repositories including
|
61
|
+
# if the repository is a fork of another repository.
|
62
|
+
# An account always "follows" its own repositories.
|
63
|
+
def follows
|
64
|
+
get_request("/user/follows")
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
# GET a list of repositories visible to an account
|
69
|
+
# Gets the details of the repositories that the user owns
|
70
|
+
# or has at least read access to.
|
71
|
+
# Use this if you're looking for a full list of all of the repositories associated with a user.
|
72
|
+
def repositories
|
73
|
+
get_request("/user/repositories")
|
74
|
+
end
|
75
|
+
|
76
|
+
alias :repos :repositories
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
# GET a list of repositories the account is following
|
81
|
+
# Gets a list of the repositories the account follows.
|
82
|
+
# This is the same list that appears on the Following tab on your account dashboard.
|
83
|
+
def overview
|
84
|
+
get_request("/user/repositories/overview")
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
# GET the list of repositories on the dashboard
|
90
|
+
# Gets the repositories list from the account's dashboard.
|
91
|
+
def dashboard
|
92
|
+
get_request("/user/repositories/dashboard")
|
93
|
+
end
|
94
|
+
|
95
|
+
end # User
|
96
|
+
end # BitBucket
|