simply_stated
Yet another state machine.
Continuous Integration
See run>code>run for the latest build status. It should be green.
Code
ActiveRecord::Schema.define :version => 0 do
create_table :users, :force => true do |t|
t.column :name, :string
t.column :state, :string, :default => "new"
end
end
class User
include SimplyStated
state :new do
transitions { self.state = :has_name if name.present? }
end
state :has_name do
transitions { self.state = :had_name if name.blank? }
end
state :had_name
end
user = User.create
user.state #=> :new
user.update_attributes! :name => "Lombardo"
user.state #=> :has_name
user.update_attributes! :name => ""
user.state #=> :had_name
user.state = :explosion #=> raises "invalid state explosion"
Note on Patches/Pull Requests
- Fork the project.
- Make your feature addition or bug fix.
- Add tests for it. This is important so I don’t break it in a
future version unintentionally. - Commit, do not mess with rakefile, version, or history.
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull) - Send me a pull request. Bonus points for topic branches.
Copyright
Copyright © 2010 Jacob Rothstein. See LICENSE for details.