swd 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f1fe7bd9acc3436c6713b86b82729ff5756901314f1d0beaa5420b2533466346
4
- data.tar.gz: d8084ae2483c7ebe1cf3d06976a7c55422de9cebbf1c9b728729e2db195a9477
3
+ metadata.gz: 9f60030386576c99f1d32d337056513f9a5e129eb12ffda22cb39e72e0497930
4
+ data.tar.gz: d5919e42679f55337ada7688fb667f7c98c05ca55af5dd4493ab952e1f377c2f
5
5
  SHA512:
6
- metadata.gz: dc7e4921102bded0e0e42d8d184e6665d32c17ca820d85726889a02361a05714b3afabd2fe2e44844d83ea64c9a0fc0285e7e24f78c089313bc87cbf5de2aa85
7
- data.tar.gz: e85e9cf61489a5bd0a74be656705665df382d113447fb11e099cab14423b8c606a565d46578827001d2aa1e166a61369a99767f50ed77f591672a98bce1275e5
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.3.6
6
- - 2.4.3
7
- - 2.5.0
5
+ - 2.6.10
6
+ - 2.7.6
7
+ - 3.0.4
8
+ - 3.1.2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.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,12 +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
- _http_client_.request_filter << Debugger::RequestFilter.new if debugging?
58
- http_config.try(:call, _http_client_)
59
- _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
60
63
  end
61
64
  def self.http_config(&block)
62
65
  @@http_config ||= block
@@ -74,6 +77,5 @@ require 'swd/cache'
74
77
  require 'swd/exception'
75
78
  require 'swd/resource'
76
79
  require 'swd/response'
77
- require 'swd/debugger'
78
80
 
79
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.2.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: 2020-05-14 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.0.3
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