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
  #
@@ -20,7 +19,6 @@ require 'mongo/grid/file/info'
20
19
 
21
20
  module Mongo
22
21
  module Grid
23
-
24
22
  # A representation of a file in the database.
25
23
  #
26
24
  # @since 2.0.0
@@ -51,6 +49,7 @@ module Mongo
51
49
  # @since 2.0.0
52
50
  def ==(other)
53
51
  return false unless other.is_a?(File)
52
+
54
53
  chunks == other.chunks && info == other.info
55
54
  end
56
55
 
@@ -74,7 +73,7 @@ module Mongo
74
73
  #
75
74
  # @since 2.0.0
76
75
  def initialize(data, options = {})
77
- options = options.merge(:length => data.size) unless options[:length]
76
+ options = options.merge(length: data.size) unless options[:length]
78
77
  @info = Info.new(options)
79
78
  initialize_chunks!(data)
80
79
  end
@@ -113,11 +112,11 @@ module Mongo
113
112
  #
114
113
  # @return [ Array<Grid::File::Chunk> ] Array of chunks.
115
114
  def initialize_chunks!(value)
116
- if value.is_a?(Array)
117
- @chunks = value.map{ |doc| Chunk.new(doc) }
118
- else
119
- @chunks = Chunk.split(value, info)
120
- end
115
+ @chunks = if value.is_a?(Array)
116
+ value.map { |doc| Chunk.new(doc) }
117
+ else
118
+ Chunk.split(value, info)
119
+ end
121
120
  end
122
121
  end
123
122
  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,7 +16,6 @@
17
16
 
18
17
  module Mongo
19
18
  module Grid
20
-
21
19
  # Represents a view of the GridFS in the database.
22
20
  #
23
21
  # @since 2.0.0
@@ -27,12 +25,12 @@ module Mongo
27
25
  # The default root prefix.
28
26
  #
29
27
  # @since 2.0.0
30
- DEFAULT_ROOT = 'fs'.freeze
28
+ DEFAULT_ROOT = 'fs'
31
29
 
32
30
  # The specification for the chunks collection index.
33
31
  #
34
32
  # @since 2.0.0
35
- CHUNKS_INDEX = { :files_id => 1, :n => 1 }.freeze
33
+ CHUNKS_INDEX = { files_id: 1, n: 1 }.freeze
36
34
 
37
35
  # The specification for the files collection index.
38
36
  #
@@ -70,13 +68,12 @@ module Mongo
70
68
  def initialize(database, options = {})
71
69
  @database = database
72
70
  @options = options.dup
73
- =begin WriteConcern object support
74
- if @options[:write_concern].is_a?(WriteConcern::Base)
75
- # Cache the instance so that we do not needlessly reconstruct it.
76
- @write_concern = @options[:write_concern]
77
- @options[:write_concern] = @write_concern.options
78
- end
79
- =end
71
+ # WriteConcern object support
72
+ # if @options[:write_concern].is_a?(WriteConcern::Base)
73
+ # # Cache the instance so that we do not needlessly reconstruct it.
74
+ # @write_concern = @options[:write_concern]
75
+ # @options[:write_concern] = @write_concern.options
76
+ # end
80
77
  @options.freeze
81
78
  @chunks_collection = database[chunks_name]
82
79
  @files_collection = database[files_name]
@@ -155,7 +152,8 @@ module Mongo
155
152
  def find_one(selector = nil)
156
153
  file_info = files_collection.find(selector).first
157
154
  return nil unless file_info
158
- chunks = chunks_collection.find(:files_id => file_info[:_id]).sort(:n => 1)
155
+
156
+ chunks = chunks_collection.find(files_id: file_info[:_id]).sort(n: 1)
159
157
  Grid::File.new(chunks.to_a, Options::Mapper.transform(file_info, Grid::File::Info::MAPPINGS.invert))
160
158
  end
161
159
 
@@ -220,12 +218,13 @@ module Mongo
220
218
  def delete(id, opts = {})
221
219
  timeout_holder = CsotTimeoutHolder.new(operation_timeouts: operation_timeouts(opts))
222
220
  result = files_collection
223
- .find({ :_id => id }, @options.merge(timeout_ms: timeout_holder.remaining_timeout_ms))
224
- .delete_one(timeout_ms: timeout_holder.remaining_timeout_ms)
221
+ .find({ _id: id }, @options.merge(timeout_ms: timeout_holder.remaining_timeout_ms))
222
+ .delete_one(timeout_ms: timeout_holder.remaining_timeout_ms)
225
223
  chunks_collection
