Module: Mongoid::Matcher::Bits Private

Included in:
BitsAllClear, BitsAllSet, BitsAnyClear, BitsAnySet
Defined in:
build/mongoid-7.3/lib/mongoid/matcher/bits.rb

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.operator_nameObject

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.



36
37
38
# File 'build/mongoid-7.3/lib/mongoid/matcher/bits.rb', line 36

module_function def operator_name
  name.sub(/.*::/, '').sub(/\A(.)/) { |l| l.downcase }
end

Instance Method Details

#matches?(exists, value, condition) ⇒ Boolean

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.

Returns:



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'build/mongoid-7.3/lib/mongoid/matcher/bits.rb', line 6

def matches?(exists, value, condition)
  case value
  when BSON::Binary
    value = value.data.split('').map { |n| '%02x' % n.ord }.join.to_i(16)
  end
  case condition
  when Array
    array_matches?(value, condition)
  when BSON::Binary
    int_cond = condition.data.split('').map { |n| '%02x' % n.ord }.join.to_i(16)
    int_matches?(value, int_cond)
  when Integer
    if condition < 0
      raise Errors::InvalidQuery, "Invalid value for $#{operator_name} argument: negative integers are not allowed: #{condition}"
    end
    int_matches?(value, condition)
  when Float
    if (int_cond = condition.to_i).to_f == condition
      if int_cond < 0
        raise Errors::InvalidQuery, "Invalid value for $#{operator_name} argument: negative numbers are not allowed: #{condition}"
      end
      int_matches?(value, int_cond)
    else
      raise Errors::InvalidQuery, "Invalid type for $#{operator_name} argument: not representable as an integer: #{condition}"
    end
  else
    raise Errors::InvalidQuery, "Invalid type for $#{operator_name} argument: #{condition}"
  end
end