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

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 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