モジュール: Mongoid::Threaded

次による拡張機能。
スレッド
次のドキュメントに含まれます。
スレッド
定義:
lib/mongoid/threaded.rb
lib/mongoid/threaded/feature.rb
さらに...

Overview

このモジュールには、現在のスレッドでライフサイクルがあるオブジェクトに簡単にアクセスするためのロジックが含まれています。

名前空間で定義済み

Modules: ライフサイクル

定数の概要の削減

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

クライアントを保存するキーの定数。

'[mongoid]:clients'
CLIENT_OVERRIDE_KEY =

クライアントを上書きするキー。

'[mongoid]:client-overwrite'
CURRENT_SCOPE_KEY =

現在のスレッドのスコープ スタックのキー。

'[mongoid]:current-scope'
オートメーション_キー =
'[mongoid]: autosaves'
VALIDATIONS_KEY =
'[mongoid]:validation'
STACK_KEY =
ハッシュ.新着情報 行う |ハッシュ, キー|
  ハッシュ[キー] = " [mongoid]: #{ key } -stack "
end
SESSIONS_KEY =

現在のスレッドのセッションのキー。

'[mongoid]:sessions'
変更された_DOCUMENTS_KEY =

トランザクション内で変更されたドキュメントを保存するためのキー。

'[mongoid]:modified-documents'
EXECUTE_CALLBACKS =

ドキュメントに対してコールバックが実行されるかどうかのデフォルト値を保存するキー。

'[mongoid]:execute-colbacks'
BIND =
'bind'.freeze
ASsign =
割り当てます.freeze
構築 =
'ビルド'.freeze
ロード =
'load'.freeze
CREATE =
' create '.freeze

インスタンス メソッドの概要を折りたたむ

インスタンス メソッドの詳細

#add_modified_document(session, document) ⇒ Object

セッションに関連付けられたトランザクション内で変更されたドキュメントへの参照を保存します。

パラメーター:

  • セッション Mongo::Session

    ドキュメントが変更された範囲内のセッション。

  • ドキュメント Mongoid::Document

    変更された Mongoid ドキュメント。

[ソースを表示]

435
436
437
438
439
# ファイル 'lib/mongoid/threaded.rb', 行435

デフォルト add_modified_document(セッション, ドキュメント)
  return ただし、 セッション&.in_transaction?

  scheduled_documents[セッション] < ドキュメント
end

自動保存の数(ドキュメント)= true| false

ドキュメントは現在のスレッドで自動保存されていますか?

例:

ドキュメントは自動保存されていますか?

Threaded.autosaved?(doc)

パラメーター:

次の値を返します。

  • true | false

    ドキュメントが自動保存されている場合。

[ソースを表示]

334
335
336
# ファイル 'lib/mongoid/threaded.rb', 行334

デフォルト 自動保存(ドキュメント)
  autoss_for(ドキュメント.クラス).include?(ドキュメント._id)
end

#autosavesHash

現在のスレッド上のすべてのオート保存を取得します。

例:

すべての自動保存を取得します。

Threaded.autosaves

次の値を返します。

  • ハッシュ

    現在の は自動保存されます。

[ソースを表示]

356
357
358
# ファイル 'lib/mongoid/threaded.rb', 行356

デフォルト 自動保存
  得る(オートメーション_キー) { {} }
end

#autosaves_for(klass) ⇒ Array

クラスの現在のスレッドにおけるすべてのオート保存を取得します。

例:

すべての自動保存を取得します。

Threaded.autosaves_for(Person)

パラメーター:

  • klass クラス

    確認する クラス。

次の値を返します。

  • 配列

    現在の は自動保存されます。

[ソースを表示]

378
379
380
# ファイル 'lib/mongoid/threaded.rb', 行378

デフォルト autoss_for(klass)
  自動保存[klass] ||= []
end

#begin_autosave(document) ⇒ Object

現在のスレッドでドキュメントの自動保存を開始します。

例:

Begin autosave.

Threaded.begin_autosave(doc)

パラメーター:

[ソースを表示]

185
186
187
# ファイル 'lib/mongoid/threaded.rb', 行185

デフォルト begin_autosave(ドキュメント)
  autoss_for(ドキュメント.クラス).プッシュ(ドキュメント._id)
end

# start_execution (name) = true

名前付きスレッド ローカル スタックへのエントリを開始します。

例:

スタックへのエントリを開始します。

