codenamev_bitbucket_api 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|