Module: Mongoid::Slug::ClassMethods

Defined in:
lib/mongoid/slug.rb

Instance Method Summary collapse

Instance Method Details

#default_slug_url_builderObject



108
109
110
# File 'lib/mongoid/slug.rb', line 108

def default_slug_url_builder
  Mongoid::Slug.default_slug || ->(cur_object) { cur_object.slug_builder.to_url }
end

#find_by_slug!(*args) ⇒ Array<Document>, Document

Find documents by slugs.

A document matches if any of its slugs match one of the supplied params.

A document matching multiple supplied params will be returned only once.

If any supplied param does not match a document a Mongoid::Errors::DocumentNotFound will be raised.

Examples:

Find by a slug.

Model.find_by_slug!('some-slug')

Find by multiple slugs.

Model.find_by_slug!('some-slug', 'some-other-slug')

Parameters:

  • args (Array<Object>)

    The slugs to search for.

Returns:

  • (Array<Document>, Document)

    The matching document(s).



142
143
144
# File 'lib/mongoid/slug.rb', line 142

def find_by_slug!(*args)
  with_default_scope.find_by_slug!(*args)
end

#look_like_slugs?(*args) ⇒ Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/mongoid/slug.rb', line 112

def look_like_slugs?(*args)
  with_default_scope.look_like_slugs?(*args)
end

#queryableObject



146
147
148
# File 'lib/mongoid/slug.rb', line 146

def queryable
  current_scope || Criteria.new(self) # Use Mongoid::Slug::Criteria for slugged documents.
end

#slug(*fields) { ... } ⇒ Object #slug(*fields, options) { ... } ⇒ Object

Examples:

A custom builder

class Person
  include Mongoid::Document
  include Mongoid::Slug

  field :names, :type => Array
  slug :names do |doc|
    doc.names.join(' ')
  end
end

Overloads:

  • #slug(*fields) { ... } ⇒ Object

    Sets one ore more fields as source of slug.

    Parameters:

    • fields (Array)

      One or more fields the slug should be based on.

    Yields:

    • If given, the block is used to build a custom slug.

  • #slug(*fields, options) { ... } ⇒ Object

    Sets one ore more fields as source of slug. the slug should be retained. When searched by slug, the document now matches both past and present slugs. immutable. Defaults to ‘false`. scope the slug by. Embedded documents are, by default, scoped by their parent.

    Parameters:

    • fields (Array)

      One or more fields the slug should be based on.

    • options (Hash)
    • options (Boolean)

      :history Whether a history of changes to

    • options (Boolean)

      :permanent Whether the slug should be

    • options (Array)

      :reserve` A list of reserved slugs

    • options

      :scope [Symbol] a reference association or field to

    • options

      :max_length [Integer] the maximum length of the text portion of the slug

    Yields:

    • If given, a block is used to build a slug.



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/mongoid/slug.rb', line 77

def slug(*fields, &block)
  options = fields.extract_options!

  self.slug_scope            = options[:scope]
  self.slug_index            = options[:index].nil? ? true : options[:index]
  self.slug_reserved_words   = options[:reserve] || Set.new(%w[new edit])
  self.slugged_attributes    = fields.map(&:to_s)
  self.slug_history          = options[:history]
  self.slug_by_model_type    = options[:by_model_type]
  self.slug_max_length       = options.key?(:max_length) ? options[:max_length] : MONGO_INDEX_KEY_LIMIT_BYTES - 32

  field :_slugs, type: Array, localize: options[:localize]
  alias_attribute :slugs, :_slugs

  # Set indexes
  if slug_index && !embedded?
    Mongoid::Slug::IndexBuilder.build_indexes(self, slug_scope_key, slug_by_model_type,
                                              options[:localize])
  end

  self.slug_url_builder = block_given? ? block : default_slug_url_builder

  #-- always create slug on create
  #-- do not create new slug on update if the slug is permanent
  if options[:permanent]
    set_callback :create, :before, :build_slug
  else
    set_callback :save, :before, :build_slug, if: :slug_should_be_rebuilt?
  end
end

#slug_scope_keyArray<Document>, Document

Returns the scope key for indexing, considering associations

Returns:

  • (Array<Document>, Document)


119
120
121
122
123
# File 'lib/mongoid/slug.rb', line 119

def slug_scope_key
  return nil unless slug_scope

  reflect_on_association(slug_scope).try(:key) || slug_scope
end