Module: Mongoid::Criteria::Scopable
- Included in:
- Mongoid::Criteria
- Defined in:
- lib/mongoid/criteria/scopable.rb
Overview
Mixin module included in Mongoid::Criteria which adds functionality related to default query scopes and named scopes.
Instance Method Summary collapse
-
#apply_default_scope ⇒ Criteria
Applies the default scope to the criteria.
-
#apply_scope(scope) ⇒ Criteria
private
Applies a scope to the current criteria.
-
#remove_scoping(other) ⇒ Criteria
Given another criteria, remove the other criteria’s scoping from this criteria.
-
#scoped(options = nil) ⇒ Criteria
Forces the criteria to be scoped, unless its inside an unscoped block.
-
#scoped? ⇒ true | false
Has the criteria had the default scope applied?.
-
#scoping_options ⇒ Array
Get the criteria scoping options, as a pair (scoped, unscoped).
-
#scoping_options=(options) ⇒ Array
Set the criteria scoping options, as a pair (scoped, unscoped).
-
#unscoped ⇒ Criteria
Clears all scoping from the criteria.
-
#unscoped? ⇒ true | false
Is the criteria unscoped?.
-
#with_default_scope ⇒ Criteria
Get the criteria with the default scope applied, if the default scope is able to be applied.
Instance Method Details
#apply_default_scope ⇒ Criteria
Applies the default scope to the criteria.
18 19 20 21 22 23 |
# File 'lib/mongoid/criteria/scopable.rb', line 18 def apply_default_scope klass.without_default_scope do merge!(klass.default_scoping.call) end self. = true, false end |
#apply_scope(scope) ⇒ 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.
Applies a scope to the current criteria.
This method does not modify the receiver but it may return a new object or the receiver depending on the argument: if the scope
argument is nil, the receiver is returned without modification, otherwise a new criteria object is returned.
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/mongoid/criteria/scopable.rb', line 37 def apply_scope(scope) case scope when Proc instance_exec(&scope) when Symbol send(scope) when Criteria merge(scope) else self end end |
#remove_scoping(other) ⇒ Criteria
Given another criteria, remove the other criteria’s scoping from this criteria.
59 60 61 62 63 64 65 66 67 |
# File 'lib/mongoid/criteria/scopable.rb', line 59 def remove_scoping(other) if other reject_matching(other, :selector, :options) other.inclusions.each do || inclusions.delete_one() end end self end |
#scoped(options = nil) ⇒ Criteria
Forces the criteria to be scoped, unless its inside an unscoped block.
77 78 79 80 81 82 83 84 |
# File 'lib/mongoid/criteria/scopable.rb', line 77 def scoped( = nil) crit = clone crit..merge!( || {}) if klass.default_scopable? && !scoped? crit.apply_default_scope end crit end |
#scoped? ⇒ true | false
Has the criteria had the default scope applied?
92 93 94 |
# File 'lib/mongoid/criteria/scopable.rb', line 92 def scoped? !!(defined?(@scoped) ? @scoped : nil) end |
#scoping_options ⇒ Array
Get the criteria scoping options, as a pair (scoped, unscoped).
127 128 129 |
# File 'lib/mongoid/criteria/scopable.rb', line 127 def [ (defined?(@scoped) ? @scoped : nil), (defined?(@unscoped) ? @unscoped : nil) ] end |
#scoping_options=(options) ⇒ Array
Set the criteria scoping options, as a pair (scoped, unscoped).
139 140 141 |
# File 'lib/mongoid/criteria/scopable.rb', line 139 def () @scoped, @unscoped = end |
#unscoped ⇒ Criteria
Clears all scoping from the criteria.
102 103 104 105 106 107 108 109 |
# File 'lib/mongoid/criteria/scopable.rb', line 102 def unscoped crit = clone unless unscoped? crit. = false, true crit.selector.clear; crit..clear end crit end |
#unscoped? ⇒ true | false
Is the criteria unscoped?
117 118 119 |
# File 'lib/mongoid/criteria/scopable.rb', line 117 def unscoped? !!(defined?(@unscoped) ? @unscoped : nil) end |
#with_default_scope ⇒ Criteria
Get the criteria with the default scope applied, if the default scope is able to be applied. Cases in which it cannot are: If we are in an unscoped block, if the criteria is already forced unscoped, or the default scope has already been applied.
152 153 154 155 156 157 158 |
# File 'lib/mongoid/criteria/scopable.rb', line 152 def with_default_scope crit = clone if klass.default_scopable? && !unscoped? && !scoped? crit.apply_default_scope end crit end |