Sha256: 246c814e3a673b3041d711d2c7449a2adf2e7693ba33006f3316a1564ad7855a
Contents?: true
Size: 1.89 KB
Versions: 2
Compression:
Stored size: 1.89 KB
Contents
# frozen_string_literal: true module Floe class Workflow class State include Logging class << self def build!(workflow, name, payload) state_type = payload["Type"] begin klass = Floe::Workflow::States.const_get(state_type) rescue NameError raise Floe::InvalidWorkflowError, "Invalid state type: [#{state_type}]" end klass.new(workflow, name, payload) end end attr_reader :workflow, :comment, :name, :type, :payload def initialize(workflow, name, payload) @workflow = workflow @name = name @payload = payload @end = !!payload["End"] @type = payload["Type"] @comment = payload["Comment"] end def end? @end end def context workflow.context end def run!(input) logger.info("Running state: [#{name}] with input [#{input}]") input = input_path.value(context, input) output, next_state = block_given? ? yield(input) : input next_state ||= workflow.states_by_name[payload["Next"]] unless end? output ||= input output = output_path&.value(context, output) logger.info("Running state: [#{name}] with input [#{input}]...Complete - next state: [#{next_state&.name}] output: [#{output}]") [next_state, output] end def to_dot String.new.tap do |s| s << " #{name}" attributes = to_dot_attributes s << " [ #{attributes.to_a.map { |kv| kv.join("=") }.join(" ")} ]" unless attributes.empty? end end private def to_dot_attributes end? ? {:style => "bold"} : {} end def to_dot_transitions next_state_name = payload["Next"] unless end? Array(next_state_name && " #{name} -> #{next_state_name}") end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
floe-0.1.1 | lib/floe/workflow/state.rb |
floe-0.1.0 | lib/floe/workflow/state.rb |