mongo 2.23.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 (463) 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 +230 -275
  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 +148 -183
  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.rb +5 -10
  71. data/lib/mongo/collection/view/builder/aggregation.rb +6 -9
  72. data/lib/mongo/collection/view/builder/map_reduce.rb +18 -17
  73. data/lib/mongo/collection/view/builder.rb +0 -1
  74. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -8
  75. data/lib/mongo/collection/view/change_stream.rb +59 -58
  76. data/lib/mongo/collection/view/explainable.rb +11 -20
  77. data/lib/mongo/collection/view/immutable.rb +1 -3
  78. data/lib/mongo/collection/view/iterable.rb +35 -28
  79. data/lib/mongo/collection/view/map_reduce.rb +20 -25
  80. data/lib/mongo/collection/view/readable.rb +50 -57
  81. data/lib/mongo/collection/view/writable.rb +56 -72
  82. data/lib/mongo/collection/view.rb +9 -8
  83. data/lib/mongo/collection.rb +63 -76
  84. data/lib/mongo/condition_variable.rb +4 -4
  85. data/lib/mongo/config/options.rb +0 -3
  86. data/lib/mongo/config/validators/option.rb +3 -5
  87. data/lib/mongo/config.rb +2 -4
  88. data/lib/mongo/crypt/auto_decryption_context.rb +0 -3
  89. data/lib/mongo/crypt/auto_encrypter.rb +34 -43
  90. data/lib/mongo/crypt/auto_encryption_context.rb +0 -3
  91. data/lib/mongo/crypt/binary.rb +5 -9
  92. data/lib/mongo/crypt/binding.rb +149 -155
  93. data/lib/mongo/crypt/context.rb +10 -17
  94. data/lib/mongo/crypt/data_key_context.rb +2 -7
  95. data/lib/mongo/crypt/encryption_io.rb +29 -39
  96. data/lib/mongo/crypt/explicit_decryption_context.rb +0 -3
  97. data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
  98. data/lib/mongo/crypt/explicit_encryption_context.rb +19 -30
  99. data/lib/mongo/crypt/explicit_encryption_expression_context.rb +0 -2
  100. data/lib/mongo/crypt/handle.rb +42 -48
  101. data/lib/mongo/crypt/hooks.rb +12 -15
  102. data/lib/mongo/crypt/kms/aws/credentials.rb +12 -16
  103. data/lib/mongo/crypt/kms/aws/master_document.rb +6 -9
  104. data/lib/mongo/crypt/kms/aws.rb +0 -2
  105. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +2 -7
  106. data/lib/mongo/crypt/kms/azure/master_document.rb +15 -19
  107. data/lib/mongo/crypt/kms/azure.rb +0 -1
  108. data/lib/mongo/crypt/kms/credentials.rb +13 -27
  109. data/lib/mongo/crypt/kms/gcp/credentials.rb +12 -14
  110. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +7 -9
  111. data/lib/mongo/crypt/kms/gcp/master_document.rb +12 -16
  112. data/lib/mongo/crypt/kms/gcp.rb +0 -2
  113. data/lib/mongo/crypt/kms/kmip/credentials.rb +7 -8
  114. data/lib/mongo/crypt/kms/kmip/master_document.rb +3 -5
  115. data/lib/mongo/crypt/kms/kmip.rb +0 -1
  116. data/lib/mongo/crypt/kms/local/credentials.rb +7 -8
  117. data/lib/mongo/crypt/kms/local/master_document.rb +2 -6
  118. data/lib/mongo/crypt/kms/local.rb +0 -1
  119. data/lib/mongo/crypt/kms/master_key_document.rb +11 -15
  120. data/lib/mongo/crypt/kms.rb +14 -16
  121. data/lib/mongo/crypt/kms_context.rb +0 -2
  122. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +2 -7
  123. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +2 -4
  124. data/lib/mongo/crypt/status.rb +12 -14
  125. data/lib/mongo/crypt.rb +0 -1
  126. data/lib/mongo/csot_timeout_holder.rb +3 -2
  127. data/lib/mongo/cursor/kill_spec.rb +7 -10
  128. data/lib/mongo/cursor.rb +74 -64
  129. data/lib/mongo/cursor_host.rb +8 -10
  130. data/lib/mongo/database/view.rb +16 -37
  131. data/lib/mongo/database.rb +52 -56
  132. data/lib/mongo/dbref.rb +0 -1
  133. data/lib/mongo/distinguishing_semaphore.rb +0 -1
  134. data/lib/mongo/error/auth_error.rb +0 -2
  135. data/lib/mongo/error/bad_load_balancer_target.rb +0 -2
  136. data/lib/mongo/error/bulk_write_error.rb +7 -10
  137. data/lib/mongo/error/change_stream_resumable.rb +0 -2
  138. data/lib/mongo/error/client_closed.rb +0 -2
  139. data/lib/mongo/error/closed_stream.rb +1 -4
  140. data/lib/mongo/error/connection_check_out_timeout.rb +3 -6
  141. data/lib/mongo/error/connection_perished.rb +0 -2
  142. data/lib/mongo/error/connection_unavailable.rb +0 -2
  143. data/lib/mongo/error/credential_check_error.rb +0 -2
  144. data/lib/mongo/error/crypt_error.rb +0 -2
  145. data/lib/mongo/error/extra_file_chunk.rb +1 -4
  146. data/lib/mongo/error/failed_string_prep_validation.rb +5 -6
  147. data/lib/mongo/error/file_not_found.rb +0 -3
  148. data/lib/mongo/error/handshake_error.rb +0 -2
  149. data/lib/mongo/error/insufficient_iteration_count.rb +1 -4
  150. data/lib/mongo/error/internal_driver_error.rb +0 -2
  151. data/lib/mongo/error/invalid_address.rb +0 -2
  152. data/lib/mongo/error/invalid_application_name.rb +0 -3
  153. data/lib/mongo/error/invalid_bulk_operation.rb +1 -4
  154. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -4
  155. data/lib/mongo/error/invalid_collection_name.rb +1 -4
  156. data/lib/mongo/error/invalid_config_option.rb +0 -3
  157. data/lib/mongo/error/invalid_cursor_operation.rb +0 -2
  158. data/lib/mongo/error/invalid_database_name.rb +1 -4
  159. data/lib/mongo/error/invalid_document.rb +1 -4
  160. data/lib/mongo/error/invalid_file.rb +0 -3
  161. data/lib/mongo/error/invalid_file_revision.rb +0 -3
  162. data/lib/mongo/error/invalid_min_pool_size.rb +0 -3
  163. data/lib/mongo/error/invalid_nonce.rb +0 -3
  164. data/lib/mongo/error/invalid_read_concern.rb +2 -4
  165. data/lib/mongo/error/invalid_read_option.rb +0 -3
  166. data/lib/mongo/error/invalid_replacement_document.rb +2 -5
  167. data/lib/mongo/error/invalid_server_auth_host.rb +0 -2
  168. data/lib/mongo/error/invalid_server_auth_response.rb +0 -2
  169. data/lib/mongo/error/invalid_server_preference.rb +7 -16
  170. data/lib/mongo/error/invalid_session.rb +1 -4
  171. data/lib/mongo/error/invalid_signature.rb +0 -3
  172. data/lib/mongo/error/invalid_transaction_operation.rb +5 -8
  173. data/lib/mongo/error/invalid_txt_record.rb +0 -2
  174. data/lib/mongo/error/invalid_update_document.rb +2 -5
  175. data/lib/mongo/error/invalid_uri.rb +1 -4
  176. data/lib/mongo/error/invalid_write_concern.rb +2 -5
  177. data/lib/mongo/error/kms_error.rb +0 -2
  178. data/lib/mongo/error/labelable.rb +0 -3
  179. data/lib/mongo/error/lint_error.rb +0 -2
  180. data/lib/mongo/error/max_bson_size.rb +8 -11
  181. data/lib/mongo/error/max_message_size.rb +2 -5
  182. data/lib/mongo/error/mismatched_domain.rb +0 -2
  183. data/lib/mongo/error/missing_connection.rb +0 -2
  184. data/lib/mongo/error/missing_file_chunk.rb +0 -3
  185. data/lib/mongo/error/missing_password.rb +0 -2
  186. data/lib/mongo/error/missing_resume_token.rb +1 -4
  187. data/lib/mongo/error/missing_scram_server_signature.rb +2 -4
  188. data/lib/mongo/error/missing_service_id.rb +0 -2
  189. data/lib/mongo/error/mongocryptd_spawn_error.rb +0 -2
  190. data/lib/mongo/error/multi_index_drop.rb +0 -3
  191. data/lib/mongo/error/need_primary_server.rb +0 -2
  192. data/lib/mongo/error/no_server_available.rb +3 -8
  193. data/lib/mongo/error/no_service_connection_available.rb +1 -3
  194. data/lib/mongo/error/no_srv_records.rb +0 -2
  195. data/lib/mongo/error/notable.rb +8 -16
  196. data/lib/mongo/error/operation_failure.rb +22 -35
  197. data/lib/mongo/error/parser.rb +33 -75
  198. data/lib/mongo/error/pool_cleared_error.rb +1 -3
  199. data/lib/mongo/error/pool_closed_error.rb +0 -3
  200. data/lib/mongo/error/pool_error.rb +0 -3
  201. data/lib/mongo/error/pool_paused_error.rb +0 -2
  202. data/lib/mongo/error/raise_original_error.rb +1 -3
  203. data/lib/mongo/error/read_write_retryable.rb +14 -17
  204. data/lib/mongo/error/sdam_error_detection.rb +3 -5
  205. data/lib/mongo/error/server_api_conflict.rb +0 -2
  206. data/lib/mongo/error/server_certificate_revoked.rb +0 -2
  207. data/lib/mongo/error/server_not_usable.rb +0 -2
  208. data/lib/mongo/error/session_ended.rb +1 -3
  209. data/lib/mongo/error/session_not_materialized.rb +1 -3
  210. data/lib/mongo/error/sessions_not_supported.rb +1 -4
  211. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -4
  212. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -4
  213. data/lib/mongo/error/socket_error.rb +0 -2
  214. data/lib/mongo/error/socket_timeout_error.rb +0 -2
  215. data/lib/mongo/error/transactions_not_supported.rb +3 -6
  216. data/lib/mongo/error/unchangeable_collection_option.rb +1 -4
  217. data/lib/mongo/error/unexpected_chunk_length.rb +0 -3
  218. data/lib/mongo/error/unexpected_response.rb +1 -4
  219. data/lib/mongo/error/unknown_payload_type.rb +0 -3
  220. data/lib/mongo/error/unmet_dependency.rb +0 -2
  221. data/lib/mongo/error/unsupported_array_filters.rb +3 -24
  222. data/lib/mongo/error/unsupported_collation.rb +3 -24
  223. data/lib/mongo/error/unsupported_features.rb +0 -2
  224. data/lib/mongo/error/unsupported_message_type.rb +0 -2
  225. data/lib/mongo/error/unsupported_option.rb +19 -21
  226. data/lib/mongo/error/write_retryable.rb +0 -2
  227. data/lib/mongo/error.rb +10 -24
  228. data/lib/mongo/event/base.rb +0 -2
  229. data/lib/mongo/event/listeners.rb +0 -3
  230. data/lib/mongo/event/publisher.rb +0 -3
  231. data/lib/mongo/event/subscriber.rb +0 -4
  232. data/lib/mongo/event.rb +4 -6
  233. data/lib/mongo/grid/file/chunk.rb +7 -10
  234. data/lib/mongo/grid/file/info.rb +20 -24
  235. data/lib/mongo/grid/file.rb +7 -8
  236. data/lib/mongo/grid/fs_bucket.rb +40 -48
  237. data/lib/mongo/grid/stream/read.rb +25 -35
  238. data/lib/mongo/grid/stream/write.rb +17 -22
  239. data/lib/mongo/grid/stream.rb +2 -4
  240. data/lib/mongo/grid.rb +0 -1
  241. data/lib/mongo/id.rb +0 -1
  242. data/lib/mongo/index/view.rb +49 -48
  243. data/lib/mongo/index.rb +7 -10
  244. data/lib/mongo/lint.rb +31 -37
  245. data/lib/mongo/loggable.rb +5 -8
  246. data/lib/mongo/logger.rb +1 -7
  247. data/lib/mongo/monitoring/cmap_log_subscriber.rb +0 -2
  248. data/lib/mongo/monitoring/command_log_subscriber.rb +25 -33
  249. data/lib/mongo/monitoring/event/cmap/base.rb +0 -2
  250. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -4
  251. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +0 -3
  252. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -4
  253. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +2 -5
  254. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -4
  255. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -4
  256. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -4
  257. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +0 -3
  258. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -4
  259. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -4
  260. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +1 -4
  261. data/lib/mongo/monitoring/event/cmap.rb +0 -1
  262. data/lib/mongo/monitoring/event/command_failed.rb +5 -9
  263. data/lib/mongo/monitoring/event/command_started.rb +8 -12
  264. data/lib/mongo/monitoring/event/command_succeeded.rb +7 -15
  265. data/lib/mongo/monitoring/event/secure.rb +15 -20
  266. data/lib/mongo/monitoring/event/server_closed.rb +1 -4
  267. data/lib/mongo/monitoring/event/server_description_changed.rb +4 -8
  268. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +5 -10
  269. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -4
  270. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +3 -8
  271. data/lib/mongo/monitoring/event/server_opening.rb +1 -4
  272. data/lib/mongo/monitoring/event/topology_changed.rb +2 -5
  273. data/lib/mongo/monitoring/event/topology_closed.rb +1 -4
  274. data/lib/mongo/monitoring/event/topology_opening.rb +1 -4
  275. data/lib/mongo/monitoring/event.rb +0 -1
  276. data/lib/mongo/monitoring/publishable.rb +20 -30
  277. data/lib/mongo/monitoring/sdam_log_subscriber.rb +0 -2
  278. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +0 -3
  279. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +0 -3
  280. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
  281. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +5 -8
  282. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +0 -3
  283. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +0 -3
  284. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -3
  285. data/lib/mongo/monitoring.rb +38 -39
  286. data/lib/mongo/operation/aggregate/op_msg.rb +0 -2
  287. data/lib/mongo/operation/aggregate/result.rb +3 -6
  288. data/lib/mongo/operation/aggregate.rb +0 -2
  289. data/lib/mongo/operation/collections_info/result.rb +0 -3
  290. data/lib/mongo/operation/collections_info.rb +0 -2
  291. data/lib/mongo/operation/command/op_msg.rb +1 -4
  292. data/lib/mongo/operation/command.rb +0 -2
  293. data/lib/mongo/operation/context.rb +13 -16
  294. data/lib/mongo/operation/count/op_msg.rb +2 -4
  295. data/lib/mongo/operation/count.rb +0 -2
  296. data/lib/mongo/operation/create/op_msg.rb +2 -5
  297. data/lib/mongo/operation/create.rb +0 -2
  298. data/lib/mongo/operation/create_index/op_msg.rb +3 -7
  299. data/lib/mongo/operation/create_index.rb +0 -2
  300. data/lib/mongo/operation/create_user/op_msg.rb +2 -4
  301. data/lib/mongo/operation/create_user.rb +0 -2
  302. data/lib/mongo/operation/delete/bulk_result.rb +2 -3
  303. data/lib/mongo/operation/delete/op_msg.rb +3 -10
  304. data/lib/mongo/operation/delete/result.rb +0 -3
  305. data/lib/mongo/operation/delete.rb +1 -5
  306. data/lib/mongo/operation/distinct/op_msg.rb +2 -5
  307. data/lib/mongo/operation/distinct.rb +0 -2
  308. data/lib/mongo/operation/drop/op_msg.rb +0 -2
  309. data/lib/mongo/operation/drop.rb +0 -2
  310. data/lib/mongo/operation/drop_database/op_msg.rb +0 -2
  311. data/lib/mongo/operation/drop_database.rb +0 -2
  312. data/lib/mongo/operation/drop_index/op_msg.rb +4 -6
  313. data/lib/mongo/operation/drop_index.rb +0 -2
  314. data/lib/mongo/operation/explain/op_msg.rb +0 -2
  315. data/lib/mongo/operation/explain/result.rb +0 -3
  316. data/lib/mongo/operation/explain.rb +0 -2
  317. data/lib/mongo/operation/find/builder/command.rb +4 -12
  318. data/lib/mongo/operation/find/builder/flags.rb +9 -15
  319. data/lib/mongo/operation/find/builder/modifiers.rb +1 -4
  320. data/lib/mongo/operation/find/builder.rb +0 -1
  321. data/lib/mongo/operation/find/op_msg.rb +4 -12
  322. data/lib/mongo/operation/find/result.rb +0 -3
  323. data/lib/mongo/operation/find.rb +0 -2
  324. data/lib/mongo/operation/get_more/command_builder.rb +1 -6
  325. data/lib/mongo/operation/get_more/op_msg.rb +10 -4
  326. data/lib/mongo/operation/get_more/result.rb +0 -3
  327. data/lib/mongo/operation/get_more.rb +0 -2
  328. data/lib/mongo/operation/indexes/op_msg.rb +0 -2
  329. data/lib/mongo/operation/indexes/result.rb +1 -5
  330. data/lib/mongo/operation/indexes.rb +0 -2
  331. data/lib/mongo/operation/insert/bulk_result.rb +2 -6
  332. data/lib/mongo/operation/insert/op_msg.rb +2 -4
  333. data/lib/mongo/operation/insert/result.rb +0 -3
  334. data/lib/mongo/operation/insert.rb +2 -5
  335. data/lib/mongo/operation/kill_cursors/command_builder.rb +0 -3
  336. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -3
  337. data/lib/mongo/operation/kill_cursors.rb +0 -2
  338. data/lib/mongo/operation/list_collections/op_msg.rb +4 -6
  339. data/lib/mongo/operation/list_collections/result.rb +1 -4
  340. data/lib/mongo/operation/list_collections.rb +0 -2
  341. data/lib/mongo/operation/map_reduce/op_msg.rb +0 -2
  342. data/lib/mongo/operation/map_reduce/result.rb +3 -6
  343. data/lib/mongo/operation/map_reduce.rb +0 -2
  344. data/lib/mongo/operation/op_msg_base.rb +0 -1
  345. data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -5
  346. data/lib/mongo/operation/parallel_scan/result.rb +2 -5
  347. data/lib/mongo/operation/parallel_scan.rb +0 -2
  348. data/lib/mongo/operation/remove_user/op_msg.rb +2 -4
  349. data/lib/mongo/operation/remove_user.rb +0 -2
  350. data/lib/mongo/operation/result.rb +38 -48
  351. data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -7
  352. data/lib/mongo/operation/shared/causal_consistency_supported.rb +0 -3
  353. data/lib/mongo/operation/shared/executable.rb +19 -28
  354. data/lib/mongo/operation/shared/executable_no_validate.rb +0 -3
  355. data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -2
  356. data/lib/mongo/operation/shared/idable.rb +3 -6
  357. data/lib/mongo/operation/shared/limited.rb +0 -3
  358. data/lib/mongo/operation/shared/object_id_generator.rb +0 -3
  359. data/lib/mongo/operation/shared/op_msg_executable.rb +0 -2
  360. data/lib/mongo/operation/shared/polymorphic_lookup.rb +0 -2
  361. data/lib/mongo/operation/shared/polymorphic_result.rb +2 -4
  362. data/lib/mongo/operation/shared/read_preference_supported.rb +10 -15
  363. data/lib/mongo/operation/shared/response_handling.rb +13 -26
  364. data/lib/mongo/operation/shared/result/aggregatable.rb +12 -13
  365. data/lib/mongo/operation/shared/sessions_supported.rb +87 -99
  366. data/lib/mongo/operation/shared/specifiable.rb +32 -58
  367. data/lib/mongo/operation/shared/write.rb +12 -17
  368. data/lib/mongo/operation/shared/write_concern_supported.rb +4 -7
  369. data/lib/mongo/operation/update/bulk_result.rb +13 -17
  370. data/lib/mongo/operation/update/op_msg.rb +2 -5
  371. data/lib/mongo/operation/update/result.rb +5 -5
  372. data/lib/mongo/operation/update.rb +1 -5
  373. data/lib/mongo/operation/update_user/op_msg.rb +2 -4
  374. data/lib/mongo/operation/update_user.rb +0 -2
  375. data/lib/mongo/operation/users_info/op_msg.rb +2 -4
  376. data/lib/mongo/operation/users_info/result.rb +1 -4
  377. data/lib/mongo/operation/users_info.rb +0 -2
  378. data/lib/mongo/operation/write_command/op_msg.rb +2 -10
  379. data/lib/mongo/operation/write_command.rb +0 -2
  380. data/lib/mongo/operation.rb +9 -14
  381. data/lib/mongo/options/mapper.rb +8 -15
  382. data/lib/mongo/options/redacted.rb +7 -9
  383. data/lib/mongo/options.rb +0 -1
  384. data/lib/mongo/protocol/bit_vector.rb +3 -5
  385. data/lib/mongo/protocol/caching_hash.rb +2 -7
  386. data/lib/mongo/protocol/compressed.rb +5 -10
  387. data/lib/mongo/protocol/get_more.rb +2 -8
  388. data/lib/mongo/protocol/kill_cursors.rb +2 -8
  389. data/lib/mongo/protocol/message.rb +103 -105
  390. data/lib/mongo/protocol/msg.rb +48 -63
  391. data/lib/mongo/protocol/query.rb +32 -41
  392. data/lib/mongo/protocol/registry.rb +2 -5
  393. data/lib/mongo/protocol/reply.rb +10 -16
  394. data/lib/mongo/protocol/serializers.rb +41 -59
  395. data/lib/mongo/protocol.rb +0 -1
  396. data/lib/mongo/query_cache.rb +7 -15
  397. data/lib/mongo/retryable/backpressure.rb +31 -0
  398. data/lib/mongo/retryable/base_worker.rb +39 -13
  399. data/lib/mongo/retryable/read_worker.rb +77 -21
  400. data/lib/mongo/retryable/retry_policy.rb +59 -0
  401. data/lib/mongo/retryable/write_worker.rb +155 -56
  402. data/lib/mongo/retryable.rb +70 -9
  403. data/lib/mongo/search_index/view.rb +1 -1
  404. data/lib/mongo/semaphore.rb +0 -1
  405. data/lib/mongo/server/app_metadata/environment.rb +3 -3
  406. data/lib/mongo/server/app_metadata.rb +4 -5
  407. data/lib/mongo/server/connection.rb +61 -61
  408. data/lib/mongo/server/connection_base.rb +43 -53
  409. data/lib/mongo/server/connection_common.rb +41 -64
  410. data/lib/mongo/server/connection_pool/generation_manager.rb +6 -11
  411. data/lib/mongo/server/connection_pool/populator.rb +1 -4
  412. data/lib/mongo/server/connection_pool.rb +195 -167
  413. data/lib/mongo/server/description/features.rb +23 -60
  414. data/lib/mongo/server/description/load_balancer.rb +0 -2
  415. data/lib/mongo/server/description.rb +117 -138
  416. data/lib/mongo/server/monitor/app_metadata.rb +3 -4
  417. data/lib/mongo/server/monitor/connection.rb +28 -35
  418. data/lib/mongo/server/monitor.rb +65 -60
  419. data/lib/mongo/server/pending_connection.rb +70 -71
  420. data/lib/mongo/server/push_monitor/connection.rb +0 -3
  421. data/lib/mongo/server/push_monitor.rb +21 -29
  422. data/lib/mongo/server/round_trip_time_calculator.rb +11 -17
  423. data/lib/mongo/server.rb +60 -93
  424. data/lib/mongo/server_selector/base.rb +133 -157
  425. data/lib/mongo/server_selector/nearest.rb +2 -5
  426. data/lib/mongo/server_selector/primary.rb +1 -5
  427. data/lib/mongo/server_selector/primary_preferred.rb +2 -6
  428. data/lib/mongo/server_selector/secondary.rb +2 -6
  429. data/lib/mongo/server_selector/secondary_preferred.rb +1 -5
  430. data/lib/mongo/server_selector.rb +3 -4
  431. data/lib/mongo/session/server_session.rb +6 -7
  432. data/lib/mongo/session/session_pool.rb +20 -34
  433. data/lib/mongo/session.rb +287 -188
  434. data/lib/mongo/socket/ocsp_cache.rb +8 -13
  435. data/lib/mongo/socket/ocsp_verifier.rb +69 -70
  436. data/lib/mongo/socket/ssl.rb +44 -43
  437. data/lib/mongo/socket/tcp.rb +5 -8
  438. data/lib/mongo/socket/unix.rb +0 -4
  439. data/lib/mongo/socket.rb +80 -102
  440. data/lib/mongo/srv/monitor.rb +6 -11
  441. data/lib/mongo/srv/resolver.rb +15 -24
  442. data/lib/mongo/srv/result.rb +18 -24
  443. data/lib/mongo/srv.rb +0 -1
  444. data/lib/mongo/timeout.rb +4 -11
  445. data/lib/mongo/topology_version.rb +8 -13
  446. data/lib/mongo/tracing/open_telemetry/command_tracer.rb +1 -1
  447. data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +1 -1
  448. data/lib/mongo/tracing/open_telemetry/tracer.rb +1 -1
  449. data/lib/mongo/uri/options_mapper.rb +135 -126
  450. data/lib/mongo/uri/srv_protocol.rb +25 -38
  451. data/lib/mongo/uri.rb +95 -139
  452. data/lib/mongo/utils.rb +5 -12
  453. data/lib/mongo/version.rb +1 -1
  454. data/lib/mongo/write_concern/acknowledged.rb +0 -2
  455. data/lib/mongo/write_concern/base.rb +6 -6
  456. data/lib/mongo/write_concern/unacknowledged.rb +0 -2
  457. data/lib/mongo/write_concern.rb +14 -15
  458. data/lib/mongo.rb +1 -3
  459. data/mongo.gemspec +17 -17
  460. metadata +5 -5
  461. data/lib/mongo/error/server_api_not_supported.rb +0 -27
  462. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +0 -32
  463. 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) 2014-2020 MongoDB Inc.
