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,101 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module BitBucket
|
|
3
|
+
class Repos::Services < API
|
|
4
|
+
REQUIRED_KEY_PARAM_NAMES = %w[type].freeze
|
|
5
|
+
|
|
6
|
+
# List services
|
|
7
|
+
#
|
|
8
|
+
# = Examples
|
|
9
|
+
# bitbucket = BitBucket.new
|
|
10
|
+
# bitbucket.repos.services.list 'user-name', 'repo-name'
|
|
11
|
+
# bitbucket.repos.services.list 'user-name', 'repo-name' { |service| ... }
|
|
12
|
+
#
|
|
13
|
+
def list(user_name, repo_name, params = {})
|
|
14
|
+
_update_user_repo_params(user_name, repo_name)
|
|
15
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
16
|
+
normalize! params
|
|
17
|
+
|
|
18
|
+
response = get_request("/1.0/repositories/#{user}/#{repo.downcase}/services", params)
|
|
19
|
+
return response unless block_given?
|
|
20
|
+
|
|
21
|
+
response.each { |el| yield el }
|
|
22
|
+
end
|
|
23
|
+
alias all list
|
|
24
|
+
|
|
25
|
+
# Gets a single service
|
|
26
|
+
#
|
|
27
|
+
# = Examples
|
|
28
|
+
# @bitbucket = BitBucket.new
|
|
29
|
+
# @bitbucket.repos.services.get 'user-name', 'repo-name', 109172378)
|
|
30
|
+
#
|
|
31
|
+
def get(user_name, repo_name, service_id, params = {})
|
|
32
|
+
_update_user_repo_params(user_name, repo_name)
|
|
33
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
34
|
+
_validate_presence_of(service_id)
|
|
35
|
+
normalize! params
|
|
36
|
+
|
|
37
|
+
get_request("/1.0/repositories/#{user}/#{repo.downcase}/services/#{service_id}", params)
|
|
38
|
+
end
|
|
39
|
+
alias find get
|
|
40
|
+
|
|
41
|
+
# Create a service
|
|
42
|
+
#
|
|
43
|
+
# = Inputs
|
|
44
|
+
# * <tt>:type</tt> - One of the supported services. The type is a case-insensitive value.
|
|
45
|
+
#
|
|
46
|
+
# = Examples
|
|
47
|
+
# bitbucket = BitBucket.new
|
|
48
|
+
# bitbucket.repos.services.create 'user-name', 'repo-name',
|
|
49
|
+
# "type" => "Basecamp",
|
|
50
|
+
# "Password" => "...",
|
|
51
|
+
# "Username" => "...",
|
|
52
|
+
# "Discussion URL" => "..."
|
|
53
|
+
#
|
|
54
|
+
def create(user_name, repo_name, params = {})
|
|
55
|
+
_update_user_repo_params(user_name, repo_name)
|
|
56
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
57
|
+
normalize! params
|
|
58
|
+
assert_required_keys(REQUIRED_KEY_PARAM_NAMES, params)
|
|
59
|
+
|
|
60
|
+
post_request("/1.0/repositories/#{user}/#{repo.downcase}/services", params)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Edit a service
|
|
64
|
+
#
|
|
65
|
+
# = Inputs
|
|
66
|
+
# * <tt>:type</tt> - One of the supported services. The type is a case-insensitive value.
|
|
67
|
+
#
|
|
68
|
+
# = Examples
|
|
69
|
+
# bitbucket = BitBucket.new
|
|
70
|
+
# bitbucket.repos.services.edit 'user-name', 'repo-name', 109172378,
|
|
71
|
+
# "type" => "Basecamp",
|
|
72
|
+
# "Password" => "...",
|
|
73
|
+
# "Username" => "...",
|
|
74
|
+
# "Discussion URL" => "..."
|
|
75
|
+
#
|
|
76
|
+
def edit(user_name, repo_name, service_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(service_id)
|
|
80
|
+
|
|
81
|
+
normalize! params
|
|
82
|
+
|
|
83
|
+
put_request("/1.0/repositories/#{user}/#{repo.downcase}/services/#{service_id}", params)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Delete service
|
|
87
|
+
#
|
|
88
|
+
# = Examples
|
|
89
|
+
# @bitbucket = BitBucket.new
|
|
90
|
+
# @bitbucket.repos.services.delete 'user-name', 'repo-name', 109172378
|
|
91
|
+
#
|
|
92
|
+
def delete(user_name, repo_name, service_id, params = {})
|
|
93
|
+
_update_user_repo_params(user_name, repo_name)
|
|
94
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
95
|
+
_validate_presence_of(service_id)
|
|
96
|
+
normalize! params
|
|
97
|
+
|
|
98
|
+
delete_request("/1.0/repositories/#{user}/#{repo.downcase}/services/#{service_id}", params)
|
|
99
|
+
end
|
|
100
|
+
end # Repos::Keys
|
|
101
|
+
end # BitBucket
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module BitBucket
|
|
3
|
+
class Repos::Sources < API
|
|
4
|
+
# Gets a list of the src in a repository.
|
|
5
|
+
#
|
|
6
|
+
# = Examples
|
|
7
|
+
# @bitbucket = BitBucket.new
|
|
8
|
+
# @bitbucket.repos.sources.list 'user-name', 'repo-name', '6dcb09b5b57875f334f61aebed6', 'app/contorllers/')
|
|
9
|
+
#
|
|
10
|
+
def list(user_name, repo_name, sha, path)
|
|
11
|
+
_update_user_repo_params(user_name, repo_name)
|
|
12
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
13
|
+
_validate_presence_of(sha, path)
|
|
14
|
+
|
|
15
|
+
get_request("/1.0/repositories/#{user}/#{repo.downcase}/src/#{sha}/#{path}")
|
|
16
|
+
end
|
|
17
|
+
alias all list
|
|
18
|
+
|
|
19
|
+
# Gets information about an individual file. This method returns the file's
|
|
20
|
+
# size and contents. If the file is encoded, this method returns the files
|
|
21
|
+
# encoding; Currently, Bitbucket supports only base64 encoding.
|
|
22
|
+
#
|
|
23
|
+
# = Examples
|
|
24
|
+
# @bitbucket = BitBucket.new
|
|
25
|
+
# @bitbucket.repos.sources.get 'user-name', 'repo-name', '6dcb09b5b57875f334f61aebed6', 'app/assets/images/logo.jpg')
|
|
26
|
+
#
|
|
27
|
+
def get(user_name, repo_name, sha, path)
|
|
28
|
+
_update_user_repo_params(user_name, repo_name)
|
|
29
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
30
|
+
_validate_presence_of(sha, path)
|
|
31
|
+
|
|
32
|
+
get_request("/1.0/repositories/#{user}/#{repo.downcase}/raw/#{sha}/#{path}")
|
|
33
|
+
end
|
|
34
|
+
alias find get
|
|
35
|
+
end # Repos::Sources
|
|
36
|
+
end # BitBucket
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module BitBucket
|
|
3
|
+
class Repos::Webhooks < API
|
|
4
|
+
EVENTS = [
|
|
5
|
+
'repo:push',
|
|
6
|
+
'repo:fork',
|
|
7
|
+
'repo:commit_comment_created',
|
|
8
|
+
'repo:commit_status_created',
|
|
9
|
+
'repo:commit_status_updated',
|
|
10
|
+
'issue:created',
|
|
11
|
+
'issue:updated',
|
|
12
|
+
'issue:comment_created',
|
|
13
|
+
'pullrequest:created',
|
|
14
|
+
'pullrequest:updated',
|
|
15
|
+
'pullrequest:approved',
|
|
16
|
+
'pullrequest:unapproved',
|
|
17
|
+
'pullrequest:fulfilled',
|
|
18
|
+
'pullrequest:rejected',
|
|
19
|
+
'pullrequest:comment_created',
|
|
20
|
+
'pullrequest:comment_updated',
|
|
21
|
+
'pullrequest:comment_deleted'
|
|
22
|
+
].freeze
|
|
23
|
+
|
|
24
|
+
def create(user_name, repo_name, params = {})
|
|
25
|
+
_update_user_repo_params(user_name, repo_name)
|
|
26
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
27
|
+
normalize! params
|
|
28
|
+
assert_required_keys(%w[description url active events], params)
|
|
29
|
+
_validate_given_events(params)
|
|
30
|
+
assert_required_values_present(
|
|
31
|
+
params,
|
|
32
|
+
'description',
|
|
33
|
+
'url',
|
|
34
|
+
'active',
|
|
35
|
+
'events'
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
options = { headers: { 'Content-Type' => 'application/json' } }
|
|
39
|
+
post_request("/2.0/repositories/#{user_name}/#{repo_name}/hooks", params, options)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def list(user_name, repo_name)
|
|
43
|
+
_update_user_repo_params(user_name, repo_name)
|
|
44
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
45
|
+
|
|
46
|
+
get_request("/2.0/repositories/#{user_name}/#{repo_name}/hooks")
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def get(user_name, repo_name, hook_uuid)
|
|
50
|
+
_update_user_repo_params(user_name, repo_name)
|
|
51
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
52
|
+
|
|
53
|
+
get_request(
|
|
54
|
+
"/2.0/repositories/#{user_name}/#{repo_name}/hooks/#{hook_uuid}"
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def edit(user_name, repo_name, hook_uuid, params = {})
|
|
59
|
+
_update_user_repo_params(user_name, repo_name)
|
|
60
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
61
|
+
normalize! params
|
|
62
|
+
assert_required_keys(%w[description url active events], params)
|
|
63
|
+
_validate_given_events(params)
|
|
64
|
+
assert_required_values_present(
|
|
65
|
+
params,
|
|
66
|
+
'description',
|
|
67
|
+
'url',
|
|
68
|
+
'active',
|
|
69
|
+
'events'
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
options = { headers: { 'Content-Type' => 'application/json' } }
|
|
73
|
+
put_request(
|
|
74
|
+
"/2.0/repositories/#{user_name}/#{repo_name}/hooks/#{hook_uuid}",
|
|
75
|
+
params, options
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def delete(user_name, repo_name, hook_uuid)
|
|
80
|
+
_update_user_repo_params(user_name, repo_name)
|
|
81
|
+
_validate_user_repo_params(user, repo) unless user? && repo?
|
|
82
|
+
|
|
83
|
+
delete_request(
|
|
84
|
+
"/2.0/repositories/#{user_name}/#{repo_name}/hooks/#{hook_uuid}"
|
|
85
|
+
)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
private
|
|
89
|
+
|
|
90
|
+
def _validate_given_events(params)
|
|
91
|
+
given_events = params['events']
|
|
92
|
+
raise BitBucket::Error::NoEvents if given_events.empty?
|
|
93
|
+
|
|
94
|
+
given_events.each do |k|
|
|
95
|
+
raise BitBucket::Error::BadEvents, k unless EVENTS.include?(k)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module BitBucket
|
|
3
|
+
# Defines HTTP verbs
|
|
4
|
+
module Request
|
|
5
|
+
METHODS = %i[get post put delete patch].freeze
|
|
6
|
+
METHODS_WITH_BODIES = %i[post put patch].freeze
|
|
7
|
+
|
|
8
|
+
def get_request(path, params = {}, options = {})
|
|
9
|
+
request(:get, path, params, options)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def patch_request(path, params = {}, options = {})
|
|
13
|
+
request(:patch, path, params, options)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def post_request(path, params = {}, options = {})
|
|
17
|
+
request(:post, path, params, options)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def put_request(path, params = {}, options = {})
|
|
21
|
+
request(:put, path, params, options)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def delete_request(path, params = {}, options = {})
|
|
25
|
+
request(:delete, path, params, options)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def request(method, path, params, options = {})
|
|
29
|
+
raise ArgumentError, "unkown http method: #{method}" unless METHODS.include?(method)
|
|
30
|
+
|
|
31
|
+
# _extract_mime_type(params, options)
|
|
32
|
+
|
|
33
|
+
puts "EXECUTED: #{method} - #{path} with #{params} and #{options}" if ENV['DEBUG']
|
|
34
|
+
|
|
35
|
+
conn = connection(options)
|
|
36
|
+
path = (conn.path_prefix + path).gsub(%r{//}, '/') if conn.path_prefix != '/'
|
|
37
|
+
|
|
38
|
+
response = conn.send(method) do |request|
|
|
39
|
+
request['Authorization'] = "Bearer #{new_access_token}" unless new_access_token.nil?
|
|
40
|
+
case method.to_sym
|
|
41
|
+
when *(METHODS - METHODS_WITH_BODIES)
|
|
42
|
+
request.body = params.delete('data') if params.key?('data')
|
|
43
|
+
request.url(path, params)
|
|
44
|
+
when *METHODS_WITH_BODIES
|
|
45
|
+
request.path = path
|
|
46
|
+
unless params.empty?
|
|
47
|
+
# data = extract_data_from_params(params)
|
|
48
|
+
# request.body = MultiJson.dump(data)
|
|
49
|
+
request.body = MultiJson.dump(params)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
response.body
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
# def extract_data_from_params(params) # :nodoc:
|
|
59
|
+
# if params.has_key?('data') and !params['data'].nil?
|
|
60
|
+
# params['data']
|
|
61
|
+
# else
|
|
62
|
+
# params
|
|
63
|
+
# end
|
|
64
|
+
# end
|
|
65
|
+
|
|
66
|
+
def _extract_mime_type(params, options) # :nodoc:
|
|
67
|
+
options['resource'] = params['resource'] ? params.delete('resource') : ''
|
|
68
|
+
options['mime_type'] = params['resource'] ? params.delete('mime_type') : ''
|
|
69
|
+
end
|
|
70
|
+
end # Request
|
|
71
|
+
end # BitBucket
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'faraday'
|
|
3
|
+
require 'base64'
|
|
4
|
+
|
|
5
|
+
module BitBucket
|
|
6
|
+
module Request
|
|
7
|
+
class BasicAuth < Faraday::Middleware
|
|
8
|
+
dependency 'base64'
|
|
9
|
+
|
|
10
|
+
def call(env)
|
|
11
|
+
env[:request_headers].merge!('Authorization' => "Basic #{@auth}\"")
|
|
12
|
+
|
|
13
|
+
@app.call env
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def initialize(app, *args)
|
|
17
|
+
@app = app
|
|
18
|
+
credentials = ''
|
|
19
|
+
options = args.extract_options!
|
|
20
|
+
if options.key? :login
|
|
21
|
+
credentials = "#{options[:login]}:#{options[:password]}"
|
|
22
|
+
elsif options.key? :basic_auth
|
|
23
|
+
credentials = (options[:basic_auth]).to_s
|
|
24
|
+
end
|
|
25
|
+
@auth = Base64.encode64(credentials)
|
|
26
|
+
@auth.gsub!("\n", '')
|
|
27
|
+
end
|
|
28
|
+
end # BasicAuth
|
|
29
|
+
end # Request
|
|
30
|
+
end # BitBucket
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'faraday'
|
|
3
|
+
|
|
4
|
+
module BitBucket
|
|
5
|
+
class Request::Jsonize < Faraday::Middleware
|
|
6
|
+
CONTENT_TYPE = 'Content-Type'
|
|
7
|
+
MIME_TYPE = 'application/json'
|
|
8
|
+
|
|
9
|
+
dependency 'multi_json'
|
|
10
|
+
|
|
11
|
+
def call(env)
|
|
12
|
+
if request_with_body?(env)
|
|
13
|
+
env[:request_headers][CONTENT_TYPE] ||= MIME_TYPE
|
|
14
|
+
env[:body] = encode_body env unless env[:body].respond_to?(:to_str)
|
|
15
|
+
end
|
|
16
|
+
@app.call env
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def encode_body(env)
|
|
20
|
+
MultiJson.dump(env[:body])
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def request_with_body?(env)
|
|
24
|
+
type = request_type(env)
|
|
25
|
+
has_body?(env) && (type.empty? || (type == MIME_TYPE))
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Don't encode bodies in string form
|
|
29
|
+
def has_body?(env)
|
|
30
|
+
(body = env[:body]) && !(body.respond_to?(:to_str) && body.empty?)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def request_type(env)
|
|
34
|
+
type = env[:request_headers][CONTENT_TYPE].to_s
|
|
35
|
+
type = type.split(';', 2).first if type.index(';')
|
|
36
|
+
type
|
|
37
|
+
end
|
|
38
|
+
end # Request::Jsonize
|
|
39
|
+
end # BitBucket
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'faraday'
|
|
3
|
+
|
|
4
|
+
module BitBucket
|
|
5
|
+
module Request
|
|
6
|
+
class OAuth < Faraday::Middleware
|
|
7
|
+
include BitBucket::Utils::Url
|
|
8
|
+
|
|
9
|
+
AUTH_HEADER = 'Authorization'
|
|
10
|
+
|
|
11
|
+
dependency 'simple_oauth'
|
|
12
|
+
|
|
13
|
+
def call(env)
|
|
14
|
+
# Extract parameters from the query
|
|
15
|
+
request = Rack::Request.new env
|
|
16
|
+
env[:url] = URI.parse(request.url) if env[:url].nil?
|
|
17
|
+
params = {}.update query_params(env[:url])
|
|
18
|
+
|
|
19
|
+
if (@token && @secret) && (!@token.empty? && !@secret.empty?)
|
|
20
|
+
access_token = ::OAuth::AccessToken.new(@consumer, @token, @secret)
|
|
21
|
+
env[:url].query = build_query params
|
|
22
|
+
|
|
23
|
+
puts oauth_helper.header
|
|
24
|
+
puts oauth_helper.header.class
|
|
25
|
+
env[:request_headers].merge!(AUTH_HEADER => oauth_helper.header)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
env[:url].query = build_query params
|
|
29
|
+
|
|
30
|
+
@app.call env
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def initialize(app, *args)
|
|
34
|
+
super app
|
|
35
|
+
@app = app
|
|
36
|
+
@consumer = args.shift
|
|
37
|
+
@token = args.shift
|
|
38
|
+
@secret = args.shift
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def query_params(url)
|
|
42
|
+
if url.query.nil? || url.query.empty?
|
|
43
|
+
{}
|
|
44
|
+
else
|
|
45
|
+
parse_query url.query
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end # OAuth
|
|
49
|
+
end # Request
|
|
50
|
+
end # BitBucket
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'faraday'
|
|
3
|
+
|
|
4
|
+
module BitBucket
|
|
5
|
+
# Contains methods and attributes that act on the response returned from the
|
|
6
|
+
# request
|
|
7
|
+
class Response < Faraday::Response::Middleware
|
|
8
|
+
CONTENT_TYPE = 'Content-Type'
|
|
9
|
+
|
|
10
|
+
class << self
|
|
11
|
+
attr_accessor :parser
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.define_parser(&block)
|
|
15
|
+
@parser = block
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def response_type(env)
|
|
19
|
+
env[:response_headers][CONTENT_TYPE].to_s
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def parse_response?(env)
|
|
23
|
+
env[:body].respond_to? :to_str
|
|
24
|
+
end
|
|
25
|
+
end # Response
|
|
26
|
+
end # BitBucket
|