Module: Mongoid::Slug::ClassMethods
- Defined in:
- lib/mongoid/slug.rb
Instance Method Summary collapse
- #default_slug_url_builder ⇒ Object
-
#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
#default_slug_url_builder ⇒ Object
117 118 119 |
# File 'lib/mongoid/slug.rb', line 117 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.
150 151 152 |
# File 'lib/mongoid/slug.rb', line 150 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:
165 166 167 |
# File 'lib/mongoid/slug.rb', line 165 def is_paranoid_doc? !!(defined?(::Mongoid::Paranoia) && self < ::Mongoid::Paranoia) end |
#look_like_slugs?(*args) ⇒ Boolean
121 122 123 |
# File 'lib/mongoid/slug.rb', line 121 def look_like_slugs?(*args) with_default_scope.look_like_slugs?(*args) end |
#queryable ⇒ Object
154 155 156 |
# File 'lib/mongoid/slug.rb', line 154 def queryable current_scope || Criteria.new(self) # Use Mongoid::Slug::Criteria for slugged documents. end |
#slug(*fields) { ... } ⇒ Object #slug(*fields, options) { ... } ⇒ Object
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 110 111 112 113 114 115 |
# File 'lib/mongoid/slug.rb', line 75 def slug(*fields, &block) = fields. self.slug_scope = [:scope] self.slug_reserved_words = [:reserve] || Set.new(%w(new edit)) self.slugged_attributes = fields.map(&:to_s) self.slug_history = [:history] self.slug_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, localize: [:localize] alias_attribute :slugs, :_slugs # Set index unless index(*Mongoid::Slug::Index.build_index(slug_scope_key, slug_by_model_type)) 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 [: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 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
128 129 130 131 |
# File 'lib/mongoid/slug.rb', line 128 def slug_scope_key return nil unless slug_scope reflect_on_association(slug_scope).try(:key) || slug_scope end |