Module: Mongoid::Matcher::Bits Private
- Included in:
- BitsAllClear, BitsAllSet, BitsAnyClear, BitsAnySet
- Defined in:
- lib/mongoid/matcher/bits.rb
Overview
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.
Mixin module included in bitwise expression matchers.
Class Method Summary collapse
-
.operator_name ⇒ String
private
Returns the name of the expression operator.
Instance Method Summary collapse
-
#matches?(exists, value, condition) ⇒ true | false
private
Returns whether a value satisfies a bitwise expression.
Class Method Details
.operator_name ⇒ String
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 the name of the expression operator.
55 56 57 |
# File 'lib/mongoid/matcher/bits.rb', line 55 module_function def operator_name name.sub(/.*::/, '').sub(/\A(.)/) { |l| l.downcase } end |
Instance Method Details
#matches?(exists, value, condition) ⇒ true | false
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 whether a value satisfies a bitwise expression.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/mongoid/matcher/bits.rb', line 20 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 |