Module: ActiveJob::Temporal::DependencyOptions

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

Constant Summary collapse

JOB_CLASS_NAME_PATTERN =
/\A[A-Z]\w*(?:::[A-Z]\w*)*\z/
SAFE_ID_PATTERN =
/\A[A-Za-z0-9_.:-]+\z/
FAILURE_POLICIES =
%i[fail ignore].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#temporal_dependenciesObject (readonly)

Returns the value of attribute temporal_dependencies.



13
14
15
# File 'lib/activejob/temporal/dependency_options.rb', line 13

def temporal_dependencies
  @temporal_dependencies
end

#temporal_dependency_failure_policyObject (readonly)

Returns the value of attribute temporal_dependency_failure_policy.



13
14
15
# File 'lib/activejob/temporal/dependency_options.rb', line 13

def temporal_dependency_failure_policy
  @temporal_dependency_failure_policy
end

Class Method Details

.normalize(depends_on) ⇒ Object

Raises:

  • (ArgumentError)


15
16
17
18
19
20
# File 'lib/activejob/temporal/dependency_options.rb', line 15

def self.normalize(depends_on)
  dependencies = depends_on.is_a?(Array) ? depends_on : [depends_on]
  raise ArgumentError, "depends_on must contain at least one job dependency" if dependencies.empty?

  dependencies.map { |dependency| normalize_dependency(dependency) }
end

.normalize_failure_policy(policy) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/activejob/temporal/dependency_options.rb', line 22

def self.normalize_failure_policy(policy)
  normalized_policy = policy.to_sym
  return normalized_policy if FAILURE_POLICIES.include?(normalized_policy)

  raise ArgumentError, "on_dependency_failure must be :fail or :ignore"
rescue NoMethodError
  raise ArgumentError, "on_dependency_failure must be :fail or :ignore"
end

Instance Method Details

#set(options = {}) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/activejob/temporal/dependency_options.rb', line 100

def set(options = {})
  enqueue_options = options.dup
  dependencies_configured = enqueue_options.key?(:depends_on)
  failure_policy_configured = enqueue_options.key?(:on_dependency_failure)

  normalized_dependencies = if dependencies_configured
                              DependencyOptions.normalize(enqueue_options.delete(:depends_on))
                            end
  normalized_failure_policy = normalize_dependency_failure_policy(
    enqueue_options.delete(:on_dependency_failure),
    failure_policy_configured
  )

  if failure_policy_configured && !dependencies_configured && normalized_dependencies.nil?
    raise ArgumentError, "on_dependency_failure requires depends_on"
  end

  super(enqueue_options).tap do
    @temporal_dependencies = normalized_dependencies if dependencies_configured
    @temporal_dependency_failure_policy = normalized_failure_policy || :fail if dependencies_configured
  end
end