activejob-retry 0.6.0 → 0.6.1

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
2
  SHA1:
3
- metadata.gz: d4ed8260c84b5c95a405c8cadb2a2b0e93ba5070
4
- data.tar.gz: 1b7d2e89e1843ee73c6461374397a5e0450637c5
3
+ metadata.gz: 5a5bb27165e98b31cb047ca32c39686a3c65d999
4
+ data.tar.gz: 15d359bf6d2352c1b63f7f0729ce38ba12928a73
5
5
  SHA512:
6
- metadata.gz: 1c03c64268ed4f9a40a0d35b178e96550d24ad6b03b7cc65a1e43440845d6ff39f78fda571e5e06dcc6b83b6a736d97c9449768abca698d2bfd20830cd03d99a
7
- data.tar.gz: 64233f0b5a15269e040f5f9b306ab58cb27f437dd93fe610dc68f880b28f1758e878674aaa547479b9faac12c74820bec73714891afd743f5690f1c6db78ce5f
6
+ metadata.gz: b95cb88b0dd261c6712fdd4063e94b0ada6b7854de361df98a424cee25f64fa01b967643a18665bf5120b2e5335339f1409d094b3e39f525538ec0f01bf6f1a3
7
+ data.tar.gz: 9c8c5fe96d0d16926db4d13c05a78db0977b2d045a26b3fdea62f8f79194cc4f293221c96d84e8b97bacab0d18260b1d74938ac2a2f33c865409a3a97eb4f0bc
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activejob-retry (0.6.0)
4
+ activejob-retry (0.6.1)
5
5
  activejob (>= 4.2)
6
6
  activesupport (>= 4.2)
7
7
 
@@ -199,4 +199,4 @@ DEPENDENCIES
199
199
  sqlite3
200
200
 
201
201
  BUNDLED WITH
202
- 1.12.3
202
+ 1.12.5
@@ -44,6 +44,8 @@ module ActiveJob
44
44
  end
45
45
 
46
46
  def included(base)
47
+ klass = self
48
+ base.define_singleton_method(:inherited) { |subclass| subclass.include(klass) }
47
49
  define_backoff_strategy(base)
48
50
  define_retry_attempt_tracking(base)
49
51
  define_retry_method(base)
@@ -1,5 +1,5 @@
1
1
  module ActiveJob
2
2
  class Retry < Module
3
- VERSION = '0.6.0'.freeze
3
+ VERSION = '0.6.1'.freeze
4
4
  end
5
5
  end
@@ -12,7 +12,7 @@ RSpec.describe ActiveJob::Retry do
12
12
  end.include(retry_instance)
13
13
  end
14
14
 
15
- describe '.constant_retry' do
15
+ describe 'constant strategy' do
16
16
  let(:strategy) { :constant }
17
17
  let(:options) { { limit: 10, delay: 5 } }
18
18
 
@@ -28,9 +28,17 @@ RSpec.describe ActiveJob::Retry do
28
28
  to raise_error(ActiveJob::Retry::InvalidConfigurationError)
29
29
  end
30
30
  end
31
+
32
+ context 'subclassing' do
33
+ let(:subclass) { Class.new(job) }
34
+ it 'has the ConstantBackoffStrategy' do
35
+ expect(subclass.backoff_strategy).
36
+ to be_a(ActiveJob::Retry::ConstantBackoffStrategy)
37
+ end
38
+ end
31
39
  end
32
40
 
33
- describe '.variable_retry' do
41
+ describe 'variable strategy' do
34
42
  let(:strategy) { :variable }
35
43
  let(:options) { { delays: [0, 5, 10, 60, 200] } }
36
44
 
@@ -46,9 +54,23 @@ RSpec.describe ActiveJob::Retry do
46
54
  to raise_error(ActiveJob::Retry::InvalidConfigurationError)
47
55
  end
48
56
  end
57
+
58
+ context 'subclassing' do
59
+ let(:subclass) { Class.new(job) }
60
+ it 'has the VariableBackoffStrategy' do
61
+ expect(subclass.backoff_strategy).
62
+ to be_a(ActiveJob::Retry::VariableBackoffStrategy)
63
+ end
64
+
65
+ it 'allows overriding' do
66
+ subclass.include(described_class.new(strategy: :constant))
67
+ expect(subclass.backoff_strategy).
68
+ to be_a(ActiveJob::Retry::ConstantBackoffStrategy)
69
+ end
70
+ end
49
71
  end
50
72
 
