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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b3b1ef4355a0eb454bc541b4d39740444445316294bb9e23916ca9901437dc73
4
- data.tar.gz: 452ca7702a025a61919fe4982d701c810c4b79be4076cad8af1efff39b635aa4
3
+ metadata.gz: 9f60030386576c99f1d32d337056513f9a5e129eb12ffda22cb39e72e0497930
4
+ data.tar.gz: d5919e42679f55337ada7688fb667f7c98c05ca55af5dd4493ab952e1f377c2f
5
5
  SHA512:
6
- metadata.gz: 603f6c3000796cacaf8ecb852f08cfc29364443bde30073f50b23e40560eb81ee35b7e567df7479f20fefeb0581e9dff09a1ad88e0d47d9a684c5a11482f08cf
7
- data.tar.gz: 513dfadd5bb60c22d351f0ce930a42272bfa8f2d2e9d110c461d782874af0d3350a8db48784669f8ccfb750dbceeefe1c8d25b858b8fdfc2e83de50adaddd5d3
6
+ metadata.gz: b81930fdf6bb71c44c0eca8701cc1fa6c030b6434c43bfec6ea2786046f27f237c51894dcdc288ab0e9fdf2805f38e1c68cda8e8668a3ff769c943660e59c18b
7
+ data.tar.gz: 1c68def1a77cf6aaf488aceb75f02e58260285982363c7b323fefe888b62061dff5ad917d04704bacab2f59de1b929ea24e9187a2b3352c0d8155412acf3a8ce
@@ -0,0 +1,3 @@
1
+ # These are supported funding model platforms
2
+
3
+ github: nov
@@ -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
@@ -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/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0
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.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,27 @@ 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
+ Response.new 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 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
- 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 '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, 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]
@@ -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,31 +97,10 @@ 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(''))
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.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.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: 2021-10-01 00:00:00.000000000 Z
11
+ date: 2022-10-08 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,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.4
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,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