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



141
142
143
144
145
146
147
148
149
150
151
# File 'lib/archival_record_core/archival_record.rb', line 141

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



165
166
167
# File 'lib/archival_record_core/archival_record.rb', line 165

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

#archived?Boolean

Returns:

  • (Boolean)


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

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

#raise_if_not_archivalObject



127
128
129
130
131
132
133
134
135
# File 'lib/archival_record_core/archival_record.rb', line 127

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,
        "Add '#{missing_columns.join "', '"}' column(s) to '#{self.class.name}' to make it archival")
end

#readonly_when_archivedObject



120
121
122
123
124
125
# File 'lib/archival_record_core/archival_record.rb', line 120

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



153
154
155
156
157
158
159
160
161
162
163
# File 'lib/archival_record_core/archival_record.rb', line 153

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



169
170
171
# File 'lib/archival_record_core/archival_record.rb', line 169

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