module AASM::Persistence

Public Class Methods

load_persistence(base) click to toggle source
# File lib/aasm/persistence.rb, line 5
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?("NoBrainer::Document")
    require_persistence :no_brainer
    include_persistence base, :no_brainer
  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 Class Methods

capitalize(string_or_symbol) click to toggle source
# File lib/aasm/persistence.rb, line 44
def capitalize(string_or_symbol)
  string_or_symbol.to_s.split('_').map {|segment| segment[0].upcase + segment[1..-1]}.join('')
end
constantize(string) click to toggle source
# File lib/aasm/persistence.rb, line 48
def constantize(string)
  AASM::Persistence.const_get(string)
end
include_persistence(base, type) click to toggle source
# File lib/aasm/persistence.rb, line 40
def include_persistence(base, type)
  base.send(:include, constantize("#{capitalize(type)}Persistence"))
end
require_persistence(type) click to toggle source
# File lib/aasm/persistence.rb, line 36
def require_persistence(type)
  require File.join(File.dirname(__FILE__), 'persistence', "#{type}_persistence")
end