Module: Mongoid::Criteria::Scopable

Included in:
Mongoid::Criteria
Defined in:
build/mongoid-8.1/lib/mongoid/criteria/scopable.rb

Instance Method Summary collapse

Instance Method Details

#apply_default_scopeCriteria

Applies the default scope to the criteria.

Examples:

Apply the default scope.

criteria.apply_default_scope

Returns:



13
14
15
16
17
18
# File 'build/mongoid-8.1/lib/mongoid/criteria/scopable.rb', line 13

def apply_default_scope
  klass.without_default_scope do
    merge!(klass.default_scoping.call)
  end
  self.scoping_options = 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.

Parameters:

  • scope (Proc | Symbol | Criteria | nil)

    The scope to apply.

Returns:

  • (Criteria)

    The criteria with the scope applied.



32
33
34
35
36
37
38
39
40
41
42
43
# File 'build/mongoid-8.1/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.

Examples:

Remove the scoping.

criteria.remove_scoping(other)

Parameters:

  • other (Criteria)

    The other criteria.

Returns:

  • (Criteria)

    The criteria with scoping removed.



54
55
56
57
58
59
60
61
62
# File 'build/mongoid-8.1/lib/mongoid/criteria/scopable.rb', line 54

def remove_scoping(other)
  if other
    reject_matching(other, :selector, :options)
    other.inclusions.each do |meta|
      inclusions.delete_one(meta)
    end
  end
  self
end

#scoped(options = nil) ⇒ Criteria

Forces the criteria to be scoped, unless its inside an unscoped block.

Examples:

Force the criteria to be scoped.

criteria.scoped(skip: 10)

Parameters:

  • options (Hash) (defaults to: nil)

    Additional query options.

Returns:



72
73
74
75
76
77
78
79
# File 'build/mongoid-8.1/lib/mongoid/criteria/scopable.rb', line 72

def scoped(options = nil)
  crit = clone
  crit.options.merge!(options || {})
  if klass.default_scopable? && !scoped?
    crit.apply_default_scope
  end
  crit
end

#scoped?true | false

Has the criteria had the default scope applied?

Examples:

Is the default scope applied?

criteria.scoped?

Returns:

  • (true | false)

    If the default scope is applied.



87
88
89
# File 'build/mongoid-8.1/lib/mongoid/criteria/scopable.rb', line 87

def scoped?
  !!(defined?(@scoped) ? @scoped : nil)
end

#scoping_optionsArray

Get the criteria scoping options, as a pair (scoped, unscoped).

Examples:

Get the scoping options.

criteria.scoping_options

Returns:

  • (Array)

    Scoped, unscoped.



122
123
124
# File 'build/mongoid-8.1/lib/mongoid/criteria/scopable.rb', line 122

def scoping_options
  [ (defined?(@scoped) ? @scoped : nil), (defined?(@unscoped) ? @unscoped : nil) ]
end

#scoping_options=(options) ⇒ Array

Set the criteria scoping options, as a pair (scoped, unscoped).

Examples:

Set the scoping options.

criteria.scoping_options = true, false

Parameters:

  • options (Array)

    Scoped, unscoped.

Returns:

  • (Array)

    The new scoping options.



134
135
136
# File 'build/mongoid-8.1/lib/mongoid/criteria/scopable.rb', line 134

def scoping_options=(options)
  @scoped, @unscoped = options
end

#unscopedCriteria

Clears all scoping from the criteria.

Examples:

Clear all scoping from the criteria.

criteria.unscoped

Returns:



97
98
99
100
101
102
103
104
# File 'build/mongoid-8.1/lib/mongoid/criteria/scopable.rb', line 97

def unscoped
  crit = clone
  unless unscoped?
    crit.scoping_options = false, true
    crit.selector.clear; crit.options.clear
  end
  crit
end

#unscoped?true | false

Is the criteria unscoped?

Examples:

Is the criteria unscoped?

criteria.unscoped?

Returns:

  • (true | false)

    If the criteria is force unscoped.



112
113
114
# File 'build/mongoid-8.1/lib/mongoid/criteria/scopable.rb', line 112

def unscoped?
  !!(defined?(@unscoped) ? @unscoped : nil)
end

#with_default_scopeCriteria

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.

Examples:

Get the criteria with the default scope.

criteria.with_default_scope

Returns:



147
148
149
150
151
152
153
# File 'build/mongoid-8.1/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