226
- .find({ :files_id => id }, @options.merge(timeout_ms: timeout_holder.remaining_timeout_ms))
224
+ .find({ files_id: id }, @options.merge(timeout_ms: timeout_holder.remaining_timeout_ms))
227
225
  .delete_many(timeout_ms: timeout_holder.remaining_timeout_ms)
228
226
  raise Error::FileNotFound.new(id, :id) if result.n == 0
227
+
229
228
  result
230
229
  end
231
230
 
@@ -319,12 +318,13 @@ module Mongo
319
318
  skip = revision
320
319
  sort = { 'uploadDate' => Mongo::Index::ASCENDING }
321
320
  end
322
- file_info_doc = files_collection.find({ filename: filename} ,
323
- sort: sort,
324
- skip: skip,
325
- limit: -1).first
321
+ file_info_doc = files_collection.find({ filename: filename },
322
+ sort: sort,
323
+ skip: skip,
324
+ limit: -1).first
326
325
  unless file_info_doc
327
326
  raise Error::FileNotFound.new(filename, :filename) unless opts[:revision]
327
+
328
328
  raise Error::InvalidFileRevision.new(filename, opts[:revision])
329
329
  end
330
330
  open_download_stream(file_info_doc[:_id], file_info_doc: file_info_doc, &block)
@@ -434,18 +434,16 @@ module Mongo
434
434
  # @since 2.1.0
435
435
  def upload_from_stream(filename, io, opts = {})
436
436
  open_upload_stream(filename, opts) do |stream|
437
+ stream.write(io)
438
+ # IOError and SystemCallError are for errors reading the io.
439
+ # Error::SocketError and Error::SocketTimeoutError are for
440
+ # writing to MongoDB.
441
+ rescue IOError, SystemCallError, Error::SocketError, Error::SocketTimeoutError
437
442
  begin
438
- stream.write(io)
439
- # IOError and SystemCallError are for errors reading the io.
440
- # Error::SocketError and Error::SocketTimeoutError are for
441
- # writing to MongoDB.
442
- rescue IOError, SystemCallError, Error::SocketError, Error::SocketTimeoutError
443
- begin
444
- stream.abort
445
- rescue Error::OperationFailure
446
- end
447
- raise
443
+ stream.abort
444
+ rescue Error::OperationFailure
448
445
  end
446
+ raise
449
447
  end.file_id
450
448
  end
451
449
 
@@ -465,7 +463,7 @@ module Mongo
465
463
  def read_preference
466
464
  @read_preference ||= begin
467
465
  pref = options[:read] || database.read_preference
468
- if BSON::Document === pref
466
+ if pref.is_a?(BSON::Document)
469
467
  pref
470
468
  else
471
469
  BSON::Document.new(pref)
@@ -483,10 +481,10 @@ module Mongo
483
481
  # @since 2.1.0
484
482
  def write_concern
485
483
  @write_concern ||= if wco = @options[:write_concern] || @options[:write]
486
- WriteConcern.get(wco)
487
- else
488
- database.write_concern
489
- end
484
+ WriteConcern.get(wco)
485
+ else
486
+ database.write_concern
487
+ end
490
488
  end
491
489
 
492
490
  # Drop the collections that implement this bucket.
@@ -525,9 +523,7 @@ module Mongo
525
523
  projection: { _id: 1 },
526
524
  timeout_ms: timeout_holder&.remaining_timeout_ms
527
525
  ).first
528
- if fc_idx.nil?
529
- create_index_if_missing!(files_collection, FSBucket::FILES_INDEX)
530
- end
526
+ create_index_if_missing!(files_collection, FSBucket::FILES_INDEX) if fc_idx.nil?
531
527
 
532
528
  cc_idx = chunks_collection.find(
533
529
  {},
@@ -535,24 +531,20 @@ module Mongo
535
531
  projection: { _id: 1 },
536
532
  timeout_ms: timeout_holder&.remaining_timeout_ms
537
533
  ).first
538
- if cc_idx.nil?
539
- create_index_if_missing!(chunks_collection, FSBucket::CHUNKS_INDEX, :unique => true)
540
- end
534
+ return unless cc_idx.nil?
535
+
536
+ create_index_if_missing!(chunks_collection, FSBucket::CHUNKS_INDEX, unique: true)
541
537
  end
542
538
 
543
539
  def create_index_if_missing!(collection, index_spec, options = {})
544
540
  indexes_view = collection.indexes
545
541
  begin
