tinybucket 0.1.7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rubocop.yml +2 -1
  4. data/Gemfile +4 -4
  5. data/README.md +48 -20
  6. data/Rakefile +7 -0
  7. data/lib/tinybucket.rb +7 -4
  8. data/lib/tinybucket/api/base_api.rb +2 -19
  9. data/lib/tinybucket/api/branch_restrictions_api.rb +35 -11
  10. data/lib/tinybucket/api/comments_api.rb +38 -4
  11. data/lib/tinybucket/api/commits_api.rb +60 -10
  12. data/lib/tinybucket/api/diff_api.rb +22 -0
  13. data/lib/tinybucket/api/helper/api_helper.rb +0 -11
  14. data/lib/tinybucket/api/helper/commits_helper.rb +7 -0
  15. data/lib/tinybucket/api/pull_requests_api.rb +79 -22
  16. data/lib/tinybucket/api/repo_api.rb +37 -17
  17. data/lib/tinybucket/api/repos_api.rb +13 -6
  18. data/lib/tinybucket/api/team_api.rb +54 -29
  19. data/lib/tinybucket/api/user_api.rb +43 -23
  20. data/lib/tinybucket/api_factory.rb +2 -4
  21. data/lib/tinybucket/client.rb +39 -20
  22. data/lib/tinybucket/config.rb +1 -1
  23. data/lib/tinybucket/connection.rb +3 -3
  24. data/lib/tinybucket/enumerator.rb +44 -0
  25. data/lib/tinybucket/error.rb +2 -0
  26. data/lib/tinybucket/error/conflict.rb +6 -0
  27. data/lib/tinybucket/error/not_found.rb +6 -0
  28. data/lib/tinybucket/error/service_error.rb +8 -4
  29. data/lib/tinybucket/iterator.rb +77 -0
  30. data/lib/tinybucket/model/base.rb +6 -6
  31. data/lib/tinybucket/model/branch_restriction.rb +27 -0
  32. data/lib/tinybucket/model/comment.rb +32 -6
  33. data/lib/tinybucket/model/commit.rb +63 -9
  34. data/lib/tinybucket/model/concerns.rb +1 -0
  35. data/lib/tinybucket/model/concerns/enumerable.rb +18 -0
  36. data/lib/tinybucket/model/error_response.rb +16 -1
  37. data/lib/tinybucket/model/page.rb +25 -49
  38. data/lib/tinybucket/model/profile.rb +56 -8
  39. data/lib/tinybucket/model/pull_request.rb +114 -18
  40. data/lib/tinybucket/model/repository.rb +177 -36
  41. data/lib/tinybucket/model/team.rb +70 -10
  42. data/lib/tinybucket/request.rb +2 -0
  43. data/lib/tinybucket/response.rb +1 -1
  44. data/lib/tinybucket/response/handler.rb +21 -0
  45. data/lib/tinybucket/version.rb +1 -1
  46. data/spec/fixtures/repositories/test_owner/test_repo/commit/1/approve/post.json +16 -0
  47. data/spec/lib/tinybucket/api/branch_restrictions_api_spec.rb +1 -2
  48. data/spec/lib/tinybucket/api/comments_api_spec.rb +1 -2
  49. data/spec/lib/tinybucket/api/commits_api_spec.rb +92 -3
  50. data/spec/lib/tinybucket/api/pull_requests_api_spec.rb +34 -4
  51. data/spec/lib/tinybucket/api/repo_api_spec.rb +1 -2
  52. data/spec/lib/tinybucket/api/repos_api_spec.rb +1 -2
  53. data/spec/lib/tinybucket/api/team_api_spec.rb +1 -6
  54. data/spec/lib/tinybucket/api/user_api_spec.rb +15 -2
  55. data/spec/lib/tinybucket/api_factory_spec.rb +2 -7
  56. data/spec/lib/tinybucket/client_spec.rb +10 -25
  57. data/spec/lib/tinybucket/error/service_error_spec.rb +23 -0
  58. data/spec/lib/tinybucket/model/commit_spec.rb +27 -4
  59. data/spec/lib/tinybucket/model/page_spec.rb +0 -30
  60. data/spec/lib/tinybucket/model/profile_spec.rb +3 -3
  61. data/spec/lib/tinybucket/model/pull_request_spec.rb +11 -5
  62. data/spec/lib/tinybucket/model/repository_spec.rb +5 -5
  63. data/spec/lib/tinybucket/model/team_spec.rb +4 -4
  64. data/spec/lib/tinybucket_spec.rb +10 -27
  65. data/spec/spec_helper.rb +3 -2
  66. data/spec/support/api_response_macros.rb +2 -2
  67. metadata +12 -3
  68. data/lib/tinybucket/response/error_handler.rb +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 71d4192b2e8e49b41049f5b1f55fb6e76eb88aeb
