모듈: 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 문서 가 수정되었습니다.



435
436
437
438
439
# 파일 'lib/mongoid/threaded.rb', 435줄

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

  Modifyed_documents[Session] << 문서
end

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

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

예시:

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

Threaded.autosaved?(doc)

매개변수:

  • 문서 (문서)

    확인할 문서 입니다.

반환합니다:

  • (true | false)

    문서 가 자동 저장된 경우.



334
335
336
# 파일 'lib/mongoid/threaded.rb', 334줄

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

#autosave해시

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

예시:

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

Threaded.autosaves

반환합니다:

  • (해시)

    현재 자동 저장입니다.



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

def 자동 저장
  get(AUTOSAVES_KEY) { {} }
end

#autosaves_for(klass) ⇒ Array

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

예시:

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

Threaded.autosaves_for(Person)

매개변수:

  • class (클래스)

    확인할 클래스입니다.

반환합니다:

  • (배열)

    현재 자동 저장입니다.



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

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

#begin_autosave(document) ⇒ Object

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

예시:

Begin autosave.

Threaded.begin_autosave(doc)

매개변수:

  • 문서 (문서)

    자동 저장할 문서입니다.



185
186
187
# 파일 'lib/mongoid/threaded.rb', 185줄

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

#begin_execution(name) ⇒ true

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

예시:

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

Threaded.begin_execution(:create)

매개변수:

  • 이름 (string)

    스택 의 이름

반환합니다:

  • (true)

    참.



117
118
119
# 파일 'lib/mongoid/threaded.rb', 117줄

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

#begin_validate(문서) ⇒ 객체

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

예시:

Begin validation.

Threaded.begin_validate(doc)

매개변수:

  • 문서 (문서)

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



195
196
197
# 파일 'lib/mongoid/threaded.rb', 195줄

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

#begin_without_default_scope(klass) ⇒ 객체

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

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

예시:

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

Threaded.begin_without_default_scope(klass)

매개변수:

  • class (클래스)

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



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>

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

