Class: Workflow::Specification

Inherits:
Object
  • Object
show all
Includes:
ActiveSupport::Callbacks
Defined in:
lib/workflow/specification.rb

Overview

Metadata object describing available states and state transitions.

Instance Attribute Summary collapse

Instance Method Summary collapse

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.

Parameters:

  • meta (Hash) (defaults to: {})

    Metadata

Yields:

  • [] Block for workflow definition



66
67
68
69
70
71
72
# File 'lib/workflow/specification.rb', line 66

def initialize(meta = {}, &specification)
  @states = []
  @meta = meta
  run_callbacks :spec_definition do
    instance_eval(&specification)
  end
end

Instance Attribute Details

#initial_stateState (readonly)

State object to be given to newly created objects under this workflow.

Returns:



17
18
19
# File 'lib/workflow/specification.rb', line 17

def initial_state
  @initial_state
end

#metaHash (readonly)

Optional metadata stored with this workflow specification

Returns:

  • (Hash)


21
22
23
# File 'lib/workflow/specification.rb', line 21

def meta
  @meta
end

#named_argumentsArray (readonly)

List of symbols, for attribute accessors to be added to TransitionContext object

Returns:

  • (Array)


25
26
27
# File 'lib/workflow/specification.rb', line 25

def named_arguments
  @named_arguments
end

#statesHash (readonly)

The state objects defined for this specification, keyed by name

Returns:

  • (Hash)


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

Returns:

  • (nil)


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.

Parameters:

  • names (Array)

    A list of symbols

Returns:

  • (nil)


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]

Parameters:

  • name (Symbol)

    name of state

  • meta (Hash) (defaults to: {})

    Metadata to be stored with the state within the Workflow::Specification object

Yields:

  • [] block defining events for this state.

Returns:

  • (nil)


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, meta)
  @initial_state ||= new_state
  @states << new_state
  new_state.instance_eval(&events) if block_given?
end