trav3 0.2.5 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/README.md +1 -0
- data/lib/trav3.rb +146 -10
- data/lib/trav3/error/invalid_api_endpoint.rb +11 -0
- data/lib/trav3/error/invalid_repository.rb +11 -0
- data/lib/trav3/error/unimplemented.rb +9 -0
- data/lib/trav3/errors.rb +5 -0
- data/lib/trav3/headers.rb +3 -3
- data/lib/trav3/options.rb +23 -4
- data/lib/trav3/pagination.rb +15 -11
- data/lib/trav3/response.rb +6 -0
- data/lib/trav3/response/request_error.rb +13 -0
- data/lib/trav3/response/response.rb +39 -0
- data/lib/trav3/response/response_collection.rb +82 -0
- data/lib/trav3/response/success.rb +17 -0
- data/lib/trav3/rest.rb +105 -5
- data/lib/trav3/version.rb +1 -1
- metadata +11 -8
- data/lib/trav3/rest/create.rb +0 -29
- data/lib/trav3/rest/delete.rb +0 -27
- data/lib/trav3/rest/get.rb +0 -29
- data/lib/trav3/rest/patch.rb +0 -29
- data/lib/trav3/rest/post.rb +0 -30
- data/lib/trav3/result.rb +0 -84
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df20e3328d17a3337d9a09631285a18d5aa3d59381651c09db938f0e95edd324
|
4
|
+
data.tar.gz: 583fc08a041c80d8ebee2bc0684b7cea15a8888defdb6bd3bc5d17165406c1ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c08c5042a02094911029e1ddfab0cfb3e2f960f2fcc54222ddc5c020a9dff19f973f8b6593a893dd95e27c5fc389546115b4bf732ba9861c2dfa947f800b55d
|
7
|
+
data.tar.gz: d7cf95030b983f865874cfc033954597222af945b3c11a00e907fea4463caf6b5187c50059e17e94e4f893897cb221b2cb4bf9cafe10413c21a3d40c177d68d4
|
data/.rubocop.yml
CHANGED
@@ -2150,7 +2150,7 @@ Style/Alias:
|
|
2150
2150
|
Style/AndOr:
|
2151
2151
|
Description: 'Use &&/|| instead of and/or.'
|
2152
2152
|
StyleGuide: '#no-and-or-or'
|
2153
|
-
Enabled:
|
2153
|
+
Enabled: false
|
2154
2154
|
VersionAdded: '0.9'
|
2155
2155
|
VersionChanged: '0.25'
|
2156
2156
|
# Whether `and` and `or` are banned only in conditionals (conditionals)
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
[![Gem Version](https://badge.fury.io/rb/trav3.svg)](http://badge.fury.io/rb/trav3)
|
2
2
|
[![Build Status](https://travis-ci.org/danielpclark/trav3.svg?branch=master)](https://travis-ci.org/danielpclark/trav3)
|
3
|
+
[![Commits Since Release](https://img.shields.io/github/commits-since/danielpclark/trav3/v0.2.5.svg)](https://github.com/danielpclark/trav3/graphs/commit-activity)
|
3
4
|
[![Maintainability](https://api.codeclimate.com/v1/badges/1ed07a4baea3832b6207/maintainability)](https://codeclimate.com/github/danielpclark/trav3/maintainability)
|
4
5
|
[![Test Coverage](https://api.codeclimate.com/v1/badges/1ed07a4baea3832b6207/test_coverage)](https://codeclimate.com/github/danielpclark/trav3/test_coverage)
|
5
6
|
[![Red The Docs](https://img.shields.io/badge/Read-the%20docs-blue.svg)](http://danielpclark.github.io/trav3/Trav3/Travis.html)
|
data/lib/trav3.rb
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
|
3
3
|
# rubocop:disable Metrics/ClassLength
|
4
4
|
require 'trav3/version'
|
5
|
+
require 'forwardable'
|
6
|
+
require 'trav3/errors'
|
7
|
+
require 'trav3/response'
|
5
8
|
require 'trav3/pagination'
|
6
9
|
require 'trav3/options'
|
7
10
|
require 'trav3/headers'
|
8
|
-
require 'trav3/result'
|
9
11
|
require 'trav3/rest'
|
10
12
|
|
11
13
|
# Trav3 project namespace
|
12
14
|
module Trav3
|
13
|
-
API_ROOT = 'https://api.travis-ci.org'
|
14
|
-
|
15
15
|
# An abstraction for the Travis CI v3 API
|
16
16
|
#
|
17
17
|
# @author Daniel P. Clark https://6ftdan.com
|
@@ -22,7 +22,6 @@ module Trav3
|
|
22
22
|
# @!attribute [r] headers
|
23
23
|
# @return [Headers] Request headers object
|
24
24
|
class Travis
|
25
|
-
API_ENDPOINT = API_ROOT
|
26
25
|
attr_reader :api_endpoint
|
27
26
|
attr_reader :options
|
28
27
|
attr_reader :headers
|
@@ -34,7 +33,7 @@ module Trav3
|
|
34
33
|
def initialize(repo)
|
35
34
|
validate_repo_format repo
|
36
35
|
|
37
|
-
@api_endpoint =
|
36
|
+
@api_endpoint = 'https://api.travis-ci.org'
|
38
37
|
@repo = sanitize_repo_name repo
|
39
38
|
|
40
39
|
initial_defaults
|
@@ -60,7 +59,7 @@ module Trav3
|
|
60
59
|
# @param value [Symbol, String, Integer] value for key
|
61
60
|
# @return [self]
|
62
61
|
def defaults(**args)
|
63
|
-
(@options ||= Options.new).build(
|
62
|
+
(@options ||= Options.new).build(args)
|
64
63
|
self
|
65
64
|
end
|
66
65
|
|
@@ -73,7 +72,7 @@ module Trav3
|
|
73
72
|
# @param value [Symbol, String, Integer] value for key
|
74
73
|
# @return [self]
|
75
74
|
def h(**args)
|
76
|
-
(@headers ||= Headers.new).build(
|
75
|
+
(@headers ||= Headers.new).build(args)
|
77
76
|
self
|
78
77
|
end
|
79
78
|
|
@@ -770,7 +769,7 @@ module Trav3
|
|
770
769
|
validate_string yaml_content
|
771
770
|
|
772
771
|
ct = headers.remove(:'Content-Type')
|
773
|
-
result = post("#{without_repo}/lint",
|
772
|
+
result = post("#{without_repo}/lint", yaml_content)
|
774
773
|
h('Content-Type': ct) if ct
|
775
774
|
result
|
776
775
|
end
|
@@ -1050,6 +1049,131 @@ module Trav3
|
|
1050
1049
|
end
|
1051
1050
|
end
|
1052
1051
|
|
1052
|
+
# Document `resources/preference/overview` not found.
|
1053
|
+
#
|
1054
|
+
# ## Attributes
|
1055
|
+
#
|
1056
|
+
# **Standard Representation**
|
1057
|
+
#
|
1058
|
+
# Included when the resource is the main response of a request, or is {https://developer.travis-ci.com/eager-loading eager loaded}.
|
1059
|
+
#
|
1060
|
+
# Name Type Description
|
1061
|
+
# name Unknown The preference's name.
|
1062
|
+
# value Unknown The preference's value.
|
1063
|
+
#
|
1064
|
+
# **Minimal Representation**
|
1065
|
+
#
|
1066
|
+
# Included when the resource is returned as part of another resource.
|
1067
|
+
#
|
1068
|
+
# Name Type Description
|
1069
|
+
# name Unknown The preference's name.
|
1070
|
+
# value Unknown The preference's value.
|
1071
|
+
#
|
1072
|
+
# ## Actions
|
1073
|
+
#
|
1074
|
+
# **For Organization**
|
1075
|
+
#
|
1076
|
+
# Document `resources/preference/actions/for_organization` not found.
|
1077
|
+
#
|
1078
|
+
# GET <code>/org/{organization.id}/preference/{preference.name}</code>
|
1079
|
+
#
|
1080
|
+
# Template Variable Type Description
|
1081
|
+
# organization.id Integer Value uniquely identifying the organization.
|
1082
|
+
# preference.name Unknown The preference's name.
|
1083
|
+
# Query Parameter Type Description
|
1084
|
+
# include [String] List of attributes to eager load.
|
1085
|
+
#
|
1086
|
+
# **Update**
|
1087
|
+
#
|
1088
|
+
# Document `resources/preference/actions/update` not found.
|
1089
|
+
#
|
1090
|
+
# PATCH <code>/org/{organization.id}/preference/{preference.name}</code>
|
1091
|
+
#
|
1092
|
+
# Template Variable Type Description
|
1093
|
+
# organization.id Integer Value uniquely identifying the organization.
|
1094
|
+
# preference.name Unknown The preference's name.
|
1095
|
+
# Accepted Parameter Type Description
|
1096
|
+
# preference.value Unknown The preference's value.
|
1097
|
+
#
|
1098
|
+
# PATCH <code>/preference/{preference.name}</code>
|
1099
|
+
#
|
1100
|
+
# Template Variable Type Description
|
1101
|
+
# preference.name Unknown The preference's name.
|
1102
|
+
# Accepted Parameter Type Description
|
1103
|
+
# preference.value Unknown The preference's value.
|
1104
|
+
#
|
1105
|
+
# **Find**
|
1106
|
+
#
|
1107
|
+
# Document `resources/preference/actions/find` not found.
|
1108
|
+
#
|
1109
|
+
# GET <code>/preference/{preference.name}</code>
|
1110
|
+
#
|
1111
|
+
# Template Variable Type Description
|
1112
|
+
# preference.name Unknown The preference's name.
|
1113
|
+
# Query Parameter Type Description
|
1114
|
+
# include [String] List of attributes to eager load.
|
1115
|
+
#
|
1116
|
+
# @param key [String] preference name to get or set
|
1117
|
+
# @param value [String] optional value to set preference
|
1118
|
+
# @param org_id [String, Integer] optional keyword argument for an organization id
|
1119
|
+
# @return [Success, RequestError]
|
1120
|
+
def preference(key, value = nil, org_id: nil)
|
1121
|
+
if org_id
|
1122
|
+
validate_number org_id
|
1123
|
+
org_id = "/org/#{org_id}"
|
1124
|
+
end
|
1125
|
+
|
1126
|
+
if value.nil?
|
1127
|
+
get("#{without_repo}#{org_id}/preference/#{key}")
|
1128
|
+
else
|
1129
|
+
patch("#{without_repo}#{org_id}/preference/#{key}", 'preference.value' => value)
|
1130
|
+
end
|
1131
|
+
end
|
1132
|
+
|
1133
|
+
# Document `resources/preferences/overview` not found.
|
1134
|
+
#
|
1135
|
+
# ## Attributes
|
1136
|
+
#
|
1137
|
+
# Name Type Description
|
1138
|
+
# preferences [Preferenc] List of preferences.
|
1139
|
+
#
|
1140
|
+
# ## Actions
|
1141
|
+
#
|
1142
|
+
# **For Organization**
|
1143
|
+
#
|
1144
|
+
# Document `resources/preferences/actions/for_organization` not found.
|
1145
|
+
#
|
1146
|
+
# GET <code>/org/{organization.id}/preferences</code>
|
1147
|
+
#
|
1148
|
+
# Template Variable Type Description
|
1149
|
+
# organization.id Integer Value uniquely identifying the organization.
|
1150
|
+
# Query Parameter Type Description
|
1151
|
+
# include [String] List of attributes to eager load.
|
1152
|
+
#
|
1153
|
+
# Example: GET /org/87/preferences
|
1154
|
+
#
|
1155
|
+
# **For User**
|
1156
|
+
#
|
1157
|
+
# Document `resources/preferences/actions/for_user` not found.
|
1158
|
+
#
|
1159
|
+
# GET <code>/preferences</code>
|
1160
|
+
#
|
1161
|
+
# Query Parameter Type Description
|
1162
|
+
# include [String] List of attributes to eager load.
|
1163
|
+
#
|
1164
|
+
# Example: GET /preferences
|
1165
|
+
#
|
1166
|
+
# @param org_id [String, Integer] optional organization id
|
1167
|
+
# @return [Success, RequestError]
|
1168
|
+
def preferences(org_id = nil)
|
1169
|
+
if org_id
|
1170
|
+
validate_number org_id
|
1171
|
+
org_id = "/org/#{org_id}"
|
1172
|
+
end
|
1173
|
+
|
1174
|
+
get("#{without_repo}#{org_id}/preferences")
|
1175
|
+
end
|
1176
|
+
|
1053
1177
|
# A list of repositories for the current user.
|
1054
1178
|
#
|
1055
1179
|
# ## Attributes
|
@@ -1838,6 +1962,18 @@ module Trav3
|
|
1838
1962
|
Trav3::REST.get(self, url, raw_reply)
|
1839
1963
|
end
|
1840
1964
|
|
1965
|
+
def get_path(url)
|
1966
|
+
get("#{without_repo}#{url}")
|
1967
|
+
end
|
1968
|
+
|
1969
|
+
def get_path_with_opts(url)
|
1970
|
+
url, opt = url.match(/(.+)\?(.*)/)&.captures || url
|
1971
|
+
opts.immutable do |o|
|
1972
|
+
o.send(:update, opt)
|
1973
|
+
get_path("#{url}#{opts}")
|
1974
|
+
end
|
1975
|
+
end
|
1976
|
+
|
1841
1977
|
def initial_defaults
|
1842
1978
|
defaults(limit: 25)
|
1843
1979
|
h('Content-Type': 'application/json')
|
@@ -1857,8 +1993,8 @@ module Trav3
|
|
1857
1993
|
Trav3::REST.patch(self, url, data)
|
1858
1994
|
end
|
1859
1995
|
|
1860
|
-
def post(url,
|
1861
|
-
Trav3::REST.post(self, url,
|
1996
|
+
def post(url, body = nil)
|
1997
|
+
Trav3::REST.post(self, url, body)
|
1862
1998
|
end
|
1863
1999
|
|
1864
2000
|
def validate_api_endpoint(input)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Trav3
|
4
|
+
class InvalidRepository < StandardError
|
5
|
+
def message
|
6
|
+
"The repository format was invlaid.
|
7
|
+
You must either provide the digit name for the repository,
|
8
|
+
or `user/repo` or `user%2Frepo` as the name."
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/trav3/errors.rb
ADDED
data/lib/trav3/headers.rb
CHANGED
@@ -7,11 +7,11 @@ module Trav3
|
|
7
7
|
extend Forwardable
|
8
8
|
def_delegators :@heads, :each_pair
|
9
9
|
|
10
|
-
def initialize(
|
11
|
-
build(
|
10
|
+
def initialize(args = {})
|
11
|
+
build(args)
|
12
12
|
end
|
13
13
|
|
14
|
-
def build(
|
14
|
+
def build(args = {})
|
15
15
|
@heads ||= {}
|
16
16
|
|
17
17
|
args.each do |(key, value)|
|
data/lib/trav3/options.rb
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
module Trav3
|
4
4
|
class Options
|
5
|
-
def initialize(
|
6
|
-
build(
|
5
|
+
def initialize(args = {})
|
6
|
+
build(args)
|
7
7
|
end
|
8
8
|
|
9
9
|
def opts
|
@@ -14,7 +14,7 @@ module Trav3
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def build(
|
17
|
+
def build(args = {})
|
18
18
|
@opts ||= []
|
19
19
|
|
20
20
|
args.each do |(key, value)|
|
@@ -41,6 +41,13 @@ module Trav3
|
|
41
41
|
result
|
42
42
|
end
|
43
43
|
|
44
|
+
def immutable
|
45
|
+
old = @opts
|
46
|
+
result = yield self
|
47
|
+
@opts = old
|
48
|
+
result
|
49
|
+
end
|
50
|
+
|
44
51
|
def remove(key)
|
45
52
|
return_value = nil
|
46
53
|
|
@@ -62,7 +69,7 @@ module Trav3
|
|
62
69
|
def +(other)
|
63
70
|
raise TypeError, "Options type expected, #{other.class} given" unless other.is_a? Options
|
64
71
|
|
65
|
-
|
72
|
+
update other.instance_variable_get(:@opts)
|
66
73
|
|
67
74
|
self
|
68
75
|
end
|
@@ -80,5 +87,17 @@ module Trav3
|
|
80
87
|
def split
|
81
88
|
->(entry) { entry.split('=') }
|
82
89
|
end
|
90
|
+
|
91
|
+
def parse(other)
|
92
|
+
return other.split('&').map(&split).to_h if other.is_a? String
|
93
|
+
|
94
|
+
other.map(&split).to_h
|
95
|
+
end
|
96
|
+
|
97
|
+
def update(other)
|
98
|
+
return self unless other
|
99
|
+
|
100
|
+
build(parse(other))
|
101
|
+
end
|
83
102
|
end
|
84
103
|
end
|
data/lib/trav3/pagination.rb
CHANGED
@@ -2,33 +2,37 @@
|
|
2
2
|
|
3
3
|
module Trav3
|
4
4
|
class Pagination
|
5
|
+
attr_reader :travis
|
5
6
|
def initialize(travis, result)
|
6
7
|
@travis = travis
|
7
8
|
@result = result
|
8
9
|
end
|
9
10
|
|
10
|
-
def dig(opt)
|
11
|
-
@result.dig(opt)
|
12
|
-
end
|
13
|
-
|
14
11
|
def next
|
15
|
-
get(
|
12
|
+
get(action(:next))
|
16
13
|
end
|
17
14
|
|
18
15
|
def first
|
19
|
-
get(
|
16
|
+
get(action(:first))
|
20
17
|
end
|
21
18
|
|
22
19
|
def last
|
23
|
-
get(
|
20
|
+
get(action(:last))
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def action(action)
|
26
|
+
dig('@pagination').dig(action.to_s).dig('@href')
|
24
27
|
end
|
25
28
|
|
26
|
-
def
|
27
|
-
|
29
|
+
def dig(opt)
|
30
|
+
@result.dig(opt)
|
28
31
|
end
|
29
|
-
private :get
|
30
32
|
|
31
|
-
|
33
|
+
def get(path)
|
34
|
+
travis.send(:get_path, path.to_s)
|
35
|
+
end
|
32
36
|
private :travis
|
33
37
|
end
|
34
38
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
module Trav3
|
6
|
+
class Response
|
7
|
+
extend Forwardable
|
8
|
+
attr_reader :travis
|
9
|
+
def_delegators :@collection, *ResponseCollection.instance_methods.-(Object.methods)
|
10
|
+
def_delegators :@response, :code, :code_type, :uri, :message, :read_header,
|
11
|
+
:header, :value, :entity, :response, :body, :decode_content,
|
12
|
+
:msg, :reading_body, :read_body, :http_version,
|
13
|
+
:connection_close?, :connection_keep_alive?,
|
14
|
+
:initialize_http_header, :get_fields, :each_header
|
15
|
+
def initialize(travis, response)
|
16
|
+
@travis = travis
|
17
|
+
@response = response
|
18
|
+
@collection = begin
|
19
|
+
result = JSON.parse(response.body)
|
20
|
+
ResponseCollection.new(travis, result)
|
21
|
+
rescue JSON::ParserError
|
22
|
+
response.error!
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def inspect
|
27
|
+
"<#{self.class} Response: keys = #{keys}>"
|
28
|
+
end
|
29
|
+
|
30
|
+
def success?
|
31
|
+
raise Unimplemented
|
32
|
+
end
|
33
|
+
|
34
|
+
def failure?
|
35
|
+
raise Unimplemented
|
36
|
+
end
|
37
|
+
private :travis
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Trav3
|
4
|
+
class ResponseCollection
|
5
|
+
extend Forwardable
|
6
|
+
def_delegators :@collection, :count, :keys, :values, :has_key?, :key?
|
7
|
+
def initialize(travis, collection)
|
8
|
+
@travis = travis
|
9
|
+
@collection = collection
|
10
|
+
end
|
11
|
+
|
12
|
+
def [](target)
|
13
|
+
result = collection[target]
|
14
|
+
return ResponseCollection.new(travis, result) if collection?(result)
|
15
|
+
|
16
|
+
result
|
17
|
+
end
|
18
|
+
|
19
|
+
def dig(*target)
|
20
|
+
return collection.dig(*target) if target.length != 1
|
21
|
+
|
22
|
+
result = collection.dig(*target)
|
23
|
+
return ResponseCollection.new(travis, result) if collection?(result)
|
24
|
+
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
def each(&block)
|
29
|
+
return collection.each(&block) if hash?
|
30
|
+
|
31
|
+
collection.each do |item|
|
32
|
+
yield ResponseCollection.new(travis, item)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def fetch(idx)
|
37
|
+
result = collection.fetch(idx) { nil }
|
38
|
+
return ResponseCollection.new(travis, result) if collection?(result)
|
39
|
+
return result if result
|
40
|
+
|
41
|
+
# For error raising behavior
|
42
|
+
collection.fetch(idx) unless block_given?
|
43
|
+
|
44
|
+
yield
|
45
|
+
end
|
46
|
+
|
47
|
+
def first
|
48
|
+
self[0]
|
49
|
+
end
|
50
|
+
|
51
|
+
def follow(idx = nil)
|
52
|
+
if href? && !idx
|
53
|
+
url = collection.fetch('@href')
|
54
|
+
return travis.send(:get_path_with_opts, url)
|
55
|
+
end
|
56
|
+
|
57
|
+
result = fetch(idx)
|
58
|
+
result.follow
|
59
|
+
end
|
60
|
+
|
61
|
+
def hash?
|
62
|
+
collection.is_a? Hash
|
63
|
+
end
|
64
|
+
|
65
|
+
def last
|
66
|
+
self[-1]
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def collection?(input)
|
72
|
+
[Array, Hash].include? input.class
|
73
|
+
end
|
74
|
+
|
75
|
+
def href?
|
76
|
+
collection.respond_to?(:key?) and collection.key?('@href')
|
77
|
+
end
|
78
|
+
|
79
|
+
attr_reader :travis
|
80
|
+
attr_reader :collection
|
81
|
+
end
|
82
|
+
end
|
data/lib/trav3/rest.rb
CHANGED
@@ -1,7 +1,107 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
require 'net/http'
|
4
|
+
require 'uri'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
module Trav3
|
8
|
+
module REST
|
9
|
+
class << self
|
10
|
+
def create(travis, url, **data)
|
11
|
+
uri = as_uri url
|
12
|
+
req = request_post uri
|
13
|
+
set_headers travis, req
|
14
|
+
set_json_body req, data
|
15
|
+
response = get_response uri, req
|
16
|
+
|
17
|
+
output travis, response
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete(travis, url)
|
21
|
+
uri = as_uri url
|
22
|
+
req = request_delete uri
|
23
|
+
set_headers travis, req
|
24
|
+
response = get_response uri, req
|
25
|
+
|
26
|
+
output travis, response
|
27
|
+
end
|
28
|
+
|
29
|
+
def get(travis, url, raw_reply = false)
|
30
|
+
uri = as_uri url
|
31
|
+
req = request_get uri
|
32
|
+
set_headers travis, req
|
33
|
+
response = get_response uri, req
|
34
|
+
|
35
|
+
return response.body if raw_reply
|
36
|
+
|
37
|
+
output travis, response
|
38
|
+
end
|
39
|
+
|
40
|
+
def patch(travis, url, data = {})
|
41
|
+
uri = as_uri url
|
42
|
+
req = request_patch uri
|
43
|
+
set_headers travis, req
|
44
|
+
set_json_body req, data
|
45
|
+
response = get_response uri, req
|
46
|
+
|
47
|
+
output travis, response
|
48
|
+
end
|
49
|
+
|
50
|
+
def post(travis, url, body = nil)
|
51
|
+
uri = as_uri url
|
52
|
+
req = request_post uri
|
53
|
+
set_headers travis, req
|
54
|
+
req.body = body if body
|
55
|
+
response = get_response uri, req
|
56
|
+
|
57
|
+
output travis, response
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def as_uri(url)
|
63
|
+
URI( url )
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_response(uri, request)
|
67
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
68
|
+
http.use_ssl = (uri.scheme == 'https')
|
69
|
+
http.request(request)
|
70
|
+
end
|
71
|
+
|
72
|
+
def output(travis, response)
|
73
|
+
if [Net::HTTPAccepted, Net::HTTPOK].include? response.code_type
|
74
|
+
Success.new(travis, response)
|
75
|
+
else
|
76
|
+
RequestError.new(travis, response)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def request_delete(uri)
|
81
|
+
Net::HTTP::Delete.new(uri.request_uri)
|
82
|
+
end
|
83
|
+
|
84
|
+
def request_get(uri)
|
85
|
+
Net::HTTP::Get.new(uri.request_uri)
|
86
|
+
end
|
87
|
+
|
88
|
+
def request_patch(uri)
|
89
|
+
Net::HTTP::Patch.new(uri.request_uri)
|
90
|
+
end
|
91
|
+
|
92
|
+
def request_post(uri)
|
93
|
+
Net::HTTP::Post.new(uri.request_uri)
|
94
|
+
end
|
95
|
+
|
96
|
+
def set_headers(travis, request)
|
97
|
+
travis.headers.each_pair do |header, value|
|
98
|
+
request[header] = value
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def set_json_body(req, data = {})
|
103
|
+
req.body = JSON.generate(data) unless data.empty?
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
data/lib/trav3/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trav3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel P. Clark
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,16 +86,19 @@ files:
|
|
86
86
|
- bin/console
|
87
87
|
- bin/setup
|
88
88
|
- lib/trav3.rb
|
89
|
+
- lib/trav3/error/invalid_api_endpoint.rb
|
90
|
+
- lib/trav3/error/invalid_repository.rb
|
91
|
+
- lib/trav3/error/unimplemented.rb
|
92
|
+
- lib/trav3/errors.rb
|
89
93
|
- lib/trav3/headers.rb
|
90
94
|
- lib/trav3/options.rb
|
91
95
|
- lib/trav3/pagination.rb
|
96
|
+
- lib/trav3/response.rb
|
97
|
+
- lib/trav3/response/request_error.rb
|
98
|
+
- lib/trav3/response/response.rb
|
99
|
+
- lib/trav3/response/response_collection.rb
|
100
|
+
- lib/trav3/response/success.rb
|
92
101
|
- lib/trav3/rest.rb
|
93
|
-
- lib/trav3/rest/create.rb
|
94
|
-
- lib/trav3/rest/delete.rb
|
95
|
-
- lib/trav3/rest/get.rb
|
96
|
-
- lib/trav3/rest/patch.rb
|
97
|
-
- lib/trav3/rest/post.rb
|
98
|
-
- lib/trav3/result.rb
|
99
102
|
- lib/trav3/version.rb
|
100
103
|
- trav3.gemspec
|
101
104
|
homepage: https://github.com/danielpclark/trav3
|
data/lib/trav3/rest/create.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# rubocop:disable Metrics/MethodLength
|
4
|
-
require 'net/http'
|
5
|
-
require 'uri'
|
6
|
-
require 'json'
|
7
|
-
|
8
|
-
module Trav3
|
9
|
-
module REST
|
10
|
-
def self.create(travis, url, **data)
|
11
|
-
uri = URI( url.sub(/\?.*$/, '') )
|
12
|
-
req = Net::HTTP::Post.new(uri.request_uri)
|
13
|
-
travis.headers.each_pair do |header, value|
|
14
|
-
req[header] = value
|
15
|
-
end
|
16
|
-
req.body = JSON.generate(data) unless data.empty?
|
17
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
18
|
-
http.use_ssl = (uri.scheme == 'https')
|
19
|
-
response = http.request(req)
|
20
|
-
|
21
|
-
if [Net::HTTPAccepted, Net::HTTPOK].include? response.code_type
|
22
|
-
Success.new(travis, response)
|
23
|
-
else
|
24
|
-
RequestError.new(travis, response)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
# rubocop:enable Metrics/MethodLength
|
data/lib/trav3/rest/delete.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# rubocop:disable Metrics/MethodLength
|
4
|
-
require 'net/http'
|
5
|
-
require 'uri'
|
6
|
-
|
7
|
-
module Trav3
|
8
|
-
module REST
|
9
|
-
def self.delete(travis, url)
|
10
|
-
uri = URI( url.sub(/\?.*$/, '') )
|
11
|
-
req = Net::HTTP::Delete.new(uri.request_uri)
|
12
|
-
travis.headers.each_pair do |header, value|
|
13
|
-
req[header] = value
|
14
|
-
end
|
15
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
16
|
-
http.use_ssl = (uri.scheme == 'https')
|
17
|
-
response = http.request(req)
|
18
|
-
|
19
|
-
if [Net::HTTPAccepted, Net::HTTPOK].include? response.code_type
|
20
|
-
Success.new(travis, response)
|
21
|
-
else
|
22
|
-
RequestError.new(travis, response)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
# rubocop:enable Metrics/MethodLength
|
data/lib/trav3/rest/get.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# rubocop:disable Metrics/MethodLength
|
4
|
-
require 'net/http'
|
5
|
-
require 'uri'
|
6
|
-
|
7
|
-
module Trav3
|
8
|
-
module REST
|
9
|
-
def self.get(travis, url, raw_reply = false)
|
10
|
-
uri = URI(url)
|
11
|
-
req = Net::HTTP::Get.new(uri.request_uri)
|
12
|
-
travis.headers.each_pair do |header, value|
|
13
|
-
req[header] = value
|
14
|
-
end
|
15
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
16
|
-
http.use_ssl = (uri.scheme == 'https')
|
17
|
-
response = http.request(req)
|
18
|
-
|
19
|
-
return response.body if raw_reply
|
20
|
-
|
21
|
-
if Net::HTTPOK == response.code_type
|
22
|
-
Success.new(travis, response)
|
23
|
-
else
|
24
|
-
RequestError.new(travis, response)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
# rubocop:enable Metrics/MethodLength
|
data/lib/trav3/rest/patch.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# rubocop:disable Metrics/MethodLength
|
4
|
-
require 'net/http'
|
5
|
-
require 'uri'
|
6
|
-
require 'json'
|
7
|
-
|
8
|
-
module Trav3
|
9
|
-
module REST
|
10
|
-
def self.patch(travis, url, data = {})
|
11
|
-
uri = URI( url.sub(/\?.*$/, '') )
|
12
|
-
req = Net::HTTP::Patch.new(uri.request_uri)
|
13
|
-
travis.headers.each_pair do |header, value|
|
14
|
-
req[header] = value
|
15
|
-
end
|
16
|
-
req.body = JSON.generate(data) unless data.empty?
|
17
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
18
|
-
http.use_ssl = (uri.scheme == 'https')
|
19
|
-
response = http.request(req)
|
20
|
-
|
21
|
-
if [Net::HTTPAccepted, Net::HTTPOK].include? response.code_type
|
22
|
-
Success.new(travis, response)
|
23
|
-
else
|
24
|
-
RequestError.new(travis, response)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
# rubocop:enable Metrics/MethodLength
|
data/lib/trav3/rest/post.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# rubocop:disable Metrics/MethodLength
|
4
|
-
require 'net/http'
|
5
|
-
require 'uri'
|
6
|
-
|
7
|
-
module Trav3
|
8
|
-
module REST
|
9
|
-
def self.post(travis, url, **fields)
|
10
|
-
uri = URI( url.sub(/\?.*$/, '') )
|
11
|
-
req = Net::HTTP::Post.new(uri.request_uri)
|
12
|
-
travis.headers.each_pair do |header, value|
|
13
|
-
req[header] = value
|
14
|
-
end
|
15
|
-
body = fields.delete(:body)
|
16
|
-
req.body = body if body
|
17
|
-
req.set_form_data(**fields) unless fields.empty?
|
18
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
19
|
-
http.use_ssl = (uri.scheme == 'https')
|
20
|
-
response = http.request(req)
|
21
|
-
|
22
|
-
if [Net::HTTPAccepted, Net::HTTPOK].include? response.code_type
|
23
|
-
Success.new(travis, response)
|
24
|
-
else
|
25
|
-
RequestError.new(travis, response)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
# rubocop:enable Metrics/MethodLength
|
data/lib/trav3/result.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'forwardable'
|
4
|
-
|
5
|
-
module Trav3
|
6
|
-
class InvalidRepository < StandardError
|
7
|
-
def message
|
8
|
-
"The repository format was invlaid.
|
9
|
-
You must either provide the digit name for the repository,
|
10
|
-
or `user/repo` or `user%2Frepo` as the name."
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
class InvalidAPIEndpoint < StandardError
|
15
|
-
def message
|
16
|
-
"The API endpoint must be either
|
17
|
-
'https://api.travis-ci.com' or
|
18
|
-
'https://api.travis-ci.org'"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class Unimplemented < StandardError
|
23
|
-
def message
|
24
|
-
'This feature is not implemented.'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class Response
|
29
|
-
extend Forwardable
|
30
|
-
attr_reader :travis
|
31
|
-
def_delegators :@json, :[], :dig, :keys, :values, :has_key?
|
32
|
-
def_delegators :@response, :code, :code_type, :uri, :message, :read_header,
|
33
|
-
:header, :value, :entity, :response, :body, :decode_content,
|
34
|
-
:msg, :reading_body, :read_body, :http_version,
|
35
|
-
:connection_close?, :connection_keep_alive?,
|
36
|
-
:initialize_http_header, :get_fields, :each_header
|
37
|
-
def initialize(travis, response)
|
38
|
-
@travis = travis
|
39
|
-
@response = response
|
40
|
-
@json = begin
|
41
|
-
JSON.parse(response.body)
|
42
|
-
rescue JSON::ParserError
|
43
|
-
response.error!
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def inspect
|
48
|
-
"<#{self.class} Response: keys = #{keys}>"
|
49
|
-
end
|
50
|
-
|
51
|
-
def success?
|
52
|
-
raise Unimplemented
|
53
|
-
end
|
54
|
-
|
55
|
-
def failure?
|
56
|
-
raise Unimplemented
|
57
|
-
end
|
58
|
-
private :travis
|
59
|
-
end
|
60
|
-
|
61
|
-
class Success < Response
|
62
|
-
def page
|
63
|
-
Trav3::Pagination.new(travis, self)
|
64
|
-
end
|
65
|
-
|
66
|
-
def success?
|
67
|
-
true
|
68
|
-
end
|
69
|
-
|
70
|
-
def failure?
|
71
|
-
false
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
class RequestError < Response
|
76
|
-
def success?
|
77
|
-
false
|
78
|
-
end
|
79
|
-
|
80
|
-
def failure?
|
81
|
-
true
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|