모듈: Mongoid::Threaded

확장자:
스레드
포함 항목:
스레드
다음에 정의됨:
lib/mongoid/threaded.rb,
lib/mongoid/threaded/Lifecycle.rb

개요

이 모듈에는 현재 스레드에 라이프사이클이 있는 객체에 쉽게 액세스할 수 있는 로직이 포함되어 있습니다.

네임스페이스 아래에 정의됨

모듈: 라이프사이클

상수 요약 접기

DATABASE_OVERRIDE_KEY =
'[mongoid]:db-override'
CLIENTS_KEY =

클라이언트를 저장하는 키에 대한 상수입니다.

'[mongoid]:clients'
CLIENT_OVERRIDE_KEY =

클라이언트를 재정의하는 키입니다.

'[mongoid]:client-override'
CURRENT_SCOPE_KEY =

현재 스레드의 범위 스택 에 대한 키입니다.

'[mongoid]:current-scope'
AUTOSAVES_KEY =
'[mongoid]:자동 저장'
VALIDATIONS_KEY =
'[mongoid]:유효성 검사'
STACK_KEYS =
해시.신규 do |해시, |
  해시[] = "[mongoid]:#{key}- 스택"
end
SESSIONS_KEY =

현재 스레드의 세션에 대한 키입니다.

'[mongoid]:세션'
수정_DOCUMENTS_KEY =

트랜잭션 내부에서 수정된 문서를 저장하기 위한 키입니다.

'[mongoid]:modified-documents'
EXECUTE_CALLBACKS =

문서에서 콜백을 실행할지 여부에 대한 기본값 을 저장하는 키입니다.

'[mongoid]:execute-callbacks'
BIND =
'bind'.동결
ASSIGN =
'할당'.동결
BUILD =
'빌드'.동결
LOAD =
'load'.동결
CREATE =
'생성'.동결

인스턴스 메서드 요약 접기

인스턴스 메서드 세부 정보

#add_modified_document(session, document) ⇒ Object

세션과 연결된 트랜잭션 내에서 수정된 문서 에 대한 참조를 저장합니다.

매개변수:

  • Session (Mongo::Session)

    문서 가 수정된 범위의 세션입니다.

  • 문서 (Mongoid::Document)

    Mongoid 문서 가 수정되었습니다.



365
366
367
368
369
# 파일 'lib/mongoid/threaded.rb', 365줄

def add_modified_document(Session, 문서)
  반환 하지 않는 한 Session&.in_transaction?

  Modifyed_documents[Session] << 문서
end

#자동 저장?(문서) ⇒ true | false

문서 가 현재 스레드에 자동 저장되나요?

예시:

문서가 자동으로 저장되나요?

Threaded.autosaved?(doc)

매개변수:

  • 문서 (문서)

    확인할 문서 입니다.

반환합니다:

  • (true | false)

    문서 가 자동 저장된 경우.



264
265
266
# 파일 'lib/mongoid/threaded.rb', 264줄

def 자동 저장?(문서)
  autosave_for(문서.클래스).포함?(문서._id)
end

#autosave해시

현재 스레드에서 모든 자동 저장을 가져옵니다.

예시:

모든 자동 저장을 가져옵니다.

Threaded.autosaves

반환합니다:

  • (해시)

    현재 자동 저장입니다.



286
287
288
# 파일 'lib/mongoid/threaded.rb', 286줄

def 자동 저장
  스레드.Current[AUTOSAVES_KEY] ||= {}
end

#autosaves_for(klass) ⇒ Array

클래스의 현재 스레드에서 모든 자동 저장을 가져옵니다.

예시:

모든 자동 저장을 가져옵니다.

Threaded.autosaves_for(Person)

매개변수:

  • class (클래스)

    확인할 클래스입니다.

반환합니다:

  • (배열)

    현재 자동 저장입니다.



308
309
310
# 파일 'lib/mongoid/threaded.rb', 308줄

