mongo 2.22.0 → 2.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/bin/mongo_console +0 -1
  3. data/lib/mongo/active_support.rb +1 -2
  4. data/lib/mongo/address/ipv4.rb +3 -6
  5. data/lib/mongo/address/ipv6.rb +6 -10
  6. data/lib/mongo/address/unix.rb +1 -4
  7. data/lib/mongo/address/validator.rb +16 -28
  8. data/lib/mongo/address.rb +30 -40
  9. data/lib/mongo/auth/aws/conversation.rb +6 -10
  10. data/lib/mongo/auth/aws/credentials.rb +0 -1
  11. data/lib/mongo/auth/aws/credentials_cache.rb +0 -1
  12. data/lib/mongo/auth/aws/credentials_retriever.rb +45 -59
  13. data/lib/mongo/auth/aws/request.rb +20 -35
  14. data/lib/mongo/auth/aws.rb +1 -2
  15. data/lib/mongo/auth/base.rb +20 -29
  16. data/lib/mongo/auth/conversation_base.rb +14 -18
  17. data/lib/mongo/auth/cr/conversation.rb +0 -3
  18. data/lib/mongo/auth/cr.rb +1 -4
  19. data/lib/mongo/auth/credential_cache.rb +0 -2
  20. data/lib/mongo/auth/gssapi/conversation.rb +3 -8
  21. data/lib/mongo/auth/gssapi.rb +1 -4
  22. data/lib/mongo/auth/ldap/conversation.rb +0 -3
  23. data/lib/mongo/auth/ldap.rb +1 -4
  24. data/lib/mongo/auth/roles.rb +16 -19
  25. data/lib/mongo/auth/sasl_conversation_base.rb +7 -11
  26. data/lib/mongo/auth/scram/conversation.rb +2 -5
  27. data/lib/mongo/auth/scram.rb +5 -10
  28. data/lib/mongo/auth/scram256/conversation.rb +2 -5
  29. data/lib/mongo/auth/scram256.rb +1 -3
  30. data/lib/mongo/auth/scram_conversation_base.rb +18 -24
  31. data/lib/mongo/auth/stringprep/profiles/sasl.rb +17 -18
  32. data/lib/mongo/auth/stringprep/tables.rb +2209 -2210
  33. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +36 -38
  34. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1142 -1150
  35. data/lib/mongo/auth/stringprep.rb +9 -12
  36. data/lib/mongo/auth/user/view.rb +3 -5
  37. data/lib/mongo/auth/user.rb +14 -24
  38. data/lib/mongo/auth/x509/conversation.rb +0 -3
  39. data/lib/mongo/auth/x509.rb +7 -9
  40. data/lib/mongo/auth.rb +18 -30
  41. data/lib/mongo/background_thread.rb +9 -17
  42. data/lib/mongo/bson.rb +0 -2
  43. data/lib/mongo/bulk_write/combineable.rb +0 -3
  44. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -3
  45. data/lib/mongo/bulk_write/result.rb +11 -16
  46. data/lib/mongo/bulk_write/result_combiner.rb +9 -12
  47. data/lib/mongo/bulk_write/transformable.rb +16 -19
  48. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -3
  49. data/lib/mongo/bulk_write/validatable.rb +11 -18
  50. data/lib/mongo/bulk_write.rb +76 -91
  51. data/lib/mongo/caching_cursor.rb +2 -7
  52. data/lib/mongo/client.rb +267 -276
  53. data/lib/mongo/client_encryption.rb +4 -5
  54. data/lib/mongo/cluster/periodic_executor.rb +2 -5
  55. data/lib/mongo/cluster/reapers/cursor_reaper.rb +21 -29
  56. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -6
  57. data/lib/mongo/cluster/sdam_flow.rb +136 -159
  58. data/lib/mongo/cluster/topology/base.rb +15 -18
  59. data/lib/mongo/cluster/topology/load_balanced.rb +24 -14
  60. data/lib/mongo/cluster/topology/no_replica_set_options.rb +3 -6
  61. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +20 -23
  62. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +0 -2
  63. data/lib/mongo/cluster/topology/sharded.rb +19 -9
  64. data/lib/mongo/cluster/topology/single.rb +24 -14
  65. data/lib/mongo/cluster/topology/unknown.rb +20 -10
  66. data/lib/mongo/cluster/topology.rb +29 -25
  67. data/lib/mongo/cluster.rb +152 -184
  68. data/lib/mongo/cluster_time.rb +14 -31
  69. data/lib/mongo/collection/helpers.rb +5 -8
  70. data/lib/mongo/collection/view/aggregation/behavior.rb +1 -1
  71. data/lib/mongo/collection/view/aggregation.rb +10 -12
  72. data/lib/mongo/collection/view/builder/aggregation.rb +6 -9
  73. data/lib/mongo/collection/view/builder/map_reduce.rb +18 -17
  74. data/lib/mongo/collection/view/builder.rb +0 -1
  75. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -8
  76. data/lib/mongo/collection/view/change_stream.rb +59 -58
  77. data/lib/mongo/collection/view/explainable.rb +11 -20
  78. data/lib/mongo/collection/view/immutable.rb +1 -3
  79. data/lib/mongo/collection/view/iterable.rb +44 -35
  80. data/lib/mongo/collection/view/map_reduce.rb +20 -25
  81. data/lib/mongo/collection/view/readable.rb +96 -94
  82. data/lib/mongo/collection/view/writable.rb +104 -114
  83. data/lib/mongo/collection/view.rb +11 -8
  84. data/lib/mongo/collection.rb +103 -106
  85. data/lib/mongo/condition_variable.rb +4 -4
  86. data/lib/mongo/config/options.rb +0 -3
  87. data/lib/mongo/config/validators/option.rb +3 -5
  88. data/lib/mongo/config.rb +6 -4
  89. data/lib/mongo/crypt/auto_decryption_context.rb +9 -3
  90. data/lib/mongo/crypt/auto_encrypter.rb +34 -43
  91. data/lib/mongo/crypt/auto_encryption_context.rb +0 -3
  92. data/lib/mongo/crypt/binary.rb +5 -9
  93. data/lib/mongo/crypt/binding.rb +150 -156
  94. data/lib/mongo/crypt/context.rb +20 -17
  95. data/lib/mongo/crypt/data_key_context.rb +2 -7
  96. data/lib/mongo/crypt/encryption_io.rb +29 -39
  97. data/lib/mongo/crypt/explicit_decryption_context.rb +9 -3
  98. data/lib/mongo/crypt/explicit_encrypter.rb +1 -1
  99. data/lib/mongo/crypt/explicit_encryption_context.rb +19 -30
  100. data/lib/mongo/crypt/explicit_encryption_expression_context.rb +0 -2
  101. data/lib/mongo/crypt/handle.rb +42 -48
  102. data/lib/mongo/crypt/hooks.rb +12 -15
  103. data/lib/mongo/crypt/kms/aws/credentials.rb +12 -16
  104. data/lib/mongo/crypt/kms/aws/master_document.rb +6 -9
  105. data/lib/mongo/crypt/kms/aws.rb +0 -2
  106. data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +2 -7
  107. data/lib/mongo/crypt/kms/azure/master_document.rb +15 -19
  108. data/lib/mongo/crypt/kms/azure.rb +0 -1
  109. data/lib/mongo/crypt/kms/credentials.rb +13 -27
  110. data/lib/mongo/crypt/kms/gcp/credentials.rb +12 -14
  111. data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +7 -9
  112. data/lib/mongo/crypt/kms/gcp/master_document.rb +12 -16
  113. data/lib/mongo/crypt/kms/gcp.rb +0 -2
  114. data/lib/mongo/crypt/kms/kmip/credentials.rb +7 -8
  115. data/lib/mongo/crypt/kms/kmip/master_document.rb +3 -5
  116. data/lib/mongo/crypt/kms/kmip.rb +0 -1
  117. data/lib/mongo/crypt/kms/local/credentials.rb +7 -8
  118. data/lib/mongo/crypt/kms/local/master_document.rb +2 -6
  119. data/lib/mongo/crypt/kms/local.rb +0 -1
  120. data/lib/mongo/crypt/kms/master_key_document.rb +11 -15
  121. data/lib/mongo/crypt/kms.rb +14 -16
  122. data/lib/mongo/crypt/kms_context.rb +0 -2
  123. data/lib/mongo/crypt/rewrap_many_data_key_context.rb +2 -7
  124. data/lib/mongo/crypt/rewrap_many_data_key_result.rb +2 -4
  125. data/lib/mongo/crypt/status.rb +12 -14
  126. data/lib/mongo/crypt.rb +0 -1
  127. data/lib/mongo/csot_timeout_holder.rb +3 -2
  128. data/lib/mongo/cursor/kill_spec.rb +7 -10
  129. data/lib/mongo/cursor.rb +74 -64
  130. data/lib/mongo/cursor_host.rb +8 -10
  131. data/lib/mongo/database/view.rb +23 -39
  132. data/lib/mongo/database.rb +68 -65
  133. data/lib/mongo/dbref.rb +0 -1
  134. data/lib/mongo/deprecations.rb +98 -0
  135. data/lib/mongo/distinguishing_semaphore.rb +0 -1
  136. data/lib/mongo/error/auth_error.rb +0 -2
  137. data/lib/mongo/error/bad_load_balancer_target.rb +0 -2
  138. data/lib/mongo/error/bulk_write_error.rb +7 -10
  139. data/lib/mongo/error/change_stream_resumable.rb +0 -2
  140. data/lib/mongo/error/client_closed.rb +0 -2
  141. data/lib/mongo/error/closed_stream.rb +1 -4
  142. data/lib/mongo/error/connection_check_out_timeout.rb +3 -6
  143. data/lib/mongo/error/connection_perished.rb +0 -2
  144. data/lib/mongo/error/connection_unavailable.rb +0 -2
  145. data/lib/mongo/error/credential_check_error.rb +0 -2
  146. data/lib/mongo/error/crypt_error.rb +0 -2
  147. data/lib/mongo/error/extra_file_chunk.rb +1 -4
  148. data/lib/mongo/error/failed_string_prep_validation.rb +5 -6
  149. data/lib/mongo/error/file_not_found.rb +0 -3
  150. data/lib/mongo/error/handshake_error.rb +0 -2
  151. data/lib/mongo/error/insufficient_iteration_count.rb +1 -4
  152. data/lib/mongo/error/internal_driver_error.rb +0 -2
  153. data/lib/mongo/error/invalid_address.rb +0 -2
  154. data/lib/mongo/error/invalid_application_name.rb +0 -3
  155. data/lib/mongo/error/invalid_bulk_operation.rb +1 -4
  156. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -4
  157. data/lib/mongo/error/invalid_collection_name.rb +1 -4
  158. data/lib/mongo/error/invalid_config_option.rb +0 -3
  159. data/lib/mongo/error/invalid_cursor_operation.rb +0 -2
  160. data/lib/mongo/error/invalid_database_name.rb +1 -4
  161. data/lib/mongo/error/invalid_document.rb +1 -4
  162. data/lib/mongo/error/invalid_file.rb +0 -3
  163. data/lib/mongo/error/invalid_file_revision.rb +0 -3
  164. data/lib/mongo/error/invalid_min_pool_size.rb +0 -3
  165. data/lib/mongo/error/invalid_nonce.rb +0 -3
  166. data/lib/mongo/error/invalid_read_concern.rb +2 -4
  167. data/lib/mongo/error/invalid_read_option.rb +0 -3
  168. data/lib/mongo/error/invalid_replacement_document.rb +2 -5
  169. data/lib/mongo/error/invalid_server_auth_host.rb +0 -2
  170. data/lib/mongo/error/invalid_server_auth_response.rb +0 -2
  171. data/lib/mongo/error/invalid_server_preference.rb +7 -16
  172. data/lib/mongo/error/invalid_session.rb +1 -4
  173. data/lib/mongo/error/invalid_signature.rb +0 -3
  174. data/lib/mongo/error/invalid_transaction_operation.rb +5 -8
  175. data/lib/mongo/error/invalid_txt_record.rb +0 -2
  176. data/lib/mongo/error/invalid_update_document.rb +2 -5
  177. data/lib/mongo/error/invalid_uri.rb +1 -4
  178. data/lib/mongo/error/invalid_write_concern.rb +2 -5
  179. data/lib/mongo/error/kms_error.rb +0 -2
  180. data/lib/mongo/error/labelable.rb +0 -3
  181. data/lib/mongo/error/lint_error.rb +0 -2
  182. data/lib/mongo/error/max_bson_size.rb +8 -11
  183. data/lib/mongo/error/max_message_size.rb +2 -5
  184. data/lib/mongo/error/mismatched_domain.rb +0 -2
  185. data/lib/mongo/error/missing_connection.rb +0 -2
  186. data/lib/mongo/error/missing_file_chunk.rb +0 -3
  187. data/lib/mongo/error/missing_password.rb +0 -2
  188. data/lib/mongo/error/missing_resume_token.rb +1 -4
  189. data/lib/mongo/error/missing_scram_server_signature.rb +2 -4
  190. data/lib/mongo/error/missing_service_id.rb +0 -2
  191. data/lib/mongo/error/mongocryptd_spawn_error.rb +0 -2
  192. data/lib/mongo/error/multi_index_drop.rb +0 -3
  193. data/lib/mongo/error/need_primary_server.rb +0 -2
  194. data/lib/mongo/error/no_server_available.rb +3 -8
  195. data/lib/mongo/error/no_service_connection_available.rb +1 -3
  196. data/lib/mongo/error/no_srv_records.rb +0 -2
  197. data/lib/mongo/error/notable.rb +8 -16
  198. data/lib/mongo/error/operation_failure.rb +22 -35
  199. data/lib/mongo/error/parser.rb +33 -75
  200. data/lib/mongo/error/pool_cleared_error.rb +1 -3
  201. data/lib/mongo/error/pool_closed_error.rb +0 -3
  202. data/lib/mongo/error/pool_error.rb +0 -3
  203. data/lib/mongo/error/pool_paused_error.rb +0 -2
  204. data/lib/mongo/error/raise_original_error.rb +1 -3
  205. data/lib/mongo/error/read_write_retryable.rb +14 -17
  206. data/lib/mongo/error/sdam_error_detection.rb +3 -5
  207. data/lib/mongo/error/server_api_conflict.rb +0 -2
  208. data/lib/mongo/error/server_certificate_revoked.rb +0 -2
  209. data/lib/mongo/error/server_not_usable.rb +0 -2
  210. data/lib/mongo/error/session_ended.rb +1 -3
  211. data/lib/mongo/error/session_not_materialized.rb +1 -3
  212. data/lib/mongo/error/sessions_not_supported.rb +1 -4
  213. data/lib/mongo/error/snapshot_session_invalid_server_version.rb +1 -4
  214. data/lib/mongo/error/snapshot_session_transaction_prohibited.rb +1 -4
  215. data/lib/mongo/error/socket_error.rb +0 -2
  216. data/lib/mongo/error/socket_timeout_error.rb +0 -2
  217. data/lib/mongo/error/transactions_not_supported.rb +3 -6
  218. data/lib/mongo/error/unchangeable_collection_option.rb +1 -4
  219. data/lib/mongo/error/unexpected_chunk_length.rb +0 -3
  220. data/lib/mongo/error/unexpected_response.rb +1 -4
  221. data/lib/mongo/error/unknown_payload_type.rb +0 -3
  222. data/lib/mongo/error/unmet_dependency.rb +0 -2
  223. data/lib/mongo/error/unsupported_array_filters.rb +3 -24
  224. data/lib/mongo/error/unsupported_collation.rb +3 -24
  225. data/lib/mongo/error/unsupported_features.rb +0 -2
  226. data/lib/mongo/error/unsupported_message_type.rb +0 -2
  227. data/lib/mongo/error/unsupported_option.rb +19 -21
  228. data/lib/mongo/error/write_retryable.rb +0 -2
  229. data/lib/mongo/error.rb +10 -24
  230. data/lib/mongo/event/base.rb +0 -2
  231. data/lib/mongo/event/listeners.rb +0 -3
  232. data/lib/mongo/event/publisher.rb +0 -3
  233. data/lib/mongo/event/subscriber.rb +0 -4
  234. data/lib/mongo/event.rb +4 -6
  235. data/lib/mongo/grid/file/chunk.rb +7 -10
  236. data/lib/mongo/grid/file/info.rb +20 -24
  237. data/lib/mongo/grid/file.rb +7 -8
  238. data/lib/mongo/grid/fs_bucket.rb +40 -48
  239. data/lib/mongo/grid/stream/read.rb +25 -35
  240. data/lib/mongo/grid/stream/write.rb +17 -22
  241. data/lib/mongo/grid/stream.rb +2 -4
  242. data/lib/mongo/grid.rb +0 -1
  243. data/lib/mongo/id.rb +0 -1
  244. data/lib/mongo/index/view.rb +68 -58
  245. data/lib/mongo/index.rb +7 -10
  246. data/lib/mongo/lint.rb +31 -37
  247. data/lib/mongo/loggable.rb +5 -8
  248. data/lib/mongo/logger.rb +1 -7
  249. data/lib/mongo/monitoring/cmap_log_subscriber.rb +0 -2
  250. data/lib/mongo/monitoring/command_log_subscriber.rb +25 -33
  251. data/lib/mongo/monitoring/event/cmap/base.rb +0 -2
  252. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -4
  253. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +0 -3
  254. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -4
  255. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +2 -5
  256. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -4
  257. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -4
  258. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -4
  259. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +0 -3
  260. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -4
  261. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -4
  262. data/lib/mongo/monitoring/event/cmap/pool_ready.rb +1 -4
  263. data/lib/mongo/monitoring/event/cmap.rb +0 -1
  264. data/lib/mongo/monitoring/event/command_failed.rb +5 -9
  265. data/lib/mongo/monitoring/event/command_started.rb +8 -12
  266. data/lib/mongo/monitoring/event/command_succeeded.rb +7 -15
  267. data/lib/mongo/monitoring/event/secure.rb +15 -20
  268. data/lib/mongo/monitoring/event/server_closed.rb +1 -4
  269. data/lib/mongo/monitoring/event/server_description_changed.rb +4 -8
  270. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +5 -10
  271. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -4
  272. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +3 -8
  273. data/lib/mongo/monitoring/event/server_opening.rb +1 -4
  274. data/lib/mongo/monitoring/event/topology_changed.rb +2 -5
  275. data/lib/mongo/monitoring/event/topology_closed.rb +1 -4
  276. data/lib/mongo/monitoring/event/topology_opening.rb +1 -4
  277. data/lib/mongo/monitoring/event.rb +0 -1
  278. data/lib/mongo/monitoring/publishable.rb +20 -30
  279. data/lib/mongo/monitoring/sdam_log_subscriber.rb +0 -2
  280. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +0 -3
  281. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +0 -3
  282. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +0 -3
  283. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +5 -8
  284. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +0 -3
  285. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +0 -3
  286. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -3
  287. data/lib/mongo/monitoring.rb +38 -39
  288. data/lib/mongo/operation/aggregate/op_msg.rb +0 -2
  289. data/lib/mongo/operation/aggregate/result.rb +3 -6
  290. data/lib/mongo/operation/aggregate.rb +0 -2
  291. data/lib/mongo/operation/collections_info/result.rb +0 -3
  292. data/lib/mongo/operation/collections_info.rb +0 -2
  293. data/lib/mongo/operation/command/op_msg.rb +1 -4
  294. data/lib/mongo/operation/command.rb +0 -2
  295. data/lib/mongo/operation/context.rb +13 -16
  296. data/lib/mongo/operation/count/op_msg.rb +2 -4
  297. data/lib/mongo/operation/count.rb +0 -2
  298. data/lib/mongo/operation/create/op_msg.rb +2 -5
  299. data/lib/mongo/operation/create.rb +4 -2
  300. data/lib/mongo/operation/create_index/op_msg.rb +3 -7
  301. data/lib/mongo/operation/create_index.rb +0 -2
  302. data/lib/mongo/operation/create_user/op_msg.rb +2 -4
  303. data/lib/mongo/operation/create_user.rb +0 -2
  304. data/lib/mongo/operation/delete/bulk_result.rb +2 -3
  305. data/lib/mongo/operation/delete/op_msg.rb +3 -10
  306. data/lib/mongo/operation/delete/result.rb +0 -3
  307. data/lib/mongo/operation/delete.rb +1 -5
  308. data/lib/mongo/operation/distinct/op_msg.rb +2 -5
  309. data/lib/mongo/operation/distinct.rb +0 -2
  310. data/lib/mongo/operation/drop/op_msg.rb +0 -2
  311. data/lib/mongo/operation/drop.rb +0 -2
  312. data/lib/mongo/operation/drop_database/op_msg.rb +0 -2
  313. data/lib/mongo/operation/drop_database.rb +0 -2
  314. data/lib/mongo/operation/drop_index/op_msg.rb +4 -6
  315. data/lib/mongo/operation/drop_index.rb +0 -2
  316. data/lib/mongo/operation/explain/op_msg.rb +0 -2
  317. data/lib/mongo/operation/explain/result.rb +0 -3
  318. data/lib/mongo/operation/explain.rb +0 -2
  319. data/lib/mongo/operation/find/builder/command.rb +4 -12
  320. data/lib/mongo/operation/find/builder/flags.rb +9 -15
  321. data/lib/mongo/operation/find/builder/modifiers.rb +1 -4
  322. data/lib/mongo/operation/find/builder.rb +0 -1
  323. data/lib/mongo/operation/find/op_msg.rb +4 -12
  324. data/lib/mongo/operation/find/result.rb +0 -3
  325. data/lib/mongo/operation/find.rb +0 -2
  326. data/lib/mongo/operation/get_more/command_builder.rb +1 -6
  327. data/lib/mongo/operation/get_more/op_msg.rb +10 -4
  328. data/lib/mongo/operation/get_more/result.rb +0 -3
  329. data/lib/mongo/operation/get_more.rb +0 -2
  330. data/lib/mongo/operation/indexes/op_msg.rb +0 -2
  331. data/lib/mongo/operation/indexes/result.rb +1 -5
  332. data/lib/mongo/operation/indexes.rb +0 -2
  333. data/lib/mongo/operation/insert/bulk_result.rb +2 -6
  334. data/lib/mongo/operation/insert/op_msg.rb +7 -6
  335. data/lib/mongo/operation/insert/result.rb +0 -3
  336. data/lib/mongo/operation/insert.rb +2 -5
  337. data/lib/mongo/operation/kill_cursors/command_builder.rb +0 -3
  338. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -3
  339. data/lib/mongo/operation/kill_cursors.rb +0 -2
  340. data/lib/mongo/operation/list_collections/op_msg.rb +4 -6
  341. data/lib/mongo/operation/list_collections/result.rb +1 -4
  342. data/lib/mongo/operation/list_collections.rb +0 -2
  343. data/lib/mongo/operation/map_reduce/op_msg.rb +0 -2
  344. data/lib/mongo/operation/map_reduce/result.rb +3 -6
  345. data/lib/mongo/operation/map_reduce.rb +0 -2
  346. data/lib/mongo/operation/op_msg_base.rb +0 -1
  347. data/lib/mongo/operation/parallel_scan/op_msg.rb +4 -5
  348. data/lib/mongo/operation/parallel_scan/result.rb +2 -5
  349. data/lib/mongo/operation/parallel_scan.rb +0 -2
  350. data/lib/mongo/operation/remove_user/op_msg.rb +2 -4
  351. data/lib/mongo/operation/remove_user.rb +0 -2
  352. data/lib/mongo/operation/result.rb +38 -48
  353. data/lib/mongo/operation/shared/bypass_document_validation.rb +3 -7
  354. data/lib/mongo/operation/shared/causal_consistency_supported.rb +0 -3
  355. data/lib/mongo/operation/shared/executable.rb +29 -31
  356. data/lib/mongo/operation/shared/executable_no_validate.rb +0 -3
  357. data/lib/mongo/operation/shared/executable_transaction_label.rb +0 -2
  358. data/lib/mongo/operation/shared/idable.rb +3 -6
  359. data/lib/mongo/operation/shared/limited.rb +0 -3
  360. data/lib/mongo/operation/shared/object_id_generator.rb +0 -3
  361. data/lib/mongo/operation/shared/op_msg_executable.rb +0 -2
  362. data/lib/mongo/operation/shared/polymorphic_lookup.rb +0 -2
  363. data/lib/mongo/operation/shared/polymorphic_result.rb +2 -4
  364. data/lib/mongo/operation/shared/read_preference_supported.rb +10 -15
  365. data/lib/mongo/operation/shared/response_handling.rb +13 -26
  366. data/lib/mongo/operation/shared/result/aggregatable.rb +12 -13
  367. data/lib/mongo/operation/shared/sessions_supported.rb +87 -99
  368. data/lib/mongo/operation/shared/specifiable.rb +37 -59
  369. data/lib/mongo/operation/shared/write.rb +12 -17
  370. data/lib/mongo/operation/shared/write_concern_supported.rb +4 -7
  371. data/lib/mongo/operation/update/bulk_result.rb +13 -17
  372. data/lib/mongo/operation/update/op_msg.rb +2 -5
  373. data/lib/mongo/operation/update/result.rb +5 -5
  374. data/lib/mongo/operation/update.rb +1 -5
  375. data/lib/mongo/operation/update_user/op_msg.rb +2 -4
  376. data/lib/mongo/operation/update_user.rb +0 -2
  377. data/lib/mongo/operation/users_info/op_msg.rb +2 -4
  378. data/lib/mongo/operation/users_info/result.rb +1 -4
  379. data/lib/mongo/operation/users_info.rb +0 -2
  380. data/lib/mongo/operation/write_command/op_msg.rb +2 -10
  381. data/lib/mongo/operation/write_command.rb +0 -2
  382. data/lib/mongo/operation.rb +9 -14
  383. data/lib/mongo/options/mapper.rb +8 -15
  384. data/lib/mongo/options/redacted.rb +7 -9
  385. data/lib/mongo/options.rb +0 -1
  386. data/lib/mongo/protocol/bit_vector.rb +3 -5
  387. data/lib/mongo/protocol/caching_hash.rb +2 -7
  388. data/lib/mongo/protocol/compressed.rb +5 -10
  389. data/lib/mongo/protocol/get_more.rb +2 -8
  390. data/lib/mongo/protocol/kill_cursors.rb +2 -8
  391. data/lib/mongo/protocol/message.rb +103 -105
  392. data/lib/mongo/protocol/msg.rb +48 -63
  393. data/lib/mongo/protocol/query.rb +32 -41
  394. data/lib/mongo/protocol/registry.rb +2 -5
  395. data/lib/mongo/protocol/reply.rb +10 -16
  396. data/lib/mongo/protocol/serializers.rb +41 -59
  397. data/lib/mongo/protocol.rb +0 -1
  398. data/lib/mongo/query_cache.rb +7 -15
  399. data/lib/mongo/retryable/backpressure.rb +31 -0
  400. data/lib/mongo/retryable/base_worker.rb +39 -13
  401. data/lib/mongo/retryable/read_worker.rb +77 -21
  402. data/lib/mongo/retryable/retry_policy.rb +59 -0
  403. data/lib/mongo/retryable/write_worker.rb +155 -56
  404. data/lib/mongo/retryable.rb +70 -9
  405. data/lib/mongo/search_index/view.rb +30 -10
  406. data/lib/mongo/semaphore.rb +0 -1
  407. data/lib/mongo/server/app_metadata/environment.rb +3 -3
  408. data/lib/mongo/server/app_metadata/platform.rb +17 -4
  409. data/lib/mongo/server/app_metadata.rb +4 -5
  410. data/lib/mongo/server/connection.rb +79 -61
  411. data/lib/mongo/server/connection_base.rb +43 -53
  412. data/lib/mongo/server/connection_common.rb +41 -64
  413. data/lib/mongo/server/connection_pool/generation_manager.rb +6 -11
  414. data/lib/mongo/server/connection_pool/populator.rb +1 -4
  415. data/lib/mongo/server/connection_pool.rb +195 -167
  416. data/lib/mongo/server/description/features.rb +51 -59
  417. data/lib/mongo/server/description/load_balancer.rb +0 -2
  418. data/lib/mongo/server/description.rb +117 -138
  419. data/lib/mongo/server/monitor/app_metadata.rb +3 -4
  420. data/lib/mongo/server/monitor/connection.rb +28 -35
  421. data/lib/mongo/server/monitor.rb +65 -60
  422. data/lib/mongo/server/pending_connection.rb +70 -71
  423. data/lib/mongo/server/push_monitor/connection.rb +0 -3
  424. data/lib/mongo/server/push_monitor.rb +21 -29
  425. data/lib/mongo/server/round_trip_time_calculator.rb +11 -17
  426. data/lib/mongo/server.rb +62 -94
  427. data/lib/mongo/server_selector/base.rb +133 -157
  428. data/lib/mongo/server_selector/nearest.rb +2 -5
  429. data/lib/mongo/server_selector/primary.rb +1 -5
  430. data/lib/mongo/server_selector/primary_preferred.rb +2 -6
  431. data/lib/mongo/server_selector/secondary.rb +2 -6
  432. data/lib/mongo/server_selector/secondary_preferred.rb +1 -5
  433. data/lib/mongo/server_selector.rb +3 -4
  434. data/lib/mongo/session/server_session.rb +6 -7
  435. data/lib/mongo/session/session_pool.rb +20 -34
  436. data/lib/mongo/session.rb +334 -199
  437. data/lib/mongo/socket/ocsp_cache.rb +8 -13
  438. data/lib/mongo/socket/ocsp_verifier.rb +69 -70
  439. data/lib/mongo/socket/ssl.rb +44 -43
  440. data/lib/mongo/socket/tcp.rb +5 -8
  441. data/lib/mongo/socket/unix.rb +0 -4
  442. data/lib/mongo/socket.rb +80 -102
  443. data/lib/mongo/srv/monitor.rb +10 -11
  444. data/lib/mongo/srv/resolver.rb +15 -24
  445. data/lib/mongo/srv/result.rb +25 -21
  446. data/lib/mongo/srv.rb +0 -1
  447. data/lib/mongo/timeout.rb +4 -11
  448. data/lib/mongo/topology_version.rb +8 -13
  449. data/lib/mongo/tracing/open_telemetry/command_tracer.rb +320 -0
  450. data/lib/mongo/tracing/open_telemetry/operation_tracer.rb +227 -0
  451. data/lib/mongo/tracing/open_telemetry/tracer.rb +236 -0
  452. data/lib/mongo/{error/server_api_not_supported.rb → tracing/open_telemetry.rb} +10 -10
  453. data/lib/mongo/tracing.rb +42 -0
  454. data/lib/mongo/uri/options_mapper.rb +135 -126
  455. data/lib/mongo/uri/srv_protocol.rb +34 -42
  456. data/lib/mongo/uri.rb +95 -139
  457. data/lib/mongo/utils.rb +5 -12
  458. data/lib/mongo/version.rb +1 -1
  459. data/lib/mongo/write_concern/acknowledged.rb +0 -2
  460. data/lib/mongo/write_concern/base.rb +6 -6
  461. data/lib/mongo/write_concern/unacknowledged.rb +0 -2
  462. data/lib/mongo/write_concern.rb +14 -15
  463. data/lib/mongo.rb +4 -3
  464. data/mongo.gemspec +17 -17
  465. metadata +11 -5
  466. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +0 -32
  467. data/lib/mongo/operation/shared/validatable.rb +0 -87
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2014-2020 MongoDB Inc.
5
4
  #
