Module: ArchivalRecordCore::ArchivalRecord::InstanceMethods
- Defined in:
- lib/archival_record_core/archival_record.rb
Instance Method Summary collapse
- #archive!(head_archive_number = nil) ⇒ Object
- #archive_associations(head_archive_number) ⇒ Object
- #archived? ⇒ Boolean
- #raise_if_not_archival ⇒ Object
- #readonly_when_archived ⇒ Object
- #unarchive!(head_archive_number = nil) ⇒ Object
- #unarchive_associations(head_archive_number) ⇒ Object
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
105 106 107 |
# File 'lib/archival_record_core/archival_record.rb', line 105 def archived? !!(archived_at? && archive_number) end |
#raise_if_not_archival ⇒ Object
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_archived ⇒ Object
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 |