def autosave_for(class)
  자동 저장[class] ||= []
end

#begin_autosave(document) ⇒ Object

현재 스레드에서 문서 자동 저장을 시작합니다.

예시:

Begin autosave.

Threaded.begin_autosave(doc)

매개변수:

  • 문서 (문서)

    자동 저장할 문서입니다.



115
116
117
# 파일 'lib/mongoid/threaded.rb', 115줄

def begin_autosave(문서)
  autosave_for(문서.클래스).push(문서._id)
end

#begin_execution(name) ⇒ true

명명된 스레드 로컬 스택에 진입하기 시작합니다.

예시:

스택 에 진입하기 시작합니다.

Threaded.begin_execution(:create)

매개변수:

  • 이름 (string)

    스택 의 이름

반환합니다:

  • (true)

    참.



47
48
49
# 파일 'lib/mongoid/threaded.rb', 47줄

def begin_execution(이름)
  스택(이름).push(true)
end

#begin_validate(문서) ⇒ 객체

현재 스레드에서 문서의 유효성 검사를 시작합니다.

예시:

Begin validation.

Threaded.begin_validate(doc)

매개변수:

  • 문서 (문서)

    유효성을 검사할 문서입니다.



125
126
127
# 파일 'lib/mongoid/threaded.rb', 125줄

def start_validate(문서)
  validations_for(문서.클래스).push(문서._id)
end

#begin_without_default_scope(klass) ⇒ 객체

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

현재 스레드에서 지정된 모델에 대한 기본값 범위를 억제하기 시작합니다.

예시:

기본값 범위 스택 없이 시작합니다.

Threaded.begin_without_default_scope(klass)

매개변수:

  • class (클래스)

    기본값 범위 지정을 억제할 모델입니다.



157
158
159
# 파일 'lib/mongoid/threaded.rb', 157줄

def begin_without_default_scope(class)
  스택(:without_default_scope).push(class)
end

#clear_modified_documents(session) ⇒ Set<Mongoid::Document>

지정된 세션에 대해 수정된 문서 설정하다 를 지우고 정리 전 설정하다 의 내용을 반환합니다.

매개변수:

  • Session (Mongo::Session)

    수정된 문서 설정하다 를 지워야 하는 세션입니다.

반환합니다:

  • (Set<Mongoid::Document>)

    삭제되기 전에 수정된 문서의 컬렉션입니다.



378
379
380
381
382
# 파일 'lib/mongoid/threaded.rb', 378줄

def clear_modified_documents(Session)
  Modifyed_documents[Session].dup
보장
  Modifyed_documents[Session].지우기
end

#clear_session(client: nil) ⇒ nil

참고:

이전 버전과의 호환성을 위해 다음 없이 이 메서드를 호출할 수 있습니다.

클라이언트 의 이 스레드에 대해 캐시된 세션을 지웁니다.

' 클라이언트` 매개변수를 지정합니다.

매개변수:

  • 고객 (Mongo::Client | nil) (기본값: nil)

    세션을 지울 클라이언트 입니다.

반환합니다:

  • (nil)


355
356
357
# 파일 'lib/mongoid/threaded.rb', 355줄

def clear_session(클라이언트: nil)
  세션.삭제(고객)&.end_session
end

#client_overridestring | 기호

글로벌 클라이언트 재정의를 가져옵니다.

예시:

글로벌 클라이언트 재정의를 가져옵니다.

Threaded.client_override

반환합니다:

  • (string | 기호)

    재정의.



179
180
181
# 파일 'lib/mongoid/threaded.rb', 179줄

def client_override
  스레드.Current[CLIENT_OVERRIDE_KEY]
end

#client_override=(name) ⇒ string | 기호

글로벌 클라이언트 재정의를 설정합니다.

예시:

글로벌 클라이언트 재정의를 설정합니다.

Threaded.client_override = :testing

