mongo 2.22.0 → 2.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/bin/mongo_console +0 -1
  3. data/lib/mongo/active_support.rb +1 -2
  4. data/lib/mongo/address/ipv4.rb +3 -6
  5. data/lib/mongo/address/ipv6.rb +6 -10
  6. data/lib/mongo/address/unix.rb +1 -4
  7. data/lib/mongo/address/validator.rb +16 -28
  8. data/lib/mongo/address.rb +30 -40
  9. data/lib/mongo/auth/aws/conversation.rb +6 -10
  10. data/lib/mongo/auth/aws/credentials.rb +0 -1
  11. data/lib/mongo/auth/aws/credentials_cache.rb +0 -1
  12. data/lib/mongo/auth/aws/credentials_retriever.rb +45 -59
  13. data/lib/mongo/auth/aws/request.rb +20 -35
  14. data/lib/mongo/auth/aws.rb +1 -2
  15. data/lib/mongo/auth/base.rb +20 -29
  16. data/lib/mongo/auth/conversation_base.rb +14 -18
  17. data/lib/mongo/auth/cr/conversation.rb +0 -3
  18. data/lib/mongo/auth/cr.rb +1 -4
  19. data/lib/mongo/auth/credential_cache.rb +0 -2
  20. data/lib/mongo/auth/gssapi/conversation.rb +3 -8
  21. data/lib/mongo/auth/gssapi.rb +1 -4
  22. data/lib/mongo/auth/ldap/conversation.rb +0 -3
  23. data/lib/mongo/auth/ldap.rb +1 -4
  24. data/lib/mongo/auth/roles.rb +16 -19
  25. data/lib/mongo/auth/sasl_conversation_base.rb +7 -11
  26. data/lib/mongo/auth/scram/conversation.rb +2 -5
  27. data/lib/mongo/auth/scram.rb +5 -10
  28. data/lib/mongo/auth/scram256/conversation.rb +2 -5
  29. data/lib/mongo/auth/scram256.rb +1 -3
  30. data/lib/mongo/auth/scram_conversation_base.rb +18 -24
  31. data/lib/mongo/auth/stringprep/profiles/sasl.rb +17 -18
  32. data/lib/mongo/auth/stringprep/tables.rb +2209 -2210
  33. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +36 -38
  34. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1142 -1150
  35. data/lib/mongo/auth/stringprep.rb +9 -12
  36. data/lib/mongo/auth/user/view.rb +3 -5
  37. data/lib/mongo/auth/user.rb +14 -24
  38. data/lib/mongo/auth/x509/conversation.rb +0 -3
  39. data/lib/mongo/auth/x509.rb +7 -9
  40. data/lib/mongo/auth.rb +18 -30
  41. data/lib/mongo/background_thread.rb +9 -17
  42. data/lib/mongo/bson.rb +0 -2
  43. data/lib/mongo/bulk_write/combineable.rb +0 -3
  44. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -3
  45. data/lib/mongo/bulk_write/result.rb +11 -16
  46. data/lib/mongo/bulk_write/result_combiner.rb +9 -12
  47. data/lib/mongo/bulk_write/transformable.rb +16 -19
  48. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -3
  49. data/lib/mongo/bulk_write/validatable.rb +11 -18
  50. data/lib/mongo/bulk_write.rb +76 -91
  51. data/lib/mongo/caching_cursor.rb +2 -7
  52. data/lib/mongo/client.rb +267 -276
  53. data/lib/mongo/client_encryption.rb +4 -5
  54. data/lib/mongo/cluster/periodic_executor.rb +2 -5
  55. data/lib/mongo/cluster/reapers/cursor_reaper.rb +21 -29
  56. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -6
  57. data/lib/mongo/cluster/sdam_flow.rb +136 -159
  58. data/lib/mongo/cluster/topology/base.rb +15 -18
  59. data/lib/mongo/cluster/topology/load_balanced.rb +24 -14
  60. data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -6
  61. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +20 -23
  62. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +0 -2
  63. data/lib/mongo/cluster/topology/sharded.rb +19 -9
  64. data/lib/mongo/cluster/topology/single.rb +24 -14
  65. data/lib/mongo/cluster/topology/unknown.rb +20 -10
  66. data/lib/mongo/cluster/topology.rb +29 -25
  67. data/lib/mongo/cluster.rb +152 -184
  68. data/lib/mongo/cluster_time.rb +14 -31
  69. data/lib/mongo/collection/helpers.rb +5 -8
  70. data/lib/mongo/collection/view/aggregation/behavior.rb +1 -1
  71. data/lib/mongo/collection/view/aggregation.rb +10 -12
  72. data/lib/mongo/collection/view/builder/aggregation.rb +6 -9
  73. data/lib/mongo/collection/view/builder/map_reduce.rb +18 -17
  74. data/lib/mongo/collection/view/builder.rb +0 -1
  75. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -8
  76. data/lib/mongo/collection/view/change_stream.rb +59 -58
  77. data/lib/mongo/collection/view/explainable.rb +11 -20
  78. data/lib/mongo/collection/view/immutable.rb +1 -3
  79. data/lib/mongo/collection/view/iterable.rb +44 -35
  80. data/lib/mongo/collection/view/map_reduce.rb +20 -25
  81. data/lib/mongo/collection/view/readable.rb +96 -94
  82. data/lib/mongo/collection/view/writable.rb +104 -114
  83. data/lib/mongo/collection/view.rb +11 -8
  84. data/lib/mongo/collection.rb +103 -106
  85. data/lib/mongo/condition_variable.rb +4 -4
  86. data/lib/mongo/config/options.rb +0 -3
  87. data/lib/mongo/config/validators/option.rb +3 -5
  88. data/lib/mongo/config.rb +6 -4
  89. data/lib/mongo/crypt/auto_decryption_context.rb +9 -3
  90. data/lib/mongo/crypt/auto_encrypter.rb +34 -43
  91. data/lib/mongo/crypt/auto_encryption_context.rb +0 -3
  92. data/lib/mongo/crypt/binary.rb +5 -9
  93. data/lib/mongo/crypt/binding.rb +150 -156
  94. data/lib/mongo/crypt/context.rb +20 -17
  95. data/lib/mongo/crypt/data_key_context.rb +2 -7
  96. data/lib/mongo/crypt/encryption_io.rb +29 -39
  97. data/lib/mongo/crypt/explicit_decryption_context.rb +9 -3
  98. data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
  99. data/lib/mongo/crypt/explicit_encryption_context.rb +19 -30
  100. data/lib/mongo/crypt/explicit_encryption_expression_context.rb +0 -2
  101. data/lib/mongo/crypt/handle.rb +42 -48
  102. data/lib/mongo/crypt/hooks.rb +12 -15
  103. data/lib/mongo/crypt/kms/aws/credentials.rb +12 -16
  104. data/lib/mongo/crypt/kms/aws/master_document.rb +6 -9
  105. data/lib/mongo/crypt/kms/aws.rb +0 -2
  106. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +2 -7
  107. data/lib/mongo/crypt/kms/azure/master_document.rb +15 -19
  108. data/lib/mongo/crypt/kms/azure.rb +0 -1
  109. data/lib/mongo/crypt/kms/credentials.rb +13 -27
  110. data/lib/mongo/crypt/kms/gcp/credentials.rb +12 -14
  111. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +7 -9
  112. data/lib/mongo/crypt/kms/gcp/master_document.rb +12 -16
  113. data/lib/mongo/crypt/kms/gcp.rb +0 -2
  114. data/lib/mongo/crypt/kms/kmip/credentials.rb +7 -8
  115. data/lib/mongo/crypt/kms/kmip/master_document.rb +3 -5
  116. data/lib/mongo/crypt/kms/kmip.rb +0 -1
  117. data/lib/mongo/crypt/kms/local/credentials.rb +7 -8
  118. data/lib/mongo/crypt/kms/local/master_document.rb +2 -6
  119. data/lib/mongo/crypt/kms/local.rb +0 -1
  120. data/lib/mongo/crypt/kms/master_key_document.rb +11 -15
  121. data/lib/mongo/crypt/kms.rb +14 -16
  122. data/lib/mongo/crypt/kms_context.rb +0 -2
  123. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +2 -7
  124. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +2 -4
  125. data/lib/mongo/crypt/status.rb +12 -14
  126. data/lib/mongo/crypt.rb +0 -1
  127. data/lib/mongo/csot_timeout_holder.rb +3 -2
  128. data/lib/mongo/cursor/kill_spec.rb +7 -10
  129. data/lib/mongo/cursor.rb +74 -64
  130. data/lib/mongo/cursor_host.rb +8 -10
  131. data/lib/mongo/database/view.rb +23 -39
  132. data/lib/mongo/database.rb +68 -65
  133. data/lib/mongo/dbref.rb +0 -1
  134. data/lib/mongo/deprecations.rb +98 -0
  135. data/lib/mongo/distinguishing_semaphore.rb +0 -1
  136. data/lib/mongo/error/auth_error.rb +0 -2
  137. data/lib/mongo/error/bad_load_balancer_target.rb +0 -2
  138. data/lib/mongo/error/bulk_write_error.rb +7 -10
  139. data/lib/mongo/error/change_stream_resumable.rb +0 -2
  140. data/lib/mongo/error/client_closed.rb +0 -2
  141. data/lib/mongo/error/closed_stream.rb +1 -4
  142. data/lib/mongo/error/connection_check_out_timeout.rb +3 -6
  143. data/lib/mongo/error/connection_perished.rb +0 -2
  144. data/lib/mongo/error/connection_unavailable.rb +0 -2
  145. data/lib/mongo/error/credential_check_error.rb +0 -2
  146. data/lib/mongo/error/crypt_error.rb +0 -2
  147. data/lib/mongo/error/extra_file_chunk.rb +1 -4
  148. data/lib/mongo/error/failed_string_prep_validation.rb +5 -6
  149. data/lib/mongo/error/file_not_found.rb +0 -3
  150. data/lib/mongo/error/handshake_error.rb +0 -2
  151. data/lib/mongo/error/insufficient_iteration_count.rb +1 -4
  152. data/lib/mongo/error/internal_driver_error.rb +0 -2
  153. data/lib/mongo/error/invalid_address.rb +0 -2
  154. data/lib/mongo/error/invalid_application_name.rb +0 -3
  155. data/lib/mongo/error/invalid_bulk_operation.rb +1 -4
  156. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -4
  157. data/lib/mongo/error/invalid_collection_name.rb +1 -4
  158. data/lib/mongo/error/invalid_config_option.rb +0 -3
  159. data/lib/mongo/error/invalid_cursor_operation.rb +0 -2
  160. data/lib/mongo/error/invalid_database_name.rb +1 -4
  161. data/lib/mongo/error/invalid_document.rb +1 -4
  162. data/lib/mongo/error/invalid_file.rb +0 -3
  163. data/lib/mongo/error/invalid_file_revision.rb +0 -3
  164. data/lib/mongo/error/invalid_min_pool_size.rb +0 -3
  165. data/lib/mongo/error/invalid_nonce.rb +0 -3
  166. data/lib/mongo/error/invalid_read_concern.rb +2 -4
  167. data/lib/mongo/error/invalid_read_option.rb +0 -3
  168. data/lib/mongo/error/invalid_replacement_document.rb +2 -5
  169. data/lib/mongo/error/invalid_server_auth_host.rb +0 -2
  170. data/lib/mongo/error/invalid_server_auth_response.rb +0 -2
  171. data/lib/mongo/error/invalid_server_preference.rb +7 -16
  172. data/lib/mongo/error/invalid_session.rb +1 -4
  173. data/lib/mongo/error/invalid_signature.rb +0 -3
  174. data/lib/mongo/error/invalid_transaction_operation.rb +5 -8
  175. data/lib/mongo/error/invalid_txt_record.rb +0 -2
  176. data/lib/mongo/error/invalid_update_document.rb +2 -5
  177. data/lib/mongo/error/invalid_uri.rb +1 -4
  178. data/lib/mongo/error/invalid_write_concern.rb +2 -5
  179. data/lib/mongo/error/kms_error.rb +0 -2
  180. data/lib/mongo/error/labelable.rb +0 -3
  181. data/lib/mongo/error/lint_error.rb +0 -2
  182. data/lib/mongo/error/max_bson_size.rb +8 -11
  183. data/lib/mongo/error/max_message_size.rb +2 -5
  184. data/lib/mongo/error/mismatched_domain.rb +0 -2
  185. data/lib/mongo/error/missing_connection.rb +0 -2
  186. data/lib/mongo/error/missing_file_chunk.rb +0 -3
  187. data/lib/mongo/error/missing_password.rb +0 -2
  188. data/lib/mongo/error/missing_resume_token.rb +1 -4
  189. data/lib/mongo/error/missing_scram_server_signature.rb +2 -4
  190. data/lib/mongo/error/missing_service_id.rb +0 -2
  191. data/lib/mongo/error/mongocryptd_spawn_error.rb +0 -2
  192. data/lib/mongo/error/multi_index_drop.rb +0 -3
  193. data/lib/mongo/error/need_primary_server.rb +0 -2
  194. data/lib/mongo/error/no_server_available.rb +3 -8
  195. data/lib/mongo/error/no_service_connection_available.rb +1 -3
  196. data/lib/mongo/error/no_srv_records.rb +0 -2
  197. data/lib/mongo/error/notable.rb +8 -16
  198. data/lib/mongo/error/operation_failure.rb +22 -35
  199. data/lib/mongo/error/parser.rb +33 -75
  200. data/lib/mongo/error/pool_cleared_error.rb +1 -3
  201. data/lib/mongo/error/pool_closed_error.rb +0 -3
  202. data/lib/mongo/error/pool_error.rb +0 -3
  203. data/lib/mongo/error/pool_paused_error.rb +0 -2
  204. data/lib/mongo/error/raise_original_error.rb +1 -3
  205. data/lib/mongo/error/read_write_retryable.rb +14 -17
  206. data/lib/mongo/error/sdam_error_detection.rb +3 -5
  207. data/lib/mongo/error/server_api_conflict.rb +0 -2
  208. data/lib/mongo/error/server_certificate_revoked.rb +0 -2
  209. data/lib/mongo/error/server_not_usable.rb +0 -2
  210. data/lib/mongo/error/session_ended.rb +1 -3
  211. data/lib/mongo/error/session_not_materialized.rb +1 -3
  212. data/lib/mongo/error/sessions_not_supported.rb +1 -4
  213. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -4
  214. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -4
  215. data/lib/mongo/error/socket_error.rb +0 -2
  216. data/lib/mongo/error/socket_timeout_error.rb +0 -2
  217. data/lib/mongo/error/transactions_not_supported.rb +3 -6
  218. data/lib/mongo/error/unchangeable_collection_option.rb +1 -4
  219. data/lib/mongo/error/unexpected_chunk_length.rb +0 -3
  220. data/lib/mongo/error/unexpected_response.rb +1 -4
  221. data/lib/mongo/error/unknown_payload_type.rb +0 -3
  222. data/lib/mongo/error/unmet_dependency.rb +0 -2
  223. data/lib/mongo/error/unsupported_array_filters.rb +3 -24
  224. data/lib/mongo/error/unsupported_collation.rb +3 -24
  225. data/lib/mongo/error/unsupported_features.rb +0 -2
  226. data/lib/mongo/error/unsupported_message_type.rb +0 -2
  227. data/lib/mongo/error/unsupported_option.rb +19 -21
  228. data/lib/mongo/error/write_retryable.rb +0 -2
  229. data/lib/mongo/error.rb +10 -24
  230. data/lib/mongo/event/base.rb +0 -2
  231. data/lib/mongo/event/listeners.rb +0 -3
  232. data/lib/mongo/event/publisher.rb +0 -3
  233. data/lib/mongo/event/subscriber.rb +0 -4
  234. data/lib/mongo/event.rb +4 -6
  235. data/lib/mongo/grid/file/chunk.rb +7 -10
  236. data/lib/mongo/grid/file/info.rb +20 -24
  237. data/lib/mongo/grid/file.rb +7 -8
  238. data/lib/mongo/grid/fs_bucket.rb +40 -48
  239. data/lib/mongo/grid/stream/read.rb +25 -35
  240. data/lib/mongo/grid/stream/write.rb +17 -22
  241. data/lib/mongo/grid/stream.rb +2 -4
  242. data/lib/mongo/grid.rb +0 -1
  243. data/lib/mongo/id.rb +0 -1
  244. data/lib/mongo/index/view.rb +68 -58
  245. data/lib/mongo/index.rb +7 -10
  246. data/lib/mongo/lint.rb +31 -37
  247. data/lib/mongo/loggable.rb +5 -8
  248. data/lib/mongo/logger.rb +1 -7
  249. data/lib/mongo/monitoring/cmap_log_subscriber.rb +0 -2
  250. data/lib/mongo/monitoring/command_log_subscriber.rb +25 -33
  251. data/lib/mongo/monitoring/event/cmap/base.rb +0 -2
  252. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -4
  253. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +0 -3
  254. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -4
  255. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +2 -5
  256. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -4
  257. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -4
  258. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -4
  259. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +0 -3
  260. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -4
  261. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -4
  262. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +1 -4
  263. data/lib/mongo/monitoring/event/cmap.rb +0 -1
  264. data/lib/mongo/monitoring/event/command_failed.rb +5 -9
  265. data/lib/mongo/monitoring/event/command_started.rb +8 -12
  266. data/lib/mongo/monitoring/event/command_succeeded.rb +7 -15
  267. data/lib/mongo/monitoring/event/secure.rb +15 -20
  268. data/lib/mongo/monitoring/event/server_closed.rb +1 -4
  269. data/lib/mongo/monitoring/event/server_description_changed.rb +4 -8
  270. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +5 -10
  271. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -4
  272. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +3 -8
  273. data/lib/mongo/monitoring/event/server_opening.rb +1 -4
  274. data/lib/mongo/monitoring/event/topology_changed.rb +2 -5
  275. data/lib/mongo/monitoring/event/topology_closed.rb +1 -4
  276. data/lib/mongo/monitoring/event/topology_opening.rb +1 -4
  277. data/lib/mongo/monitoring/event.rb +0 -1
  278. data/lib/mongo/monitoring/publishable.rb +20 -30
  279. data/lib/mongo/monitoring/sdam_log_subscriber.rb +0 -2
  280. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +0 -3
  281. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +0 -3
  282. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
  283. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +5 -8
  284. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +0 -3
  285. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +0 -3
  286. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -3
  287. data/lib/mongo/monitoring.rb +38 -39
  288. data/lib/mongo/operation/aggregate/op_msg.rb +0 -2
  289. data/lib/mongo/operation/aggregate/result.rb +3 -6
  290. data/lib/mongo/operation/aggregate.rb +0 -2
  291. data/lib/mongo/operation/collections_info/result.rb +0 -3
  292. data/lib/mongo/operation/collections_info.rb +0 -2
  293. data/lib/mongo/operation/command/op_msg.rb +1 -4
  294. data/lib/mongo/operation/command.rb +0 -2
  295. data/lib/mongo/operation/context.rb +13 -16
  296. data/lib/mongo/operation/count/op_msg.rb +2 -4
  297. data/lib/mongo/operation/count.rb +0 -2
  298. data/lib/mongo/operation/create/op_msg.rb +2 -5
  299. data/lib/mongo/operation/create.rb +4 -2
  300. data/lib/mongo/operation/create_index/op_msg.rb +3 -7
  301. data/lib/mongo/operation/create_index.rb +0 -2
  302. data/lib/mongo/operation/create_user/op_msg.rb +2 -4
  303. data/lib/mongo/operation/create_user.rb +0 -2
  304. data/lib/mongo/operation/delete/bulk_result.rb +2 -3
  305. data/lib/mongo/operation/delete/op_msg.rb +3 -10
  306. data/lib/mongo/operation/delete/result.rb +0 -3
  307. data/lib/mongo/operation/delete.rb +1 -5
  308. data/lib/mongo/operation/distinct/op_msg.rb +2 -5
  309. data/lib/mongo/operation/distinct.rb +0 -2
  310. data/lib/mongo/operation/drop/op_msg.rb +0 -2
  311. data/lib/mongo/operation/drop.rb +0 -2
  312. data/lib/mongo/operation/drop_database/op_msg.rb +0 -2
  313. data/lib/mongo/operation/drop_database.rb +0 -2
  314. data/lib/mongo/operation/drop_index/op_msg.rb +4 -6
  315. data/lib/mongo/operation/drop_index.rb +0 -2
  316. data/lib/mongo/operation/explain/op_msg.rb +0 -2
  317. data/lib/mongo/operation/explain/result.rb +0 -3
  318. data/lib/mongo/operation/explain.rb +0 -2
  319. data/lib/mongo/operation/find/builder/command.rb +4 -12
  320. data/lib/mongo/operation/find/builder/flags.rb +9 -15
  321. data/lib/mongo/operation/find/builder/modifiers.rb +1 -4
  322. data/lib/mongo/operation/find/builder.rb +0 -1
  323. data/lib/mongo/operation/find/op_msg.rb +4 -12
  324. data/lib/mongo/operation/find/result.rb +0 -3
  325. data/lib/mongo/operation/find.rb +0 -2
  326. data/lib/mongo/operation/get_more/command_builder.rb +1 -6
  327. data/lib/mongo/operation/get_more/op_msg.rb +10 -4
  328. data/lib/mongo/operation/get_more/result.rb +0 -3
  329. data/lib/mongo/operation/get_more.rb +0 -2
  330. data/lib/mongo/operation/indexes/op_msg.rb +0 -2
  331. data/lib/mongo/operation/indexes/result.rb +1 -5
  332. data/lib/mongo/operation/indexes.rb +0 -2
  333. data/lib/mongo/operation/insert/bulk_result.rb +2 -6
  334. data/lib/mongo/operation/insert/op_msg.rb +7 -6
  335. data/lib/mongo/operation/insert/result.rb +0 -3
  336. data/lib/mongo/operation/insert.rb +2 -5
  337. data/lib/mongo/operation/kill_cursors/command_builder.rb +0 -3
  338. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -3
  339. data/lib/mongo/operation/kill_cursors.rb +0 -2
  340. data/lib/mongo/operation/list_collections/op_msg.rb +4 -6
  341. data/lib/mongo/operation/list_collections/result.rb +1 -4
  342. data/lib/mongo/operation/list_collections.rb +0 -2
  343. data/lib/mongo/operation/map_reduce/op_msg.rb +0 -2
  344. data/lib/mongo/operation/map_reduce/result.rb +3 -6
  345. data/lib/mongo/operation/map_reduce.rb +0 -2
  346. data/lib/mongo/operation/op_msg_base.rb +0 -1
  347. data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -5
  348. data/lib/mongo/operation/parallel_scan/result.rb +2 -5
  349. data/lib/mongo/operation/parallel_scan.rb +0 -2
  350. data/lib/mongo/operation/remove_user/op_msg.rb +2 -4
  351. data/lib/mongo/operation/remove_user.rb +0 -2
  352. data/lib/mongo/operation/result.rb +38 -48
  353. data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -7
  354. data/lib/mongo/operation/shared/causal_consistency_supported.rb +0 -3
  355. data/lib/mongo/operation/shared/executable.rb +29 -31
  356. data/lib/mongo/operation/shared/executable_no_validate.rb +0 -3
  357. data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -2
  358. data/lib/mongo/operation/shared/idable.rb +3 -6
  359. data/lib/mongo/operation/shared/limited.rb +0 -3
  360. data/lib/mongo/operation/shared/object_id_generator.rb +0 -3
  361. data/lib/mongo/operation/shared/op_msg_executable.rb +0 -2
  362. data/lib/mongo/operation/shared/polymorphic_lookup.rb +0 -2
  363. data/lib/mongo/operation/shared/polymorphic_result.rb +2 -4
  364. data/lib/mongo/operation/shared/read_preference_supported.rb +10 -15
  365. data/lib/mongo/operation/shared/response_handling.rb +13 -26
  366. data/lib/mongo/operation/shared/result/aggregatable.rb +12 -13
  367. data/lib/mongo/operation/shared/sessions_supported.rb +87 -99
  368. data/lib/mongo/operation/shared/specifiable.rb +37 -59
  369. data/lib/mongo/operation/shared/write.rb +12 -17
  370. data/lib/mongo/operation/shared/write_concern_supported.rb +4 -7
  371. data/lib/mongo/operation/update/bulk_result.rb +13 -17
  372. data/lib/mongo/operation/update/op_msg.rb +2 -5
  373. data/lib/mongo/operation/update/result.rb +5 -5
  374. data/lib/mongo/operation/update.rb +1 -5
  375. data/lib/mongo/operation/update_user/op_msg.rb +2 -4
  376. data/lib/mongo/operation/update_user.rb +0 -2
  377. data/lib/mongo/operation/users_info/op_msg.rb +2 -4
  378. data/lib/mongo/operation/users_info/result.rb +1 -4
  379. data/lib/mongo/operation/users_info.rb +0 -2
  380. data/lib/mongo/operation/write_command/op_msg.rb +2 -10
  381. data/lib/mongo/operation/write_command.rb +0 -2
  382. data/lib/mongo/operation.rb +9 -14
  383. data/lib/mongo/options/mapper.rb +8 -15
  384. data/lib/mongo/options/redacted.rb +7 -9
  385. data/lib/mongo/options.rb +0 -1
  386. data/lib/mongo/protocol/bit_vector.rb +3 -5
  387. data/lib/mongo/protocol/caching_hash.rb +2 -7
  388. data/lib/mongo/protocol/compressed.rb +5 -10
  389. data/lib/mongo/protocol/get_more.rb +2 -8
  390. data/lib/mongo/protocol/kill_cursors.rb +2 -8
  391. data/lib/mongo/protocol/message.rb +103 -105
  392. data/lib/mongo/protocol/msg.rb +48 -63
  393. data/lib/mongo/protocol/query.rb +32 -41
  394. data/lib/mongo/protocol/registry.rb +2 -5
  395. data/lib/mongo/protocol/reply.rb +10 -16
  396. data/lib/mongo/protocol/serializers.rb +41 -59
  397. data/lib/mongo/protocol.rb +0 -1
  398. data/lib/mongo/query_cache.rb +7 -15
  399. data/lib/mongo/retryable/backpressure.rb +31 -0
  400. data/lib/mongo/retryable/base_worker.rb +39 -13
  401. data/lib/mongo/retryable/read_worker.rb +77 -21
  402. data/lib/mongo/retryable/retry_policy.rb +59 -0
  403. data/lib/mongo/retryable/write_worker.rb +155 -56
  404. data/lib/mongo/retryable.rb +70 -9
  405. data/lib/mongo/search_index/view.rb +30 -10
  406. data/lib/mongo/semaphore.rb +0 -1
  407. data/lib/mongo/server/app_metadata/environment.rb +3 -3
  408. data/lib/mongo/server/app_metadata/platform.rb +17 -4
  409. data/lib/mongo/server/app_metadata.rb +4 -5
  410. data/lib/mongo/server/connection.rb +79 -61
  411. data/lib/mongo/server/connection_base.rb +43 -53
  412. data/lib/mongo/server/connection_common.rb +41 -64
  413. data/lib/mongo/server/connection_pool/generation_manager.rb +6 -11
  414. data/lib/mongo/server/connection_pool/populator.rb +1 -4
  415. data/lib/mongo/server/connection_pool.rb +195 -167
  416. data/lib/mongo/server/description/features.rb +51 -59
  417. data/lib/mongo/server/description/load_balancer.rb +0 -2
  418. data/lib/mongo/server/description.rb +117 -138
  419. data/lib/mongo/server/monitor/app_metadata.rb +3 -4
  420. data/lib/mongo/server/monitor/connection.rb +28 -35
  421. data/lib/mongo/server/monitor.rb +65 -60
  422. data/lib/mongo/server/pending_connection.rb +70 -71
  423. data/lib/mongo/server/push_monitor/connection.rb +0 -3
  424. data/lib/mongo/server/push_monitor.rb +21 -29
  425. data/lib/mongo/server/round_trip_time_calculator.rb +11 -17
  426. data/lib/mongo/server.rb +62 -94
  427. data/lib/mongo/server_selector/base.rb +133 -157
  428. data/lib/mongo/server_selector/nearest.rb +2 -5
  429. data/lib/mongo/server_selector/primary.rb +1 -5
  430. data/lib/mongo/server_selector/primary_preferred.rb +2 -6
  431. data/lib/mongo/server_selector/secondary.rb +2 -6
  432. data/lib/mongo/server_selector/secondary_preferred.rb +1 -5
  433. data/lib/mongo/server_selector.rb +3 -4
  434. data/lib/mongo/session/server_session.rb +6 -7
  435. data/lib/mongo/session/session_pool.rb +20 -34
  436. data/lib/mongo/session.rb +334 -199
  437. data/lib/mongo/socket/ocsp_cache.rb +8 -13
  438. data/lib/mongo/socket/ocsp_verifier.rb +69 -70
  439. data/lib/mongo/socket/ssl.rb +44 -43
  440. data/lib/mongo/socket/tcp.rb +5 -8
  441. data/lib/mongo/socket/unix.rb +0 -4
  442. data/lib/mongo/socket.rb +80 -102
  443. data/lib/mongo/srv/monitor.rb +10 -11
  444. data/lib/mongo/srv/resolver.rb +15 -24
  445. data/lib/mongo/srv/result.rb +25 -21
  446. data/lib/mongo/srv.rb +0 -1
  447. data/lib/mongo/timeout.rb +4 -11
  448. data/lib/mongo/topology_version.rb +8 -13
  449. data/lib/mongo/tracing/open_telemetry/command_tracer.rb +320 -0
  450. data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +227 -0
  451. data/lib/mongo/tracing/open_telemetry/tracer.rb +236 -0
  452. data/lib/mongo/{error/server_api_not_supported.rb → tracing/open_telemetry.rb} +10 -10
  453. data/lib/mongo/tracing.rb +42 -0
  454. data/lib/mongo/uri/options_mapper.rb +135 -126
  455. data/lib/mongo/uri/srv_protocol.rb +34 -42
  456. data/lib/mongo/uri.rb +95 -139
  457. data/lib/mongo/utils.rb +5 -12
  458. data/lib/mongo/version.rb +1 -1
  459. data/lib/mongo/write_concern/acknowledged.rb +0 -2
  460. data/lib/mongo/write_concern/base.rb +6 -6
  461. data/lib/mongo/write_concern/unacknowledged.rb +0 -2
  462. data/lib/mongo/write_concern.rb +14 -15
  463. data/lib/mongo.rb +4 -3
  464. data/mongo.gemspec +17 -17
  465. metadata +11 -5
  466. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +0 -32
  467. data/lib/mongo/operation/shared/validatable.rb +0 -87
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -19,7 +18,7 @@ module Mongo
19
18
  module Crypt
