mirror of
https://github.com/aasm/aasm
synced 2023-03-27 23:22:41 -04:00
209 lines
No EOL
5 KiB
HTML
209 lines
No EOL
5 KiB
HTML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
<head>
|
|
<title>README.rdoc</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<link rel="stylesheet" href="../css/reset.css" type="text/css" media="screen" />
|
|
<link rel="stylesheet" href="../css/main.css" type="text/css" media="screen" />
|
|
<script src="../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
|
|
<script src="../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
|
|
<script src="../js/main.js" type="text/javascript" charset="utf-8"></script>
|
|
</head>
|
|
|
|
<body>
|
|
<div class="banner">
|
|
<h1>
|
|
README.rdoc
|
|
</h1>
|
|
<ul class="files">
|
|
<li>README.rdoc</li>
|
|
<li>Last modified: Sun Jan 17 01:17:01 -0500 2010</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div id="bodyContent">
|
|
<div id="content">
|
|
|
|
<div class="description">
|
|
<h1><a href="../classes/AASM.html">AASM</a> - Ruby state machines</h1>
|
|
<p>
|
|
This package contains <a href="../classes/AASM.html">AASM</a>, a library
|
|
for adding finite state machines to Ruby classes.
|
|
</p>
|
|
<p>
|
|
<a href="../classes/AASM.html">AASM</a> started as the
|
|
acts_as_state_machine plugin but has evolved into a more generic library
|
|
that no longer targets only ActiveRecord models.
|
|
</p>
|
|
<p>
|
|
<a href="../classes/AASM.html">AASM</a> has the following features:
|
|
</p>
|
|
<ul>
|
|
<li>States
|
|
|
|
</li>
|
|
<li>Machines
|
|
|
|
</li>
|
|
<li>Events
|
|
|
|
</li>
|
|
<li>Transitions
|
|
|
|
</li>
|
|
</ul>
|
|
<h2>New Callbacks</h2>
|
|
<p>
|
|
The callback chain & order on a successful event looks like:
|
|
</p>
|
|
<pre>
|
|
oldstate:exit*
|
|
event:before
|
|
__find transition, if possible__
|
|
transition:on_transition*
|
|
oldstate:before_exit
|
|
newstate:before_enter
|
|
newstate:enter*
|
|
__update state__
|
|
event:success*
|
|
oldstate:after_exit
|
|
newstate:after_enter
|
|
event:after
|
|
obj:aasm_event_fired*
|
|
|
|
(*) marks old callbacks
|
|
</pre>
|
|
<h2>Download</h2>
|
|
<p>
|
|
The latest <a href="../classes/AASM.html">AASM</a> can currently be pulled
|
|
from the git repository on github.
|
|
</p>
|
|
<ul>
|
|
<li><a
|
|
href="http://github.com/rubyist/aasm/tree/master">github.com/rubyist/aasm/tree/master</a>
|
|
|
|
</li>
|
|
</ul>
|
|
<h2>Installation</h2>
|
|
<h3>From gemcutter</h3>
|
|
<pre>
|
|
% sudo gem install gemcutter
|
|
% sudo gem tumble
|
|
% sudo gem install aasm
|
|
</pre>
|
|
<h3>From GitHub hosted gems (only older releases are available)</h3>
|
|
<pre>
|
|
% sudo gem sources -a http://gems.github.com # (you only need to do this once)
|
|
% sudo gem install rubyist-aasm
|
|
</pre>
|
|
<h3>Building your own gems</h3>
|
|
<pre>
|
|
% rake gemspec
|
|
% rake build
|
|
% sudo gem install pkg/aasm-2.1.gem
|
|
</pre>
|
|
<h2>Simple Example</h2>
|
|
<p>
|
|
Here’s a quick example highlighting some of the features.
|
|
</p>
|
|
<pre>
|
|
class Conversation
|
|
include AASM
|
|
|
|
aasm_column :current_state # defaults to aasm_state
|
|
|
|
aasm_initial_state :unread
|
|
|
|
aasm_state :unread
|
|
aasm_state :read
|
|
aasm_state :closed
|
|
|
|
aasm_event :view do
|
|
transitions :to => :read, :from => [:unread]
|
|
end
|
|
|
|
aasm_event :close do
|
|
transitions :to => :closed, :from => [:read, :unread]
|
|
end
|
|
end
|
|
</pre>
|
|
<h2>A Slightly More Complex Example</h2>
|
|
<p>
|
|
This example uses a few of the more complex features available.
|
|
</p>
|
|
<pre>
|
|
class Relationship
|
|
include AASM
|
|
|
|
aasm_column :status
|
|
|
|
aasm_initial_state Proc.new { |relationship| relationship.strictly_for_fun? ? :intimate : :dating }
|
|
|
|
aasm_state :dating, :enter => :make_happy, :exit => :make_depressed
|
|
aasm_state :intimate, :enter => :make_very_happy, :exit => :never_speak_again
|
|
aasm_state :married, :enter => :give_up_intimacy, :exit => :buy_exotic_car_and_wear_a_combover
|
|
|
|
aasm_event :get_intimate do
|
|
transitions :to => :intimate, :from => [:dating], :guard => :drunk?
|
|
end
|
|
|
|
aasm_event :get_married do
|
|
transitions :to => :married, :from => [:dating, :intimate], :guard => :willing_to_give_up_manhood?
|
|
end
|
|
|
|
def strictly_for_fun?; end
|
|
def drunk?; end
|
|
def willing_to_give_up_manhood?; end
|
|
def make_happy; end
|
|
def make_depressed; end
|
|
def make_very_happy; end
|
|
def never_speak_again; end
|
|
def give_up_intimacy; end
|
|
def buy_exotic_car_and_wear_a_combover; end
|
|
end
|
|
</pre>
|
|
<h1>Other Stuff</h1>
|
|
<table>
|
|
<tr><td valign="top">Author:</td><td>Scott Barron <scott at elitists dot net>
|
|
|
|
</td></tr>
|
|
<tr><td valign="top">License:</td><td>Original code Copyright 2006, 2007, 2008 by Scott Barron. Released under an
|
|
MIT-style license. See the LICENSE file included in the distribution.
|
|
|
|
</td></tr>
|
|
</table>
|
|
<h2>Warranty</h2>
|
|
<p>
|
|
This software is provided “as is” and without any express or
|
|
implied warranties, including, without limitation, the implied warranties
|
|
of merchantibility and fitness for a particular purpose.
|
|
</p>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html> |