# frozen_string_literal: true # SuperClass for models that are secured by chained footprints. class Footprintable < ApplicationRecord self.abstract_class = true def self.columns_out_of_footprint [] end def footprint_children [] end def sort_on_field 'id' end def check_footprint return false unless persisted? reload footprint_children.map(&:check_footprint).all? && chained_element && !chained_element.corrupted? end # @return [ChainedElement] def chain_record ChainedElement.create!( element: self, previous: previous_record&.chained_element ) end # @return [Footprintable,NilClass] def previous_record self.class.where("#{sort_on_field} < ?", self[sort_on_field]) .order("#{sort_on_field} DESC") .limit(1) .first end def debug_footprint FootprintService.debug_footprint(self.class, self) end end