lib/floe/workflow/state.rb in floe-0.11.3 vs lib/floe/workflow/state.rb in floe-0.12.0

- old
+ new

@@ -2,36 +2,35 @@ module Floe class Workflow class State include Logging + include ValidationMixin class << self def build!(workflow, name, payload) state_type = payload["Type"] - raise Floe::InvalidWorkflowError, "Missing \"Type\" field in state [#{name}]" if payload["Type"].nil? + missing_field_error!(name, "Type") if payload["Type"].nil? + invalid_field_error!(name[0..-2], "Name", name.last, "must be less than or equal to 80 characters") if name.last.length > 80 begin klass = Floe::Workflow::States.const_get(state_type) rescue NameError - raise Floe::InvalidWorkflowError, "Invalid state type: [#{state_type}]" + invalid_field_error!(name, "Type", state_type, "is not valid") end klass.new(workflow, name, payload) end end attr_reader :comment, :name, :type, :payload - def initialize(workflow, name, payload) + def initialize(_workflow, name, payload) @name = name @payload = payload @type = payload["Type"] @comment = payload["Comment"] - - raise Floe::InvalidWorkflowError, "Missing \"Type\" field in state [#{name}]" if payload["Type"].nil? - raise Floe::InvalidWorkflowError, "State name [#{name[..79]}...] must be less than or equal to 80 characters" if name.length > 80 end def wait(context, timeout: nil) start = Time.now.utc @@ -52,22 +51,22 @@ end def start(context) context.state["EnteredTime"] = Time.now.utc.iso8601 - logger.info("Running state: [#{long_name}] with input [#{context.input}]...") + logger.info("Running state: [#{long_name}] with input [#{context.json_input}]...") end def finish(context) finished_time = Time.now.utc entered_time = Time.parse(context.state["EnteredTime"]) context.state["FinishedTime"] ||= finished_time.iso8601 context.state["Duration"] = finished_time - entered_time - level = context.output&.[]("Error") ? :error : :info - logger.public_send(level, "Running state: [#{long_name}] with input [#{context.input}]...Complete #{context.next_state ? "- next state [#{context.next_state}]" : "workflow -"} output: [#{context.output}]") + level = context.failed? ? :error : :info + logger.public_send(level, "Running state: [#{long_name}] with input [#{context.json_input}]...Complete #{context.next_state ? "- next state [#{context.next_state}]" : "workflow -"} output: [#{context.json_output}]") 0 end def ready?(context) @@ -84,19 +83,23 @@ def wait_until(context) context.state["WaitUntil"] && Time.parse(context.state["WaitUntil"]) end + def short_name + name.last + end + def long_name - "#{@type}:#{name}" + "#{type}:#{short_name}" end private def wait_until!(context, seconds: nil, time: nil) context.state["WaitUntil"] = if seconds - (Time.parse(context.state["EnteredTime"]) + seconds).iso8601 + (Time.now + seconds).iso8601 elsif time.kind_of?(String) time else time.iso8601 end