reenhanced_bitbucket_api 0.1.6 → 0.3.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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/lib/bitbucket_rest_api/api/arguments.rb +248 -0
  3. data/lib/bitbucket_rest_api/api/config/property.rb +30 -0
  4. data/lib/bitbucket_rest_api/api/config/property_set.rb +118 -0
  5. data/lib/bitbucket_rest_api/api/config.rb +107 -0
  6. data/lib/bitbucket_rest_api/api/factory.rb +29 -0
  7. data/lib/bitbucket_rest_api/api.rb +155 -33
  8. data/lib/bitbucket_rest_api/{invitations.rb → client/invitations.rb} +4 -3
  9. data/lib/bitbucket_rest_api/{issues → client/issues}/comments.rb +2 -11
  10. data/lib/bitbucket_rest_api/{issues → client/issues}/components.rb +3 -6
  11. data/lib/bitbucket_rest_api/{issues → client/issues}/milestones.rb +3 -7
  12. data/lib/bitbucket_rest_api/{issues.rb → client/issues.rb} +9 -25
  13. data/lib/bitbucket_rest_api/{repos → client/repos}/changesets.rb +3 -2
  14. data/lib/bitbucket_rest_api/{repos → client/repos}/following.rb +2 -1
  15. data/lib/bitbucket_rest_api/{repos → client/repos}/keys.rb +2 -1
  16. data/lib/bitbucket_rest_api/client/repos/pull_requests/activity.rb +22 -0
  17. data/lib/bitbucket_rest_api/client/repos/pull_requests/comments.rb +40 -0
  18. data/lib/bitbucket_rest_api/client/repos/pull_requests/commits.rb +24 -0
  19. data/lib/bitbucket_rest_api/client/repos/pull_requests.rb +205 -0
  20. data/lib/bitbucket_rest_api/{repos → client/repos}/services.rb +2 -1
  21. data/lib/bitbucket_rest_api/{repos → client/repos}/sources.rb +2 -1
  22. data/lib/bitbucket_rest_api/{repos.rb → client/repos.rb} +26 -40
  23. data/lib/bitbucket_rest_api/{user.rb → client/user.rb} +2 -7
  24. data/lib/bitbucket_rest_api/{users → client/users}/account.rb +2 -1
  25. data/lib/bitbucket_rest_api/client/users.rb +14 -0
  26. data/lib/bitbucket_rest_api/client.rb +28 -32
  27. data/lib/bitbucket_rest_api/configuration.rb +24 -67
  28. data/lib/bitbucket_rest_api/connection.rb +15 -50
  29. data/lib/bitbucket_rest_api/constants.rb +1 -9
  30. data/lib/bitbucket_rest_api/core_ext/array.rb +1 -1
  31. data/lib/bitbucket_rest_api/error/invalid_options.rb +1 -1
  32. data/lib/bitbucket_rest_api/error/required_params.rb +1 -1
  33. data/lib/bitbucket_rest_api/error/unknown_value.rb +1 -1
  34. data/lib/bitbucket_rest_api/ext/faraday.rb +38 -0
  35. data/lib/bitbucket_rest_api/middleware.rb +31 -0
  36. data/lib/bitbucket_rest_api/null_encoder.rb +25 -0
  37. data/lib/bitbucket_rest_api/page_iterator.rb +90 -0
  38. data/lib/bitbucket_rest_api/page_links.rb +33 -0
  39. data/lib/bitbucket_rest_api/paged_request.rb +29 -0
  40. data/lib/bitbucket_rest_api/pagination.rb +98 -0
  41. data/lib/bitbucket_rest_api/parameter_filter.rb +1 -1
  42. data/lib/bitbucket_rest_api/params_hash.rb +100 -0
  43. data/lib/bitbucket_rest_api/request/basic_auth.rb +4 -2
  44. data/lib/bitbucket_rest_api/request/jsonize.rb +5 -0
  45. data/lib/bitbucket_rest_api/request/oauth.rb +3 -3
  46. data/lib/bitbucket_rest_api/request/verbs.rb +53 -0
  47. data/lib/bitbucket_rest_api/request.rb +60 -36
  48. data/lib/bitbucket_rest_api/response/header.rb +68 -0
  49. data/lib/bitbucket_rest_api/response_wrapper.rb +157 -0
  50. data/lib/bitbucket_rest_api/result.rb +5 -77
  51. data/lib/bitbucket_rest_api/users.rb +4 -8
  52. data/lib/bitbucket_rest_api/validations/presence.rb +16 -11
  53. data/lib/bitbucket_rest_api/validations.rb +6 -6
  54. data/lib/bitbucket_rest_api/version.rb +2 -2
  55. data/lib/bitbucket_rest_api.rb +89 -44
  56. metadata +39 -131
  57. data/lib/bitbucket_rest_api/api_factory.rb +0 -30
