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