acidic_job 1.0.0.pre13 → 1.0.0.pre16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff4783bfe9e3ff6a03683ed14a9f21a5227f6114bc5824cdee71a66f252d7fa1
4
- data.tar.gz: d905d8ad1848d77ae9fade6b75527ae113675ba3c39b66149c750f9adb64d83b
3
+ metadata.gz: 53f3b1dca6c15b94a5fef3e2e2bd6c23d4f60a6635fa729426bcd98e08bfcf22
4
+ data.tar.gz: 64fe54f8707c255211dba80c678012f4068ccc0fb279a50043afff4812649467
5
5
  SHA512:
6
- metadata.gz: 1af39ccff6bb5d414ab32344887d60f4cf721d9272ec0c98c9686053d3426fd2da98d82b9fe35fd45ebc6b719b8e1df6ce922abbec86653a91bea736f9522696
7
- data.tar.gz: f0f8db378646cd3e948a2406c2237b44c9e6a551dafcbe1a687cbfadc5a15713e3b6a177a18ccf81146b024cb64b44085a14c8250fd8b364f16c911d3a202f5b
6
+ metadata.gz: a657457d4714245dda16796e59e35e91246842e1c7dd92c174ac0469674e0a1145f0c20b55cbae4b02e82f391f8e5e8527ab267d88a82d6868578177ce19db9a
7
+ data.tar.gz: 785185e925ae66815668fdecbb8ab66bdf71553ecc52eb0002f3ecbd327b2680bc3777db3caf26e00c664dcd83d138e2142b43eb488aaf26c739c9a3099ddb52
@@ -1,18 +1,41 @@
1
- name: Ruby
1
+ name: CI
2
2
 
3
- on: [push,pull_request]
3
+ on: [push]
4
4
 
5
5
  jobs:
6
6
  build:
7
7
  runs-on: ubuntu-latest
8
+
9
+ strategy:
10
+ fail-fast: false
11
+ matrix:
12
+ ruby: ["2.7", "3.0", "3.1"]
13
+ rails: [ "6.1", "7.0" ]
14
+ services:
15
+ redis:
16
+ image: redis
17
+ options: >-
18
+ --health-cmd "redis-cli ping"
19
+ --health-interval 10s
20
+ --health-timeout 5s
21
+ --health-retries 5
22
+ ports:
23
+ - 6379:6379
24
+
25
+ env:
26
+ BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/rails_${{ matrix.rails }}.gemfile
27
+
8
28
  steps:
9
- - uses: actions/checkout@v2
10
- - name: Set up Ruby
11
- uses: ruby/setup-ruby@v1
12
- with:
13
- ruby-version: 2.7.1
14
- - name: Run the default task
15
- run: |
16
- gem install bundler -v 2.2.31
17
- bundle install
18
- bundle exec rake
29
+ - uses: actions/checkout@v2
30
+
31
+ - name: Set up Ruby
32
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
33
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
34
+ uses: ruby/setup-ruby@v1
35
+ with:
36
+ bundler-cache: true # 'bundle install' and cache gems
37
+ ruby-version: ${{ matrix.ruby }}
38
+
39
+ - name: Run the default task
40
+ run: bundle exec rake
41
+ timeout-minutes: 2
data/.gitignore CHANGED
@@ -10,3 +10,5 @@
10
10
  /test/database.sqlite
11
11
  slides.md
12
12
  /test/dummy
13
+ /test/log
14
+ /database.sqlite
data/.tool-versions CHANGED
@@ -1 +1 @@
1
- ruby 3.0.2
1
+ ruby 3.1.1
data/Gemfile CHANGED
@@ -2,35 +2,4 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- # Specify your gem's dependencies in acidic_job.gemspec
6
5
  gemspec
7
-
8
- gem "rake", "~> 13.0"
9
-
10
- gem "minitest", "~> 5.0"
11
-
12
- gem "rubocop", "~> 1.7"
13
-
14
- gem "rubocop-minitest"
15
-
16
- gem "rubocop-rake"
17
-
18
- gem "activerecord", "~> 6.1.3.2"
19
-
20
- gem "activejob", "~> 6.1.3.2"
21
-
22
- gem "sqlite3"
23
-
24
- gem "database_cleaner"
25
-
26
- gem "simplecov"
27
-
28
- gem "pry"
29
-
30
- gem "sidekiq"
31
-
32
- gem "noticed"
33
-
34
- gem "combustion"
35
-
36
- gem "warning"
data/Gemfile.lock CHANGED
@@ -1,77 +1,83 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- acidic_job (1.0.0.pre13)
5
- activerecord (>= 6.1.0)
4
+ acidic_job (1.0.0.pre16)
5
+ activerecord
6
6
  activesupport
