Class: RubyReactor::Dsl::ComposeBuilder

Inherits:
Object
  • Object
show all
Includes:
TemplateHelpers
Defined in:
lib/ruby_reactor/dsl/compose_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from TemplateHelpers

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

Constructor Details

#initialize(name, composed_reactor_class = nil, reactor = nil, &block) ⇒ ComposeBuilder

Returns a new instance of ComposeBuilder.



10
11
12
13
14
15
16
17
# File 'lib/ruby_reactor/dsl/compose_builder.rb', line 10

def initialize(name, composed_reactor_class = nil, reactor = nil, &block)
  @name = name
  @composed_reactor_class = composed_reactor_class || (block ? Class.new(RubyReactor::Reactor) : nil)
  @reactor = reactor
  @argument_mappings = {}
  @async = false
  @retry_config = {}
end

Instance Attribute Details

#argument_mappingsObject

Returns the value of attribute argument_mappings.



8
9
10
# File 'lib/ruby_reactor/dsl/compose_builder.rb', line 8

def argument_mappings
  @argument_mappings
end

#composed_reactor_classObject

Returns the value of attribute composed_reactor_class.



8
9
10
# File 'lib/ruby_reactor/dsl/compose_builder.rb', line 8

def composed_reactor_class
  @composed_reactor_class
end

#nameObject

Returns the value of attribute name.



8
9
10
# File 'lib/ruby_reactor/dsl/compose_builder.rb', line 8

def name
  @name
end

Instance Method Details

#argument(composed_input_name, source) ⇒ Object



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

def argument(composed_input_name, source)
  @argument_mappings[composed_input_name] = source
end

#async(async = true) ⇒ Object



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

def async(async = true)
  @async = async
end

#buildObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/ruby_reactor/dsl/compose_builder.rb', line 35

def build
  dependencies = extract_dependencies_from_mappings

  step_config = {
    name: @name,
    impl: RubyReactor::Step::ComposeStep,
    arguments: {
      composed_reactor_class: { source: RubyReactor::Template::Value.new(@composed_reactor_class) },
      argument_mappings: { source: RubyReactor::Template::Value.new(@argument_mappings) }
    },
    run_block: nil,
    compensate_block: nil,
    undo_block: nil,
    conditions: [],
    guards: [],
    dependencies: dependencies,
    args_validator: nil,
    output_validator: nil,
    async: @async,
    retry_config: @retry_config.empty? ? (@reactor&.retry_defaults || {}) : @retry_config
  }

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

#compose(name, reactor_class = nil, &block) ⇒ Object



66
67
68
69
# File 'lib/ruby_reactor/dsl/compose_builder.rb', line 66

def compose(name, reactor_class = nil, &block)
  ensure_composed_reactor_class!
  @composed_reactor_class.compose(name, reactor_class, &block)
end

#retries(max_attempts: 3, backoff: :exponential, base_delay: 1) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/ruby_reactor/dsl/compose_builder.rb', line 27

def retries(max_attempts: 3, backoff: :exponential, base_delay: 1)
  @retry_config = {
    max_attempts: max_attempts,
    backoff: backoff,
    base_delay: base_delay
  }
end

#step(name, &block) ⇒ Object

Delegate step definition methods to the composed reactor class



61
62
63
64
# File 'lib/ruby_reactor/dsl/compose_builder.rb', line 61

def step(name, &block)
  ensure_composed_reactor_class!
  @composed_reactor_class.step(name, &block)
end