class FriendlyId::SlugGenerator

The default slug generator offers functionality to check slug candidates for availability.

Public Class Methods

new(scope, config) click to toggle source
# File lib/friendly_id/slug_generator.rb, line 5
def initialize(scope, config)
  @scope = scope
  @config = config
end

Public Instance Methods

available?(slug) click to toggle source
# File lib/friendly_id/slug_generator.rb, line 10
def available?(slug)
  if @config.uses?(::FriendlyId::Reserved) && @config.reserved_words.present? && @config.treat_reserved_as_conflict
    return false if @config.reserved_words.include?(slug)
  end

  if @config.treat_numeric_as_conflict && purely_numeric_slug?(slug)
    return false
  end

  !@scope.exists_by_friendly_id?(slug)
end
generate(candidates) click to toggle source
# File lib/friendly_id/slug_generator.rb, line 22
def generate(candidates)
  candidates.each { |c| return c if available?(c) }
  nil
end

Private Instance Methods

purely_numeric_slug?(slug) click to toggle source
# File lib/friendly_id/slug_generator.rb, line 29
def purely_numeric_slug?(slug)
  return false unless slug
  begin
    Integer(slug, 10).to_s == slug.to_s
  rescue ArgumentError, TypeError
    false
  end
end