aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2009-08-04 11:03:57 -0500
committerJoshua Peek <josh@joshpeek.com>2009-08-04 11:03:57 -0500
commitaad5a30bf25d8a3167afd685fc91c99f4f09cc57 (patch)
treef700750ee088e483537fa7ee992a109b834b1ddc /activerecord/lib
parent55d1d12c32a1b99f3f07d2346b49a63650ba2e9d (diff)
downloadrails-aad5a30bf25d8a3167afd685fc91c99f4f09cc57.tar.gz
rails-aad5a30bf25d8a3167afd685fc91c99f4f09cc57.tar.bz2
rails-aad5a30bf25d8a3167afd685fc91c99f4f09cc57.zip
Add simple support for ActiveModel's StateMachine for ActiveRecord
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record.rb1
-rw-r--r--activerecord/lib/active_record/state_machine.rb24
2 files changed, 25 insertions, 0 deletions
diff --git a/activerecord/lib/active_record.rb b/activerecord/lib/active_record.rb
index 5e9ce0600a..68b0251982 100644
--- a/activerecord/lib/active_record.rb
+++ b/activerecord/lib/active_record.rb
@@ -65,6 +65,7 @@ module ActiveRecord
autoload :SchemaDumper, 'active_record/schema_dumper'
autoload :Serialization, 'active_record/serialization'
autoload :SessionStore, 'active_record/session_store'
+ autoload :StateMachine, 'active_record/state_machine'
autoload :TestCase, 'active_record/test_case'
autoload :Timestamp, 'active_record/timestamp'
autoload :Transactions, 'active_record/transactions'
diff --git a/activerecord/lib/active_record/state_machine.rb b/activerecord/lib/active_record/state_machine.rb
new file mode 100644
index 0000000000..aebd03344a
--- /dev/null
+++ b/activerecord/lib/active_record/state_machine.rb
@@ -0,0 +1,24 @@
+module ActiveRecord
+ module StateMachine #:nodoc:
+ extend ActiveSupport::Concern
+ include ActiveModel::StateMachine
+
+ included do
+ before_validation :set_initial_state
+ validates_presence_of :state
+ end
+
+ protected
+ def write_state(state_machine, state)
+ update_attributes! :state => state.to_s
+ end
+
+ def read_state(state_machine)
+ self.state.to_sym
+ end
+
+ def set_initial_state
+ self.state ||= self.class.state_machine.initial_state.to_s
+ end
+ end
+end