7
+ database_cleaner
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
- actioncable (6.1.3.2)
12
- actionpack (= 6.1.3.2)
13
- activesupport (= 6.1.3.2)
12
+ actioncable (7.0.2.3)
13
+ actionpack (= 7.0.2.3)
14
+ activesupport (= 7.0.2.3)
14
15
  nio4r (~> 2.0)
15
16
  websocket-driver (>= 0.6.1)
16
- actionmailbox (6.1.3.2)
17
- actionpack (= 6.1.3.2)
18
- activejob (= 6.1.3.2)
19
- activerecord (= 6.1.3.2)
20
- activestorage (= 6.1.3.2)
21
- activesupport (= 6.1.3.2)
17
+ actionmailbox (7.0.2.3)
18
+ actionpack (= 7.0.2.3)
19
+ activejob (= 7.0.2.3)
20
+ activerecord (= 7.0.2.3)
21
+ activestorage (= 7.0.2.3)
22
+ activesupport (= 7.0.2.3)
22
23
  mail (>= 2.7.1)
23
- actionmailer (6.1.3.2)
24
- actionpack (= 6.1.3.2)
25
- actionview (= 6.1.3.2)
26
- activejob (= 6.1.3.2)
27
- activesupport (= 6.1.3.2)
24
+ net-imap
25
+ net-pop
26
+ net-smtp
27
+ actionmailer (7.0.2.3)
28
+ actionpack (= 7.0.2.3)
29
+ actionview (= 7.0.2.3)
30
+ activejob (= 7.0.2.3)
31
+ activesupport (= 7.0.2.3)
28
32
  mail (~> 2.5, >= 2.5.4)
33
+ net-imap
34
+ net-pop
35
+ net-smtp
29
36
  rails-dom-testing (~> 2.0)
30
- actionpack (6.1.3.2)
31
- actionview (= 6.1.3.2)
32
- activesupport (= 6.1.3.2)
33
- rack (~> 2.0, >= 2.0.9)
37
+ actionpack (7.0.2.3)
38
+ actionview (= 7.0.2.3)
39
+ activesupport (= 7.0.2.3)
40
+ rack (~> 2.0, >= 2.2.0)
34
41
  rack-test (>= 0.6.3)
35
42
  rails-dom-testing (~> 2.0)
36
43
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
37
- actiontext (6.1.3.2)
38
- actionpack (= 6.1.3.2)
39
- activerecord (= 6.1.3.2)
40
- activestorage (= 6.1.3.2)
41
- activesupport (= 6.1.3.2)
44
+ actiontext (7.0.2.3)
45
+ actionpack (= 7.0.2.3)
46
+ activerecord (= 7.0.2.3)
47
+ activestorage (= 7.0.2.3)
48
+ activesupport (= 7.0.2.3)
49
+ globalid (>= 0.6.0)
42
50
  nokogiri (>= 1.8.5)
43
- actionview (6.1.3.2)
44
- activesupport (= 6.1.3.2)
51
+ actionview (7.0.2.3)
52
+ activesupport (= 7.0.2.3)
45
53
  builder (~> 3.1)
46
54
  erubi (~> 1.4)
47
55
  rails-dom-testing (~> 2.0)
48
56
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
49
- activejob (6.1.3.2)
50
- activesupport (= 6.1.3.2)
57
+ activejob (7.0.2.3)
58
+ activesupport (= 7.0.2.3)
51
59
  globalid (>= 0.3.6)
52
- activemodel (6.1.3.2)
53
- activesupport (= 6.1.3.2)
54
- activerecord (6.1.3.2)
55
- activemodel (= 6.1.3.2)
56
- activesupport (= 6.1.3.2)
57
- activestorage (6.1.3.2)
58
- actionpack (= 6.1.3.2)
59
- activejob (= 6.1.3.2)
60
- activerecord (= 6.1.3.2)
61
- activesupport (= 6.1.3.2)
62
- marcel (~> 1.0.0)
63
- mini_mime (~> 1.0.2)
64
- activesupport (6.1.3.2)
60
+ activemodel (7.0.2.3)
61
+ activesupport (= 7.0.2.3)
62
+ activerecord (7.0.2.3)
63
+ activemodel (= 7.0.2.3)
64
+ activesupport (= 7.0.2.3)
65
+ activestorage (7.0.2.3)
66
+ actionpack (= 7.0.2.3)
67
+ activejob (= 7.0.2.3)
68
+ activerecord (= 7.0.2.3)
69
+ activesupport (= 7.0.2.3)
70
+ marcel (~> 1.0)
71
+ mini_mime (>= 1.1.0)
72
+ activesupport (7.0.2.3)
65
73
  concurrent-ruby (~> 1.0, >= 1.0.2)