@@ -1,36 +1,43 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  require 'bitbucket_rest_api/configuration'
4
- require 'bitbucket_rest_api/connection'
5
- require 'bitbucket_rest_api/validations'
6
- require 'bitbucket_rest_api/request'
7
4
  require 'bitbucket_rest_api/core_ext/hash'
8
5
  require 'bitbucket_rest_api/core_ext/array'
9
6
  require 'bitbucket_rest_api/compatibility'
7
+ require 'bitbucket_rest_api/null_encoder'
8
+
9
+ require 'bitbucket_rest_api/request/verbs'
10
+
10
11
  require 'bitbucket_rest_api/api/actions'
11
- require 'bitbucket_rest_api/api_factory'
12
+ require 'bitbucket_rest_api/api/factory'
13
+ require 'bitbucket_rest_api/api/arguments'
12
14
 
13
15
  module BitBucket
14
16
  class API
17
+ extend BitBucket::ClassMethods
18
+ include Constants
15
19
  include Authorization
16
- include Connection
17
- include Request
20
+ include Request::Verbs
18
21
 
19
22
  # TODO consider these optional in a stack
20
23
  include Validations
21
24
  include ParameterFilter
22
25
  include Normalizer
23
26
 
24
- attr_reader *Configuration::VALID_OPTIONS_KEYS
27
+ @version = '1.0'
28
+
29
+ attr_reader *BitBucket.configuration.property_names
25
30
 
26
- attr_accessor *VALID_API_KEYS
31
+ attr_accessor *Validations::VALID_API_KEYS
32
+
33
+ attr_accessor :current_options
27
34
 
28
35
  # Callback to update global configuration options
29
36
  class_eval do
30
- Configuration::VALID_OPTIONS_KEYS.each do |key|
37
+ BitBucket.configuration.property_names.each do |key|
31
38
  define_method "#{key}=" do |arg|
32
39
  self.instance_variable_set("@#{key}", arg)
33
- BitBucket.send("#{key}=", arg)
40
+ self.current_options.merge!({:"#{key}" => arg})
34
41
  end
35
42
  end
36
43
  end
@@ -38,15 +45,22 @@ module BitBucket
38
45
  # Creates new API
39
46
  def initialize(options={}, &block)
40
47
  super()
41
- setup options
42
- set_api_client
48
+ setup(options)
49
+ yield_or_eval(&block) if block_given?
50
+ end
43
51
 
44
- self.instance_eval(&block) if block_given?
52
+ def yield_or_eval(&block)
53
+ return unless block
54
+ block.arity > 0 ? yield(self) : self.instance_eval(&block)
45
55
  end
46
56
 
47
57
  def setup(options={})
48
- options = BitBucket.options.merge(options)
49
- Configuration::VALID_OPTIONS_KEYS.each do |key|
58
+ options = BitBucket.configuration.fetch.merge(options)
59
+ self.current_options = options
60
+ if self.class.instance_variable_get('@version') == '2.0'
61
+ options[:endpoint] = BitBucket.endpoint.gsub(/\/api\/[0-9.]+/, "/api/2.0")
62
+ end
63
+ BitBucket.configuration.property_names.each do |key|
50
64
  send("#{key}=", options[key])
51
65
  end
52
66
  process_basic_auth(options[:basic_auth])
@@ -80,6 +94,99 @@ module BitBucket
80
94
  end
81
95
  end
82
96
 
