モジュール: Mongoid::Matcher::EqImpl Private

定義:
lib/mongoid/matcher/eq_impl.rb

Overview

このモジュールはプライベート API の一部です。 このモジュールは将来削除または変更される可能性があるため、可能な限り使用しないでください。

このモジュールは、$eq および $eq が実行するマッチングを実行する必要がある他の演算子(たとえば、$eq の結果を否定する $ne)に使用されます。 $eq と違い、このモジュールは元の演算子をmatches?の追加引数として受け取ります。これにより、最初に呼び出された演算子を反映する正しい例外メッセージが提供されます。

クラスメソッドの概要を折りたたむ

クラスメソッドの詳細

一致するかどうか(_exists、値、条件、元の演算子) ⇒ true | falseブール値

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

値が $eq (または同様の)式を満たすかどうかを返します。

パラメーター:

  • exists true | false

    使用されません。

  • 価値 オブジェクト

    確認する値。

  • 条件 オブジェクト | 範囲

    等価条件述語。

  • 元の演算子 ( string )

    例外メッセージで使用する 演算子 。

次の値を返します。

  • true | false

    値が一致するかどうか。

  • ブール値


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
# ファイル 'lib/mongoid/matcher/eq_impl.rb' は、 21行を

MongoDB_function デフォルト 一致するかどうか(_exists, 価値, 条件, 元の演算子)
  ケース 条件
  次の場合: Range(範囲)
    $ne は# $eq を呼び出すため、例外メッセージは次を処理する必要があります:
    # 両方の演算子。
    発生 Errors::InvalidQuery, " 範囲は " #{ initial_operator } の 引数としてサポートされていません 。 "
  値.is_a?(配列)の場合は#
  任意の 値{ |elt|条件.include?(elt)}
  #           else
  #条件.include?(value)
  #           end
  else
    # 時間オブジェクトと比較する場合は、ミリ秒の精度を使用して比較してください
    場合 価値.is_a?(時間) & & 条件.is_a?(時間)
      time_eq?(価値, 条件)
    elsif 価値.is_a?(配列) & & 条件.is_a?(時間)
      価値.map 行う |v|
        場合 v.is_a?(時間)
          time_rounded_to_millis(v)
        else
          v
        end
      end.include?(time_rounded_to_millis(条件))
    else
      価値 == 条件 ||
        (価値.is_a?(配列) & & 価値.include?(条件))
    end
  end
end

time_eq? (time_a、time_b) = true | falseブール値

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

https://www.mongodb.com/ja-jp/docs/ruby-Driver/upcoming/data-formats/bson/#time-instances に従って、

BSON (およびMongoDB)の時間の精度はミリ秒のみです。Ruby Time インスタンスがBSONまたは 拡張JSONにシリアル化される場合、時間はミリ秒単位で切り捨てられます。

この API により、浮動小数点の計算が不正確になると予期しない結果が発生する可能性があるため、アプリケーションではすべての時間の計算を実行することが 強く推奨されます 。

そのため、 bson- Ruby gem が実行するのと同様の操作を実行します。

パラメーター:

  • time_a 時間

    1 回目の値。

  • time_b 時間

    2 つ目の時間値。

次の値を返します。

  • true | false

    2 つの時間が ミリ秒に等しいかどうか。

  • ブール値


65
66
67
# ファイル 'lib/mongoid/matcher/eq_impl.rb' は、 65行を

MongoDB_function デフォルト time_eq?(time_a, time_b)
  time_rounded_to_millis(time_a) == time_rounded_to_millis(time_b)
end

time_rounded_to_millis (時間)= true| false

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

時間値を最も近いミリ秒に丸めます。

パラメーター:

  • 時間 時間

    時間値。

次の値を返します。

  • true | false

    ミリ秒に丸められた時間。



74
75
76
# ファイル 'lib/mongoid/matcher/eq_impl.rb' は、 74行を

MongoDB_function デフォルト time_rounded_to_millis(時間)
  (時間._bson_to_i * 1000) + 時間.使用します.divmod(1000).最初に
end