Sha256: b8cdb14d4ab58f750a76b3c0e19e250a1b9c3d481c2d5bd1fb3096c76130fde4
Contents?: true
Size: 1.75 KB
Versions: 6
Compression:
Stored size: 1.75 KB
Contents
require 'action_logic/action_core' require 'action_logic/action_validation' module ActionLogic module ActionCoordinator include ActionLogic::ActionValidation include ActionLogic::ActionCore def self.included(klass) klass.extend ClassMethods klass.extend ActionLogic::ActionCore::ClassMethods klass.extend ActionLogic::ActionValidation::ClassMethods end module ClassMethods def execute(params = {}) around(params) do |execution_context| execution_context.call next_execution_context = execution_context.plan.keys.first while (next_execution_context) do execution_context.context = next_execution_context.execute(execution_context.context) next_execution_context = execution_context.plan[next_execution_context][execution_context.context.status] # From the perspective of the coordinator, the status of the context should be # :success as long as the state transition plan defines the next execution context # for a given current exection context and its resulting context state. # However, because normally a context in a state of :halted or :failure would # be considered a "breaking" state, the status of a context that is :halted or :failure # has to be reset to the default :success status only within the execution context of # the coordinator and only when the next execution context is defined within the # state transition plan. Otherwise, the context is return as is, without mutating its :status. execution_context.context.status = :success if next_execution_context end execution_context.context end end end end end
Version data entries
6 entries across 6 versions & 1 rubygems