module Archivist::Base::ClassMethods

Public Instance Methods

acts_as_archive(options={}) click to toggle source
# File lib/archivist/base.rb, line 69
def acts_as_archive(options={})
  has_archive(options)
end
enable_archive_mass_assignment!(klass) click to toggle source
# File lib/archivist/base.rb, line 77
def enable_archive_mass_assignment!(klass)
  archive_class = archive_for(klass)
  attrs = archive_class.attribute_names
  archive_class.send(:attr_accessible,*attrs.map(&:to_sym))
end
has_archive(options={}) click to toggle source
# File lib/archivist/base.rb, line 17
def has_archive(options={})
  options = ARCHIVIST_DEFAULTS.merge(options)
  options[:allow_multiple_archives] = true if options[:associate_with_original]

  class_eval(%Q{
    alias_method :delete!, :delete

    class << self
      alias_method :delete_all!, :delete_all

      def archive_indexes
        #{Array(options[:indexes]).collect{|i| i.to_s}.inspect}
      end

      def archive_options
        #{options.inspect}
      end

      def has_archive?
        true
      end

      def acts_as_archive?
        warn("DEPRECATION WARNING: #acts_as_archive is provided for compatibility with AAA and will be removed soon, please use has_archive?",caller )
        has_archive?
      end
    end

    class Archive < ActiveRecord::Base
      self.record_timestamps = false
      self.table_name = "archived_#{self.table_name}"
      self.primary_key = "#{self.primary_key}"
      include Archivist::ArchiveMethods
    end
    
    #{build_copy_self_to_archive(options[:allow_multiple_archives])}
  },File.expand_path(__FILE__),21)

  if ActiveRecord::VERSION::STRING >= "3.1.0"
    enable_archive_mass_assignment!(self)
  end

  attach_serializations!(self)
  include_modules!(self,options[:included_modules]) if options[:included_modules]

  build_associations!(self) if options[:associate_with_original]

  include InstanceMethods
  extend ClassExtensions
  include DB
end