Class: Mongo::Operation::Context Private

Inherits:
Object
  • Object
show all
Defined in:
build/ruby-driver-master/lib/mongo/operation/context.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client: nil, session: nil, service_id: nil, options: nil) ⇒ Context

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Context.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'build/ruby-driver-master/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

Instance Attribute Details

#clientObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



59
60
61
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 59

def client
  @client
end

#optionsObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



61
62
63
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 61

def options
  @options
end

#sessionObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



60
61
62
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 60

def session
  @session
end

Instance Method Details

#aborting_transaction?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


79
80
81
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 79

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

#any_retry_writes?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


91
92
93
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 91

def any_retry_writes?
  modern_retry_writes? || legacy_retry_writes?
end

#committing_transaction?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


75
76
77
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 75

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

#decrypt?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


107
108
109
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 107

def decrypt?
  !!client&.encrypter
end

#encrypt?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


103
104
105
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 103

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

#encrypterObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



111
112
113
114
115
116
117
# File 'build/ruby-driver-master/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?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


67
68
69
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 67

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

#legacy_retry_writes?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


87
88
89
# File 'build/ruby-driver-master/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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


83
84
85
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 83

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

#server_apiObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



95
96
97
98
99
100
101
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 95

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

#service_idObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



63
64
65
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 63

def service_id
  @service_id || session&.pinned_service_id
end

#starting_transaction?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Boolean)


71
72
73
# File 'build/ruby-driver-master/lib/mongo/operation/context.rb', line 71

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