@@ -17,133 +16,126 @@
17
16
 
18
17
  module Mongo
19
18
  module Operation
20
-
21
19
  # This module contains common functionality for convenience methods getting
22
20
  # various values from the spec.
23
21
  #
24
22
  # @since 2.0.0
25
23
  # @api private
26
24
  module Specifiable
27
-
28
25
  # The field for database name.
29
26
  #
30
27
  # @since 2.0.0
31
- DB_NAME = :db_name.freeze
28
+ DB_NAME = :db_name
32
29
 
33
30
  # The field for deletes.
34
31
  #
35
32
  # @since 2.0.0
36
- DELETES = :deletes.freeze
33
+ DELETES = :deletes
37
34
 
38
35
  # The field for delete.
39
36
  #
40
37
  # @since 2.0.0
41
- DELETE = :delete.freeze
38
+ DELETE = :delete
42
39
 
43
40
  # The field for documents.
44
41
  #
45
42
  # @since 2.0.0
46
- DOCUMENTS = :documents.freeze
43
+ DOCUMENTS = :documents
47
44
 
48
45
  # The field for collection name.
49
46
  #
50
47
  # @since 2.0.0
51
- COLL_NAME = :coll_name.freeze
48
+ COLL_NAME = :coll_name
52
49
 
53
50
  # The field for cursor count.
