Módulo: Mongoid::Matcher::EqImpl Private

Definido en:
lib/mongoid/matcher/eq_impl.rb

Overview

Este módulo forma parte de una API privada. Debe evitar su uso siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Este módulo lo utilizan $eq y otros operadores que necesitan realizar la coincidencia que realiza $eq (por ejemplo, $ne, que niega el resultado de $eq). A diferencia de $eq, este módulo toma un operador original como argumento adicional a matches? para proporcionar los mensajes de excepción correctos que reflejan el operador que se invocó primero.

Colapso delresumen del método de clase

Detalles del método de clase

.¿coincide?(existe, valor, condición, operador_original) ⇒ verdadero | falso, booleano

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve si un valor satisface una expresión $eq (o similar).

Parámetros:

  • exists (verdadero | falso)

    No se utiliza.

  • valor (Objeto) -

    El valor a comprobar.

  • condición (Objeto| Rango)

    El predicado de la condición de igualdad.

  • operador_original (Cadena) -

    Operador a utilizar en mensajes de excepción.

Devuelve:

  • (verdadero | falso)

    Si el valor coincide.

  • (Booleano)


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
54
# Archivo 'lib/mongoid/matcher/eq_impl.rb', línea 24

module_function def ¿partidos?(exists, valor, condición, operador_original)
  caso condición
  Cuando Rango
    # Dado que $ne invoca $eq, el mensaje de excepción debe manejarse
    # ambos operadores.
    propagar Errors::Consulta no válida, "Elrango no se admite como argumento para '#{original_operator} ' "
=begin
    si valor.es_a?(Array)
      valor.cualquiera? { |elt| condición.incluir?(elt) }
    else
      condición.include?(valor)
    end
=end
  else
    # Al hacer una comparación con objetos de Tiempo, compare utilizando precisión de milisegundos
    Si valor.kind_of?(Tiempo) && condición.kind_of?(Tiempo)
      tiempo_eq?(valor, condición)
    elsif valor.is_a?(Arreglo) && condición.kind_of?(Tiempo)
      valor.map hacer |v|
        Si v.kind_of?(Tiempo)
          tiempo redondeado a milisegundos(v)
        else
          v
        end
      end.¿incluir?(tiempo redondeado a milisegundos(condición))
    else
      valor == condición ||
      valor.is_a?(Arreglo) && valor.¿incluir?(condición)
    end
  end
end

.time_eq?(tiempo_a, tiempo_b) ⇒ verdadero | falso, booleano

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Según www.mongodb.com/es/docs/ruby-driver/current/tutorials/bson-v4/#time-instances, los tiempos en BSON (y MongoDB) solo pueden tener una precisión de milisegundos. Cuando las instancias de Ruby Time se serializan a BSON o JSON extendido, los tiempos se redondean al milisegundo más cercano.

> Debido a este piso, se recomienda enfáticamente que las aplicaciones realicen todos los cálculos en tiempo real usando matemáticas enteras, ya que la inexactitud de los cálculos de punto flotante puede producir resultados inesperados.

Como tal, realice una operación similar a la que realiza la gema bson-ruby.

Parámetros:

  • tiempo_a (Time)

    El valor del primer tiempo.

  • tiempo_b (Time)

    El segundo valor del tiempo.

Devuelve:

  • (verdadero | falso)

    Si los dos tiempos son iguales al milisegundo.

  • (Booleano)


70
71
72
# Archivo 'lib/mongoid/matcher/eq_impl.rb', línea 70

module_function def tiempo_eq?(tiempo_a, tiempo_b)
  tiempo redondeado a milisegundos(tiempo_a) == tiempo redondeado a milisegundos(tiempo_b)
end

.time_rounded_to_millis(tiempo) ⇒ verdadero | falso

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Redondea un valor de tiempo al milisegundo más cercano.

Parámetros:

  • hora (Time)

    El valor del tiempo.

Devuelve:

  • (verdadero | falso)

    El tiempo redondeado al milisegundo.



79
80
81
# Archivo 'lib/mongoid/matcher/eq_impl.rb', línea 79

module_function def tiempo redondeado a milisegundos(hora)
  return hora._bson_to_i * 1000 + hora.usec.divmod(1000).primera
end