5
4
  #
@@ -19,7 +18,6 @@ require 'mongo/cursor/nontailable'
19
18
 
20
19
  module Mongo
21
20
  class Database
22
-
23
21
  # A class representing a view of a database.
24
22
  #
25
23
  # @since 2.0.0
@@ -82,19 +80,13 @@ module Mongo
82
80
  session: session,
83
81
  operation_timeouts: operation_timeouts(options)
84
82
  )
83
+
85
84
  cursor = read_with_retry_cursor(session, ServerSelector.primary, self, context: context) do |server|
86
85
  send_initial_query(server, session, context, options.merge(name_only: true))
87
86
  end
88
- cursor.map do |info|
89
- if cursor.initial_result.connection_description.features.list_collections_enabled?
90
- info['name']
91
- else
92
- (info['name'] &&
93
- info['name'].sub("#{@database.name}.", ''))
94
- end
95
- end.reject do |name|
96
- name.start_with?('system.') || name.include?('$')
97
- end
87
+
88
+ cursor.map { |info| info['name'] }
89
+ .reject { |name| name.start_with?('system.') || name.include?('$') }
98
90
  end
99
91
 
100
92
  # Get info on all the collections in the database.
@@ -154,7 +146,7 @@ module Mongo
154
146
 
155
147
  validate_timeout_mode!(options)
