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) 2018-2020 MongoDB Inc.
5
4
  #
@@ -21,8 +20,7 @@ require 'mongo/auth/stringprep/profiles/sasl'
21
20
  module Mongo
22
21
  module Auth
23
22
  # This namespace contains all behavior related to string preparation
24
- # (RFC 3454). It's used to implement SCRAM-SHA-256 authentication,
25
- # which is available in MongoDB server versions 4.0 and later.
23
+ # (RFC 3454). It's used to implement SCRAM-SHA-256 authentication.
26
24
  #
27
25
  # @since 2.6.0
28
26
  # @api private
@@ -72,15 +70,14 @@ module Mongo
72
70
  raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
73
71
  end
74
72
 
75
- if out.each_char.any? { |c| table_contains?(Tables::D1, c) }
76
- if out.each_char.any? { |c| table_contains?(Tables::D2, c) }
77
- raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
78
- end
79
-
80
- unless table_contains?(Tables::D1, out[0]) && table_contains?(Tables::D1, out[-1])
81
- raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
82
- end
73
+ return unless out.each_char.any? { |c| table_contains?(Tables::D1, c) }
74
+ if out.each_char.any? { |c| table_contains?(Tables::D2, c) }
75
+ raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
83
76
  end
77
+
78
+ return if table_contains?(Tables::D1, out[0]) && table_contains?(Tables::D1, out[-1])
79
+
80
+ raise Mongo::Error::FailedStringPrepValidation.new(Error::FailedStringPrepValidation::INVALID_BIDIRECTIONAL)
84
81
  end
85
82
 
86
83
  def check_prohibited!(out, prohibited)
@@ -95,7 +92,7 @@ module Mongo
95
92
 
96
93
  def mapping(c, mappings)
97
94
  m = mappings.find { |m| m.has_key?(c) }
98
- mapped = (m && m[c]) || [c]
95
+ mapped = (m && m[c]) || [ c ]
99
96
  mapped.map { |i| i.chr(Encoding::UTF_8) }.join
100
97
  end
101
98
 
@@ -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
  module Mongo
19
18
  module Auth
20
19
  class User
21
-
22
20
  # Defines behavior for user related operation on databases.
23
21
  #
24
22
  # @since 2.0.0
@@ -52,7 +50,7 @@ module Mongo
52
50
  user: user,
53
51
  db_name: database.name,
54
52
  session: session,
55
- write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern]),
53
+ write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern])
56
54
  )
57
55
  end
58
56
  end
@@ -89,7 +87,7 @@ module Mongo
89
87
  user_name: name,
90
88
  db_name: database.name,
91
89
  session: session,
92
- write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern]),
90
+ write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern])
93
91
  )
94
92
  end
95
93
  end
@@ -115,7 +113,7 @@ module Mongo
115
113
  user: user,
116
114
  db_name: database.name,
117
115
  session: session,
118
- write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern]),
116
+ write_concern: options[:write_concern] && WriteConcern.get(options[:write_concern])
119
117
  )
120
118
  end
121
119
  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
  #
@@ -19,7 +18,6 @@ require 'mongo/auth/user/view'
19
18
 
20
19
  module Mongo
21
20
  module Auth
22
-
23
21
  # Represents a user in MongoDB.
24
22
  #
25
23
  # @since 2.0.0
@@ -68,6 +66,7 @@ module Mongo
68
66
  # @since 2.0.0
69
67
  def ==(other)
70
68
  return false unless other.is_a?(User)
69
+
71
70
  name == other.name && database == other.database && password == other.password
72
71
  end
73
72
 
@@ -96,7 +95,7 @@ module Mongo
96
95
  #
97
96
  # @since 2.0.0
98
97
  def encoded_name
99
- name.encode(BSON::UTF8).gsub('=','=3D').gsub(',','=2C')
98
+ name.encode(BSON::UTF8).gsub('=', '=3D').gsub(',', '=2C')
100
99
  end
101
100
 
102
101
  # Get the hash key for the user.
@@ -120,9 +119,7 @@ module Mongo
120
119
  #
121
120
  # @since 2.0.0
122
121
  def hashed_password