66
74
  i18n (>= 1.6, < 2)
67
75
  minitest (>= 5.1)
68
76
  tzinfo (~> 2.0)
69
- zeitwerk (~> 2.3)
70
77
  addressable (2.8.0)
71
78
  public_suffix (>= 2.0.2, < 5.0)
72
79
  ast (2.4.2)
73
80
  builder (3.2.4)
74
- coderay (1.1.3)
75
81
  combustion (1.3.5)
76
82
  activesupport (>= 3.0.0)
77
83
  railties (>= 3.0.0)
@@ -85,6 +91,7 @@ GEM
85
91
  activerecord (>= 5.a)
86
92
  database_cleaner-core (~> 2.0.0)
87
93
  database_cleaner-core (2.0.1)
94
+ digest (3.1.0)
88
95
  docile (1.4.0)
89
96
  domain_name (0.5.20190701)
90
97
  unf (>= 0.0.5, < 1.0.0)
@@ -93,8 +100,8 @@ GEM
93
100
  ffi-compiler (1.0.1)
94
101
  ffi (>= 1.0.0)
95
102
  rake
96
- globalid (0.4.2)
97
- activesupport (>= 4.2.0)
103
+ globalid (1.0.0)
104
+ activesupport (>= 5.0)
98
105
  http (5.0.4)
99
106
  addressable (~> 2.8)
100
107
  http-cookie (~> 1.0)
@@ -103,89 +110,102 @@ GEM
103
110
  http-cookie (1.0.4)
104
111
  domain_name (~> 0.5)
105
112
  http-form_data (2.3.0)
106
- i18n (1.8.10)
113
+ i18n (1.10.0)
107
114
  concurrent-ruby (~> 1.0)
115
+ io-wait (0.2.1)
108
116
  llhttp-ffi (0.4.0)
109
117
  ffi-compiler (~> 1.0)
110
118
  rake (~> 13.0)
111
- loofah (2.12.0)
119
+ loofah (2.15.0)
112
120
  crass (~> 1.0.2)
113
121
  nokogiri (>= 1.5.9)
114
122
  mail (2.7.1)
115
123
  mini_mime (>= 0.1.1)
116
124
  marcel (1.0.2)
117
125
  method_source (1.0.0)
118
- mini_mime (1.0.3)
119
- mini_portile2 (2.6.1)
120
- minitest (5.14.4)
126
+ mini_mime (1.1.2)
127
+ mini_portile2 (2.8.0)
128
+ minitest (5.15.0)
129
+ net-imap (0.2.3)
130
+ digest
131
+ net-protocol
132
+ strscan
133
+ net-pop (0.1.1)
134
+ digest
135
+ net-protocol
136
+ timeout
137
+ net-protocol (0.1.2)
138
+ io-wait
139
+ timeout
140
+ net-smtp (0.3.1)
141
+ digest
142
+ net-protocol
143
+ timeout
121
144
  nio4r (2.5.8)
122
- nokogiri (1.12.3)
123
- mini_portile2 (~> 2.6.1)
145
+ nokogiri (1.13.3)
146
+ mini_portile2 (~> 2.8.0)
124
147
  racc (~> 1.4)
125
- nokogiri (1.12.3-x86_64-darwin)
148
+ nokogiri (1.13.3-x86_64-darwin)
126
149
  racc (~> 1.4)
127
- noticed (1.5.7)
150
+ noticed (1.5.9)
128
151
  http (>= 4.0.0)
129
152
  rails (>= 5.2.0)
130
- parallel (1.20.1)
131
- parser (3.0.1.1)
153
+ parallel (1.21.0)
154
+ parser (3.1.1.0)
132
155
  ast (~> 2.4.1)
133
- pry (0.14.1)
134
- coderay (~> 1.1)
135
- method_source (~> 1.0)
136
156
  public_suffix (4.0.6)
137
- racc (1.5.2)
157
+ racc (1.6.0)
138
158
  rack (2.2.3)
139
159
  rack-test (1.1.0)
140
160
  rack (>= 1.0, < 3)