20
19
  module KMS
21
20
  module GCP
22
- # This class retrieves GPC credentials using Google Compute Engine
21
+ # This class retrieves GCP credentials using Google Compute Engine
23
22
  # metadata host. This should be used when the driver is used on the
24
23
  # Google Compute Engine instance.
25
24
  #
@@ -45,22 +44,22 @@ module Mongo
45
44
  resp = fetch_response(uri, req, timeout_holder)
46
45
  if resp.code != '200'
47
46
  raise KMS::CredentialsNotFound,
48
- "GCE metadata host responded with code #{resp.code}"
47
+ "GCE metadata host responded with code #{resp.code}"
49
48
  end
50
49
  parsed_resp = JSON.parse(resp.body)
51
50
  parsed_resp.fetch('access_token')
52
51
  rescue JSON::ParserError, KeyError => e
53
52
  raise KMS::CredentialsNotFound,
54
- "GCE metadata response is invalid: '#{resp.body}'; #{e.class}: #{e.message}"
55
- rescue ::Timeout::Error, IOError, SystemCallError, SocketError => e
56
- raise KMS::CredentialsNotFound,
57
- "Could not receive GCP metadata response; #{e.class}: #{e.message}"
53
+ "GCE metadata response is invalid: '#{resp.body}'; #{e.class}: #{e.message}"
54
+ rescue ::Timeout::Error, IOError, SystemCallError, SocketError => e
55
+ raise KMS::CredentialsNotFound,
56
+ "Could not receive GCP metadata response; #{e.class}: #{e.message}"
58
57
  end
