tb-bjb 1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rubocop.yml +86 -0
- data/Gemfile +32 -0
- data/LICENSE +21 -0
- data/README.md +387 -0
- data/Rakefile +47 -0
- data/lib/faraday_middleware/follow_oauth_redirects.rb +71 -0
- data/lib/tinybucket.rb +76 -0
- data/lib/tinybucket/api.rb +25 -0
- data/lib/tinybucket/api/base_api.rb +44 -0
- data/lib/tinybucket/api/branch_restrictions_api.rb +51 -0
- data/lib/tinybucket/api/branches_api.rb +48 -0
- data/lib/tinybucket/api/build_status_api.rb +69 -0
- data/lib/tinybucket/api/comments_api.rb +81 -0
- data/lib/tinybucket/api/commits_api.rb +97 -0
- data/lib/tinybucket/api/diff_api.rb +40 -0
- data/lib/tinybucket/api/helper.rb +27 -0
- data/lib/tinybucket/api/helper/api_helper.rb +39 -0
- data/lib/tinybucket/api/helper/branch_restrictions_helper.rb +29 -0
- data/lib/tinybucket/api/helper/branches_helper.rb +29 -0
- data/lib/tinybucket/api/helper/build_status_helper.rb +46 -0
- data/lib/tinybucket/api/helper/comments_helper.rb +51 -0
- data/lib/tinybucket/api/helper/commits_helper.rb +42 -0
- data/lib/tinybucket/api/helper/diff_helper.rb +31 -0
- data/lib/tinybucket/api/helper/projects_helper.rb +28 -0
- data/lib/tinybucket/api/helper/pull_requests_helper.rb +67 -0
- data/lib/tinybucket/api/helper/repo_helper.rb +31 -0
- data/lib/tinybucket/api/helper/repos_helper.rb +23 -0
- data/lib/tinybucket/api/helper/team_helper.rb +45 -0
- data/lib/tinybucket/api/helper/user_helper.rb +33 -0
- data/lib/tinybucket/api/projects_api.rb +26 -0
- data/lib/tinybucket/api/pull_requests_api.rb +139 -0
- data/lib/tinybucket/api/repo_api.rb +56 -0
- data/lib/tinybucket/api/repos_api.rb +28 -0
- data/lib/tinybucket/api/team_api.rb +91 -0
- data/lib/tinybucket/api/user_api.rb +66 -0
- data/lib/tinybucket/api_factory.rb +21 -0
- data/lib/tinybucket/client.rb +107 -0
- data/lib/tinybucket/config.rb +10 -0
- data/lib/tinybucket/connection.rb +84 -0
- data/lib/tinybucket/constants.rb +7 -0
- data/lib/tinybucket/enumerator.rb +47 -0
- data/lib/tinybucket/error.rb +12 -0
- data/lib/tinybucket/error/base_error.rb +14 -0
- data/lib/tinybucket/error/conflict.rb +8 -0
- data/lib/tinybucket/error/not_found.rb +8 -0
- data/lib/tinybucket/error/service_error.rb +26 -0
- data/lib/tinybucket/iterator.rb +79 -0
- data/lib/tinybucket/model.rb +25 -0
- data/lib/tinybucket/model/base.rb +45 -0
- data/lib/tinybucket/model/branch.rb +48 -0
- data/lib/tinybucket/model/branch_restriction.rb +46 -0
- data/lib/tinybucket/model/build_status.rb +57 -0
- data/lib/tinybucket/model/comment.rb +67 -0
- data/lib/tinybucket/model/commit.rb +114 -0
- data/lib/tinybucket/model/concerns.rb +19 -0
- data/lib/tinybucket/model/concerns/acceptable_attributes.rb +34 -0
- data/lib/tinybucket/model/concerns/api_callable.rb +21 -0
- data/lib/tinybucket/model/concerns/enumerable.rb +20 -0
- data/lib/tinybucket/model/concerns/reloadable.rb +41 -0
- data/lib/tinybucket/model/concerns/repository_keys.rb +45 -0
- data/lib/tinybucket/model/error_response.rb +24 -0
- data/lib/tinybucket/model/page.rb +45 -0
- data/lib/tinybucket/model/profile.rb +70 -0
- data/lib/tinybucket/model/project.rb +44 -0
- data/lib/tinybucket/model/pull_request.rb +162 -0
- data/lib/tinybucket/model/repository.rb +219 -0
- data/lib/tinybucket/model/team.rb +96 -0
- data/lib/tinybucket/null_logger.rb +37 -0
- data/lib/tinybucket/parser.rb +15 -0
- data/lib/tinybucket/parser/collection_parser.rb +17 -0
- data/lib/tinybucket/parser/object_parser.rb +17 -0
- data/lib/tinybucket/request.rb +61 -0
- data/lib/tinybucket/resource.rb +75 -0
- data/lib/tinybucket/resource/base.rb +35 -0
- data/lib/tinybucket/resource/branch_restrictions.rb +47 -0
- data/lib/tinybucket/resource/branches.rb +35 -0
- data/lib/tinybucket/resource/commit/base.rb +14 -0
- data/lib/tinybucket/resource/commit/build_statuses.rb +50 -0
- data/lib/tinybucket/resource/commit/comments.rb +34 -0
- data/lib/tinybucket/resource/commits.rb +46 -0
- data/lib/tinybucket/resource/forks.rb +24 -0
- data/lib/tinybucket/resource/projects.rb +49 -0
- data/lib/tinybucket/resource/pull_request/base.rb +20 -0
- data/lib/tinybucket/resource/pull_request/comments.rb +32 -0
- data/lib/tinybucket/resource/pull_request/commits.rb +19 -0
- data/lib/tinybucket/resource/pull_requests.rb +52 -0
- data/lib/tinybucket/resource/repos.rb +40 -0
- data/lib/tinybucket/resource/team/base.rb +24 -0
- data/lib/tinybucket/resource/team/followers.rb +15 -0
- data/lib/tinybucket/resource/team/following.rb +15 -0
- data/lib/tinybucket/resource/team/members.rb +15 -0
- data/lib/tinybucket/resource/team/repos.rb +15 -0
- data/lib/tinybucket/resource/teams.rb +22 -0
- data/lib/tinybucket/resource/user/base.rb +26 -0
- data/lib/tinybucket/resource/user/followers.rb +15 -0
- data/lib/tinybucket/resource/user/following.rb +15 -0
- data/lib/tinybucket/resource/user/repos.rb +15 -0
- data/lib/tinybucket/resource/watchers.rb +24 -0
- data/lib/tinybucket/response.rb +9 -0
- data/lib/tinybucket/response/handler.rb +23 -0
- data/lib/tinybucket/version.rb +5 -0
- data/tinybucket.gemspec +30 -0
- metadata +244 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybucket
|
4
|
+
module Error
|
5
|
+
class BaseError < StandardError
|
6
|
+
attr_reader :response_message, :response_headers
|
7
|
+
|
8
|
+
def initialize(message)
|
9
|
+
super message
|
10
|
+
@response_message = message
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybucket
|
4
|
+
module Error
|
5
|
+
class ServiceError < BaseError
|
6
|
+
attr_accessor :http_headers
|
7
|
+
attr_reader :http_method, :request_url, :status_code, :response_body
|
8
|
+
|
9
|
+
def initialize(env)
|
10
|
+
super generate_message(env)
|
11
|
+
@http_headers = env[:response_headers]
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def generate_message(env)
|
17
|
+
@http_method = env[:method].to_s.upcase
|
18
|
+
@request_url = env[:url].to_s
|
19
|
+
@status_code = env[:status]
|
20
|
+
@response_body = env[:body]
|
21
|
+
|
22
|
+
"#{@http_method} #{@request_url} #{@status_code} #{@response_body}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybucket
|
4
|
+
# Iterator
|
5
|
+
#
|
6
|
+
# This iterator iterate items by sending request ot Bitbucket Cloud REST API.
|
7
|
+
class Iterator
|
8
|
+
# Constructor
|
9
|
+
#
|
10
|
+
# @param api_client [Tinybucket::Api::Base] an instance of Api Client class.
|
11
|
+
# @param method [Symbol] method name to invoke api_client method.
|
12
|
+
# @param args [Array<Object>] arguments to pass method call of
|
13
|
+
# api_client as arguments.
|
14
|
+
def initialize(api_client, method, *args)
|
15
|
+
@client = api_client
|
16
|
+
@method = method
|
17
|
+
@args = args
|
18
|
+
|
19
|
+
@attrs = {}
|
20
|
+
@values = []
|
21
|
+
@pos = nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def next
|
25
|
+
next_value
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get collection size.
|
29
|
+
#
|
30
|
+
# @note This method return {https://developer.atlassian.com/bitbucket/api/2/reference/meta/pagination
|
31
|
+
# size attribute of object collection wrapper}.
|
32
|
+
# So this method may return nil.
|
33
|
+
#
|
34
|
+
# @see https://developer.atlassian.com/bitbucket/api/2/reference/meta/pagination
|
35
|
+
# Paging through object collections
|
36
|
+
#
|
37
|
+
# @return [Fixnum, NillClas] collection size.
|
38
|
+
def size
|
39
|
+
load_next if next?
|
40
|
+
@attrs[:size]
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def next_value
|
46
|
+
load_next if next?
|
47
|
+
|
48
|
+
@values.fetch(@pos).tap { @pos += 1 }
|
49
|
+
rescue IndexError
|
50
|
+
raise StopIteration
|
51
|
+
end
|
52
|
+
|
53
|
+
def next?
|
54
|
+
@pos.nil? || (@values.size == @pos && @attrs[:next])
|
55
|
+
end
|
56
|
+
|
57
|
+
def load_next
|
58
|
+
@pos = 0 if @pos.nil?
|
59
|
+
|
60
|
+
page = @client.send(@method, *next_params)
|
61
|
+
|
62
|
+
@attrs = page.attrs
|
63
|
+
@values.concat(page.items)
|
64
|
+
end
|
65
|
+
|
66
|
+
def next_params
|
67
|
+
params =
|
68
|
+
if @attrs.empty?
|
69
|
+
{}
|
70
|
+
else
|
71
|
+
query = URI.parse(@attrs[:next]).query
|
72
|
+
Hash[*query.split(/&|=/).map { |v| CGI.unescape(v) }]
|
73
|
+
end
|
74
|
+
|
75
|
+
@args[-1].merge!(params)
|
76
|
+
@args
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybucket
|
4
|
+
module Model
|
5
|
+
extend ActiveSupport::Autoload
|
6
|
+
|
7
|
+
[
|
8
|
+
:Base,
|
9
|
+
:Branch,
|
10
|
+
:BranchRestriction,
|
11
|
+
:BuildStatus,
|
12
|
+
:Comment,
|
13
|
+
:Commit,
|
14
|
+
:ErrorResponse,
|
15
|
+
:Page,
|
16
|
+
:Profile,
|
17
|
+
:Project,
|
18
|
+
:PullRequest,
|
19
|
+
:Repository,
|
20
|
+
:Team
|
21
|
+
].each do |klass_name|
|
22
|
+
autoload klass_name
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybucket
|
4
|
+
module Model
|
5
|
+
class Base
|
6
|
+
include ::ActiveModel::Serializers::JSON
|
7
|
+
include Concerns::AcceptableAttributes
|
8
|
+
include Concerns::Enumerable
|
9
|
+
include Concerns::Reloadable
|
10
|
+
include Concerns::ApiCallable
|
11
|
+
|
12
|
+
def self.concern_included?(concern_name)
|
13
|
+
mod_name = "Tinybucket::Model::Concerns::#{concern_name}".constantize
|
14
|
+
ancestors.include?(mod_name)
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(json)
|
18
|
+
self.attributes = json
|
19
|
+
@_loaded = !json.empty?
|
20
|
+
end
|
21
|
+
|
22
|
+
def attributes=(hash)
|
23
|
+
hash.each_pair do |key, value|
|
24
|
+
if acceptable_attribute?(key)
|
25
|
+
send("#{key}=".intern, value)
|
26
|
+
else
|
27
|
+
logger.warn("Ignored '#{key}' attribute (value: #{value}). [#{self.class}]")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def attributes
|
33
|
+
acceptable_attributes.map do |key|
|
34
|
+
{ key => send(key.intern) }
|
35
|
+
end.reduce(&:merge)
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
def logger
|
41
|
+
Tinybucket.logger
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybucket
|
4
|
+
module Model
|
5
|
+
# Branch
|
6
|
+
#
|
7
|
+
# @see https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/refs/branches
|
8
|
+
# Branch Resource
|
9
|
+
#
|
10
|
+
# @!attribute [rw] links
|
11
|
+
# @return [Hash]
|
12
|
+
# @!attribute [rw] type
|
13
|
+
# @return [String]
|
14
|
+
# @!attribute [rw] name
|
15
|
+
# @return [String]
|
16
|
+
# @!attribute [rw] repository
|
17
|
+
# @return [Hash]
|
18
|
+
# @!attribute [rw] target
|
19
|
+
# @return [Hash]
|
20
|
+
class Branch < Base
|
21
|
+
include Tinybucket::Model::Concerns::RepositoryKeys
|
22
|
+
|
23
|
+
acceptable_attributes :links, :type, :name, :repository, :target
|
24
|
+
|
25
|
+
# Returns the commits available for the specific branch
|
26
|
+
#
|
27
|
+
# @param options [Hash]
|
28
|
+
# @return [Tinybucket::Resource::Commits]
|
29
|
+
def commits(options = {})
|
30
|
+
commits_resource.branch(name, options)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def commits_resource(options = {})
|
36
|
+
Tinybucket::Resource::Commits.new(self, options)
|
37
|
+
end
|
38
|
+
|
39
|
+
def branches_api
|
40
|
+
create_api('Branches', repo_keys)
|
41
|
+
end
|
42
|
+
|
43
|
+
def load_model
|
44
|
+
branches_api.find(name, {})
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybucket
|
4
|
+
module Model
|
5
|
+
# BranchRestriction
|
6
|
+
#
|
7
|
+
# @see https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/branch-restrictions
|
8
|
+
# branch-restrictions Resource
|
9
|
+
#
|
10
|
+
# @!attribute [rw] groups
|
11
|
+
# @return [Array]
|
12
|
+
# @!attribute [rw] id
|
13
|
+
# @return [Fixnum]
|
14
|
+
# @!attribute [rw] kind
|
15
|
+
# @return [String]
|
16
|
+
# @!attribute [rw] links
|
17
|
+
# @return [Hash]
|
18
|
+
# @!attribute [rw] pattern
|
19
|
+
# @return [String]
|
20
|
+
# @!attribute [rw] users
|
21
|
+
# @return [Array]
|
22
|
+
# @!attribute [rw] uuid
|
23
|
+
# @return [NillClass]
|
24
|
+
class BranchRestriction < Base
|
25
|
+
include Tinybucket::Model::Concerns::RepositoryKeys
|
26
|
+
|
27
|
+
acceptable_attributes :groups, :id, :kind, :links, :pattern, :users, :uuid
|
28
|
+
|
29
|
+
# Update this branch restriction
|
30
|
+
#
|
31
|
+
# @todo to be implemented
|
32
|
+
# @raise [NotImplementedError] to be implemented.
|
33
|
+
def update(_params)
|
34
|
+
raise NotImplementedError
|
35
|
+
end
|
36
|
+
|
37
|
+
# Delete this branch restriction
|
38
|
+
#
|
39
|
+
# @todo to be implemented
|
40
|
+
# @raise [NotImplementedError] to be implemented.
|
41
|
+
def destroy
|
42
|
+
raise NotImplementedError
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybucket
|
4
|
+
module Model
|
5
|
+
# Build Status
|
6
|
+
#
|
7
|
+
# @see https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/commit/%7Bnode%7D/statuses/build
|
8
|
+
# statuses/build Resource
|
9
|
+
#
|
10
|
+
# @!attribute [rw] state
|
11
|
+
# @return [String]
|
12
|
+
# @!attribute [rw] type
|
13
|
+
# @return [String]
|
14
|
+
# @!attribute [rw] key
|
15
|
+
# @return [String]
|
16
|
+
# @!attribute [rw] name
|
17
|
+
# @return [String]
|
18
|
+
# @!attribute [rw] url
|
19
|
+
# @return [String]
|
20
|
+
# @!attribute [rw] description
|
21
|
+
# @return [String]
|
22
|
+
# @!attribute [rw] links
|
23
|
+
# @return [Hash]
|
24
|
+
class BuildStatus < Base
|
25
|
+
include Tinybucket::Model::Concerns::RepositoryKeys
|
26
|
+
include Tinybucket::Model::Concerns::Reloadable
|
27
|
+
|
28
|
+
acceptable_attributes \
|
29
|
+
:state, :type, :key, :name, :url, :description, :links, \
|
30
|
+
:created_on, :updated_on
|
31
|
+
|
32
|
+
attr_accessor :revision
|
33
|
+
|
34
|
+
# Update build status
|
35
|
+
#
|
36
|
+
# @param options [Hash]
|
37
|
+
# @option options [String] :state
|
38
|
+
# @return [Tinybucket::Model::BuildStatus]
|
39
|
+
def update(options)
|
40
|
+
build_status_api.put(revision, key, options).tap do |m|
|
41
|
+
m.repo_keys = repo_keys
|
42
|
+
m.revision = revision
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def build_status_api
|
49
|
+
create_api('BuildStatus', repo_keys)
|
50
|
+
end
|
51
|
+
|
52
|
+
def load_model
|
53
|
+
build_status_api.find(revision, key)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tinybucket
|
4
|
+
module Model
|
5
|
+
# Comment
|
6
|
+
#
|
7
|
+
# @see https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/commit/%7Bsha%7D/comments
|
8
|
+
# Comment Resource
|
9
|
+
#
|
10
|
+
# @!attribute [rw] links
|
11
|
+
# @return [Hash]
|
12
|
+
# @!attribute [rw] id
|
13
|
+
# @return [Fixnum]
|
14
|
+
# @!attribute [rw] parent
|
15
|
+
# @return [Hash]
|
16
|
+
# @!attribute [rw] filename
|
17
|
+
# @return [String]
|
18
|
+
# @!attribute [rw] content
|
19
|
+
# @return [Hash]
|
20
|
+
# @!attribute [rw] user
|
21
|
+
# @return [Hash]
|
22
|
+
# @!attribute [rw] inline
|
23
|
+
# @return [Hash]
|
24
|
+
# @!attribute [rw] created_on
|
25
|
+
# @return [String]
|
26
|
+
# @!attribute [rw] updated_on
|
27
|
+
# @return [String]
|
28
|
+
# @!attribute [rw] uuid
|
29
|
+
# @return [NillClass]
|
30
|
+
class Comment < Base
|
31
|
+
include Tinybucket::Model::Concerns::RepositoryKeys
|
32
|
+
|
33
|
+
acceptable_attributes \
|
34
|
+
:links, :id, :parent, :filename, :content, :user, :inline, \
|
35
|
+
:created_on, :updated_on, :uuid
|
36
|
+
|
37
|
+
# @!attribute [rw] commented_to
|
38
|
+
# @return [Tinybucket::Model::PullRequest, Tinybucket::Model::Commit]
|
39
|
+
attr_accessor :commented_to
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def commit_api
|
44
|
+
create_api('Comments', repo_keys)
|
45
|
+
end
|
46
|
+
|
47
|
+
def pull_request_api
|
48
|
+
create_api('PullRequests', repo_keys)
|
49
|
+
end
|
50
|
+
|
51
|
+
def load_model
|
52
|
+
api =
|
53
|
+
case commented_to
|
54
|
+
when Tinybucket::Model::Commit
|
55
|
+
commit_api
|
56
|
+
when Tinybucket::Model::PullRequest
|
57
|
+
pull_request_api
|
58
|
+
else
|
59
|
+
raise ArgumentError, 'commented_to was invalid'
|
60
|
+
end
|
61
|
+
|
62
|
+
api.commented_to = commented_ato
|
63
|
+
api.find(id, {})
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|