mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-15 00:24:09 +01:00
46 lines
918 B
Ruby
46 lines
918 B
Ruby
# 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
|