59
58
 
60
59
  def self.fetch_response(uri, req, timeout_holder)
61
60
  timeout_holder&.check_timeout!
62
61
  if timeout_holder&.timeout?
63
- ::Timeout.timeout(timeout_holder.remaining_timeout_sec, Error:TimeoutError) do
62
+ ::Timeout.timeout(timeout_holder.remaining_timeout_sec, Error: TimeoutError) do
64
63
  do_fetch(uri, req)
65
64
  end
66
65
  else
@@ -80,4 +79,3 @@ module Mongo
80
79
  end
81
80
  end
82
81
  end
83
-
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -43,9 +42,9 @@ module Mongo
43
42
  # @return [ String | nil ] GCP KMS endpoint.
44
43
  attr_reader :endpoint
45
44
 
46
- FORMAT_HINT = "GCP key document must be in the format: " +
47
- "{ project_id: 'PROJECT_ID', location: 'LOCATION', " +
48
- "key_ring: 'KEY-RING', key_name: 'KEY-NAME' }"
45
+ FORMAT_HINT = 'GCP key document must be in the format: ' +
46
+ "{ project_id: 'PROJECT_ID', location: 'LOCATION', " +
47
+ "key_ring: 'KEY-RING', key_name: 'KEY-NAME' }"
49
48
 