97
+ # Acts as setter and getter for api requests arguments parsing.
98
+ #
99
+ # Returns Arguments instance.
100
+ #
101
+ def arguments(args=(not_set = true), options={}, &block)
102
+ if not_set
103
+ @arguments
104
+ else
105
+ @arguments = Arguments.new(options.merge!(api: self)).parse(*args, &block)
106
+ end
107
+ end
108
+
109
+ # Scope for passing request required arguments.
110
+ #
111
+ def with(args)
112
+ case args
113
+ when Hash
114
+ set args
115
+ when /.*\/.*/i
116
+ user, repo = args.split('/')
117
+ set :user => user, :repo => repo
118
+ else
119
+ ::Kernel.raise ArgumentError, 'This api does not support passed in arguments'
120
+ end
121
+ end
122
+
123
+ # Set a configuration option for a given namespace
124
+ #
125
+ # @param [String] option
126
+ # @param [Object] value
127
+ # @param [Boolean] ignore_setter
128
+ #
129
+ # @return [self]
130
+ #
131
+ # @api public
132
+ def set(option, value=(not_set=true), ignore_setter=false, &block)
133
+ raise ArgumentError, 'value not set' if block and !not_set
134
+ return self if !not_set and value.nil?
135
+
136
+ if not_set
137
+ set_options option
138
+ return self
139
+ end
140
+
141
+ if respond_to?("#{option}=") and not ignore_setter
142
+ return __send__("#{option}=", value)
143
+ end
144
+
145
+ define_accessors option, value
146
+ self
147
+ end
148
+
149
+ # Defines a namespace
150
+ #
151
+ # @param [Array[Symbol]] names
152
+ # the name for the scope
153
+ #
154
+ # @return [self]
155
+ #
156
+ # @api public
157
+ def self.namespace(*names)
158
+ options = names.last.is_a?(Hash) ? names.pop : {}
159
+ names = names.map(&:to_sym)
160
+ name = names.pop
161
+ return if public_method_defined?(name)
162
+
163
+ class_name = extract_class_name(name, options)
164
+ define_method(name) do |*args, &block|
165
+ options = args.last.is_a?(Hash) ? args.pop : {}
166
+ API::Factory.new(class_name, current_options.merge(options), &block)
167
+ end
168
+ self
169
+ end
170
+
171
+ # Extracts class name from options
172
+ #
173
+ # @param [Hash] options
174
+ # @option options [String] :full_name
175
+ # the full name for the class
176
+ # @option options [Boolean] :root
177
+ # if the class is at the root or not
178
+ #
179
+ # @return [String]
180
+ #
181
+ # @api private
182
+ def self.extract_class_name(name, options)
183
+ converted = options.fetch(:full_name, name).to_s
184
+ converted = converted.split('_').map(&:capitalize).join
185
+ class_name = options.fetch(:root, false) ? '': "#{self.name}::"
186
+ class_name += converted
187
+ class_name
188
+ end
189
+
83
190
  def _update_user_repo_params(user_name, repo_name=nil) # :nodoc:
84
191
  self.user = user_name || self.user
85
192
  self.repo = repo_name || self.repo
@@ -93,27 +200,42 @@ module BitBucket
93
200
  { 'user' => self.user, 'repo' => self.repo }.merge!(params)
94
201
  end
95
202
 
96
- # TODO: See whether still needed, consider adding to core_exts
97
- def _hash_traverse(hash, &block)
98
- hash.each do |key, val|
99
- block.call(key)
100
- case val
101
- when Hash
102
- val.keys.each do |k|
103
- _hash_traverse(val, &block)
104
- end
105
- when Array
106
- val.each do |item|
107
- _hash_traverse(item, &block)
108
- end
109
- end
203
+
204
+ private
205
+
206
+ # Set multiple options
207
+ #
208
+ # @api private
209
+ def set_options(options)
210
+ unless options.respond_to?(:each)
211
+ raise ArgumentError, 'cannot iterate over value'
110
212
  end
111
- return hash
213
+ options.each { |key, value| set(key, value) }
214
+ end
215
+
216
+ # Define setters and getters
217
+ #
218
+ # @api private
219
+ def define_accessors(option, value)
220
+ setter = proc { |val| set option, val, true }
221
+ getter = proc { value }
222
+
223
+ define_singleton_method("#{option}=", setter) if setter
224
+ define_singleton_method(option, getter) if getter
112
225
  end
113
226
 