매개변수:

  • 이름 (string | 기호)

    전역 재정의 이름입니다.

반환합니다:

  • (string | 기호)

    재정의.



191
192
193
# 파일 'lib/mongoid/threaded.rb', 191줄

def client_override=(이름)
  스레드.Current[CLIENT_OVERRIDE_KEY] = 이름
end

#current_scope(klass = nil) ⇒ 기준

현재 Mongoid 범위를 가져옵니다.

예시:

범위를 가져옵니다.

Threaded.current_scope(klass)
Threaded.current_scope

매개변수:

  • class (Klass) (기본값: nil)

    범위의 클래스 유형입니다.

반환합니다:



204
205
206
207
208
209
210
211
212
# 파일 'lib/mongoid/threaded.rb', 204줄

def current_scope(class = nil)
  만약 class && 스레드.Current[CURRENT_SCOPE_KEY].response_to?(:keys)
    스레드.Current[CURRENT_SCOPE_KEY][
        스레드.Current[CURRENT_SCOPE_KEY]..찾기 { |k| k <= class }
    ]
  other
    스레드.Current[CURRENT_SCOPE_KEY]
  end
end

#current_scope=(scope) ⇒ 기준

현재 Mongoid 범위를 설정합니다.

예시:

범위를 설정합니다.

Threaded.current_scope = scope

매개변수:

  • 범위 (기준)

    현재 범위입니다.

반환합니다:



222
223
224
# 파일 'lib/mongoid/threaded.rb', 222줄

def current_scope=(범위)
  스레드.Current[CURRENT_SCOPE_KEY] = 범위
end

#database_overridestring | 기호

글로벌 데이터베이스 재정의를 가져옵니다.

예시:

글로벌 데이터베이스 재정의를 가져옵니다.

Threaded.database_override

반환합니다:

  • (string | 기호)

    재정의.



57
58
59
# 파일 'lib/mongoid/threaded.rb', 57줄

def database_override
  스레드.Current[DATABASE_OVERRIDE_KEY]
end

#database_override=(name) ⇒ string | 기호

글로벌 데이터베이스 재정의를 설정합니다.

예시:

글로벌 데이터베이스 재정의를 설정합니다.

Threaded.database_override = :testing

매개변수:

  • 이름 (string | 기호)

    전역 재정의 이름입니다.

반환합니다:

  • (string | 기호)

    재정의.



69
70
71
# 파일 'lib/mongoid/threaded.rb', 69줄

def database_override=(이름)
  스레드.Current[DATABASE_OVERRIDE_KEY] = 이름
end

#execution_callbacks=(플래그) ⇒ 객체

현재 스레드에 대해 기본적으로 문서 콜백을 호출할지 여부를 나타냅니다. 개별 문서가 콜백 동작을 추가로 재정의할 수 있지만 이는 기본 동작에 사용됩니다.

매개변수:

  • flag (true | false)

    문서 콜백을 기본값 으로 실행할지 여부입니다.



406
407
408
# 파일 'lib/mongoid/threaded.rb', 406줄

def execution_callbacks=(flag)
  스레드.Current[EXECATE_CALLBACKS] = flag
end

#execution_callbacks?true | false

현재 스레드에 대해 기본값 문서 콜백을 실행해야 하는지 여부를 쿼리합니다.

