module Sequel::Plugins::Slugging::DatasetMethods

Public Instance Methods

from_slug(pk_or_slug) click to toggle source
# File lib/sequel/plugins/slugging.rb, line 149
def from_slug(pk_or_slug)
  pk = model.primary_key

  case pk_type = model.pk_type
  when :integer
    case pk_or_slug
    when Integer
      where(pk => pk_or_slug).first
    when String
      if pk_or_slug =~ INTEGER_REGEX
        where(pk => pk_or_slug.to_i).first
      else
        lookup_by_slug(pk_or_slug)
      end
    else
      raise "Argument to Dataset#from_slug needs to be a String or Integer"
    end
  when :uuid
    if record = lookup_by_slug(pk_or_slug)
      record
    elsif pk_or_slug =~ UUID_REGEX
      where(pk => pk_or_slug).first
    end
  else
    raise "Unexpected pk_type: #{pk_type.inspect}"
  end
end
from_slug!(pk_or_slug) click to toggle source
# File lib/sequel/plugins/slugging.rb, line 145
def from_slug!(pk_or_slug)
  from_slug(pk_or_slug) || raise(Sequel::NoMatchingRow)
end
lookup_by_slug(slug) click to toggle source
# File lib/sequel/plugins/slugging.rb, line 177
def lookup_by_slug(slug)
  if history = model.slugging_opts[:history]
    m = model
    if pk = m.db[history].where(sluggable_type: m.to_s, slug: slug).get(:sluggable_id)
      where(m.primary_key => pk).first
    end
  else
    where(slug: slug).first
  end
end