httpi 2.4.3 → 3.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/workflows/development.yml +48 -0
- data/CHANGELOG.md +23 -0
- data/Gemfile +8 -6
- data/README.md +20 -16
- data/UPDATING.md +7 -0
- data/httpi.gemspec +5 -8
- data/lib/httpi/adapter/curb.rb +7 -2
- data/lib/httpi/adapter/em_http.rb +5 -4
- data/lib/httpi/adapter/excon.rb +6 -1
- data/lib/httpi/adapter/http.rb +9 -0
- data/lib/httpi/adapter/httpclient.rb +5 -0
- data/lib/httpi/adapter/net_http.rb +10 -2
- data/lib/httpi/adapter/net_http_persistent.rb +6 -2
- data/lib/httpi/auth/ssl.rb +53 -2
- data/lib/httpi/request.rb +2 -2
- data/lib/httpi/version.rb +1 -1
- data/spec/fixtures/client_cert.pem +18 -14
- data/spec/fixtures/client_key.pem +25 -13
- data/spec/httpi/adapter/curb_spec.rb +31 -7
- data/spec/httpi/adapter/em_http_spec.rb +23 -21
- data/spec/httpi/adapter/excon_spec.rb +28 -118
- data/spec/httpi/adapter/http_spec.rb +23 -96
- data/spec/httpi/adapter/httpclient_spec.rb +32 -0
- data/spec/httpi/adapter/net_http_persistent_spec.rb +31 -81
- data/spec/httpi/adapter/net_http_spec.rb +37 -181
- data/spec/httpi/auth/ssl_spec.rb +48 -0
- data/spec/httpi/httpi_spec.rb +2 -4
- data/spec/integration/curb_spec.rb +20 -0
- data/spec/integration/em_http_spec.rb +19 -2
- data/spec/integration/excon_spec.rb +67 -1
- data/spec/integration/fixtures/ca_all.pem +17 -42
- data/spec/integration/fixtures/server.cert +17 -17
- data/spec/integration/fixtures/server.key +25 -13
- data/spec/integration/http_spec.rb +47 -0
- data/spec/integration/httpclient_spec.rb +20 -0
- data/spec/integration/net_http_persistent_spec.rb +33 -3
- data/spec/integration/net_http_spec.rb +144 -1
- data/spec/integration/support/application.rb +3 -2
- data/spec/integration/support/server.rb +1 -2
- data/spec/spec_helper.rb +0 -2
- metadata +15 -43
- data/.travis.yml +0 -15
@@ -30,6 +30,18 @@ describe HTTPI::Adapter::HTTP do
|
|
30
30
|
expect(response.headers["Set-Cookie"]).to eq(cookies)
|
31
31
|
end
|
32
32
|
|
33
|
+
it "it supports read timeout" do
|
34
|
+
require "http"
|
35
|
+
|
36
|
+
request = HTTPI::Request.new(@server.url + "timeout")
|
37
|
+
request.read_timeout = 0.5 # seconds
|
38
|
+
|
39
|
+
expect do
|
40
|
+
HTTPI.get(request, adapter)
|
41
|
+
end.to raise_exception(HTTP::TimeoutError)
|
42
|
+
end
|
43
|
+
|
44
|
+
|
33
45
|
it "executes GET requests" do
|
34
46
|
response = HTTPI.get(@server.url, adapter)
|
35
47
|
expect(response.body).to eq("get")
|
@@ -68,6 +80,22 @@ describe HTTPI::Adapter::HTTP do
|
|
68
80
|
expect(response.body).to eq("basic-auth")
|
69
81
|
end
|
70
82
|
|
83
|
+
it "does not support digest authentication" do
|
84
|
+
request = HTTPI::Request.new(@server.url + "digest-auth")
|
85
|
+
request.auth.digest("admin", "secret")
|
86
|
+
|
87
|
+
expect { HTTPI.get(request, adapter) }.
|
88
|
+
to raise_error(HTTPI::NotSupportedError, /does not support HTTP digest authentication/)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "does not support ntlm authentication" do
|
92
|
+
request = HTTPI::Request.new(@server.url + "ntlm-auth")
|
93
|
+
request.auth.ntlm("tester", "vReqSoafRe5O")
|
94
|
+
|
95
|
+
expect { HTTPI.get(request, adapter) }.
|
96
|
+
to raise_error(HTTPI::NotSupportedError, /does not support NTLM digest authentication/)
|
97
|
+
end
|
98
|
+
|
71
99
|
it "supports chunked response" do
|
72
100
|
skip("Needs investigation")
|
73
101
|
request = HTTPI::Request.new(@server.url)
|
@@ -103,6 +131,25 @@ describe HTTPI::Adapter::HTTP do
|
|
103
131
|
response = HTTPI.get(request, adapter)
|
104
132
|
expect(response.body).to eq("get")
|
105
133
|
end
|
134
|
+
|
135
|
+
it "works with min_version/max_version" do
|
136
|
+
request = HTTPI::Request.new(@server.url)
|
137
|
+
request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
|
138
|
+
request.auth.ssl.min_version = :TLS1_2
|
139
|
+
request.auth.ssl.max_version = :TLS1_2
|
140
|
+
|
141
|
+
response = HTTPI.get(request, adapter)
|
142
|
+
expect(response.body).to eq("get")
|
143
|
+
end
|
144
|
+
|
145
|
+
it "works with ciphers" do
|
146
|
+
request = HTTPI::Request.new(@server.url)
|
147
|
+
request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
|
148
|
+
request.auth.ssl.ciphers = OpenSSL::SSL::SSLContext.new.ciphers
|
149
|
+
|
150
|
+
response = HTTPI.get(request, adapter)
|
151
|
+
expect(response.body).to eq("get")
|
152
|
+
end
|
106
153
|
end
|
107
154
|
end
|
108
155
|
|
@@ -30,6 +30,17 @@ describe HTTPI::Adapter::HTTPClient do
|
|
30
30
|
expect(response.headers["Set-Cookie"]).to eq(cookies)
|
31
31
|
end
|
32
32
|
|
33
|
+
it "it supports read timeout" do
|
34
|
+
require "httpclient"
|
35
|
+
|
36
|
+
request = HTTPI::Request.new(@server.url + "timeout")
|
37
|
+
request.read_timeout = 0.5 # seconds
|
38
|
+
|
39
|
+
expect do
|
40
|
+
HTTPI.get(request, adapter)
|
41
|
+
end.to raise_exception(HTTPClient::ReceiveTimeoutError)
|
42
|
+
end
|
43
|
+
|
33
44
|
it "executes GET requests" do
|
34
45
|
response = HTTPI.get(@server.url, adapter)
|
35
46
|
expect(response.body).to eq("get")
|
@@ -110,6 +121,15 @@ describe HTTPI::Adapter::HTTPClient do
|
|
110
121
|
response = HTTPI.get(request, adapter)
|
111
122
|
expect(response.body).to eq("get")
|
112
123
|
end
|
124
|
+
|
125
|
+
it "works with ciphers" do
|
126
|
+
request = HTTPI::Request.new(@server.url)
|
127
|
+
request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
|
128
|
+
request.auth.ssl.ciphers = OpenSSL::SSL::SSLContext.new.ciphers
|
129
|
+
|
130
|
+
response = HTTPI.get(request, adapter)
|
131
|
+
expect(response.body).to eq("get")
|
132
|
+
end
|
113
133
|
end
|
114
134
|
end
|
115
135
|
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
require "integration/support/server"
|
3
|
+
require "net/http/persistent"
|
3
4
|
|
4
|
-
describe HTTPI::Adapter::
|
5
|
+
describe HTTPI::Adapter::NetHTTPPersistent do
|
5
6
|
|
6
7
|
subject(:adapter) { :net_http_persistent }
|
7
8
|
|
@@ -30,6 +31,17 @@ describe HTTPI::Adapter::NetHTTP do
|
|
30
31
|
expect(response.headers["Set-Cookie"]).to eq(cookies)
|
31
32
|
end
|
32
33
|
|
34
|
+
it "it supports read timeout" do
|
35
|
+
require "net/http/persistent"
|
36
|
+
|
37
|
+
request = HTTPI::Request.new(@server.url + "timeout")
|
38
|
+
request.read_timeout = 0.5 # seconds
|
39
|
+
|
40
|
+
expect do
|
41
|
+
HTTPI.get(request, adapter)
|
42
|
+
end.to raise_exception(Net::ReadTimeout)
|
43
|
+
end
|
44
|
+
|
33
45
|
it "executes GET requests" do
|
34
46
|
response = HTTPI.get(@server.url, adapter)
|
35
47
|
expect(response.body).to eq("get")
|
@@ -37,8 +49,8 @@ describe HTTPI::Adapter::NetHTTP do
|
|
37
49
|
end
|
38
50
|
|
39
51
|
it "executes POST requests" do
|
40
|
-
request = HTTPI::Request.new(url: @server.url,
|
41
|
-
|
52
|
+
request = HTTPI::Request.new(url: @server.url, body: "<some>xml</some>")
|
53
|
+
|
42
54
|
response = HTTPI.post(request, adapter)
|
43
55
|
expect(response.body).to eq("post")
|
44
56
|
expect(response.headers["Content-Type"]).to eq("text/plain")
|
@@ -70,6 +82,14 @@ describe HTTPI::Adapter::NetHTTP do
|
|
70
82
|
expect(response.body).to eq("basic-auth")
|
71
83
|
end
|
72
84
|
|
85
|
+
it "does not support ntlm authentication" do
|
86
|
+
request = HTTPI::Request.new(@server.url + "ntlm-auth")
|
87
|
+
request.auth.ntlm("tester", "vReqSoafRe5O")
|
88
|
+
|
89
|
+
expect { HTTPI.get(request, adapter) }.
|
90
|
+
to raise_error(HTTPI::NotSupportedError, /does not support NTLM authentication/)
|
91
|
+
end
|
92
|
+
|
73
93
|
# it does not support digest authentication
|
74
94
|
|
75
95
|
it "supports chunked response" do
|
@@ -91,6 +111,7 @@ describe HTTPI::Adapter::NetHTTP do
|
|
91
111
|
before :all do
|
92
112
|
@server = IntegrationServer.run(:ssl => true)
|
93
113
|
end
|
114
|
+
|
94
115
|
after :all do
|
95
116
|
@server.stop
|
96
117
|
end
|
@@ -103,6 +124,15 @@ describe HTTPI::Adapter::NetHTTP do
|
|
103
124
|
response = HTTPI.get(request, adapter)
|
104
125
|
expect(response.body).to eq("get")
|
105
126
|
end
|
127
|
+
|
128
|
+
it "works with ciphers" do
|
129
|
+
request = HTTPI::Request.new(@server.url)
|
130
|
+
request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
|
131
|
+
request.auth.ssl.ciphers = OpenSSL::SSL::SSLContext.new.ciphers
|
132
|
+
|
133
|
+
response = HTTPI.get(request, adapter)
|
134
|
+
expect(response.body).to eq("get")
|
135
|
+
end
|
106
136
|
end
|
107
137
|
end
|
108
138
|
|
@@ -14,6 +14,21 @@ describe HTTPI::Adapter::NetHTTP do
|
|
14
14
|
@server.stop
|
15
15
|
end
|
16
16
|
|
17
|
+
context "when socks is specified" do
|
18
|
+
let(:socks_client) { mock("socks_client") }
|
19
|
+
let(:request) { HTTPI::Request.new(@server.url) }
|
20
|
+
|
21
|
+
it "uses Net::HTTP.SOCKSProxy as client" do
|
22
|
+
socks_client.expects(:new).with(URI(@server.url).host, URI(@server.url).port).returns(:socks_client_instance)
|
23
|
+
Net::HTTP.expects(:SOCKSProxy).with("localhost", 8080).returns socks_client
|
24
|
+
|
25
|
+
request.proxy = "socks://localhost:8080"
|
26
|
+
adapter = HTTPI::Adapter::NetHTTP.new(request)
|
27
|
+
|
28
|
+
expect(adapter.client).to eq(:socks_client_instance)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
17
32
|
it "sends and receives HTTP headers" do
|
18
33
|
request = HTTPI::Request.new(@server.url + "x-header")
|
19
34
|
request.headers["X-Header"] = "HTTPI"
|
@@ -30,6 +45,17 @@ describe HTTPI::Adapter::NetHTTP do
|
|
30
45
|
expect(response.headers["Set-Cookie"]).to eq(cookies)
|
31
46
|
end
|
32
47
|
|
48
|
+
it "it supports read timeout" do
|
49
|
+
require "net/http"
|
50
|
+
|
51
|
+
request = HTTPI::Request.new(@server.url + "timeout")
|
52
|
+
request.read_timeout = 0.5 # seconds
|
53
|
+
|
54
|
+
expect do
|
55
|
+
HTTPI.get(request, adapter)
|
56
|
+
end.to raise_exception(Net::ReadTimeout)
|
57
|
+
end
|
58
|
+
|
33
59
|
it "executes GET requests" do
|
34
60
|
response = HTTPI.get(@server.url, adapter)
|
35
61
|
expect(response.body).to eq("get")
|
@@ -60,6 +86,42 @@ describe HTTPI::Adapter::NetHTTP do
|
|
60
86
|
expect(response.headers["Content-Type"]).to eq("text/plain")
|
61
87
|
end
|
62
88
|
|
89
|
+
context "custom methods" do
|
90
|
+
let(:request) {
|
91
|
+
HTTPI::Request.new(@server.url).tap do |r|
|
92
|
+
r.body = request_body if request_body
|
93
|
+
end
|
94
|
+
}
|
95
|
+
let(:request_body) { nil }
|
96
|
+
|
97
|
+
subject(:response) { HTTPI.request(http_method, request, adapter) }
|
98
|
+
|
99
|
+
shared_examples_for "any supported custom method" do
|
100
|
+
describe '#body' do
|
101
|
+
subject(:body) {response.body}
|
102
|
+
it { is_expected.to be == http_method.to_s }
|
103
|
+
end
|
104
|
+
|
105
|
+
describe '#headers' do
|
106
|
+
subject(:headers) {response.headers}
|
107
|
+
it { is_expected.to include('content-type' => "text/plain")}
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "PATCH method" do
|
112
|
+
let(:http_method) { :patch }
|
113
|
+
let(:request_body) { "<some>xml</some>" }
|
114
|
+
|
115
|
+
it_behaves_like "any supported custom method"
|
116
|
+
end
|
117
|
+
|
118
|
+
context "UNSUPPORTED method" do
|
119
|
+
let(:http_method) { :unsupported }
|
120
|
+
|
121
|
+
specify { expect { response }.to raise_error HTTPI::NotSupportedError }
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
63
125
|
it "supports basic authentication" do
|
64
126
|
request = HTTPI::Request.new(@server.url + "basic-auth")
|
65
127
|
request.auth.basic("admin", "secret")
|
@@ -68,7 +130,69 @@ describe HTTPI::Adapter::NetHTTP do
|
|
68
130
|
expect(response.body).to eq("basic-auth")
|
69
131
|
end
|
70
132
|
|
71
|
-
|
133
|
+
it "does not support digest authentication" do
|
134
|
+
request = HTTPI::Request.new(@server.url + "digest-auth")
|
135
|
+
request.auth.digest("admin", "secret")
|
136
|
+
|
137
|
+
expect { HTTPI.get(request, adapter) }.
|
138
|
+
to raise_error(HTTPI::NotSupportedError, /does not support HTTP digest authentication/)
|
139
|
+
end
|
140
|
+
|
141
|
+
it "supports ntlm authentication" do
|
142
|
+
request = HTTPI::Request.new(@server.url + "ntlm-auth")
|
143
|
+
request.auth.ntlm("tester", "vReqSoafRe5O")
|
144
|
+
|
145
|
+
response = HTTPI.get(request, adapter)
|
146
|
+
expect(response.body).to eq("ntlm-auth")
|
147
|
+
end
|
148
|
+
|
149
|
+
it "does not support ntlm authentication when Net::NTLM is not available" do
|
150
|
+
Net.expects(:const_defined?).with(:NTLM).returns false
|
151
|
+
|
152
|
+
request = HTTPI::Request.new(@server.url + "ntlm-auth")
|
153
|
+
request.auth.ntlm("testing", "failures")
|
154
|
+
|
155
|
+
expect { HTTPI.get(request, adapter) }.
|
156
|
+
to raise_error(HTTPI::NotSupportedError, /Net::NTLM is not available/)
|
157
|
+
end
|
158
|
+
|
159
|
+
it "does not require ntlm when ntlm authenication is not requested" do
|
160
|
+
HTTPI::Adapter::NetHTTP.any_instance.stubs(:check_net_ntlm_version!).raises(RuntimeError)
|
161
|
+
request = HTTPI::Request.new(@server.url)
|
162
|
+
expect(request.auth.ntlm?).to be false
|
163
|
+
|
164
|
+
# make sure a request doesn't call ntlm check if we don't ask for it.
|
165
|
+
expect { HTTPI.get(request, adapter) }.not_to raise_error
|
166
|
+
HTTPI::Adapter::NetHTTP.any_instance.unstub(:check_net_ntlm_version!)
|
167
|
+
end
|
168
|
+
|
169
|
+
it "does check ntlm when ntlm authentication is requested" do
|
170
|
+
request = HTTPI::Request.new(@server.url + "ntlm-auth")
|
171
|
+
request.auth.ntlm("tester", "vReqSoafRe5O")
|
172
|
+
|
173
|
+
expect { HTTPI.get(request, adapter) }.not_to raise_error
|
174
|
+
|
175
|
+
# the check should also verify that the version of ntlm is supported and still fail if it isn't
|
176
|
+
HTTPI::Adapter::NetHTTP.any_instance.stubs(:ntlm_version).returns("0.1.1")
|
177
|
+
|
178
|
+
request = HTTPI::Request.new(@server.url + "ntlm-auth")
|
179
|
+
request.auth.ntlm("tester", "vReqSoafRe5O")
|
180
|
+
|
181
|
+
expect { HTTPI.get(request, adapter) }.to raise_error(ArgumentError, /Invalid version/)
|
182
|
+
|
183
|
+
HTTPI::Adapter::NetHTTP.any_instance.unstub(:ntlm_version)
|
184
|
+
end
|
185
|
+
|
186
|
+
it "does not crash when authenticate header is missing (on second request)" do
|
187
|
+
request = HTTPI::Request.new(@server.url + "ntlm-auth")
|
188
|
+
request.auth.ntlm("tester", "vReqSoafRe5O")
|
189
|
+
|
190
|
+
expect { HTTPI.get(request, adapter) }.
|
191
|
+
to_not raise_error
|
192
|
+
|
193
|
+
expect { HTTPI.get(request, adapter) }.
|
194
|
+
to_not raise_error
|
195
|
+
end
|
72
196
|
|
73
197
|
it "supports chunked response" do
|
74
198
|
request = HTTPI::Request.new(@server.url)
|
@@ -101,6 +225,25 @@ describe HTTPI::Adapter::NetHTTP do
|
|
101
225
|
response = HTTPI.get(request, adapter)
|
102
226
|
expect(response.body).to eq("get")
|
103
227
|
end
|
228
|
+
|
229
|
+
it "works with min_version/max_version" do
|
230
|
+
request = HTTPI::Request.new(@server.url)
|
231
|
+
request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
|
232
|
+
request.auth.ssl.min_version = :TLS1_2
|
233
|
+
request.auth.ssl.max_version = :TLS1_2
|
234
|
+
|
235
|
+
response = HTTPI.get(request, adapter)
|
236
|
+
expect(response.body).to eq("get")
|
237
|
+
end
|
238
|
+
|
239
|
+
it "works with ciphers" do
|
240
|
+
request = HTTPI::Request.new(@server.url)
|
241
|
+
request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file
|
242
|
+
request.auth.ssl.ciphers = OpenSSL::SSL::SSLContext.new.ciphers
|
243
|
+
|
244
|
+
response = HTTPI.get(request, adapter)
|
245
|
+
expect(response.body).to eq("get")
|
246
|
+
end
|
104
247
|
end
|
105
248
|
end
|
106
249
|
|
@@ -4,7 +4,6 @@ require "puma/minissl"
|
|
4
4
|
require "integration/support/application"
|
5
5
|
|
6
6
|
class IntegrationServer
|
7
|
-
|
8
7
|
def self.run(options = {})
|
9
8
|
server = new(options)
|
10
9
|
server.run
|
@@ -76,7 +75,7 @@ class IntegrationServer
|
|
76
75
|
|
77
76
|
context.key = IntegrationServer.ssl_key_file
|
78
77
|
context.cert = IntegrationServer.ssl_cert_file
|
79
|
-
context.verify_mode = Puma::MiniSSL::
|
78
|
+
context.verify_mode = Puma::MiniSSL::VERIFY_NONE
|
80
79
|
|
81
80
|
context
|
82
81
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,44 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: httpi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Harrington
|
8
8
|
- Martin Tepper
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-10-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: rack
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - ">="
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '0'
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '0'
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: socksify
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - ">="
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '0'
|
35
|
-
type: :runtime
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '0'
|
42
14
|
- !ruby/object:Gem::Dependency
|
43
15
|
name: rubyntlm
|
44
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,28 +31,28 @@ dependencies:
|
|
59
31
|
requirements:
|
60
32
|
- - "~>"
|
61
33
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
34
|
+
version: '13.0'
|
63
35
|
type: :development
|
64
36
|
prerelease: false
|
65
37
|
version_requirements: !ruby/object:Gem::Requirement
|
66
38
|
requirements:
|
67
39
|
- - "~>"
|
68
40
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
41
|
+
version: '13.0'
|
70
42
|
- !ruby/object:Gem::Dependency
|
71
43
|
name: rspec
|
72
44
|
requirement: !ruby/object:Gem::Requirement
|
73
45
|
requirements:
|
74
46
|
- - "~>"
|
75
47
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
48
|
+
version: '3.5'
|
77
49
|
type: :development
|
78
50
|
prerelease: false
|
79
51
|
version_requirements: !ruby/object:Gem::Requirement
|
80
52
|
requirements:
|
81
53
|
- - "~>"
|
82
54
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
55
|
+
version: '3.5'
|
84
56
|
- !ruby/object:Gem::Dependency
|
85
57
|
name: mocha
|
86
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,14 +73,14 @@ dependencies:
|
|
101
73
|
requirements:
|
102
74
|
- - "~>"
|
103
75
|
- !ruby/object:Gem::Version
|
104
|
-
version:
|
76
|
+
version: '5.0'
|
105
77
|
type: :development
|
106
78
|
prerelease: false
|
107
79
|
version_requirements: !ruby/object:Gem::Requirement
|
108
80
|
requirements:
|
109
81
|
- - "~>"
|
110
82
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
83
|
+
version: '5.0'
|
112
84
|
- !ruby/object:Gem::Dependency
|
113
85
|
name: webmock
|
114
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,14 +101,15 @@ executables: []
|
|
129
101
|
extensions: []
|
130
102
|
extra_rdoc_files: []
|
131
103
|
files:
|
104
|
+
- ".github/workflows/development.yml"
|
132
105
|
- ".gitignore"
|
133
106
|
- ".rspec"
|
134
|
-
- ".travis.yml"
|
135
107
|
- CHANGELOG.md
|
136
108
|
- Gemfile
|
137
109
|
- LICENSE
|
138
110
|
- README.md
|
139
111
|
- Rakefile
|
112
|
+
- UPDATING.md
|
140
113
|
- httpi.gemspec
|
141
114
|
- lib/httpi.rb
|
142
115
|
- lib/httpi/adapter.rb
|
@@ -204,7 +177,7 @@ homepage: http://github.com/savonrb/httpi
|
|
204
177
|
licenses:
|
205
178
|
- MIT
|
206
179
|
metadata: {}
|
207
|
-
post_install_message:
|
180
|
+
post_install_message:
|
208
181
|
rdoc_options: []
|
209
182
|
require_paths:
|
210
183
|
- lib
|
@@ -212,16 +185,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
212
185
|
requirements:
|
213
186
|
- - ">="
|
214
187
|
- !ruby/object:Gem::Version
|
215
|
-
version:
|
188
|
+
version: '2.3'
|
216
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
217
190
|
requirements:
|
218
191
|
- - ">="
|
219
192
|
- !ruby/object:Gem::Version
|
220
193
|
version: '0'
|
221
194
|
requirements: []
|
222
|
-
|
223
|
-
|
224
|
-
signing_key:
|
195
|
+
rubygems_version: 3.2.7
|
196
|
+
signing_key:
|
225
197
|
specification_version: 4
|
226
198
|
summary: Common interface for Ruby's HTTP libraries
|
227
199
|
test_files: []
|
data/.travis.yml
DELETED