123
- unless password
124
- raise Error::MissingPassword
125
- end
122
+ raise Error::MissingPassword unless password
126
123
 
127
124
  @hashed_password ||= Digest::MD5.hexdigest("#{name}:mongo:#{password}").encode(BSON::UTF8)
128
125
  end
@@ -131,14 +128,12 @@ module Mongo
131
128
  #
132
129
  # @api private
133
130
  def sasl_prepped_password
134
- unless password
135
- raise Error::MissingPassword
136
- end
131
+ raise Error::MissingPassword unless password
137
132
 
138
133
  @sasl_prepped_password ||= StringPrep.prepare(password,
139
- StringPrep::Profiles::SASL::MAPPINGS,
140
- StringPrep::Profiles::SASL::PROHIBITED,
141
- normalize: true, bidi: true).encode(BSON::UTF8)
134
+ StringPrep::Profiles::SASL::MAPPINGS,
135
+ StringPrep::Profiles::SASL::PROHIBITED,
136
+ normalize: true, bidi: true).encode(BSON::UTF8)
142
137
  end
143
138
 
144
139
  # Create the new user.
@@ -176,14 +171,13 @@ module Mongo
176
171
  # have not enforced this; warn, reject in lint mode
177
172
  if Lint.enabled?
178
173
  raise Error::LintError, "Auth mechanism #{@mechanism.inspect} must be specified as a symbol"
179
- else
180
- log_warn("Auth mechanism #{@mechanism.inspect} should be specified as a symbol")
181
- @mechanism = @mechanism.to_sym
182
174
  end
175
+
176
+ log_warn("Auth mechanism #{@mechanism.inspect} should be specified as a symbol")
177
+ @mechanism = @mechanism.to_sym
178
+
183
179
  end
184
- unless Auth::SOURCES.key?(@mechanism)
185
- raise InvalidMechanism.new(options[:auth_mech])
186
- end
180
+ raise InvalidMechanism.new(options[:auth_mech]) unless Auth::SOURCES.key?(@mechanism)
187
181
  end
188
182
  @auth_mech_properties = options[:auth_mech_properties] || {}
189
183
  @roles = options[:roles] || []
@@ -198,15 +192,11 @@ module Mongo
198
192
  #
199
193
  # @since 2.0.0
200
194
  def spec
201
- {roles: roles}.tap do |spec|
202
- if password
203
- spec[:pwd] = password
204
- end
195
+ { roles: roles }.tap do |spec|
196
+ spec[:pwd] = password if password
205
197
  end
206
198
  end
207
199
 
208
- private
209
-
210
200
  # Generate default auth source based on the URI and options
211
201
  #
212
202
  # @api private
@@ -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,14 +17,12 @@
18
17
  module Mongo
19
18
  module Auth
20
19
  class X509
21
-
22
20
  # Defines behavior around a single X.509 conversation between the
23
21
  # client and server.
24
22
  #
25
23
  # @since 2.0.0
26
24
  # @api private
27
25
  class Conversation < ConversationBase
28
-
29
26
  # The login message.
30
27
  #
31
28
  # @since 2.0.0
@@ -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,17 +16,15 @@
17
16
 
18
17
  module Mongo
19
18
  module Auth
20
-
21
19
  # Defines behavior for X.509 authentication.
22
20
  #
23
21
  # @since 2.0.0
24
22
  # @api private
25
23
  class X509 < Base
26
-
27
24
  # The authentication mechanism string.
28
25
  #
29
26
  # @since 2.0.0
30
- MECHANISM = 'MONGODB-X509'.freeze
27
+ MECHANISM = 'MONGODB-X509'
31
28
 
32
29
  # Initializes the X.509 authenticator.
33
30
  #
@@ -37,11 +34,12 @@ module Mongo
37
34
  # The only valid database for X.509 authentication is $external.
38
35
  if user.auth_source != '$external'
39
36
  user_name_msg = if user.name
40
- " #{user.name}"
41
- else
42
- ''
43
- end
44
- raise Auth::InvalidConfiguration, "User#{user_name_msg} specifies auth source '#{user.auth_source}', but the only valid auth source for X.509 is '$external'"
37
+ " #{user.name}"
38
+ else
39
+ ''
40
+ end
41
+ raise Auth::InvalidConfiguration,
42
+ "User#{user_name_msg} specifies auth source '#{user.auth_source}', but the only valid auth source for X.509 is '$external'"
45
43
  end
