diff --git a/lib/aasm/persistence.rb b/lib/aasm/persistence.rb index 18297a2..aef5ff7 100644 --- a/lib/aasm/persistence.rb +++ b/lib/aasm/persistence.rb @@ -7,26 +7,29 @@ module AASM hierarchy = base.ancestors.map {|klass| klass.to_s} if hierarchy.include?("ActiveRecord::Base") - require_files_for(:active_record) - base.send(:include, AASM::Persistence::ActiveRecordPersistence) + include_persistence base, :active_record elsif hierarchy.include?("Mongoid::Document") - require_files_for(:mongoid) - base.send(:include, AASM::Persistence::MongoidPersistence) + include_persistence base, :mongoid elsif hierarchy.include?("Sequel::Model") - require_files_for(:sequel) - base.send(:include, AASM::Persistence::SequelPersistence) + include_persistence base, :sequel else - require File.join(File.dirname(__FILE__), 'persistence', 'plain_persistence') - base.send(:include, AASM::Persistence::PlainPersistence) + include_persistence base, :plain end end - private + private - def require_files_for(persistence) - ['base', "#{persistence}_persistence"].each do |file_name| - require File.join(File.dirname(__FILE__), 'persistence', file_name) - end + def include_persistence(base, type) + require File.join(File.dirname(__FILE__), 'persistence', "#{type}_persistence") + base.send(:include, constantize("AASM::Persistence::#{capitalize(type)}Persistence")) + end + + def capitalize(string_or_symbol) + string_or_symbol.to_s.split('_').map {|segment| segment[0].upcase + segment[1..-1]}.join('') + end + + def constantize(string) + instance_eval(string) end end # class << self diff --git a/lib/aasm/persistence/active_record_persistence.rb b/lib/aasm/persistence/active_record_persistence.rb index 31e164a..b0721ad 100644 --- a/lib/aasm/persistence/active_record_persistence.rb +++ b/lib/aasm/persistence/active_record_persistence.rb @@ -1,3 +1,5 @@ +require_relative 'base' + module AASM module Persistence module ActiveRecordPersistence diff --git a/lib/aasm/persistence/mongoid_persistence.rb b/lib/aasm/persistence/mongoid_persistence.rb index 8c1d872..23430b6 100644 --- a/lib/aasm/persistence/mongoid_persistence.rb +++ b/lib/aasm/persistence/mongoid_persistence.rb @@ -1,3 +1,5 @@ +require_relative 'base' + module AASM module Persistence module MongoidPersistence diff --git a/lib/aasm/persistence/sequel_persistence.rb b/lib/aasm/persistence/sequel_persistence.rb index 50c76c9..69c78e8 100644 --- a/lib/aasm/persistence/sequel_persistence.rb +++ b/lib/aasm/persistence/sequel_persistence.rb @@ -1,3 +1,5 @@ +require_relative 'base' + module AASM module Persistence module SequelPersistence