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