bitbuckets 0.2.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 +7 -0
- data/README.md +169 -0
- data/Rakefile +1 -0
- data/lib/bitbucket_rest_api.rb +86 -0
- data/lib/bitbucket_rest_api/api.rb +104 -0
- data/lib/bitbucket_rest_api/api/actions.rb +32 -0
- data/lib/bitbucket_rest_api/api_factory.rb +29 -0
- data/lib/bitbucket_rest_api/authorization.rb +31 -0
- data/lib/bitbucket_rest_api/client.rb +53 -0
- data/lib/bitbucket_rest_api/configuration.rb +103 -0
- data/lib/bitbucket_rest_api/connection.rb +97 -0
- data/lib/bitbucket_rest_api/constants.rb +57 -0
- data/lib/bitbucket_rest_api/core_ext/array.rb +6 -0
- data/lib/bitbucket_rest_api/core_ext/hash.rb +58 -0
- data/lib/bitbucket_rest_api/deprecation.rb +36 -0
- data/lib/bitbucket_rest_api/error.rb +37 -0
- data/lib/bitbucket_rest_api/error/bad_events.rb +10 -0
- data/lib/bitbucket_rest_api/error/bad_request.rb +11 -0
- data/lib/bitbucket_rest_api/error/blank_value.rb +10 -0
- data/lib/bitbucket_rest_api/error/client_error.rb +19 -0
- data/lib/bitbucket_rest_api/error/forbidden.rb +11 -0
- data/lib/bitbucket_rest_api/error/internal_server_error.rb +11 -0
- data/lib/bitbucket_rest_api/error/invalid_options.rb +17 -0
- data/lib/bitbucket_rest_api/error/no_events.rb +10 -0
- data/lib/bitbucket_rest_api/error/not_found.rb +11 -0
- data/lib/bitbucket_rest_api/error/required_params.rb +17 -0
- data/lib/bitbucket_rest_api/error/service_error.rb +18 -0
- data/lib/bitbucket_rest_api/error/service_unavailable.rb +11 -0
- data/lib/bitbucket_rest_api/error/unauthorized.rb +11 -0
- data/lib/bitbucket_rest_api/error/unknown_value.rb +17 -0
- data/lib/bitbucket_rest_api/error/unprocessable_entity.rb +11 -0
- data/lib/bitbucket_rest_api/error/validations.rb +17 -0
- data/lib/bitbucket_rest_api/invitations.rb +14 -0
- data/lib/bitbucket_rest_api/issues.rb +229 -0
- data/lib/bitbucket_rest_api/issues/comments.rb +116 -0
- data/lib/bitbucket_rest_api/issues/components.rb +105 -0
- data/lib/bitbucket_rest_api/issues/milestones.rb +105 -0
- data/lib/bitbucket_rest_api/normalizer.rb +24 -0
- data/lib/bitbucket_rest_api/parameter_filter.rb +29 -0
- data/lib/bitbucket_rest_api/repos.rb +276 -0
- data/lib/bitbucket_rest_api/repos/changesets.rb +52 -0
- data/lib/bitbucket_rest_api/repos/commits.rb +38 -0
- data/lib/bitbucket_rest_api/repos/components.rb +35 -0
- data/lib/bitbucket_rest_api/repos/default_reviewers.rb +60 -0
- data/lib/bitbucket_rest_api/repos/download.rb +15 -0
- data/lib/bitbucket_rest_api/repos/following.rb +38 -0
- data/lib/bitbucket_rest_api/repos/forks.rb +66 -0
- data/lib/bitbucket_rest_api/repos/keys.rb +86 -0
- data/lib/bitbucket_rest_api/repos/pull_request.rb +158 -0
- data/lib/bitbucket_rest_api/repos/services.rb +101 -0
- data/lib/bitbucket_rest_api/repos/sources.rb +36 -0
- data/lib/bitbucket_rest_api/repos/webhooks.rb +99 -0
- data/lib/bitbucket_rest_api/request.rb +71 -0
- data/lib/bitbucket_rest_api/request/basic_auth.rb +30 -0
- data/lib/bitbucket_rest_api/request/jsonize.rb +39 -0
- data/lib/bitbucket_rest_api/request/oauth.rb +50 -0
- data/lib/bitbucket_rest_api/response.rb +26 -0
- data/lib/bitbucket_rest_api/response/helpers.rb +18 -0
- data/lib/bitbucket_rest_api/response/jsonize.rb +25 -0
- data/lib/bitbucket_rest_api/response/mashify.rb +23 -0
- data/lib/bitbucket_rest_api/response/raise_error.rb +28 -0
- data/lib/bitbucket_rest_api/response/xmlize.rb +25 -0
- data/lib/bitbucket_rest_api/result.rb +136 -0
- data/lib/bitbucket_rest_api/teams.rb +91 -0
- data/lib/bitbucket_rest_api/user.rb +87 -0
- data/lib/bitbucket_rest_api/users.rb +20 -0
- data/lib/bitbucket_rest_api/users/account.rb +50 -0
- data/lib/bitbucket_rest_api/utils/url.rb +61 -0
- data/lib/bitbucket_rest_api/validations.rb +23 -0
- data/lib/bitbucket_rest_api/validations/format.rb +21 -0
- data/lib/bitbucket_rest_api/validations/presence.rb +21 -0
- data/lib/bitbucket_rest_api/validations/required.rb +37 -0
- data/lib/bitbucket_rest_api/validations/token.rb +38 -0
- data/lib/bitbucket_rest_api/version.rb +10 -0
- data/lib/bitbuckets.rb +2 -0
- data/spec/bitbucket_rest_api/api/actions_spec.rb +18 -0
- data/spec/bitbucket_rest_api/api_factory_spec.rb +28 -0
- data/spec/bitbucket_rest_api/api_spec.rb +87 -0
- data/spec/bitbucket_rest_api/authorization_spec.rb +74 -0
- data/spec/bitbucket_rest_api/client_spec.rb +17 -0
- data/spec/bitbucket_rest_api/core_ext/array_spec.rb +13 -0
- data/spec/bitbucket_rest_api/core_ext/hash_spec.rb +47 -0
- data/spec/bitbucket_rest_api/deprecation_spec.rb +31 -0
- data/spec/bitbucket_rest_api/error/bad_events_spec.rb +11 -0
- data/spec/bitbucket_rest_api/error/blank_value_spec.rb +14 -0
- data/spec/bitbucket_rest_api/error/no_events_spec.rb +11 -0
- data/spec/bitbucket_rest_api/invitations_spec.rb +21 -0
- data/spec/bitbucket_rest_api/issues/comments_spec.rb +89 -0
- data/spec/bitbucket_rest_api/issues/components_spec.rb +89 -0
- data/spec/bitbucket_rest_api/issues/milestones_spec.rb +89 -0
- data/spec/bitbucket_rest_api/issues_spec.rb +91 -0
- data/spec/bitbucket_rest_api/normalizer_spec.rb +29 -0
- data/spec/bitbucket_rest_api/parameter_filter_spec.rb +42 -0
- data/spec/bitbucket_rest_api/repos/changesets_spec.rb +44 -0
- data/spec/bitbucket_rest_api/repos/commits_spec.rb +21 -0
- data/spec/bitbucket_rest_api/repos/components_spec.rb +43 -0
- data/spec/bitbucket_rest_api/repos/default_reviewers_spec.rb +65 -0
- data/spec/bitbucket_rest_api/repos/download_spec.rb +10 -0
- data/spec/bitbucket_rest_api/repos/following_spec.rb +53 -0
- data/spec/bitbucket_rest_api/repos/forks_spec.rb +46 -0
- data/spec/bitbucket_rest_api/repos/keys_spec.rb +73 -0
- data/spec/bitbucket_rest_api/repos/pull_request_spec.rb +283 -0
- data/spec/bitbucket_rest_api/repos/sources_spec.rb +78 -0
- data/spec/bitbucket_rest_api/repos/webhooks_spec.rb +245 -0
- data/spec/bitbucket_rest_api/repos_spec.rb +158 -0
- data/spec/bitbucket_rest_api/request/jsonize_spec.rb +19 -0
- data/spec/bitbucket_rest_api/request/oauth_spec.rb +26 -0
- data/spec/bitbucket_rest_api/request_spec.rb +88 -0
- data/spec/bitbucket_rest_api/response/jsonize_spec.rb +13 -0
- data/spec/bitbucket_rest_api/response/mashify_spec.rb +33 -0
- data/spec/bitbucket_rest_api/response/raise_error_spec.rb +42 -0
- data/spec/bitbucket_rest_api/teams_spec.rb +136 -0
- data/spec/bitbucket_rest_api/user_spec.rb +78 -0
- data/spec/bitbucket_rest_api/utils/url_spec.rb +34 -0
- data/spec/bitbucket_rest_api/validations/format_spec.rb +30 -0
- data/spec/bitbucket_rest_api/validations/presence_spec.rb +13 -0
- data/spec/bitbucket_rest_api/validations/required_spec.rb +44 -0
- data/spec/bitbucket_rest_api/validations/token_spec.rb +17 -0
- data/spec/bitbucket_rest_api_spec.rb +17 -0
- data/spec/spec_helper.rb +24 -0
- metadata +358 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module BitBucket
|
|
3
|
+
class Issues::Comments < API
|
|
4
|
+
VALID_ISSUE_COMMENT_PARAM_NAME = %w[
|
|
5
|
+
content
|
|
6
|
+
].freeze
|
|
7
|
+
|
|
8
|
+
# Creates new Issues::Comments API
|
|
9
|
+
def initialize(options = {})
|
|
10
|
+
super(options)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# List comments on an issue
|
|
14
|
+
#
|
|
15
|
+
# = Examples
|
|
16
|
+
# bitbucket = BitBucket.new
|
|
17
|
+
# bitbucket.issues.comments.all 'user-name', 'repo-name', 'issue-id'
|
|
18
|
+
# bitbucket.issues.comments.all 'user-name', 'repo-name', 'issue-id' {|com| .. }
|
|
19
|
+
#
|
|
20
|
+
def list(user_name, repo_name, issue_id, params = {})
|
|
21
|
+
_update_user_repo_params(user_name, repo_name)
|
|
22
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
23
|
+
_validate_presence_of issue_id
|
|
24
|
+
|
|
25
|
+
normalize! params
|
|
26
|
+
# _merge_mime_type(:issue_comment, params)
|
|
27
|
+
|
|
28
|
+
response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/#{issue_id}/comments/", params)
|
|
29
|
+
return response unless block_given?
|
|
30
|
+
|
|
31
|
+
response.each { |el| yield el }
|
|
32
|
+
end
|
|
33
|
+
alias all list
|
|
34
|
+
|
|
35
|
+
# Get a single comment
|
|
36
|
+
#
|
|
37
|
+
# = Examples
|
|
38
|
+
# bitbucket = BitBucket.new
|
|
39
|
+
# bitbucket.issues.comments.find 'user-name', 'repo-name', 'comment-id'
|
|
40
|
+
#
|
|
41
|
+
def get(user_name, repo_name, comment_id, params = {})
|
|
42
|
+
_update_user_repo_params(user_name, repo_name)
|
|
43
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
44
|
+
_validate_presence_of comment_id
|
|
45
|
+
|
|
46
|
+
normalize! params
|
|
47
|
+
# _merge_mime_type(:issue_comment, params)
|
|
48
|
+
|
|
49
|
+
get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/comments/#{comment_id}", params)
|
|
50
|
+
end
|
|
51
|
+
alias find get
|
|
52
|
+
|
|
53
|
+
# Create a comment
|
|
54
|
+
#
|
|
55
|
+
# = Inputs
|
|
56
|
+
# <tt>:content</tt> Required string
|
|
57
|
+
#
|
|
58
|
+
# = Examples
|
|
59
|
+
# bitbucket = BitBucket.new
|
|
60
|
+
# bitbucket.issues.comments.create 'user-name', 'repo-name', 'issue-id',
|
|
61
|
+
# "content" => 'a new comment'
|
|
62
|
+
#
|
|
63
|
+
def create(user_name, repo_name, issue_id, params = {})
|
|
64
|
+
_update_user_repo_params(user_name, repo_name)
|
|
65
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
66
|
+
_validate_presence_of issue_id
|
|
67
|
+
|
|
68
|
+
normalize! params
|
|
69
|
+
# _merge_mime_type(:issue_comment, params)
|
|
70
|
+
filter! VALID_ISSUE_COMMENT_PARAM_NAME, params
|
|
71
|
+
assert_required_keys(%w[content], params)
|
|
72
|
+
|
|
73
|
+
post_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/#{issue_id}/comments/", params)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Edit a comment
|
|
77
|
+
#
|
|
78
|
+
# = Inputs
|
|
79
|
+
# <tt>:content</tt> Required string
|
|
80
|
+
#
|
|
81
|
+
# = Examples
|
|
82
|
+
# bitbucket = BitBucket.new
|
|
83
|
+
# bitbucket.issues.comments.edit 'user-name', 'repo-name', 'comment-id',
|
|
84
|
+
# "content" => 'a new comment'
|
|
85
|
+
#
|
|
86
|
+
def edit(user_name, repo_name, comment_id, params = {})
|
|
87
|
+
_update_user_repo_params(user_name, repo_name)
|
|
88
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
89
|
+
_validate_presence_of comment_id
|
|
90
|
+
|
|
91
|
+
normalize! params
|
|
92
|
+
# _merge_mime_type(:issue_comment, params)
|
|
93
|
+
filter! VALID_ISSUE_COMMENT_PARAM_NAME, params
|
|
94
|
+
assert_required_keys(%w[content], params)
|
|
95
|
+
|
|
96
|
+
put_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/comments/#{comment_id}", params)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Delete a comment
|
|
100
|
+
#
|
|
101
|
+
# = Examples
|
|
102
|
+
# bitbucket = BitBucket.new
|
|
103
|
+
# bitbucket.issues.comments.delete 'user-name', 'repo-name', 'comment-id'
|
|
104
|
+
#
|
|
105
|
+
def delete(user_name, repo_name, comment_id, params = {})
|
|
106
|
+
_update_user_repo_params(user_name, repo_name)
|
|
107
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
108
|
+
_validate_presence_of comment_id
|
|
109
|
+
|
|
110
|
+
normalize! params
|
|
111
|
+
# _merge_mime_type(:issue_comment, params)
|
|
112
|
+
|
|
113
|
+
delete_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/comments/#{comment_id}", params)
|
|
114
|
+
end
|
|
115
|
+
end # Issues::Comments
|
|
116
|
+
end # BitBucket
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module BitBucket
|
|
3
|
+
class Issues::Components < API
|
|
4
|
+
VALID_COMPONENT_INPUTS = %w[name].freeze
|
|
5
|
+
|
|
6
|
+
# Creates new Issues::Components API
|
|
7
|
+
def initialize(options = {})
|
|
8
|
+
super(options)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# List all components for a repository
|
|
12
|
+
#
|
|
13
|
+
# = Examples
|
|
14
|
+
# bitbucket = BitBucket.new :user => 'user-name', :repo => 'repo-name'
|
|
15
|
+
# bitbucket.issues.components.list
|
|
16
|
+
# bitbucket.issues.components.list { |component| ... }
|
|
17
|
+
#
|
|
18
|
+
def list(user_name, repo_name, params = {})
|
|
19
|
+
_update_user_repo_params(user_name, repo_name)
|
|
20
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
21
|
+
normalize! params
|
|
22
|
+
|
|
23
|
+
response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/components", params)
|
|
24
|
+
return response unless block_given?
|
|
25
|
+
|
|
26
|
+
response.each { |el| yield el }
|
|
27
|
+
end
|
|
28
|
+
alias all list
|
|
29
|
+
|
|
30
|
+
# Get a single component
|
|
31
|
+
#
|
|
32
|
+
# = Examples
|
|
33
|
+
# bitbucket = BitBucket.new
|
|
34
|
+
# bitbucket.issues.components.find 'user-name', 'repo-name', 'component-id'
|
|
35
|
+
#
|
|
36
|
+
def get(user_name, repo_name, component_id, params = {})
|
|
37
|
+
_update_user_repo_params(user_name, repo_name)
|
|
38
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
39
|
+
_validate_presence_of component_id
|
|
40
|
+
normalize! params
|
|
41
|
+
|
|
42
|
+
get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/components/#{component_id}", params)
|
|
43
|
+
end
|
|
44
|
+
alias find get
|
|
45
|
+
|
|
46
|
+
# Create a component
|
|
47
|
+
#
|
|
48
|
+
# = Inputs
|
|
49
|
+
# <tt>:name</tt> - Required string
|
|
50
|
+
#
|
|
51
|
+
# = Examples
|
|
52
|
+
# bitbucket = BitBucket.new :user => 'user-name', :repo => 'repo-name'
|
|
53
|
+
# bitbucket.issues.components.create :name => 'API'
|
|
54
|
+
#
|
|
55
|
+
def create(user_name, repo_name, params = {})
|
|
56
|
+
_update_user_repo_params(user_name, repo_name)
|
|
57
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
58
|
+
|
|
59
|
+
normalize! params
|
|
60
|
+
filter! VALID_COMPONENT_INPUTS, params
|
|
61
|
+
assert_required_keys(VALID_COMPONENT_INPUTS, params)
|
|
62
|
+
|
|
63
|
+
post_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/components", params)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Update a component
|
|
67
|
+
#
|
|
68
|
+
# = Inputs
|
|
69
|
+
# <tt>:name</tt> - Required string
|
|
70
|
+
#
|
|
71
|
+
# = Examples
|
|
72
|
+
# @bitbucket = BitBucket.new
|
|
73
|
+
# @bitbucket.issues.components.update 'user-name', 'repo-name', 'component-id',
|
|
74
|
+
# :name => 'API'
|
|
75
|
+
#
|
|
76
|
+
def update(user_name, repo_name, component_id, params = {})
|
|
77
|
+
_update_user_repo_params(user_name, repo_name)
|
|
78
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
79
|
+
_validate_presence_of component_id
|
|
80
|
+
|
|
81
|
+
normalize! params
|
|
82
|
+
filter! VALID_COMPONENT_INPUTS, params
|
|
83
|
+
assert_required_keys(VALID_COMPONENT_INPUTS, params)
|
|
84
|
+
|
|
85
|
+
put_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/components/#{component_id}", params)
|
|
86
|
+
end
|
|
87
|
+
alias edit update
|
|
88
|
+
|
|
89
|
+
# Delete a component
|
|
90
|
+
#
|
|
91
|
+
# = Examples
|
|
92
|
+
# bitbucket = BitBucket.new
|
|
93
|
+
# bitbucket.issues.components.delete 'user-name', 'repo-name', 'component-id'
|
|
94
|
+
#
|
|
95
|
+
def delete(user_name, repo_name, component_id, params = {})
|
|
96
|
+
_update_user_repo_params(user_name, repo_name)
|
|
97
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
98
|
+
|
|
99
|
+
_validate_presence_of component_id
|
|
100
|
+
normalize! params
|
|
101
|
+
|
|
102
|
+
delete_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/components/#{component_id}", params)
|
|
103
|
+
end
|
|
104
|
+
end # Issues::Components
|
|
105
|
+
end # BitBucket
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module BitBucket
|
|
3
|
+
class Issues::Milestones < API
|
|
4
|
+
VALID_MILESTONE_INPUTS = %w[
|
|
5
|
+
name
|
|
6
|
+
].freeze # :nodoc:
|
|
7
|
+
|
|
8
|
+
# Creates new Issues::Milestones API
|
|
9
|
+
def initialize(options = {})
|
|
10
|
+
super(options)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# List milestones for a repository
|
|
14
|
+
#
|
|
15
|
+
# = Examples
|
|
16
|
+
# bitbucket = BitBucket.new :user => 'user-name', :repo => 'repo-name'
|
|
17
|
+
# bitbucket.issues.milestones.list
|
|
18
|
+
#
|
|
19
|
+
def list(user_name, repo_name, params = {})
|
|
20
|
+
_update_user_repo_params(user_name, repo_name)
|
|
21
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
22
|
+
|
|
23
|
+
normalize! params
|
|
24
|
+
|
|
25
|
+
response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/milestones", params)
|
|
26
|
+
return response unless block_given?
|
|
27
|
+
|
|
28
|
+
response.each { |el| yield el }
|
|
29
|
+
end
|
|
30
|
+
alias all list
|
|
31
|
+
|
|
32
|
+
# Get a single milestone
|
|
33
|
+
#
|
|
34
|
+
# = Examples
|
|
35
|
+
# bitbucket = BitBucket.new
|
|
36
|
+
# bitbucket.issues.milestones.get 'user-name', 'repo-name', 'milestone-id'
|
|
37
|
+
#
|
|
38
|
+
def get(user_name, repo_name, milestone_id, params = {})
|
|
39
|
+
_update_user_repo_params(user_name, repo_name)
|
|
40
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
41
|
+
_validate_presence_of milestone_id
|
|
42
|
+
normalize! params
|
|
43
|
+
|
|
44
|
+
get_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/milestones/#{milestone_id}", params)
|
|
45
|
+
end
|
|
46
|
+
alias find get
|
|
47
|
+
|
|
48
|
+
# Create a milestone
|
|
49
|
+
#
|
|
50
|
+
# = Inputs
|
|
51
|
+
# <tt>:name</tt> - Required string
|
|
52
|
+
#
|
|
53
|
+
# = Examples
|
|
54
|
+
# bitbucket = BitBucket.new :user => 'user-name', :repo => 'repo-name'
|
|
55
|
+
# bitbucket.issues.milestones.create :name => 'hello-world'
|
|
56
|
+
#
|
|
57
|
+
def create(user_name, repo_name, params = {})
|
|
58
|
+
_update_user_repo_params(user_name, repo_name)
|
|
59
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
60
|
+
|
|
61
|
+
normalize! params
|
|
62
|
+
filter! VALID_MILESTONE_INPUTS, params
|
|
63
|
+
assert_required_keys(%w[name], params)
|
|
64
|
+
|
|
65
|
+
post_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/milestones", params)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Update a milestone
|
|
69
|
+
#
|
|
70
|
+
# = Inputs
|
|
71
|
+
# <tt>:name</tt> - Required string
|
|
72
|
+
#
|
|
73
|
+
# = Examples
|
|
74
|
+
# bitbucket = BitBucket.new
|
|
75
|
+
# bitbucket.issues.milestones.update 'user-name', 'repo-name', 'milestone-id',
|
|
76
|
+
# :name => 'hello-world'
|
|
77
|
+
#
|
|
78
|
+
def update(user_name, repo_name, milestone_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 milestone_id
|
|
82
|
+
|
|
83
|
+
normalize! params
|
|
84
|
+
filter! VALID_MILESTONE_INPUTS, params
|
|
85
|
+
assert_required_keys(%w[name], params)
|
|
86
|
+
|
|
87
|
+
put_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/milestones/#{milestone_id}", params)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Delete a milestone
|
|
91
|
+
#
|
|
92
|
+
# = Examples
|
|
93
|
+
# bitbucket = BitBucket.new
|
|
94
|
+
# bitbucket.issues.milestones.delete 'user-name', 'repo-name', 'milestone-id'
|
|
95
|
+
#
|
|
96
|
+
def delete(user_name, repo_name, milestone_id, params = {})
|
|
97
|
+
_update_user_repo_params(user_name, repo_name)
|
|
98
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
99
|
+
_validate_presence_of milestone_id
|
|
100
|
+
normalize! params
|
|
101
|
+
|
|
102
|
+
delete_request("/1.0/repositories/#{user}/#{repo.downcase}/issues/milestones/#{milestone_id}", params)
|
|
103
|
+
end
|
|
104
|
+
end # Issues::Milestones
|
|
105
|
+
end # BitBucket
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module BitBucket
|
|
3
|
+
# Deals with normalizing client supplied parameter keys.
|
|
4
|
+
module Normalizer
|
|
5
|
+
# Turns any keys from nested hashes including nested arrays into strings
|
|
6
|
+
#
|
|
7
|
+
def normalize!(params)
|
|
8
|
+
case params
|
|
9
|
+
when Hash
|
|
10
|
+
params.keys.each do |k|
|
|
11
|
+
params[k.to_s] = params.delete(k)
|
|
12
|
+
normalize!(params[k.to_s])
|
|
13
|
+
end
|
|
14
|
+
when Array
|
|
15
|
+
params.map! do |el|
|
|
16
|
+
normalize!(el)
|
|
17
|
+
end
|
|
18
|
+
else
|
|
19
|
+
params.to_s
|
|
20
|
+
end
|
|
21
|
+
params
|
|
22
|
+
end
|
|
23
|
+
end # Normalizer
|
|
24
|
+
end # BitBucket
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module BitBucket
|
|
3
|
+
# Allows you to specify parameters keys which will be preserved
|
|
4
|
+
# in parameters hash and its subhashes. Any keys from the nested
|
|
5
|
+
# hash that do not match will be removed.
|
|
6
|
+
module ParameterFilter
|
|
7
|
+
# Removes any keys from nested hashes that don't match predefiend keys
|
|
8
|
+
#
|
|
9
|
+
def filter!(keys, params, options = { recursive: true }) # :nodoc:
|
|
10
|
+
case params
|
|
11
|
+
when Hash
|
|
12
|
+
params.keys.each do |k, _v|
|
|
13
|
+
if keys.include?(k) || BitBucket::Validations::VALID_API_KEYS.include?(k)
|
|
14
|
+
filter!(keys, params[k]) if options[:recursive]
|
|
15
|
+
else
|
|
16
|
+
params.delete(k)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
when Array
|
|
20
|
+
params.map! do |el|
|
|
21
|
+
filter!(keys, el) if options[:recursive]
|
|
22
|
+
end
|
|
23
|
+
else
|
|
24
|
+
params
|
|
25
|
+
end
|
|
26
|
+
params
|
|
27
|
+
end
|
|
28
|
+
end # Filter
|
|
29
|
+
end # BitBucket
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module BitBucket
|
|
3
|
+
class Repos < API
|
|
4
|
+
extend AutoloadHelper
|
|
5
|
+
|
|
6
|
+
# Load all the modules after initializing Repos to avoid superclass mismatch
|
|
7
|
+
autoload_all 'bitbucket_rest_api/repos',
|
|
8
|
+
Changesets: 'changesets',
|
|
9
|
+
Keys: 'keys',
|
|
10
|
+
Services: 'services',
|
|
11
|
+
Following: 'following',
|
|
12
|
+
Sources: 'sources',
|
|
13
|
+
Forks: 'forks',
|
|
14
|
+
Commits: 'commits',
|
|
15
|
+
Download: 'download',
|
|
16
|
+
Webhooks: 'webhooks',
|
|
17
|
+
PullRequest: 'pull_request',
|
|
18
|
+
DefaultReviewers: 'default_reviewers',
|
|
19
|
+
Components: 'components'
|
|
20
|
+
|
|
21
|
+
DEFAULT_REPO_OPTIONS = {
|
|
22
|
+
'website' => '',
|
|
23
|
+
'is_private' => false,
|
|
24
|
+
'has_issues' => false,
|
|
25
|
+
'has_wiki' => false,
|
|
26
|
+
'scm' => 'git',
|
|
27
|
+
'no_public_forks' => false
|
|
28
|
+
}.freeze
|
|
29
|
+
|
|
30
|
+
VALID_REPO_OPTIONS = %w[
|
|
31
|
+
owner
|
|
32
|
+
name
|
|
33
|
+
description
|
|
34
|
+
website
|
|
35
|
+
is_private
|
|
36
|
+
has_issues
|
|
37
|
+
has_wiki
|
|
38
|
+
no_public_forks
|
|
39
|
+
language
|
|
40
|
+
scm
|
|
41
|
+
].freeze
|
|
42
|
+
|
|
43
|
+
# Creates new Repositories API
|
|
44
|
+
def initialize(options = {})
|
|
45
|
+
super(options)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Access to Repos::Commits API
|
|
49
|
+
def changesets
|
|
50
|
+
@changesets ||= ApiFactory.new 'Repos::Changesets'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Access to Repos::Keys API
|
|
54
|
+
def keys
|
|
55
|
+
@keys ||= ApiFactory.new 'Repos::Keys'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Access to Repos::Watchin API
|
|
59
|
+
def following
|
|
60
|
+
@following ||= ApiFactory.new 'Repos::Following'
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Access to Repos::Commits API
|
|
64
|
+
def sources
|
|
65
|
+
@sources ||= ApiFactory.new 'Repos::Sources'
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Access to Repos::Services API
|
|
69
|
+
def services
|
|
70
|
+
@services ||= ApiFactory.new 'Repos::Services'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def forks
|
|
74
|
+
@forks ||= ApiFactory.new 'Repos::Forks'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def commits
|
|
78
|
+
@commits ||= ApiFactory.new 'Repos::Commits'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def download
|
|
82
|
+
@download ||= ApiFactory.new 'Repos::Download'
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Access to Repos::PullRequests API
|
|
86
|
+
def pull_request
|
|
87
|
+
@pull_request ||= ApiFactory.new 'Repos::PullRequest'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def default_reviewers
|
|
91
|
+
@default_reviewers ||= ApiFactory.new 'Repos::DefaultReviewers'
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def components
|
|
95
|
+
@components ||= ApiFactory.new 'Repos::Components'
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def webhooks
|
|
99
|
+
@webhooks ||= ApiFactory.new 'Repos::Webhooks'
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# List branches
|
|
103
|
+
#
|
|
104
|
+
# = Examples
|
|
105
|
+
#
|
|
106
|
+
# bitbucket = BitBucket.new
|
|
107
|
+
# bibucket.repos.branches 'user-name', 'repo-name'
|
|
108
|
+
#
|
|
109
|
+
# repos = BitBucket::Repos.new
|
|
110
|
+
# repos.branches 'user-name', 'repo-name'
|
|
111
|
+
#
|
|
112
|
+
def branches(user_name, repo_name, params = {})
|
|
113
|
+
_update_user_repo_params(user_name, repo_name)
|
|
114
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
115
|
+
normalize! params
|
|
116
|
+
|
|
117
|
+
response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/branches/", params)
|
|
118
|
+
return response unless block_given?
|
|
119
|
+
|
|
120
|
+
response.each { |el| yield el }
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
alias list_branches branches
|
|
124
|
+
|
|
125
|
+
# FIXME: 'POST a new repository' is a deprecated feature of the API
|
|
126
|
+
# Create a new repository for the authenticated user.
|
|
127
|
+
#
|
|
128
|
+
# = Parameters
|
|
129
|
+
# <tt>:name</tt> - Required string
|
|
130
|
+
# <tt>:description</tt> - Optional string
|
|
131
|
+
# <tt>:website</tt> - Optional string
|
|
132
|
+
# <tt>:is_private</tt> - Optional boolean - <tt>true</tt> to create a private repository, <tt>false</tt> to create a public one.
|
|
133
|
+
# <tt>:has_issues</tt> - Optional boolean - <tt>true</tt> to enable issues for this repository, <tt>false</tt> to disable them
|
|
134
|
+
# <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>
|
|
135
|
+
# <tt>:owner</tt> Optional string - The team in which this repository will be created
|
|
136
|
+
#
|
|
137
|
+
# = Examples
|
|
138
|
+
# bitbucket = BitBucket.new
|
|
139
|
+
# bitbucket.repos.create "name" => 'repo-name'
|
|
140
|
+
# "description": "This is your first repo",
|
|
141
|
+
# "website": "https://bitbucket.com",
|
|
142
|
+
# "is_private": false,
|
|
143
|
+
# "has_issues": true,
|
|
144
|
+
# "has_wiki": true
|
|
145
|
+
#
|
|
146
|
+
# Create a new repository in this team. The authenticated user
|
|
147
|
+
# must be a member of this team
|
|
148
|
+
#
|
|
149
|
+
# Examples:
|
|
150
|
+
# bitbucket = BitBucket.new :oauth_token => '...', :oauth_secret => '...'
|
|
151
|
+
# bitbucket.repos.create :name => 'repo-name', :owner => 'team-name'
|
|
152
|
+
#
|
|
153
|
+
def create(*args)
|
|
154
|
+
params = args.extract_options!
|
|
155
|
+
normalize! params
|
|
156
|
+
filter! VALID_REPO_OPTIONS + %w[org], params
|
|
157
|
+
assert_required_keys(%w[name], params)
|
|
158
|
+
|
|
159
|
+
# Requires authenticated user
|
|
160
|
+
post_request('/1.0/repositories/', DEFAULT_REPO_OPTIONS.merge(params))
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Edit a repository
|
|
164
|
+
#
|
|
165
|
+
# = Parameters
|
|
166
|
+
# * <tt>:name</tt> Required string
|
|
167
|
+
# * <tt>:description</tt> Optional string
|
|
168
|
+
# * <tt>:website</tt> Optional string
|
|
169
|
+
# * <tt>:private</tt> - Optional boolean - <tt>false</tt> to create public reps, <tt>false</tt> to create a private one
|
|
170
|
+
# * <tt>:has_issues</tt> Optional boolean - <tt>true</tt> to enable issues for this repository, <tt>false</tt> to disable them
|
|
171
|
+
# * <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>
|
|
172
|
+
# * <tt>:has_downloads</tt> Optional boolean - <tt>true</tt> to enable downloads for this repository
|
|
173
|
+
#
|
|
174
|
+
# = Examples
|
|
175
|
+
#
|
|
176
|
+
# bitbucket = BitBucket.new
|
|
177
|
+
# bitbucket.repos.edit 'user-name', 'repo-name',
|
|
178
|
+
# :name => 'hello-world',
|
|
179
|
+
# :description => 'This is your first repo',
|
|
180
|
+
# :website => "https://bitbucket.com",
|
|
181
|
+
# :public => true, :has_issues => true
|
|
182
|
+
#
|
|
183
|
+
def edit(user_name, repo_name, params = {})
|
|
184
|
+
_update_user_repo_params(user_name, repo_name)
|
|
185
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
186
|
+
|
|
187
|
+
normalize! params
|
|
188
|
+
filter! VALID_REPO_OPTIONS, params
|
|
189
|
+
|
|
190
|
+
put_request("/1.0/repositories/#{user}/#{repo.downcase}/", DEFAULT_REPO_OPTIONS.merge(params))
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# Get a repository
|
|
194
|
+
#
|
|
195
|
+
# = Examples
|
|
196
|
+
# bitbucket = BitBucket.new
|
|
197
|
+
# bitbucket.repos.get 'user-name', 'repo-name'
|
|
198
|
+
#
|
|
199
|
+
def get(user_name, repo_name, params = {})
|
|
200
|
+
_update_user_repo_params(user_name, repo_name)
|
|
201
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
202
|
+
normalize! params
|
|
203
|
+
|
|
204
|
+
get_request("/1.0/repositories/#{user}/#{repo.downcase}", params)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
alias find get
|
|
208
|
+
|
|
209
|
+
# FIXME: 'DELETE an existing repository' is a deprecated feature of the API
|
|
210
|
+
# Delete a repository
|
|
211
|
+
#
|
|
212
|
+
# = Examples
|
|
213
|
+
# @bitbucket = BitBucket.new
|
|
214
|
+
# @bitbucket.repos.delete 'user-name', 'repo-name'
|
|
215
|
+
#
|
|
216
|
+
def delete(user_name, repo_name)
|
|
217
|
+
_update_user_repo_params(user_name, repo_name)
|
|
218
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
219
|
+
|
|
220
|
+
delete_request("/1.0/repositories/#{user}/#{repo.downcase}")
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# List repositories for the authenticated user
|
|
224
|
+
#
|
|
225
|
+
# = Examples
|
|
226
|
+
# bitbucket = BitBucket.new :oauth_token => '...', :oauth_secret => '...'
|
|
227
|
+
# bitbucket.repos.list
|
|
228
|
+
# bitbucket.repos.list { |repo| ... }
|
|
229
|
+
#
|
|
230
|
+
# List public repositories for the specified user.
|
|
231
|
+
#
|
|
232
|
+
# = Examples
|
|
233
|
+
# bitbucket = BitBucket.new
|
|
234
|
+
# bitbucket.repos.list :user => 'user-name', :role => 'owner'
|
|
235
|
+
# bitbucket.repos.list :user => 'user-name', { |repo| ... }
|
|
236
|
+
def list(*args)
|
|
237
|
+
params = args.extract_options!
|
|
238
|
+
normalize! params
|
|
239
|
+
_merge_user_into_params!(params) unless params.key?('user')
|
|
240
|
+
params.merge!('pagelen' => 100) unless params.key?('pagelen')
|
|
241
|
+
|
|
242
|
+
filter! %w[user role pagelen], params
|
|
243
|
+
|
|
244
|
+
response = get_request('/2.0/repositories', params)
|
|
245
|
+
|
|
246
|
+
response = response[:values]
|
|
247
|
+
return response unless block_given?
|
|
248
|
+
|
|
249
|
+
response.each { |el| yield el }
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
alias all list
|
|
253
|
+
|
|
254
|
+
# List tags
|
|
255
|
+
#
|
|
256
|
+
# = Examples
|
|
257
|
+
# bitbucket = BitBucket.new
|
|
258
|
+
# bitbucket.repos.tags 'user-name', 'repo-name'
|
|
259
|
+
# bitbucket.repos.tags 'user-name', 'repo-name' { |tag| ... }
|
|
260
|
+
#
|
|
261
|
+
def tags(user_name, repo_name, params = {})
|
|
262
|
+
_update_user_repo_params(user_name, repo_name)
|
|
263
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
264
|
+
normalize! params
|
|
265
|
+
|
|
266
|
+
response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/tags/", params)
|
|
267
|
+
return response unless block_given?
|
|
268
|
+
|
|
269
|
+
response.each { |el| yield el }
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
alias list_tags tags
|
|
273
|
+
alias repo_tags tags
|
|
274
|
+
alias repository_tags tags
|
|
275
|
+
end # Repos
|
|
276
|
+
end # BitBucket
|