141
- rails (6.1.3.2)
142
- actioncable (= 6.1.3.2)
143
- actionmailbox (= 6.1.3.2)
144
- actionmailer (= 6.1.3.2)
145
- actionpack (= 6.1.3.2)
146
- actiontext (= 6.1.3.2)
147
- actionview (= 6.1.3.2)
148
- activejob (= 6.1.3.2)
149
- activemodel (= 6.1.3.2)
150
- activerecord (= 6.1.3.2)
151
- activestorage (= 6.1.3.2)
152
- activesupport (= 6.1.3.2)
161
+ rails (7.0.2.3)
162
+ actioncable (= 7.0.2.3)
163
+ actionmailbox (= 7.0.2.3)
164
+ actionmailer (= 7.0.2.3)
165
+ actionpack (= 7.0.2.3)
166
+ actiontext (= 7.0.2.3)
167
+ actionview (= 7.0.2.3)
168
+ activejob (= 7.0.2.3)
169
+ activemodel (= 7.0.2.3)
170
+ activerecord (= 7.0.2.3)
171
+ activestorage (= 7.0.2.3)
172
+ activesupport (= 7.0.2.3)
153
173
  bundler (>= 1.15.0)
154
- railties (= 6.1.3.2)
155
- sprockets-rails (>= 2.0.0)
174
+ railties (= 7.0.2.3)
156
175
  rails-dom-testing (2.0.3)
157
176
  activesupport (>= 4.2.0)
158
177
  nokogiri (>= 1.6)
159
- rails-html-sanitizer (1.4.1)
178
+ rails-html-sanitizer (1.4.2)
160
179
  loofah (~> 2.3)
161
- railties (6.1.3.2)
162
- actionpack (= 6.1.3.2)
163
- activesupport (= 6.1.3.2)
180
+ railties (7.0.2.3)
181
+ actionpack (= 7.0.2.3)
182
+ activesupport (= 7.0.2.3)
164
183
  method_source
165
- rake (>= 0.8.7)
184
+ rake (>= 12.2)
166
185
  thor (~> 1.0)
167
- rainbow (3.0.0)
168
- rake (13.0.4)
169
- redis (4.4.0)
170
- regexp_parser (2.1.1)
186
+ zeitwerk (~> 2.5)
187
+ rainbow (3.1.1)
188
+ rake (13.0.6)
189
+ redis (4.6.0)
190
+ regexp_parser (2.2.1)
171
191
  rexml (3.2.5)
172
- rubocop (1.18.3)
192
+ rubocop (1.26.0)
173
193
  parallel (~> 1.10)
174
- parser (>= 3.0.0.0)
194
+ parser (>= 3.1.0.0)
175
195
  rainbow (>= 2.2.2, < 4.0)
176
196
  regexp_parser (>= 1.8, < 3.0)
177
197
  rexml
178
- rubocop-ast (>= 1.7.0, < 2.0)
198
+ rubocop-ast (>= 1.16.0, < 2.0)
179
199
  ruby-progressbar (~> 1.7)
180
200
  unicode-display_width (>= 1.4.0, < 3.0)
181
- rubocop-ast (1.7.0)
182
- parser (>= 3.0.1.1)
183
- rubocop-minitest (0.14.0)
201
+ rubocop-ast (1.16.0)
202
+ parser (>= 3.1.1.0)
203
+ rubocop-minitest (0.18.0)
184
204
  rubocop (>= 0.90, < 2.0)
185
205
  rubocop-rake (0.6.0)
186
206
  rubocop (~> 1.0)
187
207
  ruby-progressbar (1.11.0)
188
- sidekiq (6.2.2)
208
+ sidekiq (6.4.1)
189
209
  connection_pool (>= 2.2.2)
190
210
  rack (~> 2.0)
191
211
  redis (>= 4.2.0)
@@ -194,27 +214,22 @@ GEM
194
214
  simplecov-html (~> 0.11)
195
215
  simplecov_json_formatter (~> 0.1)
196
216
  simplecov-html (0.12.3)
197
- simplecov_json_formatter (0.1.3)
198
- sprockets (4.0.3)
199
- concurrent-ruby (~> 1.0)
200
- rack (> 1, < 3)
201
- sprockets-rails (3.4.2)
202
- actionpack (>= 5.2)
203
- activesupport (>= 5.2)
204
- sprockets (>= 3.0.0)
217
+ simplecov_json_formatter (0.1.4)
205
218
  sqlite3 (1.4.2)
