모듈: Mongoid::Touchable::InstanceMethods

포함 항목:
문서
다음에 정의됨:
lib/mongoid/contactable.rb

개요

TODO:

ActiveSupport::Concern을 사용하여 리팩터링

믹스인 기능을 제공하는 데 사용됩니다.

인스턴스 메서드 요약 접기

인스턴스 메서드 세부 정보

#_clear_contact_updates(필드 = nil) ⇒ 객체

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

터치 작업으로 인한 모델 변경 사항을 지웁니다.

매개변수:

  • 필드 (기호) (기본값: nil)

    업데이트 할 추가 필드 의 이름입니다.



93
94
95
96
97
# 파일 'lib/mongoid/contactable.rb', 줄 93

def _clear_touch_updates(필드 = nil)
  remove_change(:updated_at)
  remove_change(필드) 만약 필드
  _parent._clear_touch_updates 만약 _contactable_parent?
end

#_gather_contact_updates(현재, 필드 = nil) ⇒ Hash<string, Time>

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

현재 문서 와 각 상위 문서(루트 노드 포함)에 터치 가능한 필드를 재귀적으로 설정합니다. 루트 문서 에서 수행할 결합된 원자적 $ 설정하다 연산을 반환합니다.

매개변수:

  • 지금 (시간)

    터치된 시간을 동기화하는 데 사용되는 타임스탬프입니다.

  • 필드 (기호) (기본값: nil)

    업데이트 할 추가 필드 의 이름입니다.

반환합니다:

  • (Hash<string, Time>)

    원자 $ 설정하다 로 수행할 터치 작업입니다.



75
76
77
78
79
80
81
82
83
84
85
86
# 파일 'lib/mongoid/contactable.rb', 줄 75

def _gather_touch_updates(지금, 필드 = nil)
  반환 만약 Touch_callbacks_suppressed?

  필드 = database_field_name(필드)

  write_attribute(:updated_at, 지금) 만약 response_to?("updated_at=")
  write_attribute(필드, 지금) 만약 필드

  터치 = _extract_contactes_from_atomic_sets(필드) || {}
  터치.병합!(_parent._gather_touch_updates(지금) || {}) 만약 _contactable_parent?
  터치
end

#_run_contact_callbacks_from_root객체

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

루트 문서 부터 시작하여 각 연속 하위 문서 를 통해 계단식으로 문서 와 해당 상위 문서에 대해 :터치 콜백을 재귀적으로 실행합니다.



104
105
106
107
108
# 파일 'lib/mongoid/contactable.rb', 줄 104

def _run_contact_callbacks_from_root
  반환 만약 Touch_callbacks_suppressed?
  _parent._run_contact_callbacks_from_root 만약 _contactable_parent?
  run_callbacks(:터치)
end

#_터치 가능_부모?부울

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

상위 항목이 존재하고 터치 가능한지 여부를 나타냅니다.

반환합니다:



113
114
115
# 파일 'lib/mongoid/contactable.rb', 줄 113

def _contactable_parent?
  _parent && _association&.inverse_association&.터치 가능?
end

#억제 _터치_콜백 ⇒ 객체

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

차단 기간 동안 이 모듈을 포함하는 클래스에 대해 터치 콜백 호출을 억제합니다.

예시:

사람 문서에서 터치 콜백을 억제합니다:

person.suppress_touch_callbacks { ... }


22
23
24
# 파일 'lib/mongoid/contactable.rb', 줄 22

def 억제_터치_콜백
  터치 가능.억제_터치_콜백(self.클래스.이름) { yield }
end

#터치(필드 = nil) ⇒ true/false

참고:

해당 옵션이 설정하다 되어 있으면 연결이 자동으로 빌드되지 않습니다.

문서 를 터치하면 사실상 updated_at 타임스탬프와 제공된 필드 가 현재 시간으로 업데이트됩니다. 터치 옵션이 있는 associated_to 연관 관계가 존재하는 경우, 해당 연관 관계도 업데이트됩니다.

예시:

updated_at 타임스탬프를 업데이트합니다.

document.touch

updated_at 및 제공된 타임스탬프를 업데이트합니다.

document.touch(:audited)

매개변수:

  • 필드 (기호) (기본값: nil)

    업데이트 할 추가 필드 의 이름입니다.

반환합니다:

  • (true/false)

    문서 가 new_record이면 false, 그렇지 않으면 true입니다.



51
52
53
54
55
56
57
58
59
60
61
62
63
# 파일 'lib/mongoid/contactable.rb', 줄 51

def 터치(필드 = nil)
  반환 거짓 만약 _root.new_record?

  시작
    터치 = _gather_touch_updates(시간.Current, 필드)
    _root.send(:persist_atomic_operations, '$set' => 터치) 만약 터치.현재?
    _run_contact_callbacks_from_root
  보장
    _clear_touch_updates(필드)
  end

  true
end

#Touch_callbacks_suppressed?true | false

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

이 모듈을 포함하는 클래스에 대해 터치 콜백이 억제되는지 여부를 쿼리합니다.

반환합니다:

  • (true | false)

    터치 콜백을 억제할지 여부입니다.



32
33
34
# 파일 'lib/mongoid/contactable.rb', 줄 32

def Touch_callbacks_suppressed?
  터치 가능.Touch_callbacks_suppressed?(self.클래스.이름)
end