50
49
  # Creates a master key document object form a parameters hash.
51
50
  #
@@ -77,19 +76,16 @@ module Mongo
77
76
  # @return [ BSON::Document ] GCP KMS credentials in libmongocrypt format.
78
77
  def to_document
79
78
  return BSON::Document.new({}) if @empty
79
+
80
80
  BSON::Document.new({
81
- provider: 'gcp',
82
- projectId: project_id,
83
- location: location,
84
- keyRing: key_ring,
85
- keyName: key_name
86
- }).tap do |bson|
87
- unless key_version.nil?
88
- bson.update({ keyVersion: key_version })
89
- end
90
- unless endpoint.nil?
91
- bson.update({ endpoint: endpoint })
92
- end
81
+ provider: 'gcp',
82
+ projectId: project_id,
83
+ location: location,
84
+ keyRing: key_ring,
85
+ keyName: key_name
86
+ }).tap do |bson|
87
+ bson.update({ keyVersion: key_version }) unless key_version.nil?
88
+ bson.update({ endpoint: endpoint }) unless endpoint.nil?
93
89
  end
94
90
  end
95
91
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -18,4 +17,3 @@
18
17
  require 'mongo/crypt/kms/gcp/credentials'
19
18
  require 'mongo/crypt/kms/gcp/credentials_retriever'