4
- data.tar.gz: 6f7140b93b530ffb03bce656742dfbbbb097cffc
3
+ metadata.gz: d07ebbc76492e41177f7ff796acae6d1c57f6444
4
+ data.tar.gz: 84b11267ed48262a4a47295f495cbfa55430c421
5
5
  SHA512:
6
- metadata.gz: 15cefdad2130c594419751a8debd493e5362a1d6d4cb0d46b16dd7aea8f4bd86cdd0208052ab8747ea614f5ed428fc1e01eac29ca39700ccce9fac7ae4ccf6b4
7
- data.tar.gz: 2439679903d2ae7ea9e7eabf51e02e3a1da7ff37b03de89f36dbc6000182102a57c37692b5e09376fed768217ab6378f2f6f6ee3efb74d5c186ead247fb83480
6
+ metadata.gz: 2d54aa23f2e5b42c4a16e7bd43319f66775cd222652116a53ec3ac9761dc86fcb30de11297bed60bb6ab26a27c8ded1e371f56f45f670e0f75b935bc94536c7b
7
+ data.tar.gz: 9646a04e42350d5f6878a0343e52afd22d929c29602ed3e192eae45874193bd2cab12bba3b58f91b573a1ecf57eb19c5db402990874dbaeef23f2ce5874fbea8
data/.gitignore CHANGED
@@ -11,6 +11,9 @@ app.rb
11
11
  log/
12
12
  *.swp
13
13
 
14
+ features
15
+ .envrc
16
+
14
17
  ## from github ignore.
15
18
 
16
19
  /.config
data/.rubocop.yml CHANGED
@@ -4,9 +4,10 @@ AllCops:
4
4
  Exclude:
5
5
  - 'app.rb'
6
6
  - 'spec/**/*'
7
+ - 'features/**/*'
7
8
  - 'test/**/*'
8
9
 
9
- Style/ClassLength:
10
+ Metrics/ClassLength:
10
11
  Max: 150
11
12
 
12
13
  MethodLength:
data/Gemfile CHANGED
@@ -6,11 +6,11 @@ gemspec
6
6
  gem 'rake', '~> 10.4'
7
7
  gem 'rspec', '~> 3.4'
8
8
  gem 'rspec-mocks', '~> 3.4'
9
- gem 'webmock', '~> 1.22'
10
- gem 'rubocop', '~> 0.35'
9
+ gem 'webmock', '~> 1.24'
10
+ gem 'rubocop', '~> 0.38'
11
11
 
12
- gem 'yard', '~> 0.8'
13
- gem 'yardstick', '~> 0.9.9'
12
+ gem 'yard', '~> 0.8.7'
13
+ gem 'yardstick', '~> 0.9'
14
14
 
15
15
  group :development, :test do
16
16
  gem 'pry'
