Module: ActiveJob::Temporal::JobIdValidation

Defined in:
lib/activejob/temporal/job_id_validation.rb

Constant Summary collapse

MAX_JOB_ID_LENGTH =
WorkflowIdBuilder::MAX_WORKFLOW_ID_LENGTH
CONTROL_CHARACTER_PATTERN =
WorkflowIdBuilder::CONTROL_CHARACTER_PATTERN
SCHEDULE_WORKFLOW_ID_PREFIX =
"ajschwf:"

Class Method Summary collapse

Class Method Details

.schedule_execution_reference(job_id) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/activejob/temporal/job_id_validation.rb', line 31

def schedule_execution_reference(job_id)
  return unless job_id.start_with?(SCHEDULE_WORKFLOW_ID_PREFIX)

  workflow_id, separator, run_id = job_id.rpartition(":")
  return if separator.empty? || workflow_id.empty? || run_id.empty?

  { workflow_id: workflow_id, run_id: run_id }
end

.validate!(job_id) ⇒ Object

Raises:

  • (ArgumentError)


14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/activejob/temporal/job_id_validation.rb', line 14

def validate!(job_id)
  unless job_id.is_a?(String)
    raise ArgumentError, "job_id must be a String, got #{job_id.class}: #{job_id.inspect}"
  end

  raise ArgumentError, "job_id must be valid UTF-8" unless job_id.valid_encoding?
  raise ArgumentError, "job_id must not be blank" if job_id.strip.empty?

  if job_id.length > MAX_JOB_ID_LENGTH
    raise ArgumentError, "job_id maximum length is #{MAX_JOB_ID_LENGTH} characters (got #{job_id.length})"
  end

  return unless job_id.match?(CONTROL_CHARACTER_PATTERN)

  raise ArgumentError, "job_id control characters are not allowed (got #{job_id.inspect})"
end