206
- thor (1.1.0)
219
+ strscan (3.0.1)
220
+ thor (1.2.1)
221
+ timeout (0.2.0)
207
222
  tzinfo (2.0.4)
208
223
  concurrent-ruby (~> 1.0)
209
224
  unf (0.1.4)
210
225
  unf_ext
211
- unf_ext (0.0.8)
212
- unicode-display_width (2.0.0)
226
+ unf_ext (0.0.8.1)
227
+ unicode-display_width (2.1.0)
213
228
  warning (1.2.1)
214
229
  websocket-driver (0.7.5)
215
230
  websocket-extensions (>= 0.1.0)
216
231
  websocket-extensions (0.1.5)
217
- zeitwerk (2.4.2)
232
+ zeitwerk (2.5.4)
218
233
 
219
234
  PLATFORMS
220
235
  ruby
@@ -222,16 +237,14 @@ PLATFORMS
222
237
 
223
238
  DEPENDENCIES
224
239
  acidic_job!
225
- activejob (~> 6.1.3.2)
226
- activerecord (~> 6.1.3.2)
240
+ activejob
227
241
  combustion
228
- database_cleaner
229
- minitest (~> 5.0)
242
+ minitest
243
+ net-smtp
230
244
  noticed
231
- pry
232
- railties (>= 6.1.0)
233
- rake (~> 13.0)
234
- rubocop (~> 1.7)
245
+ railties
246
+ rake
247
+ rubocop
235
248
  rubocop-minitest
236
249
  rubocop-rake
237
250
  sidekiq
@@ -240,4 +253,4 @@ DEPENDENCIES
240
253
  warning
241
254
 
242
255
  BUNDLED WITH
243
- 2.2.31
256
+ 2.2.32
data/acidic_job.gemspec CHANGED
@@ -27,10 +27,25 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
29
 
30
- spec.add_dependency "activerecord", ">= 6.1.0"
30
+ spec.add_dependency "activerecord"
31
31
  spec.add_dependency "activesupport"
32
- spec.add_development_dependency "railties", ">= 6.1.0"
32
+ spec.add_dependency "database_cleaner"
33
+ spec.add_development_dependency "activejob"
34
+ spec.add_development_dependency "combustion"
35
+ spec.add_development_dependency "minitest"
36
+ spec.add_development_dependency "net-smtp"
37
+ spec.add_development_dependency "noticed"
38
+ spec.add_development_dependency "railties"
39
+ spec.add_development_dependency "rake"
40
+ spec.add_development_dependency "rubocop"
41
+ spec.add_development_dependency "rubocop-minitest"
42
+ spec.add_development_dependency "rubocop-rake"
43
+ spec.add_development_dependency "sidekiq"
44
+ spec.add_development_dependency "simplecov"
45
+ spec.add_development_dependency "sqlite3"
46
+ spec.add_development_dependency "warning"
33
47
 
34
48
  # For more information and examples about making a new gem, checkout our
35
49
  # guide at: https://bundler.io/guides/creating_gem.html
50
+ spec.metadata["rubygems_mfa_required"] = "true"
36
51
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activemodel", "~> 6.1.0"
6
+ gem "railties", "~> 6.1.0"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activemodel", "~> 7.0.0"
6
+ gem "railties", "~> 7.0.0"
7
+
8
+ gemspec path: "../"
@@ -6,47 +6,32 @@ module AcidicJob
6
6
  module Awaiting
7
7
  extend ActiveSupport::Concern
8
8
 
9
- class_methods do
10
- # TODO: Allow the `perform` method to be used to kick off Sidekiq Batch powered workflows
11
- def initiate(*args)
12
- raise SidekiqBatchRequired unless defined?(Sidekiq::Batch)
13
-
14
- top_level_workflow = Sidekiq::Batch.new
15
- top_level_workflow.on(:success, self, *args)
16
- top_level_workflow.jobs do
17
- perform_async
18
- end
19
- end
20
- end
21
-
22
9
  def enqueue_step_parallel_jobs(jobs, run, step_result)
23
10
  # `batch` is available from Sidekiq::Pro
24
11
  raise SidekiqBatchRequired unless defined?(Sidekiq::Batch)
25
12
 
