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-2020 MongoDB Inc.
5
4
  #
@@ -17,9 +16,8 @@
17
16
 
18
17
  module Mongo
19
18
  module Crypt
20
-
21
19
  # A wrapper around mongocrypt_ctx_t, which manages the
22
- # state machine for encryption and decription.
20
+ # state machine for encryption and decryption.
23
21
  #
24
22
  # This class is a superclass that defines shared methods
25
23
  # amongst contexts that are initialized for different purposes
@@ -109,6 +107,16 @@ module Mongo
109
107
  end
110
108
  end
111
109
 
110
+ # Which BSON mode to use when creating documents from the outcome of
111
+ # the state machine. The default is :bson, which creates BSON::Document
112
+ # with BSON types. Subclasses may override this method to
113
+ # change this behavior.
114
+ #
115
+ # @return [ Symbol, nil ] The BSON mode.
116
+ def bson_mode
117
+ :bson
118
+ end
119
+
112
120
  private
113
121
 
114
122
  def provide_markings(timeout_ms)
@@ -140,7 +148,7 @@ module Mongo
140
148
  end
141
149
 
142
150
  def feed_kms
143
- while (kms_context = Binding.ctx_next_kms_ctx(self)) do
151
+ while (kms_context = Binding.ctx_next_kms_ctx(self))
144
152
  begin
145
153
  delay = Binding.kms_ctx_usleep(kms_context)
146
154
  sleep(delay / 1_000_000.0) unless delay.nil?
@@ -148,15 +156,10 @@ module Mongo
148
156
  tls_options = @mongocrypt_handle.kms_tls_options(provider)
149
157
  @encryption_io.feed_kms(kms_context, tls_options)
150
158
  rescue Error::KmsError => e
151
- if e.network_error?
152
- if Binding.kms_ctx_fail(kms_context)
153
- next
154
- else
155
- raise
156
- end
157
- else
158
- raise
159
- end
159
+ raise unless e.network_error?
160
+ next if Binding.kms_ctx_fail(kms_context)
161
+
162
+ raise
160
163
  end
161
164
  end
162
165
  Binding.ctx_kms_done(self)
@@ -185,20 +188,20 @@ module Mongo
185
188
  # KMS providers.
186
189
  def retrieve_kms_credentials(timeout_holder)
187
190
  providers = {}
188
- if kms_providers.aws&.empty?
191
+ if kms_providers.aws && kms_providers.aws.empty?
189
192
  begin
190
193
  aws_credentials = Mongo::Auth::Aws::CredentialsRetriever.new.credentials(timeout_holder)
191
194
  rescue Auth::Aws::CredentialsNotFound
192
195
  raise Error::CryptError.new(
193
- "Could not locate AWS credentials (checked environment variables, ECS and EC2 metadata)"
196
+ 'Could not locate AWS credentials (checked environment variables, ECS and EC2 metadata)'
194
197
  )
195
198
  end
196
199
  providers[:aws] = aws_credentials.to_h
197
200
  end
198
- if kms_providers.gcp&.empty?
201
+ if kms_providers.gcp && kms_providers.gcp.empty?
199
202
  providers[:gcp] = { access_token: gcp_access_token(timeout_holder) }
200
203
  end
201
- if kms_providers.azure&.empty?
204
+ if kms_providers.azure && kms_providers.azure.empty?
202
205
  providers[:azure] = { access_token: azure_access_token(timeout_holder) }
203
206
  end
204
207
  KMS::Credentials.new(providers)
@@ -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 creating
22
20
  # a data key in the key management system.
23
21
  #
24
22
  # @api private
25
23
  class DataKeyContext < Context
26
-
27
24
  # Create a new DataKeyContext object
28
25
  #
29
26
  # @param [ Mongo::Crypt::Handle ] mongocrypt a Handle that
@@ -50,14 +47,12 @@ module Mongo
50
47
 
51
48
  # Set the alt names option on the context
52
49
  def set_key_alt_names(key_alt_names)
53
- unless key_alt_names.is_a?(Array)
54
- raise ArgumentError.new, 'The :key_alt_names option must be an Array'
55
- end
50
+ raise ArgumentError.new, 'The :key_alt_names option must be an Array' unless key_alt_names.is_a?(Array)
56
51
 
57
52
  unless key_alt_names.all? { |key_alt_name| key_alt_name.is_a?(String) }
58
53
  raise ArgumentError.new(
59
54
  "#{key_alt_names} contains an invalid alternate key name. All " +
60
- "values of the :key_alt_names option Array must be Strings"
55
+ 'values of the :key_alt_names option Array must be Strings'
61
56
  )
