module HasArchive

Constants

VERSION

Public Class Methods

included(base) click to toggle source
# File lib/has_archive.rb, line 6
  def self.included(base)
    base.send :extend, ClassMethods
    base.send :include, InstanceMethods

    eval <<-RUBY
      class #{base}::Archive < #{base}
        self.table_name = "#{base.to_s.underscore}_archives"

        def destroy(*args, **kwargs)
          super(for_real: true)
        end

        def restore
          attrs = self.attributes
          attrs.delete('archived_at')
          restored = self.class.parent.new(attrs)
          restored.save && self.destroy(for_real: true)
          self
        end
      end
    RUBY
  end