Module: Igniter::Contracts::Execution::StepResultValidators

Defined in:
lib/igniter/contracts/execution/step_result_validators.rb

Class Method Summary collapse

Class Method Details

.step_operations(operations) ⇒ Object



38
39
40
# File 'lib/igniter/contracts/execution/step_result_validators.rb', line 38

def step_operations(operations)
  operations.select { |operation| operation.kind == :step }
end

.validate_step_callables(operations:, profile: nil) ⇒ Object

rubocop:disable Lint/UnusedMethodArgument



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/igniter/contracts/execution/step_result_validators.rb', line 25

def validate_step_callables(operations:, profile: nil) # rubocop:disable Lint/UnusedMethodArgument
  missing = step_operations(operations)
            .reject { |operation| operation.attributes[:callable].respond_to?(:call) }
            .map(&:name)
  return [] if missing.empty?

  [ValidationFinding.new(
    code: :missing_step_callable,
    message: "step nodes require a callable: #{missing.map(&:to_s).join(", ")}",
    subjects: missing
  )]
end

.validate_step_dependencies(operations:, profile: nil) ⇒ Object

rubocop:disable Lint/UnusedMethodArgument



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/igniter/contracts/execution/step_result_validators.rb', line 9

def validate_step_dependencies(operations:, profile: nil) # rubocop:disable Lint/UnusedMethodArgument
  available = operations.reject(&:output?).map(&:name)
  missing = step_operations(operations)
            .flat_map { |operation| Array(operation.attributes[:depends_on]) }
            .map(&:to_sym)
            .reject { |name| available.include?(name) }
            .uniq
  return [] if missing.empty?

  [ValidationFinding.new(
    code: :missing_step_dependencies,
    message: "step dependencies are not defined: #{missing.map(&:to_s).join(", ")}",
    subjects: missing
  )]
end