From e32c5dd65d395c7f959fdceba112e061f2a10ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorsten=20Bo=CC=88ttger?= Date: Fri, 22 Feb 2013 21:40:01 +1300 Subject: [PATCH] little persistence refactoring to improve readability --- lib/aasm/aasm.rb | 2 +- lib/aasm/persistence.rb | 36 ++++++++++++++++++++++-------------- 2 files changed, 23 insertions(+), 15 deletions(-) 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