require 'rubygems' require 'json/ext' module Factor module Runtime class WorkflowStepMessage attr_accessor :body, :workflow, :workflow_instance_id, :step_id, :last_step_id, :position def initialize @step_id=SecureRandom.hex # @workflow = workflow @body = Hash.new @position = Array.new end def respond(params, event) m = WorkflowStepMessage.new m.body = @body m.workflow_instance_id=@workflow_instance_id m.last_step_id = @step_id m.workflow = @workflow m.position = @position m.position << "on" m.position << event m.add_values(params) m end def add_values(values) current=@body position.each do |key| current[key]={} if !current.include?(key) current=current[key] end values.each do |key,value| current[key]=value end end def route # "#{workflow}.#{position.join('.')}" "workflow" end def payload JSON.generator = JSON::Ext::Generator obj = {"body"=>@body, "workflow_instance_id"=>@workflow_instance_id, "step_id"=>@step_id, "last_step_id"=>@last_step_id, "workflow"=>@workflow,"position"=>@position} JSON.generate(obj) end def from_queue payload message=JSON.parse(payload) @workflow = message["workflow"] @position=message["position"] @body=message["body"] @workflow_instance_id=message["workflow_instance_id"] @step_id=message["step_id"] @last_step_id=message["last_step_id"] end end end end