123456789_123456789_123456789_123456789_123456789_

Class: Mongo::Operation::Context Private

Do not use. This class is for internal use only.
Relationships & Source Files
Inherits: Object
Defined in: lib/mongo/operation/context.rb

Overview

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.

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Instance Attribute Details

#aborting_transaction?Boolean (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 79

def aborting_transaction?
  in_transaction? && session.aborting_transaction?
end

#any_retry_writes?Boolean (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 91

def any_retry_writes?
  modern_retry_writes? || legacy_retry_writes?
end

#client (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 59

attr_reader :client

#committing_transaction?Boolean (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 75

def committing_transaction?
  in_transaction? && session.committing_transaction?
end

#decrypt?Boolean (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 125

def decrypt?
  !!client&.encrypter
end

#encrypt?Boolean (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 121

def encrypt?
  client&.encrypter&.encrypt? || false
end

#in_transaction?Boolean (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 67

def in_transaction?
  session&.in_transaction? || false
end

#legacy_retry_writes?Boolean (readonly)

[ GitHub ]

  
# 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?Boolean (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 83

def modern_retry_writes?
  client && client.options[:retry_writes]
end

#options (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 61

attr_reader :options

#retry?Boolean (readonly)

Whether the operation is a retry (true) or an initial attempt (false).

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 104

def retry?
  !!@is_retry
end

#session (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 60

attr_reader :session

#starting_transaction?Boolean (readonly)

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 71

def starting_transaction?
  session&.starting_transaction? || false
end

Instance Method Details

#connection_global_id

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 63

def connection_global_id
  @connection_global_id || session&.pinned_connection_global_id
end

#encrypter

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 129

def encrypter
  if client&.encrypter
    client.encrypter
  else
    raise Error::InternalDriverError, 'Encrypter should only be accessed when encryption is to be performed'
  end
end

#server_api

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 95

def server_api
  if client
    client.options[:server_api]
  elsif options
    options[:server_api]
  end
end

#with(**opts)

Returns a new context with the parameters changed as per the provided arguments.

Parameters:

  • opts (Hash)

    a customizable set of options

Options Hash (**opts):

  • :is_retry (true|false)

    Whether the operation is a retry or a first attempt.

[ GitHub ]

  
# File 'lib/mongo/operation/context.rb', line 113

def with(**opts)
  dup.tap do |copy|
    opts.each do |k, v|
      copy.instance_variable_set("@#{k}", v)
    end
  end
end