156
148
 
157
- @batch_size = nil
149
+ @batch_size = nil
158
150
  @limit = nil
159
151
  @collection = @database[Database::COMMAND]
160
152
  end
@@ -209,7 +201,8 @@ module Mongo
209
201
 
210
202
  private
211
203
 
212
- def collections_info(session, server_selector, options = {}, &block)
204
+ def collections_info(session, server_selector, options = {})
205
+ @batch_size = options[:batch_size] if options[:batch_size]
213
206
  description = nil
214
207
  context = Operation::Context.new(
215
208
  client: client,
@@ -219,27 +212,15 @@ module Mongo
219
212
  op = initial_query_op(session, options)
220
213
  tracer.trace_operation(op, context, op_name: 'listCollections') do
221
214
  cursor = read_with_retry_cursor(session, server_selector, self, context: context) do |server|
222
- # TODO take description from the connection used to send the query
215
+ # TODO: take description from the connection used to send the query
223
216
  # once https://jira.mongodb.org/browse/RUBY-1601 is fixed.
224
217
  description = server.description
225
218
  send_initial_query(server, session, context, options)
226
219
  end
227
- # On 3.0+ servers, we get just the collection names.
228
- # On 2.6 server, we get collection names prefixed with the database
229
- # name. We need to filter system collections out here because
230
- # in the caller we don't know which server version executed the
231
- # command and thus what the proper filtering logic should be
232
- # (it is valid for collection names to have dots, thus filtering out
233
- # collections named system.* here for 2.6 servers would actually
234
- # filter out collections in the system database).
235
- if description.server_version_gte?('3.0')
236
- cursor.reject do |doc|
237
- doc['name'].start_with?('system.') || doc['name'].include?('$')
238
- end
239
- else
240
- cursor.reject do |doc|
241
- doc['name'].start_with?("#{database.name}.system") || doc['name'].include?('$')
242
- end
220
+
221
+ # Filter out the system collections
222
+ cursor.reject do |doc|
223
+ doc['name'].start_with?('system.') || doc['name'].include?('$')
243
224
  end
244
225
  end
245
226
  end
@@ -247,10 +228,10 @@ module Mongo
247
228
  def collections_info_spec(session, options = {})
248
229
  { selector: {
249
230
  listCollections: 1,
250
- cursor: batch_size ? { batchSize: batch_size } : {} },
231
+ cursor: batch_size ? { batchSize: batch_size } : {}
232
+ },
251
233
  db_name: @database.name,
252
- session: session
253
- }.tap do |spec|
234
+ session: session }.tap do |spec|
254
235
  spec[:selector][:nameOnly] = true if options[:name_only]
