Skip to content
This repository was archived by the owner on Mar 13, 2024. It is now read-only.

Commit a2ecdab

Browse files
authored
Merge pull request #5 from mbaydin/feature/UCMS-10933-faraday
[UCMS-10933][B] OneCMS, BebopAPI: Вынести FaradayWithRetries в unity-utils
2 parents a36186c + afb80fb commit a2ecdab

File tree

6 files changed

+110
-2
lines changed

6 files changed

+110
-2
lines changed

Gemfile.lock

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
PATH
22
remote: .
33
specs:
4-
unity-utils (0.1.2)
4+
unity-utils (0.3.0)
55
activesupport (>= 4.2)
6+
faraday (>= 1.0, < 1.4)
7+
rspec-core (>= 3.9)
68
ruby-progressbar (>= 1.11.0)
79

810
GEM
@@ -17,10 +19,16 @@ GEM
1719
coderay (1.1.3)
1820
concurrent-ruby (1.2.2)
1921
diff-lcs (1.4.4)
22+
faraday (1.3.1)
23+
faraday-net_http (~> 1.0)
24+
multipart-post (>= 1.2, < 3)
25+
ruby2_keywords (>= 0.0.4)
26+
faraday-net_http (1.0.1)
2027
i18n (1.14.1)
2128
concurrent-ruby (~> 1.0)
2229
method_source (1.0.0)
2330
minitest (5.19.0)
31+
multipart-post (2.3.0)
2432
parallel (1.23.0)
2533
parser (3.2.2.3)
2634
ast (~> 2.4.1)
@@ -57,6 +65,7 @@ GEM
5765
rubocop-ast (1.29.0)
5866
parser (>= 3.2.1.0)
5967
ruby-progressbar (1.11.0)
68+
ruby2_keywords (0.0.5)
6069
tzinfo (2.0.6)
6170
concurrent-ruby (~> 1.0)
6271
unicode-display_width (2.4.2)

lib/unity/utils.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88

99
# Utils
1010
require_relative 'utils/ci_formatter'
11+
require_relative 'utils/faraday_with_retries'
1112
require_relative 'utils/retrier'
1213
require_relative 'utils/thread_pool'
1314
require_relative 'utils/url_formatter'
1415
require_relative 'utils/url_validator'
1516

17+
1618
I18n.load_path += Dir[File.join(File.dirname(__FILE__), 'config/locales/*.yml')]
1719

1820
module Unity
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# frozen_string_literal: true
2+
3+
# Faraday connection inintializer.
4+
# It creates `Faraday::Connection` object with pre-defined retries.
5+
module Unity
6+
module Utils
7+
require 'faraday'
8+
9+
class FaradayWithRetries
10+
DEFAULT_EXCEPTIONS = [
11+
*(Faraday::Request::Retry::DEFAULT_EXCEPTIONS if defined?(Faraday::Request::Retry)),
12+
Faraday::TimeoutError, Faraday::ConnectionFailed
13+
].freeze
14+
15+
# @param exceptions [Array<Exception>]
16+
# @param max [Integer] retries count
17+
# @param interval [Float] in seconds
18+
# @param interval_randomness [Float] in seconds
19+
# @param backoff_factor [Integer] amount to multiplyeach successive retry's interval
20+
def initialize(exceptions: [], max: 3, interval: 1.0, interval_randomness: 0.1, backoff_factor: 1)
21+
@exceptions = exceptions.presence || DEFAULT_EXCEPTIONS
22+
23+
@max = max
24+
@interval = interval
25+
@interval_randomness = interval_randomness
26+
@backoff_factor = backoff_factor
27+
end
28+
29+
# @param url [String]
30+
# @return [Faraday::Connection]
31+
def call(url)
32+
Faraday.new(url: url) do |i|
33+
i.request(:retry,
34+
max: @max,
35+
interval: @interval,
36+
interval_randomness: @interval_randomness,
37+
backoff_factor: @backoff_factor,
38+
exceptions: @exceptions)
39+
if block_given?
40+
yield(i)
41+
else
42+
i.adapter Faraday.default_adapter
43+
end
44+
end
45+
end
46+
end
47+
end
48+
end

lib/unity/version.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# frozen_string_literal: true
2+
3+
module Unity
4+
VERSION = '0.3.0'
5+
end
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
require 'faraday'
5+
6+
RSpec.describe Unity::Utils::FaradayWithRetries do
7+
let(:instance) { described_class.new }
8+
let(:url) { nil }
9+
10+
describe 'args' do
11+
subject do
12+
instance
13+
.call(url).as_json['builder']['handlers']
14+
.find { |h| h['name'] == 'Faraday::Request::Retry' }['args']
15+
end
16+
17+
before { stub_const('Unity::Utils::FaradayWithRetries::DEFAULT_EXCEPTIONS', ['boom!']) }
18+
19+
let(:correct_args) do
20+
[{ backoff_factor: 1, interval: 1.0, interval_randomness: 0.1, max: 3,
21+
exceptions: ['boom!'] }.stringify_keys]
22+
end
23+
24+
it { is_expected.to eq(correct_args) }
25+
26+
context 'with args' do
27+
let(:instance) do
28+
described_class.new(exceptions: [ZeroDivisionError], max: 2, interval: 2.0,
29+
interval_randomness: 0.2, backoff_factor: 2)
30+
end
31+
let(:correct_args) do
32+
[{ backoff_factor: 2, interval: 2.0, interval_randomness: 0.2, max: 2,
33+
exceptions: [ZeroDivisionError] }.stringify_keys]
34+
end
35+
36+
before { stub_const('ZeroDivisionError', 'boom!') }
37+
38+
it { is_expected.to eq(correct_args) }
39+
end
40+
end
41+
end

unity-utils.gemspec

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
# frozen_string_literal: true
22

3+
require_relative 'lib/unity/version'
4+
35
Gem::Specification.new do |spec|
46
spec.name = 'unity-utils'
5-
spec.version = '0.2.0'
7+
spec.version = Unity::VERSION
68
spec.authors = ['Mikhail Georgievskiy']
79
spec.email = ['[email protected]']
810

@@ -18,6 +20,7 @@ Gem::Specification.new do |spec|
1820
spec.require_paths = ['lib']
1921

2022
spec.add_dependency 'activesupport', '>= 4.2'
23+
spec.add_dependency 'faraday', '>= 1.0', '< 1.4'
2124
spec.add_dependency 'rspec-core', '>= 3.9'
2225
spec.add_dependency 'ruby-progressbar', '>= 1.11.0'
2326
end

0 commit comments

Comments
 (0)