tinybucket 0.1.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.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +35 -0
- data/.rspec +1 -0
- data/.rubocop.yml +44 -0
- data/.travis.yml +10 -0
- data/Gemfile +22 -0
- data/Guardfile +13 -0
- data/LICENSE +21 -0
- data/README.md +237 -0
- data/Rakefile +39 -0
- data/lib/faraday_middleware/follow_oauth_redirects.rb +67 -0
- data/lib/tinybucket.rb +61 -0
- data/lib/tinybucket/api.rb +20 -0
- data/lib/tinybucket/api/base_api.rb +31 -0
- data/lib/tinybucket/api/branch_restrictions_api.rb +26 -0
- data/lib/tinybucket/api/comments_api.rb +46 -0
- data/lib/tinybucket/api/commits_api.rb +26 -0
- data/lib/tinybucket/api/diff_api.rb +17 -0
- data/lib/tinybucket/api/helper.rb +22 -0
- data/lib/tinybucket/api/helper/api_helper.rb +48 -0
- data/lib/tinybucket/api/helper/branch_restrictions_helper.rb +27 -0
- data/lib/tinybucket/api/helper/comments_helper.rb +49 -0
- data/lib/tinybucket/api/helper/commits_helper.rb +27 -0
- data/lib/tinybucket/api/helper/diff_helper.rb +29 -0
- data/lib/tinybucket/api/helper/pull_requests_helper.rb +44 -0
- data/lib/tinybucket/api/helper/repo_helper.rb +29 -0
- data/lib/tinybucket/api/helper/repos_helper.rb +21 -0
- data/lib/tinybucket/api/helper/team_helper.rb +35 -0
- data/lib/tinybucket/api/helper/user_helper.rb +31 -0
- data/lib/tinybucket/api/pull_requests_api.rb +49 -0
- data/lib/tinybucket/api/repo_api.rb +35 -0
- data/lib/tinybucket/api/repos_api.rb +19 -0
- data/lib/tinybucket/api/team_api.rb +51 -0
- data/lib/tinybucket/api/user_api.rb +44 -0
- data/lib/tinybucket/api_factory.rb +21 -0
- data/lib/tinybucket/client.rb +95 -0
- data/lib/tinybucket/connection.rb +62 -0
- data/lib/tinybucket/constants.rb +4 -0
- data/lib/tinybucket/error.rb +8 -0
- data/lib/tinybucket/error/base_error.rb +12 -0
- data/lib/tinybucket/error/service_error.rb +20 -0
- data/lib/tinybucket/model.rb +20 -0
- data/lib/tinybucket/model/base.rb +54 -0
- data/lib/tinybucket/model/branch_restriction.rb +17 -0
- data/lib/tinybucket/model/comment.rb +39 -0
- data/lib/tinybucket/model/commit.rb +39 -0
- data/lib/tinybucket/model/concerns.rb +14 -0
- data/lib/tinybucket/model/concerns/reloadable.rb +45 -0
- data/lib/tinybucket/model/concerns/repository_keys.rb +43 -0
- data/lib/tinybucket/model/error_response.rb +7 -0
- data/lib/tinybucket/model/page.rb +65 -0
- data/lib/tinybucket/model/profile.rb +37 -0
- data/lib/tinybucket/model/pull_request.rb +64 -0
- data/lib/tinybucket/model/repository.rb +96 -0
- data/lib/tinybucket/model/team.rb +39 -0
- data/lib/tinybucket/parser.rb +25 -0
- data/lib/tinybucket/parser/base_parser.rb +17 -0
- data/lib/tinybucket/parser/branch_restriction_parser.rb +9 -0
- data/lib/tinybucket/parser/branch_restrictions_parser.rb +10 -0
- data/lib/tinybucket/parser/comment_parser.rb +9 -0
- data/lib/tinybucket/parser/comments_parser.rb +10 -0
- data/lib/tinybucket/parser/commit_parser.rb +9 -0
- data/lib/tinybucket/parser/commits_parser.rb +9 -0
- data/lib/tinybucket/parser/profile_parser.rb +9 -0
- data/lib/tinybucket/parser/profiles_parser.rb +9 -0
- data/lib/tinybucket/parser/pull_request_parser.rb +9 -0
- data/lib/tinybucket/parser/pull_requests_parser.rb +10 -0
- data/lib/tinybucket/parser/repo_parser.rb +9 -0
- data/lib/tinybucket/parser/repos_parser.rb +10 -0
- data/lib/tinybucket/parser/team_parser.rb +9 -0
- data/lib/tinybucket/parser/teams_parser.rb +9 -0
- data/lib/tinybucket/request.rb +55 -0
- data/lib/tinybucket/response.rb +7 -0
- data/lib/tinybucket/response/error_handler.rb +14 -0
- data/lib/tinybucket/version.rb +3 -0
- data/spec/fixtures/commit.json +83 -0
- data/spec/fixtures/profile.json +29 -0
- data/spec/fixtures/pull_request.json +106 -0
- data/spec/fixtures/repositories/get.json +78 -0
- data/spec/fixtures/repositories/test_owner/get.json +78 -0
- data/spec/fixtures/repositories/test_owner/test_repo/branch-restrictions/1/get.json +17 -0
- data/spec/fixtures/repositories/test_owner/test_repo/branch-restrictions/get.json +101 -0
- data/spec/fixtures/repositories/test_owner/test_repo/commit/1/comments/1/get.json +38 -0
- data/spec/fixtures/repositories/test_owner/test_repo/commit/1/comments/get.json +40 -0
- data/spec/fixtures/repositories/test_owner/test_repo/commit/1/get.json +83 -0
- data/spec/fixtures/repositories/test_owner/test_repo/commits/get.json +73 -0
- data/spec/fixtures/repositories/test_owner/test_repo/diff/1/get.json +21 -0
- data/spec/fixtures/repositories/test_owner/test_repo/forks/get.json +78 -0
- data/spec/fixtures/repositories/test_owner/test_repo/get.json +71 -0
- data/spec/fixtures/repositories/test_owner/test_repo/patch/1/get.json +29 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/approve/delete.json +3 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/approve/post.json +3 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/comments/1/get.json +30 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/comments/get.json +44 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/commits/get.json +66 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/diff/get.txt +13 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/1/get.json +164 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/get.json +112 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/get_state_declined.json +112 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/get_state_merged.json +112 -0
- data/spec/fixtures/repositories/test_owner/test_repo/pullrequests/get_state_open.json +112 -0
- data/spec/fixtures/repositories/test_owner/test_repo/watchers/get.json +32 -0
- data/spec/fixtures/repository.json +71 -0
- data/spec/fixtures/teams/test_team/followers/get.json +36 -0
- data/spec/fixtures/teams/test_team/following/get.json +39 -0
- data/spec/fixtures/teams/test_team/get.json +32 -0
- data/spec/fixtures/teams/test_team/members/get.json +36 -0
- data/spec/fixtures/teams/test_team/repositories/get.json +125 -0
- data/spec/fixtures/users/test_owner/followers/get.json +65 -0
- data/spec/fixtures/users/test_owner/following/get.json +100 -0
- data/spec/fixtures/users/test_owner/get.json +29 -0
- data/spec/lib/tinybucket/api/branch_restrictions_api_spec.rb +78 -0
- data/spec/lib/tinybucket/api/comments_api_spec.rb +133 -0
- data/spec/lib/tinybucket/api/commits_api_spec.rb +63 -0
- data/spec/lib/tinybucket/api/diff_api_spec.rb +5 -0
- data/spec/lib/tinybucket/api/pull_requests_api_spec.rb +229 -0
- data/spec/lib/tinybucket/api/repo_api_spec.rb +100 -0
- data/spec/lib/tinybucket/api/repos_api_spec.rb +28 -0
- data/spec/lib/tinybucket/api/team_api_spec.rb +87 -0
- data/spec/lib/tinybucket/api/user_api_spec.rb +60 -0
- data/spec/lib/tinybucket/api_factory_spec.rb +23 -0
- data/spec/lib/tinybucket/client_spec.rb +102 -0
- data/spec/lib/tinybucket/connection_spec.rb +30 -0
- data/spec/lib/tinybucket/model/branch_restriction_spec.rb +29 -0
- data/spec/lib/tinybucket/model/comment_spec.rb +31 -0
- data/spec/lib/tinybucket/model/commit_spec.rb +62 -0
- data/spec/lib/tinybucket/model/page_spec.rb +58 -0
- data/spec/lib/tinybucket/model/profile_spec.rb +47 -0
- data/spec/lib/tinybucket/model/pull_request_spec.rb +122 -0
- data/spec/lib/tinybucket/model/repository_spec.rb +131 -0
- data/spec/lib/tinybucket/model/team_spec.rb +53 -0
- data/spec/lib/tinybucket_spec.rb +32 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/support/api_response_macros.rb +30 -0
- data/spec/support/model_macros.rb +61 -0
- data/tinybucket.gemspec +36 -0
- metadata +437 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'faraday'
|
|
2
|
+
require 'faraday_middleware'
|
|
3
|
+
|
|
4
|
+
module FaradayMiddleware
|
|
5
|
+
class FollowOAuthRedirects < FollowRedirects
|
|
6
|
+
dependency 'simple_oauth'
|
|
7
|
+
|
|
8
|
+
AUTH_HEADER = OAuth::AUTH_HEADER
|
|
9
|
+
CONTENT_TYPE = OAuth::CONTENT_TYPE
|
|
10
|
+
TYPE_URLENCODED = OAuth::TYPE_URLENCODED
|
|
11
|
+
|
|
12
|
+
def update_env(env, request_body, response)
|
|
13
|
+
env = super(env, request_body, response)
|
|
14
|
+
|
|
15
|
+
# update Authentication Header
|
|
16
|
+
env[:request_headers][OAuth::AUTH_HEADER] = \
|
|
17
|
+
oauth_header(env).to_s if oauth_signed_request?(env)
|
|
18
|
+
|
|
19
|
+
env
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def oauth_header(env)
|
|
23
|
+
SimpleOAuth::Header.new env[:method],
|
|
24
|
+
env[:url].to_s,
|
|
25
|
+
signature_params(body_params(env)),
|
|
26
|
+
oauth_options(env)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def oauth_signed_request?(env)
|
|
30
|
+
env[:request].fetch(:oauth, nil).present?
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def oauth_options(env)
|
|
34
|
+
extra = env[:request][:oauth]
|
|
35
|
+
if extra.present? and extra.is_a? Hash and !extra.empty?
|
|
36
|
+
@options.merge extra
|
|
37
|
+
else
|
|
38
|
+
@options
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def body_params(env)
|
|
43
|
+
if include_body_params?(env)
|
|
44
|
+
if env[:body].respond_to?(:to_str)
|
|
45
|
+
::Faraday::Utils.parse_nested_query env[:body]
|
|
46
|
+
else
|
|
47
|
+
env[:body]
|
|
48
|
+
end
|
|
49
|
+
end || {}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def include_body_params?(env)
|
|
53
|
+
# see RFC 5849, section 3.4.1.3.1 for details
|
|
54
|
+
!(type = env[:request_headers][OAuth::CONTENT_TYPE]) or type == OAuth::TYPE_URLENCODED
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def signature_params(params)
|
|
58
|
+
params.empty? ? params :
|
|
59
|
+
params.reject { |_k, v| v.respond_to?(:content_type) }
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
if Faraday::Middleware.respond_to? :register_middleware
|
|
64
|
+
Faraday::Response.register_middleware \
|
|
65
|
+
follow_oauth_redirects: -> { FollowOAuthRedirects }
|
|
66
|
+
end
|
|
67
|
+
end
|
data/lib/tinybucket.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'tinybucket/version'
|
|
2
|
+
|
|
3
|
+
require 'active_support/dependencies/autoload'
|
|
4
|
+
|
|
5
|
+
require 'active_support/core_ext/hash'
|
|
6
|
+
require 'active_support/configurable'
|
|
7
|
+
require 'active_support/inflector'
|
|
8
|
+
|
|
9
|
+
require 'faraday'
|
|
10
|
+
require 'faraday_middleware'
|
|
11
|
+
require 'faraday_middleware/response_middleware'
|
|
12
|
+
require 'faraday_middleware/follow_oauth_redirects'
|
|
13
|
+
|
|
14
|
+
require 'active_model'
|
|
15
|
+
|
|
16
|
+
require 'logger'
|
|
17
|
+
|
|
18
|
+
require 'tinybucket/api'
|
|
19
|
+
require 'tinybucket/api_factory'
|
|
20
|
+
require 'tinybucket/api/helper'
|
|
21
|
+
require 'tinybucket/client'
|
|
22
|
+
require 'tinybucket/connection'
|
|
23
|
+
require 'tinybucket/constants'
|
|
24
|
+
require 'tinybucket/error'
|
|
25
|
+
require 'tinybucket/model/concerns'
|
|
26
|
+
require 'tinybucket/model'
|
|
27
|
+
require 'tinybucket/parser'
|
|
28
|
+
require 'tinybucket/request'
|
|
29
|
+
require 'tinybucket/response'
|
|
30
|
+
|
|
31
|
+
require 'active_support/notifications'
|
|
32
|
+
ActiveSupport::Notifications.subscribe('request.faraday') \
|
|
33
|
+
do |_name, start_time, end_time, _, env|
|
|
34
|
+
url = env[:url]
|
|
35
|
+
http_method = env[:method].to_s.upcase
|
|
36
|
+
duration = end_time - start_time
|
|
37
|
+
Tinybucket.logger.debug \
|
|
38
|
+
format(
|
|
39
|
+
'[%s] %s %s (%.3f s)',
|
|
40
|
+
url.host, http_method, url.request_uri, duration
|
|
41
|
+
)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
module Tinybucket
|
|
45
|
+
class << self
|
|
46
|
+
include ActiveSupport::Configurable
|
|
47
|
+
attr_accessor :logger, :api_client
|
|
48
|
+
|
|
49
|
+
def new(options = {}, &block)
|
|
50
|
+
@api_client = Tinybucket::Client.new(options, &block)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def logger
|
|
54
|
+
@logger ||= begin
|
|
55
|
+
logger = Logger.new($stdout)
|
|
56
|
+
logger.level = Logger::DEBUG
|
|
57
|
+
logger
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Tinybucket
|
|
2
|
+
module Api
|
|
3
|
+
extend ActiveSupport::Autoload
|
|
4
|
+
|
|
5
|
+
[
|
|
6
|
+
:BaseApi,
|
|
7
|
+
:BranchRestrictionsApi,
|
|
8
|
+
:CommitsApi,
|
|
9
|
+
:CommentsApi,
|
|
10
|
+
:DiffApi,
|
|
11
|
+
:PullRequestsApi,
|
|
12
|
+
:ReposApi,
|
|
13
|
+
:RepoApi,
|
|
14
|
+
:TeamApi,
|
|
15
|
+
:UserApi
|
|
16
|
+
].each do |klass_name|
|
|
17
|
+
autoload klass_name
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Tinybucket
|
|
2
|
+
module Api
|
|
3
|
+
class BaseApi
|
|
4
|
+
include Tinybucket::Connection
|
|
5
|
+
include Tinybucket::Request
|
|
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
|
+
private
|
|
24
|
+
|
|
25
|
+
def filter_config(config)
|
|
26
|
+
keys = %i(oauth_token oauth_secret)
|
|
27
|
+
config.select { |key, _| keys.include?(key) }
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Tinybucket
|
|
2
|
+
module Api
|
|
3
|
+
class BranchRestrictionsApi < BaseApi
|
|
4
|
+
include Tinybucket::Api::Helper::BranchRestrictionsHelper
|
|
5
|
+
|
|
6
|
+
attr_accessor :repo_owner, :repo_slug
|
|
7
|
+
|
|
8
|
+
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)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
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)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Tinybucket
|
|
2
|
+
module Api
|
|
3
|
+
class CommentsApi < BaseApi
|
|
4
|
+
include Tinybucket::Api::Helper::CommentsHelper
|
|
5
|
+
|
|
6
|
+
attr_accessor :repo_owner, :repo_slug
|
|
7
|
+
|
|
8
|
+
attr_accessor :commented_to
|
|
9
|
+
|
|
10
|
+
def list(options = {})
|
|
11
|
+
list = get_path(path_to_list,
|
|
12
|
+
options,
|
|
13
|
+
Tinybucket::Parser::CommentsParser)
|
|
14
|
+
|
|
15
|
+
list.next_proc = next_proc(:list, options)
|
|
16
|
+
|
|
17
|
+
associate_with_target(list)
|
|
18
|
+
inject_api_config(list)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def find(comment_id, options = {})
|
|
22
|
+
comment = get_path(path_to_find(comment_id),
|
|
23
|
+
options,
|
|
24
|
+
Tinybucket::Parser::CommentParser)
|
|
25
|
+
|
|
26
|
+
associate_with_target(comment)
|
|
27
|
+
inject_api_config(comment)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def associate_with_target(result)
|
|
33
|
+
case result
|
|
34
|
+
when Tinybucket::Model::Comment
|
|
35
|
+
result.commented_to = commented_to
|
|
36
|
+
when Tinybucket::Model::Page
|
|
37
|
+
result.items.map { |m| m.commented_to = commented_to }
|
|
38
|
+
else
|
|
39
|
+
fail ArgumentError, "Invalid result: #{result.inspect}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
result
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Tinybucket
|
|
2
|
+
module Api
|
|
3
|
+
class CommitsApi < BaseApi
|
|
4
|
+
include Tinybucket::Api::Helper::CommitsHelper
|
|
5
|
+
|
|
6
|
+
attr_accessor :repo_owner, :repo_slug
|
|
7
|
+
|
|
8
|
+
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)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def find(revision, options = {})
|
|
18
|
+
m = get_path(path_to_find(revision),
|
|
19
|
+
options,
|
|
20
|
+
Tinybucket::Parser::CommitParser)
|
|
21
|
+
|
|
22
|
+
inject_api_config(m)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Tinybucket
|
|
2
|
+
module Api
|
|
3
|
+
class DiffApi < BaseApi
|
|
4
|
+
include Tinybucket::Api::Helper::DiffHelper
|
|
5
|
+
|
|
6
|
+
attr_accessor :repo_owner, :repo_slug
|
|
7
|
+
|
|
8
|
+
def find(spec, options = {})
|
|
9
|
+
get_path(path_to_find(spec), options)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def find_patch(spec, options = {})
|
|
13
|
+
get_path(path_to_patch(spec), options)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Tinybucket
|
|
2
|
+
module Api
|
|
3
|
+
module Helper
|
|
4
|
+
extend ActiveSupport::Autoload
|
|
5
|
+
|
|
6
|
+
[
|
|
7
|
+
:ApiHelper,
|
|
8
|
+
:BranchRestrictionsHelper,
|
|
9
|
+
:CommitsHelper,
|
|
10
|
+
:CommentsHelper,
|
|
11
|
+
:DiffHelper,
|
|
12
|
+
:ReposHelper,
|
|
13
|
+
:RepoHelper,
|
|
14
|
+
:PullRequestsHelper,
|
|
15
|
+
:TeamHelper,
|
|
16
|
+
:UserHelper
|
|
17
|
+
].each do |klass_name|
|
|
18
|
+
autoload klass_name
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Tinybucket
|
|
2
|
+
module Api
|
|
3
|
+
module Helper
|
|
4
|
+
module ApiHelper
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def next_proc(method, options)
|
|
8
|
+
lambda do |next_page|
|
|
9
|
+
send(method, options.merge(page: next_page))
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def inject_api_config(result)
|
|
14
|
+
case result
|
|
15
|
+
when Tinybucket::Model::Page
|
|
16
|
+
result.items.map { |m| m.api_config = @config.dup }
|
|
17
|
+
when Tinybucket::Model::Base
|
|
18
|
+
result.api_config = @config.dup
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
result
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def urlencode(v, key)
|
|
25
|
+
if v.blank? || (escaped = CGI.escape(v.to_s)).blank?
|
|
26
|
+
msg = "Invalid #{key} parameter. (#{v})"
|
|
27
|
+
fail ArgumentError, msg
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
escaped
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def build_path(base_path, *components)
|
|
34
|
+
components.reduce(base_path) do |path, component|
|
|
35
|
+
part = if component.is_a?(Array)
|
|
36
|
+
urlencode(*component)
|
|
37
|
+
else
|
|
38
|
+
component.to_s
|
|
39
|
+
end
|
|
40
|
+
path + '/' + part
|
|
41
|
+
end
|
|
42
|
+
rescue ArgumentError => e
|
|
43
|
+
raise ArgumentError, "Failed to build request URL: #{e}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Tinybucket
|
|
2
|
+
module Api
|
|
3
|
+
module Helper
|
|
4
|
+
module BranchRestrictionsHelper
|
|
5
|
+
include ::Tinybucket::Api::Helper::ApiHelper
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def path_to_list
|
|
10
|
+
base_path
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def path_to_find(restriction_id)
|
|
14
|
+
build_path(base_path,
|
|
15
|
+
[restriction_id, 'restriction_id'])
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def base_path
|
|
19
|
+
build_path('/repositories',
|
|
20
|
+
[repo_owner, 'repo_owner'],
|
|
21
|
+
[repo_slug, 'repo_slug'],
|
|
22
|
+
'branch-restrictions')
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module Tinybucket
|
|
2
|
+
module Api
|
|
3
|
+
module Helper
|
|
4
|
+
module CommentsHelper
|
|
5
|
+
include ::Tinybucket::Api::Helper::ApiHelper
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def path_to_list
|
|
10
|
+
base_path
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def path_to_find(comment_id)
|
|
14
|
+
build_path(base_path,
|
|
15
|
+
[comment_id, 'comment_id'])
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def base_path
|
|
19
|
+
case commented_to
|
|
20
|
+
when Tinybucket::Model::Commit
|
|
21
|
+
base_path_of_commit
|
|
22
|
+
when Tinybucket::Model::PullRequest
|
|
23
|
+
base_path_of_pullrequest
|
|
24
|
+
else
|
|
25
|
+
fail ArgumentError, 'commented_to must be a pull_request or commit'
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def base_path_of_commit
|
|
30
|
+
build_path('/repositories',
|
|
31
|
+
[repo_owner, 'repo_owner'],
|
|
32
|
+
[repo_slug, 'repo_slug'],
|
|
33
|
+
'commit',
|
|
34
|
+
[commented_to.hash, 'revision'],
|
|
35
|
+
'comments')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def base_path_of_pullrequest
|
|
39
|
+
build_path('/repositories',
|
|
40
|
+
[repo_owner, 'repo_owner'],
|
|
41
|
+
[repo_slug, 'repo_slug'],
|
|
42
|
+
'pullrequests',
|
|
43
|
+
[commented_to.id, 'pull_request_id'],
|
|
44
|
+
'comments')
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|