Threaded.begin_execution(:create)

パラメーター:

  • name ( string )

    スタックの名前

次の値を返します。

  • ( true )

    True。

[ソースを表示]

117
118
119
# ファイル 'lib/mongoid/threaded.rb', 行117

デフォルト start_execution(name)
  stack(name).プッシュ(true)
end

start_validate (ドキュメント)=オブジェクト

現在のスレッドでドキュメントの検証を開始します。

例:

Begin validation.

Threaded.begin_validate(doc)

パラメーター:

[ソースを表示]

195
196
197
# ファイル 'lib/mongoid/threaded.rb', 行195

デフォルト start_validate(ドキュメント)
  validation_for(ドキュメント.クラス).プッシュ(ドキュメント._id)
end

# start_when_default_scope (klas)=オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

現在のスレッドで特定のモデルのデフォルト スコープの非表示を開始します。

例:

デフォルトのスコープ スタックなしで を開始します。

Threaded.begin_without_default_scope(klass)

パラメーター:

  • klass クラス

    デフォルトのスコープを抑制するモデル。

[ソースを表示]

227
228
229
# ファイル 'lib/mongoid/threaded.rb', 行227

デフォルト start_Without_default_scope(klass)
  stack(: without_default_scope).プッシュ(klass)
end

# clear_modified_documents (セッション) ==========================================================================================

指定されたセッションの変更されたドキュメントのセットをクリアし、クリアされる前にセットの内容を返します。

パラメーター:

  • セッション Mongo::Session

    変更されたドキュメントセットをクリアするセッション。

次の値を返します。

  • Set< Mongoid::Document >

    クリアされる前に変更されたドキュメントのコレクション。

[ソースを表示]

448
449
450
# ファイル 'lib/mongoid/threaded.rb', 行448

デフォルト clear_modified_documents(セッション)
  scheduled_documents.削除(セッション) || []
end

#clear_session(client: nil) ⇒ nil

注:

下位互換性のために、次のなしでこのメソッドを呼び出すことができます:

クライアントのこのスレッドのキャッシュされたセッションをクリアします。

'client` パラメーターを指定します。

