faraday-conductivity 0.3.1 → 1.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
- SHA1:
3
- metadata.gz: 37144ee9e787b4eba24b366cff58a3d437e5670c
4
- data.tar.gz: 577ec27bee6892d8a73382eb1018e726236ce2a4
2
+ SHA256:
3
+ metadata.gz: 4b7daa7d2c2b8b16dc880bfb8ac956542d2db10f299a2821f1d1df8323c88e96
4
+ data.tar.gz: fa99a8e801b0cab12612be567d7558612e6da81a7c849a5cfd0a0a77358b4f42
5
5
  SHA512:
6
- metadata.gz: dce521f65e52e0fa0cfc168d4bd3fe5fded12ecbc5267a9c8632772c19f9e75713f9a84a7013d2bb2e1979e8c8f79eed7b1293da78b751dc64757a8fbf277e56
7
- data.tar.gz: c65886c49d1ccaf753bdeeca1133aa002070c9b9354499fcb82ab9b619cb8a5944a86db4511866cb63f7f260a9325111f33e129797c1505d20981439189b8188
6
+ metadata.gz: 26827ab33d953a9bd4ea2212cdaf9c2ffb3f7537f79c6143496976c38a5c4d55bb3a55e9315f6f169e802aba5165acd54c2a7ffee56a65bdb3c4254405749fae
7
+ data.tar.gz: f16d6d9307c8747ef3510fa447c07fdb5ed89040fad92fc7ff5bdbb87e0d8b199aa9d2979d7030cb54183bbae9cbe03fcdb9f70d82b9edb0494fc87c43010f30
@@ -1,8 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.1
3
+ - 2.3.0
4
+ - 2.7.0
6
5
  gemfile:
7
- - gemfiles/faraday_0.8.gemfile
8
- - gemfiles/faraday_0.9.gemfile
6
+ - gemfiles/faraday_1.0.0.gemfile
data/Appraisals CHANGED
@@ -1,7 +1,3 @@
1
- appraise "faraday-0.8" do
2
- gem "faraday", "~> 0.8.0"
3
- end
4
-
5
- appraise "faraday-0.9" do
6
- gem "faraday", "~> 0.9.0"
1
+ appraise "faraday-1.0.0" do
2
+ gem "faraday", "~> 1.0.0"
7
3
  end
data/README.md CHANGED
@@ -1,4 +1,8 @@
1
- # Faraday::Conductivity [![Build Status](https://travis-ci.org/yourkarma/faraday-conductivity.png?branch=master)](https://travis-ci.org/yourkarma/faraday-conductivity)
1
+ # Faraday::Conductivity [![Build Status](https://travis-ci.org/enova/faraday-conductivity.svg?branch=master)](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, namely
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::Error::ClientError => error
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/yourkarma/faraday-conductivity"
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.8"
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "faraday", "~> 0.8.0"
5
+ gem "faraday", "~> 1.0.0"
6
6
 
7
- gemspec :path=>"../"
7
+ gemspec path: "../"
@@ -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...600
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
- when 404
88
- Faraday::Error::ResourceNotFound.new(response)
89
- when 407
90
- # mimic the behavior that we get with proxy requests with HTTPS
91
- Faraday::Error::ConnectionFailed.new(%{407 "Proxy Authentication Required "})
92
- else
93
- Faraday::Error::ClientError.new(response)
94
- end
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 = 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
@@ -1,5 +1,5 @@
1
1
  module Faraday
2
2
  module Conductivity
3
- VERSION = "0.3.1"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  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::Error::ClientError
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::Error::ClientError
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::Error::ResourceNotFound
27
+ expect { response_with_status(404) }.to raise_error Faraday::ResourceNotFound
28
28
  end
29
29
 
30
- it "raises a connection failed on 407" do
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::Error::ConnectionFailed
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
@@ -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.3.1
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: 2014-11-17 00:00:00.000000000 Z
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.8'
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.8'
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/faraday_0.8.gemfile
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/yourkarma/faraday-conductivity
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
- rubyforge_project:
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,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "faraday", "~> 0.9.0"
6
-
7
- gemspec :path=>"../"
@@ -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
@@ -1,21 +0,0 @@
1
- count = 0
2
-
3
- get "/" do
4
- 200
5
- end
6
-
7
- delete "/" do
8
- count = 0
9
- 200
10
- end
11
-
12
- get "/unreliable/:max" do |max|
13
- max = Integer(max)
14
- count += 1
15
- if count <= max
16
- sleep 5
17
- "slow"
18
- else
19
- "fast"
20
- end
21
- end
@@ -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