Sha256: 15a5a2229d0a9ef41a9636a1252e96df1bd00c687d0b86dbab43ceec07f99b4d

Contents?: true

Size: 1.78 KB

Versions: 4

Compression:

Stored size: 1.78 KB

Contents

module AASM
  module Persistence
    class << self

      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_persistence :active_record
          include_persistence base, :active_record
        elsif hierarchy.include?("Mongoid::Document")
          require_persistence :mongoid
          include_persistence base, :mongoid
        elsif hierarchy.include?("MongoMapper::Document")
          require_persistence :mongo_mapper
          include_persistence base, :mongo_mapper
        elsif hierarchy.include?("Sequel::Model")
          require_persistence :sequel
          include_persistence base, :sequel
        elsif hierarchy.include?("Dynamoid::Document")
          require_persistence :dynamoid
          include_persistence base, :dynamoid
        elsif hierarchy.include?("Redis::Objects")
          require_persistence :redis
          include_persistence base, :redis
        elsif hierarchy.include?("CDQManagedObject")
          include_persistence base, :core_data_query
        else
          include_persistence base, :plain
        end
      end

      private

      def require_persistence(type)
        require File.join(File.dirname(__FILE__), 'persistence', "#{type}_persistence")
      end

      def include_persistence(base, type)
        base.send(:include, constantize("#{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)
        AASM::Persistence.const_get(string)
      end

    end # class << self
  end
end # AASM

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
aasm-4.11.1 lib/aasm/persistence.rb
aasm-4.11.0 lib/aasm/persistence.rb
aasm-4.10.1 lib/aasm/persistence.rb
aasm-4.10.0 lib/aasm/persistence.rb