faraday-conductivity 0.3.1 → 1.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 +5 -5
- data/.travis.yml +3 -5
- data/Appraisals +2 -6
- data/README.md +44 -35
- data/faraday-conductivity.gemspec +4 -5
- data/gemfiles/{faraday_0.8.gemfile → faraday_1.0.0.gemfile} +2 -2
- data/lib/faraday/conductivity.rb +0 -4
- data/lib/faraday/conductivity/selective_errors.rb +32 -17
- data/lib/faraday/conductivity/version.rb +1 -1
- data/spec/middleware/selective_errors_spec.rb +5 -5
- data/spec/spec_helper.rb +0 -9
- metadata +9 -32
- data/gemfiles/faraday_0.9.gemfile +0 -7
- data/lib/faraday/conductivity/mimetype.rb +0 -18
- data/lib/faraday/conductivity/repeater.rb +0 -61
- data/spec/fake_server.rb +0 -21
- data/spec/middleware/mimetype_spec.rb +0 -17
- data/spec/middleware/repeater_spec.rb +0 -61
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4b7daa7d2c2b8b16dc880bfb8ac956542d2db10f299a2821f1d1df8323c88e96
|
4
|
+
data.tar.gz: fa99a8e801b0cab12612be567d7558612e6da81a7c849a5cfd0a0a77358b4f42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26827ab33d953a9bd4ea2212cdaf9c2ffb3f7537f79c6143496976c38a5c4d55bb3a55e9315f6f169e802aba5165acd54c2a7ffee56a65bdb3c4254405749fae
|
7
|
+
data.tar.gz: f16d6d9307c8747ef3510fa447c07fdb5ed89040fad92fc7ff5bdbb87e0d8b199aa9d2979d7030cb54183bbae9cbe03fcdb9f70d82b9edb0494fc87c43010f30
|
data/.travis.yml
CHANGED
data/Appraisals
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
# Faraday::Conductivity [](https://travis-ci.org/enova/faraday-conductivity)
|
2
|
+
|
3
|
+
Originally implemented by [yourkarma/faraday-conductivity](https://github.com/yourkarma/faraday-conductivity).
|
4
|
+
|
5
|
+
---
|
2
6
|
|
3
7
|
Extra Faraday Middleware! Geared towards a service oriented architecture.
|
4
8
|
|
@@ -144,35 +148,6 @@ The User-Agent will looks like this on my machine:
|
|
144
148
|
MarketingSite/1.1 (iain.local; iain; 30360) ruby/1.9.3 (327; x86_64-darwin12.2.0)
|
145
149
|
```
|
146
150
|
|
147
|
-
### Repeater
|
148
|
-
|
149
|
-
The Repeater will retry your requests until they succeed. This is handy for
|
150
|
-
reaching servers that are not too reliable.
|
151
|
-
|
152
|
-
``` ruby
|
153
|
-
connection = Faraday.new(url: "http://slow.website.com") do |faraday|
|
154
|
-
faraday.use :repeater, retries: 6, mode: :rapid
|
155
|
-
end
|
156
|
-
```
|
157
|
-
|
158
|
-
The `retries` parameter specifies how many times to retry before succeeding.
|
159
|
-
|
160
|
-
The `mode` parameter specifies how long to wait before retrying. `:rapid` will
|
161
|
-
retry instantly, `:one`, will wait one second between retries, `:linear` and
|
162
|
-
`:exponential` will retry longer and longer after every retry.
|
163
|
-
|
164
|
-
It's also possible to specify your own pattern by providing a lambda, that
|
165
|
-
returns the number of seconds to wait. For example:
|
166
|
-
|
167
|
-
``` ruby
|
168
|
-
connection = Faraday.new(url: "http://slow.website.com") do |faraday|
|
169
|
-
faraday.use :repeater, retries: 6, pattern: ->(n) { rand < 0.5 ? 10 : 2 }
|
170
|
-
end
|
171
|
-
```
|
172
|
-
|
173
|
-
You can use the repeater together with the `raise_error` middleware to also
|
174
|
-
retry after getting 404s and other succeeded requests, but failed statuses.
|
175
|
-
|
176
151
|
### Selective Errors
|
177
152
|
|
178
153
|
The default `:raise_error` middleware raises errors for every http status above
|
@@ -189,10 +164,7 @@ connection = Faraday.new(url: "http://widgets.yourapp.com") do |faraday|
|
|
189
164
|
end
|
190
165
|
```
|
191
166
|
|
192
|
-
The errors raised will be the same as Faraday
|
193
|
-
`Faraday::Error::ResourceNotFound` for 404 errors,
|
194
|
-
`Faraday::Error::ConnectionFailed` for 407 and `Faraday::Error::ClientError` for
|
195
|
-
the rest.
|
167
|
+
The errors raised will be the same [as Faraday](https://github.com/lostisland/faraday/blob/019e1a841707718adad2fd05c602eb1a869b42bc/lib/faraday/response/raise_error.rb).
|
196
168
|
|
197
169
|
If you don't specify the `:on` or `:except` options, it will behave exactly like
|
198
170
|
`:raise_error`. The errors are however "enhanced" with extra information about
|
@@ -201,7 +173,7 @@ the request that normally are lost:
|
|
201
173
|
``` ruby
|
202
174
|
begin
|
203
175
|
do_failing_request_here
|
204
|
-
rescue Faraday::
|
176
|
+
rescue Faraday::ClientError => error
|
205
177
|
puts error.request[:url]
|
206
178
|
puts error.request[:method]
|
207
179
|
puts error.request[:body]
|
@@ -227,6 +199,43 @@ connection = Faraday.new(url: "http://widgets.yourapp.com") do |faraday|
|
|
227
199
|
end
|
228
200
|
```
|
229
201
|
|
202
|
+
## faraday-conductivity ~> 0.3
|
203
|
+
|
204
|
+
The following middlewares have been removed entirely and are no longer
|
205
|
+
supported, but were available prior in faraday-conductivity versions <= 0.3.
|
206
|
+
|
207
|
+
### Repeater
|
208
|
+
|
209
|
+
Suggested to use [Faraday's Retry](https://github.com/lostisland/faraday/blob/master/docs/middleware/request/retry.md)
|
210
|
+
instead.
|
211
|
+
|
212
|
+
The Repeater will retry your requests until they succeed. This is handy for
|
213
|
+
reaching servers that are not too reliable.
|
214
|
+
|
215
|
+
``` ruby
|
216
|
+
connection = Faraday.new(url: "http://slow.website.com") do |faraday|
|
217
|
+
faraday.use :repeater, retries: 6, mode: :rapid
|
218
|
+
end
|
219
|
+
```
|
220
|
+
|
221
|
+
The `retries` parameter specifies how many times to retry before succeeding.
|
222
|
+
|
223
|
+
The `mode` parameter specifies how long to wait before retrying. `:rapid` will
|
224
|
+
retry instantly, `:one`, will wait one second between retries, `:linear` and
|
225
|
+
`:exponential` will retry longer and longer after every retry.
|
226
|
+
|
227
|
+
It's also possible to specify your own pattern by providing a lambda, that
|
228
|
+
returns the number of seconds to wait. For example:
|
229
|
+
|
230
|
+
``` ruby
|
231
|
+
connection = Faraday.new(url: "http://slow.website.com") do |faraday|
|
232
|
+
faraday.use :repeater, retries: 6, pattern: ->(n) { rand < 0.5 ? 10 : 2 }
|
233
|
+
end
|
234
|
+
```
|
235
|
+
|
236
|
+
You can use the repeater together with the `raise_error` middleware to also
|
237
|
+
retry after getting 404s and other succeeded requests, but failed statuses.
|
238
|
+
|
230
239
|
### Mimetype
|
231
240
|
|
232
241
|
This one is deprecated. Use Request Headers instead.
|
@@ -6,11 +6,11 @@ require 'faraday/conductivity/version'
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = "faraday-conductivity"
|
8
8
|
gem.version = Faraday::Conductivity::VERSION
|
9
|
-
gem.authors = ["iain"]
|
10
|
-
gem.email = ["iain@iain.nl"]
|
9
|
+
gem.authors = ["iain", "sshao"]
|
10
|
+
gem.email = ["iain@iain.nl", "ssh.sshao@gmail.com"]
|
11
11
|
gem.description = %q{Extra Faraday middleware, geared towards a service oriented architecture.}
|
12
12
|
gem.summary = %q{Extra Faraday middleware, geared towards a service oriented architecture.}
|
13
|
-
gem.homepage = "https://github.com/
|
13
|
+
gem.homepage = "https://github.com/enova/faraday-conductivity"
|
14
14
|
gem.license = "MIT"
|
15
15
|
|
16
16
|
gem.files = `git ls-files`.split($/)
|
@@ -18,10 +18,9 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
-
gem.add_dependency "faraday", "~> 0
|
21
|
+
gem.add_dependency "faraday", "~> 1.0"
|
22
22
|
gem.add_development_dependency "rake"
|
23
23
|
gem.add_development_dependency "rspec", "~> 3"
|
24
24
|
gem.add_development_dependency "pry"
|
25
|
-
gem.add_development_dependency "service_double"
|
26
25
|
gem.add_development_dependency "appraisal"
|
27
26
|
end
|
data/lib/faraday/conductivity.rb
CHANGED
@@ -3,11 +3,9 @@ require "faraday"
|
|
3
3
|
require "faraday/conductivity/version"
|
4
4
|
|
5
5
|
require "faraday/conductivity/extended_logging"
|
6
|
-
require "faraday/conductivity/mimetype"
|
7
6
|
require "faraday/conductivity/request_id"
|
8
7
|
require "faraday/conductivity/request_id_filter"
|
9
8
|
require "faraday/conductivity/user_agent"
|
10
|
-
require "faraday/conductivity/repeater"
|
11
9
|
require "faraday/conductivity/selective_errors"
|
12
10
|
require "faraday/conductivity/request_headers"
|
13
11
|
|
@@ -16,8 +14,6 @@ module Faraday
|
|
16
14
|
end
|
17
15
|
|
18
16
|
Faraday::Middleware.register_middleware :extended_logging => Faraday::Conductivity::ExtendedLogging
|
19
|
-
Faraday::Middleware.register_middleware :repeater => Faraday::Conductivity::Repeater
|
20
|
-
Faraday::Request.register_middleware :mimetype => Faraday::Conductivity::Mimetype
|
21
17
|
Faraday::Request.register_middleware :request_id => Faraday::Conductivity::RequestId
|
22
18
|
Faraday::Request.register_middleware :request_headers => Faraday::Conductivity::RequestHeaders
|
23
19
|
Faraday::Request.register_middleware :user_agent => Faraday::Conductivity::UserAgent
|
@@ -54,7 +54,8 @@ module Faraday
|
|
54
54
|
# end
|
55
55
|
class SelectiveErrors < Faraday::Middleware
|
56
56
|
|
57
|
-
ClientErrorStatuses = 400...
|
57
|
+
ClientErrorStatuses = (400...500).freeze
|
58
|
+
ServerErrorStatuses = (500...600).freeze
|
58
59
|
|
59
60
|
def initialize(app, options = {})
|
60
61
|
@app = app
|
@@ -74,35 +75,49 @@ module Faraday
|
|
74
75
|
start_time = Time.now
|
75
76
|
|
76
77
|
@app.call(env).on_complete do
|
77
|
-
|
78
78
|
status = env[:status]
|
79
79
|
|
80
80
|
if should_raise_error?(status)
|
81
|
-
response = {
|
82
|
-
:status => env[:status],
|
83
|
-
:body => env[:body],
|
84
|
-
:headers => env[:response_headers],
|
85
|
-
}
|
86
81
|
error = case status
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
82
|
+
when 400
|
83
|
+
Faraday::BadRequestError.new(response_values(env))
|
84
|
+
when 401
|
85
|
+
Faraday::UnauthorizedError.new(response_values(env))
|
86
|
+
when 403
|
87
|
+
Faraday::ForbiddenError.new(response_values(env))
|
88
|
+
when 404
|
89
|
+
Faraday::ResourceNotFound.new(response_values(env))
|
90
|
+
when 407
|
91
|
+
# mimic the behavior that we get with proxy requests with HTTPS
|
92
|
+
msg = %(407 "Proxy Authentication Required")
|
93
|
+
Faraday::ProxyAuthError.new(msg, response_values(env))
|
94
|
+
when 409
|
95
|
+
Faraday::ConflictError.new(response_values(env))
|
96
|
+
when 422
|
97
|
+
Faraday::UnprocessableEntityError.new(response_values(env))
|
98
|
+
when ClientErrorStatuses
|
99
|
+
Faraday::ClientError.new(response_values(env))
|
100
|
+
when ServerErrorStatuses
|
101
|
+
Faraday::ServerError.new(response_values(env))
|
102
|
+
when nil
|
103
|
+
Faraday::NilStatusError.new(response_values(env))
|
104
|
+
end
|
105
|
+
|
95
106
|
error.extend Error
|
96
|
-
error.response =
|
107
|
+
error.response = response_values(env)
|
97
108
|
error.request = request
|
98
109
|
error.response_time = Time.now - start_time
|
99
|
-
raise error
|
100
110
|
|
111
|
+
raise error
|
101
112
|
end
|
102
113
|
|
103
114
|
end
|
104
115
|
end
|
105
116
|
|
117
|
+
def response_values(env)
|
118
|
+
{ status: env.status, headers: env.response_headers, body: env.body }
|
119
|
+
end
|
120
|
+
|
106
121
|
def should_raise_error?(status)
|
107
122
|
@on.include?(status) && !@except.include?(status)
|
108
123
|
end
|
@@ -4,7 +4,7 @@ RSpec.describe Faraday::Conductivity::SelectiveErrors do
|
|
4
4
|
|
5
5
|
it "raises an exception if the error is inside the :on argument" do
|
6
6
|
apply_selective_errors on: 407..409
|
7
|
-
expect { response_with_status(408) }.to raise_error Faraday::
|
7
|
+
expect { response_with_status(408) }.to raise_error Faraday::ClientError
|
8
8
|
end
|
9
9
|
|
10
10
|
it "won't raise an exception when outside the range" do
|
@@ -19,17 +19,17 @@ RSpec.describe Faraday::Conductivity::SelectiveErrors do
|
|
19
19
|
|
20
20
|
it "raises an exception if included in :on and not included in :except" do
|
21
21
|
apply_selective_errors on: 403..422, except: [408]
|
22
|
-
expect { response_with_status(409) }.to raise_error Faraday::
|
22
|
+
expect { response_with_status(409) }.to raise_error Faraday::ClientError
|
23
23
|
end
|
24
24
|
|
25
25
|
it "raises a resource not found error when the actual status is 404" do
|
26
26
|
apply_selective_errors on: 403..422, except: [408]
|
27
|
-
expect { response_with_status(404) }.to raise_error Faraday::
|
27
|
+
expect { response_with_status(404) }.to raise_error Faraday::ResourceNotFound
|
28
28
|
end
|
29
29
|
|
30
|
-
it "raises
|
30
|
+
it "raises proxy auth required on 407" do
|
31
31
|
apply_selective_errors on: 403..422, except: [408]
|
32
|
-
expect { response_with_status(407) }.to raise_error Faraday::
|
32
|
+
expect { response_with_status(407) }.to raise_error Faraday::ProxyAuthError
|
33
33
|
end
|
34
34
|
|
35
35
|
it "stores more information about the request and response" do
|
data/spec/spec_helper.rb
CHANGED
@@ -31,12 +31,3 @@ RSpec.configure do |config|
|
|
31
31
|
config.disable_monkey_patching!
|
32
32
|
config.include SpecHelper
|
33
33
|
end
|
34
|
-
|
35
|
-
require 'service_double'
|
36
|
-
|
37
|
-
$service_double_url = "http://localhost:3434"
|
38
|
-
|
39
|
-
$service_double = ServiceDouble.hook_into(:rspec) do |config|
|
40
|
-
config.server = File.expand_path('../fake_server.rb', __FILE__)
|
41
|
-
config.url = $service_double_url
|
42
|
-
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday-conductivity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iain
|
8
|
+
- sshao
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2020-05-26 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: faraday
|
@@ -16,14 +17,14 @@ dependencies:
|
|
16
17
|
requirements:
|
17
18
|
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0
|
20
|
+
version: '1.0'
|
20
21
|
type: :runtime
|
21
22
|
prerelease: false
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
25
|
- - "~>"
|
25
26
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0
|
27
|
+
version: '1.0'
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: rake
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,20 +67,6 @@ dependencies:
|
|
66
67
|
- - ">="
|
67
68
|
- !ruby/object:Gem::Version
|
68
69
|
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: service_double
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
70
|
- !ruby/object:Gem::Dependency
|
84
71
|
name: appraisal
|
85
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,6 +84,7 @@ dependencies:
|
|
97
84
|
description: Extra Faraday middleware, geared towards a service oriented architecture.
|
98
85
|
email:
|
99
86
|
- iain@iain.nl
|
87
|
+
- ssh.sshao@gmail.com
|
100
88
|
executables: []
|
101
89
|
extensions: []
|
102
90
|
extra_rdoc_files: []
|
@@ -110,28 +98,22 @@ files:
|
|
110
98
|
- README.md
|
111
99
|
- Rakefile
|
112
100
|
- faraday-conductivity.gemspec
|
113
|
-
- gemfiles/
|
114
|
-
- gemfiles/faraday_0.9.gemfile
|
101
|
+
- gemfiles/faraday_1.0.0.gemfile
|
115
102
|
- lib/faraday/conductivity.rb
|
116
103
|
- lib/faraday/conductivity/extended_logging.rb
|
117
|
-
- lib/faraday/conductivity/mimetype.rb
|
118
|
-
- lib/faraday/conductivity/repeater.rb
|
119
104
|
- lib/faraday/conductivity/request_headers.rb
|
120
105
|
- lib/faraday/conductivity/request_id.rb
|
121
106
|
- lib/faraday/conductivity/request_id_filter.rb
|
122
107
|
- lib/faraday/conductivity/selective_errors.rb
|
123
108
|
- lib/faraday/conductivity/user_agent.rb
|
124
109
|
- lib/faraday/conductivity/version.rb
|
125
|
-
- spec/fake_server.rb
|
126
110
|
- spec/middleware/extended_logging_spec.rb
|
127
|
-
- spec/middleware/mimetype_spec.rb
|
128
|
-
- spec/middleware/repeater_spec.rb
|
129
111
|
- spec/middleware/request_headers_spec.rb
|
130
112
|
- spec/middleware/request_id_spec.rb
|
131
113
|
- spec/middleware/selective_errors_spec.rb
|
132
114
|
- spec/middleware/user_agent_spec.rb
|
133
115
|
- spec/spec_helper.rb
|
134
|
-
homepage: https://github.com/
|
116
|
+
homepage: https://github.com/enova/faraday-conductivity
|
135
117
|
licenses:
|
136
118
|
- MIT
|
137
119
|
metadata: {}
|
@@ -150,19 +132,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
132
|
- !ruby/object:Gem::Version
|
151
133
|
version: '0'
|
152
134
|
requirements: []
|
153
|
-
|
154
|
-
rubygems_version: 2.2.2
|
135
|
+
rubygems_version: 3.1.2
|
155
136
|
signing_key:
|
156
137
|
specification_version: 4
|
157
138
|
summary: Extra Faraday middleware, geared towards a service oriented architecture.
|
158
139
|
test_files:
|
159
|
-
- spec/fake_server.rb
|
160
140
|
- spec/middleware/extended_logging_spec.rb
|
161
|
-
- spec/middleware/mimetype_spec.rb
|
162
|
-
- spec/middleware/repeater_spec.rb
|
163
141
|
- spec/middleware/request_headers_spec.rb
|
164
142
|
- spec/middleware/request_id_spec.rb
|
165
143
|
- spec/middleware/selective_errors_spec.rb
|
166
144
|
- spec/middleware/user_agent_spec.rb
|
167
145
|
- spec/spec_helper.rb
|
168
|
-
has_rdoc:
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Faraday
|
2
|
-
module Conductivity
|
3
|
-
# Deprecated. Use RequestHeaders
|
4
|
-
class Mimetype < Faraday::Middleware
|
5
|
-
|
6
|
-
def initialize(app, options = {})
|
7
|
-
super(app)
|
8
|
-
@accept = options.fetch(:accept)
|
9
|
-
end
|
10
|
-
|
11
|
-
def call(env)
|
12
|
-
env[:request_headers]['Accept'] ||= @accept
|
13
|
-
@app.call(env)
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
module Faraday
|
2
|
-
module Conductivity
|
3
|
-
class Repeater < Faraday::Middleware
|
4
|
-
|
5
|
-
PATTERNS = {
|
6
|
-
:rapid => lambda { |n| 0 },
|
7
|
-
:one => lambda { |n| 1 },
|
8
|
-
:linear => lambda { |n| n },
|
9
|
-
:exponential => lambda { |n| n ** 2 },
|
10
|
-
}
|
11
|
-
|
12
|
-
def initialize(app, options = {})
|
13
|
-
@app = app
|
14
|
-
@retries = options[:retries] || 10
|
15
|
-
|
16
|
-
if mode = options[:mode]
|
17
|
-
@pattern = build_pattern(PATTERNS.fetch(mode))
|
18
|
-
elsif pattern = options[:pattern]
|
19
|
-
@pattern = build_pattern(pattern)
|
20
|
-
else
|
21
|
-
@pattern = build_pattern(PATTERNS.fetch(:exponential))
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def call(env)
|
26
|
-
tries = 0
|
27
|
-
begin
|
28
|
-
@app.call(env)
|
29
|
-
rescue Faraday::Error::ClientError, SystemCallError
|
30
|
-
if tries < @retries
|
31
|
-
tries += 1
|
32
|
-
@pattern.wait(tries)
|
33
|
-
retry
|
34
|
-
else
|
35
|
-
raise
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def build_pattern(pattern)
|
41
|
-
Pattern.new(pattern)
|
42
|
-
end
|
43
|
-
|
44
|
-
class Pattern
|
45
|
-
|
46
|
-
def initialize(pattern)
|
47
|
-
@pattern = pattern
|
48
|
-
end
|
49
|
-
|
50
|
-
def wait(num)
|
51
|
-
seconds = @pattern.call(num)
|
52
|
-
if seconds != 0
|
53
|
-
sleep num
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
data/spec/fake_server.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
RSpec.describe Faraday::Conductivity::Mimetype do
|
2
|
-
|
3
|
-
subject(:request_headers) { response.env[:request_headers] }
|
4
|
-
|
5
|
-
it "includes the mimetype specified" do
|
6
|
-
expect(request_headers["Accept"]).to eq mimetype
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:mimetype) { "application/vnd.users-v2+json" }
|
10
|
-
|
11
|
-
def connection
|
12
|
-
create_connection do |faraday|
|
13
|
-
faraday.request :mimetype, :accept => mimetype
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
RSpec.describe Faraday::Conductivity::Repeater do
|
2
|
-
|
3
|
-
let(:connection) {
|
4
|
-
Faraday.new(url: $service_double_url) { |faraday|
|
5
|
-
faraday.use :repeater, mode: :rapid, retries: 6
|
6
|
-
faraday.response :raise_error
|
7
|
-
faraday.adapter Faraday.default_adapter
|
8
|
-
}
|
9
|
-
}
|
10
|
-
|
11
|
-
it "retries after timeouts" do
|
12
|
-
expect(get_with_max(4).body).to eq "fast"
|
13
|
-
end
|
14
|
-
|
15
|
-
it "gives up after a number of retries" do
|
16
|
-
expect { get_with_max(20) }.to raise_error(Faraday::Error::TimeoutError)
|
17
|
-
end
|
18
|
-
|
19
|
-
class MyPattern
|
20
|
-
|
21
|
-
def initialize
|
22
|
-
@waited = []
|
23
|
-
end
|
24
|
-
|
25
|
-
attr_reader :waited
|
26
|
-
|
27
|
-
def wait(x)
|
28
|
-
waited << x
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
it "waits according to a pattern" do
|
34
|
-
pattern = MyPattern.new
|
35
|
-
expect(Faraday::Conductivity::Repeater::Pattern).to receive(:new).and_return(pattern)
|
36
|
-
get_with_max(6)
|
37
|
-
expect(pattern.waited).to eq pattern.waited.sort
|
38
|
-
end
|
39
|
-
|
40
|
-
it "handles other errors too" do
|
41
|
-
connection = Faraday.new(url: "http://blabla.bla") { |faraday|
|
42
|
-
faraday.use :repeater, mode: :rapid, retries: 2
|
43
|
-
faraday.adapter Faraday.default_adapter
|
44
|
-
}
|
45
|
-
|
46
|
-
pattern = double :pattern
|
47
|
-
expect(Faraday::Conductivity::Repeater::Pattern).to receive(:new).and_return(pattern)
|
48
|
-
expect(pattern).to receive(:wait).with(1).ordered
|
49
|
-
expect(pattern).to receive(:wait).with(2).ordered
|
50
|
-
|
51
|
-
expect { connection.get("/") }.to raise_error(Faraday::Error::ConnectionFailed)
|
52
|
-
end
|
53
|
-
|
54
|
-
def get_with_max(num)
|
55
|
-
connection.get("/unreliable/#{num}") { |req|
|
56
|
-
req.options[:timeout] = 1
|
57
|
-
req.options[:open_timeout] = 1
|
58
|
-
}
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|