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.
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.
-
#event_args(*names) ⇒ nil
Specify attributes to make available on the TransitionContext object during transitions taking place in this specification.
- #find_state(name) ⇒ Object
- #initialize(meta = {}) { ... } ⇒ Specification constructor private
-
#state(name, meta: {}) { ... } ⇒ nil
Define a new state named [name].
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.
66 67 68 69 70 71 72 |
# File 'lib/workflow/specification.rb', line 66 def initialize( = {}, &specification) @states = [] @meta = 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 @meta 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
event :bar, transitions_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
125 126 127 |
# File 'lib/workflow/specification.rb', line 125 def define_revert_events! @define_revert_events = true 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.
97 98 99 |
# File 'lib/workflow/specification.rb', line 97 def event_args(*names) @named_arguments = names end |
#find_state(name) ⇒ Object
54 55 56 |
# File 'lib/workflow/specification.rb', line 54 def find_state(name) states.find{|t| t.name == name.to_sym} end |
#state(name, meta: {}) { ... } ⇒ nil
Define a new state named [name]
80 81 82 83 84 85 86 |
# File 'lib/workflow/specification.rb', line 80 def state(name, meta: {}, &events) name = name.to_sym new_state = Workflow::State.new(name, self, ) @initial_state ||= new_state @states << new_state new_state.instance_eval(&events) if block_given? end |