62
57
  end
63
58
 
@@ -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 class that implements I/O methods between the driver and
22
20
  # the MongoDB server or mongocryptd.
23
21
  #
24
22
  # @api private
25
23
  class EncryptionIO
26
-
27
24
  # Timeout used for TLS socket connection, reading, and writing.
28
25
  # There is no specific timeout written in the spec. See SPEC-1394
29
26
  # for a discussion and updates on what this timeout should be.
@@ -55,8 +52,7 @@ module Mongo
55
52
  # @note This class expects that the key_vault_client and key_vault_namespace
56
53
  # options are not nil and are in the correct format.
57
54
  def initialize(
58
- client: nil, mongocryptd_client: nil, key_vault_namespace:,
59
- key_vault_client:, metadata_client:, mongocryptd_options: {}
55
+ key_vault_namespace:, key_vault_client:, metadata_client:, client: nil, mongocryptd_client: nil, mongocryptd_options: {}
60
56
  )
61
57
  validate_key_vault_client!(key_vault_client)
62
58
  validate_key_vault_namespace!(key_vault_namespace)
@@ -104,7 +100,8 @@ module Mongo
104
100
  # @return [ Hash ] The collection information
105
101
  def collection_info(db_name, filter, timeout_ms: nil)
106
102
  unless @metadata_client
107
- raise ArgumentError, 'collection_info requires metadata_client to have been passed to the constructor, but it was not'
103
+ raise ArgumentError,
104
+ 'collection_info requires metadata_client to have been passed to the constructor, but it was not'
108
105
  end
109
106
 
110
107
  @metadata_client
@@ -124,7 +121,8 @@ module Mongo
124
121
  # @return [ Hash ] The marked command
125
122
  def mark_command(cmd, timeout_ms: nil)
126
123
  unless @mongocryptd_client
127
- raise ArgumentError, 'mark_command requires mongocryptd_client to have been passed to the constructor, but it was not'
124
+ raise ArgumentError,
125
+ 'mark_command requires mongocryptd_client to have been passed to the constructor, but it was not'
128
126
  end
129
127
 
130
128
  # Ensure the response from mongocryptd is deserialized with { mode: :bson }
@@ -143,7 +141,7 @@ module Mongo
143
141
  response = @mongocryptd_client.database.command(cmd, options)
144
142
  end
145
143
 
146
- return response.first
144
+ response.first
147
145
  end
148
146
 
149
147
  # Get information about the remote KMS encryption key and feed it to the the
@@ -161,16 +159,14 @@ module Mongo
161
159
  def feed_kms(kms_context, tls_options, timeout_ms: nil)
162
160
  with_ssl_socket(kms_context.endpoint, tls_options) do |ssl_socket|
163
161
  Timeout.timeout(timeout_ms || SOCKET_TIMEOUT, Error::SocketTimeoutError,
164
- 'Socket write operation timed out'
165
- ) do
162
+ 'Socket write operation timed out') do
166
163
  ssl_socket.syswrite(kms_context.message)
167
164
  end
168
165
 
169
166
  bytes_needed = kms_context.bytes_needed
170
- while bytes_needed > 0 do
167
+ while bytes_needed > 0
171
168
  bytes = Timeout.timeout(timeout_ms || SOCKET_TIMEOUT, Error::SocketTimeoutError,
172
- 'Socket read operation timed out'
173
- ) do
169
+ 'Socket read operation timed out') do
174
170
  ssl_socket.sysread(bytes_needed)
175
171
  end
176
172
 
@@ -227,7 +223,7 @@ module Mongo
227
223
  {
228
224
  '$filter' => {
229
225
  input: '$keyAltNames',
230
- cond: { '$ne' => [ '$$this', key_alt_name ] }
226
+ cond: { '$ne' => [ '$$this', key_alt_name ] }
231
227
  }
232
228
  }
233
229
  ]
@@ -251,28 +247,24 @@ module Mongo
251
247
  private
252
248
 
253
249
  def validate_key_vault_client!(key_vault_client)
254
- unless key_vault_client
255
- raise ArgumentError.new('The :key_vault_client option cannot be nil')
256
- end
250
+ raise ArgumentError.new('The :key_vault_client option cannot be nil') unless key_vault_client
257
251
 
258
- unless key_vault_client.is_a?(Client)
259
- raise ArgumentError.new(
260
- 'The :key_vault_client option must be an instance of Mongo::Client'
261
- )
262
- end
252
+ return if key_vault_client.is_a?(Client)
253
+
254
+ raise ArgumentError.new(
255
+ 'The :key_vault_client option must be an instance of Mongo::Client'
256
+ )
263
257
  end
