모듈: Mongoid::Threaded
개요
이 모듈에는 현재 스레드에 라이프사이클이 있는 객체에 쉽게 액세스할 수 있는 로직이 포함되어 있습니다.
네임스페이스 아래에 정의됨
모듈: 라이프사이클
상수 요약 접기
- 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
세션과 연결된 트랜잭션 내에서 수정된 문서 에 대한 참조를 저장합니다.
-
#자동 저장?(문서) ⇒ true | false
문서 가 현재 스레드에 자동 저장되나요?
-
#autosaves ⇒ Hash
현재 스레드에서 모든 자동 저장을 가져옵니다.
-
#autosaves_for(klass) ⇒ Array
클래스의 현재 스레드에서 모든 자동 저장을 가져옵니다.
-
#begin_autosave(document) ⇒ Object
현재 스레드에서 문서 자동 저장을 시작합니다.
-
#begin_execution(name) ⇒ true
명명된 스레드 로컬 스택에 진입하기 시작합니다.
-
#begin_validate(문서) ⇒ 객체
현재 스레드에서 문서의 유효성 검사를 시작합니다.
-
#begin_without_default_scope(klass) ⇒ 객체
비공개
현재 스레드에서 지정된 모델에 대한 기본값 범위를 억제하기 시작합니다.
-
#clear_modified_documents(session) ⇒ Set<Mongoid::Document>
지정된 세션에 대해 수정된 문서 설정하다 를 지우고 정리 전 설정하다 의 내용을 반환합니다.
-
#clear_session(client: nil) ⇒ nil
클라이언트 의 이 스레드에 대해 캐시된 세션을 지웁니다.
-
#client_override ⇒ string | 기호
글로벌 클라이언트 재정의를 가져옵니다.
-
#client_override=(name) ⇒ string | 기호
글로벌 클라이언트 재정의를 설정합니다.
-
#current_scope(klass = nil) ⇒ 기준
현재 Mongoid 범위를 가져옵니다.
-
#current_scope=(scope) ⇒ 기준
현재 Mongoid 범위를 설정합니다.
-
#database_override ⇒ string | 기호
글로벌 데이터베이스 재정의를 가져옵니다.
-
#database_override=(name) ⇒ string | 기호
글로벌 데이터베이스 재정의를 설정합니다.
-
#삭제(key) ⇒ 객체
스레드 로컬 저장 에서 명명된 변수를 제거합니다.
-
#execution_callbacks=(플래그) ⇒ 객체
현재 스레드에 대해 기본값 문서 콜백을 호출할지 여부를 나타냅니다.
-
#execution_callbacks? ⇒ true | false
현재 스레드에 대해 기본값 문서 콜백을 실행해야 하는지 여부를 쿼리합니다.
-
#실행 중이세요?(name) ⇒ true
명명된 스택 을 실행하는 중입니다.
-
#exit_autosave(문서) ⇒ 객체
현재 스레드에서 문서 자동 저장을 종료합니다.
-
#exit_execution(name) ⇒ true
명명된 스레드 로컬 스택에서 종료합니다.
-
#exit_validate(문서) ⇒ 객체
현재 스레드에서 문서 유효성 검사를 종료합니다.
-
#exit_without_default_scope(klass) ⇒ 객체
비공개
현재 스레드에서 지정된 모델에 대한 기본값 범위를 표시하지 않도록 종료합니다.
-
#get(키, 기본값(&default)) ⇒ 객체 | nil
지정된 이름으로 스레드 로컬 변수를 쿼리합니다.
-
#get_session(client: nil) ⇒ Mongo::Session | nil
클라이언트 의 이 스레드에 대해 캐시된 세션을 가져옵니다.
-
#has?(키) ⇒ true | false
스레드 로컬 저장 에 명명된 변수가 있는지 쿼리합니다.
-
#Modifyed_documents ⇒ Hash<Mongo::Session, Set<Mongoid::Document>>
비공개
수정된 문서의 스레드 저장 를 반환합니다.
-
#sessions ⇒ Hash<Integer, Set>
비공개
세션의 스레드 저장 를 반환합니다.
-
#설정하다(키, 값) ⇒ 객체
지정된 이름을 가진 스레드 로컬 변수를 지정된 값으로 설정합니다.
-
#set_current_scope(scope, klass) ⇒ 기준
현재 Mongoid 범위를 설정합니다.
-
#set_session(session, 클라이언트: nil) ⇒ 객체
클라이언트 에 대해 이 스레드에 대한 세션을 캐시합니다.
-
#스택(이름) ⇒ 배열
명명된 스택 을 가져옵니다.
-
#검증되었나요?(문서) ⇒ true | false
문서 가 현재 스레드에서 검증되었나요?
-
#validations ⇒ Hash
현재 스레드에 대한 모든 유효성 검사를 가져옵니다.
-
#validations_for(klass) ⇒ Array
클래스의 현재 스레드에 대한 모든 유효성 검사를 가져옵니다.
-
#without_default_scope?(klass) ⇒ 부울
비공개
지정된 클래스의 기본 범위가 현재 스레드에서 표시되지 않나요?
인스턴스 메서드 세부 정보
#add_modified_document(session, document) ⇒ Object
세션과 연결된 트랜잭션 내에서 수정된 문서 에 대한 참조를 저장합니다.
435 436 437 438 439 |
# 파일 'lib/mongoid/threaded.rb', 435줄 def add_modified_document(Session, 문서) 반환 하지 않는 한 Session&.in_transaction? Modifyed_documents[Session] << 문서 end |
#자동 저장?(문서) ⇒ true | false
문서 가 현재 스레드에 자동 저장되나요?
334 335 336 |
# 파일 'lib/mongoid/threaded.rb', 334줄 def 자동 저장?(문서) autosave_for(문서.클래스).포함?(문서._id) end |
#autosave ⇒ 해시
현재 스레드에서 모든 자동 저장을 가져옵니다.
356 357 358 |
# 파일 'lib/mongoid/threaded.rb', 356줄 def 자동 저장 get(AUTOSAVES_KEY) { {} } end |
#autosaves_for(klass) ⇒ Array
클래스의 현재 스레드에서 모든 자동 저장을 가져옵니다.
378 379 380 |
# 파일 'lib/mongoid/threaded.rb', 378줄 def autosave_for(class) 자동 저장[class] ||= [] end |
#begin_autosave(document) ⇒ Object
현재 스레드에서 문서 자동 저장을 시작합니다.
185 186 187 |
# 파일 'lib/mongoid/threaded.rb', 185줄 def begin_autosave(문서) autosave_for(문서.클래스).push(문서._id) end |
#begin_execution(name) ⇒ true
명명된 스레드 로컬 스택에 진입하기 시작합니다.
117 118 119 |
# 파일 'lib/mongoid/threaded.rb', 117줄 def begin_execution(이름) 스택(이름).push(true) end |
#begin_validate(문서) ⇒ 객체
현재 스레드에서 문서의 유효성 검사를 시작합니다.
195 196 197 |
# 파일 'lib/mongoid/threaded.rb', 195줄 def start_validate(문서) validations_for(문서.클래스).push(문서._id) end |
#begin_without_default_scope(klass) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
현재 스레드에서 지정된 모델에 대한 기본값 범위를 억제하기 시작합니다.
227 228 229 |
# 파일 'lib/mongoid/threaded.rb', 227줄 def begin_without_default_scope(class) 스택(:without_default_scope).push(class) end |
#clear_modified_documents(session) ⇒ Set<Mongoid::Document>
지정된 세션에 대해 수정된 문서 설정하다 를 지우고 정리 전 설정하다 의 내용을 반환합니다.
448 449 450 |
# 파일 'lib/mongoid/threaded.rb', 448줄 def clear_modified_documents(Session) Modifyed_documents.삭제(Session) || [] end |
#clear_session(client: nil) ⇒ nil
이전 버전과의 호환성을 위해 다음 없이 이 메서드를 호출할 수 있습니다.
클라이언트 의 이 스레드에 대해 캐시된 세션을 지웁니다.
' 클라이언트` 매개변수를 지정합니다.
425 426 427 |
# 파일 'lib/mongoid/threaded.rb', 425줄 def clear_session(클라이언트: nil) 세션.삭제(고객)&.end_session end |
#client_override ⇒ string | 기호
글로벌 클라이언트 재정의를 가져옵니다.
249 250 251 |
# 파일 'lib/mongoid/threaded.rb', 249줄 def client_override get(CLIENT_OVERRIDE_KEY) end |
#client_override=(name) ⇒ string | 기호
글로벌 클라이언트 재정의를 설정합니다.
261 262 263 |
# 파일 'lib/mongoid/threaded.rb', 261줄 def client_override=(이름) 세트(CLIENT_OVERRIDE_KEY, 이름) end |
#current_scope(klass = nil) ⇒ 기준
현재 Mongoid 범위를 가져옵니다.
274 275 276 277 278 279 280 281 282 |
# 파일 'lib/mongoid/threaded.rb', 274줄 def current_scope(class = nil) current_scope = get(CURRENT_SCOPE_KEY) 만약 class && current_scope.response_to?(:keys) current_scope[current_scope.키.찾기 { |k| k <= class }] other current_scope end end |
#current_scope=(scope) ⇒ 기준
현재 Mongoid 범위를 설정합니다.
292 293 294 |
# 파일 'lib/mongoid/threaded.rb', 292줄 def current_scope=(범위) 세트(CURRENT_SCOPE_KEY, 범위) end |
#database_override ⇒ string | 기호
글로벌 데이터베이스 재정의를 가져옵니다.
127 128 129 |
# 파일 'lib/mongoid/threaded.rb', 127줄 def database_override get(DATABASE_OVERRIDE_KEY) end |
#database_override=(name) ⇒ string | 기호
글로벌 데이터베이스 재정의를 설정합니다.
139 140 141 |
# 파일 'lib/mongoid/threaded.rb', 139줄 def database_override=(이름) 세트(DATABASE_OVERRIDE_KEY, 이름) end |
#삭제(key) ⇒ 객체
스레드 로컬 저장 에서 명명된 변수를 제거합니다.
84 85 86 |
# 파일 'lib/mongoid/threaded.rb', 84줄 def 삭제(키) 세트(키, nil) end |
#execution_callbacks=(플래그) ⇒ 객체
현재 스레드에 대해 기본적으로 문서 콜백을 호출할지 여부를 나타냅니다. 개별 문서가 콜백 동작을 추가로 재정의할 수 있지만 이는 기본 동작에 사용됩니다.
474 475 476 |
# 파일 'lib/mongoid/threaded.rb', 474줄 def execution_callbacks=(flag) 세트(EXECATE_CALLBACKS, flag) end |
#execution_callbacks? ⇒ true | false
현재 스레드에 대해 기본값 문서 콜백을 실행해야 하는지 여부를 쿼리합니다.
달리 표시되지 않는 한(#execute_callbacks=로) 이는 true를 반환합니다.
460 461 462 463 464 465 466 |
# 파일 'lib/mongoid/threaded.rb', 460줄 def 실행 콜백? 만약 가 있나요?(EXECATE_CALLBACKS) get(EXECATE_CALLBACKS) other true end end |
#실행 중이세요?(name) ⇒ true
명명된 스택을 실행하는 중입니다.
151 152 153 |
# 파일 'lib/mongoid/threaded.rb', 151줄 def 실행 중이세요?(이름) !스택(이름).비어 있나요? end |
#exit_autosave(문서) ⇒ 객체
현재 스레드에서 문서 자동 저장을 종료합니다.
205 206 207 |
# 파일 'lib/mongoid/threaded.rb', 205줄 def exit_autosave(문서) autosave_for(문서.클래스).delete_one(문서._id) end |
#exit_execution(name) ⇒ true
명명된 스레드 로컬 스택에서 종료합니다.
163 164 165 |
# 파일 'lib/mongoid/threaded.rb', 163줄 def exit_execution(이름) 스택(이름).팝 end |
#exit_validate(문서) ⇒ 객체
현재 스레드에서 문서 유효성 검사를 종료합니다.
215 216 217 |
# 파일 'lib/mongoid/threaded.rb', 215줄 def exit_validate(문서) validations_for(문서.클래스).delete_one(문서._id) end |
#exit_without_default_scope(klass) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
현재 스레드에서 지정된 모델에 대한 기본값 범위를 표시하지 않도록 종료합니다.
239 240 241 |
# 파일 'lib/mongoid/threaded.rb', 239줄 def exit_without_default_scope(class) 스택(:without_default_scope).삭제(class) end |
#get(키, 기본값(&default)) ⇒ 객체 | nil
지정된 이름으로 스레드 로컬 변수를 쿼리합니다. 차단 주어졌을 때 변수가 아직 존재하지 않는 경우, 차단 의 반환 값은 반환하기 전에 변수의 값으로 설정하다 됩니다.
Thread#[]는 실제로 파이버 로컬 변수용이고 Mongoid는 일부 콜백에서 구현 정보로 파이버를 사용하기 때문에 애플리케이션(특히 Mongoid)에서 Thread#[] 대신 이 메서드를 사용하는 것이 매우 중요합니다. 스레드 로컬 상태 파이버 로컬 저장 에 설정하면 관련 콜백이 다른 파이버에서 실행 때 상태 가 표시되지 않습니다.
영향을 받는 콜백은 포함된 하위 항목에 대한 계단식 콜백입니다.
59 60 61 62 63 64 65 66 67 68 |
# 파일 'lib/mongoid/threaded.rb', 59줄 def get(키, &기본) 결과 = 스레드.Current.thread_variable_get(키) 만약 결과.nil? && 기본 결과 = yield 세트(키, 결과) end 결과 end |
#get_session(client: nil) ⇒ Mongo::Session | nil
이전 버전과의 호환성을 위해 다음 없이 이 메서드를 호출할 수 있습니다.
클라이언트 의 이 스레드에 대해 캐시된 세션을 가져옵니다.
' 클라이언트` 매개변수를 지정합니다.
413 414 415 |
# 파일 'lib/mongoid/threaded.rb', 413줄 def get_session(클라이언트: nil) 세션[고객] end |
#has?(키) ⇒ true | false
스레드 로컬 저장 에 명명된 변수가 있는지 쿼리합니다.
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# 파일 'lib/mongoid/threaded.rb', 93줄 def 가 있나요?(키) # 여기에 JRuby가 자기공명영상(MRI)처럼 작동하지 않는 고전적인 예시 있습니다. In # 자기공명영상(MRI), 스레드 변수를 nil로 설정하다 하면 목록에서 제거됩니다. # 이후 thread_variable?(key)를 호출하면 false가 반환됩니다. Not # JRuby도 마찬가지입니다. 일단 설정하다 스레드 변수를 설정 해제할 수 없습니다. # # 그러나 변수를 nil로 설정하면 해당 변수가 제거 되어야 하므로, # 값이 없는 변수가 실제로 존재하지 않는다고 가정할 수 있습니다. # 따라서 대신 다음을 수행합니다. # Thread.current.thread_variable?(key) # 이 작업을 수행해야 합니다. !get(키).nil? end |
#modified_documents ⇒ Hash<Mongo::Session, Set<Mongoid::Document>
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
수정된 문서의 스레드 저장 를 반환합니다.
493 494 495 |
# 파일 'lib/mongoid/threaded.rb', 493줄 def Modifyed_documents get(수정_DOCUMENTS_KEY) { 해시.신규 { |h, k| h[k] = 세트.신규 } } end |
#sessions ⇒ Hash<Integer, Set>
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
세션의 스레드 저장 를 반환합니다.
483 484 485 |
# 파일 'lib/mongoid/threaded.rb', 483줄 def 세션 get(SESSIONS_KEY) { {}.compare_by_identity } end |
#설정하다(키, 값) ⇒ 객체
지정된 이름을 가진 스레드 로컬 변수를 지정된 값으로 설정합니다. 이 메서드가 필요한 이유와 포함된 하위 항목의 계단식 콜백에서 Thread#[]=를 피해야 하는 이유에 대한 논의는 #get을 참조하세요.
77 78 79 |
# 파일 'lib/mongoid/threaded.rb', 77줄 def 세트(키, value) 스레드.Current.thread_variable_set(키, value) end |
#set_current_scope(scope, klass) ⇒ 기준
현재 Mongoid 범위를 설정합니다. 다중 모델 범위 체인에 안전합니다.
305 306 307 308 309 310 311 312 |
# 파일 'lib/mongoid/threaded.rb', 305줄 def set_current_scope(범위, class) 만약 범위.nil? unset_current_scope(class) other current_scope = get(CURRENT_SCOPE_KEY) { {} } current_scope[class] = 범위 end end |
#set_session(session, 클라이언트: nil) ⇒ 객체
이전 버전과의 호환성을 위해 다음 없이 이 메서드를 호출할 수 있습니다.
클라이언트 에 대해 이 스레드에 대한 세션을 캐시합니다.
' 클라이언트` 매개변수를 지정합니다.
401 402 403 |
# 파일 'lib/mongoid/threaded.rb', 401줄 def set_session(Session, 클라이언트: nil) 세션[고객] = Session end |
#스택(이름) ⇒ 배열
명명된 스택 을 가져옵니다.
175 176 177 |
# 파일 'lib/mongoid/threaded.rb', 175줄 def 스택(이름) get(STACK_KEYS[이름]) { [] } end |
#검증되었나요?(문서) ⇒ true | false
문서 가 현재 스레드에서 검증되었나요?
346 347 348 |
# 파일 'lib/mongoid/threaded.rb', 346줄 def 검증되었나요?(문서) validations_for(문서.클래스).포함?(문서._id) end |
#validations ⇒ 해시
현재 스레드에 대한 모든 유효성 검사를 가져옵니다.
366 367 368 |
# 파일 'lib/mongoid/threaded.rb', 366줄 def 유효성 검사 get(VALIDATIONS_KEY) { {} } end |
#validations_for(klass) ⇒ Array
클래스의 현재 스레드에 대한 모든 유효성 검사를 가져옵니다.
390 391 392 |
# 파일 'lib/mongoid/threaded.rb', 390줄 def validations_for(class) 유효성 검사[class] ||= [] end |
#without_default_scope?(klass) ⇒ 부울
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
지정된 클래스의 기본 범위가 현재 스레드에서 표시되지 않나요?
322 323 324 |
# 파일 'lib/mongoid/threaded.rb', 322줄 def without_default_scope?(class) 스택(:without_default_scope).포함?(class) end |