114
- def _merge_mime_type(resource, params) # :nodoc:
115
- # params['resource'] = resource
116
- # params['mime_type'] = params['mime_type'] || :raw
227
+ # Dynamically define a method for setting request option
228
+ #
229
+ # @api private
230
+ def define_singleton_method(method_name, content=Proc.new)
231
+ (class << self; self; end).class_eval do
232
+ undef_method(method_name) if method_defined?(method_name)
233
+ if String === content
234
+ class_eval("def #{method_name}() #{content}; end")
235
+ else
236
+ define_method(method_name, &content)
237
+ end
238
+ end
117
239
  end
118
240
 
119
241
  end # API
@@ -1,15 +1,16 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module BitBucket
4
- class Invitations < API
4
+ class Client::Invitations < API
5
+ @version = '1.0'
6
+
5
7
  def invite(user_name, repo_name, emailaddress, perm)
6
8
  _update_user_repo_params(user_name, repo_name)
7
9
  _validate_user_repo_params(user, repo) unless user? && repo?
8
10
  _validate_presence_of emailaddress
9
11
  perm ||= "write"
10
12
 
11
- post_request("/invitations/#{user}/#{repo.downcase}/#{emailaddress}",
12
- permission: perm)
13
+ post_request("/invitations/#{user}/#{repo.downcase}/#{emailaddress}", permission: perm)
13
14
  end
14
15
  end
15
16
  end
@@ -1,17 +1,13 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module BitBucket
4
- class Issues::Comments < API
4
+ class Client::Issues::Comments < API
5
+ @version = '1.0'
5
6
 
6
7
  VALID_ISSUE_COMMENT_PARAM_NAME = %w[
7
8
  content
8
9
  ].freeze
9
10
 
10
- # Creates new Issues::Comments API
11
- def initialize(options = {})
12
- super(options)
13
- end
14
-
15
11
  # List comments on an issue
16
12
  #
17
13
  # = Examples
@@ -25,7 +21,6 @@ module BitBucket
25
21
  _validate_presence_of issue_id
26
22
 
27
23
  normalize! params
28
- # _merge_mime_type(:issue_comment, params)
29
24
 
30
25
  response = get_request("/repositories/#{user}/#{repo.downcase}/issues/#{issue_id}/comments/", params)
31
26
  return response unless block_given?
@@ -45,7 +40,6 @@ module BitBucket
45
40
  _validate_presence_of comment_id
46
41
 
47
42
  normalize! params
48
- # _merge_mime_type(:issue_comment, params)
49
43
 
50
44
  get_request("/repositories/#{user}/#{repo.downcase}/issues/comments/#{comment_id}", params)
51
45
  end
@@ -67,7 +61,6 @@ module BitBucket
67
61
  _validate_presence_of issue_id
68
62
 
69
63
  normalize! params
70
- # _merge_mime_type(:issue_comment, params)
71
64
  filter! VALID_ISSUE_COMMENT_PARAM_NAME, params
72
65
  assert_required_keys(%w[ content ], params)
73
66
 
@@ -90,7 +83,6 @@ module BitBucket
90
83
  _validate_presence_of comment_id
91
84
 
92
85
  normalize! params
93
- # _merge_mime_type(:issue_comment, params)
94
86
  filter! VALID_ISSUE_COMMENT_PARAM_NAME, params
95
87
  assert_required_keys(%w[ content ], params)
96
88
 
@@ -109,7 +101,6 @@ module BitBucket
109
101
  _validate_presence_of comment_id
110
102
 
111
103
  normalize! params
112
- # _merge_mime_type(:issue_comment, params)
113
104
 
114
105
  delete_request("/repositories/#{user}/#{repo.downcase}/issues/comments/#{comment_id}", params)
115
106
  end
@@ -1,14 +1,11 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module BitBucket
4
- class Issues::Components < API
4
+ class Client::Issues::Components < API
5
+ @version = '1.0'
5
6
 
6
7
  VALID_COMPONENT_INPUTS = %w[ name ].freeze
7
8
 
8
- # Creates new Issues::Components API
9
- def initialize(options = {})
10
- super(options)
11
- end
12
9
  # List all components for a repository
13
10
  #
14
11
  # = Examples
@@ -103,4 +100,4 @@ module BitBucket
103
100
  end
104
101
 
105
102
  end # Issues::Components
