# frozen_string_literal: true class Stat < ApplicationRecord include Sluggable belongs_to :character_sheet_section has_one :character, through: :character_sheet_section has_many :dice_rolls, as: :rollable, dependent: :destroy validates :name, presence: true, length: { maximum: 100 }, uniqueness: { scope: :character_sheet_section_id } validates :slug, presence: true, length: { maximum: 100 }, uniqueness: true validates :value, presence: true, numericality: true validate :validate_roll_command def roll(table) result = DiceRoller.new(roll_command, stat: self).roll dice_rolls.create(result:, table:) result end private def validate_roll_command return if roll_command.blank? DiceRoller.new(roll_command).valid? end end