delayed 0.7.2 → 0.8.0

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
  SHA256:
3
- metadata.gz: ea752ae23dd7aee646bcd0be946a7e414c328c4323dc4a2f34d0ee2106c36364
4
- data.tar.gz: 6b2509d426b6e7dd25340fde6a3ff4ccfea88fbf15d53d91a1724629ff21c170
3
+ metadata.gz: 6268c514bb90e5279b8265c4ce21eea8262ac4d539ff161c7f9eab12f15f17ba
4
+ data.tar.gz: eb0c1f81475163766a680eab603740a4632956fb415e4158430a67bb3998c381
5
5
  SHA512:
6
- metadata.gz: 015dd62d37946fd70411776f89a6d96850b76a1f3d54a280d38ff82d816b0ab0532b673309ace4882575b443a9ce1244e8a053a82d25413d2217213d3c72284f
7
- data.tar.gz: 5dcd12088fb0bbe76abe2559a35aa53a6b90155fe22dd992033b31f12f63b0d572ec8ba2b87d2ad418837dc25ebaeecd1a558108e8cf74f08081c11435ddcafb
6
+ metadata.gz: 73686b95d83b336dcf268f4524fb8b512e64f61b58773b0884e8f1a4c30abc89532aaa0df4e1395d69417d2062ae7e948157c7cd5b3b7cb80982c68dbf798936
7
+ data.tar.gz: 9f3b7437e5772e0fe44b3f168cd32b78073b6c49b2fc208b713d946d4b48f14549646363856e3d62a7525059a7d841fbe0191a520af3dc06a71e3d258679b68e
@@ -140,6 +140,7 @@ module Delayed
140
140
  attr_reader :value
141
141
 
142
142
  delegate :to_i, to: :value
143
+ delegate :to_f, to: :value
143
144
  delegate :to_s, to: :name
144
145
 
145
146
  def initialize(value)
@@ -142,17 +142,17 @@ module Delayed
142
142
  job.destroy
143
143
  end
144
144
  job_say job, format('COMPLETED after %.4f seconds', run_time)
145
+ true # did work
146
+ rescue DeserializationError => e
147
+ job_say job, "FAILED permanently with #{e.class.name}: #{e.message}", 'error'
148
+
149
+ job.error = e
150
+ failed(job)
151
+ false # work failed
152
+ rescue Exception => e # rubocop:disable Lint/RescueException
153
+ self.class.lifecycle.run_callbacks(:error, self, job) { handle_failed_job(job, e) }
154
+ false # work failed
145
155
  end
146
- true # did work
147
- rescue DeserializationError => e
148
- job_say job, "FAILED permanently with #{e.class.name}: #{e.message}", 'error'
149
-
150
- job.error = e
151
- failed(job)
152
- false # work failed
153
- rescue Exception => e # rubocop:disable Lint/RescueException
154
- self.class.lifecycle.run_callbacks(:error, self, job) { handle_failed_job(job, e) }
155
- false # work failed
156
156
  end
157
157
 
158
158
  # Reschedule the job in the future (when a job fails).
@@ -207,6 +207,13 @@ RSpec.describe Delayed::Priority do
207
207
  expect(described_class.new(101)).to eq described_class.new(101) # rubocop:disable RSpec/IdenticalEqualityAssertion
208
208
  end
209
209
 
210
+ it 'supports explicit casting' do
211
+ expect(described_class.new(0).to_i).to eq 0
212
+ expect(described_class.new(3).to_f).to eq 3.0
213
+ expect(described_class.new(10).to_s).to eq 'user_visible'
214
+ expect(described_class.new(:eventual).to_d).to eq '20'.to_d
215
+ end
216
+
210
217
  it 'suports coercion' do
211
218
  expect(described_class.new(0)).to eq 0
212
219
  expect(described_class.new(8)).to be > 5
data/spec/worker_spec.rb CHANGED
@@ -239,5 +239,35 @@ describe Delayed::Worker do
239
239
 
240
240
  expect(performances.value).to eq(1)
241
241
  end
242
+
243
+ it 'wraps perform and cleanup, even when perform raises' do
244
+ events = []
245
+ last_error = nil
246
+
247
+ plugin = Class.new(Delayed::Plugin) do
248
+ callbacks do |lifecycle|
249
+ lifecycle.around(:thread) do |_, &blk|
250
+ events << :thread_start
251
+ blk.call
252
+ events << :thread_end
253
+ end
254
+ lifecycle.around(:perform) do |_, job, &blk|
255
+ events << :perform_start
256
+ blk.call.tap do
257
+ last_error = job.last_error
258
+ events << :perform_end
259
+ end
260
+ end
261
+ end
262
+ end
263
+
264
+ Delayed.plugins << plugin
265
+
266
+ Delayed::Job.enqueue ErrorJob.new
267
+ described_class.new.work_off
268
+
269
+ expect(events).to eq %i(thread_start perform_start perform_end thread_end)
270
+ expect(last_error).to match(/did not work/) # assert that cleanup happened before `:perform_end`
271
+ end
242
272
  end
243
273
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Griffith
@@ -18,7 +18,7 @@ authors:
18
18
  - Tobias Lütke
19
19
  bindir: bin
20
20
  cert_chain: []
21
- date: 2025-04-02 00:00:00.000000000 Z
21
+ date: 2025-04-03 00:00:00.000000000 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
24
  name: activerecord