tinybucket 0.1.7 → 1.0.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 (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