546
- if indexes_view.get(index_spec).nil?
547
- indexes_view.create_one(index_spec, options)
548
- end
542
+ indexes_view.create_one(index_spec, options) if indexes_view.get(index_spec).nil?
549
543
  rescue Mongo::Error::OperationFailure::Family => e
550
544
  # proceed with index creation if a NamespaceNotFound error is thrown
551
- if e.code == 26
552
- indexes_view.create_one(index_spec, options)
553
- else
554
- raise
555
- end
545
+ raise unless e.code == 26
546
+
547
+ indexes_view.create_one(index_spec, options)
556
548
  end
557
549
  end
558
550
 
@@ -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 Grid
20
19
  class FSBucket
21
-
22
20
  module Stream
23
21
  # A stream that reads files from the FSBucket.
24
22
  #
@@ -93,11 +91,9 @@ module Mongo
93
91
  data = chunk.data.data
94
92
  yield data
95
93
  num_read += 1
96
- length_read += data.size
94
+ length_read + data.size
97
95
  end.tap do
98
- if num_read < num_chunks
99
- raise Error::MissingFileChunk.new(num_chunks, num_read)
100
- end
96
+ raise Error::MissingFileChunk.new(num_chunks, num_read) if num_read < num_chunks
101
97
  end
102
98
  else
103
99
  view.to_enum
@@ -138,7 +134,7 @@ module Mongo
138
134
 
139
135
  # Is the stream closed.
140
136
  #
141
- # @example Is the stream closd.
137
+ # @example Is the stream closed.
142
138
  # stream.closed?
143
139
  #
144
140
  # @return [ true, false ] Whether the stream is closed.
@@ -164,7 +160,7 @@ module Mongo
164
160
  def read_preference
165
161
  @read_preference ||= begin
166
162
  pref = options[:read] || fs.read_preference
167
- if BSON::Document === pref
163
+ if pref.is_a?(BSON::Document)
168
164
  pref
169
165
  else
170
166
  BSON::Document.new(pref)
@@ -185,15 +181,11 @@ module Mongo
185
181
  def file_info
186
182
  @file_info ||= begin
187
183
  doc = options[:file_info_doc] ||
188
- fs.files_collection.find(
189
- { _id: file_id },
190
- { timeout_ms: @timeout_holder.remaining_timeout_ms! }
191
- ).first
192
- if doc
193
- File::Info.new(Options::Mapper.transform(doc, File::Info::MAPPINGS.invert))
194
- else
195
- nil
196
- end
184
+ fs.files_collection.find(
185
+ { _id: file_id },
186
+ { timeout_ms: @timeout_holder.remaining_timeout_ms! }
187
+ ).first
188
+ File::Info.new(Options::Mapper.transform(doc, File::Info::MAPPINGS.invert)) if doc
197
189
  end
198
190
  end
199
191
 
@@ -215,16 +207,16 @@ module Mongo
215
207
  def view
216
208
  @view ||= begin
217
209
  opts = if read_preference
218
- options.merge(read: read_preference)
219
- else
220
- options
221
- end
210
+ options.merge(read: read_preference)
211
+ else
212
+ options
213
+ end
222
214
  if @timeout_holder.csot?
223
215
  opts[:timeout_ms] = @timeout_holder.remaining_timeout_ms!
224
216
  opts[:timeout_mode] = :cursor_lifetime
225
217
  end
226
218
 
227
- fs.chunks_collection.find({ :files_id => file_id }, opts).sort(:n => 1)
219
+ fs.chunks_collection.find({ files_id: file_id }, opts).sort(n: 1)
228
220
  end
229
221
  end
230
222
 
@@ -239,23 +231,21 @@ module Mongo
239
231
  end
240
232
 
241
233
  def validate_length!(index, num_chunks, chunk, length_read)
242
- if num_chunks > 0 && chunk.data.data.size > 0
243
- raise Error::ExtraFileChunk.new unless index < num_chunks
244
- if index == num_chunks - 1
245
- unless chunk.data.data.size + length_read == file_info.length
246
- raise_unexpected_chunk_length!(chunk)
247
- end
248
- elsif chunk.data.data.size != file_info.chunk_size
249
- raise_unexpected_chunk_length!(chunk)
250
- end
234
+ return unless num_chunks > 0 && chunk.data.data.size > 0
235
+ raise Error::ExtraFileChunk.new unless index < num_chunks
236
+
237
+ if index == num_chunks - 1
238
+ raise_unexpected_chunk_length!(chunk) unless chunk.data.data.size + length_read == file_info.length
239
+ elsif chunk.data.data.size != file_info.chunk_size
240
+ raise_unexpected_chunk_length!(chunk)
251
241
  end
