Módulo: Mongoid::Matcher::EqImpl Private
- Definido em:
- lib/mongoid/matcher/eq_impl.rb
Visão geral
Este módulo faz parte de uma API privada. Você deve evitar usar este módulo, se possível, pois ele pode ser removido ou alterado no futuro.
Este módulo é usado por $eq e outros operadores que precisam realizar a correspondência que $eq executa (por exemplo, $ne que nega o resultado de $eq). Ao contrário de $eq, este módulo usa um operador original como argumento adicional para matches?
fornecer as mensagens de exceção corretas, refletindo o operador que foi invocado pela primeira vez.
Recolhimento do Resumo do método de classe
-
.correspondências?(exists, valor, condição, original_operator) ➤ true | falso, booleano
privado
Retorna se um valor satisfaz uma expressão$eq (ou semelhante).
-
.time_eq?(time_a, time_b) ➤ true | falso, booleano
privado
Por https://mongodb.com/pt-br/docs/ruby-driver/current/tutorials/bson-v4/#time-instances, > Os horários no BSON (e no MongoDB) só podem ter precisão de milissegundos.
-
.time_rounded_to_millis(tempo) ➤ true | false
privado
Arredonda um valor de tempo para o milissegundo mais próximo.
Detalhes do método de classe
.correspondências?(exists, valor, condição, original_operator) ➤ true | false, booleano
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Retorna se um valor satisfaz uma expressão$eq (ou semelhante).
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 |
# File 'lib/mongoid/matcher/eq_impl.rb', linha 24 module_function def correspondências?(existe, valor, Condição, original_operator) caso Condição quando faixa # Como $ne invoca $eq, a mensagem de exceção precisa lidar com # ambos os operadores. aumentar Errors::Query inválida, "A faixa não é suportada como um argumento para '#{original_operator}'" =começar se valor.is_a?(Array) value.any? { |elt| conditions.include?(elt) } mais condição.include?(valor) end =end mais # Ao fazer uma comparação com objetos de tempo, compare usando precisão de milissegundos se valor.kind_of?(Hora) && Condição.kind_of?(Hora) time_eq?(valor, Condição) elsif valor.is_a?(Array) && Condição.kind_of?(Hora) valor.map fazer |v| se v.kind_of?(Hora) time_rounded_to_millis(v) mais v end end.incluir?(time_rounded_to_millis(Condição)) mais valor == Condição || valor.is_a?(Array) && valor.incluir?(Condição) end end end |
.time_eq?(time_a, time_b) ➤ true | false, booleano
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Por https://mongodb.com/pt-br/docs/ruby-driver/current/tutorials/bson-v4/#time-instances, > Os horários no BSON (e no MongoDB) só podem ter precisão de milissegundos. Quando as instâncias de Ruby Time são serializadas para BSON ou Extended JSON, os tempos são baseados no milissegundo mais próximo.
> Devido a esse padrão, é altamente recomendável que os aplicativos executem todos os cálculos de tempo usando matemática inteira, pois a inexatidão dos cálculos de ponto flutuante pode produzir resultados inesperados.
Como tal, execute uma operação semelhante à que a joia bson-ruby faz.
70 71 72 |
# File 'lib/mongoid/matcher/eq_impl.rb', linha 70 module_function def time_eq?(time_a, time_b) time_rounded_to_millis(time_a) == time_rounded_to_millis(time_b) end |
.time_rounded_to_millis(tempo) ➤ true | false
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Arredonda um valor de tempo para o milissegundo mais próximo.
79 80 81 |
# File 'lib/mongoid/matcher/eq_impl.rb', linha 79 module_function def time_rounded_to_millis(time) Método time._bson_to_i * 1000 + time.usec.divmod(1000).primeiro end |