module Sluggi::Model

Constants

NOT_IMPLEMENTED_MESSAGE

Public Instance Methods

to_param() click to toggle source
# File lib/sluggi/model.rb, line 21
def to_param
  errors.any? ? slug_was : slug
end

Private Instance Methods

clean_slug(value) click to toggle source
# File lib/sluggi/model.rb, line 27
def clean_slug(value)
  value&.parameterize
end
set_slug() click to toggle source
# File lib/sluggi/model.rb, line 31
def set_slug
  return unless new_record? || slug_value_changed?
  new_slug = clean_slug(slug_value)
  return if new_slug.blank?
  self.slug = new_slug
end
slug_candidates() click to toggle source

return an array of candidate slug values Example:

[first_name, full_name, id_and_full_name]
# File lib/sluggi/model.rb, line 54
def slug_candidates
  raise NotImplementedError, NOT_IMPLEMENTED_MESSAGE
end
slug_value() click to toggle source

these are generally good to override:

# File lib/sluggi/model.rb, line 40
def slug_value
  slug_candidates.each do |item|
    value = item.respond_to?(:call) ? item.call : item
    next if value.blank?
    candidate = clean_slug(value)
    return candidate if candidate == slug
    return candidate unless self.class.slug_exists?(candidate)
  end
  nil
end
slug_value_changed?() click to toggle source
# File lib/sluggi/model.rb, line 58
def slug_value_changed?
  raise NotImplementedError, NOT_IMPLEMENTED_MESSAGE
end