46
44
 
47
45
  super
data/lib/mongo/auth.rb CHANGED
@@ -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
  #
@@ -33,9 +32,7 @@ require 'mongo/auth/x509'
33
32
  require 'mongo/error/read_write_retryable'
34
33
  require 'mongo/error/labelable'
35
34
 
36
-
37
35
  module Mongo
38
-
39
36
  # This namespace contains all authentication related behavior.
40
37
  #
41
38
  # @since 2.0.0
@@ -46,7 +43,7 @@ module Mongo
46
43
  #
47
44
  # @since 2.0.0
48
45
  # @api private
49
- EXTERNAL = '$external'.freeze
46
+ EXTERNAL = '$external'
50
47
 
51
48
  # Constant for the nonce command.
52
49
  #
@@ -58,7 +55,7 @@ module Mongo
58
55
  #
59
56
  # @since 2.0.0
60
57
  # @api private
61
- NONCE = 'nonce'.freeze
58
+ NONCE = 'nonce'
62
59
 
63
60
  # Map the symbols parsed from the URI connection string to strategies.
64
61
  #
@@ -96,7 +93,8 @@ module Mongo
96
93
  # @api private
97
94
  def get(user, connection, **opts)
98
95
  mechanism = user.mechanism
99
- raise InvalidMechanism.new(mechanism) if !SOURCES.has_key?(mechanism)
96
+ raise InvalidMechanism.new(mechanism) unless SOURCES.has_key?(mechanism)
97
+
100
98
  SOURCES[mechanism].new(user, connection, **opts)
101
99
  end
102
100
 
@@ -109,7 +107,6 @@ module Mongo
109
107
  #
110
108
  # @since 2.0.0
111
109
  class InvalidMechanism < InvalidConfiguration
112
-
113
110
  # Instantiate the new error.
114
111
  #
115
112
  # @example Instantiate the error.
@@ -151,8 +148,7 @@ module Mongo
151
148
  #
152
149
  # @since 2.0.0
153
150
  def initialize(user, used_mechanism: nil, message: nil,
154
- server: nil, code: nil
155
- )
151
+ server: nil, code: nil)
156
152
  @code = code
157
153
 
158
154
  configured_bits = []
@@ -160,36 +156,28 @@ module Mongo
160
156
  "auth source: #{user.auth_source}",
161
157
  ]
162
158
 
163
- if user.mechanism
164
- configured_bits << "mechanism: #{user.mechanism}"
165
- end
159
+ configured_bits << "mechanism: #{user.mechanism}" if user.mechanism
166
160
 
167
- if used_mechanism
168
- used_bits << "used mechanism: #{used_mechanism}"
169
- end
161
+ used_bits << "used mechanism: #{used_mechanism}" if used_mechanism
170
162
 
171
- if server
172
- used_bits << "used server: #{server.address} (#{server.status})"
173
- end
163
+ used_bits << "used server: #{server.address} (#{server.status})" if server
174
164
 
175
165
  used_user = if user.mechanism == :mongodb_x509
176
- 'Client certificate'
177
- else
178
- "User #{user.name}"
179
- end
166
+ 'Client certificate'
167
+ else
168
+ "User #{user.name}"
169
+ end
180
170
 
181
- if configured_bits.empty?
182
- configured_bits = ''
183
- else
184
- configured_bits = " (#{configured_bits.join(', ')})"
185
- end
171
+ configured_bits = if configured_bits.empty?
172
+ ''
173
+ else
174
+ " (#{configured_bits.join(', ')})"
175
+ end
186
176
 
187
177
  used_bits = " (#{used_bits.join(', ')})"
188
178
 
189
179
  msg = "#{used_user}#{configured_bits} is not authorized to access #{user.database}#{used_bits}"
190
- if message
191
- msg += ': ' + message
192
- end
180
+ msg += ': ' + message if message
193
181
  super(msg)
194
182
  end
195
183
  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
  #
@@ -16,7 +15,6 @@
16
15
  # limitations under the License.
