Class: RubyReactor::Dsl::InterruptBuilder

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

Constant Summary

Constants included from StepSignals

StepSignals::TAG

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, #Halt, #Skipped, #Success, #element, #input, #result, #value

Methods included from StepSignals

#fail!, #halt!, #skip!, #success!

Constructor Details

#initialize(name, reactor = nil, resume: :inline) ⇒ InterruptBuilder

Returns a new instance of InterruptBuilder.



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

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

Instance Method Details

#buildObject



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

def build
  step_config = {
    name: @name,
    correlation_id_block: @correlation_id_block,
    timeout_config: @timeout_config,
    validation_schema: @validation_schema,
    max_attempts: @max_attempts,
    resume_mode: @resume_mode,
    dependencies: @dependencies,
    conditions: @conditions,
    guards: @guards
  }

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

#correlation_id(&block) ⇒ Object



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

def correlation_id(&block)
  @correlation_id_block = block
end

#max_attempts(count) ⇒ Object



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

def max_attempts(count)
  @max_attempts = count
end

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



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

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

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

Deprecated alias for #validate_payload.



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

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.



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

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