1
0
Fork 0
mirror of https://github.com/aasm/aasm synced 2023-03-27 23:22:41 -04:00
aasm/files/README_rdoc.html
2010-01-17 01:34:58 -05:00

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 &amp; 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&#8217;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 =&gt; :read, :from =&gt; [:unread]
end
aasm_event :close do
transitions :to =&gt; :closed, :from =&gt; [: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 =&gt; :make_happy, :exit =&gt; :make_depressed
aasm_state :intimate, :enter =&gt; :make_very_happy, :exit =&gt; :never_speak_again
aasm_state :married, :enter =&gt; :give_up_intimacy, :exit =&gt; :buy_exotic_car_and_wear_a_combover
aasm_event :get_intimate do
transitions :to =&gt; :intimate, :from =&gt; [:dating], :guard =&gt; :drunk?
end
aasm_event :get_married do
transitions :to =&gt; :married, :from =&gt; [:dating, :intimate], :guard =&gt; :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 &#8220;as is&#8221; 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>