255
236
  spec[:selector][:filter] = options[:filter] if options[:filter]
256
237
  spec[:selector][:authorizedCollections] = true if options[:authorized_collections]
@@ -290,9 +271,7 @@ module Mongo
290
271
  def send_initial_query(server, session, context, options = {})
291
272
  opts = options.dup
292
273
  execution_opts = {}
293
- if opts.key?(:deserialize_as_bson)
294
- execution_opts[:deserialize_as_bson] = opts.delete(:deserialize_as_bson)
295
- end
274
+ execution_opts[:deserialize_as_bson] = opts.delete(:deserialize_as_bson) if opts.key?(:deserialize_as_bson)
296
275
  if server.load_balancer?
297
276
  connection = server.pool.check_out(context: context)
298
277
  initial_query_op(session, opts).execute_with_connection(
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2014-2020 MongoDB Inc.
5
4
  #
@@ -18,7 +17,6 @@
18
17
  require 'mongo/database/view'
19
18
 
20
19
  module Mongo
21
-
22
20
  # Represents a database on the db server and operations that can execute on
23
21
  # it at this level.
24
22
  #
@@ -30,33 +28,33 @@ module Mongo
30
28
  # The admin database name.
31
29
  #
32
30
  # @since 2.0.0
33
- ADMIN = 'admin'.freeze
31
+ ADMIN = 'admin'
34
32
 
35
33
  # The "collection" that database commands operate against.
36
34
  #
37
35
  # @since 2.0.0
38
- COMMAND = '$cmd'.freeze
36
+ COMMAND = '$cmd'
39
37
 
40
38
  # The default database options.
41
39
  #
42
40
  # @since 2.0.0
43
- DEFAULT_OPTIONS = Options::Redacted.new(:database => ADMIN).freeze
41
+ DEFAULT_OPTIONS = Options::Redacted.new(database: ADMIN).freeze
44
42
 
45
43
  # Database name field constant.
46
44
  #
47
45
  # @since 2.1.0
48
46
  # @deprecated
49
- NAME = 'name'.freeze
47
+ NAME = 'name'
50
48
 
51
49
  # Databases constant.
52
50
  #
53
51
  # @since 2.1.0
54
- DATABASES = 'databases'.freeze
52
+ DATABASES = 'databases'
55
53
 
56
54
  # The name of the collection that holds all the collection names.
57
55
  #
58
56
  # @since 2.0.0
59
- NAMESPACES = 'system.namespaces'.freeze
57
+ NAMESPACES = 'system.namespaces'
60
58
 
61
59
  # @return [ Client ] client The database client.
62
60
  attr_reader :client
@@ -94,6 +92,7 @@ module Mongo
94
92
  # @since 2.0.0
95
93
  def ==(other)
96
94
  return false unless other.is_a?(Database)
95
+
97
96
  name == other.name
98
97
  end
99
98
 
@@ -110,11 +109,13 @@ module Mongo
110
109
  # @since 2.0.0
111
110
  def [](collection_name, options = {})
112
111
  if options[:server_api]
113
- raise ArgumentError, 'The :server_api option cannot be specified for collection objects. It can only be specified on Client level'
112
+ raise ArgumentError,
113
+ 'The :server_api option cannot be specified for collection objects. It can only be specified on Client level'
114
114
  end
115
+
115
116
  Collection.new(self, collection_name, options)
116
117
  end
117
- alias_method :collection, :[]
118
+ alias collection []
118
119
 
119
120
  # Get all the names of the non-system collections in the database.
120
121
  #
@@ -223,7 +224,7 @@ module Mongo
223
224
  # executes this command. This is an internal option and is subject to
224
225
  # change.
225
226
  # - :deserialize_as_bson [ Boolean ] Whether to deserialize the response
226
- # to this command using BSON types intead of native Ruby types wherever
227
+ # to this command using BSON types instead of native Ruby types wherever
227
228
  # possible.
228
229
  #
229
230
  # @return [ Mongo::Operation::Result ] The result of the command execution.
@@ -231,31 +232,30 @@ module Mongo
231
232
  opts = opts.dup
232
233
  execution_opts = opts.delete(:execution_options) || {}
233
234
 
234
- txn_read_pref = if opts[:session] && opts[:session].in_transaction?
235
- opts[:session].txn_read_preference
236
- else
237
- nil
238
- end
235
+ txn_read_pref = (opts[:session].txn_read_preference if opts[:session] && opts[:session].in_transaction?)
239
236
  txn_read_pref ||= opts[:read] || ServerSelector::PRIMARY
240
237
  Lint.validate_underscore_read_preference(txn_read_pref)
241
238
  selector = ServerSelector.get(txn_read_pref)
242
239
 
243
240
  client.with_session(opts) do |session|
244
- server = selector.select_server(cluster, nil, session)
241
+ context = Operation::Context.new(
242
+ client: client,
243
+ session: session,
244
+ operation_timeouts: operation_timeouts(opts)
245
+ )
245
246
  op = Operation::Command.new(
246
- :selector => operation,
247
- :db_name => name,
248
- :read => selector,
249
- :session => session
247
+ selector: operation,
248
+ db_name: name,
249
+ read: selector,
250
+ session: session
250
251
  )
251
252
 
252
- op.execute(server,
253
- context: Operation::Context.new(
254
- client: client,
255
- session: session,
256
- operation_timeouts: operation_timeouts(opts)
257
- ),
258
- options: execution_opts)
253
+ retry_enabled = client.options[:retry_reads] != false &&
254
+ client.options[:retry_writes] != false
255
+ with_overload_retry(context: context, retry_enabled: retry_enabled) do
256
+ server = selector.select_server(cluster, nil, session)
257
+ op.execute(server, context: context, options: execution_opts)
258
+ end
259
259
  end
260
260
  end
261
261
 
@@ -278,11 +278,7 @@ module Mongo
278
278
  # @return [ Hash ] The result of the command execution.
279
279
  # @api private
280
280
  def read_command(operation, opts = {})
281
- txn_read_pref = if opts[:session] && opts[:session].in_transaction?
282
- opts[:session].txn_read_preference
283
- else
284
- nil
285
- end
281
+ txn_read_pref = (opts[:session].txn_read_preference if opts[:session] && opts[:session].in_transaction?)
286
282
  txn_read_pref ||= opts[:read] || ServerSelector::PRIMARY
287
283
  Lint.validate_underscore_read_preference(txn_read_pref)
288
284
  preference = ServerSelector.get(txn_read_pref)
@@ -298,7 +294,7 @@ module Mongo
298
294
  db_name: name,
299
295
  read: preference,
300
296
  session: session,
301
- comment: opts[:comment],
297
+ comment: opts[:comment]
302
298
  )
