routemaster-drain 3.6.8 → 3.7.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: 431caa4e0158fa1ac795d6feeaa81b96c8e2fe4e
4
- data.tar.gz: cceb454d55e593655e39131e7f127a7592101368
2
+ SHA256:
3
+ metadata.gz: 91d53145809f5384fe911262c83306264381e1915ce6b6aef4a7de3299fd8eee
4
+ data.tar.gz: 2a7860c5a46d018aa7e10d82aad853066e5daf5851b6deba44e900985c7218c3
5
5
  SHA512:
6
- metadata.gz: f6b4be9f06e085159e29bf2b53bbf171acb04fece4f740482cb28915545788ef77bd94290d85e024fac0b96d1183c5e54e95a0a27ba6496725ea06e119d6c127
7
- data.tar.gz: 677d45ad6541d7301132e90f2e9516131d2c0559ddda86c61b9c2c4270a405202974f26096030fe082019331e3ce786767d64aa6f7d13d5a34b9a30745e8c2dd
6
+ metadata.gz: 4119a30f7b34f48fcca01432718968523f71ebc9b298c78b6aa1d162c48108db631622ce94ec1859c5715642aa554f009b216cdf016b5391945722302a45ae42
7
+ data.tar.gz: fa0f8e231efdc36f2bf1f88e0a6a8f9cc14ae3b494761756317cc1924b8f8e505f2e6ca3651132a2e3e2bcddc313071b66523d4626308c324fa8722556ab6ebc
data/.circleci/config.yml CHANGED
@@ -3,7 +3,6 @@
3
3
 
4
4
  version: 2
5
5
  jobs:
6
-
7
6
  build_2.5_rails_5:
8
7
  docker:
9
8
  - image: circleci/ruby:2.4.1
@@ -19,9 +18,9 @@ jobs:
19
18
 
20
19
  - restore_cache:
21
20
  keys:
22
- - v2-bundle-2.5.0-rails_5-{{ .Branch }}
23
- - v2-bundle-2.5.0-rails_5
24
- - v2-bundle-2.5.0
21
+ - v3-bundle-2.5.0-rails_5-{{ .Branch }}
22
+ - v3-bundle-2.5.0-rails_5
23
+ - v3-bundle-2.5.0
25
24
 
26
25
  - run:
27
26
  name: Install dependencies
@@ -36,22 +35,65 @@ jobs:
36
35
  bundle exec rspec
37
36
 
38
37
  - save_cache:
39
- key: v2-bundle-2.5.0-rails_5-{{ .Branch }}
38
+ key: v3-bundle-2.5.0-rails_5-{{ .Branch }}
40
39
  paths:
41
40
  - ~/project/vendor/bundle
42
41
  - save_cache:
43
- key: v2-bundle-2.5.0-rails_5
42
+ key: v3-bundle-2.5.0-rails_5
44
43
  paths:
45
44
  - ~/project/vendor/bundle
46
45
  - save_cache:
47
- key: v2-bundle-2.5.0
46
+ key: v3-bundle-2.5.0
48
47
  paths:
49
48
  - ~/project/vendor/bundle
50
49
 
50
+ build_2.7_rails_6:
51
+ docker:
52
+ - image: circleci/ruby:2.7.4
53
+ - image: redis:6-alpine
54
+ steps:
55
+ - checkout
56
+
57
+ - run:
58
+ name: Install bundler
59
+ command: |
60
+ gem install bundler -v '~> 2' ;
61
+ bundle config --local gemfile $PWD/gemfiles/rails_6.gemfile
62
+
63
+ - restore_cache:
64
+ keys:
65
+ - bundle-2.7.4-rails_6-{{ .Branch }}
66
+ - bundle-2.7.4-rails_6
67
+ - bundle-2.7.4
68
+
69
+ - run:
70
+ name: Install dependencies
71
+ command: |
72
+ bundle install --jobs=3 --retry=3 --path=$PWD/vendor/bundle
73
+
74
+ - run:
75
+ name: Run test suite
76
+ command: |
77
+ unset RACK_ENV &&
78
+ unset RAILS_ENV &&
79
+ bundle exec rspec
80
+
81
+ - save_cache:
82
+ key: bundle-2.7.4-rails_6-{{ .Branch }}
83
+ paths:
84
+ - ~/project/vendor/bundle
85
+ - save_cache:
86
+ key: bundle-2.7.4-rails_6
87
+ paths:
88
+ - ~/project/vendor/bundle
89
+ - save_cache:
90
+ key: bundle-2.7.4
91
+ paths:
92
+ - ~/project/vendor/bundle
51
93
 
