tinybucket 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -5
- data/README.md +100 -24
- data/lib/tinybucket.rb +1 -0
- data/lib/tinybucket/api.rb +1 -0
- data/lib/tinybucket/api/build_status_api.rb +55 -0
- data/lib/tinybucket/api/helper.rb +1 -0
- data/lib/tinybucket/api/helper/build_status_helper.rb +35 -0
- data/lib/tinybucket/client.rb +28 -45
- data/lib/tinybucket/enumerator.rb +4 -3
- data/lib/tinybucket/model.rb +2 -1
- data/lib/tinybucket/model/base.rb +1 -17
- data/lib/tinybucket/model/build_status.rb +55 -0
- data/lib/tinybucket/model/commit.rb +32 -15
- data/lib/tinybucket/model/concerns.rb +1 -0
- data/lib/tinybucket/model/concerns/api_callable.rb +19 -0
- data/lib/tinybucket/model/profile.rb +9 -26
- data/lib/tinybucket/model/pull_request.rb +18 -28
- data/lib/tinybucket/model/repository.rb +29 -76
- data/lib/tinybucket/model/team.rb +9 -34
- data/lib/tinybucket/parser.rb +1 -0
- data/lib/tinybucket/parser/build_status_parser.rb +9 -0
- data/lib/tinybucket/resource.rb +70 -0
- data/lib/tinybucket/resource/base.rb +29 -0
- data/lib/tinybucket/resource/branch_restrictions.rb +45 -0
- data/lib/tinybucket/resource/commit/base.rb +12 -0
- data/lib/tinybucket/resource/commit/build_statuses.rb +47 -0
- data/lib/tinybucket/resource/commit/comments.rb +32 -0
- data/lib/tinybucket/resource/commits.rb +33 -0
- data/lib/tinybucket/resource/forks.rb +22 -0
- data/lib/tinybucket/resource/pull_request/base.rb +18 -0
- data/lib/tinybucket/resource/pull_request/comments.rb +30 -0
- data/lib/tinybucket/resource/pull_request/commits.rb +17 -0
- data/lib/tinybucket/resource/pull_requests.rb +48 -0
- data/lib/tinybucket/resource/repos.rb +38 -0
- data/lib/tinybucket/resource/team/base.rb +22 -0
- data/lib/tinybucket/resource/team/followers.rb +13 -0
- data/lib/tinybucket/resource/team/following.rb +13 -0
- data/lib/tinybucket/resource/team/members.rb +13 -0
- data/lib/tinybucket/resource/team/repos.rb +13 -0
- data/lib/tinybucket/resource/user/base.rb +24 -0
- data/lib/tinybucket/resource/user/followers.rb +13 -0
- data/lib/tinybucket/resource/user/following.rb +13 -0
- data/lib/tinybucket/resource/user/repos.rb +13 -0
- data/lib/tinybucket/resource/watchers.rb +22 -0
- data/lib/tinybucket/version.rb +1 -1
- data/spec/fixtures/build_status.json +16 -0
- data/spec/fixtures/repositories/test_owner/get.json +1 -1
- data/spec/fixtures/repositories/test_owner/test_repo/commit/1/statuses/build/post.json +16 -0
- data/spec/fixtures/repositories/test_owner/test_repo/commit/1/statuses/build/test_status/get.json +16 -0
- data/spec/fixtures/repositories/test_owner/test_repo/commit/1/statuses/build/test_status/put.json +16 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/comments/get.json +1 -1
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/commits/get.json +1 -1
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/get.json +1 -1
- data/spec/fixtures/repositories/test_owner/test_repo/watchers/get.json +1 -1
- data/spec/lib/tinybucket/api/build_status_api_spec.rb +65 -0
- data/spec/lib/tinybucket/client_spec.rb +8 -4
- data/spec/lib/tinybucket/model/build_status_spec.rb +66 -0
- data/spec/lib/tinybucket/model/commit_spec.rb +19 -1
- data/spec/lib/tinybucket/model/profile_spec.rb +3 -3
- data/spec/lib/tinybucket/model/pull_request_spec.rb +3 -15
- data/spec/lib/tinybucket/model/repository_spec.rb +14 -20
- data/spec/lib/tinybucket/model/team_spec.rb +16 -4
- data/spec/lib/tinybucket/resource/branch_restrictions_spec.rb +60 -0
- data/spec/lib/tinybucket/resource/commit/build_statuses_spec.rb +50 -0
- data/spec/lib/tinybucket/resource/commit/comments_spec.rb +49 -0
- data/spec/lib/tinybucket/resource/commits_spec.rb +43 -0
- data/spec/lib/tinybucket/resource/forks_spec.rb +36 -0
- data/spec/lib/tinybucket/resource/pull_request/comments_spec.rb +41 -0
- data/spec/lib/tinybucket/resource/pull_request/commits_spec.rb +41 -0
- data/spec/lib/tinybucket/resource/pull_requests_spec.rb +59 -0
- data/spec/lib/tinybucket/resource/repos_spec.rb +76 -0
- data/spec/lib/tinybucket/resource/team/followers_spec.rb +27 -0
- data/spec/lib/tinybucket/resource/team/following_spec.rb +27 -0
- data/spec/lib/tinybucket/resource/team/members_spec.rb +27 -0
- data/spec/lib/tinybucket/resource/team/repos_spec.rb +27 -0
- data/spec/lib/tinybucket/resource/user/followers_spec.rb +27 -0
- data/spec/lib/tinybucket/resource/user/following_spec.rb +27 -0
- data/spec/lib/tinybucket/resource/user/repos_spec.rb +27 -0
- data/spec/lib/tinybucket/resource/watchers_spec.rb +38 -0
- data/spec/support/api_response_macros.rb +45 -1
- metadata +77 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c36e731063e026b4a9765820e9c2af76d614b37
|
4
|
+
data.tar.gz: 6c751c8bde9a75fd7bb43b82e25f9f291c711e5f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 932cbe0ffb529644bd277f0efe6d9e8fba47b37069aa3eb9ed8cf9c1b744717ebde8f6ed844e4c1ce55a5154829216365b137afffc52a30781ba02f9c3edb20c
|
7
|
+
data.tar.gz: 3145f50edc5ca01591945a5055ad14059afab8be2909f1d16213f23ea7dc35357d477d68b8c1fa7bb0e99ffff7f5ca26aa1a37e3be45a72b9c58a61723d78127
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -134,6 +134,17 @@ repos = bucket.repos('someone')
|
|
134
134
|
|
135
135
|
##### repository Resource
|
136
136
|
|
137
|
+
###### Collection Methods
|
138
|
+
|
139
|
+
```ruby
|
140
|
+
repos = bucket.repos('myname')
|
141
|
+
|
142
|
+
# [ ] POST a new repository
|
143
|
+
repos.create(params)
|
144
|
+
```
|
145
|
+
|
146
|
+
###### Object Methods
|
147
|
+
|
137
148
|
```ruby
|
138
149
|
# [x] GET a repository
|
139
150
|
repo = bucket.repo('someone', 'great_repo')
|
@@ -142,11 +153,8 @@ repo = bucket.repo('someone', 'great_repo')
|
|
142
153
|
# (Load the repository attributes from Bitbucket WebAPI)
|
143
154
|
repo.load
|
144
155
|
|
145
|
-
# [ ] POST a new repository
|
146
|
-
repo.create(params)
|
147
|
-
|
148
156
|
# [ ] DELETE a repository
|
149
|
-
|
157
|
+
repo.destroy
|
150
158
|
|
151
159
|
# [x] GET a list of watchers
|
152
160
|
watchers = repo.watchers
|
@@ -157,44 +165,52 @@ repos = repo.forks
|
|
157
165
|
|
158
166
|
##### pullrequests Resource
|
159
167
|
|
168
|
+
###### Collection Methods
|
169
|
+
|
160
170
|
```ruby
|
161
171
|
repo = bucket.repo('someone', 'great_repo')
|
162
172
|
|
163
|
-
# [x] GET a list of
|
173
|
+
# [x ] GET a list of pull requests
|
164
174
|
pull_requests = repo.pull_requests(options)
|
165
175
|
|
166
|
-
# [x] GET a specific pull request
|
167
|
-
pull_request = repo.pull_request(pr_id)
|
168
|
-
|
169
176
|
# [ ] POST (create) a new pull request
|
170
|
-
|
177
|
+
pull_requests.create(params)
|
178
|
+
|
179
|
+
# [ ] GET the log of all of a repository's pull request activity
|
180
|
+
activities = pull_requests.activities(options)
|
181
|
+
```
|
182
|
+
|
183
|
+
###### Object Methods
|
184
|
+
|
185
|
+
```ruby
|
186
|
+
repo = bucket.repo('someone', 'great_repo')
|
187
|
+
|
188
|
+
# [x] GET a specific pull request
|
189
|
+
pull_request = repo.pull_request(pr_id)
|
171
190
|
|
172
191
|
# [ ] PUT a pull request update
|
173
|
-
|
192
|
+
pull_request.update(params)
|
174
193
|
|
175
194
|
# [x] GET the commits for a pull request
|
176
195
|
commits = pull_request.commits
|
177
196
|
|
178
197
|
# [x] POST a pull request approval
|
179
|
-
|
198
|
+
pull_request.approve
|
180
199
|
|
181
200
|
# [x] DELETE a pull request approval
|
182
|
-
|
201
|
+
pull_request.unapprove
|
183
202
|
|
184
203
|
# [x] GET the diff for a pull request
|
185
204
|
diff = pull_request.diff
|
186
205
|
|
187
|
-
# [ ] GET the log of all of a repository's pull request activity
|
188
|
-
activities = repo.pull_requests_activities(options) # TODO: fix method name.
|
189
|
-
|
190
206
|
# [ ] GET the activity for a pull request
|
191
207
|
activities = pull_request.activities(options)
|
192
208
|
|
193
209
|
# [x] Accept and merge a pull request
|
194
|
-
|
210
|
+
pull_request.merge(options)
|
195
211
|
|
196
212
|
# [x] Decline or reject a pull request
|
197
|
-
|
213
|
+
pull_request.decline(options)
|
198
214
|
|
199
215
|
# [x] GET a list of pull request comments
|
200
216
|
comments = pull_request.comments
|
@@ -205,12 +221,20 @@ comment = pull_request.comment(comment_id)
|
|
205
221
|
|
206
222
|
##### commits or commit Resource
|
207
223
|
|
224
|
+
###### Collection Methods
|
225
|
+
|
208
226
|
```ruby
|
209
227
|
repo = bucket.repo('someone', 'great_repo')
|
210
228
|
|
211
229
|
# [x] GET a commits list for a repository or compare commits across branches
|
212
230
|
# branchortag, include, exclude options
|
213
231
|
commits = repo.commits(options)
|
232
|
+
```
|
233
|
+
|
234
|
+
###### Object Methods
|
235
|
+
|
236
|
+
```ruby
|
237
|
+
repo = bucket.repo('someone', 'great_repo')
|
214
238
|
|
215
239
|
# [x] GET an individual commit
|
216
240
|
commit = repo.commit('revision')
|
@@ -222,37 +246,45 @@ comments = commit.comments
|
|
222
246
|
comment = commit.comment(comment_id)
|
223
247
|
|
224
248
|
# [x] POST a commit approval
|
225
|
-
|
249
|
+
commit.approve
|
226
250
|
|
227
251
|
# [x] DELETE a commit approval
|
228
|
-
|
252
|
+
commit.unapprove
|
229
253
|
```
|
230
254
|
|
231
255
|
##### branch-restrictions Resource
|
232
256
|
|
257
|
+
###### Collection Methods
|
258
|
+
|
233
259
|
```ruby
|
234
|
-
repo = bucket.repo('someone', 'great_repo')
|
260
|
+
repo = bucket.repo('someone', 'great_repo')
|
235
261
|
|
236
262
|
# [x] GET the branch-restrictions
|
237
263
|
restrictions = repo.branch_restrictions
|
238
264
|
|
239
265
|
# [ ] POST the branch-restrictions
|
240
|
-
|
266
|
+
new_restriction = restrictions.create(params)
|
267
|
+
```
|
268
|
+
|
269
|
+
###### Object Methods
|
270
|
+
|
271
|
+
```ruby
|
272
|
+
repo = bucket.repo('someone', 'great_repo').find
|
241
273
|
|
242
274
|
# [x] GET a specific restriction
|
243
275
|
restriction = repo.branch_restriction(restriction_id)
|
244
276
|
|
245
277
|
# [ ] PUT a branch restriction update
|
246
|
-
|
278
|
+
restriction.update(params)
|
247
279
|
|
248
280
|
# [ ] DELETE the branch restriction
|
249
|
-
|
281
|
+
restriction.destroy
|
250
282
|
```
|
251
283
|
|
252
284
|
##### diff Resource
|
253
285
|
|
254
286
|
```ruby
|
255
|
-
repo = bucket.repo('someone', 'great_repo')
|
287
|
+
repo = bucket.repo('someone', 'great_repo')
|
256
288
|
COMMIT_ID = '7e968c5'
|
257
289
|
|
258
290
|
# [x] GET a diff
|
@@ -262,6 +294,50 @@ diff = repo.diff(COMMIT_ID)
|
|
262
294
|
patch = repo.patch(COMMIT_ID)
|
263
295
|
```
|
264
296
|
|
297
|
+
##### statuses/build Resource
|
298
|
+
|
299
|
+
###### Collection Methods
|
300
|
+
|
301
|
+
```ruby
|
302
|
+
repo = bucket.repo('someone', 'great_repo')
|
303
|
+
|
304
|
+
COMMIT_ID = '7e968c5'
|
305
|
+
commit = repo.commit(COMMIT_ID)
|
306
|
+
|
307
|
+
BUILD_STATUS_KEY = 'tinybucket'
|
308
|
+
|
309
|
+
# [x] POST a build status for a commit
|
310
|
+
commit.build_statuses.create(
|
311
|
+
key: BUILD_STATUS_KEY,
|
312
|
+
state: 'INPROGRESS',
|
313
|
+
name: 'Name of build',
|
314
|
+
url: 'link to the build result',
|
315
|
+
description: 'about build'
|
316
|
+
)
|
317
|
+
```
|
318
|
+
|
319
|
+
###### Object Methods
|
320
|
+
|
321
|
+
```
|
322
|
+
repo = bucket.repo('someone', 'great_repo')
|
323
|
+
|
324
|
+
COMMIT_ID = '7e968c5'
|
325
|
+
commit = repo.commit(COMMIT_ID)
|
326
|
+
|
327
|
+
BUILD_STATUS_KEY = 'tinybucket'
|
328
|
+
|
329
|
+
# [x] GET the build status for a commit
|
330
|
+
status = commit.build_status(BUILD_STATUS_KEY)
|
331
|
+
|
332
|
+
# [x] PUT a build status for a commit
|
333
|
+
status.update(
|
334
|
+
state: 'SUCCESSFUL',
|
335
|
+
name: 'Name of build',
|
336
|
+
url: 'link to the build result',
|
337
|
+
description: 'about build'
|
338
|
+
)
|
339
|
+
```
|
340
|
+
|
265
341
|
## Contribution
|
266
342
|
|
267
343
|
1. Fork it ( https://github.com/[my-github-username]/bitbucket/fork )
|
data/lib/tinybucket.rb
CHANGED
data/lib/tinybucket/api.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
module Tinybucket
|
2
|
+
module Api
|
3
|
+
# BuildStatus Api client
|
4
|
+
#
|
5
|
+
# @see https://confluence.atlassian.com/bitbucket/statuses-build-resource-779295267.html
|
6
|
+
# statuses/build Resource - Bitbucket Cloud REST API
|
7
|
+
class BuildStatusApi < BaseApi
|
8
|
+
include Tinybucket::Api::Helper::BuildStatusHelper
|
9
|
+
|
10
|
+
attr_accessor :repo_owner, :repo_slug
|
11
|
+
|
12
|
+
# Send 'GET the build status for a commit' request
|
13
|
+
#
|
14
|
+
# @param revision [String]
|
15
|
+
# @param key [String]
|
16
|
+
# @param options [Hash]
|
17
|
+
# @return [Tinybucket::Model::BuildStatus]
|
18
|
+
def find(revision, key, options = {})
|
19
|
+
get_path(
|
20
|
+
path_to_find(revision, key),
|
21
|
+
options,
|
22
|
+
Tinybucket::Parser::BuildStatusParser
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Send 'POST a build status for a commit' request
|
27
|
+
#
|
28
|
+
# @param revision [String]
|
29
|
+
# @param key [String]
|
30
|
+
# @param options [Hash]
|
31
|
+
# @return [Tinybucket::Model::BuildStatus]
|
32
|
+
def post(revision, key, options)
|
33
|
+
post_path(
|
34
|
+
path_to_post(revision),
|
35
|
+
options.merge(key: key),
|
36
|
+
Tinybucket::Parser::BuildStatusParser
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Send 'PUT a build status for a commit' request
|
41
|
+
#
|
42
|
+
# @param revision [String]
|
43
|
+
# @param key [String]
|
44
|
+
# @param options [Hash]
|
45
|
+
# @return [Tinybucket::Model::BuildStatus]
|
46
|
+
def put(revision, key, options)
|
47
|
+
put_path(
|
48
|
+
path_to_put(revision, key),
|
49
|
+
options,
|
50
|
+
Tinybucket::Parser::BuildStatusParser
|
51
|
+
)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Tinybucket
|
2
|
+
module Api
|
3
|
+
module Helper
|
4
|
+
module BuildStatusHelper
|
5
|
+
include ::Tinybucket::Api::Helper::ApiHelper
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def path_to_find(revision, key)
|
10
|
+
build_path(base_path(revision),
|
11
|
+
[key, 'key'])
|
12
|
+
end
|
13
|
+
|
14
|
+
def path_to_post(revision)
|
15
|
+
base_path(revision)
|
16
|
+
end
|
17
|
+
|
18
|
+
def path_to_put(revision, key)
|
19
|
+
build_path(base_path(revision),
|
20
|
+
[key, 'key'])
|
21
|
+
end
|
22
|
+
|
23
|
+
def base_path(revision)
|
24
|
+
build_path('/repositories',
|
25
|
+
[repo_owner, 'repo_owner'],
|
26
|
+
[repo_slug, 'repo_slug'],
|
27
|
+
'commit',
|
28
|
+
[revision, 'revision'],
|
29
|
+
'statuses',
|
30
|
+
'build')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/tinybucket/client.rb
CHANGED
@@ -17,23 +17,22 @@ module Tinybucket
|
|
17
17
|
# @overload repos(options)
|
18
18
|
# get public repositories.
|
19
19
|
# @option options [Hash] a hash with options
|
20
|
-
# @return [Tinybucket::
|
21
|
-
# as [Tinybucket::Model::Repository]
|
20
|
+
# @return [Tinybucket::Resource::Repos] repository resource
|
22
21
|
def repos(*args)
|
23
22
|
case args.size
|
24
23
|
when 0
|
25
|
-
public_repos
|
24
|
+
public_repos
|
26
25
|
when 1
|
27
26
|
case args.first
|
28
27
|
when Hash
|
29
|
-
public_repos(
|
28
|
+
public_repos(args.first)
|
30
29
|
when String, Symbol
|
31
|
-
owners_repos(
|
30
|
+
owners_repos(args.first)
|
32
31
|
else
|
33
32
|
raise ArgumentError
|
34
33
|
end
|
35
34
|
when 2
|
36
|
-
owners_repos(
|
35
|
+
owners_repos(args[0], args[1])
|
37
36
|
else
|
38
37
|
raise ArgumentError
|
39
38
|
end
|
@@ -46,10 +45,10 @@ module Tinybucket
|
|
46
45
|
# repo_slug})
|
47
46
|
# @return [Tinybucket::Model::Repository]
|
48
47
|
def repo(owner, repo_slug)
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
48
|
+
Tinybucket::Model::Repository.new({}).tap do |m|
|
49
|
+
m.repo_owner = owner
|
50
|
+
m.repo_slug = repo_slug
|
51
|
+
end
|
53
52
|
end
|
54
53
|
|
55
54
|
# Get the team
|
@@ -57,9 +56,9 @@ module Tinybucket
|
|
57
56
|
# @param teamname [String] the team name.
|
58
57
|
# @return [Tinybucket::Model::Team]
|
59
58
|
def team(teamname)
|
60
|
-
|
61
|
-
|
62
|
-
|
59
|
+
Tinybucket::Model::Team.new({}).tap do |m|
|
60
|
+
m.username = teamname
|
61
|
+
end
|
63
62
|
end
|
64
63
|
|
65
64
|
# Get the user profile
|
@@ -67,48 +66,32 @@ module Tinybucket
|
|
67
66
|
# @param username [String] the user name.
|
68
67
|
# @return [Tinybucket::Model::Profile]
|
69
68
|
def user(username)
|
70
|
-
|
71
|
-
|
72
|
-
|
69
|
+
Tinybucket::Model::Profile.new({}).tap do |m|
|
70
|
+
m.username = username
|
71
|
+
end
|
73
72
|
end
|
74
73
|
|
75
74
|
private
|
76
75
|
|
77
|
-
|
78
|
-
|
76
|
+
# Get public repositories
|
77
|
+
#
|
78
|
+
# @param options [Hash]
|
79
|
+
# @return [Tinybucket::Resource::Repos]
|
80
|
+
def public_repos(options = {})
|
79
81
|
raise ArgumentError unless options.is_a?(Hash)
|
80
82
|
|
81
|
-
|
82
|
-
repos_api,
|
83
|
-
:list,
|
84
|
-
options
|
85
|
-
)
|
83
|
+
Tinybucket::Resource::Repos.new(nil, options)
|
86
84
|
end
|
87
85
|
|
88
|
-
|
89
|
-
|
90
|
-
|
86
|
+
# Get Owner's repositories
|
87
|
+
#
|
88
|
+
# @param owner [String]
|
89
|
+
# @param options [Hash]
|
90
|
+
# @return [Tinybucket::Resource::Repos]
|
91
|
+
def owners_repos(owner, options = {})
|
91
92
|
raise ArgumentError unless options.is_a?(Hash)
|
92
93
|
|
93
|
-
|
94
|
-
user_api(owner),
|
95
|
-
:repos,
|
96
|
-
options
|
97
|
-
)
|
98
|
-
end
|
99
|
-
|
100
|
-
def repos_api
|
101
|
-
create_instance('Repos')
|
102
|
-
end
|
103
|
-
|
104
|
-
def user_api(owner)
|
105
|
-
api = create_instance('User')
|
106
|
-
api.username = owner
|
107
|
-
api
|
108
|
-
end
|
109
|
-
|
110
|
-
def create_instance(name)
|
111
|
-
ApiFactory.create_instance(name)
|
94
|
+
Tinybucket::Resource::Repos.new(owner, options)
|
112
95
|
end
|
113
96
|
end
|
114
97
|
end
|