Sha256: c4539e01d32bda53e0eda3fb03b954b9eaa08bd81ff0e33e24ade02abf182ecb
Contents?: true
Size: 1.72 KB
Versions: 15
Compression:
Stored size: 1.72 KB
Contents
# coding: utf-8 # frozen_string_literal: true module Stealth module Flow class State include Comparable attr_accessor :name attr_reader :spec, :fails_to def initialize(name, spec, fails_to = nil) if fails_to.present? && !fails_to.is_a?(Stealth::Flow::State) raise(ArgumentError, 'fails_to state should be a Stealth::Flow::State') end @name, @spec, @fails_to = name, spec, fails_to end def <=>(other_state) state_position(self) <=> state_position(other_state) end def +(steps) if steps < 0 new_position = state_position(self) + steps # we don't want to allow the array index to wrap here so we return # the first state instead if new_position < 0 new_state = spec.states.keys.first else new_state = spec.states.keys.at(new_position) end else new_state = spec.states.keys[state_position(self) + steps] # we may have been told to access an out-of-bounds state # return the last state if new_state.blank? new_state = spec.states.keys.last end end new_state end def -(steps) if steps < 0 return self + steps.abs else return self + (-steps) end end def to_s "#{name}" end def to_sym name.to_sym end private def state_position(state) states = spec.states.keys unless states.include?(state.to_sym) raise(ArgumentError, "state `#{state}' does not exist") end states.index(state.to_sym) end end end end
Version data entries
15 entries across 15 versions & 1 rubygems