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,160 @@
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 Cluster
17
+ module Topology
18
+
19
+ # Defines behaviour when a cluster is in replica set topology.
20
+ #
21
+ # @since 2.0.0
22
+ class ReplicaSet
23
+ include Loggable
24
+
25
+ # Constant for the replica set name configuration option.
26
+ #
27
+ # @since 2.0.0
28
+ REPLICA_SET_NAME = :replica_set.freeze
29
+
30
+ # @return [ Hash ] options The options.
31
+ attr_reader :options
32
+
33
+ # The display name for the topology.
34
+ #
35
+ # @since 2.0.0
36
+ NAME = 'Replica Set'.freeze
37
+
38
+ # Get the display name.
39
+ #
40
+ # @example Get the display name.
41
+ # ReplicaSet.display_name
42
+ #
43
+ # @return [ String ] The display name.
44
+ #
45
+ # @since 2.0.0
46
+ def display_name
47
+ NAME
48
+ end
49
+
50
+ # Elect a primary server within this topology.
51
+ #
52
+ # @example Elect a primary server.
53
+ # topology.elect_primary(description, servers)
54
+ #
55
+ # @param [ Server::Description ] description The description of the
56
+ # elected primary.
57
+ # @param [ Array<Server> ] server The list of known servers to the
58
+ # cluster.
59
+ #
60
+ # @return [ ReplicaSet ] The topology.
61
+ def elect_primary(description, servers)
62
+ if description.replica_set_name == replica_set_name
63
+ log_debug([ "Server #{description.address.to_s} elected as primary in #{replica_set_name}." ])
64
+ servers.each do |server|
65
+ if server.primary? && server.address != description.address
66
+ server.description.unknown!
67
+ end
68
+ end
69
+ else
70
+ log_warn([
71
+ "Server #{description.address.to_s} in incorrect replica set: #{description.replica_set_name}."
72
+ ])
73
+ end
74
+ self
75
+ end
76
+
77
+ # Initialize the topology with the options.
78
+ #
79
+ # @example Initialize the topology.
80
+ # ReplicaSet.new(options)
81
+ #
82
+ # @param [ Hash ] options The options.
83
+ #
84
+ # @since 2.0.0
85
+ def initialize(options)
86
+ @options = options
87
+ end
88
+
89
+ # A replica set topology is a replica set.
90
+ #
91
+ # @example Is the topology a replica set?
92
+ # ReplicaSet.replica_set?
93
+ #
94
+ # @return [ true ] Always true.
95
+ #
96
+ # @since 2.0.0
97
+ def replica_set?; true; end
98
+
99
+ # Get the replica set name configured for this topology.
100
+ #
101
+ # @example Get the replica set name.
102
+ # topology.replica_set_name
103
+ #
104
+ # @return [ String ] The name of the configured replica set.
105
+ #
106
+ # @since 2.0.0
107
+ def replica_set_name
108
+ @replica_set_name ||= options[REPLICA_SET_NAME]
109
+ end
110
+
111
+ # Select appropriate servers for this topology.
112
+ #
113
+ # @example Select the servers.
114
+ # ReplicaSet.servers(servers)
115
+ #
116
+ # @param [ Array<Server> ] servers The known servers.
117
+ #
118
+ # @return [ Array<Server> ] The servers in the replica set.
119
+ #
120
+ # @since 2.0.0
121
+ def servers(servers)
122
+ servers.select do |server|
123
+ (replica_set_name.nil? || server.replica_set_name == replica_set_name) &&
124
+ server.primary? || server.secondary?
125
+ end
126
+ end
127
+
128
+ # A replica set topology is not sharded.
129
+ #
130
+ # @example Is the topology sharded?
131
+ # ReplicaSet.sharded?
132
+ #
133
+ # @return [ false ] Always false.
134
+ #
135
+ # @since 2.0.0
136
+ def sharded?; false; end
137
+
138
+ # A replica set topology is not standalone.
139
+ #
140
+ # @example Is the topology standalone?
141
+ # ReplicaSet.standalone?
142
+ #
143
+ # @return [ false ] Always false.
144
+ #
145
+ # @since 2.0.0
146
+ def standalone?; false; end
147
+
148
+ # A replica set topology is not unknown.
149
+ #
150
+ # @example Is the topology unknown?
151
+ # ReplicaSet.unknown?
152
+ #
153
+ # @return [ false ] Always false.
154
+ #
155
+ # @since 2.0.0
156
+ def unknown?; false; end
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,132 @@
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 Cluster
17
+ module Topology
18
+
19
+ # Defines behaviour for when a cluster is in sharded topology.
20
+ #
21
+ # @since 2.0.0
22
+ class Sharded
23
+
24
+ # The display name for the topology.
25
+ #
26
+ # @since 2.0.0
27
+ NAME = 'Sharded'.freeze
28
+
29
+ # Get the display name.
30
+ #
31
+ # @example Get the display name.
32
+ # Sharded.display_name
33
+ #
34
+ # @return [ String ] The display name.
35
+ #
36
+ # @since 2.0.0
37
+ def display_name
38
+ NAME
39
+ end
40
+
41
+ # Elect a primary server within this topology.
42
+ #
43
+ # @example Elect a primary server.
44
+ # topology.elect_primary(description, servers)
45
+ #
46
+ # @param [ Server::Description ] description The description of the
47
+ # elected primary.
48
+ # @param [ Array<Server> ] server The list of known servers to the
49
+ # cluster.
50
+ #
51
+ # @return [ Sharded ] The topology.
52
+ def elect_primary(description, servers); self; end
53
+
54
+ # Initialize the topology with the options.
55
+ #
56
+ # @example Initialize the topology.
57
+ # Sharded.new(options)
58
+ #
59
+ # @param [ Hash ] options The options.
60
+ #
61
+ # @since 2.0.0
62
+ def initialize(options)
63
+ @options = options
64
+ end
65
+
66
+ # A sharded topology is not a replica set.
67
+ #
68
+ # @example Is the topology a replica set?
69
+ # Sharded.replica_set?
70
+ #
71
+ # @return [ false ] Always false.
72
+ #
73
+ # @since 2.0.0
74
+ def replica_set?; false; end
75
+
76
+ # Sharded topologies have no replica set name.
77
+ #
78
+ # @example Get the replica set name.
79
+ # sharded.replica_set_name
80
+ #
81
+ # @return [ nil ] Always nil.
82
+ #
83
+ # @since 2.0.0
84
+ def replica_set_name; nil; end
85
+
86
+ # Select appropriate servers for this topology.
87
+ #
88
+ # @example Select the servers.
89
+ # Sharded.servers(servers)
90
+ #
91
+ # @param [ Array<Server> ] servers The known servers.
92
+ #
93
+ # @return [ Array<Server> ] The mongos servers.
94
+ #
95
+ # @since 2.0.0
96
+ def servers(servers)
97
+ servers.select{ |server| server.mongos? }
98
+ end
99
+
100
+ # A sharded topology is sharded.
101
+ #
102
+ # @example Is the topology sharded?
103
+ # Sharded.sharded?
104
+ #
105
+ # @return [ true ] Always true.
106
+ #
107
+ # @since 2.0.0
108
+ def sharded?; true; end
109
+
110
+ # A sharded topology is not standalone.
111
+ #
112
+ # @example Is the topology standalone?
113
+ # Sharded.standalone?
114
+ #
115
+ # @return [ false ] Always false.
116
+ #
117
+ # @since 2.0.0
118
+ def standalone?; false; end
119
+
120
+ # A sharded topology is not unknown.
121
+ #
122
+ # @example Is the topology unknown?
123
+ # Sharded.unknown?
124
+ #
125
+ # @return [ false ] Always false.
126
+ #
127
+ # @since 2.0.0
128
+ def unknown?; false; end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,132 @@
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 Cluster
17
+ module Topology
18
+
19
+ # Defines behaviour for when a cluster is in standalone topology.
20
+ #
21
+ # @since 2.0.0
22
+ class Standalone
23
+
24
+ # The display name for the topology.
25
+ #
26
+ # @since 2.0.0
27
+ NAME = 'Standalone'.freeze
28
+
29
+ # Get the display name.
30
+ #
31
+ # @example Get the display name.
32
+ # Standalone.display_name
33
+ #
34
+ # @return [ String ] The display name.
35
+ #
36
+ # @since 2.0.0
37
+ def display_name
38
+ NAME
39
+ end
40
+
41
+ # Elect a primary server within this topology.
42
+ #
43
+ # @example Elect a primary server.
44
+ # topology.elect_primary(description, servers)
45
+ #
46
+ # @param [ Server::Description ] description The description of the
47
+ # elected primary.
48
+ # @param [ Array<Server> ] server The list of known servers to the
49
+ # cluster.
50
+ #
51
+ # @return [ Standalone ] The topology.
52
+ def elect_primary(description, servers); self; end
53
+
54
+ # Initialize the topology with the options.
55
+ #
56
+ # @example Initialize the topology.
57
+ # Standalone.new(options)
58
+ #
59
+ # @param [ Hash ] options The options.
60
+ #
61
+ # @since 2.0.0
62
+ def initialize(options)
63
+ @options = options
64
+ end
65
+
66
+ # A standalone topology is not a replica set.
67
+ #
68
+ # @example Is the topology a replica set?
69
+ # Sharded.replica_set?
70
+ #
71
+ # @return [ false ] Always false.
72
+ #
73
+ # @since 2.0.0
74
+ def replica_set?; false; end
75
+
76
+ # Standalone topologies have no replica set name.
77
+ #
78
+ # @example Get the replica set name.
79
+ # standalone.replica_set_name
80
+ #
81
+ # @return [ nil ] Always nil.
82
+ #
83
+ # @since 2.0.0
84
+ def replica_set_name; nil; end
85
+
86
+ # Select appropriate servers for this topology.
87
+ #
88
+ # @example Select the servers.
89
+ # Standalone.servers(servers, 'test')
90
+ #
91
+ # @param [ Array<Server> ] servers The known servers.
92
+ #
93
+ # @return [ Array<Server> ] The standalone servers.
94
+ #
95
+ # @since 2.0.0
96
+ def servers(servers, name = nil)
97
+ [ servers.detect{ |server| server.standalone? } ]
98
+ end
99
+
100
+ # A standalone topology is not sharded.
101
+ #
102
+ # @example Is the topology sharded?
103
+ # Standalone.sharded?
104
+ #
105
+ # @return [ false ] Always false.
106
+ #
107
+ # @since 2.0.0
108
+ def sharded?; false; end
109
+
110
+ # A standalone topology is standalone.
111
+ #
112
+ # @example Is the topology standalone?
113
+ # Standalone.standalone?
114
+ #
115
+ # @return [ true ] Always true.
116
+ #
117
+ # @since 2.0.0
118
+ def standalone?; true; end
119
+
120
+ # An standalone topology is not unknown.
121
+ #
122
+ # @example Is the topology unknown?
123
+ # Standalone.unknown?
124
+ #
125
+ # @return [ false ] Always false.
126
+ #
127
+ # @since 2.0.0
128
+ def unknown?; false; end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,155 @@
1
+ # Copyright (C) 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 Cluster
17
+ module Topology
18
+
19
+ # Defines behaviour for when a cluster is in an unknown state.
20
+ #
21
+ # @since 2.0.0
22
+ class Unknown
23
+ include Loggable
24
+
25
+ # The display name for the topology.
26
+ #
27
+ # @since 2.0.0
28
+ NAME = 'Unknown'.freeze
29
+
30
+ # @return [ Hash ] options The options.
31
+ attr_reader :options
32
+
33
+ # Get the display name.
34
+ #
35
+ # @example Get the display name.
36
+ # Unknown.display_name
37
+ #
38
+ # @return [ String ] The display name.
39
+ #
40
+ # @since 2.0.0
41
+ def display_name
42
+ NAME
43
+ end
44
+
45
+ # Elect a primary server within this topology.
46
+ #
47
+ # @example Elect a primary server.
48
+ # topology.elect_primary(description, servers)
49
+ #
50
+ # @param [ Server::Description ] description The description of the
51
+ # elected primary.
52
+ # @param [ Array<Server> ] server The list of known servers to the
53
+ # cluster.
54
+ #
55
+ # @return [ Sharded, ReplicaSet ] The new topology.
56
+ def elect_primary(description, servers)
57
+ if description.mongos?
58
+ log_debug([ "Mongos #{description.address.to_s} discovered." ])
59
+ Sharded.new(options)
60
+ else
61
+ initialize_replica_set(description, servers)
62
+ end
63
+ end
64
+
65
+ # Initialize the topology with the options.
66
+ #
67
+ # @example Initialize the topology.
68
+ # Unknown.new(options)
69
+ #
70
+ # @param [ Hash ] options The options.
71
+ #
72
+ # @since 2.0.0
73
+ def initialize(options)
74
+ @options = options
75
+ end
76
+
77
+ # An unknown topology is not a replica set.
78
+ #
79
+ # @example Is the topology a replica set?
80
+ # Unknown.replica_set?
81
+ #
82
+ # @return [ false ] Always false.
83
+ #
84
+ # @since 2.0.0
85
+ def replica_set?; false; end
86
+
87
+ # Unknown topologies have no replica set name.
88
+ #
89
+ # @example Get the replica set name.
90
+ # unknown.replica_set_name
91
+ #
92
+ # @return [ nil ] Always nil.
93
+ #
94
+ # @since 2.0.0
95
+ def replica_set_name; nil; end
96
+
97
+ # Select appropriate servers for this topology.
98
+ #
99
+ # @example Select the servers.
100
+ # Unknown.servers(servers)
101
+ #
102
+ # @param [ Array<Server> ] servers The known servers.
103
+ #
104
+ # @raise [ Unknown ] Cannot select servers when the topology is
105
+ # unknown.
106
+ #
107
+ # @since 2.0.0
108
+ def servers(servers)
109
+ end
110
+
111
+ # An unknown topology is not sharded.
112
+ #
113
+ # @example Is the topology sharded?
114
+ # Unknown.sharded?
115
+ #
116
+ # @return [ false ] Always false.
117
+ #
118
+ # @since 2.0.0
119
+ def sharded?; false; end
120
+
121
+ # An unknown topology is not standalone.
122
+ #
123
+ # @example Is the topology standalone?
124
+ # Unknown.standalone?
125
+ #
126
+ # @return [ true ] Always false.
127
+ #
128
+ # @since 2.0.0
129
+ def standalone?; false; end
130
+
131
+ # An unknown topology is unknown.
132
+ #
133
+ # @example Is the topology unknown?
134
+ # Unknown.unknown?
135
+ #
136
+ # @return [ true ] Always true.
137
+ #
138
+ # @since 2.0.0
139
+ def unknown?; true; end
140
+
141
+ private
142
+
143
+ def initialize_replica_set(description, servers)
144
+ log_debug([ "Server #{description.address.to_s} discovered as primary." ])
145
+ servers.each do |server|
146
+ if server.standalone? && server.address != description.address
147
+ server.description.unknown!
148
+ end
149
+ end
150
+ ReplicaSet.new(options.merge(:replica_set => description.replica_set_name))
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end