Module: Mongoid::Slug

Extended by:
ActiveSupport::Concern
Defined in:
lib/mongoid/slug.rb,
lib/mongoid/slug/railtie.rb,
lib/mongoid/slug/version.rb,
lib/mongoid/slug/criteria.rb,
lib/mongoid/slug/unique_slug.rb,
lib/mongoid/slug/index_builder.rb

Overview

Slugs your Mongoid model.

Defined Under Namespace

Modules: ClassMethods, IndexBuilder Classes: Criteria, Railtie, UniqueSlug

Constant Summary collapse

MONGO_INDEX_KEY_LIMIT_BYTES =
1024
VERSION =
'6.0.1'.freeze

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.default_slugObject

Returns the value of attribute default_slug.



31
32
33
# File 'lib/mongoid/slug.rb', line 31

def default_slug
  @default_slug
end

Class Method Details

.configure(&block) ⇒ Object



32
33
34
# File 'lib/mongoid/slug.rb', line 32

def configure(&block)
  instance_eval(&block)
end

.slug(&block) ⇒ Object



36
37
38
# File 'lib/mongoid/slug.rb', line 36

def slug(&block)
  @default_slug = block if block_given?
end

Instance Method Details

#apply_slugObject



179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# File 'lib/mongoid/slug.rb', line 179

def apply_slug
  new_slug = find_unique_slug

  # skip slug generation and use Mongoid id
  # to find document instead
  return true if new_slug.size.zero?

  # avoid duplicate slugs
  _slugs.delete(new_slug) if _slugs

  if !!slug_history && _slugs.is_a?(Array)
    append_slug(new_slug)
  else
    self._slugs = [new_slug]
  end
end

#build_slugtrue

Builds a new slug.

Returns:

  • (true)


162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/mongoid/slug.rb', line 162

def build_slug
  if localized?
    begin
      orig_locale = I18n.locale
      all_locales.each do |target_locale|
        I18n.locale = target_locale
        apply_slug
      end
    ensure
      I18n.locale = orig_locale
    end
  else
    apply_slug
  end
  true
end

#clear_slug!Object

Sets the slug to its default value.



220
221
222
# File 'lib/mongoid/slug.rb', line 220

def clear_slug!
  self._slugs = []
end

#find_unique_slugString

Finds a unique slug, were specified string used to generate a slug.

Returned slug will the same as the specified string when there are no duplicates.

Returns:

  • (String)

    A unique slug



230
231
232
# File 'lib/mongoid/slug.rb', line 230

def find_unique_slug
  UniqueSlug.new(self).find_unique
end

#reset_slug!Object

Rolls back the slug value from the Mongoid changeset.



215
216
217
# File 'lib/mongoid/slug.rb', line 215

def reset_slug!
  reset__slugs!
end

#set_slug!Object

Builds slug then atomically sets it in the database.

This method is adapted to use the :set method variants from both Mongoid 3 (two args) and Mongoid 4 (hash arg)



200
201
202
203
# File 'lib/mongoid/slug.rb', line 200

def set_slug!
  build_slug
  method(:set).arity == 1 ? set(_slugs: _slugs) : set(:_slugs, _slugs)
end

#slugString

Returns the slug, or nil if the document does not have a slug.

Returns:

  • (String)

    the slug, or nil if the document does not have a slug.



250
251
252
253
# File 'lib/mongoid/slug.rb', line 250

def slug
  return _slugs.last if _slugs
  _id.to_s
end

#slug_builderObject



255
256
257
258
259
260
261
262
263
# File 'lib/mongoid/slug.rb', line 255

def slug_builder
  cur_slug = nil
  if new_with_slugs? || persisted_with_slug_changes?
    # user defined slug
    cur_slug = _slugs.last
  end
  # generate slug if the slug is not user defined or does not exist
  cur_slug || pre_slug_string
end

#slug_should_be_rebuilt?Boolean

Returns Whether the slug requires to be rebuilt.

Returns:

  • (Boolean)

    Whether the slug requires to be rebuilt



235
236
237
# File 'lib/mongoid/slug.rb', line 235

def slug_should_be_rebuilt?
  new_record? || _slugs_changed? || slugged_attributes_changed?
end

#slugged_attributes_changed?Boolean

Returns:

  • (Boolean)


239
240
241
# File 'lib/mongoid/slug.rb', line 239

def slugged_attributes_changed?
  slugged_attributes.any? { |f| attribute_changed? f.to_s }
end

#to_paramString

to this record.

Returns:

  • (String)

    A string which Action Pack uses for constructing an URL



245
246
247
# File 'lib/mongoid/slug.rb', line 245

def to_param
  slug || super
end

#unset_slug!Object

Atomically unsets the slug field in the database. It is important to unset the field for the sparse index on slugs.

This also resets the in-memory value of the slug field to its default (empty array)



209
210
211
212
# File 'lib/mongoid/slug.rb', line 209

def unset_slug!
  unset(:_slugs)
  clear_slug!
end