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 brentf@unwwwired.net
License: Copyright © 2008 unwwwired.net, released under the MIT license