Module: HasArchive::InstanceMethods

Defined in:
lib/has_archive.rb

Instance Method Summary collapse

Instance Method Details

#archive(force: false) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/has_archive.rb', line 37

def archive(force: false)
  attrs = self.attributes
  archive = self.class::Archive.new(attrs)
  archive.archived_at = Time.now
  archive.save(validate: false)
  self.destroy(for_real: true)
rescue ActiveRecord::RecordNotUnique => e
  if force
    self.class::Archive.where(id: archive.id).map(&:destroy)
    self.archive
  else
    Rails.logger.warn "Rescued attempt to archive record with existing key: #{archive.id}."
    false
  end
end

#destroy(for_real: false, force: false) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/has_archive.rb', line 53

def destroy(for_real: false, force: false)
  if !for_real && Rails.configuration.has_archive.override_destroy
    archive(force: force)
  else
    super()
  end
end