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
@@ -35,18 +35,18 @@ RSpec.describe Tinybucket::Model::Profile do
35
35
  describe 'followers' do
36
36
  let(:request_path) { "/users/#{username}/followers" }
37
37
  subject { model.followers() }
38
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
38
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
39
39
  end
40
40
 
41
41
  describe 'following' do
42
42
  let(:request_path) { "/users/#{username}/following" }
43
43
  subject { model.following }
44
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
44
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
45
45
  end
46
46
 
47
47
  describe 'repos' do
48
48
  let(:request_path) { "/repositories/#{username}" }
49
49
  subject { model.repos }
50
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
50
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
51
51
  end
52
52
  end
@@ -94,7 +94,7 @@ RSpec.describe Tinybucket::Model::PullRequest do
94
94
 
95
95
  subject { model.commits() }
96
96
 
97
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
97
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
98
98
  end
99
99
 
100
100
  describe 'comments' do
@@ -104,9 +104,15 @@ RSpec.describe Tinybucket::Model::PullRequest do
104
104
 
105
105
  subject { model.comments }
106
106
 
107
- it 'return comment list' do
108
- expect(subject).to be_an_instance_of(Tinybucket::Model::Page)
109
- subject.items.each do |comment|
107
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
108
+ it 'return comments which associate with this pull request' do
109
+ # extract iterator from enumerator.
110
+ iterator = subject.instance_variable_get(:@iterator)
111
+ # extract values from iterator.
112
+ values = iterator.instance_variable_get(:@values)
113
+
114
+ values.each do |comment|
115
+ expect(comment).to be_an_instance_of(Tinybucket::Model::Comment)
110
116
  expect(comment.commented_to).to eq(model)
111
117
  end
112
118
  end
@@ -144,4 +150,4 @@ RSpec.describe Tinybucket::Model::PullRequest do
144
150
 
145
151
  it { expect(subject).to be_truthy }
146
152
  end
147
- end
153
+ end
@@ -52,7 +52,7 @@ RSpec.describe Tinybucket::Model::Repository do
52
52
 
53
53
  subject { model.pull_requests() }
54
54
 
55
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
55
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
56
56
  end
57
57
 
58
58
  describe '#pull_request' do
@@ -80,19 +80,19 @@ RSpec.describe Tinybucket::Model::Repository do
80
80
  describe '#watchers' do
81
81
  let(:request_path) { "/repositories/#{owner}/#{slug}/watchers" }
82
82
  subject { model.watchers }
83
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
83
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
84
84
  end
85
85
 
86
86
  describe '#forks' do
87
87
  let(:request_path) { "/repositories/#{owner}/#{slug}/forks" }
88
88
  subject { model.forks }
89
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
89
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
90
90
  end
91
91
 
92
92
  describe '#commits' do
93
93
  let(:request_path) { "/repositories/#{owner}/#{slug}/commits" }
94
94
  subject { model.commits }
95
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
95
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
96
96
  end
97
97
 
98
98
  describe '#commit' do
@@ -105,7 +105,7 @@ RSpec.describe Tinybucket::Model::Repository do
105
105
  describe '#branch_restrictions' do
106
106
  let(:request_path) { "/repositories/#{owner}/#{slug}/branch-restrictions" }
107
107
  subject { model.branch_restrictions }
108
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
108
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
109
109
  end
110
110
 
111
111
  describe '#branch_restriction' do
@@ -35,24 +35,24 @@ RSpec.describe Tinybucket::Model::Team do
35
35
  describe '#members' do
36
36
  let(:request_path) { "/teams/#{teamname}/members" }
37
37
  subject { model.members }
38
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
38
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
39
39
  end
40
40
 
41
41
  describe '#followers' do
42
42
  let(:request_path) { "/teams/#{teamname}/followers" }
43
43
  subject { model.followers() }
44
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
44
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
45
45
  end
46
46
 
47
47
  describe '#following' do
48
48
  let(:request_path) { "/teams/#{teamname}/following" }
49
49
  subject { model.following }
50
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
50
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
51
51
  end
52
52
 
53
53
  describe '#repos' do
54
54
  let(:request_path) { "/teams/#{teamname}/repositories" }
55
55
  subject { model.repos }
