module Slugworth

Constants

VERSION

Public Instance Methods

to_param() click to toggle source
# File lib/slugworth.rb, line 29
def to_param
  slug
end

Private Instance Methods

add_slug() click to toggle source
# File lib/slugworth.rb, line 35
def add_slug
  self.slug = processed_slug if generate_slug?
end
generate_slug?() click to toggle source
# File lib/slugworth.rb, line 39
def generate_slug?
  !slug.present? || slug_updatable && changes[slug_attribute].present?
end
matching_slugs() click to toggle source
# File lib/slugworth.rb, line 67
def matching_slugs
  table = self.class.arel_table
  primary_key = self.class.primary_key
  query = table[:slug].matches("#{parameterized_slug}%")
  query = query.and(table[primary_key].not_eq(read_attribute(primary_key))) unless new_record?
  Array.wrap(slug_scope).each do |scope|
    query = query.and(table[scope].eq(read_attribute(scope)))
  end
  self.class.where(query).pluck(:slug)
end
parameterized_slug() click to toggle source
# File lib/slugworth.rb, line 51
def parameterized_slug
  slug_attribute_value.parameterize
end
process_incremental_slug() click to toggle source
# File lib/slugworth.rb, line 55
def process_incremental_slug
  slugs = matching_slugs
  if slugs.include?(parameterized_slug)
    (1..slugs.size).each do |i|
      incremented_slug = "#{parameterized_slug}-#{i}"
      return incremented_slug unless slugs.include?(incremented_slug)
    end
  else
    parameterized_slug
  end
end
processed_slug() click to toggle source
# File lib/slugworth.rb, line 47
def processed_slug
  slug_incremental ? process_incremental_slug : parameterized_slug
end
slug_attribute_value() click to toggle source
# File lib/slugworth.rb, line 43
def slug_attribute_value
  public_send(slug_attribute)
end