typhoeus 1.4.1 → 1.5.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +43 -1
  3. data/lib/typhoeus/expectation.rb +4 -2
  4. data/lib/typhoeus/request/responseable.rb +1 -1
  5. data/lib/typhoeus/version.rb +1 -1
  6. data/typhoeus.gemspec +14 -4
  7. metadata +18 -97
  8. data/.github/workflows/ci.yml +0 -30
  9. data/.github/workflows/experimental.yml +0 -33
  10. data/.gitignore +0 -8
  11. data/.rspec +0 -4
  12. data/Gemfile +0 -36
  13. data/Guardfile +0 -9
  14. data/Rakefile +0 -38
  15. data/perf/profile.rb +0 -14
  16. data/perf/vs_nethttp.rb +0 -64
  17. data/spec/rack/typhoeus/middleware/params_decoder/helper_spec.rb +0 -156
  18. data/spec/rack/typhoeus/middleware/params_decoder_spec.rb +0 -31
  19. data/spec/spec_helper.rb +0 -29
  20. data/spec/support/localhost_server.rb +0 -94
  21. data/spec/support/memory_cache.rb +0 -15
  22. data/spec/support/server.rb +0 -116
  23. data/spec/typhoeus/adapters/faraday_spec.rb +0 -339
  24. data/spec/typhoeus/cache/dalli_spec.rb +0 -41
  25. data/spec/typhoeus/cache/redis_spec.rb +0 -41
  26. data/spec/typhoeus/config_spec.rb +0 -15
  27. data/spec/typhoeus/easy_factory_spec.rb +0 -143
  28. data/spec/typhoeus/errors/no_stub_spec.rb +0 -13
  29. data/spec/typhoeus/expectation_spec.rb +0 -280
  30. data/spec/typhoeus/hydra/addable_spec.rb +0 -22
  31. data/spec/typhoeus/hydra/before_spec.rb +0 -98
  32. data/spec/typhoeus/hydra/block_connection_spec.rb +0 -18
  33. data/spec/typhoeus/hydra/cacheable_spec.rb +0 -88
  34. data/spec/typhoeus/hydra/memoizable_spec.rb +0 -53
  35. data/spec/typhoeus/hydra/queueable_spec.rb +0 -98
  36. data/spec/typhoeus/hydra/runnable_spec.rb +0 -137
  37. data/spec/typhoeus/hydra/stubbable_spec.rb +0 -48
  38. data/spec/typhoeus/hydra_spec.rb +0 -22
  39. data/spec/typhoeus/pool_spec.rb +0 -137
  40. data/spec/typhoeus/request/actions_spec.rb +0 -19
  41. data/spec/typhoeus/request/before_spec.rb +0 -93
  42. data/spec/typhoeus/request/block_connection_spec.rb +0 -75
  43. data/spec/typhoeus/request/cacheable_spec.rb +0 -94
  44. data/spec/typhoeus/request/callbacks_spec.rb +0 -91
  45. data/spec/typhoeus/request/marshal_spec.rb +0 -60
  46. data/spec/typhoeus/request/memoizable_spec.rb +0 -34
  47. data/spec/typhoeus/request/operations_spec.rb +0 -101
  48. data/spec/typhoeus/request/responseable_spec.rb +0 -13
  49. data/spec/typhoeus/request/stubbable_spec.rb +0 -45
  50. data/spec/typhoeus/request_spec.rb +0 -256
  51. data/spec/typhoeus/response/header_spec.rb +0 -147
  52. data/spec/typhoeus/response/informations_spec.rb +0 -323
  53. data/spec/typhoeus/response/status_spec.rb +0 -256
  54. data/spec/typhoeus/response_spec.rb +0 -100
  55. data/spec/typhoeus_spec.rb +0 -105