56
- it { expect(subject).to be_an_instance_of(Tinybucket::Model::Page) }
56
+ it { expect(subject).to be_an_instance_of(Tinybucket::Enumerator) }
57
57
  end
58
58
  end
@@ -3,31 +3,8 @@ require 'spec_helper'
3
3
  RSpec.describe Tinybucket do
4
4
 
5
5
  describe 'new' do
6
- let(:options) { { key: 'value' } }
7
-
8
- shared_examples_for 'return client which configured with options' do
9
- it 'return client instance which configured with options' do
10
- expect(subject).to be_instance_of(Tinybucket::Client)
11
- expect(subject.config).to eq(options)
12
- end
13
- end
14
-
15
- context 'when options passed' do
16
- subject { Tinybucket.new(options) }
17
- it_behaves_like 'return client which configured with options'
18
- end
19
-
20
- context 'when block given' do
21
- subject { Tinybucket.new(&block) }
22
- let(:block) do
23
- lambda do |config|
24
- options.each_pair do |key, value|
25
- config.send("#{key}=", value)
26
- end
27
- end
28
- end
29
- it_behaves_like 'return client which configured with options'
30
- end
6
+ subject { Tinybucket.new }
7
+ it { expect(subject).to be_instance_of(Tinybucket::Client) }
31
8
  end
32
9
 
33
10
  describe 'config' do
@@ -38,19 +15,25 @@ RSpec.describe Tinybucket do
38
15
  describe 'configure' do
39
16
  subject(:config) { Tinybucket.config }
40
17
  let(:logger) { Logger.new($stdout) }
18
+ let(:oauth_token) { 'test_oauth_token' }
19
+ let(:oauth_secret) { 'test_oauth_secret' }
41
20
 
42
- it 'can configurable logger' do
21
+ it 'is configurable' do
43
22
  expect(config.logger).to be_nil
44
23
 
45
24
  expect do
46
25
  Tinybucket.configure do |config|
47
26
  config.logger = logger
27
+ config.oauth_token = oauth_token
28
+ config.oauth_secret = oauth_secret
48
29
  end
49
30
  end.not_to raise_error
50
31
 
51
32
  expect(config.logger).to eq(logger)
33
+ expect(config.oauth_token).to eq(oauth_token)
34
+ expect(config.oauth_secret).to eq(oauth_secret)
52
35
  end
53
36
 
54
- after { Tinybucket.configure { |config| config.logger = nil } }
37
+ after { Tinybucket.instance_variable_set(:@config, nil) }
55
38
  end
56
39
  end
data/spec/spec_helper.rb CHANGED
@@ -10,13 +10,14 @@ require 'coveralls'
10
10
  require 'simplecov'
11
11
  Coveralls.wear!
12
12
 
13
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
13
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
14
14
  SimpleCov::Formatter::HTMLFormatter,
15
15
  Coveralls::SimpleCov::Formatter
16
- ]
16
+ ])
17
17
  SimpleCov.start do
18
18
  add_filter '.bundle/'
19
19
  add_filter 'spec'
20
+ add_filter 'features'
20
21
  end
21
22
 
22
23
  if ENV['CODECLIMATE_REPORT']
@@ -10,8 +10,8 @@ module ApiResponseMacros
10
10
 
11
11
  stub_request(method, 'https://bitbucket.org/api/2.0' + path)
12
12
  .to_return(
13
- status: 200,
14
- body: fixture_json(method, path, ext),
13
+ status: (options[:status_code] || 200),
14
+ body: (options[:message] || fixture_json(method, path, ext)),
15
15
  headers: response_headers)
16
16
  end
17
17
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tinybucket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hirakiuc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-12 00:00:00.000000000 Z
11
+ date: 2016-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -140,9 +140,13 @@ files:
140
140
  - lib/tinybucket/config.rb
141
141
  - lib/tinybucket/connection.rb
142
142
  - lib/tinybucket/constants.rb
143
+ - lib/tinybucket/enumerator.rb
143
144
  - lib/tinybucket/error.rb
144
145
  - lib/tinybucket/error/base_error.rb
146
+ - lib/tinybucket/error/conflict.rb
147
+ - lib/tinybucket/error/not_found.rb
145
148
  - lib/tinybucket/error/service_error.rb