303
299
  op_name = opts[:op_name] || 'command'
304
300
  tracer.trace_operation(operation, context, op_name: op_name) do
@@ -327,26 +323,26 @@ module Mongo
327
323
  #
328
324
  # @since 2.0.0
329
325
  def drop(options = {})
330
- operation = { :dropDatabase => 1 }
326
+ operation = { dropDatabase: 1 }
331
327
  client.with_session(options) do |session|
332
328
  write_concern = if options[:write_concern]
333
- WriteConcern.get(options[:write_concern])
334
- else
335
- self.write_concern
336
- end
329
+ WriteConcern.get(options[:write_concern])
330
+ else
331
+ self.write_concern
332
+ end
337
333
  Operation::DropDatabase.new({
338
- selector: operation,
339
- db_name: name,
340
- write_concern: write_concern,
341
- session: session
342
- }).execute(
343
- next_primary(nil, session),
344
- context: Operation::Context.new(
345
- client: client,
346
- session: session,
347
- operation_timeouts: operation_timeouts(options)
348
- )
349
- )
334
+ selector: operation,
335
+ db_name: name,
336
+ write_concern: write_concern,
337
+ session: session
338
+ }).execute(
339
+ next_primary(nil, session),
340
+ context: Operation::Context.new(
341
+ client: client,
342
+ session: session,
343
+ operation_timeouts: operation_timeouts(options)
344
+ )
345
+ )
350
346
  end
