Module: ArchivalRecordCore::ArchivalRecord::InstanceMethods

Defined in:
lib/archival_record_core/archival_record.rb

Instance Method Summary collapse

Instance Method Details

#archive!(head_archive_number = nil) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
# File 'lib/archival_record_core/archival_record.rb', line 109

def archive!(head_archive_number = nil)
  execute_archival_action(:archive) do
    unless archived?
      head_archive_number ||= Digest::MD5.hexdigest("#{self.class.name}#{id}")
      archive_associations(head_archive_number)
      self.archived_at = DateTime.now
      self.archive_number = head_archive_number
      save!
    end
  end
end

#archive_associations(head_archive_number) ⇒ Object



133
134
135
# File 'lib/archival_record_core/archival_record.rb', line 133

def archive_associations(head_archive_number)
  AssociationOperation::Archive.new(self, head_archive_number).execute
end

#archived?Boolean

Returns:

  • (Boolean)


105
106
107
# File 'lib/archival_record_core/archival_record.rb', line 105

def archived?
  !!(archived_at? && archive_number)
end

#raise_if_not_archivalObject



96
97
98
99
100
101
102
103
# File 'lib/archival_record_core/archival_record.rb', line 96

def raise_if_not_archival
  missing_columns = []
  missing_columns << "archive_number" unless respond_to?(:archive_number)
  missing_columns << "archived_at" unless respond_to?(:archived_at)
  return if missing_columns.blank?

  raise MissingArchivalColumnError.new("Add '#{missing_columns.join "', '"}' column(s) to '#{self.class.name}' to make it archival")
end

#readonly_when_archivedObject



89
90
91
92
93
94
# File 'lib/archival_record_core/archival_record.rb', line 89

def readonly_when_archived
  readonly_attributes_changed = archived? && changed? && !archived_at_changed? && !archive_number_changed?
  return unless readonly_attributes_changed

  errors.add(:base, "Cannot modify an archived record.")
end

#unarchive!(head_archive_number = nil) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
# File 'lib/archival_record_core/archival_record.rb', line 121

def unarchive!(head_archive_number = nil)
  execute_archival_action(:unarchive) do
    if archived?
      head_archive_number ||= archive_number
      self.archived_at = nil
      self.archive_number = nil
      save!
      unarchive_associations(head_archive_number)
    end
  end
end

#unarchive_associations(head_archive_number) ⇒ Object



137
138
139
# File 'lib/archival_record_core/archival_record.rb', line 137

def unarchive_associations(head_archive_number)
  AssociationOperation::Unarchive.new(self, head_archive_number).execute
end