모듈: Mongoid::Matcher::EqImpl Private

다음에 정의됨:
lib/mongoid/matcher/eq_impl.rb

개요

이 모듈은 비공개 API의 일부입니다. 이 모듈은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이 모듈은 $eq 및 $eq가 수행하는 매칭을 수행해야 하는 기타 연산자(예: $eq의 결과를 무효화하는 $ne)가 사용합니다. $eq와 달리 이 모듈은 원래 연산자를 matches? 에 대한 추가 인수로 사용하여 처음 호출된 연산자를 반영하는 올바른 예외 메시지를 제공합니다.

클래스 메서드 요약 접기

클래스 메서드 세부 정보

.일치합니까?(exists, 값, 조건, original_operator) ⇒ true | false, 부울

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

값이 $eq (또는 이와 유사한) 표현식 을 충족하는지 여부를 반환합니다.

매개변수:

  • 이 존재합니다 (true | false)

    사용되지 않습니다.

  • value (객체)

    확인할 값입니다.

  • 조건 (객체 | 범위)

    같음 조건 술어입니다.

  • original_operator (string)

    예외 메시지에 사용할 연산자입니다.

반환합니다:

  • (true | false)

    값이 일치하는지 여부입니다.

  • (부울)
[소스 보기]

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
# 파일 'lib/mongoid/matcher/eq_impl.rb', 줄 24

module_function def 일치합니까?(이 존재합니다, value, 조건, original_operator)
  case 조건
  when 범위
    # $ne는 $eq를 호출하므로 예외 메시지를 처리해야 합니다.
    # 두 연산자 모두.
    올리다 오류::InvalidQuery, " 범위는' #{original_operator}' 에 대한 인수로지원되지 않습니다.
=begin
    if value.is_a?(배열)
      value.any? { |elt| Condition.include?(elt) }
    other
      조건.포함?(값)
    end
=end
  other
    # Time 객체와 비교할 때는 밀리초 정밀도를 사용하여 비교합니다.
    만약 value.Kind_of?(시간) && 조건.Kind_of?(시간)
      time_eq?(value, 조건)
    elsif value.is_a?(배열) && 조건.Kind_of?(시간)
      value.map do |v|
        만약 v.Kind_of?(시간)
          time_rounded_to_millis(v)
        other
          v
        end
      end.포함?(time_rounded_to_millis(조건))
    other
      value == 조건 ||
      value.is_a?(배열) && value.포함?(조건)
    end
  end
end

.time_eq?(time_a, time_b) ⇒ true | false, 부울

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

www.mongodb.com/ko-kr/docs/ruby-driver/upcoming/data-formats/bson/#time-instances 에 따라 > BSON (및 MongoDB)의 시간은 밀리초의 정밀도만 가질 수 있습니다. Ruby Time 인스턴스가 BSON 또는 확장 JSON 으로 직렬화되면 시간은 가장 가까운 밀리초 단위로 내림차순입니다.

> 이 플로어링 때문에 부동 소수점 계산이 정확하지 않으면 예기치 않은 결과가 발생할 수 있으므로 애플리케이션은 정수 수학을 사용하여 모든 시간 계산을 수행할 것을 강력히 권장합니다.

따라서 bson-ruby gem과 유사한 작업을 수행합니다.

매개변수:

  • time_a (시간)

    첫 번째 시간 값입니다.

  • time_b (시간)

    두 번째 시간 값입니다.

반환합니다:

  • (true | false)

    두 시간이 밀리초와 같은지 여부입니다.

  • (부울)
[소스 보기]

70
71
72
# 파일 'lib/mongoid/matcher/eq_impl.rb', 줄 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(시간) ⇒ true | false

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

시간 값을 가장 가까운 밀리초로 반올림합니다.

매개변수:

  • 시간 (시간)

    시간 값입니다.

반환합니다:

  • (true | false)

    시간을 밀리초로 반올림합니다.

[소스 보기]

79
80
81
# 파일 'lib/mongoid/matcher/eq_impl.rb', 줄 79

module_function def time_rounded_to_millis(시간)
  반환 시간._bson_to_i * 1000 + 시간.usec.divmod(1000).first
end