51
- describe '.exponential_retry' do
73
+ describe 'exponential strategy' do
52
74
  let(:strategy) { :exponential }
53
75
  let(:options) { { limit: 10 } }
54
76
 
@@ -73,6 +95,14 @@ RSpec.describe ActiveJob::Retry do
73
95
  to raise_error(ActiveJob::Retry::InvalidConfigurationError)
74
96
  end
75
97
  end
98
+
99
+ context 'subclassing' do
100
+ let(:subclass) { Class.new(job) }
101
+ it 'has the ExponentialBackoffStrategy' do
102
+ expect(subclass.backoff_strategy).
103
+ to be_a(ActiveJob::Retry::ExponentialBackoffStrategy)
104
+ end
105
+ end
76
106
  end
77
107
 
78
108
  describe 'custom strategy' do
@@ -96,6 +126,13 @@ RSpec.describe ActiveJob::Retry do
96
126
  it 'sets the backoff_strategy when it is valid' do
97
127
  expect(job.backoff_strategy).to eq(CustomBackoffStrategy)
98
128
  end
129
+
130
+ context 'subclassing' do
131
+ let(:subclass) { Class.new(job) }
132
+ it 'has the CustomBackoffStrategy' do
133
+ expect(subclass.backoff_strategy).to eq(strategy)
134
+ end
135
+ end
99
136
  end
100
137
 
101
138
  describe '#serialize' do
@@ -115,6 +152,26 @@ RSpec.describe ActiveJob::Retry do
115
152
  before { instance.instance_variable_set(:@retry_attempt, 7) }
116
153
  it { is_expected.to include('retry_attempt' => 7) }
117
154
  end
155
+
156
+ context 'when inherited' do
157
+ let(:subclass) { Class.new(job) }
158
+ let(:instance) { subclass.new }
159
+ subject { instance.serialize }
160
+
161
+ context 'first instantiated' do
162
+ it { is_expected.to include('retry_attempt' => 1) }
163
+ end
164
+
165
+ context '1st attempt' do
166
+ before { instance.instance_variable_set(:@retry_attempt, 1) }
167
+ it { is_expected.to include('retry_attempt' => 1) }
168
+ end
169
+
170
+ context '7th attempt' do
171
+ before { instance.instance_variable_set(:@retry_attempt, 7) }
172
+ it { is_expected.to include('retry_attempt' => 7) }
173
+ end
174
+ end
118
175
  end
119
176
 
120
177
  describe '#deserialize' do
@@ -151,6 +208,43 @@ RSpec.describe ActiveJob::Retry do
151
208
  its(:arguments) { is_expected.to eq(['arg1', { 'arg' => 2 }]) }
152
209
  its(:retry_attempt) { is_expected.to eq(7) }
153
210
  end
211
+
212
+ context 'when subclassing' do
213
+ let(:subclass) { Class.new(job) }
214
+ subject(:instance) { subclass.new }
215
+ before { instance.deserialize(job_data) }
216
+ before { instance.send(:deserialize_arguments_if_needed) }
217
+
218
+ context '1st attempt' do
219
+ let(:job_data) do
220
+ {
221
+ 'job_class' => 'SomeJob',
222
+ 'job_id' => 'uuid',
223
+ 'arguments' => ['arg1', { 'arg' => 2 }],
224
+ 'retry_attempt' => 1
225
+ }
226
+ end
227
+
228
+ its(:job_id) { is_expected.to eq('uuid') }
229
+ its(:arguments) { is_expected.to eq(['arg1', { 'arg' => 2 }]) }
230
+ its(:retry_attempt) { is_expected.to eq(1) }
231
+ end
232
+
233
+ context '7th attempt' do
234
+ let(:job_data) do
235
+ {
236
+ 'job_class' => 'SomeJob',
237
+ 'job_id' => 'uuid',
238
+ 'arguments' => ['arg1', { 'arg' => 2 }],
239
+ 'retry_attempt' => 7
240
+ }
241
+ end
242
+
243
+ its(:job_id) { is_expected.to eq('uuid') }
244
+ its(:arguments) { is_expected.to eq(['arg1', { 'arg' => 2 }]) }
245
+ its(:retry_attempt) { is_expected.to eq(7) }
246
+ end
247
+ end
154
248
  end
155
249
 
156
250
  describe '#rescue_with_handler' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activejob-retry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Isaac Seymour
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-18 00:00:00.000000000 Z
11
+ date: 2016-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activejob