state_flowプラグイン
先ほど0.1.0をリリースしました。
StateFlowとは?
状態遷移のためのDSLを提供するためのActiveRecordを拡張するプラグインです。
Railsで非同期処理のためにステータスに関する記述をする際に便利です。
こんな感じの記述が可能です。
class Page < ActiveRecord::Base validates_presence_of :name selectable_attr :status_cd do entry '01', :editable , '編集可' entry '04', :waiting_publish, '公開待ち' entry '05', :publishing , '公開処理中' entry '06', :publishing_done, '公開処理完了' entry '07', :published , '公開済' entry '08', :publish_failure, '公開失敗' end state_flow(:status_cd) do state :created => {event(:publish) => :waiting_publish, :lock => true} with_options(:failure => :publish_failure) do |publishing| publishing.state :waiting_publish => :publishing, :lock => true publishing.state :publishing => {action(:start_publish) => :publishing_done} publishing.state :publishing_done => :published, :if => :accessable? publishing.state :publish_failure end state :published end def start_publish # 公開時の処理 end end
インストール
ruby script/plugin install git://github.com/akm/selectable_attr.git ruby script/plugin install git://github.com/akm/selectable_attr_rails.git ruby script/plugin install git://github.com/akm/state_flow.git
あるいは
sudo gem install gemcutter sudo gem tumble sudo gem install selectable_attr selectable_attr_rails state_flow
で、config/initializersに以下の2つのファイルを作成すればオッケーです。
config/initializers/selectable_attr.rb
require 'selectable_attr' require 'selectable_attr_i18n' require 'selectable_attr_rails' SelectableAttrRails.add_features_to_rails
config/initializers/state_flow.rb
require 'state_flow' ActiveRecord::Base.module_eval do include StateFlow end
詳しくはこちらで http://github.com/akm/state_flow