job-iteration 1.9.0 → 1.10.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 +4 -4
- data/.github/workflows/ci.yml +9 -30
- data/.ruby-version +1 -1
- data/CHANGELOG.md +16 -1
- data/Gemfile +3 -0
- data/Gemfile.lock +106 -32
- data/README.md +19 -1
- data/job-iteration.gemspec +2 -2
- data/lib/job-iteration/interruption_adapters/delayed_job_adapter.rb +54 -0
- data/lib/job-iteration/interruption_adapters.rb +1 -1
- data/lib/job-iteration/version.rb +1 -1
- data/lib/tapioca/dsl/compilers/job_iteration.rb +13 -5
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4470d17b555f82240c1849477ebfb46d7385c27524748072c0dcf93af588d9eb
|
4
|
+
data.tar.gz: 1dc09430105ac34917aace4451c2ec7255cca9319a5ada563ed840857add81b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1c25928d819bcff005e83e8cc7183e323a4e69d74b16b43884b1a1c1b8f531b54a8ece05004e7a6dfe28c94542454fefa11ff239b16e8c92cdb9d1508a3fd79
|
7
|
+
data.tar.gz: 3a8bfcfd03312d82be3ba3974fceecac5d8c53aa9129cb59f9321875ec10a448ffe4cd50b9949cf9da79a6f47c7e586fe266356c9e20111f8f60d48f775ed5a1
|
data/.github/workflows/ci.yml
CHANGED
@@ -15,51 +15,30 @@ jobs:
|
|
15
15
|
strategy:
|
16
16
|
fail-fast: false
|
17
17
|
matrix:
|
18
|
-
ruby: ["
|
19
|
-
rails: ["
|
18
|
+
ruby: ["3.0", "3.1", "3.2", "3.3", "3.4"]
|
19
|
+
rails: ["6.1", "7.0", "7.1", "7.2", "8.0", "edge"]
|
20
20
|
gemfile: [rails_gems]
|
21
21
|
exclude:
|
22
|
-
- ruby: "2.6"
|
23
|
-
rails: "7.0"
|
24
|
-
- ruby: "2.6"
|
25
|
-
rails: "7.1"
|
26
|
-
- ruby: "2.6"
|
27
|
-
rails: "7.2"
|
28
|
-
- ruby: "2.6"
|
29
|
-
rails: "edge"
|
30
|
-
- ruby: "2.7"
|
31
|
-
rails: "7.1"
|
32
|
-
- ruby: "2.7"
|
33
|
-
rails: "7.2"
|
34
|
-
- ruby: "2.7"
|
35
|
-
rails: "edge"
|
36
|
-
- ruby: "3.0"
|
37
|
-
rails: "5.2"
|
38
22
|
- ruby: "3.0"
|
39
23
|
rails: "7.1"
|
40
24
|
- ruby: "3.0"
|
41
25
|
rails: "7.2"
|
26
|
+
- ruby: "3.0"
|
27
|
+
rails: "8.0"
|
42
28
|
- ruby: "3.0"
|
43
29
|
rails: "edge"
|
44
30
|
- ruby: "3.1"
|
45
|
-
rails: "
|
46
|
-
- ruby: "3.1"
|
47
|
-
rails: "6.0"
|
31
|
+
rails: "8.0"
|
48
32
|
- ruby: "3.1"
|
49
33
|
rails: "edge"
|
50
|
-
- ruby: "3.2"
|
51
|
-
rails: "5.2"
|
52
|
-
- ruby: "3.2"
|
53
|
-
rails: "6.0"
|
54
34
|
- ruby: "3.2"
|
55
35
|
rails: "6.1"
|
56
|
-
- ruby: "3.3"
|
57
|
-
rails: "5.2"
|
58
|
-
- ruby: "3.3"
|
59
|
-
rails: "6.0"
|
60
36
|
- ruby: "3.3"
|
61
37
|
rails: "6.1"
|
62
|
-
|
38
|
+
- ruby: "3.4"
|
39
|
+
rails: "6.1"
|
40
|
+
- ruby: "3.4"
|
41
|
+
rails: "7.0"
|
63
42
|
include:
|
64
43
|
- ruby: head
|
65
44
|
rails: "edge"
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.4.2
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
### Main (unreleased)
|
2
2
|
|
3
|
+
### Breaking Changes
|
4
|
+
|
5
|
+
nil
|
6
|
+
|
3
7
|
### Changes
|
4
8
|
|
5
9
|
nil
|
@@ -12,7 +16,18 @@ nil
|
|
12
16
|
|
13
17
|
nil
|
14
18
|
|
15
|
-
## v1.
|
19
|
+
## v1.10.0 (Mar 20, 2025)
|
20
|
+
|
21
|
+
### Breaking Changes
|
22
|
+
|
23
|
+
- [544](https://github.com/Shopify/job-iteration/pull/544) - Drop support for Ruby 2.6 and 2.7, and Rails 5.2 and 6.0. The minimum supported Ruby version is now 3.0, and the minimum supported Rails version is 6.1.
|
24
|
+
|
25
|
+
### Features
|
26
|
+
|
27
|
+
- [547](https://github.com/Shopify/job-iteration/pull/547) Add interruption adapter for [DelayedJob](https://github.com/collectiveidea/delayed_job).
|
28
|
+
- [556](https://github.com/Shopify/job-iteration/pull/556) Add support for generic job classes in the Tapioca Sorbet compiler.
|
29
|
+
|
30
|
+
## v1.9.0 (Feb 3, 2025)
|
16
31
|
|
17
32
|
### Features
|
18
33
|
|
data/Gemfile
CHANGED
@@ -10,16 +10,19 @@ gemspec
|
|
10
10
|
# for integration testing
|
11
11
|
gem "sidekiq"
|
12
12
|
gem "resque"
|
13
|
+
gem "delayed_job"
|
13
14
|
|
14
15
|
if defined?(@rails_gems_requirements) && @rails_gems_requirements
|
15
16
|
# We avoid the `gem "..."` syntax here so Dependabot doesn't try to update these gems.
|
16
17
|
[
|
17
18
|
"activejob",
|
18
19
|
"activerecord",
|
20
|
+
"railties",
|
19
21
|
].each { |name| gem name, @rails_gems_requirements }
|
20
22
|
else
|
21
23
|
# gem "activejob" # Set in gemspec
|
22
24
|
gem "activerecord"
|
25
|
+
gem "railties"
|
23
26
|
end
|
24
27
|
|
25
28
|
gem "mysql2", github: "brianmario/mysql2"
|
data/Gemfile.lock
CHANGED
@@ -8,12 +8,28 @@ GIT
|
|
8
8
|
PATH
|
9
9
|
remote: .
|
10
10
|
specs:
|
11
|
-
job-iteration (1.
|
12
|
-
activejob (>=
|
11
|
+
job-iteration (1.10.0)
|
12
|
+
activejob (>= 6.1)
|
13
13
|
|
14
14
|
GEM
|
15
15
|
remote: https://rubygems.org/
|
16
16
|
specs:
|
17
|
+
actionpack (8.0.1)
|
18
|
+
actionview (= 8.0.1)
|
19
|
+
activesupport (= 8.0.1)
|
20
|
+
nokogiri (>= 1.8.5)
|
21
|
+
rack (>= 2.2.4)
|
22
|
+
rack-session (>= 1.0.1)
|
23
|
+
rack-test (>= 0.6.3)
|
24
|
+
rails-dom-testing (~> 2.2)
|
25
|
+
rails-html-sanitizer (~> 1.6)
|
26
|
+
useragent (~> 0.16)
|
27
|
+
actionview (8.0.1)
|
28
|
+
activesupport (= 8.0.1)
|
29
|
+
builder (~> 3.1)
|
30
|
+
erubi (~> 1.11)
|
31
|
+
rails-dom-testing (~> 2.2)
|
32
|
+
rails-html-sanitizer (~> 1.6)
|
17
33
|
activejob (8.0.1)
|
18
34
|
activesupport (= 8.0.1)
|
19
35
|
globalid (>= 0.3.6)
|
@@ -40,19 +56,33 @@ GEM
|
|
40
56
|
base64 (0.2.0)
|
41
57
|
benchmark (0.4.0)
|
42
58
|
bigdecimal (3.1.9)
|
59
|
+
builder (3.3.0)
|
43
60
|
coderay (1.1.3)
|
44
61
|
concurrent-ruby (1.3.5)
|
45
62
|
connection_pool (2.5.0)
|
63
|
+
crass (1.0.6)
|
46
64
|
csv (3.3.2)
|
65
|
+
date (3.4.1)
|
66
|
+
delayed_job (4.1.13)
|
67
|
+
activesupport (>= 3.0, < 9.0)
|
47
68
|
drb (2.2.1)
|
48
69
|
erubi (1.13.1)
|
49
70
|
globalid (1.2.1)
|
50
71
|
activesupport (>= 6.1)
|
51
72
|
i18n (1.14.7)
|
52
73
|
concurrent-ruby (~> 1.0)
|
53
|
-
|
74
|
+
io-console (0.8.0)
|
75
|
+
irb (1.15.1)
|
76
|
+
pp (>= 0.6.0)
|
77
|
+
rdoc (>= 4.0.0)
|
78
|
+
reline (>= 0.4.2)
|
79
|
+
json (2.10.1)
|
54
80
|
language_server-protocol (3.17.0.4)
|
55
|
-
|
81
|
+
lint_roller (1.1.0)
|
82
|
+
logger (1.6.6)
|
83
|
+
loofah (2.24.0)
|
84
|
+
crass (~> 1.0.2)
|
85
|
+
nokogiri (>= 1.12.0)
|
56
86
|
method_source (1.1.0)
|
57
87
|
minitest (5.25.4)
|
58
88
|
mocha (2.7.1)
|
@@ -62,16 +92,28 @@ GEM
|
|
62
92
|
mustermann (3.0.3)
|
63
93
|
ruby2_keywords (~> 0.0.1)
|
64
94
|
netrc (0.11.0)
|
95
|
+
nokogiri (1.18.3-arm64-darwin)
|
96
|
+
racc (~> 1.4)
|
97
|
+
nokogiri (1.18.3-x86_64-darwin)
|
98
|
+
racc (~> 1.4)
|
99
|
+
nokogiri (1.18.3-x86_64-linux-gnu)
|
100
|
+
racc (~> 1.4)
|
65
101
|
parallel (1.26.3)
|
66
|
-
parser (3.3.7.
|
102
|
+
parser (3.3.7.1)
|
67
103
|
ast (~> 2.4.1)
|
68
104
|
racc
|
105
|
+
pp (0.6.2)
|
106
|
+
prettyprint
|
107
|
+
prettyprint (0.2.0)
|
69
108
|
prism (1.3.0)
|
70
109
|
pry (0.15.2)
|
71
110
|
coderay (~> 1.1)
|
72
111
|
method_source (~> 1.0)
|
112
|
+
psych (5.2.3)
|
113
|
+
date
|
114
|
+
stringio
|
73
115
|
racc (1.8.1)
|
74
|
-
rack (3.1.
|
116
|
+
rack (3.1.12)
|
75
117
|
rack-protection (4.1.1)
|
76
118
|
base64 (>= 0.1.0)
|
77
119
|
logger (>= 1.6.0)
|
@@ -79,46 +121,73 @@ GEM
|
|
79
121
|
rack-session (2.1.0)
|
80
122
|
base64 (>= 0.1.0)
|
81
123
|
rack (>= 3.0.0)
|
124
|
+
rack-test (2.2.0)
|
125
|
+
rack (>= 1.3)
|
126
|
+
rackup (2.2.1)
|
127
|
+
rack (>= 3)
|
128
|
+
rails-dom-testing (2.2.0)
|
129
|
+
activesupport (>= 5.0.0)
|
130
|
+
minitest
|
131
|
+
nokogiri (>= 1.6)
|
132
|
+
rails-html-sanitizer (1.6.2)
|
133
|
+
loofah (~> 2.21)
|
134
|
+
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
|
135
|
+
railties (8.0.1)
|
136
|
+
actionpack (= 8.0.1)
|
137
|
+
activesupport (= 8.0.1)
|
138
|
+
irb (~> 1.13)
|
139
|
+
rackup (>= 1.0.0)
|
140
|
+
rake (>= 12.2)
|
141
|
+
thor (~> 1.0, >= 1.2.2)
|
142
|
+
zeitwerk (~> 2.6)
|
82
143
|
rainbow (3.1.1)
|
83
144
|
rake (13.2.1)
|
84
|
-
rbi (0.
|
145
|
+
rbi (0.3.0)
|
85
146
|
prism (~> 1.0)
|
147
|
+
rbs (>= 3.4.4)
|
86
148
|
sorbet-runtime (>= 0.5.9204)
|
87
|
-
|
149
|
+
rbs (3.8.1)
|
150
|
+
logger
|
151
|
+
rdoc (6.12.0)
|
152
|
+
psych (>= 4.0.0)
|
153
|
+
redis (5.4.0)
|
88
154
|
redis-client (>= 0.22.0)
|
89
|
-
redis-client (0.
|
155
|
+
redis-client (0.24.0)
|
90
156
|
connection_pool
|
91
157
|
redis-namespace (1.11.0)
|
92
158
|
redis (>= 4)
|
93
159
|
regexp_parser (2.10.0)
|
160
|
+
reline (0.6.0)
|
161
|
+
io-console (~> 0.5)
|
94
162
|
resque (2.7.0)
|
95
163
|
mono_logger (~> 1)
|
96
164
|
multi_json (~> 1.0)
|
97
165
|
redis-namespace (~> 1.6)
|
98
166
|
sinatra (>= 0.9.2)
|
99
|
-
rubocop (1.
|
167
|
+
rubocop (1.73.2)
|
100
168
|
json (~> 2.3)
|
101
|
-
language_server-protocol (
|
169
|
+
language_server-protocol (~> 3.17.0.2)
|
170
|
+
lint_roller (~> 1.1.0)
|
102
171
|
parallel (~> 1.10)
|
103
172
|
parser (>= 3.3.0.2)
|
104
173
|
rainbow (>= 2.2.2, < 4.0)
|
105
174
|
regexp_parser (>= 2.9.3, < 3.0)
|
106
|
-
rubocop-ast (>= 1.
|
175
|
+
rubocop-ast (>= 1.38.0, < 2.0)
|
107
176
|
ruby-progressbar (~> 1.7)
|
108
177
|
unicode-display_width (>= 2.4.0, < 4.0)
|
109
|
-
rubocop-ast (1.38.
|
178
|
+
rubocop-ast (1.38.1)
|
110
179
|
parser (>= 3.3.1.0)
|
111
|
-
rubocop-shopify (2.
|
112
|
-
rubocop (~> 1.
|
180
|
+
rubocop-shopify (2.16.0)
|
181
|
+
rubocop (~> 1.62)
|
113
182
|
ruby-progressbar (1.13.0)
|
114
183
|
ruby2_keywords (0.0.5)
|
115
184
|
securerandom (0.4.1)
|
116
|
-
sidekiq (
|
117
|
-
|
118
|
-
|
119
|
-
logger
|
120
|
-
rack (>=
|
121
|
-
redis-client (>= 0.
|
185
|
+
sidekiq (8.0.1)
|
186
|
+
connection_pool (>= 2.5.0)
|
187
|
+
json (>= 2.9.0)
|
188
|
+
logger (>= 1.6.2)
|
189
|
+
rack (>= 3.1.0)
|
190
|
+
redis-client (>= 0.23.2)
|
122
191
|
sinatra (4.1.1)
|
123
192
|
logger (>= 1.6.0)
|
124
193
|
mustermann (~> 3.0)
|
@@ -126,21 +195,22 @@ GEM
|
|
126
195
|
rack-protection (= 4.1.1)
|
127
196
|
rack-session (>= 2.0.0, < 3)
|
128
197
|
tilt (~> 2.0)
|
129
|
-
sorbet (0.5.
|
130
|
-
sorbet-static (= 0.5.
|
131
|
-
sorbet-runtime (0.5.
|
132
|
-
sorbet-static (0.5.
|
133
|
-
sorbet-static (0.5.
|
134
|
-
sorbet-static-and-runtime (0.5.
|
135
|
-
sorbet (= 0.5.
|
136
|
-
sorbet-runtime (= 0.5.
|
137
|
-
spoom (1.
|
198
|
+
sorbet (0.5.11915)
|
199
|
+
sorbet-static (= 0.5.11915)
|
200
|
+
sorbet-runtime (0.5.11915)
|
201
|
+
sorbet-static (0.5.11915-universal-darwin)
|
202
|
+
sorbet-static (0.5.11915-x86_64-linux)
|
203
|
+
sorbet-static-and-runtime (0.5.11915)
|
204
|
+
sorbet (= 0.5.11915)
|
205
|
+
sorbet-runtime (= 0.5.11915)
|
206
|
+
spoom (1.6.0)
|
138
207
|
erubi (>= 1.10.0)
|
139
208
|
prism (>= 0.28.0)
|
140
209
|
rbi (>= 0.2.3)
|
141
210
|
sorbet-static-and-runtime (>= 0.5.10187)
|
142
211
|
thor (>= 0.19.2)
|
143
|
-
|
212
|
+
stringio (3.1.5)
|
213
|
+
tapioca (0.16.11)
|
144
214
|
benchmark
|
145
215
|
bundler (>= 2.2.25)
|
146
216
|
netrc (>= 0.11.0)
|
@@ -158,11 +228,13 @@ GEM
|
|
158
228
|
unicode-display_width (3.1.4)
|
159
229
|
unicode-emoji (~> 4.0, >= 4.0.4)
|
160
230
|
unicode-emoji (4.0.4)
|
161
|
-
uri (1.0.
|
231
|
+
uri (1.0.3)
|
232
|
+
useragent (0.16.11)
|
162
233
|
yard (0.9.37)
|
163
234
|
yard-sorbet (0.9.0)
|
164
235
|
sorbet-runtime
|
165
236
|
yard
|
237
|
+
zeitwerk (2.7.2)
|
166
238
|
|
167
239
|
PLATFORMS
|
168
240
|
arm64-darwin
|
@@ -172,6 +244,7 @@ PLATFORMS
|
|
172
244
|
DEPENDENCIES
|
173
245
|
activerecord
|
174
246
|
csv
|
247
|
+
delayed_job
|
175
248
|
globalid
|
176
249
|
i18n
|
177
250
|
job-iteration!
|
@@ -179,6 +252,7 @@ DEPENDENCIES
|
|
179
252
|
mocha
|
180
253
|
mysql2!
|
181
254
|
pry
|
255
|
+
railties
|
182
256
|
rake
|
183
257
|
redis
|
184
258
|
resque
|
data/README.md
CHANGED
@@ -151,7 +151,25 @@ class NestedIterationJob < ApplicationJob
|
|
151
151
|
end
|
152
152
|
```
|
153
153
|
|
154
|
-
Iteration hooks into
|
154
|
+
Iteration hooks into most popular queue adapters out of the box to support graceful interruption. No extra configuration is required.
|
155
|
+
|
156
|
+
## Supported dependencies
|
157
|
+
|
158
|
+
Job-iteration currently supports the following queue adapters (in order of implementation):
|
159
|
+
|
160
|
+
- [Resque](https://github.com/resque/resque)
|
161
|
+
- [Sidekiq](https://github.com/sidekiq/sidekiq/)
|
162
|
+
- [GoodJob](https://github.com/bensheldon/good_job)
|
163
|
+
- [Solid Queue](https://github.com/rails/solid_queue)
|
164
|
+
- [Amazon SQS](https://github.com/aws/aws-activejob-sqs-ruby)
|
165
|
+
- [Delayed::Job](https://github.com/collectiveidea/delayed_job)
|
166
|
+
|
167
|
+
It supports the following platforms:
|
168
|
+
|
169
|
+
- Ruby 3.0 and later
|
170
|
+
- Rails 6.1 and later
|
171
|
+
|
172
|
+
Support for older platforms that have reached end of life may occasionally be dropped if maintaining backwards compatibility is cumbersome.
|
155
173
|
|
156
174
|
## Guides
|
157
175
|
|
data/job-iteration.gemspec
CHANGED
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
require "job-iteration/version"
|
6
6
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
|
-
spec.required_ruby_version = ">=
|
8
|
+
spec.required_ruby_version = ">= 3.0"
|
9
9
|
spec.name = "job-iteration"
|
10
10
|
spec.version = JobIteration::VERSION
|
11
11
|
spec.authors = ["Shopify"]
|
@@ -26,5 +26,5 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.metadata["changelog_uri"] = "https://github.com/Shopify/job-iteration/blob/main/CHANGELOG.md"
|
27
27
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
28
28
|
|
29
|
-
spec.add_dependency("activejob", ">=
|
29
|
+
spec.add_dependency("activejob", ">= 6.1")
|
30
30
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "delayed_job"
|
5
|
+
rescue LoadError
|
6
|
+
# DelayedJobb is not available, no need to load the adapter
|
7
|
+
return
|
8
|
+
end
|
9
|
+
|
10
|
+
begin
|
11
|
+
# Delayed::Worker#stop? was introduced in DelayedJob 3.0.3
|
12
|
+
gem("delayed_job", ">= 3.0.3")
|
13
|
+
rescue Gem::LoadError
|
14
|
+
warn("job-iteration's interruption adapter for DelayedJob requires DelayedJob 3.0.3 or newer")
|
15
|
+
return
|
16
|
+
end
|
17
|
+
|
18
|
+
module JobIteration
|
19
|
+
module InterruptionAdapters
|
20
|
+
module DelayedJobAdapter
|
21
|
+
class << self
|
22
|
+
attr_accessor :delayed_worker, :delayed_worker_started
|
23
|
+
|
24
|
+
def call
|
25
|
+
if delayed_worker_started
|
26
|
+
delayed_worker.nil? || delayed_worker.stop?
|
27
|
+
else
|
28
|
+
false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
self.delayed_worker_started = false
|
34
|
+
|
35
|
+
class DelayedJobPlugin < Delayed::Plugin
|
36
|
+
callbacks do |lifecycle|
|
37
|
+
lifecycle.before(:execute) do |worker|
|
38
|
+
DelayedJobAdapter.delayed_worker = worker
|
39
|
+
DelayedJobAdapter.delayed_worker_started = true
|
40
|
+
end
|
41
|
+
|
42
|
+
lifecycle.after(:execute) do |_worker|
|
43
|
+
DelayedJobAdapter.delayed_worker = nil
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
private_constant :DelayedJobPlugin
|
48
|
+
|
49
|
+
Delayed::Worker.plugins << DelayedJobPlugin
|
50
|
+
end
|
51
|
+
|
52
|
+
register(:delayed_job, DelayedJobAdapter)
|
53
|
+
end
|
54
|
+
end
|
@@ -4,7 +4,7 @@ require_relative "interruption_adapters/null_adapter"
|
|
4
4
|
|
5
5
|
module JobIteration
|
6
6
|
module InterruptionAdapters
|
7
|
-
BUNDLED_ADAPTERS = [:good_job, :resque, :sidekiq, :solid_queue, :sqs].freeze # @api private
|
7
|
+
BUNDLED_ADAPTERS = [:delayed_job, :good_job, :resque, :sidekiq, :solid_queue, :sqs].freeze # @api private
|
8
8
|
|
9
9
|
class << self
|
10
10
|
# Returns adapter for specified name.
|
@@ -55,10 +55,18 @@ module Tapioca
|
|
55
55
|
# Sorbet expects optional keyword arguments to be after required keyword arguments.
|
56
56
|
expanded_parameters.sort_by! { |typed_param| PARAM_TYPES_IN_ORDER.index(typed_param.param.class) }
|
57
57
|
|
58
|
+
number_of_generic_type_members = Tapioca::Runtime::GenericTypeRegistry.lookup_type_variables(constant)&.size
|
59
|
+
|
60
|
+
returned_job_class = if number_of_generic_type_members&.nonzero?
|
61
|
+
"#{constant_name}[#{number_of_generic_type_members.times.map { "T.untyped" }.join(", ")}]"
|
62
|
+
else
|
63
|
+
constant_name
|
64
|
+
end
|
65
|
+
|
58
66
|
job.create_method(
|
59
67
|
"perform_later",
|
60
|
-
parameters: perform_later_parameters(expanded_parameters,
|
61
|
-
return_type: "T.any(#{
|
68
|
+
parameters: perform_later_parameters(expanded_parameters, returned_job_class),
|
69
|
+
return_type: "T.any(#{returned_job_class}, FalseClass)",
|
62
70
|
class_method: true,
|
63
71
|
)
|
64
72
|
|
@@ -83,15 +91,15 @@ module Tapioca
|
|
83
91
|
sig do
|
84
92
|
params(
|
85
93
|
parameters: T::Array[RBI::TypedParam],
|
86
|
-
|
94
|
+
returned_job_class: String,
|
87
95
|
).returns(T::Array[RBI::TypedParam])
|
88
96
|
end
|
89
|
-
def perform_later_parameters(parameters,
|
97
|
+
def perform_later_parameters(parameters, returned_job_class)
|
90
98
|
if ::Gem::Requirement.new(">= 7.0").satisfied_by?(::ActiveJob.gem_version)
|
91
99
|
parameters.reject! { |typed_param| RBI::BlockParam === typed_param.param }
|
92
100
|
parameters + [create_block_param(
|
93
101
|
"block",
|
94
|
-
type: "T.nilable(T.proc.params(job: #{
|
102
|
+
type: "T.nilable(T.proc.params(job: #{returned_job_class}).void)",
|
95
103
|
)]
|
96
104
|
else
|
97
105
|
parameters
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: job-iteration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-03-20 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: activejob
|
@@ -15,14 +15,14 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - ">="
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: '
|
18
|
+
version: '6.1'
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - ">="
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: '
|
25
|
+
version: '6.1'
|
26
26
|
description: Makes your background jobs interruptible and resumable.
|
27
27
|
email:
|
28
28
|
- ops-accounts+shipit@shopify.com
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- lib/job-iteration/csv_enumerator.rb
|
62
62
|
- lib/job-iteration/enumerator_builder.rb
|
63
63
|
- lib/job-iteration/interruption_adapters.rb
|
64
|
+
- lib/job-iteration/interruption_adapters/delayed_job_adapter.rb
|
64
65
|
- lib/job-iteration/interruption_adapters/good_job_adapter.rb
|
65
66
|
- lib/job-iteration/interruption_adapters/null_adapter.rb
|
66
67
|
- lib/job-iteration/interruption_adapters/resque_adapter.rb
|
@@ -88,14 +89,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
88
89
|
requirements:
|
89
90
|
- - ">="
|
90
91
|
- !ruby/object:Gem::Version
|
91
|
-
version: '
|
92
|
+
version: '3.0'
|
92
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
94
|
requirements:
|
94
95
|
- - ">="
|
95
96
|
- !ruby/object:Gem::Version
|
96
97
|
version: '0'
|
97
98
|
requirements: []
|
98
|
-
rubygems_version: 3.6.
|
99
|
+
rubygems_version: 3.6.6
|
99
100
|
specification_version: 4
|
100
101
|
summary: Makes your background jobs interruptible and resumable.
|
101
102
|
test_files: []
|