Module: Mongoid::Scoping::ClassMethods
- Defined in:
- lib/mongoid/scoping.rb
Instance Method Summary collapse
-
#default_scopable? ⇒ true, false
Is the class able to have the default scope applied?.
-
#default_scope(value) ⇒ Proc
Add a default scope to the model.
-
#queryable ⇒ Criteria
private
Get a queryable, either the last one on the scope stack or a fresh one.
-
#scope(name, value, &block) ⇒ Object
Create a scope that can be accessed from the class level or chained to criteria by the provided name.
-
#scope_stack ⇒ Array<Criteria>
Initializes and returns the current scope stack.
-
#scoped(options = nil) ⇒ Criteria
Get a criteria for the document with normal scoping.
-
#unscoped ⇒ Criteria, Object
Get the criteria without the default scoping applied.
-
#with_default_scope ⇒ Criteria
(also: #criteria)
Get a criteria with the default scope applied, if possible.
-
#with_scope(criteria) ⇒ Criteria
Pushes the provided criteria onto the scope stack, and removes it after the provided block is yielded.
-
#without_default_scope ⇒ Object
Execute the block without applying the default scope.
Instance Method Details
#default_scopable? ⇒ true, false
Is the class able to have the default scope applied?
54 55 56 |
# File 'lib/mongoid/scoping.rb', line 54 def default_scopable? default_scoping? && !Threaded.executing?(:without_default_scope) end |
#default_scope(value) ⇒ Proc
Add a default scope to the model. This scope will be applied to all criteria unless #unscoped is specified.
41 42 43 44 |
# File 'lib/mongoid/scoping.rb', line 41 def default_scope(value) check_scope_validity(value) self.default_scoping = process_default_scope(value) end |
#queryable ⇒ Criteria
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Get a queryable, either the last one on the scope stack or a fresh one.
68 69 70 |
# File 'lib/mongoid/scoping.rb', line 68 def queryable scope_stack.last || Criteria.new(self) end |
#scope(name, value, &block) ⇒ Object
Create a scope that can be accessed from the class level or chained to criteria by the provided name.
93 94 95 96 97 98 99 100 101 102 |
# File 'lib/mongoid/scoping.rb', line 93 def scope(name, value, &block) normalized = name.to_sym check_scope_validity(value) check_scope_name(normalized) scopes[normalized] = { scope: strip_default_scope(value), extension: Module.new(&block) } define_scope_method(normalized) end |
#scope_stack ⇒ Array<Criteria>
Initializes and returns the current scope stack.
112 113 114 |
# File 'lib/mongoid/scoping.rb', line 112 def scope_stack Threaded.scope_stack[object_id] ||= [] end |
#scoped(options = nil) ⇒ Criteria
This will force the default scope to be applied.
Get a criteria for the document with normal scoping.
133 134 135 |
# File 'lib/mongoid/scoping.rb', line 133 def scoped( = nil) queryable.scoped() end |
#unscoped ⇒ Criteria, Object
This will force the default scope to be removed.
Get the criteria without the default scoping applied.
153 154 155 156 157 158 159 160 161 |
# File 'lib/mongoid/scoping.rb', line 153 def unscoped if block_given? without_default_scope do yield(self) end else queryable.unscoped end end |
#with_default_scope ⇒ Criteria Also known as: criteria
Get a criteria with the default scope applied, if possible.
171 172 173 |
# File 'lib/mongoid/scoping.rb', line 171 def with_default_scope queryable.with_default_scope end |
#with_scope(criteria) ⇒ Criteria
Pushes the provided criteria onto the scope stack, and removes it after the provided block is yielded.
187 188 189 190 191 192 193 194 |
# File 'lib/mongoid/scoping.rb', line 187 def with_scope(criteria) scope_stack.push(criteria) begin yield criteria ensure scope_stack.pop end end |
#without_default_scope ⇒ Object
Execute the block without applying the default scope.
206 207 208 209 210 211 |
# File 'lib/mongoid/scoping.rb', line 206 def without_default_scope Threaded.begin_execution("without_default_scope") yield ensure Threaded.exit_execution("without_default_scope") end |