20
19
  require 'mongo/crypt/kms/gcp/master_document'
21
-
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -33,7 +32,7 @@ module Mongo
33
32
  # @api private
34
33
  def_delegator :@opts, :empty?
35
34
 
36
- FORMAT_HINT = "KMIP KMS provider options must be in the format: " +
35
+ FORMAT_HINT = 'KMIP KMS provider options must be in the format: ' +
37
36
  "{ endpoint: 'ENDPOINT' }"
38
37
 
39
38
  # Creates a KMIP KMS credentials object form a parameters hash.
@@ -46,9 +45,9 @@ module Mongo
46
45
  # formatted.
47
46
  def initialize(opts)
48
47
  @opts = opts
49
- unless empty?
50
- @endpoint = validate_param(:endpoint, opts, FORMAT_HINT)
51
- end
48
+ return if empty?
49
+
50
+ @endpoint = validate_param(:endpoint, opts, FORMAT_HINT)
52
51
  end
53
52
 
54
53
  # Convert credentials object to a BSON document in libmongocrypt format.
@@ -56,13 +55,13 @@ module Mongo
56
55
  # @return [ BSON::Document ] Local KMS credentials in libmongocrypt format.
57
56
  def to_document
58
57
  return BSON::Document.new({}) if empty?
58
+
59
59
  BSON::Document.new({
60
- endpoint: endpoint,
61
- })
60
+ endpoint: endpoint,
61
+ })
62
62
  end