달리 표시되지 않는 한(#execute_callbacks=로) 이는 true를 반환합니다.

반환합니다:

  • (true | false)

    문서 콜백을 기본값 으로 실행할지 여부입니다.



392
393
394
395
396
397
398
# 파일 'lib/mongoid/threaded.rb', 392줄

def 실행 콜백?
  만약 스레드.Current.키?(EXECATE_CALLBACKS)
    스레드.Current[EXECATE_CALLBACKS]
  other
    true
  end
end

#실행 중이세요?(name) ⇒ true

명명된 스택을 실행하는 중입니다.

예시:

스택 실행 중인가요?

Threaded.executing?(:create)

매개변수:

  • 이름 (기호)

    스택 의 이름

반환합니다:

  • (true)

    스택 이 실행 중인 경우.



81
82
83
# 파일 'lib/mongoid/threaded.rb', 81줄

def 실행 중이세요?(이름)
  !스택(이름).비어 있나요?
end

#exit_autosave(문서) ⇒ 객체

현재 스레드에서 문서 자동 저장을 종료합니다.

예시:

자동 저장을 종료합니다.

Threaded.exit_autosave(doc)

매개변수:

  • 문서 (문서)

    자동 저장할 문서입니다.



135
136
137
# 파일 'lib/mongoid/threaded.rb', 135줄

def exit_autosave(문서)
  autosave_for(문서.클래스).delete_one(문서._id)
end

#exit_execution(name) ⇒ true

명명된 스레드 로컬 스택에서 종료합니다.

예시:

스택을 종료합니다.

Threaded.exit_execution(:create)

매개변수:

  • 이름 (기호)

    스택 의 이름

반환합니다:

  • (true)

    참.



93
94
95
# 파일 'lib/mongoid/threaded.rb', 93줄

def exit_execution(이름)
  스택(이름).
end

#exit_validate(문서) ⇒ 객체

현재 스레드에서 문서 유효성 검사를 종료합니다.

예시:

유효성 검사 를 종료합니다.

Threaded.exit_validate(doc)

매개변수:

  • 문서 (문서)

    유효성을 검사할 문서입니다.



145
146
147
# 파일 'lib/mongoid/threaded.rb', 145줄

def exit_validate(문서)
  validations_for(문서.클래스).delete_one(문서._id)
end

#exit_without_default_scope(klass) ⇒ 객체

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

현재 스레드에서 지정된 모델에 대한 기본값 범위를 표시하지 않도록 종료합니다.

예시:

기본 범위 스택 없이 종료합니다.

Threaded.exit_without_default_scope(klass)

매개변수:

  • class (클래스)

    기본 범위 지정을 억제 해제할 모델입니다.



169
170
171
# 파일 'lib/mongoid/threaded.rb', 169줄

def exit_without_default_scope(class)
  스택(:without_default_scope).삭제(class)
end

#get_session(client: nil) ⇒ Mongo::Session | nil

참고:

이전 버전과의 호환성을 위해 다음 없이 이 메서드를 호출할 수 있습니다.

클라이언트 의 이 스레드에 대해 캐시된 세션을 가져옵니다.

' 클라이언트` 매개변수를 지정합니다.

매개변수:

  • 고객 (Mongo::Client | nil) (기본값: nil)

    세션을 캐시 할 클라이언트 입니다.

반환합니다:

  • (Mongo::Session | nil)

    이 스레드에 캐시된 세션 또는 nil입니다.



343
344
345
# 파일 'lib/mongoid/threaded.rb', 343줄

def get_session(클라이언트: nil)
  세션[고객]
end

#modified_documentsHash<Mongo::Session, Set<Mongoid::Document>

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

수정된 문서의 스레드 저장 를 반환합니다.

반환합니다:

  • (Hash<Mongo::Session, Set<Mongoid::Document>>)

    세션별로 인덱싱된 수정된 문서입니다.



425
426
427
428
429
# 파일 'lib/mongoid/threaded.rb', 425줄

def Modifyed_documents
  스레드.Current[수정_DOCUMENTS_KEY] ||= 해시.신규 do |h, k|
    h[k] = 세트.신규
  end
end

#sessionsHash<Integer, Set>

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

세션의 스레드 저장 를 반환합니다.

반환합니다:

  • (Hash<Integer, Set>)

    클라이언트 객체 ID 를 기준으로 인덱싱된 세션입니다.



415
416
417
# 파일 'lib/mongoid/threaded.rb', 415줄

def 세션
  스레드.Current[SESSIONS_KEY] ||= {}.compare_by_identity
end

#set_current_scope(scope, klass) ⇒ 기준

현재 Mongoid 범위를 설정합니다. 다중 모델 범위 체인에 안전합니다.

예시:

범위를 설정합니다.

Threaded.current_scope(scope, klass)

매개변수:

  • 범위 (기준)

    현재 범위입니다.

  • class (클래스)

    현재 모델 클래스입니다.

반환합니다:



235
236
237
238
239
240
241
242
# 파일 'lib/mongoid/threaded.rb', 235줄

def set_current_scope(범위, class)
  만약 범위.nil?
    unset_current_scope(class)
  other
    스레드.Current[CURRENT_SCOPE_KEY] ||= {}
    스레드.Current[CURRENT_SCOPE_KEY][class] = 범위
  end
end

#set_session(session, 클라이언트: nil) ⇒ 객체

참고:

이전 버전과의 호환성을 위해 다음 없이 이 메서드를 호출할 수 있습니다.

클라이언트 에 대해 이 스레드에 대한 세션을 캐시합니다.

' 클라이언트` 매개변수를 지정합니다.

매개변수:

  • Session (Mongo::Session)

    저장할 세션입니다.

  • 고객 (Mongo::Client | nil) (기본값: nil)

    세션을 캐시 할 클라이언트 입니다.



331
332
333
# 파일 'lib/mongoid/threaded.rb', 331줄

def set_session(Session, 클라이언트: nil)
  세션[고객] = Session
end

#스택(이름) ⇒ 배열

명명된 스택 을 가져옵니다.

예시:

이름으로 스택 가져오기

Threaded.stack(:create)

매개변수:

  • 이름 (기호)

    스택 의 이름

반환합니다:

  • (배열)

    스택.



105
106
107
# 파일 'lib/mongoid/threaded.rb', 105줄

def 스택(이름)
  스레드.Current[STACK_KEYS[이름]] ||= []
end

#검증되었나요?(문서) ⇒ true | false

문서 가 현재 스레드에서 검증되었나요?

예시:

문서 가 검증되었나요?

Threaded.validated?(doc)

매개변수:

  • 문서 (문서)

    확인할 문서 입니다.

반환합니다:

  • (true | false)

    문서 가 검증된 경우.



276
277
278
# 파일 'lib/mongoid/threaded.rb', 276줄

def 검증되었나요?(문서)
  validations_for(문서.클래스).포함?(문서._id)
end

#validations해시

현재 스레드에 대한 모든 유효성 검사를 가져옵니다.

예시:

모든 유효성 검사를 가져옵니다.

Threaded.validations

반환합니다:

  • (해시)

    현재 유효성 검사.



296
297
298
# 파일 'lib/mongoid/threaded.rb', 296줄

def 유효성 검사
  스레드.Current[VALIDATIONS_KEY] ||= {}
end

#validations_for(klass) ⇒ Array

클래스의 현재 스레드에 대한 모든 유효성 검사를 가져옵니다.

예시:

모든 유효성 검사를 가져옵니다.

Threaded.validations_for(Person)

매개변수:

  • class (클래스)

    확인할 클래스입니다.

반환합니다:

  • (배열)

    현재 유효성 검사.



320
321
322
# 파일 'lib/mongoid/threaded.rb', 320줄

def validations_for(class)
  유효성 검사[class] ||= []
end

#without_default_scope?(klass) ⇒ 부울

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

지정된 클래스의 기본 범위가 현재 스레드에서 표시되지 않나요?

예시:

지정된 클래스의 기본값 범위가 표시되지 않나요?

Threaded.without_default_scope?(klass)

매개변수:

  • class (클래스)

    기본값 범위 억제를 확인할 모델입니다.

반환합니다:



252
253
254
# 파일 'lib/mongoid/threaded.rb', 252줄

def without_default_scope?(class)
  스택(:without_default_scope).포함?(class)
end