mongo 1.12.5 → 2.0.0.beta

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 (437) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CONTRIBUTING.md +64 -0
  5. data/LICENSE +1 -1
  6. data/README.md +23 -125
  7. data/Rakefile +26 -21
  8. data/bin/mongo_console +6 -38
  9. data/lib/mongo.rb +23 -82
  10. data/lib/mongo/address.rb +111 -0
  11. data/lib/mongo/address/ipv4.rb +85 -0
  12. data/lib/mongo/address/ipv6.rb +85 -0
  13. data/lib/mongo/address/unix.rb +76 -0
  14. data/lib/mongo/auth.rb +108 -0
  15. data/lib/mongo/auth/cr.rb +44 -0
  16. data/lib/mongo/auth/cr/conversation.rb +119 -0
  17. data/lib/mongo/auth/executable.rb +52 -0
  18. data/lib/mongo/auth/ldap.rb +48 -0
  19. data/lib/mongo/auth/ldap/conversation.rb +92 -0
  20. data/lib/mongo/auth/roles.rb +104 -0
  21. data/lib/mongo/auth/scram.rb +53 -0
  22. data/lib/mongo/auth/scram/conversation.rb +450 -0
  23. data/lib/mongo/auth/user.rb +159 -0
  24. data/lib/mongo/auth/user/view.rb +102 -0
  25. data/lib/mongo/auth/x509.rb +48 -0
  26. data/lib/mongo/auth/x509/conversation.rb +92 -0
  27. data/lib/mongo/{gridfs.rb → bulk.rb} +2 -5
  28. data/lib/mongo/bulk/bulk_write.rb +307 -0
  29. data/lib/mongo/client.rb +233 -0
  30. data/lib/mongo/cluster.rb +203 -0
  31. data/lib/mongo/cluster/topology.rb +60 -0
  32. data/lib/mongo/cluster/topology/replica_set.rb +160 -0
  33. data/lib/mongo/cluster/topology/sharded.rb +132 -0
  34. data/lib/mongo/cluster/topology/standalone.rb +132 -0
  35. data/lib/mongo/cluster/topology/unknown.rb +155 -0
  36. data/lib/mongo/collection.rb +130 -1101
  37. data/lib/mongo/collection/view.rb +169 -0
  38. data/lib/mongo/collection/view/aggregation.rb +108 -0
  39. data/lib/mongo/collection/view/explainable.rb +49 -0
  40. data/lib/mongo/collection/view/immutable.rb +43 -0
  41. data/lib/mongo/collection/view/iterable.rb +48 -0
  42. data/lib/mongo/collection/view/map_reduce.rb +191 -0
  43. data/lib/mongo/collection/view/readable.rb +363 -0
  44. data/lib/mongo/collection/view/writable.rb +169 -0
  45. data/lib/mongo/cursor.rb +79 -680
  46. data/lib/mongo/database.rb +224 -0
  47. data/lib/mongo/database/view.rb +101 -0
  48. data/lib/mongo/error.rb +81 -0
  49. data/lib/mongo/error/bulk_write_failure.rb +41 -0
  50. data/lib/mongo/{utils/thread_local_variable_manager.rb → error/empty_batch.rb} +22 -8
  51. data/{test/functional/db_connection_test.rb → lib/mongo/error/invalid_bulk_operation.rb} +19 -8
  52. data/lib/mongo/error/invalid_collection_name.rb +39 -0
  53. data/lib/mongo/error/invalid_database_name.rb +39 -0
  54. data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
  55. data/lib/mongo/error/invalid_file.rb +38 -0
  56. data/lib/mongo/error/invalid_nonce.rb +46 -0
  57. data/lib/mongo/error/invalid_replacement_document.rb +39 -0
  58. data/lib/mongo/error/invalid_signature.rb +47 -0
  59. data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
  60. data/lib/mongo/error/max_bson_size.rb +40 -0
  61. data/lib/mongo/error/max_message_size.rb +42 -0
  62. data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
  63. data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
  64. data/lib/mongo/error/parser.rb +77 -0
  65. data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
  66. data/lib/mongo/error/socket_timeout_error.rb +23 -0
  67. data/lib/mongo/error/unsupported_features.rb +43 -0
  68. data/lib/mongo/event.rb +40 -0
  69. data/lib/mongo/event/listeners.rb +63 -0
  70. data/lib/mongo/event/primary_elected.rb +53 -0
  71. data/lib/mongo/event/publisher.rb +42 -0
  72. data/lib/mongo/event/server_added.rb +53 -0
  73. data/lib/mongo/event/server_removed.rb +53 -0
  74. data/lib/mongo/event/subscriber.rb +41 -0
  75. data/lib/mongo/grid.rb +16 -0
  76. data/lib/mongo/grid/file.rb +94 -0
  77. data/lib/mongo/grid/file/chunk.rb +184 -0
  78. data/lib/mongo/grid/file/metadata.rb +223 -0
  79. data/lib/mongo/grid/fs.rb +149 -0
  80. data/lib/mongo/index.rb +64 -0
  81. data/lib/mongo/index/view.rb +205 -0
  82. data/lib/mongo/loggable.rb +126 -0
  83. data/lib/mongo/logger.rb +132 -0
  84. data/lib/mongo/operation.rb +26 -0
  85. data/lib/mongo/operation/aggregate.rb +100 -0
  86. data/lib/mongo/operation/aggregate/result.rb +84 -0
  87. data/lib/mongo/operation/batchable.rb +103 -0
  88. data/lib/mongo/operation/bulk_delete/result.rb +197 -0
  89. data/lib/mongo/operation/bulk_insert/result.rb +195 -0
  90. data/lib/mongo/operation/bulk_update/result.rb +295 -0
  91. data/lib/mongo/operation/command.rb +62 -0
  92. data/lib/mongo/operation/executable.rb +105 -0
  93. data/lib/mongo/operation/kill_cursors.rb +39 -0
  94. data/lib/mongo/operation/limited.rb +37 -0
  95. data/lib/mongo/operation/list_collections/result.rb +116 -0
  96. data/lib/mongo/operation/list_indexes/result.rb +118 -0
  97. data/lib/mongo/operation/map_reduce.rb +96 -0
  98. data/lib/mongo/operation/map_reduce/result.rb +122 -0
  99. data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
  100. data/lib/mongo/operation/read/collections_info.rb +67 -0
  101. data/lib/mongo/operation/read/get_more.rb +71 -0
  102. data/lib/mongo/operation/read/indexes.rb +68 -0
  103. data/lib/mongo/operation/read/list_collections.rb +75 -0
  104. data/lib/mongo/operation/read/list_indexes.rb +77 -0
  105. data/lib/mongo/operation/read/query.rb +71 -0
  106. data/lib/mongo/operation/read_preferrable.rb +34 -0
  107. data/lib/mongo/operation/result.rb +259 -0
  108. data/lib/mongo/operation/specifiable.rb +380 -0
  109. data/lib/mongo/operation/write.rb +25 -0
  110. data/lib/mongo/operation/write/bulk_delete.rb +158 -0
  111. data/lib/mongo/operation/write/bulk_insert.rb +160 -0
  112. data/lib/mongo/operation/write/bulk_update.rb +167 -0
  113. data/lib/mongo/{connection/socket/socket_util.rb → operation/write/command.rb} +9 -24
  114. data/lib/mongo/operation/write/command/create_user.rb +43 -0
  115. data/lib/mongo/operation/write/command/delete.rb +56 -0
  116. data/lib/mongo/operation/write/command/drop_index.rb +51 -0
  117. data/lib/mongo/operation/write/command/ensure_index.rb +55 -0
  118. data/lib/mongo/operation/write/command/insert.rb +55 -0
  119. data/lib/mongo/operation/write/command/remove_user.rb +42 -0
  120. data/lib/mongo/operation/write/command/update.rb +60 -0
  121. data/lib/mongo/operation/write/command/writable.rb +61 -0
  122. data/lib/mongo/operation/write/create_index.rb +84 -0
  123. data/lib/mongo/operation/write/create_user.rb +75 -0
  124. data/lib/mongo/operation/write/delete.rb +91 -0
  125. data/lib/mongo/operation/write/drop_index.rb +62 -0
  126. data/lib/mongo/operation/write/insert.rb +88 -0
  127. data/lib/mongo/operation/write/remove_user.rb +70 -0
  128. data/lib/mongo/operation/write/update.rb +98 -0
  129. data/lib/mongo/protocol.rb +15 -0
  130. data/lib/mongo/protocol/bit_vector.rb +61 -0
  131. data/lib/mongo/protocol/delete.rb +94 -0
  132. data/lib/mongo/protocol/get_more.rb +99 -0
  133. data/lib/mongo/protocol/insert.rb +99 -0
  134. data/lib/mongo/protocol/kill_cursors.rb +74 -0
  135. data/lib/mongo/protocol/message.rb +252 -0
  136. data/lib/mongo/protocol/query.rb +147 -0
  137. data/lib/mongo/protocol/reply.rb +72 -0
  138. data/lib/mongo/protocol/serializers.rb +180 -0
  139. data/lib/mongo/protocol/update.rb +111 -0
  140. data/lib/mongo/server.rb +163 -0
  141. data/lib/mongo/server/connectable.rb +99 -0
  142. data/lib/mongo/server/connection.rb +133 -0
  143. data/lib/mongo/server/connection_pool.rb +141 -0
  144. data/lib/mongo/server/connection_pool/queue.rb +182 -0
  145. data/lib/mongo/server/context.rb +66 -0
  146. data/lib/mongo/server/description.rb +450 -0
  147. data/lib/mongo/server/description/features.rb +85 -0
  148. data/lib/mongo/server/description/inspector.rb +79 -0
  149. data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
  150. data/lib/mongo/server/description/inspector/server_added.rb +59 -0
  151. data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
  152. data/lib/mongo/server/monitor.rb +160 -0
  153. data/lib/mongo/server/monitor/connection.rb +88 -0
  154. data/lib/mongo/server_selector.rb +81 -0
  155. data/lib/mongo/server_selector/nearest.rb +94 -0
  156. data/lib/mongo/server_selector/primary.rb +88 -0
  157. data/lib/mongo/server_selector/primary_preferred.rb +94 -0
  158. data/lib/mongo/server_selector/secondary.rb +91 -0
  159. data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
  160. data/lib/mongo/server_selector/selectable.rb +209 -0
  161. data/lib/mongo/socket.rb +179 -0
  162. data/lib/mongo/socket/ssl.rb +108 -0
  163. data/lib/mongo/socket/tcp.rb +69 -0
  164. data/lib/mongo/socket/unix.rb +66 -0
  165. data/lib/mongo/uri.rb +504 -0
  166. data/lib/mongo/version.rb +21 -0
  167. data/lib/mongo/write_concern.rb +99 -0
  168. data/lib/mongo/write_concern/acknowledged.rb +38 -0
  169. data/lib/mongo/write_concern/normalizable.rb +73 -0
  170. data/lib/mongo/write_concern/unacknowledged.rb +43 -0
  171. data/mongo.gemspec +17 -14
  172. data/spec/mongo/address/ipv4_spec.rb +74 -0
  173. data/spec/mongo/address/ipv6_spec.rb +74 -0
  174. data/spec/mongo/address/unix_spec.rb +30 -0
  175. data/spec/mongo/address_spec.rb +206 -0
  176. data/spec/mongo/auth/cr_spec.rb +59 -0
  177. data/spec/mongo/auth/ldap_spec.rb +40 -0
  178. data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
  179. data/spec/mongo/auth/scram_spec.rb +55 -0
  180. data/spec/mongo/auth/user/view_spec.rb +76 -0
  181. data/spec/mongo/auth/user_spec.rb +190 -0
  182. data/spec/mongo/auth/x509_spec.rb +40 -0
  183. data/spec/mongo/auth_spec.rb +65 -0
  184. data/spec/mongo/bulk/bulk_write_spec.rb +175 -0
  185. data/spec/mongo/client_spec.rb +564 -0
  186. data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
  187. data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
  188. data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
  189. data/spec/mongo/cluster/topology_spec.rb +65 -0
  190. data/spec/mongo/cluster_spec.rb +129 -0
  191. data/spec/mongo/collection/view/aggregation_spec.rb +135 -0
  192. data/spec/mongo/collection/view/explainable_spec.rb +32 -0
  193. data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
  194. data/spec/mongo/collection/view/readable_spec.rb +603 -0
  195. data/spec/mongo/collection/view/writable_spec.rb +504 -0
  196. data/spec/mongo/collection/view_spec.rb +521 -0
  197. data/spec/mongo/collection_spec.rb +362 -0
  198. data/spec/mongo/cursor_spec.rb +295 -0
  199. data/spec/mongo/database_spec.rb +306 -0
  200. data/spec/mongo/error/parser_spec.rb +119 -0
  201. data/spec/mongo/event/publisher_spec.rb +50 -0
  202. data/spec/mongo/event/subscriber_spec.rb +34 -0
  203. data/spec/mongo/grid/file/chunk_spec.rb +226 -0
  204. data/spec/mongo/grid/file/metadata_spec.rb +69 -0
  205. data/spec/mongo/grid/file_spec.rb +138 -0
  206. data/spec/mongo/grid/fs_spec.rb +129 -0
  207. data/spec/mongo/index/view_spec.rb +226 -0
  208. data/spec/mongo/loggable_spec.rb +62 -0
  209. data/spec/mongo/logger_spec.rb +97 -0
  210. data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
  211. data/spec/mongo/operation/aggregate_spec.rb +135 -0
  212. data/spec/mongo/operation/command_spec.rb +106 -0
  213. data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
  214. data/spec/mongo/operation/limited_spec.rb +50 -0
  215. data/spec/mongo/operation/map_reduce_spec.rb +143 -0
  216. data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
  217. data/spec/mongo/operation/read/get_more_spec.rb +81 -0
  218. data/spec/mongo/operation/read/indexes_spec.rb +31 -0
  219. data/spec/mongo/operation/read/query_spec.rb +84 -0
  220. data/spec/mongo/operation/result_spec.rb +275 -0
  221. data/spec/mongo/operation/specifiable_spec.rb +53 -0
  222. data/spec/mongo/operation/write/bulk_delete_spec.rb +473 -0
  223. data/spec/mongo/operation/write/bulk_insert_spec.rb +466 -0
  224. data/spec/mongo/operation/write/bulk_update_spec.rb +524 -0
  225. data/spec/mongo/operation/write/command/delete_spec.rb +116 -0
  226. data/spec/mongo/operation/write/command/insert_spec.rb +117 -0
  227. data/spec/mongo/operation/write/command/update_spec.rb +123 -0
  228. data/spec/mongo/operation/write/create_user_spec.rb +44 -0
  229. data/spec/mongo/operation/write/delete_spec.rb +178 -0
  230. data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
  231. data/spec/mongo/operation/write/ensure_index_spec.rb +81 -0
  232. data/spec/mongo/operation/write/insert_spec.rb +231 -0
  233. data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
  234. data/spec/mongo/operation/write/response_spec.rb +85 -0
  235. data/spec/mongo/operation/write/update_spec.rb +177 -0
  236. data/spec/mongo/protocol/delete_spec.rb +167 -0
  237. data/spec/mongo/protocol/get_more_spec.rb +146 -0
  238. data/spec/mongo/protocol/insert_spec.rb +161 -0
  239. data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
  240. data/spec/mongo/protocol/query_spec.rb +285 -0
  241. data/spec/mongo/protocol/reply_spec.rb +157 -0
  242. data/spec/mongo/protocol/update_spec.rb +186 -0
  243. data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
  244. data/spec/mongo/server/connection_pool_spec.rb +120 -0
  245. data/spec/mongo/server/connection_spec.rb +289 -0
  246. data/spec/mongo/server/description/features_spec.rb +138 -0
  247. data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
  248. data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
  249. data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
  250. data/spec/mongo/server/description_spec.rb +510 -0
  251. data/spec/mongo/server/monitor_spec.rb +130 -0
  252. data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
  253. data/spec/mongo/server_selection_rtt_spec.rb +104 -0
  254. data/spec/mongo/server_selection_spec.rb +89 -0
  255. data/spec/mongo/server_selector/nearest_spec.rb +250 -0
  256. data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
  257. data/spec/mongo/server_selector/primary_spec.rb +114 -0
  258. data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
  259. data/spec/mongo/server_selector/secondary_spec.rb +196 -0
  260. data/spec/mongo/server_selector_spec.rb +101 -0
  261. data/spec/mongo/server_spec.rb +131 -0
  262. data/spec/mongo/uri_spec.rb +517 -0
  263. data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
  264. data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
  265. data/spec/mongo_orchestration_spec.rb +70 -0
  266. data/spec/spec_helper.rb +148 -0
  267. data/spec/support/authorization.rb +245 -0
  268. data/spec/support/helpers.rb +140 -0
  269. data/spec/support/matchers.rb +37 -0
  270. data/spec/support/mongo_orchestration.rb +61 -0
  271. data/spec/support/mongo_orchestration/requestable.rb +109 -0
  272. data/spec/support/mongo_orchestration/standalone.rb +57 -0
  273. data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
  274. data/spec/support/sdam/rs/discover_passives.yml +41 -0
  275. data/spec/support/sdam/rs/discover_primary.yml +40 -0
  276. data/spec/support/sdam/rs/discover_secondary.yml +41 -0
  277. data/spec/support/sdam/rs/discovery.yml +195 -0
  278. data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
  279. data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
  280. data/spec/support/sdam/rs/member_reconfig.yml +68 -0
  281. data/spec/support/sdam/rs/member_standalone.yml +60 -0
  282. data/spec/support/sdam/rs/new_primary.yml +74 -0
  283. data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
  284. data/spec/support/sdam/rs/non_rs_member.yml +31 -0
  285. data/spec/support/sdam/rs/normalize_case.yml +49 -0
  286. data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
  287. data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
  288. data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
  289. data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
  290. data/spec/support/sdam/rs/response_from_removed.yml +63 -0
  291. data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
  292. data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
  293. data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
  294. data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
  295. data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
  296. data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
  297. data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
  298. data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
  299. data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
  300. data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
  301. data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
  302. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
  303. data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
  304. data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
  305. data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
  306. data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
  307. data/spec/support/sdam/single/not_ok_response.yml +39 -0
  308. data/spec/support/sdam/single/standalone_removed.yml +32 -0
  309. data/spec/support/sdam/single/unavailable_seed.yml +28 -0
  310. data/spec/support/server_discovery_and_monitoring.rb +167 -0
  311. data/spec/support/server_selection.rb +140 -0
  312. data/spec/support/server_selection/rtt/first_value.yml +4 -0
  313. data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
  314. data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
  315. data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
  316. data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
  317. data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
  318. data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
  319. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +32 -0
  320. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +27 -0
  321. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +23 -0
  322. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +32 -0
  323. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +27 -0
  324. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +32 -0
  325. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +32 -0
  326. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +27 -0
  327. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +27 -0
  328. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +41 -0
  329. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +34 -0
  330. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +33 -0
  331. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +39 -0
  332. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +36 -0
  333. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +32 -0
  334. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +23 -0
  335. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +13 -0
  336. data/spec/support/server_selection_rtt.rb +41 -0
  337. data/spec/support/shared/bulk_write.rb +498 -0
  338. data/spec/support/shared/cursor.rb +38 -0
  339. data/spec/support/shared/operation.rb +77 -0
  340. data/spec/support/shared/protocol.rb +31 -0
  341. data/spec/support/shared/server_selector.rb +111 -0
  342. data/spec/support/shared/socket.rb +82 -0
  343. data/spec/support/travis.rb +14 -0
  344. metadata +523 -189
  345. metadata.gz.sig +0 -0
  346. data/VERSION +0 -1
  347. data/lib/mongo/bulk_write_collection_view.rb +0 -387
  348. data/lib/mongo/collection_writer.rb +0 -364
  349. data/lib/mongo/connection/node.rb +0 -249
  350. data/lib/mongo/connection/pool.rb +0 -340
  351. data/lib/mongo/connection/pool_manager.rb +0 -320
  352. data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
  353. data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
  354. data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
  355. data/lib/mongo/connection/socket/unix_socket.rb +0 -39
  356. data/lib/mongo/db.rb +0 -808
  357. data/lib/mongo/exception.rb +0 -145
  358. data/lib/mongo/functional/authentication.rb +0 -455
  359. data/lib/mongo/functional/logging.rb +0 -85
  360. data/lib/mongo/functional/read_preference.rb +0 -183
  361. data/lib/mongo/functional/scram.rb +0 -556
  362. data/lib/mongo/functional/uri_parser.rb +0 -409
  363. data/lib/mongo/functional/write_concern.rb +0 -66
  364. data/lib/mongo/gridfs/grid.rb +0 -112
  365. data/lib/mongo/gridfs/grid_ext.rb +0 -53
  366. data/lib/mongo/gridfs/grid_file_system.rb +0 -163
  367. data/lib/mongo/gridfs/grid_io.rb +0 -484
  368. data/lib/mongo/legacy.rb +0 -140
  369. data/lib/mongo/mongo_client.rb +0 -697
  370. data/lib/mongo/mongo_replica_set_client.rb +0 -535
  371. data/lib/mongo/mongo_sharded_client.rb +0 -159
  372. data/lib/mongo/networking.rb +0 -372
  373. data/lib/mongo/utils/conversions.rb +0 -110
  374. data/lib/mongo/utils/core_ext.rb +0 -70
  375. data/lib/mongo/utils/server_version.rb +0 -69
  376. data/lib/mongo/utils/support.rb +0 -80
  377. data/test/functional/authentication_test.rb +0 -39
  378. data/test/functional/bulk_api_stress_test.rb +0 -133
  379. data/test/functional/bulk_write_collection_view_test.rb +0 -1198
  380. data/test/functional/client_test.rb +0 -627
  381. data/test/functional/collection_test.rb +0 -2175
  382. data/test/functional/collection_writer_test.rb +0 -83
  383. data/test/functional/conversions_test.rb +0 -163
  384. data/test/functional/cursor_fail_test.rb +0 -57
  385. data/test/functional/cursor_message_test.rb +0 -56
  386. data/test/functional/cursor_test.rb +0 -683
  387. data/test/functional/db_api_test.rb +0 -835
  388. data/test/functional/db_test.rb +0 -348
  389. data/test/functional/grid_file_system_test.rb +0 -285
  390. data/test/functional/grid_io_test.rb +0 -252
  391. data/test/functional/grid_test.rb +0 -273
  392. data/test/functional/pool_test.rb +0 -136
  393. data/test/functional/safe_test.rb +0 -98
  394. data/test/functional/support_test.rb +0 -62
  395. data/test/functional/timeout_test.rb +0 -60
  396. data/test/functional/uri_test.rb +0 -446
  397. data/test/functional/write_concern_test.rb +0 -118
  398. data/test/helpers/general.rb +0 -50
  399. data/test/helpers/test_unit.rb +0 -476
  400. data/test/replica_set/authentication_test.rb +0 -37
  401. data/test/replica_set/basic_test.rb +0 -189
  402. data/test/replica_set/client_test.rb +0 -393
  403. data/test/replica_set/connection_test.rb +0 -138
  404. data/test/replica_set/count_test.rb +0 -66
  405. data/test/replica_set/cursor_test.rb +0 -220
  406. data/test/replica_set/insert_test.rb +0 -157
  407. data/test/replica_set/max_values_test.rb +0 -151
  408. data/test/replica_set/pinning_test.rb +0 -105
  409. data/test/replica_set/query_test.rb +0 -73
  410. data/test/replica_set/read_preference_test.rb +0 -219
  411. data/test/replica_set/refresh_test.rb +0 -211
  412. data/test/replica_set/replication_ack_test.rb +0 -95
  413. data/test/sharded_cluster/basic_test.rb +0 -203
  414. data/test/shared/authentication/basic_auth_shared.rb +0 -260
  415. data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
  416. data/test/shared/authentication/gssapi_shared.rb +0 -176
  417. data/test/shared/authentication/sasl_plain_shared.rb +0 -96
  418. data/test/shared/authentication/scram_shared.rb +0 -92
  419. data/test/shared/ssl_shared.rb +0 -235
  420. data/test/test_helper.rb +0 -61
  421. data/test/threading/basic_test.rb +0 -120
  422. data/test/tools/mongo_config.rb +0 -708
  423. data/test/tools/mongo_config_test.rb +0 -160
  424. data/test/unit/client_test.rb +0 -381
  425. data/test/unit/collection_test.rb +0 -166
  426. data/test/unit/connection_test.rb +0 -335
  427. data/test/unit/cursor_test.rb +0 -307
  428. data/test/unit/db_test.rb +0 -136
  429. data/test/unit/grid_test.rb +0 -76
  430. data/test/unit/mongo_sharded_client_test.rb +0 -48
  431. data/test/unit/node_test.rb +0 -93
  432. data/test/unit/pool_manager_test.rb +0 -111
  433. data/test/unit/read_pref_test.rb +0 -406
  434. data/test/unit/read_test.rb +0 -159
  435. data/test/unit/safe_test.rb +0 -158
  436. data/test/unit/sharding_pool_manager_test.rb +0 -84
  437. data/test/unit/write_concern_test.rb +0 -175
