Módulo: Mongoid::Matcher::Bits Privado

Incluido en:
BitsAllClear, BitsAllSet, BitsAnyClear, BitsAnySet
Definido en:
lib/mongoid/matcher/bits.rb

Overview

Este módulo es parte de una API privada. Deberías evitar usar este módulo si es posible, ya que puede ser removido o cambiado en el futuro.

Módulo mixin incluido en los comparadores de expresiones bit a bit.

Resumen del método de clase colapsar

Resumen del método de instancia colapsar

Detalles del método de clase

.operator_nameString

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve el nombre del operador de expresión.

Devuelve:

  • (string)

    El nombre del operador.



60
61
62
# Archivo 'lib/mongoid/matcher/bits.rb', línea 60

module_function def operator_name
  Nombre.sub(/.*::/, '').sub(/\A(.)/) { |l| l.minúscula }
end

Detalles del método de instancia

#matches?(_exists, value, condition) ⇒ true | false

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve si un valor cumple con una expresión bit a bit.

Parámetros:

  • exists (true | false)

    No se utiliza.

  • Valor (objeto)

    El valor a comprobar.

  • condición (Numérico |<Numeric> arreglo<Numérico>)

    El predicado de expresión como una máscara de bits o una lista de posiciones.

Devuelve:

  • (true | false)

    Si el valor coincide.



17
18
19
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
49
50
51
52
53
# Archivo 'lib/mongoid/matcher/bits.rb', línea 17

def coincide?(_exists, Valor, condición)
  caso Valor
  cuando BSON::Binario
    Valor = Valor.Datos.división('').map { |n| '%02x' % n.ord }.unirse.to_i(16)
  end
  caso condición
  cuando Arreglo
    array_matches?(Valor, condición)
  cuando BSON::Binario
    int_cond = condición.Datos.división('').map { |n| '%02x' % n.ord }.unirse.to_i(16)
    int_matches?(Valor, int_cond)
  cuando entero
    si condición < 0
      propagar Errors::Consulta no válida,
            "Valor inválido para $#{operator_name} argumento: no se permiten enteros negativos: #{condition}"
    end

    int_matches?(Valor, condición)
  cuando Float
    # Permitir que los float sean enteros (por ejemplo, 50.0), pero rechace aquellos
    # con una parte fraccionaria (por ejemplo, 50.1) ya que las operaciones a nivel de bit requieren enteros.
    int_cond = condición.to_i
    si int_cond == condición
      si int_cond < 0
        propagar Errors::Consulta no válida,
              "Valor inválido para $#{operator_name} argumento: no se permiten números negativos: #{condition}"
      end

      int_matches?(Valor, int_cond)
    else
      propagar Errors::Consulta no válida,
            "Tipo no válido para $#{operator_name} argumento: no representable como un entero: #{condition}"
    end
  else
    propagar Errors::Consulta no válida, "Tipo no válido para $#{operator_name} argumento: #{condition}"
  end
end