54
51
  #
55
52
  # @since 2.0.0
56
- CURSOR_COUNT = :cursor_count.freeze
53
+ CURSOR_COUNT = :cursor_count
57
54
 
58
55
  # The field for cursor id.
59
56
  #
60
57
  # @since 2.0.0
61
- CURSOR_ID = :cursor_id.freeze
58
+ CURSOR_ID = :cursor_id
62
59
 
63
60
  # The field for an index.
64
61
  #
65
62
  # @since 2.0.0
66
- INDEX = :index.freeze
63
+ INDEX = :index
67
64
 
68
65
  # The field for multiple indexes.
69
66
  #
70
67
  # @since 2.0.0
71
- INDEXES = :indexes.freeze
68
+ INDEXES = :indexes
72
69
 
73
70
  # The field for index names.
74
71
  #
75
72
  # @since 2.0.0
76
- INDEX_NAME = :index_name.freeze
73
+ INDEX_NAME = :index_name
77
74
 
78
75
  # The operation id constant.
79
76
  #
80
77
  # @since 2.1.0
81
- OPERATION_ID = :operation_id.freeze
78
+ OPERATION_ID = :operation_id
82
79
 
83
80
  # The field for options.
84
81
  #
85
82
  # @since 2.0.0
86
- OPTIONS = :options.freeze
83
+ OPTIONS = :options
87
84
 
