module Acts::Slugoid::ClassMethods

Public Class Methods

acts_as_slugoid_options() click to toggle source
# File lib/slugoid/acts/slugoid.rb, line 38
def self.acts_as_slugoid_options
  @acts_as_slugoid_options
end
find_by_slug(slug) click to toggle source
# File lib/slugoid/acts/slugoid.rb, line 42
def self.find_by_slug(slug)
  where(@acts_as_slugoid_options[:store_as] => slug).first
end

Public Instance Methods

acts_as_slugoid(options = {}) click to toggle source

Adds the logic to generate the slug

Options:

:generate_from
    The name of the field used to generate the slug

:store_as
    The name of the field where the slug will be stored
# File lib/slugoid/acts/slugoid.rb, line 18
def acts_as_slugoid(options = {})
  @acts_as_slugoid_options = {
    :generate_from => :name,
    :store_as => :slug
    }.merge(options)

    generate_from = @acts_as_slugoid_options[:generate_from]
    store_as = @acts_as_slugoid_options[:store_as]

    class_eval do
      before_save do
        generate_slug(generate_from, store_as)
      end

      field(store_as, :type => String) unless self.respond_to?(store_as)
      index(store_as)
      alias_method :to_param!, :to_param

      include InstanceMethods

      def self.acts_as_slugoid_options
        @acts_as_slugoid_options
      end

      def self.find_by_slug(slug)
        where(@acts_as_slugoid_options[:store_as] => slug).first
      end
    end

    define_method("to_param") do
      self.send(store_as)
    end
  end