63
63
  end
64
64
  end
65
65
  end
66
66
  end
67
67
  end
68
-
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -32,7 +31,7 @@ module Mongo
32
31
  # @return [ String | nil ] KMIP KMS endpoint with optional port.
33
32
  attr_reader :endpoint
34
33
 
35
- FORMAT_HINT = "KMIP KMS key document must be in the format: " +
34
+ FORMAT_HINT = 'KMIP KMS key document must be in the format: ' +
36
35
  "{ key_id: 'KEY-ID', endpoint: 'ENDPOINT' }"
37
36
 
38
37
  # Creates a master key document object form a parameters hash.
@@ -60,8 +59,8 @@ module Mongo
60
59
  # @return [ BSON::Document ] KMIP KMS credentials in libmongocrypt format.
61
60
  def to_document
62
61
  BSON::Document.new({
63
- provider: 'kmip',
64
- }).tap do |bson|
62
+ provider: 'kmip',
63
+ }).tap do |bson|
65
64
  bson.update({ endpoint: endpoint }) unless endpoint.nil?
66
65
  bson.update({ keyId: key_id }) unless key_id.nil?
67
66
  end
@@ -71,4 +70,3 @@ module Mongo
71
70
  end
72
71
  end
73
72
  end
74
-
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -32,7 +31,7 @@ module Mongo
32
31
  # @api private
33
32
  def_delegator :@opts, :empty?
34
33
 
35
- FORMAT_HINT = "Local KMS provider options must be in the format: " +
34
+ FORMAT_HINT = 'Local KMS provider options must be in the format: ' +
36
35
  "{ key: 'MASTER-KEY' }"
37
36
 
38
37
  # Creates a local KMS credentials object form a parameters hash.
@@ -45,21 +44,21 @@ module Mongo
45
44
  # formatted.
46
45
  def initialize(opts)
47
46
  @opts = opts
48
- unless empty?
49
- @key = validate_param(:key, opts, FORMAT_HINT)
50
- end
47
+ return if empty?
48
+
49
+ @key = validate_param(:key, opts, FORMAT_HINT)
51
50
  end
52
51
 
53
52
  # @return [ BSON::Document ] Local KMS credentials in libmongocrypt format.
54
53
  def to_document
55
54
  return BSON::Document.new({}) if empty?
