Module: Mongoid::Criteria::Scopable
- Included in:
- Mongoid::Criteria
- Defined in:
- lib/mongoid/criteria/scopable.rb
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.
13 14 15 16 17 18 |
# File 'lib/mongoid/criteria/scopable.rb', line 13 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.
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/mongoid/criteria/scopable.rb', line 32 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.
54 55 56 57 58 59 60 61 62 |
# File 'lib/mongoid/criteria/scopable.rb', line 54 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.
72 73 74 75 76 77 78 79 |
# File 'lib/mongoid/criteria/scopable.rb', line 72 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?
87 88 89 |
# File 'lib/mongoid/criteria/scopable.rb', line 87 def scoped? !!(defined?(@scoped) ? @scoped : nil) end |
#scoping_options ⇒ Array
Get the criteria scoping options, as a pair (scoped, unscoped).
122 123 124 |
# File 'lib/mongoid/criteria/scopable.rb', line 122 def [ (defined?(@scoped) ? @scoped : nil), (defined?(@unscoped) ? @unscoped : nil) ] end |
#scoping_options=(options) ⇒ Array
Set the criteria scoping options, as a pair (scoped, unscoped).
134 135 136 |
# File 'lib/mongoid/criteria/scopable.rb', line 134 def () @scoped, @unscoped = end |
#unscoped ⇒ Criteria
Clears all scoping from the criteria.
97 98 99 100 101 102 103 104 |
# File 'lib/mongoid/criteria/scopable.rb', line 97 def unscoped crit = clone unless unscoped? crit. = false, true crit.selector.clear; crit..clear end crit end |
#unscoped? ⇒ true | false
Is the criteria unscoped?
112 113 114 |
# File 'lib/mongoid/criteria/scopable.rb', line 112 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.
147 148 149 150 151 152 153 |
# File 'lib/mongoid/criteria/scopable.rb', line 147 def with_default_scope crit = clone if klass.default_scopable? && !unscoped? && !scoped? crit.apply_default_scope end crit end |