88
85
  # The read concern option.
89
86
  #
90
87
  # @since 2.2.0
91
- READ_CONCERN = :read_concern.freeze
88
+ READ_CONCERN = :read_concern
92
89
 
93
90
  # The max time ms option.
94
91
  #
95
92
  # @since 2.2.5
96
- MAX_TIME_MS = :max_time_ms.freeze
93
+ MAX_TIME_MS = :max_time_ms
97
94
 
98
95
  # The field for a selector.
99
96
  #
100
97
  # @since 2.0.0
101
- SELECTOR = :selector.freeze
102
-
103
- # The field for number to return.
104
- #
105
- # @since 2.0.0
106
- TO_RETURN = :to_return.freeze
98
+ SELECTOR = :selector
107
99
 
108
100
  # The field for updates.
109
101
  #
110
102
  # @since 2.0.0
111
- UPDATES = :updates.freeze
103
+ UPDATES = :updates
112
104
 
113
105
  # The field for update.
114
106
  #
115
107
  # @since 2.0.0
116
- UPDATE = :update.freeze
108
+ UPDATE = :update
117
109
 
118
110
  # The field name for a user.
119
111
  #
120
112
  # @since 2.0.0
121
- USER = :user.freeze
113
+ USER = :user
122
114
 
123
115
  # The field name for user name.
