Module: Control::State::ClassMethods
- Defined in:
- lib/control/state.rb
Instance Method Summary collapse
-
#final? ⇒ Boolean
Checks if a state is final.
-
#is_state? ⇒ Boolean
Checks if class is a state.
-
#next_states(*states) ⇒ Array<State>
Getter/setter for possible next_states.
-
#workflow_class ⇒ Class
Gets the workflow class associated with the state.
Instance Method Details
#final? ⇒ Boolean
Checks if a state is final. There can be no transitions.
55 56 57 |
# File 'lib/control/state.rb', line 55 def final? !!@final end |
#is_state? ⇒ Boolean
Checks if class is a state
37 38 39 |
# File 'lib/control/state.rb', line 37 def is_state? true end |
#next_states(*states) ⇒ Array<State>
Getter/setter for possible next_states
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/control/state.rb', line 15 def next_states(*states) if states.any? if states.include? :none @final = true else @next_states = states.map{|s| s.to_s.classify}.compact end else if @final # state is final, there are no possible next states Array.new else # state is not final, carry on if @next_states # possible next states were previously declared in class @next_states.map { |s| Kernel.qualified_const_get(s) } else # all states connected to the workflow are valid, no constrains workflow_class.states end end end end |
#workflow_class ⇒ Class
Gets the workflow class associated with the state
43 44 45 46 47 48 49 50 51 |
# File 'lib/control/state.rb', line 43 def workflow_class unless @workflow_class reflect_on_all_associations.each do |a| klass = a.klass @workflow_class = klass if klass.respond_to?(:is_workflow?) && klass.is_workflow? end end @workflow_class end |