tinybucket2 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +86 -0
  3. data/Gemfile +32 -0
  4. data/LICENSE +21 -0
  5. data/README.md +387 -0
  6. data/Rakefile +47 -0
  7. data/lib/faraday_middleware/follow_oauth_redirects.rb +71 -0
  8. data/lib/tinybucket.rb +76 -0
  9. data/lib/tinybucket/api.rb +26 -0
  10. data/lib/tinybucket/api/base_api.rb +44 -0
  11. data/lib/tinybucket/api/branch_restrictions_api.rb +51 -0
  12. data/lib/tinybucket/api/branches_api.rb +48 -0
  13. data/lib/tinybucket/api/build_status_api.rb +69 -0
  14. data/lib/tinybucket/api/comments_api.rb +81 -0
  15. data/lib/tinybucket/api/commits_api.rb +97 -0
  16. data/lib/tinybucket/api/diff_api.rb +40 -0
  17. data/lib/tinybucket/api/helper.rb +27 -0
  18. data/lib/tinybucket/api/helper/api_helper.rb +39 -0
  19. data/lib/tinybucket/api/helper/branch_restrictions_helper.rb +29 -0
  20. data/lib/tinybucket/api/helper/branches_helper.rb +29 -0
  21. data/lib/tinybucket/api/helper/build_status_helper.rb +46 -0
  22. data/lib/tinybucket/api/helper/comments_helper.rb +51 -0
  23. data/lib/tinybucket/api/helper/commits_helper.rb +42 -0
  24. data/lib/tinybucket/api/helper/diff_helper.rb +31 -0
  25. data/lib/tinybucket/api/helper/issues_helper.rb +29 -0
  26. data/lib/tinybucket/api/helper/projects_helper.rb +28 -0
  27. data/lib/tinybucket/api/helper/pull_requests_helper.rb +58 -0
  28. data/lib/tinybucket/api/helper/repo_helper.rb +31 -0
  29. data/lib/tinybucket/api/helper/repos_helper.rb +23 -0
  30. data/lib/tinybucket/api/helper/team_helper.rb +45 -0
  31. data/lib/tinybucket/api/helper/user_helper.rb +33 -0
  32. data/lib/tinybucket/api/issues_api.rb +48 -0
  33. data/lib/tinybucket/api/projects_api.rb +26 -0
  34. data/lib/tinybucket/api/pull_requests_api.rb +117 -0
  35. data/lib/tinybucket/api/repo_api.rb +56 -0
  36. data/lib/tinybucket/api/repos_api.rb +28 -0
  37. data/lib/tinybucket/api/team_api.rb +91 -0
  38. data/lib/tinybucket/api/user_api.rb +66 -0
  39. data/lib/tinybucket/api_factory.rb +21 -0
  40. data/lib/tinybucket/client.rb +107 -0
  41. data/lib/tinybucket/config.rb +10 -0
  42. data/lib/tinybucket/connection.rb +84 -0
  43. data/lib/tinybucket/constants.rb +7 -0
  44. data/lib/tinybucket/enumerator.rb +47 -0
  45. data/lib/tinybucket/error.rb +12 -0
  46. data/lib/tinybucket/error/base_error.rb +14 -0
  47. data/lib/tinybucket/error/conflict.rb +8 -0
  48. data/lib/tinybucket/error/not_found.rb +8 -0
  49. data/lib/tinybucket/error/service_error.rb +26 -0
  50. data/lib/tinybucket/iterator.rb +79 -0
  51. data/lib/tinybucket/model.rb +25 -0
  52. data/lib/tinybucket/model/base.rb +45 -0
  53. data/lib/tinybucket/model/branch.rb +48 -0
  54. data/lib/tinybucket/model/branch_restriction.rb +46 -0
  55. data/lib/tinybucket/model/build_status.rb +57 -0
  56. data/lib/tinybucket/model/comment.rb +67 -0
  57. data/lib/tinybucket/model/commit.rb +114 -0
  58. data/lib/tinybucket/model/concerns.rb +19 -0
  59. data/lib/tinybucket/model/concerns/acceptable_attributes.rb +34 -0
  60. data/lib/tinybucket/model/concerns/api_callable.rb +21 -0
  61. data/lib/tinybucket/model/concerns/enumerable.rb +20 -0
  62. data/lib/tinybucket/model/concerns/reloadable.rb +41 -0
  63. data/lib/tinybucket/model/concerns/repository_keys.rb +45 -0
  64. data/lib/tinybucket/model/error_response.rb +24 -0
  65. data/lib/tinybucket/model/issue.rb +48 -0
  66. data/lib/tinybucket/model/page.rb +45 -0
  67. data/lib/tinybucket/model/profile.rb +70 -0
  68. data/lib/tinybucket/model/project.rb +44 -0
  69. data/lib/tinybucket/model/pull_request.rb +160 -0
  70. data/lib/tinybucket/model/repository.rb +219 -0
  71. data/lib/tinybucket/model/team.rb +96 -0
  72. data/lib/tinybucket/null_logger.rb +37 -0
  73. data/lib/tinybucket/parser.rb +15 -0
  74. data/lib/tinybucket/parser/collection_parser.rb +17 -0
  75. data/lib/tinybucket/parser/object_parser.rb +17 -0
  76. data/lib/tinybucket/request.rb +59 -0
  77. data/lib/tinybucket/resource.rb +75 -0
  78. data/lib/tinybucket/resource/base.rb +35 -0
  79. data/lib/tinybucket/resource/branch_restrictions.rb +47 -0
  80. data/lib/tinybucket/resource/branches.rb +35 -0
  81. data/lib/tinybucket/resource/commit/base.rb +14 -0
  82. data/lib/tinybucket/resource/commit/build_statuses.rb +50 -0
  83. data/lib/tinybucket/resource/commit/comments.rb +34 -0
  84. data/lib/tinybucket/resource/commits.rb +46 -0
  85. data/lib/tinybucket/resource/forks.rb +24 -0
  86. data/lib/tinybucket/resource/issues.rb +35 -0
  87. data/lib/tinybucket/resource/projects.rb +49 -0
  88. data/lib/tinybucket/resource/pull_request/base.rb +20 -0
  89. data/lib/tinybucket/resource/pull_request/comments.rb +32 -0
  90. data/lib/tinybucket/resource/pull_request/commits.rb +19 -0
  91. data/lib/tinybucket/resource/pull_requests.rb +50 -0
  92. data/lib/tinybucket/resource/repos.rb +40 -0
  93. data/lib/tinybucket/resource/team/base.rb +24 -0
  94. data/lib/tinybucket/resource/team/followers.rb +15 -0
  95. data/lib/tinybucket/resource/team/following.rb +15 -0
  96. data/lib/tinybucket/resource/team/members.rb +15 -0
  97. data/lib/tinybucket/resource/team/repos.rb +15 -0
  98. data/lib/tinybucket/resource/teams.rb +22 -0
  99. data/lib/tinybucket/resource/user/base.rb +26 -0
  100. data/lib/tinybucket/resource/user/followers.rb +15 -0
  101. data/lib/tinybucket/resource/user/following.rb +15 -0
  102. data/lib/tinybucket/resource/user/repos.rb +15 -0
  103. data/lib/tinybucket/resource/watchers.rb +24 -0
  104. data/lib/tinybucket/response.rb +9 -0
  105. data/lib/tinybucket/response/handler.rb +23 -0
  106. data/lib/tinybucket/version.rb +5 -0
  107. data/tinybucket.gemspec +30 -0
  108. metadata +248 -0
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ class NullLogger
5
+ attr_accessor :level
6
+
7
+ def fatal(_progname = nil, &_block); end
8
+
9
+ def fatal?
10
+ false
11
+ end
12
+
13
+ def error(_progname = nil, &_block); end
14
+
15
+ def error?
16
+ false
17
+ end
18
+
19
+ def warn(_progname = nil, &_block); end
20
+
21
+ def warn?
22
+ false
23
+ end
24
+
25
+ def info(_progname = nil, &_block); end
26
+
27
+ def info?
28
+ false
29
+ end
30
+
31
+ def debug(_progname = nil, &_block); end
32
+
33
+ def debug?
34
+ false
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Parser
5
+ extend ActiveSupport::Autoload
6
+
7
+ [
8
+ :BaseParser,
9
+ :ObjectParser,
10
+ :CollectionParser
11
+ ].each do |klass_name|
12
+ autoload klass_name
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Parser
5
+ class CollectionParser < FaradayMiddleware::ResponseMiddleware
6
+ define_parser do |hash, parser_options|
7
+ cls = parser_options[:model_class]
8
+ throw 'model_class option does not provided' unless cls
9
+ ::Tinybucket::Model::Page.new(hash, cls)
10
+ end
11
+
12
+ def parse_response?(env)
13
+ env[:body].is_a? Hash
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Parser
5
+ class ObjectParser < FaradayMiddleware::ResponseMiddleware
6
+ define_parser do |hash, parser_options|
7
+ cls = parser_options[:model_class]
8
+ throw 'model_class option does not provided' unless cls
9
+ cls.new(hash)
10
+ end
11
+
12
+ def parse_response?(env)
13
+ env[:body].is_a? Hash
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Request
5
+ protected
6
+
7
+ def get_path(path, params = {}, parser = nil, options = {})
8
+ request(:get, path, params, parser, options)
9
+ end
10
+
11
+ def patch_path(path, params = {}, parser = nil, options = {})
12
+ request(:patch, path, params, parser, options)
13
+ end
14
+
15
+ def post_path(path, params = {}, parser = nil, options = {})
16
+ request(:post, path, params, parser, options)
17
+ end
18
+
19
+ def put_path(path, params = {}, parser = nil, options = {})
20
+ request(:put, path, params, parser, options)
21
+ end
22
+
23
+ def delete_path(path, params = {}, parser = nil, options = {})
24
+ request(:delete, path, params, parser, options)
25
+ end
26
+
27
+ private
28
+
29
+ def request(method, path, params, parser, options)
30
+ conn = connection(parser, options)
31
+
32
+ path = (conn.path_prefix + path).gsub(%r{//}, '/') \
33
+ if conn.path_prefix != '/'
34
+
35
+ response = conn.send(method) do |request|
36
+ case method.intern
37
+ when :get, :delete
38
+ request.body = params.delete('data') if params.key?('data')
39
+ request.url(path, params)
40
+ when :post, :put, :patch
41
+ request.path = path
42
+ request.body = extract_data_from_params(params) unless params.empty?
43
+ else
44
+ raise ArgumentError, 'unknown http method: ' + method
45
+ end
46
+ end
47
+
48
+ response.body
49
+ end
50
+
51
+ def extract_data_from_params(params)
52
+ if params.key?('data') && !params['data'].nil?
53
+ params['data']
54
+ else
55
+ params
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Resource
5
+ extend ActiveSupport::Autoload
6
+
7
+ [
8
+ :Base,
9
+ :Branches,
10
+ :BranchRestrictions,
11
+ :Commits,
12
+ :Forks,
13
+ :OwnersRepos,
14
+ :Projects,
15
+ :PublicRepos,
16
+ :PullRequests,
17
+ :Repos,
18
+ :Teams,
19
+ :Watchers
20
+ ].each do |klass_name|
21
+ autoload klass_name
22
+ end
23
+
24
+ module Team
25
+ extend ActiveSupport::Autoload
26
+
27
+ [
28
+ :Base,
29
+ :Followers,
30
+ :Following,
31
+ :Members,
32
+ :Repos
33
+ ].each do |klass_name|
34
+ autoload klass_name
35
+ end
36
+ end
37
+
38
+ module User
39
+ extend ActiveSupport::Autoload
40
+
41
+ [
42
+ :Base,
43
+ :Followers,
44
+ :Following,
45
+ :Repos
46
+ ].each do |klass_name|
47
+ autoload klass_name
48
+ end
49
+ end
50
+
51
+ module PullRequest
52
+ extend ActiveSupport::Autoload
53
+
54
+ [
55
+ :Base,
56
+ :Commits,
57
+ :Comments
58
+ ].each do |klass_name|
59
+ autoload klass_name
60
+ end
61
+ end
62
+
63
+ module Commit
64
+ extend ActiveSupport::Autoload
65
+
66
+ [
67
+ :Base,
68
+ :BuildStatuses,
69
+ :Comments
70
+ ].each do |klass_name|
71
+ autoload klass_name
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Resource
5
+ class Base
6
+ include Tinybucket::Model::Concerns::ApiCallable
7
+
8
+ protected
9
+
10
+ def method_missing(method, *args)
11
+ enum = enumerator
12
+ return super unless enum.respond_to?(method)
13
+
14
+ enum.send(method, *args) do |m|
15
+ block_given? ? yield(m) : m
16
+ end
17
+ end
18
+
19
+ def respond_to_missing?(symbol, include_all)
20
+ enumerator.respond_to?(symbol, include_all)
21
+ end
22
+
23
+ def create_enumerator(api_client, method, *args, &block)
24
+ iter = Tinybucket::Iterator.new(api_client, method, *args)
25
+ Tinybucket::Enumerator.new(iter, block)
26
+ end
27
+
28
+ def inject_repo_keys(model, repo_keys)
29
+ return model unless model.respond_to?(:repo_keys=)
30
+
31
+ model.tap { |m| m.repo_keys = repo_keys }
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Resource
5
+ class BranchRestrictions < Base
6
+ # Constructor
7
+ #
8
+ # @param repo [Tinybucket::Model::Repository]
9
+ # @param options [Hash]
10
+ def initialize(repo, options)
11
+ @repo = repo
12
+ @args = [options]
13
+ end
14
+
15
+ # Create new BranchRestriction on the repository.
16
+ #
17
+ # @param _options [Hash]
18
+ # @return [Tinybucket::Model::BranchRestriction]
19
+ def create(_options)
20
+ raise NotImplementedError
21
+ end
22
+
23
+ # Find the BranchRestriction on the repository.
24
+ #
25
+ # @param restriction_id [String]
26
+ # @param options [Hash]
27
+ # @return [Tinybucket::Model::BranchRestriction]
28
+ def find(restriction_id, options = {})
29
+ restrictions_api.find(restriction_id, options).tap do |m|
30
+ inject_repo_keys(m, @repo.repo_keys)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def restrictions_api
37
+ create_api('BranchRestrictions', @repo.repo_keys)
38
+ end
39
+
40
+ def enumerator
41
+ create_enumerator(restrictions_api, :list, *@args) do |m|
42
+ inject_repo_keys(m, @repo.repo_keys)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Resource
5
+ class Branches < Tinybucket::Resource::Base
6
+ def initialize(repo, options)
7
+ @repo = repo
8
+ @args = [options]
9
+ end
10
+
11
+ # Find the branch
12
+ #
13
+ # @param branch [String]
14
+ # @param options [Hash]
15
+ # @return [Tinybucket::Model::Branch]
16
+ def find(branch, options = {})
17
+ branches_api.find(branch, options).tap do |m|
18
+ inject_repo_keys(m, @repo.repo_keys)
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def branches_api
25
+ create_api('Branches', @repo.repo_keys)
26
+ end
27
+
28
+ def enumerator
29
+ create_enumerator(branches_api, :list, *@args) do |m|
30
+ inject_repo_keys(m, @repo.repo_keys)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Resource
5
+ module Commit
6
+ class Base < Tinybucket::Resource::Base
7
+ def initialize(commit, options)
8
+ @commit = commit
9
+ @args = [options]
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Resource
5
+ module Commit
6
+ class BuildStatuses < Tinybucket::Resource::Commit::Base
7
+ # Get the build status for the commit
8
+ #
9
+ # @param key [String]
10
+ # @param options [Hash]
11
+ # @option options [String] :state
12
+ # @option options [String] :key
13
+ # @option options [String] :name
14
+ # @option options [String] :url
15
+ # @option options [String] :description
16
+ # @return [Tinybucket::Model::BuildStatus]
17
+ def find(key, options = {})
18
+ build_status_api.find(@commit.hash, key, options).tap do |m|
19
+ m.revision = @commit.hash
20
+ m.repo_keys = @commit.repo_keys
21
+ end
22
+ end
23
+
24
+ # Create a build status for the commit
25
+ #
26
+ # @param key [String]
27
+ # @param options [Hash]
28
+ # @return [Tinybucket::Model::BuildStatus]
29
+ def create(key, options)
30
+ build_status_api.post(@commit.hash, key, options).tap do |m|
31
+ m.revision = @commit.hash
32
+ m.repo_keys = @commit.repo_keys
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ def build_status_api
39
+ create_api('BuildStatus', @commit.repo_keys).tap do |api|
40
+ api.revision = @commit.hash
41
+ end
42
+ end
43
+
44
+ def enumerator
45
+ create_enumerator(build_status_api, :list, *@args)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tinybucket
4
+ module Resource
5
+ module Commit
6
+ class Comments < Tinybucket::Resource::Commit::Base
7
+ # Get the specific commit comment which associate with the commit.
8
+ #
9
+ # @param comment_id [String]
10
+ # @param options [Hash]
11
+ # @return [Tinybucket::Model::Comment]
12
+ def find(comment_id, options = {})
13
+ comments_api.find(comment_id, options).tap do |m|
14
+ m.repo_keys = @commit.repo_keys
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def comments_api
21
+ create_api('Comments', @commit.repo_keys).tap do |api|
22
+ api.commented_to = @commit
23
+ end
24
+ end
25
+
26
+ def enumerator
27
+ create_enumerator(comments_api, :list, *@args) do |m|
28
+ inject_repo_keys(m, @commit.repo_keys)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end