Module: ExpectedBehavior::ActsAsArchival::InstanceMethods
- Defined in:
- lib/expected_behavior/acts_as_archival.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
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/expected_behavior/acts_as_archival.rb', line 69 def archive(head_archive_number=nil) self.class.transaction do begin success = run_callbacks(:archive) do unless self.archived? head_archive_number ||= Digest::MD5.hexdigest("#{self.class.name}#{self.id}") self.archive_associations(head_archive_number) self.archived_at = DateTime.now self.archive_number = head_archive_number self.save! end end return !!success rescue => e ActiveRecord::Base.logger.try(:debug, e.) ActiveRecord::Base.logger.try(:debug, e.backtrace) raise ActiveRecord::Rollback end end false end |
#archive_associations(head_archive_number) ⇒ Object
113 114 115 |
# File 'lib/expected_behavior/acts_as_archival.rb', line 113 def archive_associations(head_archive_number) AssociationOperation::Archive.new(self, head_archive_number).execute end |
#archived? ⇒ Boolean
65 66 67 |
# File 'lib/expected_behavior/acts_as_archival.rb', line 65 def archived? !!(self.archived_at? && self.archive_number) end |
#raise_if_not_archival ⇒ Object
58 59 60 61 62 63 |
# File 'lib/expected_behavior/acts_as_archival.rb', line 58 def raise_if_not_archival missing_columns = [] missing_columns << "archive_number" unless self.respond_to?(:archive_number) missing_columns << "archived_at" unless self.respond_to?(:archived_at) raise MissingArchivalColumnError.new("Add '#{missing_columns.join "', '"}' column(s) to '#{self.class.name}' to make it archival") unless missing_columns.blank? end |
#readonly_when_archived ⇒ Object
52 53 54 55 56 |
# File 'lib/expected_behavior/acts_as_archival.rb', line 52 def readonly_when_archived if self.archived? && self.changed? && !self.archived_at_changed? && !self.archive_number_changed? self.errors.add(:base, "Cannot modify an archived record.") end end |
#unarchive(head_archive_number = nil) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/expected_behavior/acts_as_archival.rb', line 91 def unarchive(head_archive_number=nil) self.class.transaction do begin success = run_callbacks(:unarchive) do if self.archived? head_archive_number ||= self.archive_number self.archived_at = nil self.archive_number = nil self.save! self.unarchive_associations(head_archive_number) end end return !!success rescue => e ActiveRecord::Base.logger.try(:debug, e.) ActiveRecord::Base.logger.try(:debug, e.backtrace) raise ActiveRecord::Rollback end end false end |
#unarchive_associations(head_archive_number) ⇒ Object
117 118 119 |
# File 'lib/expected_behavior/acts_as_archival.rb', line 117 def unarchive_associations(head_archive_number) AssociationOperation::Unarchive.new(self, head_archive_number).execute end |