パラメーター:

  • クライアント Mongo::Client | nil (デフォルトはnil

    セッションをクリアするクライアント。

次の値を返します。

  • (nil)
[ソースを表示]

425
426
427
# ファイル 'lib/mongoid/threaded.rb', 行425

デフォルト clear_session(クライアント: nil)
  セッション.削除(クライアント)&.end_session
end

# client_serveride = string | Symbol

グローバル クライアント オーバーライドを取得します。

例:

グローバル クライアント オーバーライドを取得します。

Threaded.client_override

次の値を返します。

  • ( string | Symbol )

    の上書き。

[ソースを表示]

249
250
251
# ファイル 'lib/mongoid/threaded.rb', 行249

デフォルト client_ overwrite
  得る(CLIENT_OVERRIDE_KEY)
end

クライアント_オーバーライド= (名前) = string = (name) = string | Symbol

グローバル クライアント オーバーライドを設定します。

例:

グローバル クライアント オーバーライドを設定します。

Threaded.client_override = :testing

パラメーター:

  • name ( string | Symbol )

    グローバル オーバーライド名。

次の値を返します。

  • ( string | Symbol )

    の上書き。

[ソースを表示]

261
262
263
# ファイル 'lib/mongoid/threaded.rb', 行261

デフォルト client_ overwrite=(name)
  セット(CLIENT_OVERRIDE_KEY, name)
end

#current_scopeklas = nil)===========================================================

現在の Mongoid スコープを取得します。

例:

スコープを取得します。

Threaded.current_scope(klass)
Threaded.current_scope

パラメーター:

  • klass (Klass) (デフォルトはnil

    スコープのクラス型。

次の値を返します。

  • 基準

    スコープ。

[ソースを表示]

274
275
276
277
278
279
280
281
282
# ファイル 'lib/mongoid/threaded.rb', 行274

デフォルト current_scope(klass = nil)
  current_scope = 得る(CURRENT_SCOPE_KEY)

  場合 klass & & current_scope.respond_to?(:keys)
    current_scope[current_scope.キー.find { |k| k <= klass }]
  else
    current_scope
  end
end

# current_scope= (スコープ) =============================================================================

現在の Mongoid スコープを設定します。

例:

範囲 を設定します。

Threaded.current_scope = scope

パラメーター:

  • scope 基準

    現在のスコープ。

次の値を返します。

  • 基準

    スコープ。

[ソースを表示]

292
293
294
# ファイル 'lib/mongoid/threaded.rb', 行292

デフォルト current_scope=(scope)
  セット(CURRENT_SCOPE_KEY, scope)
end

#database_overrideString | Symbol

グローバル データベースの上書きを取得します。

例:

グローバル データベースの上書きを取得します。

Threaded.database_override

次の値を返します。

  • ( string | Symbol )

    の上書き。

[ソースを表示]

127
128
129
# ファイル 'lib/mongoid/threaded.rb', 行127

デフォルト database_override
  得る(DATABASE_OVERRIDE_KEY)
end

# database_overwrite= (name) = string | Symbol

グローバル データベース オーバーライドを設定します。

例:

グローバル データベース オーバーライドを設定します。

Threaded.database_override = :testing

パラメーター:

  • name ( string | Symbol )

    グローバル オーバーライド名。

次の値を返します。

  • ( string | Symbol )

    の上書き。

[ソースを表示]

139
140
141
# ファイル 'lib/mongoid/threaded.rb', 行139

デフォルト database_override=(name)
  セット(DATABASE_OVERRIDE_KEY, name)
end

# delete(キー) = オブジェクト

名前付き変数を スレッド ローカルストレージから削除します。

パラメーター:

  • キー ( string | Symbol )

    削除する変数の名前。

[ソースを表示]

84
85
86
# ファイル 'lib/mongoid/threaded.rb', 行84

デフォルト 削除(キー)
  セット(キー, nil)
end

#実行_コールバックs= (フラグ) =オブジェクト

現在のスレッドに対してドキュメント コールバックをデフォルトで呼び出すかどうかを示します。 個々のドキュメントはコールバックの動作をさらにオーバーライドする場合がありますが、これはデフォルトの動作に使用されます。

パラメーター:

  • flag true | false

    ドキュメント コールバックをデフォルトで実行するかどうか。

[ソースを表示]

474
475
476
# ファイル 'lib/mongoid/threaded.rb', 行474

デフォルト execution_colbacks=(flag)
  セット(EXECUTE_CALLBACKS, flag)
end

実行_コールバックの回数は? = true | false

ドキュメント コールバックを現在のスレッドでデフォルトで実行するかどうかをクエリします。

特に指定されていない限り(#execute_colbacks=)、これは true を返します。

次の値を返します。

  • true | false

    ドキュメント コールバックをデフォルトで実行するかどうか。

[ソースを表示]

460
461
462
463
464
465
466
# ファイル 'lib/mongoid/threaded.rb', 行460

デフォルト execution_colbacks?
  場合 は を(EXECUTE_CALLBACKS)
    得る(EXECUTE_CALLBACKS)
  else
    true
  end
end

実行する数は? (name) = true

名前付きスタックの実行の途中である

例:

スタック実行中かどうか

Threaded.executing?(:create)

パラメーター:

  • name シンボル

    スタックの名前

次の値を返します。

  • ( true )

    スタックが実行されている場合。

[ソースを表示]

151
152
153
# ファイル 'lib/mongoid/threaded.rb', 行151

デフォルト 実行中(name)
  !stack(name).空の場合
end

終了_自動保存(ドキュメント) =オブジェクト

現在のスレッドでドキュメントの自動保存を終了します。

例:

自動保存を終了します。

Threaded.exit_autosave(doc)

パラメーター:

[ソースを表示]

205
206
207
# ファイル 'lib/mongoid/threaded.rb', 行205

デフォルト exit_autosave(ドキュメント)
  autoss_for(ドキュメント.クラス).delete_one(ドキュメント._id)
end

# end_execution (name) = true

名前付きスレッド ローカル スタックから終了します。

例:

スタックから終了します。

Threaded.exit_execution(:create)

パラメーター:

  • name シンボル

    スタックの名前

次の値を返します。

  • ( true )

    True。

[ソースを表示]

163
164
165
# ファイル 'lib/mongoid/threaded.rb', 行163

デフォルト end_execution(name)
  stack(name).ポップ
end

end_validate (ドキュメント) =オブジェクト

現在のスレッド上のドキュメントの検証を終了します。

例:

検証を終了します。

Threaded.exit_validate(doc)

パラメーター:

[ソースを表示]

215
216
217
# ファイル 'lib/mongoid/threaded.rb', 行215

デフォルト end_validate(ドキュメント)
  validation_for(ドキュメント.クラス).delete_one(ドキュメント._id)
end

# end_Without_default_scope (klas) = オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

現在のスレッドで特定のモデルのデフォルト スコープの非表示を終了します。

例:

デフォルトのスコープ スタックなしで を終了します。

Threaded.exit_without_default_scope(klass)

パラメーター:

  • klass クラス

    デフォルトのスコープ設定を解除するモデル。

[ソースを表示]

239
240
241
# ファイル 'lib/mongoid/threaded.rb', 行239

デフォルト end_Without_default_scope(klass)
  stack(: without_default_scope).削除(klass)
end

# get (キー、デフォルト) = オブジェクト | nil

指定された名前を持つスレッドローカル変数をクエリします。 ブロックが指定され、 かつ 変数がまだ存在しない場合、ブロックの戻り値は、返す前に変数の値として設定されます。

アプリケーション「フィルターのローカル ストアにスレッド ローカルの状態を配置すると、関連するコールバックが別のフィルターで実行されたときに状態が表示されなくなります。

影響を受けるコールバックは、埋め込まれた子に対する段階的なコールバックです。

パラメーター:

  • キー ( string | Symbol )

    クエリする変数の名前

  • default Proc

    この変数のデフォルト(初期)値を返す必要がある任意のブロック。

次の値を返します。

  • ( Object | nil )

    クエリされた変数の値、または設定されておらずデフォルトが指定されていない場合は nil 。

[ソースを表示]

59
60
61
62
63
64
65
66
67
68
# ファイル 'lib/mongoid/threaded.rb', 行59

デフォルト 得る(キー, &default)
  結果 = スレッド.Current.thread_variable_get(キー)

  場合 結果.nil? & & default
    結果 = ノードの数
    セット(キー, 結果)
  end

  結果
end

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

注:

下位互換性のために、次のなしでこのメソッドを呼び出すことができます:

クライアントのこのスレッドのキャッシュされたセッションを取得します。

'client` パラメーターを指定します。

パラメーター:

  • クライアント Mongo::Client | nil (デフォルトはnil

    セッションをキャッシュするクライアント。

次の値を返します。

  • Mongo ::Session | nil

    このスレッドまたは nil でキャッシュされたセッション。

[ソースを表示]

413
414
415
# ファイル 'lib/mongoid/threaded.rb', 行413

デフォルト get_session(クライアント: nil)
  セッション[クライアント]
end

は がありますか? (キー) = true | false

スレッド ローカルストレージ内の名前付き変数の存在をクエリします。

パラメーター:

  • キー ( string | Symbol )

    クエリする変数の名前。

次の値を返します。

  • true | false

    指定された変数が存在するかどうか。

[ソースを表示]

93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# ファイル 'lib/mongoid/threaded.rb', 行93

デフォルト は を(キー)
  ここでは、#JRuby が MRI のように動作しないというクラシックな例を示します。 で
  #MRI、スレッド変数を nil に設定すると、リストから削除されます
  string_variable?(key) に対する 以降の呼び出しは false を返します。 ではない
  JRuby ではそのため、 一度設定すると、スレッド変数を設定解除することはできません。
  #
  ただし、変数を nil に設定すると削除されるはずであるため、
  # では nil 値の変数は実際には存在しないと仮定できます。

  # したがって、これは代わりに次のことを行います。
  #Thread.current.thread_variable?(key)

  # これを行う必要があります。
  !得る(キー).nil?
end

#modified_documents ==Hash=Mongo::Session, Set =Mongoid::Document=======================================================================

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

変更されたドキュメントのスレッド ストアを返します。

次の値を返します。

[ソースを表示]

493
494
495
# ファイル 'lib/mongoid/threaded.rb', 行493

デフォルト scheduled_documents
  得る(変更された_DOCUMENTS_KEY) { ハッシュ.新着情報 { |h, k| h[k] = セット.新着情報 } }
end

セッション=ハッシュ <Integer, Set>

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

セッションのスレッド ストアを返します。

次の値を返します。

  • ハッシュ「整数, セット」 )_

    クライアント オブジェクト ID によってインデックス付けされたセッション。

[ソースを表示]

483
484
485
# ファイル 'lib/mongoid/threaded.rb', 行483

デフォルト セッション
  得る(SESSIONS_KEY) { {}.explain_by_ identity }
end

# set(キー、値)=オブジェクト

指定された名前を持つスレッドローカル変数を指定された値に設定します。 このメソッドが必要な理由、および埋め込み子に対するカスケード コールバックで スレッド#[]= を回避する必要がある理由については、 #get を参照してください。

パラメーター:

  • キー ( string | Symbol )

    設定する変数の名前。

  • 価値 ( Object | nil )

    設定する変数の値(または変数を設定解除する場合は 'nil')

[ソースを表示]

77
78
79
# ファイル 'lib/mongoid/threaded.rb', 行77

デフォルト セット(キー, 価値)
  スレッド.Current.thread_variable_set(キー, 価値)
end

# set_current_scope (scope、klas) =基準

現在の Mongoid スコープを設定します。 マルチモデルのスコープチェーンでも安全です。

例:

範囲 を設定します。

Threaded.current_scope(scope, klass)

パラメーター:

  • scope 基準

    現在のスコープ。

  • klass クラス

    現在のモデル クラス。

次の値を返します。

  • 基準

    スコープ。

[ソースを表示]

305
306
307
308
309
310
311
312
# ファイル 'lib/mongoid/threaded.rb', 行305

デフォルト set_current_scope(scope, klass)
  場合 scope.nil?
    unset_current_scope(klass)
  else
    current_scope = 得る(CURRENT_SCOPE_KEY) { {} }
    current_scope[klass] = scope
  end
end

# set_session (セッション、クライアント: nil) =オブジェクト

注:

下位互換性のために、次のなしでこのメソッドを呼び出すことができます:

クライアント用のこのスレッドのセッションをキャッシュします。

'client` パラメーターを指定します。

パラメーター:

  • セッション Mongo::Session

    保存するセッション。

  • クライアント Mongo::Client | nil (デフォルトはnil

    セッションをキャッシュするクライアント。

[ソースを表示]

401
402
403
# ファイル 'lib/mongoid/threaded.rb', 行401

デフォルト set_session(セッション, クライアント: nil)
  セッション[クライアント] = セッション
end

#stack (名前)=配列

名前付きスタックを取得します。

例:

名前を使用してスタックを取得する

Threaded.stack(:create)

パラメーター:

  • name シンボル

    スタックの名前

次の値を返します。

  • 配列

    スタック。

[ソースを表示]

175
176
177
# ファイル 'lib/mongoid/threaded.rb', 行175

デフォルト stack(name)
  得る(STACK_KEY[name]) { [] }
end

検証された回数(ドキュメント)= true| false

ドキュメントは現在のスレッドで検証されていますか?

例:

ドキュメントは検証されていますか?

Threaded.validated?(doc)

パラメーター:

次の値を返します。

  • true | false

    ドキュメントが検証されている場合。

[ソースを表示]

346
347
348
# ファイル 'lib/mongoid/threaded.rb', 行346

デフォルト 検証されていますか?(ドキュメント)
  validation_for(ドキュメント.クラス).include?(ドキュメント._id)
end

#validationsHash

現在のスレッドのすべての検証を取得します。

例:

すべての検証を取得します。

Threaded.validations

次の値を返します。

  • ハッシュ

    現在の検証。

[ソースを表示]

366
367
368
# ファイル 'lib/mongoid/threaded.rb', 行366

デフォルト validation
  得る(VALIDATIONS_KEY) { {} }
end

#validations_for(klass) ⇒ Array

クラスの現在のスレッドに関するすべての検証を取得します。

例:

すべての検証を取得します。

Threaded.validations_for(Person)

パラメーター:

  • klass クラス

    確認する クラス。

次の値を返します。

  • 配列

    現在の検証。

[ソースを表示]

390
391
392
# ファイル 'lib/mongoid/threaded.rb', 行390

デフォルト validation_for(klass)
  validation[klass] ||= []
end

では、_default_scope は(klas) = ブール値

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

指定されたクラスのデフォルトのスコープは現在のスレッドで非表示になっていますか。

例:

指定されたクラスのデフォルトのスコープは非表示にされていますか?

Threaded.without_default_scope?(klass)

パラメーター:

  • klass クラス

    デフォルトのスコープ非表示を確認するモデル。

次の値を返します。

[ソースを表示]

322
323
324
# ファイル 'lib/mongoid/threaded.rb', 行322

デフォルト without_default_scope は(klass)
  stack(: without_default_scope).include?(klass)
end