106
- end # BitBucket
103
+ end # BitBucket
@@ -1,17 +1,13 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module BitBucket
4
- class Issues::Milestones < API
4
+ class Client::Issues::Milestones < API
5
+ @version = '1.0'
5
6
 
6
7
  VALID_MILESTONE_INPUTS = %w[
7
8
  name
8
9
  ].freeze # :nodoc:
9
10
 
10
- # Creates new Issues::Milestones API
11
- def initialize(options = {})
12
- super(options)
13
- end
14
-
15
11
  # List milestones for a repository
16
12
  #
17
13
  # = Examples
@@ -104,4 +100,4 @@ module BitBucket
104
100
  end
105
101
 
106
102
  end # Issues::Milestones
107
- end # BitBucket
103
+ end # BitBucket
@@ -1,13 +1,13 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module BitBucket
4
- class Issues < API
5
- extend AutoloadHelper
4
+ class Client::Issues < API
5
+ @version = '1.0'
6
6
 
7
- autoload_all 'bitbucket_rest_api/issues',
8
- :Comments => 'comments',
9
- :Components => 'components',
10
- :Milestones => 'milestones'
7
+ require_all 'bitbucket_rest_api/client/issues',
8
+ 'comments',
9
+ 'components',
10
+ 'milestones'
11
11
 
12
12
  VALID_ISSUE_PARAM_NAMES = %w[
13
13
  title
@@ -32,25 +32,14 @@ module BitBucket
32
32
  'kind' => %w[ bug enhancement proposal task ]
33
33
  }
34
34
 
35
- # Creates new Issues API
36
- def initialize(options = { })
37
- super(options)
38
- end
39
-
40
35
  # Access to Issues::Comments API
41
- def comments
42
- @comments ||= ApiFactory.new 'Issues::Comments'
43
- end
36
+ namespace :comments
44
37
 
45
38
  # Access to Issues::Components API
46
- def components
47
- @components ||= ApiFactory.new 'Issues::Components'
48
- end
39
+ namespace :components
49
40
 
50
41
  # Access to Issues::Milestones API
51
- def milestones
52
- @milestones ||= ApiFactory.new 'Issues::Milestones'
53
- end
42
+ namespace :milestones
54
43
 
55
44
  # List issues for a repository
56
45
  #
@@ -79,7 +68,6 @@ module BitBucket
79
68
 
80
69
  normalize! params
81
70
  filter! VALID_ISSUE_PARAM_NAMES, params
82
- # _merge_mime_type(:issue, params)
83
71
  assert_valid_values(VALID_ISSUE_PARAM_VALUES, params)
84
72
 
85
73
  response = get_request("/repositories/#{user}/#{repo.downcase}/issues", params)
@@ -101,7 +89,6 @@ module BitBucket
101
89
  _validate_presence_of issue_id
102
90
 
103
91
  normalize! params
104
- # _merge_mime_type(:issue, params)
105
92
 
106
93
  get_request("/repositories/#{user}/#{repo.downcase}/issues/#{issue_id}", params)
107
94
  end
@@ -120,7 +107,6 @@ module BitBucket
120
107
  _validate_presence_of issue_id
121
108
 
122
109
  normalize! params
123
- # _merge_mime_type(:issue, params)
124
110
 
125
111
  delete_request("/repositories/#{user}/#{repo}/issues/#{issue_id}", params)
126
112
  end
@@ -169,7 +155,6 @@ module BitBucket
169
155
 
170
156
  normalize! params
171
157
  _merge_user_into_params!(params) unless params.has_key?('user')
172
- # _merge_mime_type(:issue, params)
173
158
  filter! VALID_ISSUE_PARAM_NAMES, params
174
159
  assert_required_keys(%w[ title ], params)
175
160
 
@@ -220,7 +205,6 @@ module BitBucket
220
205
  _validate_presence_of issue_id
221
206
 
222
207
  normalize! params
223
- # _merge_mime_type(:issue, params)
224
208
  filter! VALID_ISSUE_PARAM_NAMES, params
225
209
 
226
210
  put_request("/repositories/#{user}/#{repo.downcase}/issues/#{issue_id}/", params)
@@ -1,7 +1,8 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module BitBucket
4
- class Repos::Changesets < API
4
+ class Client::Repos::Changesets < API
5
+ @version = '1.0'
5
6
 
