Class: Mongo::Crypt::Status Private

Inherits:
Object
  • Object
show all
Defined in:
lib/mongo/crypt/status.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.

A wrapper around mongocrypt_status_t, representing the status of a mongocrypt_t handle.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pointer: nil) ⇒ Status

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.

Note:

When initializing a Status object with a pointer, it is

Create a new Status object

recommended that you use the #self.from_pointer method



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/mongo/crypt/status.rb', line 35

def initialize(pointer: nil)
  # If a pointer is passed in, this class is not responsible for
  # destroying that pointer and deallocating data.
  #
  # FFI::AutoPointer uses a custom release strategy to automatically free
  # the pointer once this object goes out of scope
  @status = pointer || FFI::AutoPointer.new(
                        Binding.mongocrypt_status_new,
                        Binding.method(:mongocrypt_status_destroy)
                      )
end

Class Method Details

.from_pointer(pointer) ⇒ Mongo::Crypt::Status

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.

Initialize a Status object from an existing pointer to a mongocrypt_status_t object.



54
55
56
# File 'lib/mongo/crypt/status.rb', line 54

def self.from_pointer(pointer)
  self.new(pointer: pointer)
end

Instance Method Details

#codeInteger

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.

Return the integer code associated with the status



90
91
92
# File 'lib/mongo/crypt/status.rb', line 90

def code
  Binding.mongocrypt_status_code(@status)
end

#labelSymbol

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.

Return the label of the status



83
84
85
# File 'lib/mongo/crypt/status.rb', line 83

def label
  Binding.mongocrypt_status_type(@status)
end

#messageString

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.

Return the status message



97
98
99
100
# File 'lib/mongo/crypt/status.rb', line 97

def message
  message = Binding.mongocrypt_status_message(@status, nil)
  message || ''
end

#ok?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.

Checks whether the status is labeled :ok



105
106
107
# File 'lib/mongo/crypt/status.rb', line 105

def ok?
  Binding.mongocrypt_status_ok(@status)
end

#raise_crypt_error(kms: false) ⇒ Object

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.

Note:

If kms parameter is false, the error may still have come from a KMS. The kms parameter simply forces all errors to be treated as KMS errors.

Raises a Mongo::Error:CryptError corresponding to the information stored in this status

Does nothing if self.ok? is true



127
128
129
130
131
132
133
134
135
136
137
# File 'lib/mongo/crypt/status.rb', line 127

def raise_crypt_error(kms: false)
  return if ok?

  if kms || label == :error_kms
    error = Error::KmsError.new(message, code: code)
  else
    error = Error::CryptError.new(message, code: code)
  end

  raise error
end

#refFFI::Pointer

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 the reference to the underlying mongocrypt_status_t object



113
114
115
# File 'lib/mongo/crypt/status.rb', line 113

def ref
  @status
end

#update(label, code, message) ⇒ Mongo::Crypt::Status

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.

Set a label, code, and message on the Status



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/mongo/crypt/status.rb', line 65

def update(label, code, message)
  unless [:ok, :error_client, :error_kms].include?(label)
    raise ArgumentError.new(
      "#{label} is an invalid value for a Mongo::Crypt::Status label. " +
      "Label must have one of the following values: :ok, :error_client, :error_kms"
    )
  end

  message_length = message ? message.bytesize + 1 : 0
  Binding.mongocrypt_status_set(@status, label, code, message, message_length)

  self
end