delayed_job 4.1.13 → 4.2.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: 43e384d153214d0d03705b22c26d52b1f0a42d49c493c7ab0a5eed59e408851a
4
- data.tar.gz: 49359f19f8c9834261f70994f89e656c6e532b4a018b1c7b8daea2880d7c351b
3
+ metadata.gz: ae0a826ebddefa73dc33ce40c1fb057cda95951144e347835ca17829ead8c8f5
4
+ data.tar.gz: 2fcd3abb457bcdf72b31247dbb76fd77646a1530a2fdceed10d31e061f14e6f1
5
5
  SHA512:
6
- metadata.gz: 212ee115ce11b730c70c25ab4888e8849ba2642bd7027d83d1e7b50f24ad7b683c5a013a6109ebc9b23e0ad551a8caa4b8d91540f339d0dbfe7b164933e7855b
7
- data.tar.gz: ee66c64bde7c0ec4bddc57b84ae46afe83c8f42f6425d44d84e54d535caeb3f1913647d519b5be02304a884f2540e417500ae3a747bc450d57dfdab9c6f1d45d
6
+ metadata.gz: a5ac2118e954f040b0820a2ba7d06b51fb3c1cd420e671b0d7af6d69918fe5279f80a44183ee1d2b5d67a9b5b155f76c5b183e828aeb11793a016d13d3ed7c5e
7
+ data.tar.gz: f075ae005041db3928fc2edf4f044834db426bf816841fc443ddfd29a5f27037a78d41a1fe9f948200ee0fb7ffee79ed4e75b8067b415e30697b1d464bb31f2c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ 4.2.0 - 2025-12-29
2
+ =======================
3
+ * Add dependencies for benchmark and logger which are moving out of stdlib.
4
+ * Pull ActiveJob adapter from rails into DJ for future rails release.
5
+ * Add Ruby 4.0 and Rails 8.1 to test matrix.
6
+
1
7
  4.1.13 - 2024-11-08
2
8
  =======================
3
9
  * Enable Rails 8
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  **If you're viewing this at https://github.com/collectiveidea/delayed_job,
2
2
  you're reading the documentation for the master branch.