매개변수:

  • Session (Mongo::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

참고:

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

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

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

매개변수:

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

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

반환합니다:

  • (nil)


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

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

#client_overridestring | 기호

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

예시:

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

Threaded.client_override

반환합니다:

  • (string | 기호)

    재정의.



249
250
251
# 파일 'lib/mongoid/threaded.rb', 249줄

def client_override
  get(CLIENT_OVERRIDE_KEY)
end

#client_override=(name) ⇒ string | 기호

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

예시:

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

Threaded.client_override = :testing

매개변수:

  • 이름 (string | 기호)

    전역 재정의 이름입니다.

반환합니다:

  • (string | 기호)

    재정의.



261
262
263
# 파일 'lib/mongoid/threaded.rb', 261줄

def client_override=(이름)
  세트(CLIENT_OVERRIDE_KEY, 이름)
end

#current_scope(klass = nil) ⇒ 기준

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

예시:

범위를 가져옵니다.

Threaded.current_scope(klass)
Threaded.current_scope

매개변수:

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

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

반환합니다:



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 범위를 설정합니다.

예시:

범위를 설정합니다.

Threaded.current_scope = scope

매개변수:

  • 범위 (기준)

    현재 범위입니다.

반환합니다:



292
293
294
# 파일 'lib/mongoid/threaded.rb', 292줄

def current_scope=(범위)
  세트(CURRENT_SCOPE_KEY, 범위)
end

#database_overridestring | 기호

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

예시:

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

Threaded.database_override

반환합니다:

  • (string | 기호)

    재정의.



127
128
129
# 파일 'lib/mongoid/threaded.rb', 127줄

def database_override
  get(DATABASE_OVERRIDE_KEY)
end

#database_override=(name) ⇒ string | 기호

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

예시:

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

Threaded.database_override = :testing

매개변수:

  • 이름 (string | 기호)

    전역 재정의 이름입니다.

반환합니다:

  • (string | 기호)

    재정의.



139
140
141
# 파일 'lib/mongoid/threaded.rb', 139줄

def database_override=(이름)
  세트(DATABASE_OVERRIDE_KEY, 이름)
end

#삭제(key) ⇒ 객체

스레드 로컬 저장 에서 명명된 변수를 제거합니다.

매개변수:

  • (string | 기호)

    제거 변수의 이름입니다.



84
85
86
# 파일 'lib/mongoid/threaded.rb', 84줄

def 삭제()
  세트(, nil)
end

#execution_callbacks=(플래그) ⇒ 객체

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

매개변수:

  • flag (true | false)

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



474
475
476
# 파일 'lib/mongoid/threaded.rb', 474줄

def execution_callbacks=(flag)
  세트(EXECATE_CALLBACKS, flag)
end

#execution_callbacks?true | false

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

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

반환합니다:

  • (true | false)

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



460
461
462
463
464
465
466
# 파일 'lib/mongoid/threaded.rb', 460줄

def 실행 콜백?
  만약 가 있나요?(EXECATE_CALLBACKS)
    get(EXECATE_CALLBACKS)
  other
    true
  end
end

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

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

예시:

스택 실행 중인가요?

Threaded.executing?(:create)

매개변수:

  • 이름 (기호)

    스택 의 이름

반환합니다:

  • (true)

    스택 이 실행 중인 경우.



151
152
153
# 파일 'lib/mongoid/threaded.rb', 151줄

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

#exit_autosave(문서) ⇒ 객체

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

예시:

자동 저장을 종료합니다.

Threaded.exit_autosave(doc)

매개변수:

  • 문서 (문서)

    자동 저장할 문서입니다.



205
206
207
# 파일 'lib/mongoid/threaded.rb', 205줄

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

#exit_execution(name) ⇒ true

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

예시:

스택을 종료합니다.

Threaded.exit_execution(:create)

매개변수:

  • 이름 (기호)

    스택 의 이름

반환합니다:

  • (true)

    참.



163
164
165
# 파일 'lib/mongoid/threaded.rb', 163줄

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

#exit_validate(문서) ⇒ 객체

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

예시:

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

Threaded.exit_validate(doc)

매개변수:

  • 문서 (문서)

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



215
216
217
# 파일 'lib/mongoid/threaded.rb', 215줄

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

#exit_without_default_scope(klass) ⇒ 객체

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

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

예시:

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

Threaded.exit_without_default_scope(klass)

매개변수:

  • class (클래스)

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



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#[] 대신 이 메서드를 사용하는 것이 매우 중요합니다. 스레드 로컬 상태 파이버 로컬 저장 에 설정하면 관련 콜백이 다른 파이버에서 실행 때 상태 가 표시되지 않습니다.

영향을 받는 콜백은 포함된 하위 항목에 대한 계단식 콜백입니다.

매개변수:

  • (string | 기호)

    쿼리 할 변수의 이름

  • 기본 (Proc)

    이 변수의 기본값 (초기값) 값을 반환해야 하는 선택적 차단 .

반환합니다:

  • (객체 | nil)

    쿼리된 변수의 값이거나, 설정하다 되지 않았고 기본값 제공되지 않은 경우 nil입니다.



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

참고:

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

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

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

매개변수:

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

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

반환합니다:

  • (Mongo::Session | nil)

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



413
414
415
# 파일 'lib/mongoid/threaded.rb', 413줄

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

#has?(키) ⇒ true | false

스레드 로컬 저장 에 명명된 변수가 있는지 쿼리합니다.

매개변수:

  • (string | 기호)

    쿼리 변수의 이름입니다.

반환합니다:

  • (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_documentsHash<Mongo::Session, Set<Mongoid::Document>

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

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

반환합니다:

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

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



493
494
495
# 파일 'lib/mongoid/threaded.rb', 493줄

def Modifyed_documents
  get(수정_DOCUMENTS_KEY) { 해시.신규 { |h, k| h[k] = 세트.신규 } }
end

#sessionsHash<Integer, Set>

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

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

반환합니다:

  • (Hash<Integer, Set>)

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



483
484
485
# 파일 'lib/mongoid/threaded.rb', 483줄

def 세션
  get(SESSIONS_KEY) { {}.compare_by_identity }
end

#설정하다(키, 값) ⇒ 객체

지정된 이름을 가진 스레드 로컬 변수를 지정된 값으로 설정합니다. 이 메서드가 필요한 이유와 포함된 하위 항목의 계단식 콜백에서 Thread#[]=를 피해야 하는 이유에 대한 논의는 #get을 참조하세요.

매개변수:

  • (string | 기호)

    설정하다 변수의 이름입니다.

  • value (객체 | nil)

    설정하다 변수의 값 (또는 변수 설정을 해제하려면 'nil')



77
78
79
# 파일 'lib/mongoid/threaded.rb', 77줄

def 세트(, value)
  스레드.Current.thread_variable_set(, value)
end

#set_current_scope(scope, klass) ⇒ 기준

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

예시:

범위를 설정합니다.

Threaded.current_scope(scope, klass)

매개변수:

  • 범위 (기준)

    현재 범위입니다.

  • class (클래스)

    현재 모델 클래스입니다.

반환합니다:



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) ⇒ 객체

참고:

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

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

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

매개변수:

  • Session (Mongo::Session)

    저장할 세션입니다.

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

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



401
402
403
# 파일 'lib/mongoid/threaded.rb', 401줄

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

#스택(이름) ⇒ 배열

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

예시:

이름으로 스택 가져오기

Threaded.stack(:create)

매개변수:

  • 이름 (기호)

    스택 의 이름

반환합니다:

  • (배열)

    스택.



175
176
177
# 파일 'lib/mongoid/threaded.rb', 175줄

def 스택(이름)
  get(STACK_KEYS[이름]) { [] }
end

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

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

예시:

문서 가 검증되었나요?

Threaded.validated?(doc)

매개변수:

  • 문서 (문서)

    확인할 문서 입니다.

반환합니다:

  • (true | false)

    문서 가 검증된 경우.



346
347
348
# 파일 'lib/mongoid/threaded.rb', 346줄

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

#validations해시

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

예시:

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

Threaded.validations

반환합니다:

  • (해시)

    현재 유효성 검사.



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

def 유효성 검사
  get(VALIDATIONS_KEY) { {} }
end

#validations_for(klass) ⇒ Array

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

예시:

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

Threaded.validations_for(Person)

매개변수:

  • class (클래스)

    확인할 클래스입니다.

반환합니다:

  • (배열)

    현재 유효성 검사.



390
391
392
# 파일 'lib/mongoid/threaded.rb', 390줄

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

#without_default_scope?(klass) ⇒ 부울

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

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

예시:

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

Threaded.without_default_scope?(klass)

매개변수:

  • class (클래스)

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

반환합니다:



322
323
324
# 파일 'lib/mongoid/threaded.rb', 322줄

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