351
347
  end
352
348
 
@@ -371,6 +367,7 @@ module Mongo
371
367
  if Lint.enabled? && !(name.is_a?(String) || name.is_a?(Symbol))
372
368
  raise "Database name must be a string or a symbol: #{name}"
373
369
  end
370
+
374
371
  @client = client
375
372
  @name = name.to_s.freeze
376
373
  @options = options.freeze
@@ -458,9 +455,8 @@ module Mongo
458
455
  View.new(self, options).aggregate(pipeline, options)
459
456
  end
460
457
 
461
- # As of version 3.6 of the MongoDB server, a ``$changeStream`` pipeline stage is supported
462
- # in the aggregation framework. As of version 4.0, this stage allows users to request that
463
- # notifications are sent for all changes that occur in the client's database.
458
+ # Allows users to request that notifications are sent for all changes that
459
+ # occur in the client's database.
464
460
  #
465
461
  # @example Get change notifications for a given database..
466
462
  # database.watch([{ '$match' => { operationType: { '$in' => ['insert', 'replace'] } } }])
@@ -507,7 +503,6 @@ module Mongo
507
503
  # @option options [ BSON::Timestamp ] :start_at_operation_time Only return
508
504
  # changes that occurred after the specified timestamp. Any command run
509
505
  # against the server will return a cluster time that can be used here.
