diff --git a/lib/aasm/aasm.rb b/lib/aasm/aasm.rb index 6f234859..6a6caa6b 100644 --- a/lib/aasm/aasm.rb +++ b/lib/aasm/aasm.rb @@ -3,7 +3,7 @@ module AASM def self.included(base) #:nodoc: base.extend AASM::ClassMethods AASM::StateMachine[base] ||= AASM::StateMachine.new('') - AASM::Persistence.set_persistence(base) + AASM::Persistence.load_persistence(base) super end diff --git a/lib/aasm/persistence.rb b/lib/aasm/persistence.rb index 2edd6fbe..96cc026c 100644 --- a/lib/aasm/persistence.rb +++ b/lib/aasm/persistence.rb @@ -1,20 +1,28 @@ module AASM module Persistence - # Checks to see this class or any of it's superclasses inherit from - # ActiveRecord::Base and if so includes ActiveRecordPersistence - def self.set_persistence(base) - # Use a fancier auto-loading thingy, perhaps. When there are more persistence engines. - hierarchy = base.ancestors.map {|klass| klass.to_s} + class << self - require File.join(File.dirname(__FILE__), 'persistence', 'base') - require File.join(File.dirname(__FILE__), 'persistence', 'read_state') - if hierarchy.include?("ActiveRecord::Base") - require File.join(File.dirname(__FILE__), 'persistence', 'active_record_persistence') - base.send(:include, AASM::Persistence::ActiveRecordPersistence) - elsif hierarchy.include?("Mongoid::Document") - require File.join(File.dirname(__FILE__), 'persistence', 'mongoid_persistence') - base.send(:include, AASM::Persistence::MongoidPersistence) + def load_persistence(base) + # Use a fancier auto-loading thingy, perhaps. When there are more persistence engines. + hierarchy = base.ancestors.map {|klass| klass.to_s} + + if hierarchy.include?("ActiveRecord::Base") + require_files_for('active_record_persistence') + base.send(:include, AASM::Persistence::ActiveRecordPersistence) + elsif hierarchy.include?("Mongoid::Document") + require_files_for('mongoid_persistence') + base.send(:include, AASM::Persistence::MongoidPersistence) + end end - end + + private + + def require_files_for(persistence) + require File.join(File.dirname(__FILE__), 'persistence', 'base') + require File.join(File.dirname(__FILE__), 'persistence', 'read_state') + require File.join(File.dirname(__FILE__), 'persistence', persistence) + end + + end # class << self end end # AASM