Module: Trailblazer::Circuit::Trace

Defined in:
lib/trailblazer/circuit/trace.rb,
lib/trailblazer/circuit/present.rb

Overview

Trace#call will call the activities and trace what steps are called, options passed, and the order and nesting.

stack, _ = Trailblazer::Circuit::Trace.(activity, activity[:Start], { id: 1 })
puts Trailblazer::Circuit::Present.tree(stack) # renders the trail.

Defined Under Namespace

Modules: Present Classes: Stack

Class Method Summary collapse

Class Method Details

.AlterationsObject

Default tracing tasks to be plugged into the wrap circuit.



30
31
32
33
34
35
# File 'lib/trailblazer/circuit/trace.rb', line 30

def self.Alterations
  [
  ->(wrap_circuit) { Activity::Before( wrap_circuit, Wrap::Call, Trace.method(:capture_args),   direction: Right ) },
  ->(wrap_circuit) { Activity::Before( wrap_circuit, wrap_circuit[:End],      Trace.method(:capture_return), direction: Right ) },
  ]
end

.call(activity, direction, options, flow_options = {}, &block) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/trailblazer/circuit/trace.rb', line 9

def self.call(activity, direction, options, flow_options={}, &block)
  tracing_flow_options = {
    runner:       Wrap::Runner,
    stack:        Trace::Stack.new,
    wrap_runtime: Wrap::Alterations.new(default: Trace.Alterations),
    wrap_static:  Wrap::Alterations.new,
    debug:        {}, # usually set that in Activity::call.
  }

  direction, options, flow_options = call_circuit( activity, direction, options, tracing_flow_options.merge(flow_options), &block )

  return flow_options[:stack].to_a, direction, options, flow_options
end

.call_circuit(activity, *args, &block) ⇒ Object

TODO: test alterations with any wrap_circuit.



24
25
26
27
# File 'lib/trailblazer/circuit/trace.rb', line 24

def self.call_circuit(activity, *args, &block)
  return activity.(*args) unless block
  block.(activity, *args)
end

.capture_args(direction, options, flow_options, wrap_config, original_flow_options) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/trailblazer/circuit/trace.rb', line 37

def self.capture_args(direction, options, flow_options, wrap_config, original_flow_options)
  original_flow_options[:stack].indent!

  original_flow_options[:stack] << [ wrap_config[:task], :args, nil, options.dup, original_flow_options[:debug] ]

  [ direction, options, flow_options, wrap_config, original_flow_options ]
end

.capture_return(direction, options, flow_options, wrap_config, original_flow_options) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/trailblazer/circuit/trace.rb', line 45

def self.capture_return(direction, options, flow_options, wrap_config, original_flow_options)
  original_flow_options[:stack] << [ wrap_config[:task], :return, flow_options[:result_direction], options.dup ]

  original_flow_options[:stack].unindent!

  [ direction, options, flow_options, wrap_config, original_flow_options ]
end