activejob-retry 0.6.0 → 0.6.1

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