Class: Workflow::Specification
- Inherits:
-
Object
- Object
- Workflow::Specification
- Includes:
- ActiveSupport::Callbacks
- Defined in:
- lib/workflow/specification.rb
Overview
Metadata object describing available states and state transitions.
Defined Under Namespace
Modules: StateTagHelpers
Instance Attribute Summary collapse
-
#initial_state ⇒ State
readonly
State object to be given to newly created objects under this workflow.
-
#meta ⇒ Hash
readonly
Optional metadata stored with this workflow specification.
-
#named_arguments ⇒ Array
readonly
List of symbols, for attribute accessors to be added to TransitionContext object.
-
#states ⇒ Hash
readonly
The state objects defined for this specification, keyed by name.
Instance Method Summary collapse
-
#define_revert_events! ⇒ nil
Also create additional event transitions that will move each configured transition in the reverse direction.
- #define_revert_events? ⇒ Boolean
-
#event_args(*names) ⇒ nil
Specify attributes to make available on the TransitionContext object during transitions taking place in this specification.
-
#find_state(name) ⇒ Workflow::State
Find the state with the given name.
- #initialize(meta = {}) { ... } ⇒ Specification constructor private
-
#state(name, tags: [], meta: {}) { ... } ⇒ nil
Define a new state named [name].
- #unique_event_names ⇒ Object
Constructor Details
#initialize(meta = {}) { ... } ⇒ Specification
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
59 60 61 62 63 64 65 |
# File 'lib/workflow/specification.rb', line 59 def initialize( = {}, &specification) @states = [] = run_callbacks :spec_definition do instance_eval(&specification) end end |
Instance Attribute Details
#initial_state ⇒ State (readonly)
State object to be given to newly created objects under this workflow.
17 18 19 |
# File 'lib/workflow/specification.rb', line 17 def initial_state @initial_state end |
#meta ⇒ Hash (readonly)
Optional metadata stored with this workflow specification
21 22 23 |
# File 'lib/workflow/specification.rb', line 21 def end |
#named_arguments ⇒ Array (readonly)
List of symbols, for attribute accessors to be added to TransitionContext object
25 26 27 |
# File 'lib/workflow/specification.rb', line 25 def named_arguments @named_arguments end |
#states ⇒ Hash (readonly)
The state objects defined for this specification, keyed by name
13 14 15 |
# File 'lib/workflow/specification.rb', line 13 def states @states end |
Instance Method Details
#define_revert_events! ⇒ nil
Also create additional event transitions that will move each configured transition in the reverse direction.
class Article
include Workflow
workflow do
define_revert_events!
state :foo do
on :bar, to: :bax
end
state :bax
end
end
a = Article.new
a.transition! :foo
a.current_state.name # => :bax
a.transition! :revert_bar
a.current_state.name # => :foo
116 117 118 |
# File 'lib/workflow/specification.rb', line 116 def define_revert_events! @define_revert_events = true end |
#define_revert_events? ⇒ Boolean
124 125 126 |
# File 'lib/workflow/specification.rb', line 124 def define_revert_events? @define_revert_events end |
#event_args(*names) ⇒ nil
Specify attributes to make available on the TransitionContext object during transitions taking place in this specification. The attributes' values will be taken in order from the arguments passed to the event transit method call.
89 90 91 |
# File 'lib/workflow/specification.rb', line 89 def event_args(*names) @named_arguments = names end |
#find_state(name) ⇒ Workflow::State
Find the state with the given name.
50 51 52 |
# File 'lib/workflow/specification.rb', line 50 def find_state(name) states.find { |t| t.name == name.to_sym } end |
#state(name, tags: [], meta: {}) { ... } ⇒ nil
Define a new state named [name]
74 75 76 77 78 79 80 |
# File 'lib/workflow/specification.rb', line 74 def state(name, tags: [], meta: {}, &events) name = name.to_sym new_state = Workflow::State.new(name, @states.length, tags: , meta: ) @initial_state ||= new_state @states << new_state new_state.instance_eval(&events) if block_given? end |
#unique_event_names ⇒ Object
120 121 122 |
# File 'lib/workflow/specification.rb', line 120 def unique_event_names states.collect(&:events).flatten.collect(&:name).flatten.uniq end |