Class: Mongory::Matchers::InMatcher
- Inherits:
-
AbstractMatcher
- Object
- AbstractMatcher
- Mongory::Matchers::InMatcher
- Defined in:
- lib/mongory/matchers/in_matcher.rb
Overview
InMatcher implements the $in
operator.
It checks whether the record matches any value in the condition array.
If the record is an array, it succeeds if any item overlaps with the condition.
If the record is a single value (including nil
), it matches if it is included in the condition.
Constant Summary
Constants inherited from AbstractMatcher
AbstractMatcher::KEY_NOT_FOUND
Instance Attribute Summary
Attributes inherited from AbstractMatcher
Class Method Summary collapse
Instance Method Summary collapse
-
#check_validity! ⇒ void
Ensures the condition is an array or range.
- #priority ⇒ Object
-
#raw_proc ⇒ Proc
Creates a raw Proc that performs the in-matching operation.
Methods inherited from AbstractMatcher
#cached_proc, #debug_proc, define_matcher, #initialize, #match, #match?, #render_tree, #uniq_key
Methods included from Utils
included, included_classes, #is_blank?, #is_present?
Constructor Details
This class inherits a constructor from Mongory::Matchers::AbstractMatcher
Class Method Details
.build(condition, *args) ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/mongory/matchers/in_matcher.rb', line 27 def self.build(condition, *args) return super unless condition.is_a?(Range) end_op = condition.exclude_end? ? '$lt' : '$lte' head, tail = [condition.first, condition.last].sort AndMatcher.build([{ '$gte' => head }, { end_op => tail }], *args) end |
Instance Method Details
#check_validity! ⇒ void
This method returns an undefined value.
Ensures the condition is an array or range.
59 60 61 62 63 |
# File 'lib/mongory/matchers/in_matcher.rb', line 59 def check_validity! return if @condition.is_a?(Array) raise TypeError, '$in needs an array or range' end |
#priority ⇒ Object
51 52 53 |
# File 'lib/mongory/matchers/in_matcher.rb', line 51 def priority 1 + Math.log(@condition.size + 1, 1.5) end |
#raw_proc ⇒ Proc
Creates a raw Proc that performs the in-matching operation. The Proc checks if any element of the record is in the condition array.
39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/mongory/matchers/in_matcher.rb', line 39 def raw_proc condition = Set.new(@condition) Proc.new do |record| if record.is_a?(Array) is_present?(condition & record) else condition.include?(record) end end end |