124
116
  #
125
117
  # @since 2.0.0
126
- USER_NAME = :user_name.freeze
118
+ USER_NAME = :user_name
127
119
 
128
120
  # The field name for a write concern.
129
121
  #
130
122
  # @since 2.0.0
131
- WRITE_CONCERN = :write_concern.freeze
123
+ WRITE_CONCERN = :write_concern
132
124
 
133
125
  # The field name for the read preference.
134
126
  #
135
127
  # @since 2.0.0
136
- READ = :read.freeze
128
+ READ = :read
137
129
 
138
130
  # Whether to bypass document level validation.
139
131
  #
140
132
  # @since 2.2.0
141
- BYPASS_DOC_VALIDATION = :bypass_document_validation.freeze
133
+ BYPASS_DOC_VALIDATION = :bypass_document_validation
142
134
 
143
135
  # A collation to apply to the operation.
144
136
  #
145
137
  # @since 2.4.0
146
- COLLATION = :collation.freeze
138
+ COLLATION = :collation
147
139
 
148
140
  # @return [ Hash ] spec The specification for the operation.
149
141
  attr_reader :spec
@@ -160,9 +152,10 @@ module Mongo
160
152
  # @since 2.0.0
161
153
  def ==(other)
162
154
  return false unless other.is_a?(Specifiable)
