acidic_job 1.0.0.beta.5 → 1.0.0.beta.8

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: 3c63f44eea243551258930cb521408f7691419297922f39f3722d9386764a877
4
- data.tar.gz: 2a292f1abba04cf031c524084eb48ce8a4a16084b79614843aba2593edeaae5f
3
+ metadata.gz: 81769867ab7962af7062bc8714523d8743a629b3e13eb71f6f5561024bfe795c
4
+ data.tar.gz: bc8ca04208ed63b2a70839490a44102868238df48740a19f7a1d08d19115b29b
5
5
  SHA512:
6
- metadata.gz: dae8645e4495d7b770fb7fe4a4875d3335a4c47239532cb769701bc18cba1867a3462cf5280d89d0d880841721a7db4091c40e952917d2169fc31067dac6cc98
7
- data.tar.gz: 7a25ad55a271707f5444e66df9588594a62751e25310f300580169ae376236cbd9d0f4186bdd184d32b30cbc13953e100666614a7155307bbd4809867f87b534
6
+ metadata.gz: f9cc54a6e0956fed6fb57babdca80a95126810dae84d244abbd162e428bb52bb7cc59ccf34e2f5a9fea29ac7ea719919bd2c8f6fbe026e167947a69aae794be3
7
+ data.tar.gz: eefa772f9f26643ba39048f6d61b460a08b55c635386803df62e476edf3b00c77000380b0b3bf94fbe00b4d11ece3cdd764f07d97ab656e6aa54e41097f7df47
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- acidic_job (1.0.0.beta.5)
4
+ acidic_job (1.0.0.beta.8)
5
5
  activejob
6
6
  activerecord
7
7
  activesupport
@@ -15,4 +15,5 @@ module AcidicJob
15
15
  class UnserializableValue < Error; end
16
16
  class LockedIdempotencyKey < Error; end
17
17
  class MismatchedIdempotencyKeyAndJobArguments < Error; end
18
+ class MissingBlockArgument < Error; end
18
19
  end
@@ -81,12 +81,9 @@ module AcidicJob
81
81
  @workflow_builder = WorkflowBuilder.new
82
82
 
83
83
  raise MissingWorkflowBlock, "A block must be passed to `with_acidic_workflow`" unless block_given?
84
+ raise MissingBlockArgument, "An argument must be passed to the `with_acidic_workflow` block" if block.arity.zero?
84
85
 
85
- if block.arity.zero?
86
- @workflow_builder.instance_exec(&block)
87
- else
88
- yield @workflow_builder
89
- end
86
+ block.call @workflow_builder
90
87
 
91
88
  raise NoDefinedSteps if @workflow_builder.steps.empty?
92
89
 
@@ -230,7 +227,7 @@ module AcidicJob
230
227
 
231
228
  # "STG__#{idempotency_key}__#{encoded_global_id}"
232
229
  _prefix, _idempotency_key, encoded_global_id = job_id.split("__")
233
- staged_job_gid = "gid://#{::Base64.decode64(encoded_global_id)}"
230
+ staged_job_gid = "gid://#{::Base64.urlsafe_decode64(encoded_global_id)}"
234
231
 
235
232
  @staged_job_run = ::GlobalID::Locator.locate(staged_job_gid)
236
233
  end
@@ -19,7 +19,7 @@ module AcidicJob
19
19
  if !@run.known_recovery_point?
20
20
  raise UnknownRecoveryPoint,
21
21
  "Defined workflow does not reference this step: #{@run.current_step_name.inspect}"
22
- elsif !Array(awaited_jobs = @run.current_step_hash.fetch("awaits", [])).compact.empty?
22
+ elsif (awaited_jobs = jobs_from(@run.current_step_awaits)).any?
23
23
  # We only execute the current step, without progressing to the next step.
24
24
  # This ensures that any failures in parallel jobs will have this step retried in the main workflow
25
25
  step_result = @workflow.execute_current_step
@@ -47,14 +47,12 @@ module AcidicJob
47
47
 
48
48
  private
49
49
 
50
- def enqueue_awaited_jobs(jobs_or_jobs_getter, step_result)
51
- awaited_jobs = jobs_from(jobs_or_jobs_getter)
52
-
50
+ def enqueue_awaited_jobs(awaited_jobs, step_result)
53
51
  AcidicJob.logger.log_run_event("Enqueuing #{awaited_jobs.count} awaited jobs...", @job, @run)
54
52
  # All jobs created in the block are pushed atomically at the end of the block.
55
53
  AcidicJob::Run.transaction do
56
54
  awaited_jobs.each do |awaited_job|
57
- worker_class, args = job_args_and_kwargs(awaited_job)
55
+ worker_class, args = job_and_args(awaited_job)
58
56
 
59
57
  job = worker_class.new(*args)
60
58
 
@@ -67,10 +65,11 @@ module AcidicJob
67
65
  def jobs_from(jobs_or_jobs_getter)
68
66
  case jobs_or_jobs_getter
69
67
  when Array
70
- jobs_or_jobs_getter
68
+ jobs_or_jobs_getter.compact
71
69
  when Symbol, String
72
70
  if @job.respond_to?(jobs_or_jobs_getter, _include_private = true)
73
- @job.method(jobs_or_jobs_getter).call
71
+ jobs = @job.method(jobs_or_jobs_getter).call
72
+ Array(jobs).compact
74
73
  else
75
74
  raise UnknownAwaitedJob,
76
75
  "Invalid `awaits`; unknown method `#{jobs_or_jobs_getter}` for this job"
@@ -81,7 +80,7 @@ module AcidicJob
81
80
  end
82
81
  end
83
82
 
84
- def job_args_and_kwargs(job)
83
+ def job_and_args(job)
85
84
  case job
86
85
  when Class
87
86
  [job, []]
@@ -130,7 +130,7 @@ module AcidicJob
130
130
  # encode the identifier for this record in the job ID
131
131
  global_id = to_global_id.to_s.remove("gid://")
132
132
  # base64 encoding for minimal security
133
- encoded_global_id = Base64.encode64(global_id).strip
133
+ encoded_global_id = Base64.urlsafe_encode64(global_id, padding: false)
134
134
 
135
135
  [
136
136
  STAGED_JOB_ID_PREFIX,
@@ -173,6 +173,10 @@ module AcidicJob
173
173
  current_step_hash.fetch("then")
174
174
  end
175
175
 
176
+ def current_step_awaits
177
+ current_step_hash["awaits"]
178
+ end
179
+
176
180
  def next_step_finishes?
177
181
  next_step_name.to_s == FINISHED_RECOVERY_POINT
178
182
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AcidicJob
4
- VERSION = "1.0.0.beta.5"
4
+ VERSION = "1.0.0.beta.8"
5
5
  end
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.beta.5
4
+ version: 1.0.0.beta.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - fractaledmind
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-09 00:00:00.000000000 Z
11
+ date: 2022-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activejob