trav3 0.2.0 → 0.2.1
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 +4 -4
- data/.codeclimate.yml +12 -0
- data/.rubocop.yml +3806 -0
- data/.travis.yml +3 -1
- data/Gemfile +6 -5
- data/README.md +2 -2
- data/Rakefile +4 -7
- data/bin/console +3 -3
- data/lib/trav3.rb +887 -521
- data/lib/trav3/get.rb +9 -6
- data/lib/trav3/headers.rb +3 -2
- data/lib/trav3/options.rb +25 -6
- data/lib/trav3/pagination.rb +6 -5
- data/lib/trav3/post.rb +10 -5
- data/lib/trav3/result.rb +28 -12
- data/lib/trav3/version.rb +1 -1
- data/trav3.gemspec +18 -19
- metadata +13 -11
data/lib/trav3/get.rb
CHANGED
@@ -1,27 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'net/http'
|
3
4
|
require 'uri'
|
4
5
|
require 'json'
|
5
6
|
|
6
7
|
module Trav3
|
7
8
|
module GET
|
9
|
+
# rubocop:disable Metrics/MethodLength
|
8
10
|
def self.call(travis, url, raw_reply = false)
|
9
11
|
uri = URI(url)
|
10
12
|
req = Net::HTTP::Get.new(uri.request_uri)
|
11
|
-
travis.headers.each_pair
|
13
|
+
travis.headers.each_pair do |header, value|
|
12
14
|
req[header] = value
|
13
|
-
|
15
|
+
end
|
14
16
|
http = Net::HTTP.new(uri.host, uri.port)
|
15
|
-
http.use_ssl = (uri.scheme ==
|
17
|
+
http.use_ssl = (uri.scheme == 'https')
|
16
18
|
response = http.request(req)
|
17
19
|
|
18
|
-
if raw_reply
|
19
|
-
|
20
|
-
|
20
|
+
return response.body if raw_reply
|
21
|
+
|
22
|
+
if Net::HTTPOK == response.code_type
|
21
23
|
Success.new(travis, response)
|
22
24
|
else
|
23
25
|
RequestError.new(travis, response)
|
24
26
|
end
|
25
27
|
end
|
28
|
+
# rubocop:enable Metrics/MethodLength
|
26
29
|
end
|
27
30
|
end
|
data/lib/trav3/headers.rb
CHANGED
@@ -12,7 +12,7 @@ module Trav3
|
|
12
12
|
def build(**args)
|
13
13
|
@heads ||= {}
|
14
14
|
|
15
|
-
|
15
|
+
args.each do |(key, value)|
|
16
16
|
@heads[key] = value
|
17
17
|
end
|
18
18
|
|
@@ -24,7 +24,8 @@ module Trav3
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def +(other)
|
27
|
-
raise
|
27
|
+
raise TypeError, "Headers type expected, #{other.class} given" unless other.is_a? Headers
|
28
|
+
|
28
29
|
@heads.merge(other.instance_variable_get(:@heads))
|
29
30
|
|
30
31
|
self
|
data/lib/trav3/options.rb
CHANGED
@@ -15,7 +15,7 @@ module Trav3
|
|
15
15
|
def build(**args)
|
16
16
|
@opts ||= []
|
17
17
|
|
18
|
-
|
18
|
+
args.each do |(key, value)|
|
19
19
|
remove(key)
|
20
20
|
@opts.push("#{key}=#{value}")
|
21
21
|
end
|
@@ -24,13 +24,26 @@ module Trav3
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def remove(key)
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
return_value = nil
|
28
|
+
|
29
|
+
@opts = @opts.keep_if do |item, value|
|
30
|
+
if entry_match?(key, item)
|
31
|
+
return_value = value
|
32
|
+
false
|
33
|
+
else
|
34
|
+
true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
return_value
|
39
|
+
end
|
40
|
+
|
41
|
+
def reset!
|
42
|
+
@opts = []
|
30
43
|
end
|
31
44
|
|
32
45
|
def +(other)
|
33
|
-
raise
|
46
|
+
raise TypeError, "Options type expected, #{other.class} given" unless other.is_a? Options
|
34
47
|
|
35
48
|
@opts += other.instance_variable_get(:@opts)
|
36
49
|
|
@@ -42,7 +55,13 @@ module Trav3
|
|
42
55
|
end
|
43
56
|
|
44
57
|
def to_h
|
45
|
-
@opts.map {|item| item.split(
|
58
|
+
@opts.map { |item| item.split('=') }.to_h
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def entry_match?(entry, item)
|
64
|
+
/^#{entry}=/.match? item.to_s
|
46
65
|
end
|
47
66
|
end
|
48
67
|
end
|
data/lib/trav3/pagination.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Trav3
|
3
4
|
class Pagination
|
4
5
|
def initialize(travis, result)
|
@@ -11,19 +12,19 @@ module Trav3
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def next
|
14
|
-
get("#{API_ROOT}#{
|
15
|
+
get("#{API_ROOT}#{dig('@pagination').dig('next').dig('@href')}")
|
15
16
|
end
|
16
17
|
|
17
18
|
def first
|
18
|
-
get("#{API_ROOT}#{
|
19
|
+
get("#{API_ROOT}#{dig('@pagination').dig('first').dig('@href')}")
|
19
20
|
end
|
20
21
|
|
21
22
|
def last
|
22
|
-
get("#{API_ROOT}#{
|
23
|
+
get("#{API_ROOT}#{dig('@pagination').dig('last').dig('@href')}")
|
23
24
|
end
|
24
25
|
|
25
|
-
def get(
|
26
|
-
Trav3::GET.(travis,
|
26
|
+
def get(url)
|
27
|
+
Trav3::GET.call(travis, url)
|
27
28
|
end
|
28
29
|
private :get
|
29
30
|
|
data/lib/trav3/post.rb
CHANGED
@@ -1,26 +1,31 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'net/http'
|
3
4
|
require 'uri'
|
4
5
|
require 'json'
|
5
6
|
|
6
7
|
module Trav3
|
7
8
|
module POST
|
8
|
-
|
9
|
+
# rubocop:disable Metrics/MethodLength
|
10
|
+
def self.call(travis, url, **fields)
|
9
11
|
uri = URI( url.sub(/\?.*$/, '') )
|
10
12
|
req = Net::HTTP::Post.new(uri.request_uri)
|
11
|
-
travis.headers.each_pair
|
13
|
+
travis.headers.each_pair do |header, value|
|
12
14
|
req[header] = value
|
13
|
-
|
15
|
+
end
|
16
|
+
body = fields.delete(:body)
|
17
|
+
req.body = body if body
|
14
18
|
req.set_form_data(**fields) unless fields.empty?
|
15
19
|
http = Net::HTTP.new(uri.host, uri.port)
|
16
|
-
http.use_ssl = (uri.scheme ==
|
20
|
+
http.use_ssl = (uri.scheme == 'https')
|
17
21
|
response = http.request(req)
|
18
|
-
|
22
|
+
|
19
23
|
if [Net::HTTPAccepted, Net::HTTPOK].include? response.code_type
|
20
24
|
Success.new(travis, response)
|
21
25
|
else
|
22
26
|
RequestError.new(travis, response)
|
23
27
|
end
|
24
28
|
end
|
29
|
+
# rubocop:enable Metrics/MethodLength
|
25
30
|
end
|
26
31
|
end
|
data/lib/trav3/result.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'forwardable'
|
3
4
|
|
4
5
|
module Trav3
|
@@ -20,7 +21,7 @@ module Trav3
|
|
20
21
|
|
21
22
|
class Unimplemented < StandardError
|
22
23
|
def message
|
23
|
-
|
24
|
+
'This feature is not implemented.'
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -29,10 +30,10 @@ module Trav3
|
|
29
30
|
attr_reader :travis
|
30
31
|
def_delegators :@json, :[], :dig, :keys, :values, :has_key?
|
31
32
|
def_delegators :@response, :code, :code_type, :uri, :message, :read_header,
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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
|
36
37
|
def initialize(travis, response)
|
37
38
|
@travis = travis
|
38
39
|
@response = response
|
@@ -40,11 +41,16 @@ module Trav3
|
|
40
41
|
end
|
41
42
|
|
42
43
|
def inspect
|
43
|
-
"<#{self.class} Response: keys = #{
|
44
|
+
"<#{self.class} Response: keys = #{keys}>"
|
45
|
+
end
|
46
|
+
|
47
|
+
def success?
|
48
|
+
raise Unimplemented
|
44
49
|
end
|
45
50
|
|
46
|
-
def
|
47
|
-
|
51
|
+
def failure?
|
52
|
+
raise Unimplemented
|
53
|
+
end
|
48
54
|
private :travis
|
49
55
|
end
|
50
56
|
|
@@ -53,12 +59,22 @@ module Trav3
|
|
53
59
|
Trav3::Pagination.new(travis, self)
|
54
60
|
end
|
55
61
|
|
56
|
-
def success
|
57
|
-
|
62
|
+
def success?
|
63
|
+
true
|
64
|
+
end
|
65
|
+
|
66
|
+
def failure?
|
67
|
+
false
|
68
|
+
end
|
58
69
|
end
|
59
70
|
|
60
71
|
class RequestError < Response
|
61
|
-
def success
|
62
|
-
|
72
|
+
def success?
|
73
|
+
false
|
74
|
+
end
|
75
|
+
|
76
|
+
def failure?
|
77
|
+
true
|
78
|
+
end
|
63
79
|
end
|
64
80
|
end
|
data/lib/trav3/version.rb
CHANGED
data/trav3.gemspec
CHANGED
@@ -1,31 +1,30 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path("../lib", __FILE__)
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
3
|
+
require 'trav3/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
6
|
+
spec.name = 'trav3'
|
8
7
|
spec.version = Trav3::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
8
|
+
spec.authors = ['Daniel P. Clark']
|
9
|
+
spec.email = ['6ftdan@gmail.com']
|
11
10
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
11
|
+
spec.summary = 'Simple Travis V3 API Client'
|
12
|
+
spec.description = 'A Simple client abstraction for the Travis V3 API'
|
13
|
+
spec.homepage = 'https://github.com/danielpclark/trav3'
|
14
|
+
spec.license = 'MIT'
|
16
15
|
|
17
16
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
-
f.match(
|
17
|
+
f.match(/^(test|spec|features)\//)
|
19
18
|
end
|
20
|
-
spec.bindir =
|
21
|
-
spec.executables = spec.files.grep(
|
22
|
-
spec.require_paths = [
|
19
|
+
spec.bindir = 'exe'
|
20
|
+
spec.executables = spec.files.grep(/^exe\//) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ['lib']
|
23
22
|
|
24
23
|
# Generate YARD DOC on install
|
25
|
-
spec.metadata[
|
24
|
+
spec.metadata['yard.run'] = 'yri'
|
26
25
|
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
29
|
-
spec.add_development_dependency
|
30
|
-
spec.add_development_dependency
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.16'
|
27
|
+
spec.add_development_dependency 'factory_bot', '~> 4.11'
|
28
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
29
|
+
spec.add_development_dependency 'rspec', '~> 3.8'
|
31
30
|
end
|
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.2.
|
4
|
+
version: 0.2.1
|
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-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -25,47 +25,47 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.16'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: factory_bot
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '4.11'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '4.11'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '10.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '10.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '3.8'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '3.8'
|
69
69
|
description: A Simple client abstraction for the Travis V3 API
|
70
70
|
email:
|
71
71
|
- 6ftdan@gmail.com
|
@@ -73,8 +73,10 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
+
- ".codeclimate.yml"
|
76
77
|
- ".gitignore"
|
77
78
|
- ".rspec"
|
79
|
+
- ".rubocop.yml"
|
78
80
|
- ".travis.yml"
|
79
81
|
- ".yardopts"
|
80
82
|
- Gemfile
|