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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b3b1ef4355a0eb454bc541b4d39740444445316294bb9e23916ca9901437dc73
4
- data.tar.gz: 452ca7702a025a61919fe4982d701c810c4b79be4076cad8af1efff39b635aa4
3
+ metadata.gz: ec5568cf1fe7901b0782a7de8d3f44f6c0efa0382e39f72ec9a6d43ea2c168b4
4
+ data.tar.gz: b05f2404383e789be4816d7ad002f4fce8e5eac7d64f7a7b16cf35b2fb988f6d
5
5
  SHA512:
6
- metadata.gz: 603f6c3000796cacaf8ecb852f08cfc29364443bde30073f50b23e40560eb81ee35b7e567df7479f20fefeb0581e9dff09a1ad88e0d47d9a684c5a11482f08cf
7
- data.tar.gz: 513dfadd5bb60c22d351f0ce930a42272bfa8f2d2e9d110c461d782874af0d3350a8db48784669f8ccfb750dbceeefe1c8d25b858b8fdfc2e83de50adaddd5d3
6
+ metadata.gz: c9989ce57ad5c568b69fbb9b8165f07b1946e1cdb6dfe39395455fb3ccf50e45fb618f17cda4ecb788aea568e847b5dc4e1b75722db7d42ecb02b785e43f0c9b
7
+ data.tar.gz: baa4361f32ee9127fb678fafe5b6b625cf69c63a093b4aad26a9f7d7f9697d4491f09653761cfe028d1c876ae73901c6fc9fd63b1f21654bf9d28e147acd7632
@@ -0,0 +1,3 @@
1
+ # These are supported funding model platforms
2
+
3
+ github: nov
@@ -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
@@ -2,6 +2,7 @@ before_install:
2
2
  - gem install bundler
3
3
 
4
4
  rvm:
5
- - 2.5.8
6
- - 2.6.6
7
- - 2.7.2
5
+ - 2.6.10
6
+ - 2.7.6
7
+ - 3.0.4
8
+ - 3.1.2
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.3.0
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.get_content endpoint.to_s
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
- res = JSON.parse(yield).with_indifferent_access
38
- if redirect = res[:SWD_service_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(res)
41
+ to_response_object json
42
42
  end
43
- rescue HTTPClient::BadResponseError => e
44
- case e.res.try(:status)
43
+ rescue Faraday::Error => e
44
+ case e.response_status
45
45
  when nil
46
- raise Exception.new(e.message)
46
+ raise Exception.new e
47
47
  when 400
48
- raise BadRequest.new('Bad Request', res)
48
+ raise BadRequest.new('Bad Request', e.response_body)
49
49
  when 401
50
- raise Unauthorized.new('Unauthorized', res)
50
+ raise Unauthorized.new('Unauthorized', e.response_body)
51
51
  when 403
52
- raise Forbidden.new('Forbidden', res)
52
+ raise Forbidden.new('Forbidden', e.response_body)
53
53
  when 404
54
- raise NotFound.new('Not Found', res)
54
+ raise NotFound.new('Not Found', e.response_body)
55
55
  else
56
- raise HttpError.new(e.res.status, e.res.reason, res)
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
- def to_response_object(hash)
63
- Response.new hash
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 'httpclient'
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
- _http_client_ = HTTPClient.new(
55
- :agent_name => "SWD (#{VERSION})"
56
- )
57
-
58
- # NOTE: httpclient gem seems stopped maintaining root certtificate set, use OS default.
59
- _http_client_.ssl_config.clear_cert_store
60
- _http_client_.ssl_config.cert_store.set_default_paths
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]
@@ -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', HTTP::Message.new_response('')
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 be_a HTTP::Message }
10
+ its(:response) { should == 'Message' }
11
11
  end
12
12
 
13
13
  describe SWD::BadRequest do
@@ -97,30 +97,9 @@ describe SWD::Resource do
97
97
  end
98
98
  end
99
99
 
100
- context 'when invalid SSL cert' do
100
+ context 'when Faraday::Error without response' do
101
101
  it do
102
- expect(SWD.http_client).to receive(:get_content).and_raise(OpenSSL::SSL::SSLError)
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.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
111
+ config.ssl.verify = false
112
112
  end
113
113
  end
114
114
  it 'should configure http_client' do
115
- SWD.http_client.ssl_config.verify_mode.should == OpenSSL::SSL::VERIFY_NONE
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 'httpclient', '>= 2.4'
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: 1.3.0
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: 2021-10-01 00:00:00.000000000 Z
11
+ date: 2023-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: httpclient
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: '2.4'
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: '2.4'
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.1.4
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,3 +0,0 @@
1
- Dir[File.dirname(__FILE__) + '/debugger/*.rb'].each do |file|
2
- require file
3
- end
@@ -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