Skip to content

Commit a031e48

Browse files
authored
Merge pull request #82 from zendesk/strus/faraday-update
Update Faraday gem
2 parents ac56c0f + 23629df commit a031e48

File tree

9 files changed

+41
-4
lines changed

9 files changed

+41
-4
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
## CHANGELOG
2+
v2.0.0 (2021-10-26)
3+
**Features and Improvements**
4+
* Faraday updated to version > 1.0
5+
* Optional parameters `max_retry` and `retry_statuses` to specify no. of retries on failed request and statuses to retry.
26

37
v1.3.10 (2021-06-28)
48
**Features and Improvements**

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ The following options are available while instantiating a client:
4949
* __timeout__: Request timeout
5050
* __verbose__: Verbose/debug mode
5151
* __logger__: Logger used in verbose mode
52+
* __max_retry__: Number of retries on failed requests. Passed to Faraday
53+
* __retry_statuses__: By default only timeout error will be retries. This allows to retry on specific HTTP statuses. Passed to Faraday
5254

5355
### Architecture
5456

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.3.10
1+
2.0.0

basecrm.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
2020
spec.files = Dir["README.md", "LICENSE", "lib/**/*"]
2121
spec.test_files = Dir["spec/**/*"]
2222

23-
spec.add_dependency "faraday", "~> 0.9", ">= 0.9.0"
23+
spec.add_dependency "faraday", "~> 1.0"
2424
spec.add_dependency "json", "~> 2.0"
2525

2626
spec.add_development_dependency "rspec", "~> 3.2"

lib/basecrm/configuration.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ class Configuration
77
attr_reader :user_agent
88
attr_reader :timeout
99
attr_reader :verify_ssl
10+
attr_reader :max_retry
11+
attr_reader :retry_statuses
1012

1113
attr_reader :logger, :verbose
1214
alias_method :debug?, :verbose
@@ -19,6 +21,8 @@ def initialize(options={})
1921
@verbose = !!options[:verbose]
2022
@timeout = options[:timeout] || 30
2123
@verify_ssl = options.fetch(:verify_ssl, true)
24+
@max_retry = options[:max_retry]
25+
@retry_statuses = options[:retry_statuses]
2226
end
2327

2428
def validate!

lib/basecrm/http_client.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ def initialize(config)
2222
options[:ssl] = { verify: false } unless config.verify_ssl
2323

2424
@client = Faraday.new(config.base_url, options) do |faraday|
25+
faraday.request :retry, retry_options
2526
faraday.use BaseCRM::Middlewares::OAuthBearerToken, config.access_token
2627
faraday.use BaseCRM::Middlewares::RaiseError
2728
faraday.response :logger, config.logger if config.debug?
@@ -74,7 +75,7 @@ def request(method, path, data={}, headers={})
7475
body = extract_body(res)
7576
@config.logger.debug body if @config.debug? && body && @config.logger
7677
[res.status, res.headers, body]
77-
rescue Faraday::Error::ConnectionFailed => e
78+
rescue Faraday::ConnectionFailed => e
7879
raise ConnectionError, e.message
7980
end
8081

@@ -89,5 +90,12 @@ def extract_body(res)
8990
content_type = res.headers['Content-Type']
9091
content_type && content_type.include?('json') ? JSON.parse(res.body, symbolize_names: true) : res.body
9192
end
93+
94+
def retry_options
95+
retry_options = {}
96+
retry_options[:max] = @config.max_retry if @config.max_retry
97+
retry_options[:retry_statuses] = @config.retry_statuses if @config.retry_statuses
98+
retry_options
99+
end
92100
end
93101
end

lib/basecrm/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module BaseCRM
2-
VERSION = "1.3.10"
2+
VERSION = "2.0.0"
33
end

spec/http_client_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require 'spec_helper'
2+
3+
describe BaseCRM::HttpClient do
4+
describe 'Retries' do
5+
let(:statuses_to_retry) { [503] }
6+
let(:max_retry) { 3 }
7+
subject(:client_with_retry) { client_with_basic_retry(max_retry: max_retry, on_statuses: statuses_to_retry) }
8+
9+
it "should pass retry statues to Faraday and do a valid request" do
10+
expect(client_with_retry.http_client.client.app.options.retry_statuses).to match_array(statuses_to_retry)
11+
expect(client_with_retry.http_client.client.app.options.max).to eq(max_retry)
12+
expect(client_with_retry.accounts.self).to be_instance_of BaseCRM::Account
13+
end
14+
end
15+
end

spec/support/client_helpers.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ def client
33
@client ||= BaseCRM::Client.new(access_token: access_token, base_url: base_url)
44
end
55

6+
def client_with_basic_retry(max_retry: 1, on_statuses: [])
7+
@client_with_basic_retry ||= BaseCRM::Client.new(access_token: access_token, base_url: base_url, max_retry: max_retry, retry_statuses: on_statuses)
8+
end
9+
610
def access_token
711
@access_token ||= ENV.fetch("BASECRM_ACCESS_TOKEN") { raise '"BASECRM_ACCESS_TOKEN" has not been found.' }
812
end

0 commit comments

Comments
 (0)