6
7
  REQUIRED_COMMENT_PARAMS = %w[
7
8
  body
@@ -51,4 +52,4 @@ module BitBucket
51
52
  alias :find :get
52
53
 
53
54
  end # Repos::Commits
54
- end # BitBucket
55
+ end # BitBucket
@@ -1,7 +1,8 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module BitBucket
4
- class Repos::Following < API
4
+ class Client::Repos::Following < API
5
+ @version = '1.0'
5
6
 
6
7
  # List repo followers
7
8
  #
@@ -1,7 +1,8 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module BitBucket
4
- class Repos::Keys < API
4
+ class Client::Repos::Keys < API
5
+ @version = '1.0'
5
6
 
6
7
  VALID_KEY_PARAM_NAMES = %w[ label key ].freeze
7
8
 
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ module BitBucket
4
+ class Client::Repos::PullRequests::Activity < API
5
+ @version = '2.0'
6
+
7
+ # Get the activity for a pull request
8
+ #
9
+ # = Examples
10
+ # bitbucket = BitBucket.new
11
+ # bitbucket.repos.pull_requests.activity 'user-name', 'repo-name', 'pull-request-id'
12
+ #
13
+ def list(user_name, repo_name, pull_request_id)
14
+ _update_user_repo_params(user_name, repo_name)
15
+ _validate_user_repo_params(user, repo) unless user? && repo?
16
+ _validate_presence_of pull_request_id
17
+
18
+ get_request("/repositories/#{user}/#{repo}/pullrequests/#{pull_request_id}/activity")
19
+ end
20
+ alias :all :list
21
+ end
22
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+
3
+ module BitBucket
4
+ class Client::Repos::PullRequests::Comments < API
5
+ @version = '2.0'
6
+
7
+ # List comments on a pull request
8
+ #
9
+ # = Examples
10
+ # bitbucket = BitBucket.new
11
+ # bitbucket.repos.pull_requests.comments.all 'user-name', 'repo-name', 'pull-request-id'
12
+ #
13
+ def list(user_name, repo_name, pull_request_id)
14
+ _update_user_repo_params(user_name, repo_name)
15
+ _validate_user_repo_params(user, repo) unless user? && repo?
16
+ _validate_presence_of pull_request_id
17
+
18
+ response = get_request("/repositories/#{user}/#{repo.downcase}/pullrequests/#{pull_request_id}/comments")
19
+ return response unless block_given?
20
+ response.each { |el| yield el }
21
+ end
22
+ alias :all :list
23
+
24
+ # Gets a single comment
25
+ #
26
+ # = Examples
27
+ # @bitbucket = BitBucket.new
28
+ # @bitbucket.repos.pull_requests.comments.get 'user-name', 'repo-name', 'pull-request-id')
29
+ #
30
+ def get(user_name, repo_name, pull_request_id, comment_id)
31
+ _update_user_repo_params(user_name, repo_name)
32
+ _validate_user_repo_params(user, repo) unless user? && repo?
33
+ _validate_presence_of pull_request_id
34
+ _validate_presence_of comment_id
35
+
36
+ get_request("/repositories/#{user}/#{repo.downcase}/pullrequests/#{pull_request_id}/comments/#{comment_id}")
37
+ end
38
+ alias :find :get
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ module BitBucket
4
+ class Client::Repos::PullRequests::Commits < API
5
+ @version = '2.0'
6
+
7
+ # List commits on a pull request
8
+ #
9
+ # = Examples
10
+ # bitbucket = BitBucket.new
11
+ # bitbucket.repos.pull_requests.commits.all 'user-name', 'repo-name', 'pull-request-id'
12
+ #
13
+ def list(user_name, repo_name, pull_request_id)
14
+ _update_user_repo_params(user_name, repo_name)
15
+ _validate_user_repo_params(user, repo) unless user? && repo?
16
+ _validate_presence_of pull_request_id
17
+
18
+ response = get_request("/repositories/#{user}/#{repo.downcase}/pullrequests/#{pull_request_id}/commits")
19
+ return response unless block_given?
20
+ response.each { |el| yield el }
21
+ end
22
+ alias :all :list
23
+ end
24
+ end