155
+
163
156
  spec == other.spec
164
157
  end
165
- alias_method :eql?, :==
158
+ alias eql? ==
166
159
 
167
160
  # Get the cursor count from the spec.
168
161
  #
@@ -233,7 +226,7 @@ module Mongo
233
226
  #
234
227
  # @since 2.0.0
235
228
  def coll_name
236
- spec.fetch(COLL_NAME)
229
+ spec[COLL_NAME]
237
230
  end
238
231
 
239
232
  # The id of the cursor created on the server.
@@ -327,7 +320,7 @@ module Mongo
327
320
  # @return [ Hash ] The options.
328
321
  #
329
322
  # @since 2.0.0
330
- def options(connection)
323
+ def options(_connection)
331
324
  spec[OPTIONS] || {}
332
325
  end
333
326
 
@@ -360,7 +353,7 @@ module Mongo
360
353
  # Whether or not to bypass document level validation.
361
354
  #
362
355
  # @example Get the bypass_document_validation option.
363
- # specifiable.bypass_documentation_validation.
356
+ # specifiable.bypass_document_validation.
364
357
  #
365
358
  # @return [ true, false ] Whether to bypass document level validation.
366
359
  #
@@ -390,22 +383,10 @@ module Mongo
390
383
  # @return [ Hash ] The selector spec.
391
384
  #
392
385
  # @since 2.0.0
393
- def selector(connection)
386
+ def selector(_connection)
394
387
  spec[SELECTOR]
395
388
  end
396
389
 
397
- # The number of documents to request from the server.
398
- #
399
- # @example Get the to return value from the spec.
400
- # specifiable.to_return
401
- #
402
- # @return [ Integer ] The number of documents to return.
403
- #
404
- # @since 2.0.0
405
- def to_return
406
- spec[TO_RETURN]
407
- end
408
-
409
390
  # The update documents from the spec.
410
391
  #
411
392
  # @example Get the update documents.
@@ -473,9 +454,7 @@ module Mongo
473
454
  #
474
455
  # @since 2.0.0
475
456
  def read