55
+
56
56
  BSON::Document.new({
57
- key: BSON::Binary.new(@key, :generic),
58
- })
57
+ key: BSON::Binary.new(@key, :generic),
58
+ })
59
59
  end
60
60
  end
61
61
  end
62
62
  end
63
63
  end
64
64
  end
65
-
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -23,21 +22,18 @@ module Mongo
23
22
  #
24
23
  # @api private
25
24
  class MasterKeyDocument
26
-
27
25
  # Creates a master key document object form a parameters hash.
28
26
  # This empty method is to keep a uniform interface for all KMS providers.
29
- def initialize(_opts)
30
- end
27
+ def initialize(_opts); end
31
28
 
32
29
  # Convert master key document object to a BSON document in libmongocrypt format.
33
30
  #
34
31
  # @return [ BSON::Document ] Local KMS credentials in libmongocrypt format.
35
32
  def to_document
36
- BSON::Document.new({ provider: "local" })
33
+ BSON::Document.new({ provider: 'local' })
37
34
  end
38
35
  end
39
36
  end
40
37
  end
41
38
  end
42
39
  end
43
-
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -18,15 +17,13 @@
18
17
  module Mongo
19
18
  module Crypt
20
19
  module KMS
21
-
22
20
  # KMS master key document object contains KMS master key parameters
23
21
  # that are used for creation of data keys.
24
22
  #
25
23
  # @api private
26
24
  class MasterKeyDocument
27
-
28
25
  # Known KMS provider names.
29
- KMS_PROVIDERS = %w(aws azure gcp kmip local).freeze
26
+ KMS_PROVIDERS = %w[aws azure gcp kmip local].freeze
30
27
 
31
28
  # Creates a master key document object form a parameters hash.
32
29
  #
@@ -38,19 +35,18 @@ module Mongo
38
35
  #
39
36
  # @raise [ ArgumentError ] If required options are missing or incorrectly.
40
37
  def initialize(kms_provider, options)
41
- if options.nil?
42
- raise ArgumentError.new('Key document options must not be nil')
43
- end
38
+ raise ArgumentError.new('Key document options must not be nil') if options.nil?
39
+
44
40
  master_key = options.fetch(:master_key, {})
45
41
  @key_document = case kms_provider.to_s
46
- when 'aws' then KMS::AWS::MasterKeyDocument.new(master_key)
47
- when 'azure' then KMS::Azure::MasterKeyDocument.new(master_key)
48
- when 'gcp' then KMS::GCP::MasterKeyDocument.new(master_key)
49
- when 'kmip' then KMS::KMIP::MasterKeyDocument.new(master_key)
50
- when 'local' then KMS::Local::MasterKeyDocument.new(master_key)
51
- else
52
- raise ArgumentError.new("KMS provider must be one of #{KMS_PROVIDERS}")
53
- end
42
+ when 'aws' then KMS::AWS::MasterKeyDocument.new(master_key)
43
+ when 'azure' then KMS::Azure::MasterKeyDocument.new(master_key)
44
+ when 'gcp' then KMS::GCP::MasterKeyDocument.new(master_key)
45
+ when 'kmip' then KMS::KMIP::MasterKeyDocument.new(master_key)
46
+ when 'local' then KMS::Local::MasterKeyDocument.new(master_key)
47
+ else
48
+ raise ArgumentError.new("KMS provider must be one of #{KMS_PROVIDERS}")
49
+ end
54
50
  end
55
51
 
56
52
  # Convert master key document object to a BSON document in libmongocrypt format.
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2021 MongoDB Inc.
5
4
  #
@@ -43,10 +42,11 @@ module Mongo
43
42
  def validate_param(key, opts, format_hint, required: true)
44
43
  value = opts.fetch(key)
45
44
  return nil if value.nil? && !required
45
+
46
46
  if value.nil?
47
47
  raise ArgumentError.new(
48
48
  "The #{key} option must be a String with at least one character; " \
49
- "currently have nil"
49
+ 'currently have nil'
50
50
  )
51
51
  end
52
52
  unless value.is_a?(String)
@@ -58,7 +58,7 @@ module Mongo
58
58
  if value.empty?
59
59
  raise ArgumentError.new(
60
60
  "The #{key} option must be a String with at least one character; " \
61
- "it is currently an empty string"
61
+ 'it is currently an empty string'
62
62
  )
63
63
  end
64
64
  value
@@ -68,8 +68,6 @@ module Mongo
68
68
  "The specified KMS provider options are invalid: #{opts}. " +
69
69
  format_hint
70
70
  )
71
- else
72
- nil
73
71
  end
74
72
  end
75
73
 
@@ -92,17 +90,17 @@ module Mongo
92
90
  "Incorrect TLS options for #{provider}: TLS is required"
93
91
  )
94
92
  end
95
- %i(
93
+ %i[
96
94
  ssl_verify_certificate
97
95
  ssl_verify_hostname
98
- ).each do |opt|
99
- if provider_opts[opt] == false
100
- raise ArgumentError.new(
101
- "Incorrect TLS options for #{provider}: " +
102
- 'Insecure TLS options prohibited, ' +
103
- "#{opt} cannot be set to false for KMS"
104
- )
105
- end
96
+ ].each do |opt|
97
+ next unless provider_opts[opt] == false
98
+
99
+ raise ArgumentError.new(
100
+ "Incorrect TLS options for #{provider}: " +
101
+ 'Insecure TLS options prohibited, ' +
102
+ "#{opt} cannot be set to false for KMS"
103
+ )
106
104
  end
107
105
  end
108
106
  opts
@@ -113,8 +111,8 @@ module Mongo
113
111
  end
114
112
  end
115
113
 
116
- require "mongo/crypt/kms/credentials"
117
- require "mongo/crypt/kms/master_key_document"
114
+ require 'mongo/crypt/kms/credentials'
115
+ require 'mongo/crypt/kms/master_key_document'
118
116
  require 'mongo/crypt/kms/aws'
119
117
  require 'mongo/crypt/kms/azure'
120
118
  require 'mongo/crypt/kms/gcp'
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2020 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  module Crypt
20
-
21
19
  # Wraps a libmongocrypt mongocrypt_kms_ctx_t object. Contains information
22
20
  # about making an HTTP request to fetch information about a KMS
23
21
  # data key.
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2020 MongoDB Inc.
5
4
  #
@@ -17,13 +16,11 @@
17
16
 
18
17
  module Mongo
19
18
  module Crypt
20
-
21
19
  # A Context object initialized specifically for the purpose of rewrapping
