Class: RubyReactor::Dsl::InterruptBuilder

Inherits:
StepBuilder
  • Object
show all
Defined in:
lib/ruby_reactor/dsl/interrupt_builder.rb

Instance Attribute Summary

Attributes inherited from StepBuilder

#args_validator, #arguments, #compensate_block, #conditions, #dependencies, #guards, #impl, #name, #output_validator, #retry_config, #run_block, #undo_block

Instance Method Summary collapse

Methods inherited from StepBuilder

#argument, #async, #compensate, #guard, #retries, #run, #undo, #validate_args, #validate_output, #wait_for, #where

Methods included from ValidationHelpers

#build_args_validator, #build_inline_validator, #build_macro_validator, #build_scalar_validator, #build_validation_schema, #create_input_validator

Methods included from TemplateHelpers

#Failure, #Success, #element, #input, #result, #value

Constructor Details

#initialize(name, reactor = nil) ⇒ InterruptBuilder

Returns a new instance of InterruptBuilder.



6
7
8
9
10
11
12
# File 'lib/ruby_reactor/dsl/interrupt_builder.rb', line 6

def initialize(name, reactor = nil)
  super(name, nil, reactor)
  @correlation_id_block = nil
  @timeout_config = nil
  @validation_schema = nil
  @max_attempts = 1
end

Instance Method Details

#buildObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/ruby_reactor/dsl/interrupt_builder.rb', line 47

def build
  step_config = {
    name: @name,
    correlation_id_block: @correlation_id_block,
    timeout_config: @timeout_config,
    validation_schema: @validation_schema,
    max_attempts: @max_attempts,
    dependencies: @dependencies,
    async: false, # Interrupts are effectively boundaries, not async jobs themselves (until resumed)
    conditions: @conditions,
    guards: @guards
  }

  RubyReactor::Dsl::InterruptStepConfig.new(step_config)
end

#correlation_id(&block) ⇒ Object



18
19
20
# File 'lib/ruby_reactor/dsl/interrupt_builder.rb', line 18

def correlation_id(&block)
  @correlation_id_block = block
end

#max_attempts(count) ⇒ Object



14
15
16
# File 'lib/ruby_reactor/dsl/interrupt_builder.rb', line 14

def max_attempts(count)
  @max_attempts = count
end

#timeout(seconds, strategy: :lazy) ⇒ Object



22
23
24
# File 'lib/ruby_reactor/dsl/interrupt_builder.rb', line 22

def timeout(seconds, strategy: :lazy)
  @timeout_config = { duration: seconds, strategy: strategy }
end

#validate(schema = nil, &block) ⇒ Object

Deprecated alias for #validate_payload.



39
40
41
42
43
44
45
# File 'lib/ruby_reactor/dsl/interrupt_builder.rb', line 39

def validate(schema = nil, &block)
  unless @warned_validate
    @warned_validate = true
    warn "[RubyReactor] DEPRECATION: interrupt `validate` is deprecated; use `validate_payload` instead."
  end
  validate_payload(schema, &block)
end

#validate_payload(schema = nil, &block) ⇒ Object

Validate the resume payload. Accepts a block (schema DSL) or a pre-built dry-schema. Payloads are multi-field hashes, so the block stays primary.



28
29
30
31
32
33
34
35
36
# File 'lib/ruby_reactor/dsl/interrupt_builder.rb', line 28

def validate_payload(schema = nil, &block)
  check_dry_validation_available!
  @validation_schema =
    if block
      build_validation_schema(&block)
    elsif schema
      RubyReactor::Validation::SchemaBuilder.schema_for(schema)
    end
end