26
- batch.jobs do
27
- step_batch = Sidekiq::Batch.new
28
- # step_batch.description = "AcidicJob::Workflow Step: #{step}"
29
- step_batch.on(
30
- :success,
31
- "#{self.class.name}#step_done",
32
- # NOTE: options are marshalled through JSON so use only basic types.
33
- { "run_id" => run.id,
34
- "step_result_yaml" => step_result.to_yaml.strip }
35
- )
36
- # NOTE: The jobs method is atomic.
37
- # All jobs created in the block are actually pushed atomically at the end of the block.
38
- # If an error is raised, none of the jobs will go to Redis.
39
- step_batch.jobs do
40
- jobs.each do |worker_name|
41
- # TODO: handle Symbols as well
42
- worker = worker_name.is_a?(String) ? worker_name.constantize : worker_name
43
- if worker.instance_method(:perform).arity.zero?
44
- worker.perform_async
45
- elsif worker.instance_method(:perform).arity == 1
46
- worker.perform_async(run.id)
47
- else
48
- raise TooManyParametersForParallelJob
49
- end
13
+ step_batch = Sidekiq::Batch.new
14
+ # step_batch.description = "AcidicJob::Workflow Step: #{step}"
15
+ step_batch.on(
16
+ :success,
17
+ "#{self.class.name}#step_done",
18
+ # NOTE: options are marshalled through JSON so use only basic types.
19
+ { "run_id" => run.id,
20
+ "step_result_yaml" => step_result.to_yaml.strip }
21
+ )
22
+ # NOTE: The jobs method is atomic.
23
+ # All jobs created in the block are actually pushed atomically at the end of the block.
24
+ # If an error is raised, none of the jobs will go to Redis.
25
+ step_batch.jobs do
26
+ jobs.each do |worker_name|
27
+ # TODO: handle Symbols as well
28
+ worker = worker_name.is_a?(String) ? worker_name.constantize : worker_name
29
+ if worker.instance_method(:perform).arity.zero?
30
+ worker.perform_async
31
+ elsif worker.instance_method(:perform).arity == 1
32
+ worker.perform_async(run.id)
33
+ else
34
+ raise TooManyParametersForParallelJob
50
35
  end
51
36
  end
52
37
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "active_support/concern"
4
+ require "global_id/locator"
4
5
 
5
6
  module AcidicJob
6
7
  module Staging
@@ -1,71 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "active_job/test_case"
4
- require "database_cleaner"
3
+ require_relative "./testing"
5
4
 
6
5
  module AcidicJob
7
6
  class TestCase < ActiveJob::TestCase
8
- self.use_transactional_tests = false if respond_to?(:use_transactional_tests)
9
-
10
- def before_setup
11
- @original_cleaners = DatabaseCleaner.cleaners
12
- DatabaseCleaner.cleaners = transaction_free_cleaners_for(@original_cleaners)
13
- super
14
- DatabaseCleaner.start
15
- end
16
-
17
- def after_teardown
18
- DatabaseCleaner.clean
19
- super
20
- DatabaseCleaner.cleaners = @original_cleaners
21
- end
22
-
23
- private
24
-
25
- # Ensure that the system's original DatabaseCleaner configuration is maintained, options included,
26
- # except that any `transaction` strategies for any ORMs are replaced with a `deletion` strategy.
27
- def transaction_free_cleaners_for(original_cleaners)
28
- non_transaction_cleaners = original_cleaners.dup.map do |(orm, opts), cleaner|
29
- [[orm, opts], ensure_no_transaction_strategies_for(cleaner)]
30
- end.to_h
31
- DatabaseCleaner::Cleaners.new(non_transaction_cleaners)
32
- end
33
-
34
- def ensure_no_transaction_strategies_for(cleaner)
35
- return cleaner unless strategy_name_for(cleaner) == "transaction"
36
-
37
- cleaner.strategy = deletion_strategy_for(cleaner)
38
- cleaner
39
- end
40
-
41
- def strategy_name_for(cleaner)
42
- cleaner # <DatabaseCleaner::Cleaner>
43
- .strategy # <DatabaseCleaner::ActiveRecord::Truncation>
44
- .class # DatabaseCleaner::ActiveRecord::Truncation
45
- .name # "DatabaseCleaner::ActiveRecord::Truncation"
46
- .rpartition("::") # ["DatabaseCleaner::ActiveRecord", "::", "Truncation"]
47
- .last # "Truncation"
48
- .downcase # "truncation"
49
- end
50
-
51
- def deletion_strategy_for(cleaner)
52
- strategy = cleaner.strategy
53
- strategy_namespace = strategy # <DatabaseCleaner::ActiveRecord::Truncation>
54
- .class # DatabaseCleaner::ActiveRecord::Truncation
55
- .name # "DatabaseCleaner::ActiveRecord::Truncation"
56
- .rpartition("::") # ["DatabaseCleaner::ActiveRecord", "::", "Truncation"]
57
- .first # "DatabaseCleaner::ActiveRecord"
58
- deletion_strategy_class_name = [strategy_namespace, "::", "Deletion"].join
59
- deletion_strategy_class = deletion_strategy_class_name.constantize
60
- instance_variable_hash = strategy.instance_variables.map do |var|
61
- [
62
- var.to_s.remove("@"),
63
- strategy.instance_variable_get(var)
64
- ]
65
- end.to_h
66
- options = instance_variable_hash.except("db", "connection_class")
67
-
68
- deletion_strategy_class.new(**options)
69
- end
7
+ include AcidicJob::Testing
70
8
  end
