state_machine

https://github.com/pluginaweek/state_machine

Ruby

Adds support for creating state machines for attributes on any Ruby class

StateMachine::Branch#match

Attempts to match the given object / query against the set of requirements
configured for this branch.  In addition to matching the event, from state,
and to state, this will also check whether the configured :if/:unless
conditions pass on the given object.

If a match is found, then the event/state requirements that the query
passed successfully will be returned.  Otherwise, nil is returned if there
was no match.

Query options:
* <tt>:from</tt> - One or more states being transitioned from.  If none
  are specified, then this will always match.
* <tt>:to</tt> - One or more states being transitioned to.  If none are
  specified, then this will always match.
* <tt>:on</tt> - One or more events that fired the transition.  If none
  are specified, then this will always match.
* <tt>:guard</tt> - Whether to guard matches with the if/unless
  conditionals defined for this branch.  Default is true.

== Examples

  branch = StateMachine::Branch.new(:parked => :idling, :on => :ignite)
  
  branch.match(object, :on => :ignite)  # => {:to => ..., :from => ..., :on => ...}
  branch.match(object, :on => :park)    # => nil

Source | Google | Stack overflow

Edit

git clone [email protected]:pluginaweek/state_machine.git

cd state_machine

open lib/state_machine/branch.rb

Contribute

# Make a new branch

git checkout -b -your-name--update-docs-StateMachine--Branch-match-for-pr


# Commit to git

git add lib/state_machine/branch.rbgit commit -m "better docs for StateMachine::Branch#match"


# Open pull request

gem install hub # on a mac you can `brew install hub`

hub fork

git push <your name> -your-name--update-docs-StateMachine--Branch-match-for-pr

hub pull-request


# Celebrate!