17
16
 
18
17
  module Mongo
19
-
20
18
  # The run!, running? and stop! methods used to be part of the public API
21
19
  # in some of the classes which now include this module. Therefore these
22
20
  # methods must be considered part of the driver's public API for backwards
@@ -111,9 +109,7 @@ module Mongo
111
109
  def start!
112
110
  @thread = Thread.new do
113
111
  catch(:done) do
114
- until @stop_requested
115
- do_work
116
- end
112
+ do_work until @stop_requested
117
113
  end
118
114
  end
119
115
  end
@@ -130,17 +126,15 @@ module Mongo
130
126
  # a background thread could be performing, say, network I/O and if
131
127
  # the network is no longer available that could take a long time.
132
128
  start_time = Utils.monotonic_time
133
- ([0.1, 0.15] + [0.2] * 5 + [0.3] * 20).each do |interval|
134
- begin
135
- Timeout.timeout(interval) do
136
- @thread.join
137
- end
138
- break
139
- rescue ::Timeout::Error
129
+ ([ 0.1, 0.15 ] + ([ 0.2 ] * 5) + ([ 0.3 ] * 20)).each do |interval|
130
+ Timeout.timeout(interval) do
131
+ @thread.join
140
132
  end
133
+ break
134
+ rescue ::Timeout::Error
141
135
  end
142
136
 
143
- # Some driver objects can be reconnected, for backwards compatibiilty
137
+ # Some driver objects can be reconnected, for backwards compatibility
144
138
  # reasons. Clear the thread instance variable to support this cleanly.
145
139
  if @thread.alive?
146
140
  log_warn("Failed to stop the background thread in #{self} in #{(Utils.monotonic_time - start_time).to_i} seconds: #{@thread.inspect} (thread status: #{@thread.status})")
@@ -162,12 +156,10 @@ module Mongo
162
156
  end
163
157
 
164
158
  # Override this method to do the work in the background thread.
165
- def do_work
166
- end
159
+ def do_work; end
167
160
 
168
161
  # Override this method to perform additional signaling for the background
169
162
  # thread to stop.
170
- def pre_stop
171
- end
163
+ def pre_stop; end
172
164
  end
173
165
  end
data/lib/mongo/bson.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
  #
@@ -19,7 +18,6 @@
19
18
  #
20
19
  # @since 2.2.1
21
20
  class Symbol
22
-
23
21
  # Overrides the default BSON type to use the symbol type instead of a
24
22
  # string type.
25
23
  #
@@ -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
  #
@@ -17,14 +16,12 @@
17
16
 
18
17
  module Mongo
19
18
  class BulkWrite
20
-
21
19
  # Defines behavior around combiners
22
20
  #
23
21
  # @api private
24
22
  #
25
23
  # @since 2.1.0
26
24
  module Combineable
27
-
28
25
  # @return [ Array<Hash, BSON::Document> ] requests The provided requests.
29
26
  attr_reader :requests
30
27
 
@@ -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
  #
@@ -17,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  class BulkWrite
20
-
21
19
  # Combines groups of bulk write operations in order.
22
20
  #
23
21
  # @api private
@@ -45,7 +43,7 @@ module Mongo
45
43
  private
46
44
 
47
45
  def add(operations, name, document)
48
- operations.push({ name => []}) if next_group?(name, operations)
46
+ operations.push({ name => [] }) if next_group?(name, operations)
49
47
  operations[-1][name].push(transform(name, document))
50
48
  operations
51
49
  end
@@ -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
  #
@@ -17,12 +16,10 @@
17
16
 
18
17
  module Mongo
19
18
  class BulkWrite
20
-
21
19
  # Wraps a series of bulk write operations in a result object.
22
20
  #
23
21
  # @since 2.0.6
24
22
  class Result
25
-
26
23
  # @return [ Boolean ] Is the result acknowledged?
27
24
  def acknowledged?
28
25
  @acknowledged
@@ -31,42 +28,42 @@ module Mongo
31
28
  # Constant for number removed.
32
29
  #
33
30
  # @since 2.1.0
34
- REMOVED_COUNT = 'n_removed'.freeze
31
+ REMOVED_COUNT = 'n_removed'
35
32
 
