Class: Smith::Workflow::Graph::TransitionSnapshot
- Inherits:
-
Object
- Object
- Smith::Workflow::Graph::TransitionSnapshot
- Extended by:
- Dry::Initializer
- Defined in:
- lib/smith/workflow/graph/transition_snapshot.rb
Constant Summary collapse
- KINDS =
[ %i[deterministic deterministic?], %i[router routed?], %i[nested_workflow nested?], %i[optimizer optimized?], %i[orchestrator orchestrated?], %i[fanout fanout?], %i[parallel parallel?] ].freeze
Class Method Summary collapse
- .attributes_for(transition, workflow_class:) ⇒ Object
- .contract_attributes(transition, workflow_class:) ⇒ Object
- .fanout_for(transition, workflow_class:) ⇒ Object
- .from_transition(transition, workflow_class: nil) ⇒ Object
- .kind_for(transition) ⇒ Object
- .optimization_for(transition, workflow_class:) ⇒ Object
- .orchestration_for(transition, workflow_class:) ⇒ Object
- .retry_policy_for(transition) ⇒ Object
- .routing_attributes(transition) ⇒ Object
Instance Method Summary collapse
Class Method Details
.attributes_for(transition, workflow_class:) ⇒ Object
44 45 46 47 48 49 50 51 |
# File 'lib/smith/workflow/graph/transition_snapshot.rb', line 44 def self.attributes_for(transition, workflow_class:) { name: transition.name, from: transition.from, to: transition.to, kind: kind_for(transition) }.merge(routing_attributes(transition), contract_attributes(transition, workflow_class: workflow_class)) end |
.contract_attributes(transition, workflow_class:) ⇒ Object
64 65 66 67 68 69 70 71 |
# File 'lib/smith/workflow/graph/transition_snapshot.rb', line 64 def self.contract_attributes(transition, workflow_class:) { fanout: fanout_for(transition, workflow_class: workflow_class), optimization: optimization_for(transition, workflow_class: workflow_class), orchestration: orchestration_for(transition, workflow_class: workflow_class), retry_policy: retry_policy_for(transition) } end |
.fanout_for(transition, workflow_class:) ⇒ Object
73 74 75 |
# File 'lib/smith/workflow/graph/transition_snapshot.rb', line 73 def self.fanout_for(transition, workflow_class:) FanoutContract.from_transition(transition, workflow_class: workflow_class) end |
.from_transition(transition, workflow_class: nil) ⇒ Object
40 41 42 |
# File 'lib/smith/workflow/graph/transition_snapshot.rb', line 40 def self.from_transition(transition, workflow_class: nil) new(**attributes_for(transition, workflow_class: workflow_class)) end |
.kind_for(transition) ⇒ Object
98 99 100 101 102 103 104 |
# File 'lib/smith/workflow/graph/transition_snapshot.rb', line 98 def self.kind_for(transition) kind = KINDS.find { |_name, predicate| transition.public_send(predicate) } return kind.first if kind return :agent if transition.agent_name :noop end |
.optimization_for(transition, workflow_class:) ⇒ Object
77 78 79 |
# File 'lib/smith/workflow/graph/transition_snapshot.rb', line 77 def self.optimization_for(transition, workflow_class:) OptimizationContract.from_transition(transition, workflow_class: workflow_class) end |
.orchestration_for(transition, workflow_class:) ⇒ Object
81 82 83 |
# File 'lib/smith/workflow/graph/transition_snapshot.rb', line 81 def self.orchestration_for(transition, workflow_class:) OrchestrationContract.from_transition(transition, workflow_class: workflow_class) end |
.retry_policy_for(transition) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/smith/workflow/graph/transition_snapshot.rb', line 85 def self.retry_policy_for(transition) config = transition.retry_config return unless config { attempts: config.fetch(:attempts), error_classes: config.fetch(:error_classes).map(&:name), backoff: config.fetch(:backoff), max_delay: config[:max_delay], jitter: config.fetch(:jitter) }.compact end |
.routing_attributes(transition) ⇒ Object
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/smith/workflow/graph/transition_snapshot.rb', line 53 def self.routing_attributes(transition) { success_transition: transition.success_transition, failure_transition: transition.failure_transition, routes: transition.router_config&.fetch(:routes, nil), fallback: transition.router_config&.fetch(:fallback, nil), deterministic_routes: transition.deterministic_routes, fanout_branches: transition.fanout_config&.fetch(:branches, nil) } end |
Instance Method Details
#to_h ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/smith/workflow/graph/transition_snapshot.rb', line 106 def to_h { name: name, from: from, to: to, kind: kind, success_transition: success_transition, failure_transition: failure_transition, routes: routes, fallback: fallback, deterministic_routes: deterministic_routes, fanout_branches: fanout_branches, fanout: fanout, optimization: optimization, orchestration: orchestration, retry_policy: retry_policy }.compact end |