@@ -1,147 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Typhoeus::Response::Header do
4
- let(:raw) { nil }
5
- let(:header) { Typhoeus::Response::Header.new(raw) }
6
-
7
- describe ".new" do
8
- context "when string" do
9
- let(:raw) { 'Date: Fri, 29 Jun 2012 10:09:23 GMT' }
10
-
11
- it "sets Date" do
12
- expect(header['Date']).to eq('Fri, 29 Jun 2012 10:09:23 GMT')
13
- end
14
-
15
- it "provides case insensitive access" do
16
- expect(header['DaTe']).to eq('Fri, 29 Jun 2012 10:09:23 GMT')
17
- end
18
-
19
- it "provides symbol access" do
20
- expect(header[:date]).to eq('Fri, 29 Jun 2012 10:09:23 GMT')
21
- end
22
- end
23
-
24
- context "when hash" do
25
- let(:raw) { { 'Date' => 'Fri, 29 Jun 2012 10:09:23 GMT' } }
26
-
27
- it "sets Date" do
28
- expect(header['Date']).to eq(raw['Date'])
29
- end
30
-
31
- it "provides case insensitive access" do
32
- expect(header['DaTe']).to eq(raw['Date'])
33
- end
34
- end
35
- end
36
-
37
- describe "#parse" do
38
- context "when no header" do
39
- it "returns nil" do
40
- expect(header).to be_empty
41
- end
42
- end
43
-
44
- context "when header" do
45
- let(:raw) do
46
- 'HTTP/1.1 200 OK
47
- Set-Cookie: NID=61=LblqYgUOu; expires=Sat, 29-Dec-2012 10:09:23 GMT; path=/; domain=.google.de; HttpOnly
48
- Date: Fri, 29 Jun 2012 10:09:23 GMT
49
- Expires: -1
50
- Cache-Control: private, max-age=0
51
- Content-Type: text/html; charset=ISO-8859-1
52
- Set-Cookie: PREF=ID=77e93yv0hPtejLou; expires=Sun, 29-Jun-2014 10:09:23 GMT; path=/; domain=.google.de
53
- Set-Cookie: NID=61=LblqYgh5Ou; expires=Sat, 29-Dec-2012 10:09:23 GMT; path=/; domain=.google.de; HttpOnly
54
- P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
55
- Server: gws
56
- X-XSS-Protection: 1; mode=block
57
- X-Frame-Options: SAMEORIGIN
58
- Transfer-Encoding: chunked'.gsub(/^\s{8}/, '')
59
- end
60
-
61
- it "sets raw" do
62
- expect(header.send(:raw)).to eq(raw)
63
- end
64
-
65
- it "sets Set-Cookie" do
66
- expect(header['set-cookie'].size).to eq(3)
67
- end
68
-
69
- it "provides case insensitive access" do
70
- expect(header['Set-CooKie'].size).to eq(3)
71
- end
72
-
73
- [
74
- 'NID=61=LblqYgUOu; expires=Sat, 29-Dec-2012 10:09:23 GMT; path=/; domain=.google.de; HttpOnly',
75
- 'PREF=ID=77e93yv0hPtejLou; expires=Sun, 29-Jun-2014 10:09:23 GMT; path=/; domain=.google.de',
76
- 'NID=61=LblqYgh5Ou; expires=Sat, 29-Dec-2012 10:09:23 GMT; path=/; domain=.google.de; HttpOnly'
77
- ].each_with_index do |cookie, i|
78
- it "sets Cookie##{i}" do
79
- expect(header['set-cookie']).to include(cookie)
80
- end
81
- end
82
-
83
- {
84
- 'Date' => 'Fri, 29 Jun 2012 10:09:23 GMT', 'Expires' => '-1',
85
- 'Cache-Control' => 'private, max-age=0',
86
- 'Content-Type' => 'text/html; charset=ISO-8859-1',
87
- 'P3P' => 'CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."',
88
- 'Server' => 'gws', 'X-XSS-Protection' => '1; mode=block',
89
- 'X-Frame-Options' => 'SAMEORIGIN', 'Transfer-Encoding' => 'chunked'
90
- }.each do |name, value|
91
- it "sets #{name}" do
92
- expect(header[name.downcase]).to eq(value)
93
- end
94
- end
95
-
96
- context 'includes a multi-line header' do
97
- let(:raw) do
98
- 'HTTP/1.1 200 OK
99
- Date: Fri, 29 Jun 2012 10:09:23 GMT
100
- Content-Security-Policy: default-src "self";
101
- img-src * data: "self";
102
- upgrade-insecure-requests;'.gsub(/^\s{10}/, '')
103
- end
104
-
105
- it "joins header parts" do
106
- expect(header).to eq({
107
- 'Date' => 'Fri, 29 Jun 2012 10:09:23 GMT',
108
- 'Content-Security-Policy' => 'default-src "self"; img-src * data: "self"; upgrade-insecure-requests;'
109
- })
110
- end
111
- end
112
-
113
- context 'includes line with only whitespace' do
114
- let(:raw) do
115
- 'HTTP/1.1 200 OK
116
- Date: Fri, 29 Jun 2012 10:09:23 GMT
117
-
118
- '.gsub(/^\s{10}/, '')
119
- end
120
-
121
- it 'ignores it' do
122
- expect(header).to eq({ 'Date' => 'Fri, 29 Jun 2012 10:09:23 GMT' })
123
- end
124
- end
125
-
126
- context 'with broken headers' do
127
- let(:raw) do
128
- 'HTTP/1.1 200 OK
129
- Date:
130
- Content-Type
131
- '.gsub(/^\s{10}/, '')
132
- end
133
-
134
- it 'returns empty string for invalid headers' do
135
- expect(header.to_hash).to include({ 'Date' => '', 'Content-Type' => '' })
136
- end
137
- end
138
- end
139
- end
140
-
141
- it "can be Marshal'd" do
142
- header = Typhoeus::Response::Header.new("Foo: Bar")
143
- expect {
144
- Marshal.dump(header)
145
- }.not_to raise_error
146
- end
147
- end
@@ -1,323 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Typhoeus::Response::Informations do
4
- let(:options) { {} }
5
- let(:response) { Typhoeus::Response.new(options) }
6
-
7
- describe "#return_code" do
8
- let(:options) { { :return_code => :ok } }
9
-
10
- it "returns return_code from options" do
11
- expect(response.return_code).to be(:ok)
12
- end
13
- end
14
-
15
- describe "#debug_info" do
16
- let(:options) { { :debug_info => Ethon::Easy::DebugInfo.new } }
17
-
18
- it "returns debug_info from options" do
19
- expect(response.debug_info).to be_a(Ethon::Easy::DebugInfo)
20
- end
21
- end
22
-
23
- describe "#return_message" do
24
- let(:options) { { :return_code => :couldnt_connect } }
25
-
26
- it "returns a message" do
27
- expect(response.return_message).to eq("Couldn't connect to server")
28
- end
29
-
30
- describe "with nil return_code" do
31
- let(:options) { { :return_code => nil } }
32
-
33
- it "returns nil" do
34
- expect(response.return_message).to be_nil
35
- end
36
- end
37
- end
38
-
39
- describe "#response_body" do
40
- context "when response_body" do
41
- let(:options) { { :response_body => "body" } }
42
-
43
- it "returns response_body from options" do
44
- expect(response.response_body).to eq("body")
45
- end
46
- end
47
-
48
- context "when body" do
49
- let(:options) { { :body => "body" } }
50
-
51
- it "returns body from options" do
52
- expect(response.body).to eq("body")
53
- end
54
- end
55
- end
56
-
57
- describe "#response_headers" do
58
- let(:options) { { :response_headers => "Length: 1" } }
59
-
60
- context "when no mock" do
61
- it "returns response_headers from options" do
62
- expect(response.response_headers).to eq("Length: 1")
63
- end
64
- end
65
-
66
- context "when mock" do
67
- context "when no response_headers" do
68
- context "when headers" do
69
- let(:options) { { :mock => true, :headers => {"Length" => 1, "Content-Type" => "text/plain" } } }
70
-
71
- it "constructs response_headers" do
72
- expect(response.response_headers).to include("Length: 1")
73
- expect(response.response_headers).to include("Content-Type: text/plain")
74
- expect(response.response_headers).to include("\r\n")
75
- end
76
- end
77
-
78
- context "when multiple values for a header" do
79
- let(:options) { { :mock => true, :headers => {"Length" => 1, "Content-Type" => "text/plain", "set-cookie" => ["cookieone=one","cookietwo=two"] } } }
80
-
81
- it "constructs response_headers" do
82
- expect(response.response_headers).to include("Length: 1")
83
- expect(response.response_headers).to include("Content-Type: text/plain")
84
- expect(response.response_headers).to include("set-cookie: cookieone=one,cookietwo=two")
85
- expect(response.response_headers).to include("\r\n")
86
- end
87
- end
88
- end
89
- end
90
- end
91
-
92
- describe "#response_code" do
93
- context "when response_code" do
94
- let(:options) { { :response_code => "200" } }
95
-
96
- it "returns response_code from options" do
97
- expect(response.response_code).to eq(200)
98
- end
99
- end
100
-
101
- context "when code" do
102
- let(:options) { { :code => "200" } }
103
-
104
- it "returns code from options" do
105
- expect(response.code).to eq(200)
106
- end
107
- end
108
- end
109
-
110
- describe "#httpauth_avail" do
111
- let(:options) { { :httpauth_avail => "code" } }
112
-
113
- it "returns httpauth_avail from options" do
114
- expect(response.httpauth_avail).to eq("code")
115
- end
116
- end
117
-
118
- describe "#total_time" do
119
- let(:options) { { :total_time => 1 } }
120
-
121
- it "returns total_time from options" do
122
- expect(response.total_time).to eq(1)
123
- end
124
- end
125
-
126
- describe "#starttransfer_time" do
127
- let(:options) { { :starttransfer_time => 1 } }
128
-
129
- it "returns starttransfer_time from options" do
130
- expect(response.starttransfer_time).to eq(1)
131
- end
132
- end
133
-
134
- describe "#appconnect_time" do
135
- let(:options) { { :appconnect_time => 1 } }
136
-
137
- it "returns appconnect_time from options" do
138
- expect(response.appconnect_time).to eq(1)
139
- end
140
- end
141
-
142
- describe "#pretransfer_time" do
143
- let(:options) { { :pretransfer_time => 1 } }
144
-
145
- it "returns pretransfer_time from options" do
146
- expect(response.pretransfer_time).to eq(1)
147
- end
148
- end
149
-
150
- describe "#connect_time" do
151
- let(:options) { { :connect_time => 1 } }
152
-
153
- it "returns connect_time from options" do
154
- expect(response.connect_time).to eq(1)
155
- end
156
- end
157
-
158
- describe "#namelookup_time" do
159
- let(:options) { { :namelookup_time => 1 } }
160
-
161
- it "returns namelookup_time from options" do
162
- expect(response.namelookup_time).to eq(1)
163
- end
164
- end
165
-
166
- describe "#redirect_time" do
167
- let(:options) { { :redirect_time => 1 } }
168
-
169
- it "returns redirect_time from options" do
170
- expect(response.redirect_time).to eq(1)
171
- end
172
- end
173
-
174
- describe "#effective_url" do
175
- let(:options) { { :effective_url => "http://www.example.com" } }
176
-
177
- it "returns effective_url from options" do
178
- expect(response.effective_url).to eq("http://www.example.com")
179
- end
180
- end
181
-
182
- describe "#primary_ip" do
183
- let(:options) { { :primary_ip => "127.0.0.1" } }
184
-
185
- it "returns primary_ip from options" do
186
- expect(response.primary_ip).to eq("127.0.0.1")
187
- end
188
- end
189
-
190
- describe "#redirect_count" do
191
- let(:options) { { :redirect_count => 2 } }
192
-
193
- it "returns redirect_count from options" do
194
- expect(response.redirect_count).to eq(2)
195
- end
196
- end
197
-
198
- describe "#redirect_url" do
199
- let(:options) { { :redirect_url => "http://www.example.com" } }
200
-
201
- it "returns redirect_url from options" do
202
- expect(response.redirect_url).to eq("http://www.example.com")
203
- end
204
- end
205
-
206
- describe "#request_size" do
207
- let(:options) { { :request_size => 2 } }
208
-
209
- it "returns request_size from options" do
210
- expect(response.request_size).to eq(2)
211
- end
212
- end
213
-
214
- describe "#size_upload" do
215
- let(:options) { { :size_upload => 2.0 } }
216
-
217
- it "returns size_upload from options" do
218
- expect(response.size_upload).to eq(2.0)
219
- end
220
- end
221
-
222
- describe "#size_download" do
223
- let(:options) { { :size_download => 2.0 } }
224
-
225
- it "returns size_download from options" do
226
- expect(response.size_download).to eq(2.0)
227
- end
228
- end
229
-
230
- describe "#speed_upload" do
231
- let(:options) { { :speed_upload => 2.0 } }
232
-
233
- it "returns speed_upload from options" do
234
- expect(response.speed_upload).to eq(2.0)
235
- end
236
- end
237
-
238
- describe "#speed_download" do
239
- let(:options) { { :speed_download => 2.0 } }
240
-
241
- it "returns speed_download from options" do
242
- expect(response.speed_download).to eq(2.0)
243
- end
244
- end
245
-
246
- describe "#headers" do
247
- context "when no response_headers" do
248
- it "returns nil" do
249
- expect(response.headers).to be_nil
250
- end
251
- end
252
-
253
- context "when response_headers" do
254
- let(:options) { {:response_headers => "Expire: -1\nServer: gws"} }
255
-
256
- it "returns nonempty headers" do
257
- expect(response.headers).to_not be_empty
258
- end
259
-
260
- it "has Expire" do
261
- expect(response.headers['expire']).to eq('-1')
262
- end
263
-
264
- it "has Server" do
265
- expect(response.headers['server']).to eq('gws')
266
- end
267
- end
268
-
269
- context "when multiple headers" do
270
- let(:options) { {:response_headers => "Server: A\r\n\r\nServer: B"} }
271
-
272
- it "returns the last" do
273
- expect(response.headers['server']).to eq("B")
274
- end
275
- end
276
-
277
- context "when mock" do
278
- context "when headers" do
279
- let(:options) { {:mock => true, :headers => {"Length" => "1"}} }
280
-
281
- it "returns Typhoeus::Response::Header" do
282
- expect(response.headers).to be_a(Typhoeus::Response::Header)
283
- end
284
-
285
- it "returns headers" do
286
- expect(response.headers.to_hash).to include("Length" => "1")
287
- end
288
- end
289
- end
290
-
291
- context "when requesting" do
292
- let(:response) { Typhoeus.get("localhost:3001") }
293
-
294
- it "returns headers" do
295
- expect(response.headers).to_not be_empty
296
- end
297
- end
298
- end
299
-
300
- describe "#redirections" do
301
- context "when no response_headers" do
302
- it "returns empty array" do
303
- expect(response.redirections).to be_empty
304
- end
305
- end
306
-
307
- context "when headers" do
308
- let(:options) { {:response_headers => "Expire: -1\nServer: gws"} }
309
-
310
- it "returns empty array" do
311
- expect(response.redirections).to be_empty
312
- end
313
- end
314
-
315
- context "when multiple headers" do
316
- let(:options) { {:response_headers => "Server: A\r\n\r\nServer: B"} }
317
-
318
- it "returns response from all but last headers" do
319
- expect(response.redirections.size).to eq(1)
320
- end
321
- end
322
- end
323
- end