264
258
 
265
259
  def validate_key_vault_namespace!(key_vault_namespace)
266
- unless key_vault_namespace
267
- raise ArgumentError.new('The :key_vault_namespace option cannot be nil')
268
- end
260
+ raise ArgumentError.new('The :key_vault_namespace option cannot be nil') unless key_vault_namespace
269
261
 
270
- unless key_vault_namespace.split('.').length == 2
271
- raise ArgumentError.new(
272
- "#{key_vault_namespace} is an invalid key vault namespace." +
273
- "The :key_vault_namespace option must be in the format database.collection"
274
- )
275
- end
262
+ return if key_vault_namespace.split('.').length == 2
263
+
264
+ raise ArgumentError.new(
265
+ "#{key_vault_namespace} is an invalid key vault namespace." +
266
+ 'The :key_vault_namespace option must be in the format database.collection'
267
+ )
276
268
  end
277
269
 
278
270
  # Use the provided key vault client and namespace to construct a
@@ -309,8 +301,7 @@ module Mongo
309
301
  end
310
302
 
311
303
  if mongocryptd_spawn_path.nil? ||
312
- mongocryptd_spawn_args.nil? || mongocryptd_spawn_args.empty?
313
- then
304
+ mongocryptd_spawn_args.nil? || mongocryptd_spawn_args.empty?
314
305
  raise ArgumentError.new(
315
306
  'Cannot spawn mongocryptd process when no :mongocryptd_spawn_args ' +
316
307
  'option is provided. To start mongocryptd without arguments, pass ' +
@@ -322,7 +313,7 @@ module Mongo
322
313
  Process.spawn(
323
314
  mongocryptd_spawn_path,
324
315
  *mongocryptd_spawn_args,
325
- [:out, :err]=>'/dev/null'
316
+ %i[out err] => '/dev/null'
326
317
  )
327
318
  rescue Errno::ENOENT => e
328
319
  raise Error::MongocryptdSpawnError.new(
@@ -351,12 +342,10 @@ module Mongo
351
342
  address = begin
352
343
  host, port = endpoint.split(':')
353
344
  port ||= 443 # All supported KMS APIs use this port by default.
354
- Address.new([host, port].join(':'))
345
+ Address.new([ host, port ].join(':'))
355
346
  end
356
347
  socket_options = { ssl: true, csot: csot }.tap do |opts|
357
- if csot
358
- opts[:connect_timeout] = (timeout_ms / 1_000.0)
359
- end
348
+ opts[:connect_timeout] = (timeout_ms / 1_000.0) if csot
360
349
  end
361
350
  mongo_socket = address.socket(
362
351
  SOCKET_TIMEOUT,
@@ -366,7 +355,8 @@ module Mongo
366
355
  rescue Error::KmsError
367
356
  raise
368
357
  rescue StandardError => e
369
- raise Error::KmsError.new("Error when connecting to KMS provider: #{e.class}: #{e.message}", network_error: true)
358
+ raise Error::KmsError.new("Error when connecting to KMS provider: #{e.class}: #{e.message}",
359
+ network_error: true)
370
360
  ensure
371
361
  mongo_socket&.close
372
362
  end
@@ -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,12 +16,10 @@
17
16
 
18
17
  module Mongo
19
18
  module Crypt
20
-
21
19
  # A Context object initialized for explicit decryption
22
20
  #
23
21
  # @api private
24
22
  class ExplicitDecryptionContext < Context
25
-
26
23
  # Create a new ExplicitDecryptionContext object
27
24
  #
28
25
  # @param [ Mongo::Crypt::Handle ] mongocrypt a Handle that
@@ -38,6 +35,15 @@ module Mongo
38
35
  # explicit decryption
39
36
  Binding.ctx_explicit_decrypt_init(self, doc)
40
37
  end
38
+
39
+ # Which BSON mode to use when creating documents from the outcome of
40
+ # the state machine. The returned value is based on the
41
+ # +Mongo::Config.csfle_convert_to_ruby_types+ option.
42
+ #
43
+ # @return [ Symbol, nil ] The BSON mode.
44
+ def bson_mode
45
+ Mongo::Config.csfle_convert_to_ruby_types ? nil : :bson
46
+ end
41
47
  end
42
48
  end
43
49
  end
@@ -317,7 +317,7 @@ module Mongo
317
317
  KMS::MasterKeyDocument.new(provider, options)
318
318
  end
319
319
 
320
- # Returns the corresponding update document for each for of the given
320
+ # Returns the corresponding update document for each of the given
321
321
  # data key documents.
322
322
  #
323
323
  # @param [ Array<Hash> ] documents the data key documents
@@ -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,12 +16,10 @@
17
16
 
18
17
  module Mongo
19
18
  module Crypt
20
-
21
19
  # A Context object initialized for explicit encryption
22
20
  #
23
21
  # @api private
24
22
  class ExplicitEncryptionContext < Context
25
-
26
23
  # Create a new ExplicitEncryptionContext object
27
24
  #
28
25
  # @param [ Mongo::Crypt::Handle ] mongocrypt a Handle that
@@ -76,6 +73,7 @@ module Mongo
76
73
  end
77
74
 
78
75
  private
76
+
79
77
  def set_key_opts(options)
80
78
  if options[:key_id].nil? && options[:key_alt_name].nil?
81
79
  raise ArgumentError.new(
@@ -99,31 +97,26 @@ module Mongo
99
97
 
100
98
  def set_key_id(key_id)
101
99
  unless key_id.is_a?(BSON::Binary) &&
102
- key_id.type == :uuid
103
- raise ArgumentError.new(
104
- "Expected the :key_id option to be a BSON::Binary object with " +
105
- "type :uuid. #{key_id} is an invalid :key_id option"
106
- )
107
- end
108
- Binding.ctx_setopt_key_id(self, key_id.data)
100
+ key_id.type == :uuid
101
+ raise ArgumentError.new(
102
+ 'Expected the :key_id option to be a BSON::Binary object with ' +
103
+ "type :uuid. #{key_id} is an invalid :key_id option"
104
+ )
105
+ end
106
+ Binding.ctx_setopt_key_id(self, key_id.data)
109
107
  end
110
108
 
111
109
  def set_key_alt_name(key_alt_name)
112
- unless key_alt_name.is_a?(String)
113
- raise ArgumentError.new(':key_alt_name option must be a String')
114
- end
115
- Binding.ctx_setopt_key_alt_names(self, [key_alt_name])
110
+ raise ArgumentError.new(':key_alt_name option must be a String') unless key_alt_name.is_a?(String)
111
+
112
+ Binding.ctx_setopt_key_alt_names(self, [ key_alt_name ])
116
113
  end
117
114
 
118
115
  def set_algorithm_opts(options)
119
116
  Binding.ctx_setopt_algorithm(self, options[:algorithm])
120
- if %w(Indexed Range).include?(options[:algorithm])
121
- if options[:contention_factor]
122
- Binding.ctx_setopt_contention_factor(self, options[:contention_factor])
123
- end
124
- if options[:query_type]
125
- Binding.ctx_setopt_query_type(self, options[:query_type])
126
- end
117
+ if %w[Indexed Range].include?(options[:algorithm])
118
+ Binding.ctx_setopt_contention_factor(self, options[:contention_factor]) if options[:contention_factor]
119
+ Binding.ctx_setopt_query_type(self, options[:query_type]) if options[:query_type]
127
120
  else
128
121
  if options[:contention_factor]
129
122
  raise ArgumentError.new(':contention_factor is allowed only for "Indexed" or "Range" algorithms')
@@ -132,19 +125,15 @@ module Mongo
132
125
  raise ArgumentError.new(':query_type is allowed only for "Indexed" or "Range" algorithms')
133
126
  end
134
127
  end
135
- if options[:algorithm] == 'Range'
136
- Binding.ctx_setopt_algorithm_range(self, convert_range_opts(options[:range_opts]))
137
- end
128
+ return unless options[:algorithm] == 'Range'
129
+
130
+ Binding.ctx_setopt_algorithm_range(self, convert_range_opts(options[:range_opts]))
138
131
  end
139
132
 
140
133
  def convert_range_opts(range_opts)
141
134
  range_opts.dup.tap do |opts|
142
- if opts[:sparsity] && !opts[:sparsity].is_a?(BSON::Int64)
143
- opts[:sparsity] = BSON::Int64.new(opts[:sparsity])
144
- end
145
- if opts[:trim_factor]
146
- opts[:trimFactor] = opts.delete(:trim_factor)
147
- end
135
+ opts[:sparsity] = BSON::Int64.new(opts[:sparsity]) if opts[:sparsity] && !opts[:sparsity].is_a?(BSON::Int64)
136
+ opts[:trimFactor] = opts.delete(:trim_factor) if opts[:trim_factor]
148
137
  end
149
138
  end
150
139
  end
@@ -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
  # A Context object initialized for explicit expression encryption.
22
20
  #
23
21
  # @api private