swd 1.3.0 → 2.0.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 +4 -4
- data/.github/FUNDING.yml +3 -0
- data/.github/workflows/spec.yml +32 -0
- data/.travis.yml +4 -3
- data/VERSION +1 -1
- data/lib/swd/resource.rb +12 -18
- data/lib/swd.rb +10 -13
- data/spec/helpers/webmock_helper.rb +3 -0
- data/spec/swd/exception_spec.rb +2 -2
- data/spec/swd/resource_spec.rb +3 -24
- data/spec/swd_spec.rb +2 -2
- data/swd.gemspec +2 -1
- metadata +22 -10
- data/lib/swd/debugger/request_filter.rb +0 -20
- data/lib/swd/debugger.rb +0 -3
- data/spec/swd/debugger/request_filter_spec.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f60030386576c99f1d32d337056513f9a5e129eb12ffda22cb39e72e0497930
|
4
|
+
data.tar.gz: d5919e42679f55337ada7688fb667f7c98c05ca55af5dd4493ab952e1f377c2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b81930fdf6bb71c44c0eca8701cc1fa6c030b6434c43bfec6ea2786046f27f237c51894dcdc288ab0e9fdf2805f38e1c68cda8e8668a3ff769c943660e59c18b
|
7
|
+
data.tar.gz: 1c68def1a77cf6aaf488aceb75f02e58260285982363c7b323fefe888b62061dff5ad917d04704bacab2f59de1b929ea24e9187a2b3352c0d8155412acf3a8ce
|
data/.github/FUNDING.yml
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
name: Spec
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- master
|
7
|
+
pull_request:
|
8
|
+
|
9
|
+
permissions:
|
10
|
+
contents: read
|
11
|
+
|
12
|
+
jobs:
|
13
|
+
spec:
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
os: ['ubuntu-20.04']
|
17
|
+
ruby-version: ['2.6', '2.7', '3.0', '3.1']
|
18
|
+
# ubuntu 22.04 only supports ssl 3 and thus only ruby 3.1
|
19
|
+
include:
|
20
|
+
- os: 'ubuntu-22.04'
|
21
|
+
ruby-version: '3.1'
|
22
|
+
runs-on: ${{ matrix.os }}
|
23
|
+
|
24
|
+
steps:
|
25
|
+
- uses: actions/checkout@v3
|
26
|
+
- name: Set up Ruby
|
27
|
+
uses: ruby/setup-ruby@v1
|
28
|
+
with:
|
29
|
+
ruby-version: ${{ matrix.ruby-version }}
|
30
|
+
bundler-cache: true
|
31
|
+
- name: Run Specs
|
32
|
+
run: bundle exec rake spec
|
data/.travis.yml
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0
|
data/lib/swd/resource.rb
CHANGED
@@ -17,7 +17,7 @@ module SWD
|
|
17
17
|
def discover!(cache_options = {})
|
18
18
|
SWD.cache.fetch(cache_key, cache_options) do
|
19
19
|
handle_response do
|
20
|
-
SWD.http_client.
|
20
|
+
SWD.http_client.get endpoint.to_s
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -34,33 +34,27 @@ module SWD
|
|
34
34
|
private
|
35
35
|
|
36
36
|
def handle_response
|
37
|
-
|
38
|
-
if redirect =
|
37
|
+
json = yield.body.with_indifferent_access
|
38
|
+
if redirect = json[:SWD_service_redirect]
|
39
39
|
redirect_to redirect[:location], redirect[:expires]
|
40
40
|
else
|
41
|
-
|
41
|
+
Response.new json
|
42
42
|
end
|
43
|
-
rescue
|
44
|
-
case e.
|
43
|
+
rescue Faraday::Error => e
|
44
|
+
case e.response_status
|
45
45
|
when nil
|
46
|
-
raise
|
46
|
+
raise e
|
47
47
|
when 400
|
48
|
-
raise BadRequest.new('Bad Request',
|
48
|
+
raise BadRequest.new('Bad Request', e.response_body)
|
49
49
|
when 401
|
50
|
-
raise Unauthorized.new('Unauthorized',
|
50
|
+
raise Unauthorized.new('Unauthorized', e.response_body)
|
51
51
|
when 403
|
52
|
-
raise Forbidden.new('Forbidden',
|
52
|
+
raise Forbidden.new('Forbidden', e.response_body)
|
53
53
|
when 404
|
54
|
-
raise NotFound.new('Not Found',
|
54
|
+
raise NotFound.new('Not Found', e.response_body)
|
55
55
|
else
|
56
|
-
raise HttpError.new(e.
|
56
|
+
raise HttpError.new(e.response_status, e.response_body, e.response_body)
|
57
57
|
end
|
58
|
-
rescue JSON::ParserError, OpenSSL::SSL::SSLError, SocketError, Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
|
59
|
-
raise Exception.new(e.message)
|
60
|
-
end
|
61
|
-
|
62
|
-
def to_response_object(hash)
|
63
|
-
Response.new hash
|
64
58
|
end
|
65
59
|
|
66
60
|
def redirect_to(location, expires)
|
data/lib/swd.rb
CHANGED
@@ -3,7 +3,8 @@ require 'logger'
|
|
3
3
|
require 'openssl'
|
4
4
|
require 'active_support'
|
5
5
|
require 'active_support/core_ext'
|
6
|
-
require '
|
6
|
+
require 'faraday'
|
7
|
+
require 'faraday/follow_redirects'
|
7
8
|
require 'attr_required'
|
8
9
|
require 'attr_optional'
|
9
10
|
|
@@ -51,17 +52,14 @@ module SWD
|
|
51
52
|
self.debugging = false
|
52
53
|
|
53
54
|
def self.http_client
|
54
|
-
|
55
|
-
:
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
_http_client_.request_filter << Debugger::RequestFilter.new if debugging?
|
63
|
-
http_config.try(:call, _http_client_)
|
64
|
-
_http_client_
|
55
|
+
Faraday.new(headers: {user_agent: "SWD #{VERSION}"}) do |faraday|
|
56
|
+
faraday.response :raise_error
|
57
|
+
faraday.response :json
|
58
|
+
faraday.response :follow_redirects
|
59
|
+
faraday.response :logger, WebFinger.logger if debugging?
|
60
|
+
faraday.adapter Faraday.default_adapter
|
61
|
+
http_config.try(:call, faraday)
|
62
|
+
end
|
65
63
|
end
|
66
64
|
def self.http_config(&block)
|
67
65
|
@@http_config ||= block
|
@@ -79,6 +77,5 @@ require 'swd/cache'
|
|
79
77
|
require 'swd/exception'
|
80
78
|
require 'swd/resource'
|
81
79
|
require 'swd/response'
|
82
|
-
require 'swd/debugger'
|
83
80
|
|
84
81
|
SWD.cache = SWD::Cache.new
|
@@ -24,6 +24,9 @@ module WebMockHelper
|
|
24
24
|
|
25
25
|
def response_for(response_file, options = {})
|
26
26
|
response = {}
|
27
|
+
response[:headers] = {
|
28
|
+
'Content-Type' => 'application/json'
|
29
|
+
}
|
27
30
|
response[:body] = File.new(File.join(File.dirname(__FILE__), '../mock_json', "#{response_file}.json"))
|
28
31
|
if options[:status]
|
29
32
|
response[:status] = options[:status]
|
data/spec/swd/exception_spec.rb
CHANGED
@@ -2,12 +2,12 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe SWD::HttpError do
|
4
4
|
subject do
|
5
|
-
SWD::HttpError.new 400, 'Bad Request',
|
5
|
+
SWD::HttpError.new 400, 'Bad Request', 'Message'
|
6
6
|
end
|
7
7
|
|
8
8
|
its(:status) { should == 400 }
|
9
9
|
its(:message) { should == 'Bad Request' }
|
10
|
-
its(:response) { should
|
10
|
+
its(:response) { should == 'Message' }
|
11
11
|
end
|
12
12
|
|
13
13
|
describe SWD::BadRequest do
|
data/spec/swd/resource_spec.rb
CHANGED
@@ -97,31 +97,10 @@ describe SWD::Resource do
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
-
context 'when
|
100
|
+
context 'when Faraday::Error without response' do
|
101
101
|
it do
|
102
|
-
expect(SWD.http_client).to receive(:
|
103
|
-
expect { res = resource.discover! }.to raise_error
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
context 'when invalid JSON' do
|
108
|
-
it do
|
109
|
-
expect(SWD.http_client).to receive(:get_content).and_raise(JSON::ParserError)
|
110
|
-
expect { res = resource.discover! }.to raise_error SWD::Exception
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
context 'when SocketError' do
|
115
|
-
it do
|
116
|
-
expect(SWD.http_client).to receive(:get_content).and_raise(SocketError)
|
117
|
-
expect { res = resource.discover! }.to raise_error SWD::Exception
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
context 'when BadResponseError without response' do
|
122
|
-
it do
|
123
|
-
expect(SWD.http_client).to receive(:get_content).and_raise(HTTPClient::BadResponseError.new(''))
|
124
|
-
expect { res = resource.discover! }.to raise_error SWD::Exception
|
102
|
+
expect(SWD.http_client).to receive(:get).and_raise(Faraday::Error)
|
103
|
+
expect { res = resource.discover! }.to raise_error Faraday::Error
|
125
104
|
end
|
126
105
|
end
|
127
106
|
|
data/spec/swd_spec.rb
CHANGED
@@ -108,11 +108,11 @@ describe SWD do
|
|
108
108
|
context 'with http_config' do
|
109
109
|
before do
|
110
110
|
SWD.http_config do |config|
|
111
|
-
config.
|
111
|
+
config.ssl.verify = false
|
112
112
|
end
|
113
113
|
end
|
114
114
|
it 'should configure http_client' do
|
115
|
-
SWD.http_client.
|
115
|
+
SWD.http_client.ssl.verify.should be_falsy
|
116
116
|
end
|
117
117
|
end
|
118
118
|
end
|
data/swd.gemspec
CHANGED
@@ -10,7 +10,8 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
11
11
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
12
|
s.require_paths = ['lib']
|
13
|
-
s.add_runtime_dependency '
|
13
|
+
s.add_runtime_dependency 'faraday', '~> 2.0'
|
14
|
+
s.add_runtime_dependency 'faraday-follow_redirects'
|
14
15
|
s.add_runtime_dependency 'activesupport', '>= 3'
|
15
16
|
s.add_runtime_dependency 'attr_required', '>= 0.0.5'
|
16
17
|
s.add_development_dependency 'rake'
|
metadata
CHANGED
@@ -1,29 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nov matake
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday-follow_redirects
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - ">="
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
33
|
+
version: '0'
|
20
34
|
type: :runtime
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - ">="
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: activesupport
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,6 +143,8 @@ executables: []
|
|
129
143
|
extensions: []
|
130
144
|
extra_rdoc_files: []
|
131
145
|
files:
|
146
|
+
- ".github/FUNDING.yml"
|
147
|
+
- ".github/workflows/spec.yml"
|
132
148
|
- ".gitignore"
|
133
149
|
- ".rspec"
|
134
150
|
- ".travis.yml"
|
@@ -139,8 +155,6 @@ files:
|
|
139
155
|
- VERSION
|
140
156
|
- lib/swd.rb
|
141
157
|
- lib/swd/cache.rb
|
142
|
-
- lib/swd/debugger.rb
|
143
|
-
- lib/swd/debugger/request_filter.rb
|
144
158
|
- lib/swd/exception.rb
|
145
159
|
- lib/swd/resource.rb
|
146
160
|
- lib/swd/response.rb
|
@@ -151,7 +165,6 @@ files:
|
|
151
165
|
- spec/mock_json/redirect_with_port.json
|
152
166
|
- spec/mock_json/success.json
|
153
167
|
- spec/spec_helper.rb
|
154
|
-
- spec/swd/debugger/request_filter_spec.rb
|
155
168
|
- spec/swd/exception_spec.rb
|
156
169
|
- spec/swd/resource_spec.rb
|
157
170
|
- spec/swd_spec.rb
|
@@ -174,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
187
|
- !ruby/object:Gem::Version
|
175
188
|
version: '0'
|
176
189
|
requirements: []
|
177
|
-
rubygems_version: 3.1.
|
190
|
+
rubygems_version: 3.1.6
|
178
191
|
signing_key:
|
179
192
|
specification_version: 4
|
180
193
|
summary: SWD (Simple Web Discovery) Client Library
|
@@ -186,7 +199,6 @@ test_files:
|
|
186
199
|
- spec/mock_json/redirect_with_port.json
|
187
200
|
- spec/mock_json/success.json
|
188
201
|
- spec/spec_helper.rb
|
189
|
-
- spec/swd/debugger/request_filter_spec.rb
|
190
202
|
- spec/swd/exception_spec.rb
|
191
203
|
- spec/swd/resource_spec.rb
|
192
204
|
- spec/swd_spec.rb
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module SWD
|
2
|
-
module Debugger
|
3
|
-
class RequestFilter
|
4
|
-
# Callback called in HTTPClient (before sending a request)
|
5
|
-
# request:: HTTP::Message
|
6
|
-
def filter_request(request)
|
7
|
-
started = "======= [SWD] HTTP REQUEST STARTED ======="
|
8
|
-
SWD.logger.info [started, request.dump].join("\n")
|
9
|
-
end
|
10
|
-
|
11
|
-
# Callback called in HTTPClient (after received a response)
|
12
|
-
# request:: HTTP::Message
|
13
|
-
# response:: HTTP::Message
|
14
|
-
def filter_response(request, response)
|
15
|
-
finished = "======= [SWD] HTTP REQUEST FINISHED ======="
|
16
|
-
SWD.logger.info ['-' * 50, response.dump, finished].join("\n")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/lib/swd/debugger.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe SWD::Debugger::RequestFilter do
|
4
|
-
let(:resource_endpoint) { 'https://example.com/resources' }
|
5
|
-
let(:request) { HTTP::Message.new_request(:get, URI.parse(resource_endpoint)) }
|
6
|
-
let(:response) { HTTP::Message.new_response({:hello => 'world'}.to_json) }
|
7
|
-
let(:request_filter) { SWD::Debugger::RequestFilter.new }
|
8
|
-
|
9
|
-
describe '#filter_request' do
|
10
|
-
it 'should log request' do
|
11
|
-
expect(SWD.logger).to receive(:info).with(
|
12
|
-
"======= [SWD] HTTP REQUEST STARTED =======\n" +
|
13
|
-
request.dump
|
14
|
-
)
|
15
|
-
request_filter.filter_request(request)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#filter_response' do
|
20
|
-
it 'should log response' do
|
21
|
-
expect(SWD.logger).to receive(:info).with(
|
22
|
-
"--------------------------------------------------\n" +
|
23
|
-
response.dump +
|
24
|
-
"\n======= [SWD] HTTP REQUEST FINISHED ======="
|
25
|
-
)
|
26
|
-
request_filter.filter_response(request, response)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|