모듈: Mongoid::Threaded
개요
이 모듈에는 현재 스레드에 라이프사이클이 있는 객체에 쉽게 액세스할 수 있는 로직이 포함되어 있습니다.
네임스페이스 아래에 정의됨
모듈: 라이프사이클
상수 요약 접기
- STORAGE_KEY =
공유 스레드 및 파이버 로컬 저장 의 키입니다. 파이버 로컬 저장 의 키는 기호여야 하므로 기호여야 합니다.
:'[mongoid]'- STORAGE_OWNER_KEY =
저장 해시를 소유한 파이버를 추적하여 파이버가 상위 파이버로부터 저장 를 생성하지 않고 상속한 경우를 감지합니다.
:'[mongoid]:소유자'- DATABASE_OVERRIDE_KEY =
'db-override'- CLIENT_OVERRIDE_KEY =
클라이언트를 재정의하는 키입니다.
'클라이언트 재정의'- CURRENT_SCOPE_KEY =
현재 스레드의 범위 스택 에 대한 키입니다.
'current-scope'- AUTOSAVES_KEY =
'자동 저장'- VALIDATIONS_KEY =
'유효성 검사'- TOUCH_MERGED_KEY =
'터치 병합'- STACK_KEYS =
해시.신규 do |해시, 키| 해시[키] = "#{key}- 스택" end
- SESSIONS_KEY =
현재 스레드의 세션에 대한 키입니다.
'세션'- 수정_DOCUMENTS_KEY =
트랜잭션 내부에서 수정된 문서를 저장하기 위한 키입니다.
'수정된 문서'- EXECUTE_CALLBACKS =
문서에서 콜백을 실행할지 여부에 대한 기본값 을 저장하는 키입니다.
'실행 콜백'- BIND =
'bind'- ASSIGN =
'할당하다'- BUILD =
'빌드'- LOAD =
'로드'- CREATE =
'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_contact_merged(문서) ⇒ 객체
현재 스레드에 있는 문서 의 터치 병합 플래그를 지웁니다.
-
#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) ⇒ 객체
클라이언트 에 대해 이 스레드에 대한 세션을 캐시합니다.
-
#스택(이름) ⇒ 배열
명명된 스택 을 가져옵니다.
-
#touch_merged ⇒ 해시
현재 스레드에서 모든 터치 병합 추적을 가져옵니다.
-
#터치 병합?(문서) ⇒ true | false
문서 가 터치 업데이트가 원자성 삽입으로 병합된 것으로 플래그가 지정되었나요?
-
# 터치_병합_포(klass) ⇒배열
클래스의 현재 스레드에서 터치 병합된 모든 문서 ID를 가져옵니다.
-
#검증되었나요?(문서) ⇒ true | false
문서 가 현재 스레드에서 검증되었나요?
-
#validations ⇒ Hash
현재 스레드에 대한 모든 유효성 검사를 가져옵니다.
-
#validations_for(klass) ⇒ Array
클래스의 현재 스레드에 대한 모든 유효성 검사를 가져옵니다.
-
#without_default_scope?(klass) ⇒ 부울
비공개
지정된 클래스의 기본값 범위가 현재 스레드에서 표시되지 않나요?
인스턴스 메서드 세부 정보
#add_modified_document(session, document) ⇒ Object
세션과 연결된 트랜잭션 내에서 수정된 문서 에 대한 참조를 저장합니다.
504 505 506 507 508 |
# 파일 'lib/mongoid/threaded.rb', 504줄 def add_modified_document(Session, 문서) 반환 하지 않는 한 Session&.in_transaction? Modifyed_documents[Session] << 문서 end |
#자동 저장?(문서) ⇒ true | false
문서 가 현재 스레드에 자동 저장되나요?
368 369 370 |
# 파일 'lib/mongoid/threaded.rb', 368줄 def 자동 저장?(문서) autosave_for(문서.클래스).포함?(문서._id) end |
#autosave ⇒ 해시
현재 스레드에서 모든 자동 저장을 가져옵니다.
403 404 405 |
# 파일 'lib/mongoid/threaded.rb', 403줄 def 자동 저장 get(AUTOSAVES_KEY) { {} } end |
#autosaves_for(klass) ⇒ Array
클래스의 현재 스레드에서 모든 자동 저장을 가져옵니다.
425 426 427 |
# 파일 'lib/mongoid/threaded.rb', 425줄 def autosave_for(class) 자동 저장[class] ||= [] end |
#begin_autosave(document) ⇒ Object
현재 스레드에서 문서 자동 저장을 시작합니다.
198 199 200 |
# 파일 'lib/mongoid/threaded.rb', 198줄 def begin_autosave(문서) autosave_for(문서.클래스).push(문서._id) end |
#begin_execution(name) ⇒ true
명명된 스레드 로컬 스택에 진입하기 시작합니다.
130 131 132 |
# 파일 'lib/mongoid/threaded.rb', 130줄 def begin_execution(이름) 스택(이름).push(true) end |
#시작_터치_병합(문서) ⇒ 객체
문서의 터치 업데이트가 현재 스레드의 원자적 삽입으로 병합되었음을 표시합니다.
219 220 221 |
# 파일 'lib/mongoid/threaded.rb', 219줄 def 시작_터치_병합(문서) Touch_merged_for(문서.클래스).push(문서._id) end |
#begin_validate(문서) ⇒ 객체
현재 스레드에서 문서의 유효성 검사를 시작합니다.
208 209 210 |
# 파일 'lib/mongoid/threaded.rb', 208줄 def start_validate(문서) validations_for(문서.클래스).push(문서._id) end |
#begin_without_default_scope(klass) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
현재 스레드에서 지정된 모델에 대한 기본값 범위를 억제하기 시작합니다.
261 262 263 |
# 파일 'lib/mongoid/threaded.rb', 261줄 def begin_without_default_scope(class) 스택(:without_default_scope).push(class) end |
#clear_modified_documents(session) ⇒ Set<Mongoid::Document>
지정된 세션에 대해 수정된 문서 설정하다 를 지우고 정리 전 설정하다 의 내용을 반환합니다.
517 518 519 |
# 파일 'lib/mongoid/threaded.rb', 517줄 def clear_modified_documents(Session) Modifyed_documents.삭제(Session) || [] end |
#clear_session(client: nil) ⇒ nil
이전 버전과의 호환성을 위해 다음 없이 이 메서드를 호출할 수 있습니다.
클라이언트 의 이 스레드에 대해 캐시된 세션을 지웁니다.
client 매개 변수를 지정합니다.
494 495 496 |
# 파일 'lib/mongoid/threaded.rb', 494줄 def clear_session(클라이언트: nil) 세션.삭제(고객)&.end_session end |
#client_override ⇒ string | 기호
글로벌 클라이언트 재정의를 가져옵니다.
283 284 285 |
# 파일 'lib/mongoid/threaded.rb', 283줄 def client_override get(CLIENT_OVERRIDE_KEY) end |
#client_override=(name) ⇒ string | 기호
글로벌 클라이언트 재정의를 설정합니다.
295 296 297 |
# 파일 'lib/mongoid/threaded.rb', 295줄 def client_override=(이름) 세트(CLIENT_OVERRIDE_KEY, 이름) end |
#current_scope(klass = nil) ⇒ 기준
현재 Mongoid 범위를 가져옵니다.
308 309 310 311 312 313 314 315 316 |
# 파일 'lib/mongoid/threaded.rb', 308줄 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 범위를 설정합니다.
326 327 328 |
# 파일 'lib/mongoid/threaded.rb', 326줄 def current_scope=(범위) 세트(CURRENT_SCOPE_KEY, 범위) end |
#database_override ⇒ string | 기호
글로벌 데이터베이스 재정의를 가져옵니다.
140 141 142 |
# 파일 'lib/mongoid/threaded.rb', 140줄 def database_override get(DATABASE_OVERRIDE_KEY) end |
#database_override=(name) ⇒ string | 기호
글로벌 데이터베이스 재정의를 설정합니다.
152 153 154 |
# 파일 'lib/mongoid/threaded.rb', 152줄 def database_override=(이름) 세트(DATABASE_OVERRIDE_KEY, 이름) end |
#삭제(key) ⇒ 객체
로컬 저장 에서 명명된 변수를 제거합니다.
109 110 111 |
# 파일 'lib/mongoid/threaded.rb', 109줄 def 삭제(키) 스토리지.삭제(키) end |
#execution_callbacks=(플래그) ⇒ 객체
현재 스레드에 대해 기본적으로 문서 콜백을 호출할지 여부를 나타냅니다. 개별 문서가 콜백 동작을 추가로 재정의할 수 있지만 이는 기본 동작에 사용됩니다.
543 544 545 |
# 파일 'lib/mongoid/threaded.rb', 543줄 def execution_callbacks=(flag) 세트(EXECATE_CALLBACKS, flag) end |
#execution_callbacks? ⇒ true | false
현재 스레드에 대해 기본값 문서 콜백을 실행해야 하는지 여부를 쿼리합니다.
달리 표시되지 않는 한(#execute_callbacks=로) 이는 true를 반환합니다.
529 530 531 532 533 534 535 |
# 파일 'lib/mongoid/threaded.rb', 529줄 def 실행 콜백? 만약 가 있나요?(EXECATE_CALLBACKS) get(EXECATE_CALLBACKS) other true end end |
#실행 중이세요?(name) ⇒ true
명명된 스택을 실행하는 중입니다.
164 165 166 |
# 파일 'lib/mongoid/threaded.rb', 164줄 def 실행 중이세요?(이름) !스택(이름).비어 있나요? end |
#exit_autosave(문서) ⇒ 객체
현재 스레드에서 문서 자동 저장을 종료합니다.
229 230 231 |
# 파일 'lib/mongoid/threaded.rb', 229줄 def exit_autosave(문서) autosave_for(문서.클래스).delete_one(문서._id) end |
#exit_execution(name) ⇒ true
명명된 스레드 로컬 스택에서 종료합니다.
176 177 178 |
# 파일 'lib/mongoid/threaded.rb', 176줄 def exit_execution(이름) 스택(이름).팝 end |
#exit_contact_merged(문서) ⇒ 객체
현재 스레드에 있는 문서 의 터치 병합 플래그를 지웁니다.
249 250 251 |
# 파일 'lib/mongoid/threaded.rb', 249줄 def exit_contact_merged(문서) Touch_merged_for(문서.클래스).delete_one(문서._id) end |
#exit_validate(문서) ⇒ 객체
현재 스레드에서 문서 유효성 검사를 종료합니다.
239 240 241 |
# 파일 'lib/mongoid/threaded.rb', 239줄 def exit_validate(문서) validations_for(문서.클래스).delete_one(문서._id) end |
#exit_without_default_scope(klass) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
현재 스레드에서 지정된 모델에 대한 기본값 범위를 표시하지 않도록 종료합니다.
273 274 275 |
# 파일 'lib/mongoid/threaded.rb', 273줄 def exit_without_default_scope(class) 스택(:without_default_scope).삭제(class) end |
#get(키, 기본값(&default)) ⇒ 객체 | nil
지정된 이름으로 스레드 또는 파이버 로컬 변수를 쿼리합니다. 차단 주어졌을 때 변수가 아직 존재하지 않는 경우, 차단 의 반환 값은 반환하기 전에 변수의 값으로 설정하다 됩니다.
애플리케이션(특히 Mongoid)에서 Thread#[] 대신 이 메서드를 사용하는 것이 매우 중요합니다. Thread#[]는 실제로 파이버 로컬 변수용이고 Mongoid는 일부 콜백에서 구현 세부 정보로 파이버를 사용하기 때문입니다. 스레드 로컬 상태 파이버 로컬 저장 에 설정하면 관련 콜백이 다른 파이버에서 실행 때 상태 표시되지 않습니다.
영향을 받는 콜백은 포함된 하위 항목에 대한 계단식 콜백입니다.
84 85 86 87 88 89 90 91 92 93 |
# 파일 'lib/mongoid/threaded.rb', 84줄 def get(키, &기본) 결과 = 스토리지[키] 만약 결과.nil? && 기본 결과 = yield 세트(키, 결과) end 결과 end |
#get_session(client: nil) ⇒ Mongo::Session | nil
이전 버전과의 호환성을 위해 다음 없이 이 메서드를 호출할 수 있습니다.
클라이언트 의 이 스레드에 대해 캐시된 세션을 가져옵니다.
client 매개 변수를 지정합니다.
482 483 484 |
# 파일 'lib/mongoid/threaded.rb', 482줄 def get_session(클라이언트: nil) 세션[고객] end |
#has?(키) ⇒ true | false
로컬 저장 에 명명된 변수가 있는지 쿼리합니다.
118 119 120 |
# 파일 'lib/mongoid/threaded.rb', 118줄 def 가 있나요?(키) 스토리지.키?(키) end |
#modified_documents ⇒ Hash<Mongo::Session, Set<Mongoid::Document>
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
수정된 문서의 스레드 저장 를 반환합니다.
562 563 564 |
# 파일 'lib/mongoid/threaded.rb', 562줄 def Modifyed_documents get(수정_DOCUMENTS_KEY) { 해시.신규 { |h, k| h[k] = 세트.신규 } } end |
#재설정! ⇒ 객체
현재 스레드 또는 파이버 로컬 저장 초기 상태 로 재설정합니다. 이는 새 스레드나 파이버를 시작할 때 상태 깨끗한지 확인하는 데 유용합니다.
Mongoid::Config.real_isolation_level의 값은 현재 스레드 또는 파이버의 저장 재설정할지 여부를 결정하는 데 사용됩니다.
53 54 55 56 57 58 59 60 61 62 63 |
# 파일 'lib/mongoid/threaded.rb', 53줄 def reset! case Config.real_isolation_level when :thread 스레드.Current.thread_variable_set(STORAGE_KEY, nil) when :파이버 파이버[STORAGE_KEY] = {} 파이버[STORAGE_OWNER_KEY] = 파이버.Current.object_id other 올리다 "Unknown 격리 수준: #{Config.real_isolation_level.inspect}" end end |
#sessions ⇒ Hash<Integer, Set>
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
세션의 스레드 저장 를 반환합니다.
552 553 554 |
# 파일 'lib/mongoid/threaded.rb', 552줄 def 세션 get(SESSIONS_KEY) { {}.compare_by_identity } end |
#설정하다(키, 값) ⇒ 객체
지정된 이름을 사용하여 로컬 저장 의 변수를 지정된 값으로 설정합니다. 이 메서드가 필요한 이유와 포함된 하위 항목의 계단식 콜백에서 Thread#[]=를 피해야 하는 이유에 대한 논의는 #get을 참조하세요.
102 103 104 |
# 파일 'lib/mongoid/threaded.rb', 102줄 def 세트(키, value) 스토리지[키] = value end |
#set_current_scope(scope, klass) ⇒ 기준
현재 Mongoid 범위를 설정합니다. 다중 모델 범위 체인에 안전합니다.
339 340 341 342 343 344 345 346 |
# 파일 'lib/mongoid/threaded.rb', 339줄 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) ⇒ 객체
이전 버전과의 호환성을 위해 다음 없이 이 메서드를 호출할 수 있습니다.
클라이언트 에 대해 이 스레드에 대한 세션을 캐시합니다.
client 매개 변수를 지정합니다.
470 471 472 |
# 파일 'lib/mongoid/threaded.rb', 470줄 def set_session(Session, 클라이언트: nil) 세션[고객] = Session end |
#스택(이름) ⇒ 배열
명명된 스택 을 가져옵니다.
188 189 190 |
# 파일 'lib/mongoid/threaded.rb', 188줄 def 스택(이름) get(STACK_KEYS[이름]) { [] } end |
#touch_merged ⇒ 해시
현재 스레드에서 모든 터치 병합 추적을 가져옵니다.
447 448 449 |
# 파일 'lib/mongoid/threaded.rb', 447줄 def 터치 병합 get(TOUCH_MERGED_KEY) { {} } end |
#터치 병합?(문서) ⇒ true | false
문서 가 터치 업데이트가 원자성 삽입으로 병합된 것으로 플래그가 지정되었나요?
393 394 395 |
# 파일 'lib/mongoid/threaded.rb', 393줄 def 터치 병합?(문서) Touch_merged_for(문서.클래스).포함?(문서._id) end |
# 터치_병합_포(klass)⇒ 배열
클래스의 현재 스레드에서 터치 병합된 모든 문서 ID를 가져옵니다.
459 460 461 |
# 파일 'lib/mongoid/threaded.rb', 459줄 def Touch_merged_for(class) 터치 병합[class] ||= [] end |
#검증되었나요?(문서) ⇒ true | false
문서 가 현재 스레드에서 검증되었나요?
380 381 382 |
# 파일 'lib/mongoid/threaded.rb', 380줄 def 검증되었나요?(문서) validations_for(문서.클래스).포함?(문서._id) end |
#validations ⇒ 해시
현재 스레드에 대한 모든 유효성 검사를 가져옵니다.
413 414 415 |
# 파일 'lib/mongoid/threaded.rb', 413줄 def 유효성 검사 get(VALIDATIONS_KEY) { {} } end |
#validations_for(klass) ⇒ Array
클래스의 현재 스레드에 대한 모든 유효성 검사를 가져옵니다.
437 438 439 |
# 파일 'lib/mongoid/threaded.rb', 437줄 def validations_for(class) 유효성 검사[class] ||= [] end |
#without_default_scope?(klass) ⇒ 부울
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
지정된 클래스의 기본값 범위가 현재 스레드에서 표시되지 않나요?
356 357 358 |
# 파일 'lib/mongoid/threaded.rb', 356줄 def without_default_scope?(class) 스택(:without_default_scope).포함?(class) end |