Add ActiveRecord integrated state machine functionality.
acts_as_state_machine and AASM didn't feel quite right to me.
Validations and guards were redundant, transitions were not observable and direct manipulation of state attributes did not result in transitions.
This is an attempt to make it work (the way I thought it should).
# models/user.rb class User < ActiveRecord::Base has_states :signed_up, :unverified, :verified, :disabled do on :invite do transition :signed_up => :unverified end on :verify do transition :unverified => :verified end on :disabled do transition :verified => :disabled end on :enable do transition :disabled => :verified end end before_enter_unverified :set_verification_key ... end # models/user_observer.rb class UserObserver < ActiveRecord::Observer def after_enter_signed_up(user) UserMailer.deliver_signup_notification(user) end def after_enter_unverified(user) UserMailer.deliver_invitation(user) end def after_enter_verified(user) UserMailer.deliver_welcome(user) end end
$ script/plugin install git://github.com/sbfaulkner/has_states.git
Author: S. Brent Faulkner email@example.com
License: Copyright © 2008 unwwwired.net, released under the MIT license