class Mongo::Operation::Context
Context
for operations.
Holds various objects needed to make decisions about operation execution in a single container, and provides facade methods for the contained objects.
The context contains parameters for operations, and as such while an operation is being prepared nothing in the context should change. When the result of the operation is being processed, the data returned by the context may change (for example, because a transaction is aborted), but at that point the operation should no longer read anything from the context. Because context data may change during operation execution, context objects should not be reused for multiple operations.
@api private
Attributes
client[R]
options[R]
session[R]
Public Class Methods
new(client: nil, session: nil, service_id: nil, options: nil)
click to toggle source
# File lib/mongo/operation/context.rb, line 38 def initialize(client: nil, session: nil, service_id: nil, options: nil) if options if client raise ArgumentError, 'Client and options cannot both be specified' end if session raise ArgumentError, 'Session and options cannot both be specified' end end if service_id && session&.pinned_service_id raise ArgumentError, 'Trying to pin context to a service when the session is already pinned to a service' end @client = client @session = session @service_id = service_id @options = options end
Public Instance Methods
aborting_transaction?()
click to toggle source
# File lib/mongo/operation/context.rb, line 79 def aborting_transaction? in_transaction? && session.aborting_transaction? end
any_retry_writes?()
click to toggle source
# File lib/mongo/operation/context.rb, line 91 def any_retry_writes? modern_retry_writes? || legacy_retry_writes? end
committing_transaction?()
click to toggle source
# File lib/mongo/operation/context.rb, line 75 def committing_transaction? in_transaction? && session.committing_transaction? end
decrypt?()
click to toggle source
# File lib/mongo/operation/context.rb, line 107 def decrypt? !!client&.encrypter end
encrypt?()
click to toggle source
# File lib/mongo/operation/context.rb, line 103 def encrypt? client&.encrypter&.encrypt? || false end
encrypter()
click to toggle source
# File lib/mongo/operation/context.rb, line 111 def encrypter if client&.encrypter client.encrypter else raise Error::InternalDriverError, 'Encrypter should only be accessed when encryption is to be performed' end end
in_transaction?()
click to toggle source
# File lib/mongo/operation/context.rb, line 67 def in_transaction? session&.in_transaction? || false end
legacy_retry_writes?()
click to toggle source
# File lib/mongo/operation/context.rb, line 87 def legacy_retry_writes? client && !client.options[:retry_writes] && client.max_write_retries > 0 end
modern_retry_writes?()
click to toggle source
# File lib/mongo/operation/context.rb, line 83 def modern_retry_writes? client && client.options[:retry_writes] end
server_api()
click to toggle source
# File lib/mongo/operation/context.rb, line 95 def server_api if client client.options[:server_api] elsif options options[:server_api] end end
service_id()
click to toggle source
# File lib/mongo/operation/context.rb, line 63 def service_id @service_id || session&.pinned_service_id end
starting_transaction?()
click to toggle source
# File lib/mongo/operation/context.rb, line 71 def starting_transaction? session&.starting_transaction? || false end