sidekiq-deferred_jobs 1.0.0 → 1.0.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 +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +3 -4
- data/VERSION +1 -1
- data/lib/sidekiq/deferred_jobs.rb +19 -8
- data/lib/sidekiq/deferred_jobs_ext.rb +15 -0
- data/sidekiq-deferred_jobs.gemspec +7 -0
- metadata +9 -9
- /data/{MIT-LICENSE → MIT-LICENSE.txt} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e4232cb827ec1a6bd2f218f34ac5b7f3a0b175a0a4dd34841633605d669bfb16
|
|
4
|
+
data.tar.gz: 3db11095242ca521612cae0b91e1b20abf5fb0676b5fa8f75d0220ab9fa8e8c6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2d8f9ebdad90e5641e6d96c8356ce83e9aad680203f51eb3f0ca933a5d2384f5a52c29d55af0b1fb51ee5e67de9e9a51e085408ce2e56be90b834d95ffdf7279
|
|
7
|
+
data.tar.gz: 6ee5fc3e3a76a7cd4e7fd96d642fab6664a831d5801240fb0614fe03738f43c0ab6108628478191a9f9a3cd231b7d6dffeb4e9c2d25ba76cd917c19b14223090
|
data/CHANGELOG.md
CHANGED
|
@@ -4,7 +4,14 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## 1.0.1
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- Update code to override Sidekiq::Job if it is defined, otherwise override Sidekiq::Worker. This doesn't impact functionality, but is more compatible with modern Sidekiq versions since Sidekiq::Worker is discouraged since version 6.3.
|
|
12
|
+
|
|
7
13
|
## 1.0.0
|
|
8
14
|
|
|
9
15
|
### Added
|
|
16
|
+
|
|
10
17
|
- Add behavior to Sidekiq to allow deferring enqueing jobs until after a block of code finishes.
|
data/README.md
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
# Sidekiq Deferred Jobs
|
|
2
|
+
|
|
1
3
|
[](https://github.com/bdurand/sidekiq-deferred_jobs/actions/workflows/continuous_integration.yml)
|
|
2
|
-
[](https://codeclimate.com/github/bdurand/sidekiq-deferred_jobs/maintainability)
|
|
3
|
-
[](https://codeclimate.com/github/bdurand/sidekiq-deferred_jobs/test_coverage)
|
|
4
4
|
[](https://github.com/testdouble/standard)
|
|
5
|
-
|
|
6
|
-
# Sidekiq Deferred Jobs
|
|
5
|
+
[](https://badge.fury.io/rb/sidekiq-deferred_jobs)
|
|
7
6
|
|
|
8
7
|
This gem provides an enhancement to [Sidekiq](https://github.com/mperham/sidekiq) to defer enqueuing jobs until the end of a block of code. This is useful in situations where you need to better coordinate when jobs are enqueued to guard against race conditions or deduplicate jobs. In most cases, this provides no functional difference to your code; it just delays slightly when jobs are enqueued.
|
|
9
8
|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.1
|
|
@@ -8,6 +8,7 @@ module Sidekiq
|
|
|
8
8
|
# Defer enqueuing Sidekiq workers within the block until the end of the block.
|
|
9
9
|
# Any workers that normally would have been enqueued with a `perform_async` call
|
|
10
10
|
# will instead be queued up and run in an ensure clause at the end of the block.
|
|
11
|
+
#
|
|
11
12
|
# @param filter [Array<Module>, Array<Hash>] An array of either classes, modules, or hashes.
|
|
12
13
|
# If this is provided, only workers that match either a class or module or which have
|
|
13
14
|
# sidekiq_options that match a hash will be deferred. All other worker will be enqueued as normal.
|
|
@@ -33,6 +34,7 @@ module Sidekiq
|
|
|
33
34
|
|
|
34
35
|
# Disable deferred workers within the block. All workers will be enqueued normally
|
|
35
36
|
# within the block.
|
|
37
|
+
#
|
|
36
38
|
# @return [void]
|
|
37
39
|
def undeferred(&block)
|
|
38
40
|
save_val = Thread.current[:sidekiq_deferred_jobs_jobs]
|
|
@@ -45,6 +47,7 @@ module Sidekiq
|
|
|
45
47
|
end
|
|
46
48
|
|
|
47
49
|
# Return true if the specified class with optional options should be deferred.
|
|
50
|
+
#
|
|
48
51
|
# @param klass [Class] A Sidekiq worker class
|
|
49
52
|
# @param opts [Hash, Nil] Optionsl options set at runtime for the worker.
|
|
50
53
|
# @return Boolean
|
|
@@ -55,6 +58,7 @@ module Sidekiq
|
|
|
55
58
|
end
|
|
56
59
|
|
|
57
60
|
# Schedule a worker to be run at the end of the outermost defer block.
|
|
61
|
+
#
|
|
58
62
|
# @param klass [Class] Sidekiq worker class
|
|
59
63
|
# @param args [Array] Sidekiq job arguments
|
|
60
64
|
# @param opts [Hash, Nil] Optional sidekiq options specified for the job
|
|
@@ -73,7 +77,8 @@ module Sidekiq
|
|
|
73
77
|
# Defer enqueuing Sidekiq workers within the block until the end of the block.
|
|
74
78
|
# Any workers that normally would have been enqueued with a `perform_async` call
|
|
75
79
|
# will instead be queued up and run in an ensure clause at the end of the block.
|
|
76
|
-
#
|
|
80
|
+
#
|
|
81
|
+
# @param filter [Array<Module>, Hash, false] Optional filter on which workers should be deferred.
|
|
77
82
|
# If a filter is specified, only matching workers will be deferred. To match the
|
|
78
83
|
# filter, the worker must either be the class specfied or include the module or
|
|
79
84
|
# have sidekiq_options that match the specified hash. If the filter is `false`
|
|
@@ -89,7 +94,8 @@ module Sidekiq
|
|
|
89
94
|
|
|
90
95
|
# Abort any already deferred Sidkiq workers in the current `defer_job` block.
|
|
91
96
|
# If a filter is specified, then only matching Sidekiq jobs will be aborted.
|
|
92
|
-
#
|
|
97
|
+
#
|
|
98
|
+
# @param filter [Array<Module>, Hash, false] See #defer_job for filter specification.
|
|
93
99
|
# @return [Array<Sidekiq::DeferredJobs::Job>] the jobs that were aborted
|
|
94
100
|
def abort_deferred_jobs!(*filter)
|
|
95
101
|
jobs, _filters = Thread.current[:sidekiq_deferred_jobs_jobs]
|
|
@@ -102,7 +108,8 @@ module Sidekiq
|
|
|
102
108
|
|
|
103
109
|
# Immediately enqueue any already deferred Sidkiq workers in the current `defer_job` block.
|
|
104
110
|
# If a filter is specified, then only matching Sidekiq jobs will be enqueued.
|
|
105
|
-
#
|
|
111
|
+
#
|
|
112
|
+
# @param filter [Array<Module>, Hash, false] See #defer_job for filter specification.
|
|
106
113
|
# @return [void]
|
|
107
114
|
def enqueue_deferred_jobs!(*filter)
|
|
108
115
|
jobs, _filters = Thread.current[:sidekiq_deferred_jobs_jobs]
|
|
@@ -167,15 +174,19 @@ module Sidekiq
|
|
|
167
174
|
end
|
|
168
175
|
|
|
169
176
|
# Add a job to the deferred job list.
|
|
177
|
+
#
|
|
170
178
|
# @param klass [Class] Sidekiq worker class.
|
|
171
179
|
# @param args [Array] Sidekiq job arguments
|
|
172
180
|
# @param opts [Hash, Nil] optional runtime jobs options
|
|
181
|
+
# @return [void]
|
|
173
182
|
def defer(klass, args, opts = nil)
|
|
174
183
|
@jobs << Job.new(klass, args&.dup, opts&.dup)
|
|
175
184
|
end
|
|
176
185
|
|
|
177
186
|
# Clear any deferred jobs that match the filter.
|
|
178
|
-
#
|
|
187
|
+
#
|
|
188
|
+
# @param filters [Array<Module>, Array<Hash>] Filter for jobs to clear
|
|
189
|
+
# @return [Array<Sidekiq::DeferredJobs::Job>] the jobs that were cleared
|
|
179
190
|
def clear!(filters = nil)
|
|
180
191
|
filter = Filter.new(filters)
|
|
181
192
|
cleared_jobs = @jobs.select { |job| filter.match?(job.klass, job.opts) }
|
|
@@ -184,7 +195,9 @@ module Sidekiq
|
|
|
184
195
|
end
|
|
185
196
|
|
|
186
197
|
# Enqueue any deferred jobs that match the filter.
|
|
187
|
-
#
|
|
198
|
+
#
|
|
199
|
+
# @param filters [Array<Module>, Array<Hash>] Filter for jobs to clear
|
|
200
|
+
# @return [void]
|
|
188
201
|
def enqueue!(filters = nil)
|
|
189
202
|
filter = Filter.new(filters)
|
|
190
203
|
remaining_jobs = []
|
|
@@ -238,6 +251,4 @@ module Sidekiq
|
|
|
238
251
|
end
|
|
239
252
|
end
|
|
240
253
|
|
|
241
|
-
|
|
242
|
-
Sidekiq::Worker::ClassMethods.prepend(Sidekiq::DeferredJobs::DeferredWorker)
|
|
243
|
-
Sidekiq::Worker::Setter.prepend(Sidekiq::DeferredJobs::DeferredSetter)
|
|
254
|
+
require_relative "deferred_jobs_ext"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# This file patches Sidekiq classes to add deferred job functionality.
|
|
4
|
+
# It's separate from the main file to avoid YARD documentation warnings
|
|
5
|
+
# for external gem classes.
|
|
6
|
+
|
|
7
|
+
Sidekiq.extend(Sidekiq::DeferredJobs::DeferBlock)
|
|
8
|
+
|
|
9
|
+
if defined?(Sidekiq::Job)
|
|
10
|
+
Sidekiq::Job::ClassMethods.prepend(Sidekiq::DeferredJobs::DeferredWorker)
|
|
11
|
+
Sidekiq::Job::Setter.prepend(Sidekiq::DeferredJobs::DeferredSetter)
|
|
12
|
+
else
|
|
13
|
+
Sidekiq::Worker::ClassMethods.prepend(Sidekiq::DeferredJobs::DeferredWorker)
|
|
14
|
+
Sidekiq::Worker::Setter.prepend(Sidekiq::DeferredJobs::DeferredSetter)
|
|
15
|
+
end
|
|
@@ -5,9 +5,16 @@ Gem::Specification.new do |spec|
|
|
|
5
5
|
spec.email = ["bbdurand@gmail.com"]
|
|
6
6
|
|
|
7
7
|
spec.summary = "Adds ability to defer the enqueuing of Sidekiq workers until the end of a block of code."
|
|
8
|
+
|
|
8
9
|
spec.homepage = "https://github.com/bdurand/sidekiq-deferred_jobs"
|
|
9
10
|
spec.license = "MIT"
|
|
10
11
|
|
|
12
|
+
spec.metadata = {
|
|
13
|
+
"homepage_uri" => spec.homepage,
|
|
14
|
+
"source_code_uri" => spec.homepage,
|
|
15
|
+
"changelog_uri" => "#{spec.homepage}/blob/main/CHANGELOG.md"
|
|
16
|
+
}
|
|
17
|
+
|
|
11
18
|
# Specify which files should be added to the gem when it is released.
|
|
12
19
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
13
20
|
ignore_files = %w[
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sidekiq-deferred_jobs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brian Durand
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: sidekiq
|
|
@@ -38,7 +37,6 @@ dependencies:
|
|
|
38
37
|
- - ">="
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
39
|
version: '0'
|
|
41
|
-
description:
|
|
42
40
|
email:
|
|
43
41
|
- bbdurand@gmail.com
|
|
44
42
|
executables: []
|
|
@@ -46,17 +44,20 @@ extensions: []
|
|
|
46
44
|
extra_rdoc_files: []
|
|
47
45
|
files:
|
|
48
46
|
- CHANGELOG.md
|
|
49
|
-
- MIT-LICENSE
|
|
47
|
+
- MIT-LICENSE.txt
|
|
50
48
|
- README.md
|
|
51
49
|
- VERSION
|
|
52
50
|
- lib/sidekiq-deferred_jobs.rb
|
|
53
51
|
- lib/sidekiq/deferred_jobs.rb
|
|
52
|
+
- lib/sidekiq/deferred_jobs_ext.rb
|
|
54
53
|
- sidekiq-deferred_jobs.gemspec
|
|
55
54
|
homepage: https://github.com/bdurand/sidekiq-deferred_jobs
|
|
56
55
|
licenses:
|
|
57
56
|
- MIT
|
|
58
|
-
metadata:
|
|
59
|
-
|
|
57
|
+
metadata:
|
|
58
|
+
homepage_uri: https://github.com/bdurand/sidekiq-deferred_jobs
|
|
59
|
+
source_code_uri: https://github.com/bdurand/sidekiq-deferred_jobs
|
|
60
|
+
changelog_uri: https://github.com/bdurand/sidekiq-deferred_jobs/blob/main/CHANGELOG.md
|
|
60
61
|
rdoc_options: []
|
|
61
62
|
require_paths:
|
|
62
63
|
- lib
|
|
@@ -71,8 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
71
72
|
- !ruby/object:Gem::Version
|
|
72
73
|
version: '0'
|
|
73
74
|
requirements: []
|
|
74
|
-
rubygems_version:
|
|
75
|
-
signing_key:
|
|
75
|
+
rubygems_version: 4.0.3
|
|
76
76
|
specification_version: 4
|
|
77
77
|
summary: Adds ability to defer the enqueuing of Sidekiq workers until the end of a
|
|
78
78
|
block of code.
|
|
File without changes
|