22
- # data keys (decrypting and re-rencryting using a new KEK).
20
+ # data keys (decrypting and re-encrypting using a new KEK).
23
21
  #
24
22
  # @api private
25
23
  class RewrapManyDataKeyContext < Context
26
-
27
24
  # Create a new RewrapManyDataKeyContext object
28
25
  #
29
26
  # @param [ Mongo::Crypt::Handle ] mongocrypt a Handle that
@@ -36,9 +33,7 @@ module Mongo
36
33
  # key document that contains master encryption key parameters.
37
34
  def initialize(mongocrypt, io, filter, master_key_document)
38
35
  super(mongocrypt, io)
39
- if master_key_document
40
- Binding.ctx_setopt_key_encryption_key(self, master_key_document.to_document)
41
- end
36
+ Binding.ctx_setopt_key_encryption_key(self, master_key_document.to_document) if master_key_document
42
37
  Binding.ctx_rewrap_many_datakey_init(self, filter)
43
38
  end
44
39
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2022 MongoDB Inc.
5
4
  #
@@ -17,12 +16,11 @@
17
16
 
18
17
  module Mongo
19
18
  module Crypt
20
- # Represent result of the rewrap many data ke operation.
19
+ # Represent result of the rewrap many data key operation.
21
20
  #
22
21
  # @api semiprivate
23
22
  class RewrapManyDataKeyResult
24
-
25
- # @returns [ BulkWrite::Result ] the result of the bulk write operation
23
+ # @return [ BulkWrite::Result ] the result of the bulk write operation
26
24
  # used to update the key vault collection with rewrapped data keys.
27
25
  attr_reader :bulk_write_result
28
26
 
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  ## Copyright (C) 2019-2020 MongoDB Inc.
5
4
  #
@@ -19,7 +18,6 @@ require 'ffi'
19
18
 
20
19
  module Mongo
21
20
  module Crypt
22
-
23
21
  # A wrapper around mongocrypt_status_t, representing the status of
24
22
  # a mongocrypt_t handle.
25
23
  #
@@ -39,9 +37,9 @@ module Mongo
39
37
  # FFI::AutoPointer uses a custom release strategy to automatically free
40
38
  # the pointer once this object goes out of scope
41
39
  @status = pointer || FFI::AutoPointer.new(
42
- Binding.mongocrypt_status_new,
43
- Binding.method(:mongocrypt_status_destroy)
44
- )
40
+ Binding.mongocrypt_status_new,
41
+ Binding.method(:mongocrypt_status_destroy)
42
+ )
45
43
  end
46
44
 
47
45
  # Initialize a Status object from an existing pointer to a
@@ -52,7 +50,7 @@ module Mongo
52
50
  #
53
51
  # @return [ Mongo::Crypt::Status ] A new Status object
54
52
  def self.from_pointer(pointer)
55
- self.new(pointer: pointer)
53
+ new(pointer: pointer)
56
54
  end
57
55
 
58
56
  # Set a label, code, and message on the Status
@@ -63,10 +61,10 @@ module Mongo
63
61
  #
64
62
  # @return [ Mongo::Crypt::Status ] returns self
65
63
  def update(label, code, message)
66
- unless [:ok, :error_client, :error_kms].include?(label)
64
+ unless %i[ok error_client error_kms].include?(label)
67
65
  raise ArgumentError.new(
68
66
  "#{label} is an invalid value for a Mongo::Crypt::Status label. " +
69
- "Label must have one of the following values: :ok, :error_client, :error_kms"
67
+ 'Label must have one of the following values: :ok, :error_client, :error_kms'
70
68
  )
71
69
  end
72
70
 
@@ -109,7 +107,7 @@ module Mongo
109
107
  # Returns the reference to the underlying mongocrypt_status_t
110
108
  # object
111
109
  #
112
- # @return [ FFI::Pointer ] Pointer to the underlying mongocrypt_status_t oject
110
+ # @return [ FFI::Pointer ] Pointer to the underlying mongocrypt_status_t object
113
111
  def ref
114
112
  @status
115
113
  end
@@ -127,11 +125,11 @@ module Mongo
127
125
  def raise_crypt_error(kms: false)
128
126
  return if ok?
129
127
 
130
- if kms || label == :error_kms
131
- error = Error::KmsError.new(message, code: code)
132
- else
133
- error = Error::CryptError.new(message, code: code)
134
- end
128
+ error = if kms || label == :error_kms
129
+ Error::KmsError.new(message, code: code)
130
+ else
131
+ Error::CryptError.new(message, code: code)
132
+ end
135
133
 
136
134
  raise error
137
135
  end
data/lib/mongo/crypt.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2019-2020 MongoDB Inc.
5
4
  #
@@ -101,9 +101,10 @@ module Mongo
101
101
  end
102
102
 
103
103
  def check_no_override_inside_transaction!(opts, session)
104
- return unless opts[:operation_timeout_ms] && session&.with_transaction_deadline
104
+ return unless opts[:operation_timeout_ms] && session&.inside_with_transaction?
105
105
 
106
- raise ArgumentError, 'Cannot override timeout_ms inside with_transaction block'
106
+ raise Mongo::Error::InvalidTransactionOperation,
107
+ 'timeoutMS cannot be overridden inside a withTransaction callback'
107
108
  end
108
109
 
109
110
  def calculate_deadline_from_timeout_ms(operation_timeout_ms)
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2021 MongoDB Inc.
5
4
  #
@@ -17,14 +16,12 @@
17
16
 
18
17
  module Mongo
19
18
  class Cursor
20
-
21
19
  # This class contains the operation specification for KillCursors.
22
20
  #
23
21
  # Its purpose is to ensure we don't misspell attribute names accidentally.
24
22
  #
25
23
  # @api private
26
24
  class KillSpec
27
-
28
25
  def initialize(
29
26
  cursor_id:,
30
27
  coll_name:,
@@ -44,12 +41,12 @@ module Mongo
44
41
  end
45
42
 
46
43
  attr_reader :cursor_id,
47
- :coll_name,
48
- :db_name,
49
- :connection_global_id,
50
- :server_address,
51
- :session,
52
- :connection
44
+ :coll_name,
45
+ :db_name,
46
+ :connection_global_id,
47
+ :server_address,
48
+ :session,
49
+ :connection
53
50
 
54
51
  def ==(other)
55
52
  cursor_id == other.cursor_id &&
@@ -61,7 +58,7 @@ module Mongo
61
58
  end
62
59
 
63
60
  def eql?(other)
64
- self.==(other)
61
+ self == other
65
62
  end
66
63
 
67
64
  def hash