From 1c2f8a5576d80e7732f6748044a8e7754fab6dd3 Mon Sep 17 00:00:00 2001 From: Trevor Vallender Date: Wed, 12 Jun 2024 16:13:07 +0100 Subject: [PATCH] Move slug logic to concern --- app/models/concerns/sluggable.rb | 36 ++++++++++++++++++++++++++++++++ app/models/stat.rb | 25 ++-------------------- 2 files changed, 38 insertions(+), 23 deletions(-) create mode 100644 app/models/concerns/sluggable.rb diff --git a/app/models/concerns/sluggable.rb b/app/models/concerns/sluggable.rb new file mode 100644 index 0000000..3f001ea --- /dev/null +++ b/app/models/concerns/sluggable.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module Sluggable + extend ActiveSupport::Concern + + included do + validates :slug, presence: true, + length: { maximum: 100 }, + uniqueness: { scope: :character_sheet_section_id } + + before_validation :set_slug + + private + + def set_slug + return if slug.present? || name.blank? + + slug = if character_sheet_section.parent_section.present? + [ + character_sheet_section.parent_section.name.parameterize, + name.parameterize, + ].join("-") + else + slug = name.parameterize + end + + suffix = 2 + while Stat.exists?(slug:) + slug = "#{slug}-#{suffix}" + suffix += 1 + end + + self.slug = slug + end + end +end diff --git a/app/models/stat.rb b/app/models/stat.rb index 35fab16..7cd39f2 100644 --- a/app/models/stat.rb +++ b/app/models/stat.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class Stat < ApplicationRecord + include Sluggable + belongs_to :character_sheet_section validates :name, presence: true, @@ -13,8 +15,6 @@ class Stat < ApplicationRecord numericality: true validate :validate_roll_command - before_validation :set_slug - def roll DiceRoller.new(roll_command, stat: self).roll end @@ -26,25 +26,4 @@ class Stat < ApplicationRecord DiceRoller.new(roll_command).valid? end - - def set_slug - return if slug.present? || name.blank? - - slug = if character_sheet_section.parent_section.present? - [ - character_sheet_section.parent_section.name.parameterize, - name.parameterize, - ].join("-") - else - slug = name.parameterize - end - - suffix = 2 - while Stat.exists?(slug:) - slug = "#{slug}-#{suffix}" - suffix += 1 - end - - self.slug = slug - end end