510
- # Only recognized by server versions 4.0+.
511
506
  # @option options [ Object ] :comment A user-provided
512
507
  # comment to attach to this command.
513
508
  # @option options [ Boolean ] :show_expanded_events Enables the server to
@@ -531,7 +526,8 @@ module Mongo
531
526
  Mongo::Collection::View.new(collection("#{COMMAND}.aggregate"), {}, view_options),
532
527
  pipeline,
533
528
  Mongo::Collection::View::ChangeStream::DATABASE,
534
- options)
529
+ options
530
+ )
535
531
  end
536
532
 
537
533
  # Create a database for the provided client, for use when we don't want the
data/lib/mongo/dbref.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2015-2020 MongoDB Inc.
5
4
  #
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2020 MongoDB Inc.
5
4
  #
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2018-2020 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Raised when authentication fails.
22
20
  #
23
21
  # Note: This class is derived from RuntimeError for
@@ -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,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Raised when the driver is in load-balancing mode but a connection
22
20
  # is established to something other than a mongos.
23
21
  class BadLoadBalancerTarget < Error
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2014-2020 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Exception raised if there are write errors upon executing a bulk
22
20
  # operation.
23
21
  #
@@ -33,7 +31,6 @@ module Mongo
33
31
  #
34
32
  # @since 2.0.0
35
33
  class BulkWriteError < Error
36
-
37
34
  # @return [ BSON::Document ] result The error result.
38
35
  attr_reader :result
39
36
 
@@ -48,9 +45,11 @@ module Mongo
48
45
  # @since 2.0.0
49
46
  def initialize(result)
50
47
  @result = result
48
+
51
49
  # Exception constructor behaves differently for a nil argument and
52
50
  # for no argument. Avoid passing nil explicitly.