71
9
  end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_job/queue_adapters"
4
+ require "active_job/base"
5
+ require "active_job/test_helper"
6
+ require "active_job/test_case"
7
+ require "database_cleaner"
8
+
9
+ module AcidicJob
10
+ module Testing
11
+ def self.included(mod)
12
+ mod.class_eval "self.use_transactional_tests = false if respond_to?(:use_transactional_tests)", __FILE__, __LINE__
13
+ end
14
+
15
+ def before_setup
16
+ @connection = ActiveRecord::Base.connection
17
+ @original_cleaners = DatabaseCleaner.cleaners
18
+ DatabaseCleaner.cleaners = transaction_free_cleaners_for(@original_cleaners)
19
+ super
20
+ DatabaseCleaner.start
21
+ end
22
+
23
+ def after_teardown
24
+ DatabaseCleaner.clean
25
+ super
26
+ DatabaseCleaner.cleaners = @original_cleaners
27
+ end
28
+
29
+ private
30
+
31
+ # Ensure that the system's original DatabaseCleaner configuration is maintained, options included,
32
+ # except that any `transaction` strategies for any ORMs are replaced with a `deletion` strategy.
33
+ def transaction_free_cleaners_for(original_cleaners)
34
+ non_transaction_cleaners = original_cleaners.dup.to_h do |(orm, opts), cleaner|
35
+ [[orm, opts], ensure_no_transaction_strategies_for(cleaner)]
36
+ end
37
+ DatabaseCleaner::Cleaners.new(non_transaction_cleaners)
38
+ end
39
+
40
+ def ensure_no_transaction_strategies_for(cleaner)
41
+ return cleaner unless strategy_name_for(cleaner) == "transaction"
42
+
43
+ cleaner.strategy = deletion_strategy_for(cleaner)
44
+ cleaner
45
+ end
46
+
47
+ def strategy_name_for(cleaner)
48
+ cleaner # <DatabaseCleaner::Cleaner>
49
+ .strategy # <DatabaseCleaner::ActiveRecord::Truncation>
50
+ .class # DatabaseCleaner::ActiveRecord::Truncation
51
+ .name # "DatabaseCleaner::ActiveRecord::Truncation"
52
+ .rpartition("::") # ["DatabaseCleaner::ActiveRecord", "::", "Truncation"]
53
+ .last # "Truncation"
54
+ .downcase # "truncation"
55
+ end
56
+
57
+ def deletion_strategy_for(cleaner)
58
+ strategy = cleaner.strategy
59
+ strategy_namespace = strategy # <DatabaseCleaner::ActiveRecord::Truncation>
60
+ .class # DatabaseCleaner::ActiveRecord::Truncation
61
+ .name # "DatabaseCleaner::ActiveRecord::Truncation"
62
+ .rpartition("::") # ["DatabaseCleaner::ActiveRecord", "::", "Truncation"]
63
+ .first # "DatabaseCleaner::ActiveRecord"
64
+ deletion_strategy_class_name = [strategy_namespace, "::", "Deletion"].join
65
+ deletion_strategy_class = deletion_strategy_class_name.constantize
66
+ instance_variable_hash = strategy.instance_variables.to_h do |var|
67
+ [
68
+ var.to_s.remove("@"),
69
+ strategy.instance_variable_get(var)
70
+ ]
71
+ end
72
+ options = instance_variable_hash.except("db", "connection_class")
73
+
74
+ deletion_strategy_class.new(**options)
75
+ end
76
+ end
77
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AcidicJob
4
- VERSION = "1.0.0.pre13"
4
+ VERSION = "1.0.0.pre16"
5
5
  end
data/lib/acidic_job.rb CHANGED
@@ -17,6 +17,8 @@ require_relative "acidic_job/extensions/noticed"
17
17
  require_relative "acidic_job/upgrade_service"