252
242
  end
253
243
 
254
244
  def validate_n!(index, chunk)
255
- unless index == chunk.n
256
- close
257
- raise Error::MissingFileChunk.new(index, chunk)
258
- end
245
+ return if index == chunk.n
246
+
247
+ close
248
+ raise Error::MissingFileChunk.new(index, chunk)
259
249
  end
260
250
  end
261
251
  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,13 +17,11 @@
18
17
  module Mongo
19
18
  module Grid
20
19
  class FSBucket
21
-
22
20
  module Stream
23
21
  # A stream that writes files to the FSBucket.
24
22
  #
25
23
  # @since 2.1.0
26
24
  class Write
27
-
28
25
  # @return [ FSBucket ] fs The fs bucket to which this stream writes.
29
26
  #
30
27
  # @since 2.1.0
@@ -73,13 +70,12 @@ module Mongo
73
70
  @n = 0
74
71
  @file_id = options[:file_id] || BSON::ObjectId.new
75
72
  @options = options.dup
76
- =begin WriteConcern object support
77
- if @options[:write_concern].is_a?(WriteConcern::Base)
78
- # Cache the instance so that we do not needlessly reconstruct it.
79
- @write_concern = @options[:write_concern]
80
- @options[:write_concern] = @write_concern.options
81
- end
82
- =end
73
+ # WriteConcern object support
74
+ # if @options[:write_concern].is_a?(WriteConcern::Base)
75
+ # # Cache the instance so that we do not needlessly reconstruct it.
76
+ # @write_concern = @options[:write_concern]
77
+ # @options[:write_concern] = @write_concern.options
78
+ # end
83
79
  @options.freeze
84
80
  @filename = @options[:filename]
85
81
  @open = true
@@ -105,12 +101,12 @@ module Mongo
105
101
  ensure_open!
106
102
  @indexes ||= ensure_indexes!
107
103
  @length += if io.respond_to?(:bytesize)
108
- # String objects
109
- io.bytesize
110
- else
111
- # IO objects
112
- io.size
113
- end
104
+ # String objects
105
+ io.bytesize
106
+ else
107
+ # IO objects
108
+ io.size
109
+ end
114
110
  chunks = File::Chunk.split(io, file_info, @n)
115
111
  @n += chunks.size
116
112
  unless chunks.empty?
@@ -153,10 +149,10 @@ module Mongo
153
149
  # @since 2.1.0
154
150
  def write_concern
155
151
  @write_concern ||= if wco = @options[:write_concern] || @options[:write]
156
- WriteConcern.get(wco)
157
- else
158
- fs.write_concern
159
- end
152
+ WriteConcern.get(wco)
153
+ else
154
+ fs.write_concern
155
+ end
160
156
  end
161
157
 
162
158
  # Is the stream closed.
@@ -181,7 +177,7 @@ module Mongo
181
177
  # @since 2.1.0
182
178
  def abort
183
179
  fs.chunks_collection.find(
184
- { :files_id => file_id },
180
+ { files_id: file_id },
185
181
  @options.merge(timeout_ms: @timeout_holder.remaining_timeout_ms!)
186
182
  ).delete_many
187
183
  (@open = false) || true
@@ -200,7 +196,6 @@ module Mongo
200
196
  def with_write_concern(collection)
201
197
  if write_concern.nil? || (collection.write_concern &&
202
198
  collection.write_concern.options == write_concern.options)
203
- then
204
199
  collection
205
200
  else
206
201
  collection.with(write: write_concern.options)
@@ -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
  #
@@ -21,7 +20,6 @@ require 'mongo/grid/stream/write'
21
20
  module Mongo
22
21
  module Grid
23
22
  class FSBucket
24
-
25
23
  # A stream that reads and writes files from/to the FSBucket.
26
24
  #
27
25
  # @since 2.1.0
@@ -42,8 +40,8 @@ module Mongo
42
40
  #
43
41
  # @since 2.1.0
44
42
  MODE_MAP = {
45
- READ_MODE => Read,
46
- WRITE_MODE => Write
43
+ READ_MODE => Read,
44
+ WRITE_MODE => Write
47
45
  }.freeze
48
46
 
49
47
  # Get a stream for reading/writing files from/to the FSBucket.
data/lib/mongo/grid.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
  #
data/lib/mongo/id.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
3
  # Copyright (C) 2016-2020 MongoDB Inc.
5
4
  #