Module: Mongoid::Slug::ClassMethods
- Defined in:
- lib/mongoid/slug.rb
Instance Method Summary collapse
-
#find_by_slug!(*args) ⇒ Array<Document>, Document
Find documents by slugs.
-
#is_paranoid_doc? ⇒ Array<Document>, Document
Indicates whether or not the document includes Mongoid::Paranoia.
- #look_like_slugs?(*args) ⇒ Boolean
- #queryable ⇒ Object
- #slug(*fields, &block) ⇒ Object
-
#slug_scope_key ⇒ Array<Document>, Document
Returns the scope key for indexing, considering associations.
Instance Method Details
#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.
140 141 142 |
# File 'lib/mongoid/slug.rb', line 140 def find_by_slug!(*args) with_default_scope.find_by_slug!(*args) end |
#is_paranoid_doc? ⇒ Array<Document>, Document
Indicates whether or not the document includes Mongoid::Paranoia
This can be replaced with .paranoid? method once the following PRs are merged:
155 156 157 |
# File 'lib/mongoid/slug.rb', line 155 def is_paranoid_doc? !!(defined?(::Mongoid::Paranoia) && self < ::Mongoid::Paranoia) end |
#look_like_slugs?(*args) ⇒ Boolean
111 112 113 |
# File 'lib/mongoid/slug.rb', line 111 def look_like_slugs?(*args) with_default_scope.look_like_slugs?(*args) end |
#queryable ⇒ Object
144 145 146 |
# File 'lib/mongoid/slug.rb', line 144 def queryable current_scope || Criteria.new(self) # Use Mongoid::Slug::Criteria for slugged documents. end |
#slug(*fields) { ... } ⇒ Object #slug(*fields, options) { ... } ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 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 107 108 109 |
# File 'lib/mongoid/slug.rb', line 64 def slug(*fields, &block) = fields. self.slug_scope = [:scope] self.reserved_words = [:reserve] || Set.new(%w(new edit)) self.slugged_attributes = fields.map(&:to_s) self.history = [:history] self.by_model_type = [:by_model_type] self.slug_max_length = .key?(:max_length) ? [:max_length] : MONGO_INDEX_KEY_LIMIT_BYTES - 32 field :_slugs, type: Array, default: [], localize: [:localize] alias_attribute :slugs, :_slugs # Set index unless index(*Mongoid::Slug::Index.build_index(slug_scope_key, by_model_type)) end #-- Why is it necessary to customize the slug builder? default_url_builder = lambda do |cur_object| cur_object.slug_builder.to_url end self.url_builder = block_given? ? block : default_url_builder #-- always create slug on create #-- do not create new slug on update if the slug is permanent if [:permanent] set_callback :create, :before, :build_slug else set_callback :save, :before, :build_slug, if: :slug_should_be_rebuilt? end # If paranoid document: # - include shim to add callbacks for restore method # - unset the slugs on destroy # - recreate the slug on restore # - force reset the slug when saving a destroyed paranoid document, to ensure it stays unset in the database if is_paranoid_doc? send(:include, Mongoid::Slug::Paranoia) unless self.respond_to?(:before_restore) set_callback :destroy, :after, :unset_slug! set_callback :restore, :before, :set_slug! set_callback :save, :before, :reset_slug!, if: :paranoid_deleted? set_callback :save, :after, :clear_slug!, if: :paranoid_deleted? end end |
#slug_scope_key ⇒ Array<Document>, Document
Returns the scope key for indexing, considering associations
118 119 120 121 |
# File 'lib/mongoid/slug.rb', line 118 def slug_scope_key return nil unless slug_scope reflect_on_association(slug_scope).try(:key) || slug_scope end |