tabletop-companion/app/models/character_sheet_section.rb

47 lines
1.4 KiB
Ruby

# frozen_string_literal: true
class CharacterSheetSection < ApplicationRecord
belongs_to :character
belongs_to :parent_section, optional: true,
class_name: "CharacterSheetSection"
has_many :character_sheet_subsections, class_name: "CharacterSheetSection",
foreign_key: :parent_section_id,
dependent: :destroy
has_many :character_sheet_features
has_many :stats, dependent: :destroy, through: :character_sheet_features,
source: :featurable, source_type: "Stat"
has_many :text_fields, dependent: :destroy, through: :character_sheet_features,
source: :featurable, source_type: "TextField"
validates :name, presence: true,
length: { maximum: 255 }
scope :top_level, -> { where.missing(:parent_section) }
def lowest_order_index
character_sheet_features.minimum(:order_index) || 1
end
def highest_order_index
character_sheet_features.maximum(:order_index) || 1
end
def self.deserialize(h)
section = new
h["character_sheet_subsections"].each do |sub|
section.character_sheet_subsections.deserialize(sub)
end
h["stats"].each do |stat|
section.stats.build(stat)
end
h["text_fields"].each do |text_field|
section.text_fields.build(text_field)
end
section
end
end