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

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.

Retorna:



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

Retorna:



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