swd 1.3.0 → 2.0.3
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 +31 -0
- data/.travis.yml +4 -3
- data/CHANGELOG.md +25 -0
- data/VERSION +1 -1
- data/lib/swd/resource.rb +15 -16
- 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 +2 -23
- data/spec/swd_spec.rb +2 -2
- data/swd.gemspec +2 -1
- metadata +26 -13
- 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: ec5568cf1fe7901b0782a7de8d3f44f6c0efa0382e39f72ec9a6d43ea2c168b4
|
4
|
+
data.tar.gz: b05f2404383e789be4816d7ad002f4fce8e5eac7d64f7a7b16cf35b2fb988f6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9989ce57ad5c568b69fbb9b8165f07b1946e1cdb6dfe39395455fb3ccf50e45fb618f17cda4ecb788aea568e847b5dc4e1b75722db7d42ecb02b785e43f0c9b
|
7
|
+
data.tar.gz: baa4361f32ee9127fb678fafe5b6b625cf69c63a093b4aad26a9f7d7f9697d4491f09653761cfe028d1c876ae73901c6fc9fd63b1f21654bf9d28e147acd7632
|
data/.github/FUNDING.yml
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
name: Spec
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- main
|
7
|
+
pull_request:
|
8
|
+
|
9
|
+
permissions:
|
10
|
+
contents: read
|
11
|
+
|
12
|
+
jobs:
|
13
|
+
spec:
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
os: ['ubuntu-20.04', 'ubuntu-22.04']
|
17
|
+
ruby-version: ['3.1', '3.2', '3.3']
|
18
|
+
include:
|
19
|
+
- os: 'ubuntu-20.04'
|
20
|
+
ruby-version: '3.0'
|
21
|
+
runs-on: ${{ matrix.os }}
|
22
|
+
|
23
|
+
steps:
|
24
|
+
- uses: actions/checkout@v3
|
25
|
+
- name: Set up Ruby
|
26
|
+
uses: ruby/setup-ruby@v1
|
27
|
+
with:
|
28
|
+
ruby-version: ${{ matrix.ruby-version }}
|
29
|
+
bundler-cache: true
|
30
|
+
- name: Run Specs
|
31
|
+
run: bundle exec rake spec
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
## [2.0.2] - 2022-10-09
|
2
|
+
|
3
|
+
### Changed
|
4
|
+
|
5
|
+
* convert Faraday::Error to SWD::Exception https://github.com/nov/SWD/commit/a5bacba3c0fe740b1e36be220980b29dc50de095
|
6
|
+
|
7
|
+
### Fixed
|
8
|
+
|
9
|
+
* SWD::Resource#to_response_object was needed for openid_connect gem https://github.com/nov/SWD/commit/c4d916d3cd8d4fe076bd27a64403d98dea9b00ef
|
10
|
+
|
11
|
+
## [2.0.1] - 2022-10-08
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
* typo https://github.com/nov/SWD/commit/3fd7a4fbe8fdf586824edc5d2b4222c43e7a9655
|
16
|
+
|
17
|
+
## [2.0.0] - 2022-10-08
|
18
|
+
|
19
|
+
### Added
|
20
|
+
|
21
|
+
- start recording CHANGELOG
|
22
|
+
|
23
|
+
### Changed
|
24
|
+
|
25
|
+
- Switch from httpclient to faraday https://github.com/nov/SWD/pull/4
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.3
|
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,32 @@ 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
|
-
to_response_object
|
41
|
+
to_response_object 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 Exception.new
|
46
|
+
raise Exception.new 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
58
|
end
|
61
59
|
|
62
|
-
|
63
|
-
|
60
|
+
# NOTE: overwritten in openid_connect gem.
|
61
|
+
def to_response_object(json)
|
62
|
+
Response.new json
|
64
63
|
end
|
65
64
|
|
66
65
|
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, SWD.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,30 +97,9 @@ 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 SWD::Exception
|
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(''))
|
102
|
+
expect(SWD.http_client).to receive(:get).and_raise(Faraday::Error)
|
124
103
|
expect { res = resource.discover! }.to raise_error SWD::Exception
|
125
104
|
end
|
126
105
|
end
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nov matake
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-12-27 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,9 +143,12 @@ 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"
|
151
|
+
- CHANGELOG.md
|
135
152
|
- Gemfile
|
136
153
|
- LICENSE
|
137
154
|
- README.rdoc
|
@@ -139,8 +156,6 @@ files:
|
|
139
156
|
- VERSION
|
140
157
|
- lib/swd.rb
|
141
158
|
- lib/swd/cache.rb
|
142
|
-
- lib/swd/debugger.rb
|
143
|
-
- lib/swd/debugger/request_filter.rb
|
144
159
|
- lib/swd/exception.rb
|
145
160
|
- lib/swd/resource.rb
|
146
161
|
- lib/swd/response.rb
|
@@ -151,7 +166,6 @@ files:
|
|
151
166
|
- spec/mock_json/redirect_with_port.json
|
152
167
|
- spec/mock_json/success.json
|
153
168
|
- spec/spec_helper.rb
|
154
|
-
- spec/swd/debugger/request_filter_spec.rb
|
155
169
|
- spec/swd/exception_spec.rb
|
156
170
|
- spec/swd/resource_spec.rb
|
157
171
|
- spec/swd_spec.rb
|
@@ -159,7 +173,7 @@ files:
|
|
159
173
|
homepage: https://github.com/nov/swd
|
160
174
|
licenses: []
|
161
175
|
metadata: {}
|
162
|
-
post_install_message:
|
176
|
+
post_install_message:
|
163
177
|
rdoc_options: []
|
164
178
|
require_paths:
|
165
179
|
- lib
|
@@ -174,8 +188,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
188
|
- !ruby/object:Gem::Version
|
175
189
|
version: '0'
|
176
190
|
requirements: []
|
177
|
-
rubygems_version: 3.
|
178
|
-
signing_key:
|
191
|
+
rubygems_version: 3.4.10
|
192
|
+
signing_key:
|
179
193
|
specification_version: 4
|
180
194
|
summary: SWD (Simple Web Discovery) Client Library
|
181
195
|
test_files:
|
@@ -186,7 +200,6 @@ test_files:
|
|
186
200
|
- spec/mock_json/redirect_with_port.json
|
187
201
|
- spec/mock_json/success.json
|
188
202
|
- spec/spec_helper.rb
|
189
|
-
- spec/swd/debugger/request_filter_spec.rb
|
190
203
|
- spec/swd/exception_spec.rb
|
191
204
|
- spec/swd/resource_spec.rb
|
192
205
|
- 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
|