476
- @read ||= begin
477
- ServerSelector.get(spec[READ]) if spec[READ]
478
- end
457
+ @read ||= (ServerSelector.get(spec[READ]) if spec[READ])
479
458
  end
480
459
 
481
460
  # Whether the operation is ordered.
@@ -487,7 +466,7 @@ module Mongo
487
466
  #
488
467
  # @since 2.1.0
489
468
  def ordered?
490
- !!(@spec.fetch(:ordered, true))
469
+ !!@spec.fetch(:ordered, true)
491
470
  end
492
471
 
493
472
  # The namespace, consisting of the db name and collection name.
@@ -526,6 +505,10 @@ module Mongo
526
505
  @spec[:txn_num]
527
506
  end
528
507
 
508
+ def txn_num=(num)
509
+ @spec[:txn_num] = num
510
+ end
511
+
529
512
  # The command.
530
513
  #
531
514
  # @return [ Hash ] The command.
@@ -560,13 +543,8 @@ module Mongo
560
543
  write_concern.nil? || write_concern.acknowledged?
561
544
  end
562
545
 
563
- def apply_collation(selector, connection, collation)
564
- if collation
565
- unless connection.features.collation_enabled?
566
- raise Error::UnsupportedCollation
567
- end
568
- selector = selector.merge(collation: collation)
569
- end
546
+ def apply_collation(selector, _connection, collation)
547
+ selector = selector.merge(collation: collation) if collation
570
548
  selector
571
549
  end
572
550
  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,13 +16,11 @@
17
16
 
18
17
  module Mongo
19
18
  module Operation
20
-
21
19
  # Shared behavior of operations that write (update, insert, delete).
22
20
  #
23
21
  # @since 2.5.2
24
22
  # @api private
25
23
  module Write
26
-
27
24
  include ResponseHandling
28
25
 
29
26
  # Execute the operation.
@@ -73,26 +70,24 @@ module Mongo
73
70
  def bulk_execute(connection, context:)
74
71
  Lint.assert_type(connection, Server::Connection)
75
72
 
76
- if connection.features.op_msg_enabled?
77
- self.class::OpMsg.new(spec).execute(connection, context: context).bulk_result
78
- else
79
- self.class::Command.new(spec).execute(connection, context: context).bulk_result
80
- end
73
+ self.class::OpMsg.new(spec).execute(connection, context: context).bulk_result
81
74
  end
82
75
 
83
76
  private
84
77
 
85
78
  def validate!(connection)
86
- if !acknowledged_write?
87
- if collation
88
- raise Error::UnsupportedCollation.new(
89
- Error::UnsupportedCollation::UNACKNOWLEDGED_WRITES_MESSAGE)
90
- end
91
- if array_filters(connection)
92
- raise Error::UnsupportedArrayFilters.new(
93
- Error::UnsupportedArrayFilters::UNACKNOWLEDGED_WRITES_MESSAGE)
94
- end
79
+ return if acknowledged_write?
80
+
81
+ if collation
82
+ raise Error::UnsupportedCollation.new(
83
+ Error::UnsupportedCollation::UNACKNOWLEDGED_WRITES_MESSAGE
84
+ )
95
85
  end
86
+ return unless array_filters(connection)
87
+
88
+ raise Error::UnsupportedArrayFilters.new(
89
+ Error::UnsupportedArrayFilters::UNACKNOWLEDGED_WRITES_MESSAGE
90
+ )
96
91
  end
97
92
  end
98
93
  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,25 +16,23 @@
17
16
 
18
17
  module Mongo
19
18
  module Operation
20
-
21
19
  # Custom behavior for operations that support write concern.
22
20
  #
23
21
  # @since 2.5.2
24
22
  # @api private
25
23
  module WriteConcernSupported
26
-
27
24
  private
28
25
 
29
- def write_concern_supported?(connection); true; end
26
+ def write_concern_supported?(_connection)
27
+ true
28
+ end
30
29
 
31
30
  def command(connection)
32
31
  add_write_concern!(super, connection)
33
32
  end
34
33
 
35
34
  def add_write_concern!(sel, connection)
36
- if write_concern && write_concern_supported?(connection)
37
- sel[:writeConcern] = write_concern.options
38
- end
35
+ sel[:writeConcern] = write_concern.options if write_concern && write_concern_supported?(connection)
39
36
  sel
40
37
  end
41
38
  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
  #
@@ -18,8 +17,7 @@
18
17
  module Mongo
19
18
  module Operation
20
19
  class Update
21
-
22
- # Defines custom behavior of results for an udpate when sent as part of a bulk write.
20
+ # Defines custom behavior of results for an update when sent as part of a bulk write.
23
21
  #
24
22
  # @since 2.0.0
25
23
  class BulkResult < Operation::Result
@@ -28,12 +26,12 @@ module Mongo
28
26
  # The number of modified docs field in the result.
29
27
  #
30
28
  # @since 2.0.0
31
- MODIFIED = 'nModified'.freeze
29
+ MODIFIED = 'nModified'
32
30
 
33
31
  # The upserted docs field in the result.
34
32
  #
35
33
  # @since 2.0.0
36
- UPSERTED = 'upserted'.freeze
34
+ UPSERTED = 'upserted'
37
35
 
38
36
  # Gets the number of documents upserted.
39
37
  #
@@ -45,9 +43,10 @@ module Mongo
45
43
  # @since 2.0.0
46
44
  def n_upserted
47
45
  return 0 unless acknowledged?
46
+
48
47
  @replies.reduce(0) do |n, reply|
49
48
  if upsert?(reply)
50
- n += reply.documents.first[UPSERTED].size
49
+ n + reply.documents.first[UPSERTED].size
51
50
  else
52
51
  n
53
52
  end
@@ -64,24 +63,19 @@ module Mongo
64
63
  # @since 2.0.0
65
64
  def n_matched
66
65
  return 0 unless acknowledged?
66
+
67
67
  @replies.reduce(0) do |n, reply|
68
68
  if upsert?(reply)
69
69
  reply.documents.first[N] - n_upserted
70
+ elsif reply.documents.first[N]
71
+ n + reply.documents.first[N]
70
72
  else
71
- if reply.documents.first[N]
72
- n += reply.documents.first[N]
73
- else
74
- n
75
- end
73
+ n
76
74
  end
77
75
  end
78
76
  end
79
77
 
80
78
  # Gets the number of documents modified.
81
- # Not that in a mixed sharded cluster a call to
82
- # update could return nModified (>= 2.6) or not (<= 2.4).
83
- # If any call does not return nModified we can't report
84
- # a valid final count so set the field to nil.
85
79
  #
86
80
  # @example Get the modified count.
