class Mongoid::Slug::UniqueSlug::SlugState

Attributes

existing_history_slugs[R]
existing_slugs[R]
last_entered_slug[R]
sorted_existing[R]

Public Class Methods

new(slug, documents, pattern) click to toggle source
# File lib/mongoid/slug/unique_slug.rb, line 11
def initialize slug, documents, pattern
  @slug = slug
  @documents = documents
  @pattern = pattern
  @last_entered_slug = []
  @existing_slugs = []
  @existing_history_slugs = []
  @sorted_existing = []
  @documents.each do |doc|
    history_slugs = doc._slugs
    next if history_slugs.nil?
    existing_slugs.push(*history_slugs.find_all { |cur_slug| cur_slug =~ @pattern })
    last_entered_slug.push(*history_slugs.last) if history_slugs.last =~ @pattern
    existing_history_slugs.push(*history_slugs.first(history_slugs.length() - 1).find_all { |cur_slug| cur_slug =~ @pattern })
  end
end

Public Instance Methods

highest_existing_counter() click to toggle source
# File lib/mongoid/slug/unique_slug.rb, line 36
def highest_existing_counter
  sort_existing_slugs
  @sorted_existing.last || 0
end
include_slug() click to toggle source
# File lib/mongoid/slug/unique_slug.rb, line 32
def include_slug
  existing_slugs << @slug
end
inspect() click to toggle source
# File lib/mongoid/slug/unique_slug.rb, line 49
def inspect
  {
    :slug                   => @slug,
    :existing_slugs         => existing_slugs,
    :last_entered_slug      => last_entered_slug,
    :existing_history_slugs => existing_history_slugs,
    :sorted_existing        => sorted_existing
  }
end
slug_included?() click to toggle source
# File lib/mongoid/slug/unique_slug.rb, line 28
def slug_included?
  existing_slugs.include? @slug
end
sort_existing_slugs() click to toggle source
# File lib/mongoid/slug/unique_slug.rb, line 41
def sort_existing_slugs
  # remove the slug part and leave the absolute integer part and sort
  re = %r(^#{Regexp.escape(@slug)})
  @sorted_existing = existing_slugs.map do |s|
    s.sub(re,'').to_i.abs
  end.sort
end