52
94
  workflows:
53
95
  version: 2
54
96
  test:
55
97
  jobs:
56
98
  - build_2.5_rails_5
57
-
99
+ - build_2.7_rails_6
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  _A description of your awesome changes here!_
4
4
 
5
+ ### 3.7.0
6
+
7
+ Features:
8
+
9
+ - Adds circuit breaker to PATCH PUT POST requests (#66)
10
+
5
11
  ### 3.6.8
6
12
 
7
13
  Features:
@@ -0,0 +1,24 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "psych", :require => false
6
+ gem "bundler", :require => false
7
+ gem "rake", :require => false
8
+ gem "webmock", :require => false
9
+ gem "rack-test", :require => false
10
+ gem "dotenv", :require => false
11
+ gem "simplecov", :require => false
12
+ gem "codecov", :require => false
13
+ gem "resque", :require => false
14
+ gem "sidekiq", :require => false
15
+ gem "guard-rspec", :require => false
16
+ gem "pry", :require => false
17
+ gem "byebug", :require => false
18
+ gem "rspec", :require => false
19
+ gem "appraisal", :require => false
20
+ gem "dogstatsd", :require => false
21
+ gem "fork_break", :require => false
22
+ gem "rails", "~> 6.0"
23
+
24
+ gemspec :path => "../"
@@ -99,11 +99,13 @@ module Routemaster
99
99
  private
100
100
 
101
101
  def patch_post_or_put(type, url, body, headers)
102
- _wrapped_response _request(
103
- type,
104
- url: url,
105
- body: body,
106
- headers: headers)
102
+ APIClientCircuit.new(url).call do
103
+ _wrapped_response _request(
104
+ type,
105
+ url: url,
106
+ body: body,
107
+ headers: headers)
108
+ end
107
109
  end
108
110
 
109
111
  def _assert_uri(url)
@@ -25,7 +25,6 @@ module Routemaster
25
25
  ENV.fetch('ROUTEMASTER_ENABLE_API_CLIENT_CIRCUIT', 'NO') =~ /\A(YES|TRUE|ON|1)\Z/i
26
26
  end
27
27
 
28
-
29
28
  def circuit
30
29
  Circuitbox.circuit(@circuit_name, {
31
30
  sleep_window: configuration_setting(@circuit_name, 'ROUTEMASTER_CIRCUIT_BREAKER_SLEEP_WINDOW', 60).to_i,
@@ -1,5 +1,5 @@
1
1
  module Routemaster
2
2
  module Drain
3
- VERSION = '3.6.8'.freeze
3
+ VERSION = '3.7.0'.freeze
4
4
  end
5
5
  end
@@ -1,17 +1,19 @@
1
1
  require 'core_ext/forwardable'
2
2
 
3
- describe Forwardable do
4
- class Foo
5
- extend Forwardable
3
+ if RUBY_VERSION == '2.4.0'
4
+ describe Forwardable do
5
+ class Foo
6
+ extend Forwardable
6
7
 
7
- def initialize
8
- @bar = :bar
9
- end
8
+ def initialize
9
+ @bar = :bar
10
+ end
10
11
 
11
- def_delegator :@bar, :to_s, :qux
12
- end
12
+ def_delegator :@bar, :to_s, :qux
13
+ end
13
14
 
14
- it 'expect delegation to work' do
15
- expect(Foo.new.qux).to eq 'bar'
15
+ it 'expect delegation to work' do
16
+ expect(Foo.new.qux).to eq 'bar'
17
+ end
16
18
  end
17
19
  end
@@ -12,7 +12,10 @@ describe Routemaster::APIClientCircuit do
12
12
  context "when enabled" do
13
13
  before do
14
14
  sb_req
15
- allow_any_instance_of(described_class).to receive(:enabled?){ true }
15
+ allow(ENV).to receive(:fetch).and_call_original
16
+ allow(ENV)
17
+ .to receive(:fetch)
18
+ .with('ROUTEMASTER_ENABLE_API_CLIENT_CIRCUIT', 'NO').and_return('YES')
16
19
  end
17
20
 
18
21
  let(:url){ 'http://example.com/foobar' }
@@ -109,10 +109,38 @@ describe Routemaster::APIClient do
109
109
  end
110
110
  end
111
111
 
112
+ shared_examples 'a circuit breaker wrapped request' do
113
+ let(:fetcher) { described_class.new(retry_attempts: 0) }
114
+ let(:url) { 'https://circuit.example.com/circuit/132' }
115
+ let(:method) { :get }
116
+
117
+ before do
118
+ allow(ENV).to receive(:fetch).and_call_original
119
+ allow(ENV)
120
+ .to receive(:fetch)
121
+ .with('ROUTEMASTER_ENABLE_API_CLIENT_CIRCUIT', 'NO').and_return('YES')
122
+ allow(ENV)
123
+ .to receive(:fetch)
124
+ .with('ROUTEMASTER_CIRCUIT_BREAKER_ERROR_THRESHOLD', 50).and_return('1')
125
+ allow(ENV)
126
+ .to receive(:fetch)
127
+ .with('ROUTEMASTER_CIRCUIT_BREAKER_VOLUME_THRESHOLD', 50).and_return('1')
128
+
129
+ stub_request(method, url).to_timeout
130
+ end
131
+
132
+ it 'trips after the second request' do
133
+ 5.times { expect { subject }.to raise_error StandardError }
134
+ expect(a_request(method, url)).to have_been_made.at_most_times(2)
135
+ end
136
+ end
137
+
112
138
  describe '#get' do
113
139
  subject { fetcher.get(url, headers: headers) }
140
+
114
141
  it_behaves_like 'a GET requester'
115
142
  it_behaves_like 'a wrappable response'
143
+ it_behaves_like 'a circuit breaker wrapped request'
116
144
  end
117
145
 
118
146
  describe '#fget' do
@@ -183,6 +211,9 @@ describe Routemaster::APIClient do
183
211
  end
184
212
 
185
213
  it_behaves_like 'a wrappable response'
214
+ it_behaves_like 'a circuit breaker wrapped request' do
215
+ let(:method) { :post }
216
+ end
186
217
  end
187
218
 
188
219
  describe '#put' do
@@ -206,6 +237,9 @@ describe Routemaster::APIClient do
206
237
  end
207
238
 
208
239
  it_behaves_like 'a wrappable response'
240
+ it_behaves_like 'a circuit breaker wrapped request' do
241
+ let(:method) { :put }
242
+ end
209
243
  end
210
244
 
211
245
  context 'when request times out' do
@@ -282,6 +316,9 @@ describe Routemaster::APIClient do
282
316
  end
283
317
 
284
318
  it_behaves_like 'a wrappable response'
319
+ it_behaves_like 'a circuit breaker wrapped request' do
320
+ let(:method) { :patch }
321
+ end
285
322
  end
286
323
 
287
324
  context 'when request times out' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: routemaster-drain
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.8
4
+ version: 3.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Letessier
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-21 00:00:00.000000000 Z
11
+ date: 2021-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -164,7 +164,7 @@ dependencies:
164
164
  - - '='
165
165
  - !ruby/object:Gem::Version
166
166
  version: 1.0.0
167
- description:
167
+ description:
168
168
  email:
169
169
  - julien.letessier@gmail.com
170
170
  executables: []
@@ -193,6 +193,7 @@ files:
193
193
  - gemfiles/rails_3.gemfile
194
194
  - gemfiles/rails_4.gemfile
195
195
  - gemfiles/rails_5.gemfile
196
+ - gemfiles/rails_6.gemfile
196
197
  - lib/core_ext/forwardable.rb
197
198
  - lib/routemaster/api_client.rb
198
199
  - lib/routemaster/api_client_circuit.rb
@@ -285,7 +286,7 @@ homepage: http://github.com/deliveroo/routemaster-drain
285
286
  licenses:
286
287
  - MIT
287
288
  metadata: {}
288
- post_install_message:
289
+ post_install_message:
289
290
  rdoc_options: []
290
291
  require_paths:
291
292
  - lib
@@ -300,9 +301,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
300
301
  - !ruby/object:Gem::Version
301
302
  version: '0'
302
303
  requirements: []
303
- rubyforge_project:
304
- rubygems_version: 2.6.11
305
- signing_key:
304
+ rubygems_version: 3.0.9
305
+ signing_key:
306
306
  specification_version: 4
307
307
  summary: Event receiver for the Routemaster bus
308
308
  test_files: