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,280 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Typhoeus::Expectation do
4
- let(:options) { {} }
5
- let(:base_url) { "www.example.com" }
6
- let(:expectation) { described_class.new(base_url, options) }
7
-
8
- describe ".new" do
9
- it "sets base_url" do
10
- expect(expectation.instance_variable_get(:@base_url)).to eq(base_url)
11
- end
12
-
13
- it "sets options" do
14
- expect(expectation.instance_variable_get(:@options)).to eq(options)
15
- end
16
-
17
- it "initializes response_counter" do
18
- expect(expectation.instance_variable_get(:@response_counter)).to eq(0)
19
- end
20
- end
21
-
22
- describe ".all" do
23
- context "when @expectations nil" do
24
- it "returns empty array" do
25
- expect(Typhoeus::Expectation.all).to eq([])
26
- end
27
- end
28
-
29
- context "when @expectations not nil" do
30
- let(:expectations) { [1] }
31
-
32
- it "returns @expectations" do
33
- Typhoeus::Expectation.instance_variable_set(:@expectations, expectations)
34
- expect(Typhoeus::Expectation.all).to be(expectations)
35
- end
36
- end
37
- end
38
-
39
- describe ".clear" do
40
- let(:expectations) { double(:clear) }
41
-
42
- it "clears all" do
43
- expect(expectations).to receive(:clear)
44
- Typhoeus::Expectation.instance_variable_set(:@expectations, expectations)
45
- Typhoeus::Expectation.clear
46
- Typhoeus::Expectation.instance_variable_set(:@expectations, nil)
47
- end
48
- end
49
-
50
- describe ".response_for" do
51
- let(:request) { Typhoeus::Request.new("") }
52
- let(:stubbed_response) { Typhoeus::Response.new }
53
-
54
- it "finds a matching expectation and returns its next response" do
55
- Typhoeus::Expectation.all << expectation
56
- expect(expectation).to receive(:matches?).with(request).and_return(true)
57
- expect(expectation).to receive(:response).with(request).and_return(stubbed_response)
58
-
59
- response = Typhoeus::Expectation.response_for(request)
60
-
61
- expect(response).to be(stubbed_response)
62
- end
63
-
64
- it "returns nil if no matching expectation is found" do
65
- response = Typhoeus::Expectation.response_for(request)
66
- expect(response).to be(nil)
67
- end
68
- end
69
-
70
- describe "#stubbed_from" do
71
- it "sets value" do
72
- expectation.stubbed_from(:webmock)
73
- expect(expectation.from).to eq(:webmock)
74
- end
75
-
76
- it "returns self" do
77
- expect(expectation.stubbed_from(:webmock)).to be(expectation)
78
- end
79
- end
80
-
81
- describe "#and_return" do
82
- context "when value" do
83
- it "adds to responses" do
84
- expectation.and_return(1)
85
- expect(expectation.responses).to eq([1])
86
- end
87
- end
88
-
89
- context "when array" do
90
- it "adds to responses" do
91
- expectation.and_return([1, 2])
92
- expect(expectation.responses).to eq([1, 2])
93
- end
94
- end
95
-
96
- context "when block" do
97
- it "adds to responses" do
98
- block = Proc.new {}
99
- expectation.and_return(&block)
100
- expect(expectation.responses).to eq([block])
101
- end
102
- end
103
- end
104
-
105
- describe "#responses" do
106
- it "returns responses" do
107
- expect(expectation.responses).to be_a(Array)
108
- end
109
- end
110
-
111
- describe "#response" do
112
- let(:request) { Typhoeus::Request.new("") }
113
-
114
- before { expectation.instance_variable_set(:@responses, responses) }
115
-
116
- context "when one response" do
117
- context "is pre-constructed" do
118
- let(:responses) { [Typhoeus::Response.new] }
119
-
120
- it "returns response" do
121
- expect(expectation.response(request)).to be(responses[0])
122
- end
123
- end
124
-
125
- context "is lazily-constructed" do
126
- def construct_response(request)
127
- @request_from_response_construction = request
128
- lazily_constructed_response
129
- end
130
-
131
- let(:lazily_constructed_response) { Typhoeus::Response.new }
132
- let(:responses) { [ Proc.new { |request| construct_response(request) } ] }
133
-
134
- it "returns response" do
135
- expect(expectation.response(request)).to be(lazily_constructed_response)
136
- expect(@request_from_response_construction).to be(request)
137
- end
138
- end
139
- end
140
-
141
- context "when multiple responses" do
142
- let(:responses) { [Typhoeus::Response.new, Typhoeus::Response.new, Typhoeus::Response.new] }
143
-
144
- it "returns one by one" do
145
- 3.times do |i|
146
- expect(expectation.response(request)).to be(responses[i])
147
- end
148
- end
149
- end
150
- end
151
-
152
- describe "#matches?" do
153
- let(:request) { double(:base_url => nil) }
154
-
155
- it "calls url_match?" do
156
- expect(expectation).to receive(:url_match?)
157
- expectation.matches?(request)
158
- end
159
-
160
- it "calls options_match?" do
161
- expect(expectation).to receive(:url_match?).and_return(true)
162
- expect(expectation).to receive(:options_match?)
163
- expectation.matches?(request)
164
- end
165
- end
166
-
167
- describe "#url_match?" do
168
- let(:request_url) { "www.example.com" }
169
- let(:request) { Typhoeus::Request.new(request_url) }
170
- let(:url_match) { expectation.method(:url_match?).call(request.base_url) }
171
-
172
- context "when string" do
173
- context "when match" do
174
- it "returns true" do
175
- expect(url_match).to be_truthy
176
- end
177
- end
178
-
179
- context "when no match" do
180
- let(:base_url) { "no_match" }
181
-
182
- it "returns false" do
183
- expect(url_match).to be_falsey
184
- end
185
- end
186
- end
187
-
188
- context "when regexp" do
189
- context "when match" do
190
- let(:base_url) { /example/ }
191
-
192
- it "returns true" do
193
- expect(url_match).to be_truthy
194
- end
195
- end
196
-
197
- context "when no match" do
198
- let(:base_url) { /nomatch/ }
199
-
200
- it "returns false" do
201
- expect(url_match).to be_falsey
202
- end
203
-
204
- context "with nil request_url" do
205
- let(:request_url) { nil }
206
-
207
- it "returns false" do
208
- expect(url_match).to be_falsey
209
- end
210
- end
211
- end
212
- end
213
-
214
- context "when nil" do
215
- let(:base_url) { nil }
216
-
217
- it "returns true" do
218
- expect(url_match).to be_truthy
219
- end
220
- end
221
-
222
- context "when not string, regexp, nil" do
223
- let(:base_url) { 1 }
224
-
225
- it "returns false" do
226
- expect(url_match).to be_falsey
227
- end
228
- end
229
- end
230
-
231
- describe "options_match?" do
232
- let(:request_options) { {} }
233
- let(:request) { Typhoeus::Request.new(nil, request_options) }
234
- let(:options_match) { expectation.method(:options_match?).call(request) }
235
-
236
- context "when match" do
237
- let(:options) { { :a => 1 } }
238
- let(:request_options) { options }
239
-
240
- it "returns true" do
241
- expect(options_match).to be_truthy
242
- end
243
- end
244
-
245
- context "when options are a subset from request_options" do
246
- let(:options) { { :a => 1 } }
247
- let(:request_options) { { :a => 1, :b => 2 } }
248
-
249
- it "returns true" do
250
- expect(options_match).to be_truthy
251
- end
252
- end
253
-
254
- context "when options are nested" do
255
- let(:options) { { :a => { :b => 1 } } }
256
- let(:request_options) { options }
257
-
258
- it "returns true" do
259
- expect(options_match).to be_truthy
260
- end
261
- end
262
-
263
- context "when options contains an array" do
264
- let(:options) { { :a => [1, 2] } }
265
- let(:request_options) { options }
266
-
267
- it "returns true" do
268
- expect(options_match).to be_truthy
269
- end
270
- end
271
-
272
- context "when no match" do
273
- let(:options) { { :a => 1 } }
274
-
275
- it "returns false" do
276
- expect(options_match).to be_falsey
277
- end
278
- end
279
- end
280
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Typhoeus::Hydra::Addable do
4
- let(:hydra) { Typhoeus::Hydra.new() }
5
- let(:request) { Typhoeus::Request.new("localhost:3001", {:method => :get}) }
6
-
7
- it "asks easy factory for an easy" do
8
- multi = double
9
- expect(Typhoeus::EasyFactory).to receive(:new).with(request, hydra).and_return(double(:get => 1))
10
- expect(hydra).to receive(:multi).and_return(multi)
11
- expect(multi).to receive(:add).with(1)
12
- hydra.add(request)
13
- end
14
-
15
- it "adds easy to multi" do
16
- multi = double
17
- expect(Typhoeus::EasyFactory).to receive(:new).with(request, hydra).and_return(double(:get => 1))
18
- expect(hydra).to receive(:multi).and_return(multi)
19
- expect(multi).to receive(:add).with(1)
20
- hydra.add(request)
21
- end
22
- end
@@ -1,98 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Typhoeus::Hydra::Before do
4
- let(:request) { Typhoeus::Request.new("") }
5
- let(:hydra) { Typhoeus::Hydra.new }
6
- let(:receive_counter) { double :mark => :twain }
7
-
8
- describe "#add" do
9
- context "when before" do
10
- context "when one" do
11
- it "executes" do
12
- Typhoeus.before { |r| receive_counter.mark }
13
- expect(receive_counter).to receive(:mark)
14
- hydra.add(request)
15
- end
16
-
17
- context "when true" do
18
- it "calls super" do
19
- Typhoeus.before { true }
20
- expect(Typhoeus::Expectation).to receive(:response_for)
21
- hydra.add(request)
22
- end
23
- end
24
-
25
- context "when falsy" do
26
- context "when queue requests" do
27
- let(:queued_request) { Typhoeus::Request.new("") }
28
-
29
- before { hydra.queue(queued_request) }
30
-
31
- it "dequeues" do
32
- Typhoeus.before { false }
33
- hydra.add(request)
34
- expect(hydra.queued_requests).to be_empty
35
- end
36
- end
37
-
38
- context "when false" do
39
- it "doesn't call super" do
40
- Typhoeus.before { false }
41
- expect(Typhoeus::Expectation).to receive(:response_for).never
42
- hydra.add(request)
43
- end
44
- end
45
-
46
- context "when response" do
47
- it "doesn't call super" do
48
- Typhoeus.before { Typhoeus::Response.new }
49
- expect(Typhoeus::Expectation).to receive(:response_for).never
50
- hydra.add(request)
51
- end
52
- end
53
- end
54
- end
55
-
56
- context "when multi" do
57
- context "when all true" do
58
- before { 3.times { Typhoeus.before { |r| receive_counter.mark } } }
59
-
60
- it "calls super" do
61
- expect(Typhoeus::Expectation).to receive(:response_for)
62
- hydra.add(request)
63
- end
64
-
65
- it "executes all" do
66
- expect(receive_counter).to receive(:mark).exactly(3).times
67
- hydra.add(request)
68
- end
69
- end
70
-
71
- context "when middle false" do
72
- before do
73
- Typhoeus.before { |r| receive_counter.mark }
74
- Typhoeus.before { |r| receive_counter.mark; nil }
75
- Typhoeus.before { |r| receive_counter.mark }
76
- end
77
-
78
- it "doesn't call super" do
79
- expect(Typhoeus::Expectation).to receive(:response_for).never
80
- hydra.add(request)
81
- end
82
-
83
- it "executes only two" do
84
- expect(receive_counter).to receive(:mark).exactly(2).times
85
- hydra.add(request)
86
- end
87
- end
88
- end
89
- end
90
-
91
- context "when no before" do
92
- it "calls super" do
93
- expect(Typhoeus::Expectation).to receive(:response_for)
94
- hydra.add(request)
95
- end
96
- end
97
- end
98
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Typhoeus::Hydra::BlockConnection do
4
- let(:base_url) { "localhost:3001" }
5
- let(:hydra) { Typhoeus::Hydra.new() }
6
- let(:request) { Typhoeus::Request.new(base_url, {:method => :get}) }
7
-
8
- describe "add" do
9
- context "when block_connection activated" do
10
- before { Typhoeus::Config.block_connection = true }
11
- after { Typhoeus::Config.block_connection = false }
12
-
13
- it "raises" do
14
- expect{ hydra.add(request) }.to raise_error(Typhoeus::Errors::NoStub)
15
- end
16
- end
17
- end
18
- end
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Typhoeus::Hydra::Cacheable do
4
- let(:base_url) { "localhost:3001" }
5
- let(:hydra) { Typhoeus::Hydra.new() }
6
- let(:request) { Typhoeus::Request.new(base_url, {:method => :get}) }
7
- let(:response) { Typhoeus::Response.new }
8
- let(:cache) { MemoryCache.new }
9
-
10
- describe "add" do
11
- context "when cache activated" do
12
- before { Typhoeus::Config.cache = cache }
13
- after { Typhoeus::Config.cache = false }
14
-
15
- context "when request new" do
16
- it "sets no response" do
17
- hydra.add(request)
18
- expect(request.response).to be_nil
19
- end
20
-
21
- it "doesn't call complete" do
22
- expect(request).to receive(:complete).never
23
- hydra.add(request)
24
- end
25
- end
26
-
27
- context "when request in memory" do
28
- before { cache.memory[request] = response }
29
-
30
- it "returns response with cached status" do
31
- hydra.add(request)
32
- expect(response.cached?).to be_truthy
33
- end
34
-
35
- context "when no queued requests" do
36
- it "finishes request" do
37
- expect(request).to receive(:finish).with(response)
38
- hydra.add(request)
39
- expect(response.cached?).to be_truthy
40
- end
41
- end
42
-
43
- context "when queued requests" do
44
- let(:queued_request) { Typhoeus::Request.new(base_url, {:method => :get}) }
45
-
46
- before { cache.memory[queued_request] = response }
47
-
48
- it "finishes both requests" do
49
- hydra.queue(queued_request)
50
- expect(request).to receive(:finish).with(response)
51
- expect(queued_request).to receive(:finish).with(response)
52
- hydra.add(request)
53
- end
54
- end
55
- end
56
-
57
- context "when cache is specified on a request" do
58
- before { Typhoeus::Config.cache = false }
59
-
60
- context "when cache is false" do
61
- let(:non_cached_request) { Typhoeus::Request.new(base_url, {:method => :get, :cache => false}) }
62
-
63
- it "initiates an HTTP call" do
64
- expect(Typhoeus::EasyFactory).to receive(:new).with(non_cached_request, hydra).and_call_original
65
-
66
- hydra.add(non_cached_request)
67
- end
68
- end
69
-
70
- context "when cache is defined" do
71
- let(:cached_request) { Typhoeus::Request.new(base_url, {:method => :get, :cache => cache}) }
72
-
73
- before { cache.memory[cached_request] = response }
74
-
75
- it "uses the cache instead of making a new request" do
76
- expect(Typhoeus::EasyFactory).not_to receive(:new)
77
-
78
- hydra.add(cached_request)
79
-
80
- expect(cached_request.response).to be_cached
81
- expect(cached_request.response).to eq(response)
82
- end
83
- end
84
- end
85
-
86
- end
87
- end
88
- end
@@ -1,53 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Typhoeus::Hydra::Memoizable do
4
- let(:base_url) { "localhost:3001" }
5
- let(:hydra) { Typhoeus::Hydra.new() }
6
- let(:request) { Typhoeus::Request.new(base_url) }
7
-
8
- describe "add" do
9
- context "when memoization activated" do
10
- before { Typhoeus::Config.memoize = true }
11
-
12
- context "when request new" do
13
- it "sets no response" do
14
- hydra.add(request)
15
- expect(request.response).to be_nil
16
- end
17
-
18
- it "doesn't call complete" do
19
- expect(request).to receive(:complete).never
20
- hydra.add(request)
21
- end
22
- end
23
-
24
- context "when request in memory" do
25
- let(:response) { Typhoeus::Response.new }
26
- before { hydra.memory[request] = response }
27
-
28
- it "finishes request" do
29
- expect(request).to receive(:finish).with(response, true)
30
- hydra.add(request)
31
- end
32
-
33
- context "when queued request" do
34
- let(:queued_request) { Typhoeus::Request.new(base_url) }
35
-
36
- it "dequeues" do
37
- hydra.queue(queued_request)
38
- expect(request).to receive(:finish).with(response, true)
39
- expect(queued_request).to receive(:finish).with(response, true)
40
- hydra.add(request)
41
- end
42
- end
43
- end
44
- end
45
- end
46
-
47
- describe "#run" do
48
- it "clears memory before starting" do
49
- expect(hydra.memory).to receive(:clear)
50
- hydra.run
51
- end
52
- end
53
- end
@@ -1,98 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Typhoeus::Hydra::Queueable do
4
- let(:base_url) { "localhost:3001" }
5
- let(:options) { {} }
6
- let(:hydra) { Typhoeus::Hydra.new(options) }
7
-
8
- describe "#queue" do
9
- let(:request) { Typhoeus::Request.new("") }
10
-
11
- it "accepts requests" do
12
- hydra.queue(request)
13
- end
14
-
15
- it "sets hydra on request" do
16
- hydra.queue(request)
17
- expect(request.hydra).to eq(hydra)
18
- end
19
-
20
- it "adds to queued requests" do
21
- hydra.queue(request)
22
- expect(hydra.queued_requests).to include(request)
23
- end
24
-
25
- it "adds to front of queued requests" do
26
- hydra.queue_front(request)
27
- expect(hydra.queued_requests.first).to be(request)
28
- end
29
- end
30
-
31
- describe "#abort" do
32
- before { hydra.queued_requests << 1 }
33
-
34
- it "clears queue" do
35
- hydra.abort
36
- expect(hydra.queued_requests).to be_empty
37
- end
38
- end
39
-
40
- describe "#dequeue_many" do
41
- before do
42
- requests.each { |r| hydra.queue r }
43
- end
44
-
45
- context "when no request queued" do
46
- let(:requests) { [] }
47
-
48
- it "does nothing" do
49
- expect(hydra).to_not receive(:add)
50
- hydra.dequeue_many
51
- end
52
- end
53
-
54
- context "when request queued" do
55
- let(:first) { Typhoeus::Request.new("localhost:3001/first") }
56
- let(:requests) { [first] }
57
-
58
- it "adds request from queue to multi" do
59
- expect(hydra).to receive(:add).with(first)
60
- hydra.dequeue_many
61
- end
62
- end
63
-
64
- context "when three request queued" do
65
- let(:first) { Typhoeus::Request.new("localhost:3001/first") }
66
- let(:second) { Typhoeus::Request.new("localhost:3001/second") }
67
- let(:third) { Typhoeus::Request.new("localhost:3001/third") }
68
- let(:requests) { [first, second, third] }
69
-
70
- it "adds requests from queue to multi" do
71
- expect(hydra).to receive(:add).with(first)
72
- expect(hydra).to receive(:add).with(second)
73
- expect(hydra).to receive(:add).with(third)
74
- hydra.dequeue_many
75
- end
76
-
77
- context "when max_concurrency is two" do
78
- let(:options) { {:max_concurrency => 2} }
79
- it "adds requests from queue to multi" do
80
- expect(hydra).to receive(:add).with(first)
81
- expect(hydra).to receive(:add).with(second)
82
- expect(hydra).to_not receive(:add).with(third)
83
- hydra.dequeue_many
84
- end
85
- end
86
-
87
- context "when max_concurrency is a string" do
88
- let(:options) { {:max_concurrency => "2"} }
89
- it "adds requests from queue to multi" do
90
- expect(hydra).to receive(:add).with(first)
91
- expect(hydra).to receive(:add).with(second)
92
- expect(hydra).to_not receive(:add).with(third)
93
- hydra.dequeue_many
94
- end
95
- end
96
- end
97
- end
98
- end