Módulo: Mongoid::Matcher::EqImpl Private
- Definido em:
- build/mongoid-8.1/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, value, conditions, original_operator) ➤ Boolean privado
-
.time_eq?(time_a, time_b) ➤ 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(time) ➤ Objeto privado
Detalhes do método de classe
.correspondências?(exists, value, conditions, original_operator) ➤ Boolean
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.
12 13 14 15 16 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 |
# File 'build/mongoid-8.1/lib/mongoid/matcher/eq_impl.rb', linha 12 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 Mongoid.compare_time_by_ms 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 mais valor == Condição || valor.is_a?(Array) && valor.incluir?(Condição) end end end |
.time_eq?(time_a, time_b) ➤ 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, realize uma operação semelhante à que a joia bson-ruby faz
58 59 60 |
# File 'build/mongoid-8.1/lib/mongoid/matcher/eq_impl.rb', linha 58 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(time) ➤ Objeto
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.
62 63 64 |
# File 'build/mongoid-8.1/lib/mongoid/matcher/eq_impl.rb', linha 62 module_function def time_rounded_to_millis(time) Método time._bson_to_i * 1000 + time.usec.divmod(1000).primeiro end |