18
18
 
19
19
  require "active_support/concern"
20
+ require "active_job/queue_adapters"
21
+ require "active_job/base"
20
22
 
21
23
  module AcidicJob
22
24
  extend ActiveSupport::Concern
@@ -82,8 +84,6 @@ module AcidicJob
82
84
  end
83
85
 
84
86
  def with_acidity(providing: {})
85
- # ensure this instance variable is always defined
86
- @__acidic_job_steps = []
87
87
  # execute the block to gather the info on what steps are defined for this job workflow
88
88
  yield
89
89
 
@@ -112,7 +112,6 @@ module AcidicJob
112
112
  FinishedPoint.new
113
113
  end
114
114
 
115
- # TODO: allow idempotency to be defined by args OR job id
116
115
  # rubocop:disable Naming/MemoizedInstanceVariableName
117
116
  def idempotency_key
118
117
  if defined?(@__acidic_job_idempotency_key) && !@__acidic_job_idempotency_key.nil?
@@ -138,7 +137,7 @@ module AcidicJob
138
137
 
139
138
  # if any step calls `safely_finish_acidic_job` or the workflow has simply completed,
140
139
  # be sure to break out of the loop
141
- if recovery_point == Run::FINISHED_RECOVERY_POINT.to_s # rubocop:disable Style/GuardClause
140
+ if recovery_point.to_s == Run::FINISHED_RECOVERY_POINT.to_s # rubocop:disable Style/GuardClause
142
141
  break
143
142
  elsif current_step.nil?
144
143
  raise UnknownRecoveryPoint, "Defined workflow does not reference this step: #{recovery_point}"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acidic_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre13
4
+ version: 1.0.0.pre16
5
5
  platform: ruby
6
6
  authors:
7
7
  - fractaledmind
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-16 00:00:00.000000000 Z
11
+ date: 2022-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 6.1.0
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 6.1.0
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,20 +38,216 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: database_cleaner
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activejob
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: combustion
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: net-smtp
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: noticed
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
41
125
  - !ruby/object:Gem::Dependency
42
126
  name: railties
43
127
  requirement: !ruby/object:Gem::Requirement
44
128
  requirements:
45
129
  - - ">="
46
130
  - !ruby/object:Gem::Version
47
- version: 6.1.0
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rake
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
48
160
  type: :development
49
161
  prerelease: false
50
162
  version_requirements: !ruby/object:Gem::Requirement
51
163
  requirements:
52
164
  - - ">="
53
165
  - !ruby/object:Gem::Version
54
- version: 6.1.0
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop-minitest
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop-rake
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: sidekiq
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: simplecov
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: sqlite3
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: warning
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
55
251
  description: Idempotent operations for Rails apps, built on top of ActiveJob.
56
252
  email:
57
253
  - stephen.margheim@gmail.com
@@ -74,6 +270,8 @@ files:
74
270
  - bin/console
75
271
  - bin/setup
76
272
  - blog_post.md
273
+ - gemfiles/rails_6.1.gemfile
274
+ - gemfiles/rails_7.0.gemfile
77
275
  - lib/acidic_job.rb
78
276
  - lib/acidic_job/awaiting.rb
79
277
  - lib/acidic_job/errors.rb
@@ -90,6 +288,7 @@ files:
90
288
  - lib/acidic_job/staging.rb
91
289
  - lib/acidic_job/step.rb
92
290
  - lib/acidic_job/test_case.rb
291
+ - lib/acidic_job/testing.rb
93
292
  - lib/acidic_job/upgrade_service.rb
94
293
  - lib/acidic_job/version.rb
95
294
  - lib/generators/acidic_job/drop_tables_generator.rb
@@ -103,6 +302,7 @@ metadata:
103
302
  homepage_uri: https://github.com/fractaledmind/acidic_job
104
303
  source_code_uri: https://github.com/fractaledmind/acidic_job
105
304
  changelog_uri: https://github.com/fractaledmind/acidic_job/CHANGELOG.md
305
+ rubygems_mfa_required: 'true'
106
306
  post_install_message:
107
307
  rdoc_options: []
108
308
  require_paths:
@@ -118,7 +318,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
318
  - !ruby/object:Gem::Version
119
319
  version: 1.3.1
120
320
  requirements: []
121
- rubygems_version: 3.2.22
321
+ rubygems_version: 3.3.7
122
322
  signing_key:
123
323
  specification_version: 4
124
324
  summary: Idempotent operations for Rails apps, built on top of ActiveJob.