36
33
  # Constant for number inserted.
37
34
  #
38
35
  # @since 2.1.0
39
- INSERTED_COUNT = 'n_inserted'.freeze
36
+ INSERTED_COUNT = 'n_inserted'
40
37
 
41
38
  # Constant for inserted ids.
42
39
  #
43
40
  # @since 2.1.0
44
- INSERTED_IDS = 'inserted_ids'.freeze
41
+ INSERTED_IDS = 'inserted_ids'
45
42
 
46
43
  # Constant for number matched.
47
44
  #
48
45
  # @since 2.1.0
49
- MATCHED_COUNT = 'n_matched'.freeze
46
+ MATCHED_COUNT = 'n_matched'
50
47
 
51
48
  # Constant for number modified.
52
49
  #
53
50
  # @since 2.1.0
54
- MODIFIED_COUNT = 'n_modified'.freeze
51
+ MODIFIED_COUNT = 'n_modified'
55
52
 
56
53
  # Constant for upserted.
57
54
  #
58
55
  # @since 2.1.0
59
- UPSERTED = 'upserted'.freeze
56
+ UPSERTED = 'upserted'
60
57
 
61
58
  # Constant for number upserted.
62
59
  #
63
60
  # @since 2.1.0
64
- UPSERTED_COUNT = 'n_upserted'.freeze
61
+ UPSERTED_COUNT = 'n_upserted'
65
62
 
66
63
  # Constant for upserted ids.
67
64
  #
68
65
  # @since 2.1.0
69
- UPSERTED_IDS = 'upserted_ids'.freeze
66
+ UPSERTED_IDS = 'upserted_ids'
70
67
 
71
68
  # The fields contained in the result document returned from executing the
72
69
  # operations.
@@ -192,11 +189,9 @@ module Mongo
192
189
  #
193
190
  # @since 2.1.0
194
191
  def validate!
195
- if @results['writeErrors'] || @results['writeConcernErrors']
196
- raise Error::BulkWriteError.new(@results)
197
- else
198
- self
199
- end
192
+ raise Error::BulkWriteError.new(@results) if @results['writeErrors'] || @results['writeConcernErrors']
193
+
194
+ self
200
195
  end
201
196
  end
202
197
  end
@@ -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
  #
@@ -17,14 +16,12 @@
17
16
 
18
17
  module Mongo
19
18
  class BulkWrite
20
-
21
19
  # Combines bulk write results together.
22
20
  #
23
21
  # @api private
24
22
  #
25
23
  # @since 2.1.0
26
24
  class ResultCombiner
27
-
28
25
  # @return [ Integer ] count The number of documents in the entire batch.
29
26
  attr_reader :count
30
27
 
@@ -97,12 +94,12 @@ module Mongo
97
94
  def combine_ids!(result)
98
95
  if result.respond_to?(Result::INSERTED_IDS)
99
96
  results[Result::INSERTED_IDS] = (results[Result::INSERTED_IDS] || []) +
100
- result.inserted_ids
101
- end
102
- if result.respond_to?(Result::UPSERTED)
103
- results[Result::UPSERTED_IDS] = (results[Result::UPSERTED_IDS] || []) +
104
- result.upserted.map{ |doc| doc['_id'] }
97
+ result.inserted_ids
105
98
  end
99
+ return unless result.respond_to?(Result::UPSERTED)
100
+
101
+ results[Result::UPSERTED_IDS] = (results[Result::UPSERTED_IDS] || []) +
102
+ result.upserted.map { |doc| doc['_id'] }
106
103
  end
107
104
 
108
105
  def combine_errors!(result)
@@ -121,10 +118,10 @@ module Mongo
121
118
  end
122
119
 
123
120
  def combine_write_concern_errors!(result)
124
- if write_concern_errors = result.aggregate_write_concern_errors(count)
125
- results['writeConcernErrors'] = (results['writeConcernErrors'] || []) +
126
- write_concern_errors
127
- end
121
+ return unless write_concern_errors = result.aggregate_write_concern_errors(count)
122
+
123
+ results['writeConcernErrors'] = (results['writeConcernErrors'] || []) +
124
+ write_concern_errors
128
125
  end
129
126
  end
130
127
  end