53
- super(*[build_message])
51
+ message = build_message
52
+ message ? super(message) : super()
54
53
  end
55
54
 
56
55
  private
@@ -77,24 +76,22 @@ module Mongo
77
76
  errors = @result['writeErrors']
78
77
  return nil unless errors
79
78
 
80
- fragment = ""
79
+ fragment = ''
81
80
  cut_short = false
82
81
  errors.first(10).each_with_index do |error, i|
83
- fragment += "; " if fragment.length > 0
82
+ fragment += '; ' if fragment.length > 0
84
83
  fragment += "[#{error['code']}]: #{error['errmsg']}"
85
84
  fragment += " -- #{error['errInfo'].to_json}" if error['errInfo']
86
85
 
87
86
  if fragment.length > 3000
88
- cut_short = i < [9, errors.length].min
87
+ cut_short = i < [ 9, errors.length ].min
89
88
  break
90
89
  end
91
90
  end
92
91
 
93
92
  fragment += '...' if errors.length > 10 || cut_short
94
93
 
95
- if errors.length > 1
96
- fragment = "Multiple errors: #{fragment}"
97
- end
94
+ fragment = "Multiple errors: #{fragment}" if errors.length > 1
98
95
 
99
96
  fragment
100
97
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2018-2020 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # A module signifying the error will always cause change stream to
22
20
  # resume once.
23
21
  #
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2022 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  class ClientClosed < Error
22
20
  end
23
21
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2014-2020 MongoDB Inc.
5
4
  #
@@ -17,12 +16,10 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Raised if the Grid::FSBucket::Stream object is closed and an operation is attempted.
22
20
  #
23
21
  # @since 2.1.0
24
22
  class ClosedStream < Error
25
-
26
23
  # Create the new exception.
27
24
  #
28
25
  # @example Create the new exception.
@@ -30,7 +27,7 @@ module Mongo
30
27
  #
31
28
  # @since 2.1.0
32
29
  def initialize
33
- super("The stream is closed and cannot be written to or read from.")
30
+ super('The stream is closed and cannot be written to or read from.')
34
31
  end
35
32
  end
36
33
  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
  class Error
20
-
21
19
  # Exception raised when trying to check out a connection from a connection
22
20
  # pool, the pool is at its max size and no connections become available
23
21
  # within the configured wait timeout.
@@ -27,7 +25,6 @@ module Mongo
27
25
  #
28
26
  # @since 2.9.0
29
27
  class ConnectionCheckOutTimeout < ::Timeout::Error
30
-
31
28
  # @return [ Mongo::Address ] address The address of the server the
32
29
  # pool's connections connect to.
33
30
  #
@@ -42,9 +39,9 @@ module Mongo
42
39
  def initialize(msg, options)
43
40
  super(msg)
44
41
  @address = options[:address]
45
- unless @address
46
- raise ArgumentError, 'Address argument is required'
47
- end
42
+ return if @address
43
+
44
+ raise ArgumentError, 'Address argument is required'
48
45
  end
49
46
  end
50
47
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2020 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Exception raised when trying to perform operations on a connection that
22
20
  # experienced a network error.
23
21
  class ConnectionPerished < Error
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2022 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Exception raised when trying to check out a connection with a specific
22
20
  # global id, and the connection for that global id no longer exists in the
23
21
  # pool.
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2020 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Credential check for MONGODB-AWS authentication mechanism failed.
22
20
  #
23
21
  # This exception is raised when the driver attempts to verify the
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2020 MongoDB Inc.
5
4
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # An error related to client-side encryption.
22
20
  class CryptError < Mongo::Error
23
21
  # Create a new CryptError
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2014-2020 MongoDB Inc.
5
4
  #
@@ -17,12 +16,10 @@
17
16
 
18
17
  module Mongo
19
18
  class Error
20
-
21
19
  # Raised if an extra chunk is found.
22
20
  #
23
21
  # @since 2.1.0
24
22
  class ExtraFileChunk < Error
25
-
26
23
  # Create the new exception.
27
24
  #
28
25
  # @example Create the new exception.
@@ -30,7 +27,7 @@ module Mongo
30
27
  #
31
28
  # @since 2.1.0
32
29
  def initialize
33
- super("Extra file chunk found.")
30
+ super('Extra file chunk found.')
34
31
  end
35
32
  end
36
33
  end
@@ -1,28 +1,27 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  module Mongo
5
4
  class Error
6
5
  # This exception is raised when stringprep validation fails, such as due to
7
- # character being present or bidirection data being invalid.
6
+ # character being present or bidirectional data being invalid.
8
7
  #
9
8
  # @since 2.6.0
10
9
  class FailedStringPrepValidation < Error
11
10
  # The error message describing failed bidi validation.
12
11
  #
13
12
  # @since 2.6.0
14
- INVALID_BIDIRECTIONAL = 'Data failed bidirectional validation'.freeze
13
+ INVALID_BIDIRECTIONAL = 'Data failed bidirectional validation'
15
14
 
16
15
  # The error message describing the discovery of a prohibited character.
17
16
  #
18
17
  # @since 2.6.0
19
- PROHIBITED_CHARACTER = 'Data contains a prohibited character.'.freeze
18
+ PROHIBITED_CHARACTER = 'Data contains a prohibited character.'
20
19
 
21
20
  # The error message describing that stringprep normalization can't be done on Ruby versions
22
21
  # below 2.2.0.
23
22
  #
24
23
  # @since 2.6.0
25
- UNABLE_TO_NORMALIZE = 'Unable to perform normalization with Ruby versions below 2.2.0'.freeze
24
+ UNABLE_TO_NORMALIZE = 'Unable to perform normalization with Ruby versions below 2.2.0'
26
25
 
27
26
  # Create the new exception.
28
27
  #
@@ -34,7 +33,7 @@ module Mongo
34
33
  #
35
34
  # @since 2.6.0
36
35
  def initialize(msg)
37
- super(msg)
36
+ super
38
37
  end
39
38
  end
40
39
  end