149
+ - lib/tinybucket/iterator.rb
146
150
  - lib/tinybucket/model.rb
147
151
  - lib/tinybucket/model/base.rb
148
152
  - lib/tinybucket/model/branch_restriction.rb
@@ -150,6 +154,7 @@ files:
150
154
  - lib/tinybucket/model/commit.rb
151
155
  - lib/tinybucket/model/concerns.rb
152
156
  - lib/tinybucket/model/concerns/acceptable_attributes.rb
157
+ - lib/tinybucket/model/concerns/enumerable.rb
153
158
  - lib/tinybucket/model/concerns/reloadable.rb
154
159
  - lib/tinybucket/model/concerns/repository_keys.rb
155
160
  - lib/tinybucket/model/error_response.rb
@@ -177,7 +182,7 @@ files:
177
182
  - lib/tinybucket/parser/teams_parser.rb
178
183
  - lib/tinybucket/request.rb
179
184
  - lib/tinybucket/response.rb
180
- - lib/tinybucket/response/error_handler.rb
185
+ - lib/tinybucket/response/handler.rb
181
186
  - lib/tinybucket/version.rb
182
187
  - spec/fixtures/branch_restriction.json
183
188
  - spec/fixtures/comment.json
@@ -188,6 +193,7 @@ files:
188
193
  - spec/fixtures/repositories/test_owner/get.json
189
194
  - spec/fixtures/repositories/test_owner/test_repo/branch-restrictions/1/get.json
190
195
  - spec/fixtures/repositories/test_owner/test_repo/branch-restrictions/get.json
196
+ - spec/fixtures/repositories/test_owner/test_repo/commit/1/approve/post.json
191
197
  - spec/fixtures/repositories/test_owner/test_repo/commit/1/comments/1/get.json
192
198
  - spec/fixtures/repositories/test_owner/test_repo/commit/1/comments/get.json
193
199
  - spec/fixtures/repositories/test_owner/test_repo/commit/1/get.json
@@ -232,6 +238,7 @@ files:
232
238
  - spec/lib/tinybucket/api_factory_spec.rb
233
239
  - spec/lib/tinybucket/client_spec.rb
234
240
  - spec/lib/tinybucket/connection_spec.rb
241
+ - spec/lib/tinybucket/error/service_error_spec.rb
235
242
  - spec/lib/tinybucket/model/branch_restriction_spec.rb
236
243
  - spec/lib/tinybucket/model/comment_spec.rb
237
244
  - spec/lib/tinybucket/model/commit_spec.rb
@@ -281,6 +288,7 @@ test_files:
281
288
  - spec/fixtures/repositories/test_owner/get.json
282
289
  - spec/fixtures/repositories/test_owner/test_repo/branch-restrictions/1/get.json
283
290
  - spec/fixtures/repositories/test_owner/test_repo/branch-restrictions/get.json
291
+ - spec/fixtures/repositories/test_owner/test_repo/commit/1/approve/post.json
284
292
  - spec/fixtures/repositories/test_owner/test_repo/commit/1/comments/1/get.json
285
293
  - spec/fixtures/repositories/test_owner/test_repo/commit/1/comments/get.json
286
294
  - spec/fixtures/repositories/test_owner/test_repo/commit/1/get.json
@@ -325,6 +333,7 @@ test_files:
325
333
  - spec/lib/tinybucket/api_factory_spec.rb
326
334
  - spec/lib/tinybucket/client_spec.rb
327
335
  - spec/lib/tinybucket/connection_spec.rb
336
+ - spec/lib/tinybucket/error/service_error_spec.rb
328
337
  - spec/lib/tinybucket/model/branch_restriction_spec.rb
329
338
  - spec/lib/tinybucket/model/comment_spec.rb
330
339
  - spec/lib/tinybucket/model/commit_spec.rb
@@ -1,14 +0,0 @@
1
- module Tinybucket
2
- module Response
3
- class ErrorHandler < Faraday::Response::Middleware
4
- def on_complete(env)
5
- status_code = env[:status].to_i
6
-
7
- return if status_code < 400
8
-
9
- Tinybucket.logger.error "Invalid response code:#{status_code}"
10
- raise Tinybucket::Error::ServiceError.new(env)
11
- end
12
- end
13
- end
14
- end