@@ -0,0 +1,66 @@
1
+ # Copyright (C) 2014-2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the 'License');
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an 'AS IS' BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Server
17
+
18
+ # Represents a context in which messages are sent to the server on a
19
+ # connection.
20
+ #
21
+ # @since 2.0.0
22
+ class Context
23
+ extend Forwardable
24
+
25
+ # @return [ Mongo::Server ] server The server the context is for.
26
+ attr_reader :server
27
+
28
+ # Delegate state checks to the server.
29
+ def_delegators :@server,
30
+ :features,
31
+ :max_wire_version,
32
+ :max_write_batch_size,
33
+ :mongos?,
34
+ :primary?,
35
+ :secondary?,
36
+ :standalone?
37
+
38
+ # Instantiate a server context.
39
+ #
40
+ # @example Instantiate a server context.
41
+ # Mongo::Server::Context.new(server)
42
+ #
43
+ # @param [ Mongo::Server ] server The server the context is for.
44
+ #
45
+ # @since 2.0.0
46
+ def initialize(server)
47
+ @server = server
48
+ end
49
+
50
+ # Execute a block of code with a connection, that is checked out of the
51
+ # pool and then checked back in.
52
+ #
53
+ # @example Send a message with the connection.
54
+ # context.with_connection do |connection|
55
+ # connection.dispatch([ command ])
56
+ # end
57
+ #
58
+ # @return [ Object ] The result of the block execution.
59
+ #
60
+ # @since 2.0.0
61
+ def with_connection(&block)
62
+ server.pool.with_connection(&block)
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,450 @@
1
+ # Copyright (C) 2014-2015 MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the 'License');
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an 'AS IS' BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'mongo/server/description/features'
16
+ require 'mongo/server/description/inspector'
17
+
18
+ module Mongo
19
+ class Server
20
+
21
+ # Represents a description of the server, populated by the result of the
22
+ # ismaster command.
23
+ #
24
+ # @since 2.0.0
25
+ class Description
26
+
27
+ # Constant for reading arbiter info from config.
28
+ #
29
+ # @since 2.0.0
30
+ ARBITER = 'arbiterOnly'.freeze
31
+
32
+ # Constant for reading arbiters info from config.
33
+ #
34
+ # @since 2.0.0
35
+ ARBITERS = 'arbiters'.freeze
36
+
37
+ # Constant for reading hidden info from config.
38
+ #
39
+ # @since 2.0.0
40
+ HIDDEN = 'hidden'.freeze
41
+
42
+ # Constant for reading hosts info from config.
43
+ #
44
+ # @since 2.0.0
45
+ HOSTS = 'hosts'.freeze
46
+
47
+ # Constant for the key for the message value.
48
+ #
49
+ # @since 2.0.0
50
+ MESSAGE = 'msg'.freeze
51
+
52
+ # Constant for the message that indicates a sharded cluster.
53
+ #
54
+ # @since 2.0.0
55
+ MONGOS_MESSAGE = 'isdbgrid'.freeze
56
+
57
+ # Constant for determining ghost servers.
58
+ #
59
+ # @since 2.0.0
60
+ REPLICA_SET = 'isreplicaset'.freeze
61
+
62
+ # Constant for reading max bson size info from config.
63
+ #
64
+ # @since 2.0.0
65
+ MAX_BSON_OBJECT_SIZE = 'maxBsonObjectSize'.freeze
66
+
67
+ # Constant for reading max message size info from config.
68
+ #
69
+ # @since 2.0.0
70
+ MAX_MESSAGE_BYTES = 'maxMessageSizeBytes'.freeze
71
+
72
+ # Constant for the max wire version.
73
+ #
74
+ # @since 2.0.0
75
+ MAX_WIRE_VERSION = 'maxWireVersion'.freeze
76
+
77
+ # Constant for min wire version.
78
+ #
79
+ # @since 2.0.0
80
+ MIN_WIRE_VERSION = 'minWireVersion'.freeze
81
+
82
+ # Constant for reading max write batch size.
83
+ #
84
+ # @since 2.0.0
85
+ MAX_WRITE_BATCH_SIZE = 'maxWriteBatchSize'.freeze
86
+
87
+ # Default max write batch size.
88
+ #
89
+ # @since 2.0.0
90
+ DEFAULT_MAX_WRITE_BATCH_SIZE = 1000.freeze
91
+
92
+ # The legacy wire protocol version.
93
+ #
94
+ # @since 2.0.0
95
+ LEGACY_WIRE_VERSION = 0.freeze
96
+
97
+ # Constant for reading passive info from config.
98
+ #
99
+ # @since 2.0.0
100
+ PASSIVE = 'passive'.freeze
101
+
102
+ # Constant for reading the passive server list.
103
+ #
104
+ # @since 2.0.0
105
+ PASSIVES = 'passives'.freeze
106
+
107
+ # Constant for reading primary info from config.
108
+ #
109
+ # @since 2.0.0
110
+ PRIMARY = 'ismaster'.freeze
111
+
112
+ # Constant for reading secondary info from config.
113
+ #
114
+ # @since 2.0.0
115
+ SECONDARY = 'secondary'.freeze
116
+
117
+ # Constant for reading replica set name info from config.
118
+ #
119
+ # @since 2.0.0
120
+ SET_NAME = 'setName'.freeze
121
+
122
+ # Constant for reading tags info from config.
123
+ #
124
+ # @since 2.0.0
125
+ TAGS = 'tags'.freeze
126
+
127
+ # @return [ Address ] address The server's address.
128
+ attr_reader :address
129
+
130
+ # @return [ Hash ] The actual result from the ismaster command.
131
+ attr_reader :config
132
+
133
+ # @return [ Features ] features The features for the server.
134
+ attr_reader :features
135
+
136
+ # @return [ Float ] The moving average time the ismaster call took to complete.
137
+ attr_reader :average_round_trip_time
138
+
139
+ # Will return true if the server is an arbiter.
140
+ #
141
+ # @example Is the server an arbiter?
142
+ # description.arbiter?
143
+ #
144
+ # @return [ true, false ] If the server is an arbiter.
145
+ #
146
+ # @since 2.0.0
147
+ def arbiter?
148
+ !!config[ARBITER] && !replica_set_name.nil?
149
+ end
150
+
151
+ # Get a list of all arbiters in the replica set.
152
+ #
153
+ # @example Get the arbiters in the replica set.
154
+ # description.arbiters
155
+ #
156
+ # @return [ Array<String> ] The arbiters in the set.
157
+ #
158
+ # @since 2.0.0
159
+ def arbiters
160
+ config[ARBITERS] || []
161
+ end
162
+
163
+ # Is the server a ghost in a replica set?
164
+ #
165
+ # @example Is the server a ghost?
166
+ # description.ghost?
167
+ #
168
+ # @return [ true, false ] If the server is a ghost.
169
+ #
170
+ # @since 2.0.0
171
+ def ghost?
172
+ !!config[REPLICA_SET]
173
+ end
174
+
175
+ # Will return true if the server is hidden.
176
+ #
177
+ # @example Is the server hidden?
178
+ # description.hidden?
179
+ #
180
+ # @return [ true, false ] If the server is hidden.
181
+ #
182
+ # @since 2.0.0
183
+ def hidden?
184
+ !!config[HIDDEN]
185
+ end
186
+
187
+ # Get a list of all servers in the replica set.
188
+ #
189
+ # @example Get the servers in the replica set.
190
+ # description.hosts
191
+ #
192
+ # @return [ Array<String> ] The servers in the set.
193
+ #
194
+ # @since 2.0.0
195
+ def hosts
196
+ config[HOSTS] || []
197
+ end
198
+
199
+ # Instantiate the new server description from the result of the ismaster
200
+ # command.
201
+ #
202
+ # @example Instantiate the new description.
203
+ # Description.new(address, { 'ismaster' => true }, 0.5)
204
+ #
205
+ # @param [ Address ] addressThe server address.
206
+ # @param [ Hash ] config The result of the ismaster command.
207
+ # @param [ Float ] average_round_trip_time The moving average time (ms) the ismaster
208
+ # call took to complete.
209
+ #
210
+ # @since 2.0.0
211
+ def initialize(address, config = {}, average_round_trip_time = 0)
212
+ @address = address
213
+ @config = config
214
+ @features = Features.new(wire_versions)
215
+ @average_round_trip_time = average_round_trip_time
216
+ end
217
+
218
+ # Inspect the server description.
219
+ #
220
+ # @example Inspect the server description
221
+ # description.inspect
222
+ #
223
+ # @return [ String ] The inspection.
224
+ #
225
+ # @since 2.0.0
226
+ def inspect
227
+ "#<Mongo::Server:Description:0x#{object_id} config=#{config} average_round_trip_time=#{average_round_trip_time}>"
228
+ end
229
+
230
+ # Get the max BSON object size for this server version.
231
+ #
232
+ # @example Get the max BSON object size.
233
+ # description.max_bson_object_size
234
+ #
235
+ # @return [ Integer ] The maximum object size in bytes.
236
+ #
237
+ # @since 2.0.0
238
+ def max_bson_object_size
239
+ config[MAX_BSON_OBJECT_SIZE]
240
+ end
241
+
242
+ # Get the max message size for this server version.
243
+ #
244
+ # @example Get the max message size.
245
+ # description.max_message_size
246
+ #
247
+ # @return [ Integer ] The maximum message size in bytes.
248
+ #
249
+ # @since 2.0.0
250
+ def max_message_size
251
+ config[MAX_MESSAGE_BYTES]
252
+ end
253
+
254
+ # Get the maximum batch size for writes.
255
+ #
256
+ # @example Get the max batch size.
257
+ # description.max_write_batch_size
258
+ #
259
+ # @return [ Integer ] The max batch size.
260
+ #
261
+ # @since 2.0.0
262
+ def max_write_batch_size
263
+ config[MAX_WRITE_BATCH_SIZE] || DEFAULT_MAX_WRITE_BATCH_SIZE
264
+ end
265
+
266
+ # Get the maximum wire version.
267
+ #
268
+ # @example Get the max wire version.
269
+ # description.max_wire_version
270
+ #
271
+ # @return [ Integer ] The max wire version supported.
272
+ #
273
+ # @since 2.0.0
274
+ def max_wire_version
275
+ config[MAX_WIRE_VERSION] || LEGACY_WIRE_VERSION
276
+ end
277
+
278
+ # Get the minimum wire version.
279
+ #
280
+ # @example Get the min wire version.
281
+ # description.min_wire_version
282
+ #
283
+ # @return [ Integer ] The min wire version supported.
284
+ #
285
+ # @since 2.0.0
286
+ def min_wire_version
287
+ config[MIN_WIRE_VERSION] || LEGACY_WIRE_VERSION
288
+ end
289
+
290
+ # Get the tags configured for the server.
291
+ #
292
+ # @example Get the tags.
293
+ # description.tags
294
+ #
295
+ # @return [ Hash ] The tags of the server.
296
+ #
297
+ # @since 2.0.0
298
+ def tags
299
+ config[TAGS] || {}
300
+ end
301
+
302
+ # Is the server a mongos?
303
+ #
304
+ # @example Is the server a mongos?
305
+ # description.mongos?
306
+ #
307
+ # @return [ true, false ] If the server is a mongos.
308
+ #
309
+ # @since 2.0.0
310
+ def mongos?
311
+ config[MESSAGE] == MONGOS_MESSAGE
312
+ end
313
+
314
+ # Is the description of type other.
315
+ #
316
+ # @example Is the description of type other.
317
+ # description.other?
318
+ #
319
+ # @return [ true, false ] If the description is other.
320
+ #
321
+ # @since 2.0.0
322
+ def other?
323
+ !primary? && !secondary? && !passive? && !arbiter?
324
+ end
325
+
326
+ # Will return true if the server is passive.
327
+ #
328
+ # @example Is the server passive?
329
+ # description.passive?
330
+ #
331
+ # @return [ true, false ] If the server is passive.
332
+ #
333
+ # @since 2.0.0
334
+ def passive?
335
+ !!config[PASSIVE]
336
+ end
337
+
338
+ # Get a list of the passive servers in the cluster.
339
+ #
340
+ # @example Get the passives.
341
+ # description.passives
342
+ #
343
+ # @return [ Array<String> ] The list of passives.
344
+ #
345
+ # @since 2.0.0
346
+ def passives
347
+ config[PASSIVES] || []
348
+ end
349
+
350
+ # Will return true if the server is a primary.
351
+ #
352
+ # @example Is the server a primary?
353
+ # description.primary?
354
+ #
355
+ # @return [ true, false ] If the server is a primary.
356
+ #
357
+ # @since 2.0.0
358
+ def primary?
359
+ !!config[PRIMARY] && !replica_set_name.nil?
360
+ end
361
+
362
+ # Get the name of the replica set the server belongs to, returns nil if
363
+ # none.
364
+ #
365
+ # @example Get the replica set name.
366
+ # description.replica_set_name
367
+ #
368
+ # @return [ String, nil ] The name of the replica set.
369
+ #
370
+ # @since 2.0.0
371
+ def replica_set_name
372
+ config[SET_NAME]
373
+ end
374
+
375
+ # Get a list of all servers known to the cluster.
376
+ #
377
+ # @example Get all servers.
378
+ # description.servers
379
+ #
380
+ # @return [ Array<String> ] The list of all servers.
381
+ #
382
+ # @since 2.0.0
383
+ def servers
384
+ hosts + arbiters + passives
385
+ end
386
+
387
+ # Will return true if the server is a secondary.
388
+ #
389
+ # @example Is the server a secondary?
390
+ # description.secondary?
391
+ #
392
+ # @return [ true, false ] If the server is a secondary.
393
+ #
394
+ # @since 2.0.0
395
+ def secondary?
396
+ !!config[SECONDARY] && !replica_set_name.nil?
397
+ end
398
+
399
+ # Is this server a standalone server?
400
+ #
401
+ # @example Is the server standalone?
402
+ # description.standalone?
403
+ #
404
+ # @return [ true, false ] If the server is standalone.
405
+ #
406
+ # @since 2.0.0
407
+ def standalone?
408
+ replica_set_name.nil? && !mongos? && !ghost? && !unknown?
409
+ end
410
+
411
+ # Is the server description currently unknown?
412
+ #
413
+ # @example Is the server description unknown?
414
+ # description.unknown?
415
+ #
416
+ # @return [ true, false ] If the server description is unknown.
417
+ #
418
+ # @since 2.0.0
419
+ def unknown?
420
+ config.empty? || config[Operation::Result::OK] != 1
421
+ end
422
+
423
+ # A result from another server's ismaster command before this server has
424
+ # refreshed causes the need for this description to become unknown before
425
+ # the next refresh.
426
+ #
427
+ # @example Force an unknown state.
428
+ # description.unknown!
429
+ #
430
+ # @return [ true ] Always true.
431
+ #
432
+ # @since 2.0.0
433
+ def unknown!
434
+ @config = {} and true
435
+ end
436
+
437
+ # Get the range of supported wire versions for the server.
438
+ #
439
+ # @example Get the wire version range.
440
+ # description.wire_versions
441
+ #
442
+ # @return [ Range ] The wire version range.
443
+ #
444
+ # @since 2.0.0
445
+ def wire_versions
446
+ min_wire_version..max_wire_version
447
+ end
448
+ end
449
+ end
450
+ end