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 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