acidic_job 1.0.0.pre15 → 1.0.0.pre18

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: 027f8f80b370e238f64d6f6dbc9cbddd9738ebb97db7d5b9e35a8872933965f7
4
- data.tar.gz: 95119d599bb5c986edce1fdcef26bf03c62b94fac85f6045d92d51b2793e59bd
3
+ metadata.gz: 6a350dbda056af9bf8965e6a68ece409285d0ba18c03c264509e7249e1635883
4
+ data.tar.gz: 4361b820ca0efb3f30fbd726692ffbe815746d5adcf1582710e4abcee3246ca6
5
5
  SHA512:
6
- metadata.gz: c2cbc3e2a8e6841a63e27e1622394046932e0679e7f41fe5950e25297cc6754efb5d66df0d1ed85dfb6a2089a6e52a4032e41a96ebbb0e0ec3428a2523d219b0
7
- data.tar.gz: 42849b9a525f5e6a8d2d2c5cd4845d6cc4793331e78f9d083ebb74256227f5b0c5abc5dad01e19e4e2e17ae791ba78c7b678cfd4fb44c325f24f51203fc8f8cf
6
+ metadata.gz: e97d5c3dc34f74249d9aed1a43ac80a9db776cc7f9eb7e19894bbbbce9ccf4c74395f988fb9cf14d918bf8107642b948e018dfc407528523cd056ff596a86bb7
7
+ data.tar.gz: ac977d26c7dd272ea9c7503846beeed90b909d52abd425b96c354ac0d21658dbe0849752d005e4b847749667bca6298557ae1edcd75a37278fb9db904875e23d
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- acidic_job (1.0.0.pre15)
4
+ acidic_job (1.0.0.pre18)
5
5
  activerecord
6
6
  activesupport
7
+ database_cleaner
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
@@ -204,7 +205,7 @@ GEM
204
205
  rubocop-rake (0.6.0)
205
206
  rubocop (~> 1.0)
206
207
  ruby-progressbar (1.11.0)
207
- sidekiq (6.4.1)
208
+ sidekiq (6.4.2)
208
209
  connection_pool (>= 2.2.2)
209
210
  rack (~> 2.0)
210
211
  redis (>= 4.2.0)
@@ -238,7 +239,6 @@ DEPENDENCIES
238
239
  acidic_job!
239
240
  activejob
240
241
  combustion
241
- database_cleaner
242
242
  minitest
243
243
  net-smtp
244
244
  noticed
data/acidic_job.gemspec CHANGED
@@ -29,9 +29,9 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_dependency "activerecord"
31
31
  spec.add_dependency "activesupport"
32
+ spec.add_dependency "database_cleaner"
32
33
  spec.add_development_dependency "activejob"
33
34
  spec.add_development_dependency "combustion"
34
- spec.add_development_dependency "database_cleaner"
35
35
  spec.add_development_dependency "minitest"
36
36
  spec.add_development_dependency "net-smtp"
37
37
  spec.add_development_dependency "noticed"
@@ -25,12 +25,16 @@ module AcidicJob
25
25
  # and `AcidicJob::DeliverAcidicly#deliver_acidicly`
26
26
  def serialize_with_arguments(args = [], _kwargs = nil)
27
27
  # THIS IS A HACK THAT ESSENTIALLY COPIES THE CODE FROM THE SIDEKIQ CODEBASE TO MIMIC THE BEHAVIOR
28
+ # updated to handle Sidekiq v6.4.2 at latest
28
29
  args = Array[args]
29
30
  normalized_args = ::Sidekiq.load_json(::Sidekiq.dump_json(args))
30
31
  item = { "class" => self, "args" => normalized_args }
31
32
  dummy_sidekiq_client = ::Sidekiq::Client.new
32
33
  normed = dummy_sidekiq_client.send :normalize_item, item
33
- dummy_sidekiq_client.send :process_single, item["class"], normed
34
+ redis_pool = dummy_sidekiq_client.instance_variable_get(:@redis_pool)
35
+ dummy_sidekiq_client.middleware.invoke(normed["class"], normed, normed["queue"], redis_pool) do
36
+ normed
37
+ end
34
38
  end
35
39
  end
36
40
 
@@ -52,6 +52,12 @@ module AcidicJob
52
52
  # {"does" => :enqueue_step, "then" => :next_step, "awaits" => [WorkerWithEnqueueStep::FirstWorker]}
53
53
  current_step = step["does"]
54
54
  next_step = step["then"]
55
+ # to support iteration within steps
56
+ iterable_key = step["for_each"]
57
+ iterated_key = "processed_#{current_step}_#{iterable_key}"
58
+ iterables = @run.attr_accessors.fetch(iterable_key, []) || []
59
+ iterateds = @run.attr_accessors.fetch(iterated_key, []) || []
60
+ next_item = iterables.reject { |item| iterateds.include? item }.first
55
61
 
56
62
  # jobs can have no-op steps, especially so that they can use only the async/await mechanism for that step
57
63
  callable = if @job.respond_to?(current_step, _include_private = true)
@@ -62,7 +68,11 @@ module AcidicJob
62
68
 
63
69
  # return a callable Proc with a consistent interface for the execution phase
64
70
  proc do |run|
65
- result = if callable.arity.zero?
71
+ result = if iterable_key.present? && next_item.present?
72
+ callable.call(next_item)
73
+ elsif iterable_key.present? && next_item.nil?
74
+ true
75
+ elsif callable.arity.zero?
66
76
  callable.call
67
77
  elsif callable.arity == 1
68
78
  callable.call(run)
@@ -72,6 +82,11 @@ module AcidicJob
72
82
 
73
83
  if result.is_a?(FinishedPoint)
74
84
  result
85
+ elsif next_item.present?
86
+ iterateds << next_item
87
+ @run.attr_accessors[iterated_key] = iterateds
88
+ @run.save!(validate: false)
89
+ RecoveryPoint.new(current_step)
75
90
  elsif next_step.to_s == Run::FINISHED_RECOVERY_POINT
76
91
  FinishedPoint.new
77
92
  else
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AcidicJob
4
- VERSION = "1.0.0.pre15"
4
+ VERSION = "1.0.0.pre18"
5
5
  end
data/lib/acidic_job.rb CHANGED
@@ -131,7 +131,7 @@ module AcidicJob
131
131
  return run.succeeded? if run.finished?
132
132
 
133
133
  # otherwise, we will enter a loop to process each step of the workflow
134
- run.workflow.size.times do
134
+ loop do
135
135
  recovery_point = run.recovery_point.to_s
136
136
  current_step = run.workflow[recovery_point]
137
137
 
@@ -170,12 +170,13 @@ module AcidicJob
170
170
  run.succeeded?
171
171
  end
172
172
 
173
- def step(method_name, awaits: [])
173
+ def step(method_name, awaits: [], for_each: nil)
174
174
  @__acidic_job_steps ||= []
175
175
 
176
176
  @__acidic_job_steps << {
177
177
  "does" => method_name.to_s,
178
- "awaits" => awaits
178
+ "awaits" => awaits,
179
+ "for_each" => for_each
179
180
  }
180
181
 
181
182
  @__acidic_job_steps
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.pre15
4
+ version: 1.0.0.pre18
5
5
  platform: ruby
6
6
  authors:
7
7
  - fractaledmind
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-05 00:00:00.000000000 Z
11
+ date: 2022-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -39,13 +39,13 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: activejob
42
+ name: database_cleaner
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
- type: :development
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: combustion
56
+ name: activejob
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: database_cleaner
70
+ name: combustion
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="