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