3
3
  [View documentation for the latest release
4
- (4.1.13).](https://github.com/collectiveidea/delayed_job/tree/v4.1.13)**
4
+ (4.2.0).](https://github.com/collectiveidea/delayed_job/tree/v4.2.0)**
5
5
 
6
6
  Delayed::Job
7
7
  ============
data/delayed_job.gemspec CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.add_dependency 'activesupport', ['>= 3.0', '< 9.0']
5
+ spec.add_dependency 'benchmark'
6
+ spec.add_dependency 'logger'
5
7
  spec.authors = ['Brandon Keepers', 'Brian Ryckbost', 'Chris Gaffney', 'David Genord II', 'Erik Michaels-Ober', 'Matt Griffin', 'Steve Richert', 'Tobias Lütke']
6
8
  spec.description = 'Delayed_job (or DJ) encapsulates the common pattern of asynchronously executing longer tasks in the background. It is a direct extraction from Shopify where the job table is responsible for a multitude of core tasks.'
7
9
  spec.email = ['brian@collectiveidea.com']
@@ -13,7 +15,7 @@ Gem::Specification.new do |spec|
13
15
  spec.require_paths = ['lib']
14
16
  spec.summary = 'Database-backed asynchronous priority queue system -- Extracted from Shopify'
15
17
  spec.test_files = Dir.glob('spec/**/*')
16
- spec.version = '4.1.13'
18
+ spec.version = '4.2.0'
17
19
  spec.metadata = {
18
20
  'changelog_uri' => 'https://github.com/collectiveidea/delayed_job/blob/master/CHANGELOG.md',
19
21
  'bug_tracker_uri' => 'https://github.com/collectiveidea/delayed_job/issues',
@@ -0,0 +1,52 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+
3
+ module ActiveJob
4
+ module QueueAdapters
5
+ # = Delayed Job adapter for Active Job
6
+ #
7
+ # To use Delayed Job, set the queue_adapter config to +:delayed_job+.
8
+ #
9
+ # Rails.application.config.active_job.queue_adapter = :delayed_job
10
+ class DelayedJobAdapter < ::ActiveJob::QueueAdapters::AbstractAdapter
11
+ def enqueue(job)
12
+ delayed_job = Delayed::Job.enqueue(JobWrapper.new(job.serialize), :queue => job.queue_name, :priority => job.priority)
13
+ job.provider_job_id = delayed_job.id
14
+ delayed_job
15
+ end
16
+
17
+ def enqueue_at(job, timestamp)
18
+ delayed_job = Delayed::Job.enqueue(JobWrapper.new(job.serialize), :queue => job.queue_name, :priority => job.priority, :run_at => Time.at(timestamp))
19
+ job.provider_job_id = delayed_job.id
20
+ delayed_job
21
+ end
22
+
23
+ class JobWrapper
24
+ attr_accessor :job_data
25
+
26
+ def initialize(job_data)
27
+ @job_data = job_data
28
+ end
29
+
30
+ def display_name
31
+ base_name = "#{job_data['job_class']} [#{job_data['job_id']}] from DelayedJob(#{job_data['queue_name']})"
32
+
33
+ return base_name unless log_arguments?
34
+
35
+ "#{base_name} with arguments: #{job_data['arguments']}"
36
+ end
37
+
38
+ def perform
39
+ Base.execute(job_data)
40
+ end
41
+
42
+ private
43
+
44
+ def log_arguments?
45
+ job_data['job_class'].constantize.log_arguments?
46
+ rescue NameError
47
+ false
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -3,6 +3,15 @@ require 'rails'
3
3
 
4
4
  module Delayed
5
5
  class Railtie < Rails::Railtie
6
+ initializer 'delayed_job.active_job' do
7
+ ActiveSupport.on_load(:active_job) do
8
+ # Use Rails packaged adpater if present
9
+ unless defined?(ActiveJob::QueueAdapters::DelayedJobAdapter)
10
+ require 'active_job/queue_adapters/delayed_job_adapter'
11
+ end
12
+ end
13
+ end
14
+
6
15
  initializer :after_initialize do
7
16
  Delayed::Worker.logger ||= if defined?(Rails)
8
17
  Rails.logger
@@ -0,0 +1,110 @@
1
+ require 'helper'
2
+
3
+ if ActiveSupport.gem_version >= Gem::Version.new('8.1.0.alpha')
4
+ require 'active_job'
5
+ require 'concurrent'
6
+ end
7
+
8
+ describe 'a Rails active job backend' do
9
+ before do
10
+ if ActiveSupport.gem_version < Gem::Version.new('8.1.0.alpha')
11
+ skip("Bundled adapter used in #{ActiveSupport.gem_version}")
12
+ end
13
+ end
14
+
15
+ if ActiveSupport.gem_version >= Gem::Version.new('8.1.0.alpha')
16
+ module JobBuffer
17
+ @values = Concurrent::Array.new
18
+
19
+ class << self
20
+ def clear
21
+ @values.clear
22
+ end
23
+
24
+ def add(value)
25
+ @values << value
26
+ end
27
+
28
+ def values
29
+ @values.dup
30
+ end
31
+ end
32
+ end
33
+
34
+ class TestJob < ActiveJob::Base
35
+ queue_as :integration_tests
36
+
37
+ def perform(message)
38
+ JobBuffer.add(message)
39
+ end
40
+ end
41
+ end
42
+
43
+ let(:worker) { Delayed::Worker.new(:sleep_delay => 0.5, :queues => %w[integration_tests]) }
44
+
45
+ before do
46
+ JobBuffer.clear
47
+ Delayed::Job.delete_all
48
+ ActiveJob::Base.queue_adapter = :delayed_job
49
+ ActiveJob::Base.logger = nil
50
+ end
51
+
52
+ it 'should supply a wrapped class name to DelayedJob' do
53
+ TestJob.perform_later
54
+ job = Delayed::Job.all.last
55
+ expect(job.name).to match(/TestJob \[[0-9a-f-]+\] from DelayedJob\(integration_tests\) with arguments: \[\]/)
56
+ end
57
+
58
+ it 'enqueus and executes the job' do
59
+ TestJob.perform_later('Rails')
60
+ worker.work_off
61
+ expect(JobBuffer.values).to eq(['Rails'])
62
+ end
63
+
64
+ it 'should queue the job on the correct queue' do
65
+ old_queue = TestJob.queue_name
66
+ begin
67
+ TestJob.queue_as :some_other_queue
68
+ TestJob.perform_later 'Rails'
69
+ expect(Delayed::Job.all.last.queue).to eq('some_other_queue')
70
+ ensure
71
+ TestJob.queue_name = old_queue
72
+ end
73
+ end
74
+
75
+ it 'runs multiple queued jobs' do
76
+ ActiveJob.perform_all_later(TestJob.new('Rails'), TestJob.new('World'))
77
+ worker.work_off
78
+ expect(JobBuffer.values).to eq(%w[Rails World])
79
+ end
80
+
81
+ it 'should not run job enqueued in the future' do
82
+ TestJob.set(:wait => 5.seconds).perform_later('Rails')
83
+
84
+ worker.work_off
85
+
86
+ expect(JobBuffer.values.empty?).to eq true
87
+ end
88
+
89
+ it 'should run job enqueued in the future at the specified time' do
90
+ TestJob.set(:wait => 5.seconds).perform_later('Rails')
91
+
92
+ expect(Delayed::Job.all.last.run_at).to within(1.second).of(5.seconds.from_now)
93
+ end
94
+
95
+ it 'should run job bulk enqueued in the future at the specified time' do
96
+ ActiveJob.perform_all_later([TestJob.new('Rails').set(:wait => 5.seconds)])
97
+
98
+ expect(Delayed::Job.all.last.run_at).to within(1.second).of(5.seconds.from_now)
99
+ end
100
+
101
+ it 'should run job with higher priority first' do
102
+ wait_until = Time.now
103
+ TestJob.set(:wait_until => wait_until, :priority => 20).perform_later '1'
104
+ TestJob.set(:wait_until => wait_until, :priority => 10).perform_later '2'
105
+
106
+ worker.work_off
107
+
108
+ expect(JobBuffer.values).to eq(%w[2 1])
109
+ end
110
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.13
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Keepers
@@ -12,10 +12,9 @@ authors:
12
12
  - Matt Griffin
13
13
  - Steve Richert
14
14
  - Tobias Lütke
15
- autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
- date: 2024-11-08 00:00:00.000000000 Z
17
+ date: 1980-01-02 00:00:00.000000000 Z
19
18
  dependencies:
20
19
  - !ruby/object:Gem::Dependency
21
20
  name: activesupport
@@ -37,6 +36,34 @@ dependencies:
37
36
  - - "<"
38
37
  - !ruby/object:Gem::Version
39
38
  version: '9.0'
39
+ - !ruby/object:Gem::Dependency
40
+ name: benchmark
41
+ requirement: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: logger
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
40
67
  description: Delayed_job (or DJ) encapsulates the common pattern of asynchronously
41
68
  executing longer tasks in the background. It is a direct extraction from Shopify
42
69
  where the job table is responsible for a multitude of core tasks.
@@ -56,6 +83,7 @@ files:
56
83
  - contrib/delayed_job_rails_4.monitrc
57
84
  - contrib/delayed_job_rails_4_multiple.monitrc
58
85
  - delayed_job.gemspec
86
+ - lib/active_job/queue_adapters/delayed_job_adapter.rb
59
87
  - lib/delayed/backend/base.rb
60
88
  - lib/delayed/backend/job_preparer.rb
61
89
  - lib/delayed/backend/shared_spec.rb
@@ -81,6 +109,7 @@ files:
81
109
  - lib/generators/delayed_job/delayed_job_generator.rb
82
110
  - lib/generators/delayed_job/templates/script
83
111
  - recipes/delayed_job.rb
112
+ - spec/active_job_adapter_spec.rb
84
113
  - spec/autoloaded/clazz.rb
85
114
  - spec/autoloaded/instance_clazz.rb
86
115
  - spec/autoloaded/instance_struct.rb
@@ -106,7 +135,6 @@ metadata:
106
135
  changelog_uri: https://github.com/collectiveidea/delayed_job/blob/master/CHANGELOG.md
107
136
  bug_tracker_uri: https://github.com/collectiveidea/delayed_job/issues
108
137
  source_code_uri: https://github.com/collectiveidea/delayed_job
109
- post_install_message:
110
138
  rdoc_options: []
111
139
  require_paths:
112
140
  - lib
@@ -121,11 +149,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
149
  - !ruby/object:Gem::Version
122
150
  version: '0'
123
151
  requirements: []
124
- rubygems_version: 3.5.22
125
- signing_key:
152
+ rubygems_version: 4.0.3
126
153
  specification_version: 4
127
154
  summary: Database-backed asynchronous priority queue system -- Extracted from Shopify
128
155
  test_files:
156
+ - spec/active_job_adapter_spec.rb
129
157
  - spec/autoloaded/clazz.rb
130
158
  - spec/autoloaded/instance_clazz.rb
131
159
  - spec/autoloaded/instance_struct.rb