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.
Files changed (122) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +7 -0
  3. data/README.md +169 -0
  4. data/Rakefile +1 -0
  5. data/lib/bitbucket_rest_api.rb +86 -0
  6. data/lib/bitbucket_rest_api/api.rb +104 -0
  7. data/lib/bitbucket_rest_api/api/actions.rb +32 -0
  8. data/lib/bitbucket_rest_api/api_factory.rb +29 -0
  9. data/lib/bitbucket_rest_api/authorization.rb +31 -0
  10. data/lib/bitbucket_rest_api/client.rb +53 -0
  11. data/lib/bitbucket_rest_api/configuration.rb +103 -0
  12. data/lib/bitbucket_rest_api/connection.rb +97 -0
  13. data/lib/bitbucket_rest_api/constants.rb +57 -0
  14. data/lib/bitbucket_rest_api/core_ext/array.rb +6 -0
  15. data/lib/bitbucket_rest_api/core_ext/hash.rb +58 -0
  16. data/lib/bitbucket_rest_api/deprecation.rb +36 -0
  17. data/lib/bitbucket_rest_api/error.rb +37 -0
  18. data/lib/bitbucket_rest_api/error/bad_events.rb +10 -0
  19. data/lib/bitbucket_rest_api/error/bad_request.rb +11 -0
  20. data/lib/bitbucket_rest_api/error/blank_value.rb +10 -0
  21. data/lib/bitbucket_rest_api/error/client_error.rb +19 -0
  22. data/lib/bitbucket_rest_api/error/forbidden.rb +11 -0
  23. data/lib/bitbucket_rest_api/error/internal_server_error.rb +11 -0
  24. data/lib/bitbucket_rest_api/error/invalid_options.rb +17 -0
  25. data/lib/bitbucket_rest_api/error/no_events.rb +10 -0
  26. data/lib/bitbucket_rest_api/error/not_found.rb +11 -0
  27. data/lib/bitbucket_rest_api/error/required_params.rb +17 -0
  28. data/lib/bitbucket_rest_api/error/service_error.rb +18 -0
  29. data/lib/bitbucket_rest_api/error/service_unavailable.rb +11 -0
  30. data/lib/bitbucket_rest_api/error/unauthorized.rb +11 -0
  31. data/lib/bitbucket_rest_api/error/unknown_value.rb +17 -0
  32. data/lib/bitbucket_rest_api/error/unprocessable_entity.rb +11 -0
  33. data/lib/bitbucket_rest_api/error/validations.rb +17 -0
  34. data/lib/bitbucket_rest_api/invitations.rb +14 -0
  35. data/lib/bitbucket_rest_api/issues.rb +229 -0
  36. data/lib/bitbucket_rest_api/issues/comments.rb +116 -0
  37. data/lib/bitbucket_rest_api/issues/components.rb +105 -0
  38. data/lib/bitbucket_rest_api/issues/milestones.rb +105 -0
  39. data/lib/bitbucket_rest_api/normalizer.rb +24 -0
  40. data/lib/bitbucket_rest_api/parameter_filter.rb +29 -0
  41. data/lib/bitbucket_rest_api/repos.rb +276 -0
  42. data/lib/bitbucket_rest_api/repos/changesets.rb +52 -0
  43. data/lib/bitbucket_rest_api/repos/commits.rb +38 -0
  44. data/lib/bitbucket_rest_api/repos/components.rb +35 -0
  45. data/lib/bitbucket_rest_api/repos/default_reviewers.rb +60 -0
  46. data/lib/bitbucket_rest_api/repos/download.rb +15 -0
  47. data/lib/bitbucket_rest_api/repos/following.rb +38 -0
  48. data/lib/bitbucket_rest_api/repos/forks.rb +66 -0
  49. data/lib/bitbucket_rest_api/repos/keys.rb +86 -0
  50. data/lib/bitbucket_rest_api/repos/pull_request.rb +158 -0
  51. data/lib/bitbucket_rest_api/repos/services.rb +101 -0
  52. data/lib/bitbucket_rest_api/repos/sources.rb +36 -0
  53. data/lib/bitbucket_rest_api/repos/webhooks.rb +99 -0
  54. data/lib/bitbucket_rest_api/request.rb +71 -0
  55. data/lib/bitbucket_rest_api/request/basic_auth.rb +30 -0
  56. data/lib/bitbucket_rest_api/request/jsonize.rb +39 -0
  57. data/lib/bitbucket_rest_api/request/oauth.rb +50 -0
  58. data/lib/bitbucket_rest_api/response.rb +26 -0
  59. data/lib/bitbucket_rest_api/response/helpers.rb +18 -0
  60. data/lib/bitbucket_rest_api/response/jsonize.rb +25 -0
  61. data/lib/bitbucket_rest_api/response/mashify.rb +23 -0
  62. data/lib/bitbucket_rest_api/response/raise_error.rb +28 -0
  63. data/lib/bitbucket_rest_api/response/xmlize.rb +25 -0
  64. data/lib/bitbucket_rest_api/result.rb +136 -0
  65. data/lib/bitbucket_rest_api/teams.rb +91 -0
  66. data/lib/bitbucket_rest_api/user.rb +87 -0
  67. data/lib/bitbucket_rest_api/users.rb +20 -0
  68. data/lib/bitbucket_rest_api/users/account.rb +50 -0
  69. data/lib/bitbucket_rest_api/utils/url.rb +61 -0
  70. data/lib/bitbucket_rest_api/validations.rb +23 -0
  71. data/lib/bitbucket_rest_api/validations/format.rb +21 -0
  72. data/lib/bitbucket_rest_api/validations/presence.rb +21 -0
  73. data/lib/bitbucket_rest_api/validations/required.rb +37 -0
  74. data/lib/bitbucket_rest_api/validations/token.rb +38 -0
  75. data/lib/bitbucket_rest_api/version.rb +10 -0
  76. data/lib/bitbuckets.rb +2 -0
  77. data/spec/bitbucket_rest_api/api/actions_spec.rb +18 -0
  78. data/spec/bitbucket_rest_api/api_factory_spec.rb +28 -0
  79. data/spec/bitbucket_rest_api/api_spec.rb +87 -0
  80. data/spec/bitbucket_rest_api/authorization_spec.rb +74 -0
  81. data/spec/bitbucket_rest_api/client_spec.rb +17 -0
  82. data/spec/bitbucket_rest_api/core_ext/array_spec.rb +13 -0
  83. data/spec/bitbucket_rest_api/core_ext/hash_spec.rb +47 -0
  84. data/spec/bitbucket_rest_api/deprecation_spec.rb +31 -0
  85. data/spec/bitbucket_rest_api/error/bad_events_spec.rb +11 -0
  86. data/spec/bitbucket_rest_api/error/blank_value_spec.rb +14 -0
  87. data/spec/bitbucket_rest_api/error/no_events_spec.rb +11 -0
  88. data/spec/bitbucket_rest_api/invitations_spec.rb +21 -0
  89. data/spec/bitbucket_rest_api/issues/comments_spec.rb +89 -0
  90. data/spec/bitbucket_rest_api/issues/components_spec.rb +89 -0
  91. data/spec/bitbucket_rest_api/issues/milestones_spec.rb +89 -0
  92. data/spec/bitbucket_rest_api/issues_spec.rb +91 -0
  93. data/spec/bitbucket_rest_api/normalizer_spec.rb +29 -0
  94. data/spec/bitbucket_rest_api/parameter_filter_spec.rb +42 -0
  95. data/spec/bitbucket_rest_api/repos/changesets_spec.rb +44 -0
  96. data/spec/bitbucket_rest_api/repos/commits_spec.rb +21 -0
  97. data/spec/bitbucket_rest_api/repos/components_spec.rb +43 -0
  98. data/spec/bitbucket_rest_api/repos/default_reviewers_spec.rb +65 -0
  99. data/spec/bitbucket_rest_api/repos/download_spec.rb +10 -0
  100. data/spec/bitbucket_rest_api/repos/following_spec.rb +53 -0
  101. data/spec/bitbucket_rest_api/repos/forks_spec.rb +46 -0
  102. data/spec/bitbucket_rest_api/repos/keys_spec.rb +73 -0
  103. data/spec/bitbucket_rest_api/repos/pull_request_spec.rb +283 -0
  104. data/spec/bitbucket_rest_api/repos/sources_spec.rb +78 -0
  105. data/spec/bitbucket_rest_api/repos/webhooks_spec.rb +245 -0
  106. data/spec/bitbucket_rest_api/repos_spec.rb +158 -0
  107. data/spec/bitbucket_rest_api/request/jsonize_spec.rb +19 -0
  108. data/spec/bitbucket_rest_api/request/oauth_spec.rb +26 -0
  109. data/spec/bitbucket_rest_api/request_spec.rb +88 -0
  110. data/spec/bitbucket_rest_api/response/jsonize_spec.rb +13 -0
  111. data/spec/bitbucket_rest_api/response/mashify_spec.rb +33 -0
  112. data/spec/bitbucket_rest_api/response/raise_error_spec.rb +42 -0
  113. data/spec/bitbucket_rest_api/teams_spec.rb +136 -0
  114. data/spec/bitbucket_rest_api/user_spec.rb +78 -0
  115. data/spec/bitbucket_rest_api/utils/url_spec.rb +34 -0
  116. data/spec/bitbucket_rest_api/validations/format_spec.rb +30 -0
  117. data/spec/bitbucket_rest_api/validations/presence_spec.rb +13 -0
  118. data/spec/bitbucket_rest_api/validations/required_spec.rb +44 -0
  119. data/spec/bitbucket_rest_api/validations/token_spec.rb +17 -0
  120. data/spec/bitbucket_rest_api_spec.rb +17 -0
  121. data/spec/spec_helper.rb +24 -0
  122. 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