87
81
  # result.n_modified
@@ -91,9 +85,10 @@ module Mongo
91
85
  # @since 2.0.0
92
86
  def n_modified
93
87
  return 0 unless acknowledged?
88
+
94
89
  @replies.reduce(0) do |n, reply|
95
90
  if n && reply.documents.first[MODIFIED]
96
- n += reply.documents.first[MODIFIED]
91
+ n + reply.documents.first[MODIFIED]
97
92
  else
98
93
  0
99
94
  end
@@ -110,6 +105,7 @@ module Mongo
110
105
  # @since 2.1.0
111
106
  def upserted
112
107
  return [] unless acknowledged?
108
+
113
109
  @replies.reduce([]) do |ids, reply|
114
110
  if upserted_ids = reply.documents.first[UPSERTED]
115
111
  ids += upserted_ids
@@ -120,7 +116,7 @@ module Mongo
120
116
 
121
117
  private
122
118
 
123
- def upsert?(reply)
119
+ def upsert?(_reply)
124
120
  upserted.any?
125
121
  end
126
122
  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
  #
@@ -18,7 +17,6 @@
18
17
  module Mongo
19
18
  module Operation
20
19
  class Update
21
-
22
20
  # A MongoDB update operation sent as an op message.
23
21
  #
24
22
  # @api private
@@ -29,11 +27,10 @@ module Mongo
29
27
  include ExecutableNoValidate
30
28
  include ExecutableTransactionLabel
31
29
  include PolymorphicResult
32
- include Validatable
33
30
 
34
31
  private
35
32
 
36
- def selector(connection)
33
+ def selector(_connection)
37
34
  {
38
35
  update: coll_name,
39
36
  ordered: ordered?,
@@ -43,7 +40,7 @@ module Mongo
43
40
  end
44
41
 
45
42
  def message(connection)
46
- updates = validate_updates(connection, send(IDENTIFIER))
43
+ updates = send(IDENTIFIER)
47
44
  section = Protocol::Msg::Section1.new(IDENTIFIER, updates)
48
45
  cmd = apply_relevant_timeouts_to(command(connection), connection)
49
46
  Protocol::Msg.new(flags, {}, cmd, section)
@@ -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,24 +17,22 @@
18
17
  module Mongo
19
18
  module Operation
20
19
  class Update
21
-
22
20
  # Defines custom behavior of results for an update.
23
21
  #
24
22
  # @since 2.0.0
25
23
  # @api semiprivate
26
24
  class Result < Operation::Result
27
-
28
25
  # The number of modified docs field in the result.
29
26
  #
30
27
  # @since 2.0.0
31
28
  # @api private
32
- MODIFIED = 'nModified'.freeze
29
+ MODIFIED = 'nModified'
33
30
 
34
31
  # The upserted docs field in the result.
35
32
  #
36
33
  # @since 2.0.0
37
34
  # @api private
38
- UPSERTED = 'upserted'.freeze
35
+ UPSERTED = 'upserted'
39
36
 
40
37
  # Get the number of documents matched.
41
38
  #
@@ -48,6 +45,7 @@ module Mongo
48
45
  # @api public
49
46
  def matched_count
50
47
  return 0 unless acknowledged?
48
+
51
49
  if upsert?
52
50
  0
53
51
  else
@@ -66,6 +64,7 @@ module Mongo
66
64
  # @api public
67
65
  def modified_count
68
66
  return 0 unless acknowledged?
67
+
69
68
  first[MODIFIED]
70
69
  end
71
70
 
@@ -81,6 +80,7 @@ module Mongo
81
80
  # @api public
82
81
  def upserted_id
83
82
  return nil unless upsert?
83
+
84
84
  upsert?.first['_id']
85
85
  end
86
86
 
@@ -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
  #
@@ -21,7 +20,6 @@ require 'mongo/operation/update/bulk_result'
21
20
 
22
21
  module Mongo
23
22
  module Operation
24
-
25
23
  # A MongoDB update operation.
26
24
  #
27
25
  # @api private
@@ -31,9 +29,7 @@ module Mongo
31
29
  include Specifiable
32
30
  include Write
33
31
 
34
- private
35
-
36
- IDENTIFIER = 'updates'.freeze
32
+ IDENTIFIER = 'updates'
37
33
  end
38
34
  end
39
35
  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
  #
@@ -18,7 +17,6 @@
18
17
  module Mongo
19
18
  module Operation
20
19
  class UpdateUser
21
-
22
20
  # A MongoDB updateuser operation sent as an op message.
23
21
  #
24
22
  # @api private
@@ -29,8 +27,8 @@ module Mongo
29
27
 
30
28
  private
31
29
 
32
- def selector(connection)
33
- { :updateUser => user.name }.merge(user.spec)
30
+ def selector(_connection)
31
+ { updateUser: user.name }.merge(user.spec)
34
32
  end
35
33
  end
36
34
  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
  #
@@ -19,7 +18,6 @@ require 'mongo/operation/update_user/op_msg'
19
18
 
20
19
  module Mongo
21
20
  module Operation
22
-
23
21
  # A MongoDB updateuser operation.
24
22
  #
25
23
  # @api private
@@ -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
  #
@@ -18,7 +17,6 @@
18
17
  module Mongo
19
18
  module Operation
20
19
  class UsersInfo
21
-
22
20
  # A MongoDB usersinfo operation sent as an op message.
23
21
  #
24
22
  # @api private
@@ -30,8 +28,8 @@ module Mongo
30
28
 
31
29
  private
32
30
 
33
- def selector(connection)
34
- { :usersInfo => user_name }
31
+ def selector(_connection)
32
+ { usersInfo: user_name }
35
33
  end
36
34
  end
37
35
  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
  #
@@ -18,19 +17,17 @@
18
17
  module Mongo
19
18
  module Operation
20
19
  class UsersInfo
21
-
22
20
  # Defines custom behavior of results when using the
23
21
  # usersInfo command.
24
22
  #
25
23
  # @since 2.1.0
26
24
  # @api semiprivate
27
25
  class Result < Operation::Result
28
-
29
26
  # The field name for the users document in a usersInfo result.
30
27
  #
31
28
  # @since 2.1.0
32
29
  # @api private
33
- USERS = 'users'.freeze
30
+ USERS = 'users'
34
31
 
35
32
  # @api public
36
33
  def documents
@@ -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
  #
@@ -20,7 +19,6 @@ require 'mongo/operation/users_info/result'
20
19
 
21
20
  module Mongo
22
21
  module Operation
23
-
24
22
  # A MongoDB usersinfo operation.
25
23
  #
26
24
  # @api private