data/README.md CHANGED
@@ -11,8 +11,9 @@ This gem is inspired by [vongrippen/bitbucket](https://github.com/vongrippen/bit
11
11
  [![Build Status](https://travis-ci.org/hirakiuc/tinybucket.svg?branch=master)](https://travis-ci.org/hirakiuc/tinybucket)
12
12
  [![Code Climate](https://codeclimate.com/github/hirakiuc/tinybucket/badges/gpa.svg)](https://codeclimate.com/github/hirakiuc/tinybucket)
13
13
  [![Coverage Status](https://coveralls.io/repos/hirakiuc/tinybucket/badge.png?branch=master)](https://coveralls.io/r/hirakiuc/tinybucket?branch=master)
14
+ [![Inline docs](http://inch-ci.org/github/hirakiuc/tinybucket.svg?branch=master)](http://inch-ci.org/github/hirakiuc/tinybucket)
14
15
 
15
- [![tinybucket API Documentation](https://www.omniref.com/ruby/gems/tinybucket.png)](https://www.omniref.com/ruby/gems/tinybucket)
16
+ [yard doc](http://www.rubydoc.info/github/hirakiuc/tinybucket/master) (master branch)
16
17
 
17
18
  ## Installation
18
19
 
@@ -42,31 +43,58 @@ This gem use built-in null_logger in default.
42
43
 
43
44
  If you want to set your logger, configure like this.
44
45
 
45
- ```
46
+ ```ruby
46
47
  logger = Logger.new($stdout)
47
48
  logger.level = Logger::WARN
48
49
 
49
50
  Tinybucket.configure do |config|
50
51
  config.logger = logger
52
+
53
+ # configure oauth_token/oauth_secret
54
+ config.oauth_token = 'key'
55
+ config.oauth_secret = 'secret'
51
56
  end
52
57
  ```
53
58
 
54
- ### init
59
+ ### Pagination
55
60
 
56
- ```
57
- bucket = Tinybucket.new(oauth_token: 'key', oauth_secret: 'secret')
58
- ```
61
+ After v1.0.0, tinybucket gem support [lazy enumerator](http://ruby-doc.org/core-2.2.0/Enumerator/Lazy.html) !
62
+
63
+ This feature make your code more rubyish, like this.
59
64
 
65
+ ```ruby
66
+ # get enumerator to enumerate repositories.
67
+ repos = bucket.repos('myname')
68
+
69
+ # Select repositories which has 2 pull requests to be reviewed.
70
+ repos = repos('my_name').select do |repo|
71
+ repo.pull_requests.size > 2
72
+ end.map(&:full_name)
60
73
  ```
61
- bucket = Tinybucket.new do |config|
62
- config.oauth_token = 'key'
63
- config.oauth_secret = 'secret'
64
- end
74
+
75
+ This enumerable feature depends on [Paging through object collections](https://confluence.atlassian.com/bitbucket/version-2-423626329.html#Version2-Pagingthroughobjectcollections) at Bitbucket Cloud REST API.
76
+
77
+ #### NOTE: About `size` attribute
78
+
79
+ [object collections wrapper](https://confluence.atlassian.com/bitbucket/version-2-423626329.html#Version2-Pagingthroughobjectcollections) has `size` attribute at Bitbucket Cloud REST API.
80
+
81
+ The `size` attribute describe as `optional` attribute.
82
+
83
+ In tinybucket gem, collection size depend on `side` attribute of [object collections wrapper](https://confluence.atlassian.com/bitbucket/version-2-423626329.html#Version2-Pagingthroughobjectcollections) in Bitbucket Cloud REST API.
84
+
85
+ So enumerator's `size` attribute may return `nil`.
86
+
87
+ ### init
88
+
89
+ ```ruby
90
+ bucket = Tinybucket.new
65
91
  ```
66
92
 
93
+ ### Endpoints
94
+
67
95
  #### teams Endpoint
68
96
 
69
- ```
97
+ ```ruby
70
98
  # [x] GET the team profile
71
99
  team = bucket.team('team name')
72
100
 
@@ -85,7 +113,7 @@ repos = team.repos
85
113
 
86
114
  #### users Endpoint
87
115
 
88
- ```
116
+ ```ruby
89
117
  # [x] GET the user profile
90
118
  user = bucket.user('user name')
91
119
 
@@ -101,7 +129,7 @@ repos = user.repos
101
129
 
102
130
  #### repositories Endpoint
103
131
 
104
- ```
132
+ ```ruby
105
133
  # [x] GET a list of all public repositories
106
134
  repos = bucket.repos
107
135
 
@@ -111,7 +139,7 @@ repos = bucket.repos('someone')
111
139
 
112
140
  ##### repository Resource
113
141
 
114
- ```
142
+ ```ruby
115
143
  # [x] GET a repository
116
144
  repo = bucket.repo('someone', 'great_repo')
117
145
 
@@ -134,7 +162,7 @@ repos = repo.forks
134
162
 
135
163
  ##### pullrequests Resource
136
164
 
137
- ```
165
+ ```ruby
138
166
  repo = bucket.repo('someone', 'great_repo')
139
167
 
140
168
  # [x] GET a list of open pull requests
@@ -182,7 +210,7 @@ comment = pull_request.comment(comment_id)
182
210
 
183
211
  ##### commits or commit Resource
184
212
 
185
- ```
213
+ ```ruby
186
214
  repo = bucket.repo('someone', 'great_repo')
187
215
 
188
216
  # [x] GET a commits list for a repository or compare commits across branches
@@ -198,16 +226,16 @@ comments = commit.comments
198
226
  # [x] GET an individual commit comment
199
227
  comment = commit.comment(comment_id)
200
228
 
201
- # [ ] POST a commit approval
229
+ # [x] POST a commit approval
202
230
  commit.approve
203
231
 
204
- # [ ] DELETE a commit approval
232
+ # [x] DELETE a commit approval
205
233
  commit.unapprove
206
234
  ```
207
235
 
208
236
  ##### branch-restrictions Resource
209
237
 
210
- ```
238
+ ```ruby
211
239
  repo = bucket.repo('someone', 'great_repo').find
212
240
 
213
241
  # [x] GET the branch-restrictions
@@ -228,7 +256,7 @@ restriction = repo.branch_restriction(restriction_id)
228
256
 
229
257
  ##### diff Resource
230
258
 
231
- ```
259
+ ```ruby
232
260
  repo = bucket.repo('someone', 'great_repo').find
233
261
  COMMIT_ID = '7e968c5'
234
262
 
data/Rakefile CHANGED
@@ -14,6 +14,13 @@ require 'rspec/core/rake_task'
14
14
  RSpec::Core::RakeTask.new(:spec)
15
15
  task :test => :spec
16
16
 
17
+ if Dir.exist?('./features')
18
+ RSpec::Core::RakeTask.new(:features) do |t|
19
+ t.pattern = './features/**/*_spec.rb'
20
+ t.rspec_opts = '-I ./features'
21
+ end
22
+ end
23
+
17
24
  begin
18
25
  require 'rubocop/rake_task'
19
26
  RuboCop::RakeTask.new
data/lib/tinybucket.rb CHANGED
@@ -14,13 +14,16 @@ require 'faraday_middleware/follow_oauth_redirects'
14
14
  require 'active_model'
15
15
 
16
16
  require 'logger'
17
+ require 'uri'
18
+
19
+ require 'tinybucket/enumerator'
20
+ require 'tinybucket/iterator'
17
21
 
18
22
  require 'tinybucket/config'
19
23
  require 'tinybucket/null_logger'
20
24
  require 'tinybucket/api'
21
25
  require 'tinybucket/api_factory'
22
26
  require 'tinybucket/api/helper'
23
- require 'tinybucket/client'
24
27
  require 'tinybucket/connection'
25
28
  require 'tinybucket/constants'
26
29
  require 'tinybucket/error'
@@ -30,7 +33,7 @@ require 'tinybucket/parser'
30
33
  require 'tinybucket/request'
31
34
  require 'tinybucket/response'
32
35
 
33
- require 'uri'
36
+ require 'tinybucket/client'
34
37
 
35
38
  require 'active_support/notifications'
36
39
  ActiveSupport::Notifications.subscribe('request.faraday') \
@@ -50,8 +53,8 @@ module Tinybucket
50
53
  include ActiveSupport::Configurable
51
54
  attr_accessor :logger, :api_client
52
55
 
53
- def new(options = {}, &block)
54
- @api_client = Tinybucket::Client.new(options, &block)
56
+ def new
57
+ @api_client = Tinybucket::Client.new
55
58
  end
56
59
 
57
60
  def configure
@@ -4,27 +4,10 @@ module Tinybucket
4
4
  include Tinybucket::Connection
5
5
  include Tinybucket::Request
6
6
 
7
- def initialize(config, options = {})
8
- @config = filter_config(config)
9
- @options = options
10
- yield if block_given?
11
- end
12
-
13
- protected
14
-
15
- def option(key)
16
- @options[key.intern]
17
- end
18
-
19
- def config(key)
20
- @config[key.intern]
21
- end
22
-
23
7
  private
24
8
 
25
- def filter_config(config)
26
- keys = %i(oauth_token oauth_secret)
27
- config.select { |key, _| keys.include?(key) }
9
+ def logger
10
+ Tinybucket.logger
28
11
  end
29
12
  end
30
13
  end
@@ -1,25 +1,49 @@
1
1
  module Tinybucket
2
2
  module Api
3
+ # BranchRestrictions API client
4
+ #
5
+ # @see https://confluence.atlassian.com/bitbucket/branch-restrictions-resource-387449181.html
6
+ # branch-restrictions Resource
7
+ #
8
+ # @!attribute [rw] repo_owner
9
+ # @return [String] repository owner name.
10
+ # @!attribute [rw] repo_slug
11
+ # @return [String] repository slug. (about {https://confluence.atlassian.com/bitbucket/repositories-endpoint-423626330.html#repositoriesEndpoint-Overview
12
+ # repo_slug})
3
13
  class BranchRestrictionsApi < BaseApi
4
14
  include Tinybucket::Api::Helper::BranchRestrictionsHelper
5
15
 
6
16
  attr_accessor :repo_owner, :repo_slug
7
17
 
18
+ # Send 'GET the branch-restrictions' request.
19
+ #
20
+ # @see https://confluence.atlassian.com/bitbucket/branch-restrictions-resource-387449181.html#branch-restrictionsResource-GETthebranch-restrictions
21
+ # GET the branch-restrictions
22
+ #
23
+ # @param options [Hash]
24
+ # @return [Tinybucket::Model::Page]
8
25
  def list(options = {})
9
- list = get_path(path_to_list,
10
- options,
11
- Tinybucket::Parser::BranchRestrictionsParser)
12
-
13
- list.next_proc = next_proc(:list, options)
14
- inject_api_config(list)
26
+ get_path(
27
+ path_to_list,
28
+ options,
29
+ Tinybucket::Parser::BranchRestrictionsParser
30
+ )
15
31
  end
16
32
 
33
+ # Send 'GET a specific restriction' request.
34
+ #
35
+ # @see https://confluence.atlassian.com/bitbucket/branch-restrictions-resource-387449181.html#branch-restrictionsResource-GETaspecificrestriction
36
+ # GET a specific restriction
37
+ #
38
+ # @param restriction_id [String] The restriction's identifier
39
+ # @param options [Hash]
40
+ # @return [Tinybucket::Model::BranchRestriction]
17
41
  def find(restriction_id, options = {})
18
- m = get_path(path_to_find(restriction_id),
19
- options,
20
- Tinybucket::Parser::BranchRestrictionParser)
21
-
22
- inject_api_config(m)
42
+ get_path(
43
+ path_to_find(restriction_id),
44
+ options,
45
+ Tinybucket::Parser::BranchRestrictionParser
46
+ )
23
47
  end
24
48
  end
25
49
  end
@@ -1,5 +1,14 @@
1
1
  module Tinybucket
2
2
  module Api
3
+ # Comments Api client
4
+ #
5
+ # @!attribute [rw] repo_owner
6
+ # @return [String] repository owner name.
7
+ # @!attribute [rw] repo_slug
8
+ # @return [String] repository slug. (about {https://confluence.atlassian.com/bitbucket/repositories-endpoint-423626330.html#repositoriesEndpoint-Overview
9
+ # repo_slug})
10
+ # @!attribute [rw] commented_to
11
+ # @return [Tinybucket::Model::Commit, Tinybucket::Model::PullRequest]
3
12
  class CommentsApi < BaseApi
4
13
  include Tinybucket::Api::Helper::CommentsHelper
5
14
 
@@ -7,24 +16,49 @@ module Tinybucket
7
16
 
8
17
  attr_accessor :commented_to
9
18
 
19
+ # Send 'GET a list of comments' request.
20
+ #
21
+ # This method send different request depend on 'commented_to' attribute.
22
+ #
23
+ # @note When 'commented_to' is {Tinybucket::Model::Commit} instance,
24
+ # this method send {https://confluence.atlassian.com/bitbucket/commits-or-commit-resource-389775478.html#commitsorcommitResource-GETalistofcommitcomments
25
+ # GET a list of commit comments}.
26
+ # @note When 'commented_to' is {Tinybucket::Model::PullRequest} instance,
27
+ # this method send {https://confluence.atlassian.com/bitbucket/pullrequests-resource-423626332.html#pullrequestsResource-GETalistofapullrequestcomments
28
+ # GET a list of pull request comments}.
29
+ #
30
+ # @param options [Hash]
31
+ # @return [Tinybucket::Model::Page]
10
32
  def list(options = {})
11
33
  list = get_path(path_to_list,
12
34
  options,
13
35
  Tinybucket::Parser::CommentsParser)
14
36
 
15
- list.next_proc = next_proc(:list, options)
16
-
17
37
  associate_with_target(list)
18
- inject_api_config(list)
38
+ list
19
39
  end
20
40
 
41
+ # Send 'GET a individual comment' request.
42
+ #
43
+ # This method send different request depend on 'commented_to' attribute.
44
+ #
45
+ # @note When 'commented_to' is {Tinybucket::Model::Commit} instance,
46
+ # this method send {https://confluence.atlassian.com/bitbucket/commits-or-commit-resource-389775478.html#commitsorcommitResource-GETanindividualcommitcomment
47
+ # GET an individual commit comment}.
48
+ # @note When 'commented_to' is {Tinybucket::Model::PullRequest} instance,
49
+ # this method send {https://confluence.atlassian.com/bitbucket/pullrequests-resource-423626332.html#pullrequestsResource-GETanindividualpullrequestcomment
50
+ # GET an individual pull request comment}.
51
+ #
52
+ # @param comment_id [String] comment identifier
53
+ # @param options [Hash]
54
+ # @return [Tinybucket::Model::Comment]
21
55
  def find(comment_id, options = {})
22
56
  comment = get_path(path_to_find(comment_id),
23
57
  options,
24
58
  Tinybucket::Parser::CommentParser)
25
59
 
26
60
  associate_with_target(comment)
27
- inject_api_config(comment)
61
+ comment
28
62
  end
29
63
 
30
64
  private
@@ -1,25 +1,75 @@
1
1
  module Tinybucket
2
2
  module Api
3
+ # Commits Api client
4
+ #
5
+ # @!attribute [rw] repo_owner
6
+ # @return [String] repository owner name.
7
+ # @!attribute [rw] repo_slug
8
+ # @return [String] repository slug. (about {https://confluence.atlassian.com/bitbucket/repositories-endpoint-423626330.html#repositoriesEndpoint-Overview
9
+ # repo_slug})
3
10
  class CommitsApi < BaseApi
4
11
  include Tinybucket::Api::Helper::CommitsHelper
5
12
 
6
13
  attr_accessor :repo_owner, :repo_slug
7
14
 
15
+ # Send 'GET a commits list for a repository' request
16
+ #
17
+ # @see https://confluence.atlassian.com/bitbucket/commits-or-commit-resource-389775478.html#commitsorcommitResource-GETacommitslistforarepositoryorcomparecommitsacrossbranches
18
+ # GET a commits list for a repository
19
+ #
20
+ # @note This method does not support 'compare commits across branches'
21
+ # API call, yet.
22
+ #
23
+ # @param options [Hash]
24
+ # @return [Tinybucket::Model::Page]
8
25
  def list(options = {})
9
- list = get_path(path_to_list,
10
- options,
11
- Tinybucket::Parser::CommitsParser)
12
-
13
- list.next_proc = next_proc(:list, options)
14
- inject_api_config(list)
26
+ get_path(
27
+ path_to_list,
28
+ options,
29
+ Tinybucket::Parser::CommitsParser
30
+ )
15
31
  end
16
32
 
33
+ # Send 'GET an individual commit' request
34
+ #
35
+ # @see https://confluence.atlassian.com/bitbucket/commits-or-commit-resource-389775478.html#commitsorcommitResource-GETanindividualcommit
36
+ # GET an individual commit
37
+ #
38
+ # @param revision [String] A SHA1 value for the commit.
39
+ # @param options [Hash]
40
+ # @return [Tinybucket::Model::Commit]
17
41
  def find(revision, options = {})
18
- m = get_path(path_to_find(revision),
19
- options,
20
- Tinybucket::Parser::CommitParser)
42
+ get_path(
43
+ path_to_find(revision),
44
+ options,
45
+ Tinybucket::Parser::CommitParser
46
+ )
47
+ end
48
+
49
+ # Send 'POST a commit approval' request
50
+ #
51
+ # @param revision [String]
52
+ # @param options [Hash]
53
+ # @return [true, false]
54
+ def approve(revision, options = {})
55
+ result = post_path(path_to_approve(revision), options)
56
+ (result['approved'] == true)
57
+ rescue Tinybucket::Error::Conflict => e
58
+ logger.debug 'Already approved: ' + e.inspect
59
+ true
60
+ end
21
61
 
22
- inject_api_config(m)
62
+ # Send 'DELETE a commit approval' request
63
+ #
64
+ # @param revision [String]
65
+ # @param options [Hash]
66
+ # @return [true, false]
67
+ def unapprove(revision, options = {})
68
+ delete_path(path_to_approve(revision), options)
69
+ true
70
+ rescue Tinybucket::Error::NotFound => e
71
+ logger.debug 'Already unapproved: ' + e.inspect
72
+ true
23
73
  end
24
74
  end
25
75
  end