mongo 1.12.5 → 2.0.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 (475) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CONTRIBUTING.md +64 -0
  4. data/LICENSE +1 -1
  5. data/README.md +21 -126
  6. data/Rakefile +39 -21
  7. data/bin/mongo_console +6 -38
  8. data/lib/mongo/address/ipv4.rb +85 -0
  9. data/lib/mongo/address/ipv6.rb +85 -0
  10. data/lib/mongo/address/unix.rb +76 -0
  11. data/lib/mongo/address.rb +111 -0
  12. data/lib/mongo/auth/cr/conversation.rb +119 -0
  13. data/lib/mongo/auth/cr.rb +44 -0
  14. data/lib/mongo/auth/executable.rb +52 -0
  15. data/lib/mongo/auth/ldap/conversation.rb +92 -0
  16. data/lib/mongo/auth/ldap.rb +48 -0
  17. data/lib/mongo/auth/roles.rb +104 -0
  18. data/lib/mongo/auth/scram/conversation.rb +450 -0
  19. data/lib/mongo/auth/scram.rb +53 -0
  20. data/lib/mongo/auth/user/view.rb +102 -0
  21. data/lib/mongo/auth/user.rb +159 -0
  22. data/lib/mongo/auth/x509/conversation.rb +92 -0
  23. data/lib/mongo/auth/x509.rb +48 -0
  24. data/lib/mongo/auth.rb +108 -0
  25. data/lib/mongo/bulk_write/bulk_writable.rb +191 -0
  26. data/lib/mongo/bulk_write/deletable.rb +60 -0
  27. data/lib/mongo/bulk_write/insertable.rb +52 -0
  28. data/lib/mongo/bulk_write/ordered_bulk_write.rb +48 -0
  29. data/lib/mongo/bulk_write/replacable.rb +57 -0
  30. data/lib/mongo/bulk_write/unordered_bulk_write.rb +46 -0
  31. data/lib/mongo/bulk_write/updatable.rb +68 -0
  32. data/lib/mongo/bulk_write.rb +52 -0
  33. data/lib/mongo/client.rb +246 -0
  34. data/lib/mongo/cluster/topology/replica_set.rb +160 -0
  35. data/lib/mongo/cluster/topology/sharded.rb +132 -0
  36. data/lib/mongo/cluster/topology/standalone.rb +132 -0
  37. data/lib/mongo/cluster/topology/unknown.rb +155 -0
  38. data/lib/mongo/cluster/topology.rb +60 -0
  39. data/lib/mongo/cluster.rb +203 -0
  40. data/lib/mongo/collection/view/aggregation.rb +108 -0
  41. data/lib/mongo/collection/view/explainable.rb +49 -0
  42. data/lib/mongo/collection/view/immutable.rb +43 -0
  43. data/lib/mongo/collection/view/iterable.rb +48 -0
  44. data/lib/mongo/collection/view/map_reduce.rb +191 -0
  45. data/lib/mongo/collection/view/readable.rb +363 -0
  46. data/lib/mongo/collection/view/writable.rb +185 -0
  47. data/lib/mongo/collection/view.rb +169 -0
  48. data/lib/mongo/collection.rb +130 -1101
  49. data/lib/mongo/cursor.rb +78 -681
  50. data/lib/mongo/database/view.rb +101 -0
  51. data/lib/mongo/database.rb +224 -0
  52. data/lib/mongo/error/bulk_write_error.rb +41 -0
  53. data/lib/mongo/error/invalid_bulk_operation.rb +36 -0
  54. data/lib/mongo/error/invalid_bulk_operation_type.rb +36 -0
  55. data/lib/mongo/error/invalid_collection_name.rb +39 -0
  56. data/lib/mongo/error/invalid_database_name.rb +39 -0
  57. data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
  58. data/lib/mongo/error/invalid_file.rb +38 -0
  59. data/lib/mongo/error/invalid_nonce.rb +46 -0
  60. data/lib/mongo/error/invalid_replacement_document.rb +39 -0
  61. data/lib/mongo/error/invalid_signature.rb +47 -0
  62. data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
  63. data/lib/mongo/error/max_bson_size.rb +40 -0
  64. data/lib/mongo/error/max_message_size.rb +42 -0
  65. data/{test/functional/db_connection_test.rb → lib/mongo/error/multi_index_drop.rb} +17 -8
  66. data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
  67. data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
  68. data/lib/mongo/error/parser.rb +77 -0
  69. data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
  70. data/lib/mongo/error/socket_timeout_error.rb +23 -0
  71. data/lib/mongo/error/unsupported_features.rb +43 -0
  72. data/lib/mongo/error.rb +82 -0
  73. data/lib/mongo/event/listeners.rb +63 -0
  74. data/lib/mongo/event/primary_elected.rb +53 -0
  75. data/lib/mongo/event/publisher.rb +42 -0
  76. data/lib/mongo/event/server_added.rb +53 -0
  77. data/lib/mongo/event/server_removed.rb +53 -0
  78. data/lib/mongo/event/subscriber.rb +41 -0
  79. data/lib/mongo/event.rb +40 -0
  80. data/lib/mongo/grid/file/chunk.rb +184 -0
  81. data/lib/mongo/grid/file/metadata.rb +229 -0
  82. data/lib/mongo/grid/file.rb +106 -0
  83. data/lib/mongo/grid/fs.rb +149 -0
  84. data/lib/mongo/{gridfs.rb → grid.rb} +3 -5
  85. data/lib/mongo/index/view.rb +261 -0
  86. data/lib/mongo/index.rb +64 -0
  87. data/lib/mongo/loggable.rb +126 -0
  88. data/lib/mongo/logger.rb +132 -0
  89. data/lib/mongo/operation/aggregate/result.rb +88 -0
  90. data/lib/mongo/operation/aggregate.rb +100 -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 +114 -0
  96. data/lib/mongo/operation/list_indexes/result.rb +118 -0
  97. data/lib/mongo/operation/map_reduce/result.rb +122 -0
  98. data/lib/mongo/operation/map_reduce.rb +96 -0
  99. data/lib/mongo/operation/read/collections_info.rb +67 -0
  100. data/lib/mongo/operation/read/get_more.rb +71 -0
  101. data/lib/mongo/operation/read/indexes.rb +68 -0
  102. data/lib/mongo/operation/read/list_collections.rb +75 -0
  103. data/lib/mongo/operation/read/list_indexes.rb +77 -0
  104. data/lib/mongo/operation/read/query.rb +71 -0
  105. data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
  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 +397 -0
  109. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +75 -0
  110. data/lib/mongo/operation/write/bulk/bulk_delete.rb +144 -0
  111. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +68 -0
  112. data/lib/mongo/operation/write/bulk/bulk_insert.rb +129 -0
  113. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +67 -0
  114. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +162 -0
  115. data/lib/mongo/operation/write/bulk/bulk_update.rb +153 -0
  116. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +83 -0
  117. data/lib/mongo/operation/write/bulk.rb +17 -0
  118. data/lib/mongo/operation/write/command/create_index.rb +50 -0
  119. data/lib/mongo/operation/write/command/create_user.rb +43 -0
  120. data/lib/mongo/operation/write/command/delete.rb +56 -0
  121. data/lib/mongo/operation/write/command/drop_index.rb +51 -0
  122. data/lib/mongo/operation/write/command/insert.rb +55 -0
  123. data/lib/mongo/operation/write/command/remove_user.rb +42 -0
  124. data/lib/mongo/operation/write/command/update.rb +60 -0
  125. data/lib/mongo/operation/write/command/writable.rb +61 -0
  126. data/lib/mongo/operation/write/command.rb +22 -0
  127. data/lib/mongo/operation/write/create_index.rb +89 -0
  128. data/lib/mongo/operation/write/create_user.rb +75 -0
  129. data/lib/mongo/operation/write/delete/result.rb +40 -0
  130. data/lib/mongo/operation/write/delete.rb +93 -0
  131. data/lib/mongo/operation/write/drop_index.rb +62 -0
  132. data/lib/mongo/{utils/thread_local_variable_manager.rb → operation/write/insert/result.rb} +15 -8
  133. data/lib/mongo/operation/write/insert.rb +90 -0
  134. data/lib/mongo/operation/write/remove_user.rb +70 -0
  135. data/lib/mongo/operation/write/update/result.rb +160 -0
  136. data/lib/mongo/operation/write/update.rb +103 -0
  137. data/lib/mongo/{connection/socket/socket_util.rb → operation/write.rb} +10 -24
  138. data/lib/mongo/operation.rb +25 -0
  139. data/lib/mongo/options/mapper.rb +78 -0
  140. data/lib/mongo/options.rb +15 -0
  141. data/lib/mongo/protocol/bit_vector.rb +61 -0
  142. data/lib/mongo/protocol/delete.rb +94 -0
  143. data/lib/mongo/protocol/get_more.rb +99 -0
  144. data/lib/mongo/protocol/insert.rb +99 -0
  145. data/lib/mongo/protocol/kill_cursors.rb +74 -0
  146. data/lib/mongo/protocol/message.rb +252 -0
  147. data/lib/mongo/protocol/query.rb +147 -0
  148. data/lib/mongo/protocol/reply.rb +72 -0
  149. data/lib/mongo/protocol/serializers.rb +180 -0
  150. data/lib/mongo/protocol/update.rb +111 -0
  151. data/lib/mongo/protocol.rb +15 -0
  152. data/lib/mongo/server/connectable.rb +110 -0
  153. data/lib/mongo/server/connection.rb +134 -0
  154. data/lib/mongo/server/connection_pool/queue.rb +182 -0
  155. data/lib/mongo/server/connection_pool.rb +141 -0
  156. data/lib/mongo/server/context.rb +66 -0
  157. data/lib/mongo/server/description/features.rb +85 -0
  158. data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
  159. data/lib/mongo/server/description/inspector/server_added.rb +59 -0
  160. data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
  161. data/lib/mongo/server/description/inspector.rb +79 -0
  162. data/lib/mongo/server/description.rb +450 -0
  163. data/lib/mongo/server/monitor/connection.rb +89 -0
  164. data/lib/mongo/server/monitor.rb +176 -0
  165. data/lib/mongo/server.rb +163 -0
  166. data/lib/mongo/server_selector/nearest.rb +94 -0
  167. data/lib/mongo/server_selector/primary.rb +88 -0
  168. data/lib/mongo/server_selector/primary_preferred.rb +94 -0
  169. data/lib/mongo/server_selector/secondary.rb +91 -0
  170. data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
  171. data/lib/mongo/server_selector/selectable.rb +209 -0
  172. data/lib/mongo/server_selector.rb +81 -0
  173. data/lib/mongo/socket/ssl.rb +130 -0
  174. data/lib/mongo/socket/tcp.rb +69 -0
  175. data/lib/mongo/socket/unix.rb +64 -0
  176. data/lib/mongo/socket.rb +179 -0
  177. data/lib/mongo/uri.rb +504 -0
  178. data/lib/mongo/version.rb +21 -0
  179. data/lib/mongo/write_concern/acknowledged.rb +52 -0
  180. data/lib/mongo/write_concern/normalizable.rb +51 -0
  181. data/lib/mongo/write_concern/unacknowledged.rb +55 -0
  182. data/lib/mongo/write_concern.rb +99 -0
  183. data/lib/mongo.rb +24 -82
  184. data/mongo.gemspec +17 -14
  185. data/spec/certificates/ca.pem +17 -0
  186. data/spec/certificates/client.pem +101 -0
  187. data/spec/certificates/crl.pem +10 -0
  188. data/spec/certificates/crl_client_revoked.pem +12 -0
  189. data/spec/certificates/password_protected.pem +51 -0
  190. data/spec/certificates/server.pem +34 -0
  191. data/spec/mongo/address/ipv4_spec.rb +74 -0
  192. data/spec/mongo/address/ipv6_spec.rb +74 -0
  193. data/spec/mongo/address/unix_spec.rb +30 -0
  194. data/spec/mongo/address_spec.rb +206 -0
  195. data/spec/mongo/auth/cr_spec.rb +59 -0
  196. data/spec/mongo/auth/ldap_spec.rb +40 -0
  197. data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
  198. data/spec/mongo/auth/scram_spec.rb +55 -0
  199. data/spec/mongo/auth/user/view_spec.rb +76 -0
  200. data/spec/mongo/auth/user_spec.rb +190 -0
  201. data/spec/mongo/auth/x509_spec.rb +40 -0
  202. data/spec/mongo/auth_spec.rb +65 -0
  203. data/spec/mongo/bulk/bulk_write_spec.rb +262 -0
  204. data/spec/mongo/client_spec.rb +564 -0
  205. data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
  206. data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
  207. data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
  208. data/spec/mongo/cluster/topology_spec.rb +65 -0
  209. data/spec/mongo/cluster_spec.rb +129 -0
  210. data/spec/mongo/collection/view/aggregation_spec.rb +148 -0
  211. data/spec/mongo/collection/view/explainable_spec.rb +32 -0
  212. data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
  213. data/spec/mongo/collection/view/readable_spec.rb +603 -0
  214. data/spec/mongo/collection/view/writable_spec.rb +679 -0
  215. data/spec/mongo/collection/view_spec.rb +530 -0
  216. data/spec/mongo/collection_spec.rb +362 -0
  217. data/spec/mongo/crud_spec.rb +42 -0
  218. data/spec/mongo/cursor_spec.rb +295 -0
  219. data/spec/mongo/database_spec.rb +302 -0
  220. data/spec/mongo/error/parser_spec.rb +119 -0
  221. data/spec/mongo/event/publisher_spec.rb +50 -0
  222. data/spec/mongo/event/subscriber_spec.rb +34 -0
  223. data/spec/mongo/grid/file/chunk_spec.rb +226 -0
  224. data/spec/mongo/grid/file/metadata_spec.rb +92 -0
  225. data/spec/mongo/grid/file_spec.rb +172 -0
  226. data/spec/mongo/grid/fs_spec.rb +129 -0
  227. data/spec/mongo/index/view_spec.rb +330 -0
  228. data/spec/mongo/loggable_spec.rb +62 -0
  229. data/spec/mongo/logger_spec.rb +97 -0
  230. data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
  231. data/spec/mongo/operation/aggregate_spec.rb +127 -0
  232. data/spec/mongo/operation/command_spec.rb +98 -0
  233. data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
  234. data/spec/mongo/operation/limited_spec.rb +50 -0
  235. data/spec/mongo/operation/map_reduce_spec.rb +143 -0
  236. data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
  237. data/spec/mongo/operation/read/get_more_spec.rb +81 -0
  238. data/spec/mongo/operation/read/indexes_spec.rb +31 -0
  239. data/spec/mongo/operation/read/query_spec.rb +84 -0
  240. data/spec/mongo/operation/result_spec.rb +275 -0
  241. data/spec/mongo/operation/specifiable_spec.rb +53 -0
  242. data/spec/mongo/operation/write/bulk_delete_spec.rb +235 -0
  243. data/spec/mongo/operation/write/bulk_insert_spec.rb +235 -0
  244. data/spec/mongo/operation/write/bulk_update_spec.rb +236 -0
  245. data/spec/mongo/operation/write/command/delete_spec.rb +103 -0
  246. data/spec/mongo/operation/write/command/insert_spec.rb +103 -0
  247. data/spec/mongo/operation/write/command/update_spec.rb +109 -0
  248. data/spec/mongo/operation/write/create_index_spec.rb +63 -0
  249. data/spec/mongo/operation/write/create_user_spec.rb +44 -0
  250. data/spec/mongo/operation/write/delete_spec.rb +186 -0
  251. data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
  252. data/spec/mongo/operation/write/insert_spec.rb +244 -0
  253. data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
  254. data/spec/mongo/operation/write/response_spec.rb +85 -0
  255. data/spec/mongo/operation/write/update_spec.rb +228 -0
  256. data/spec/mongo/protocol/delete_spec.rb +167 -0
  257. data/spec/mongo/protocol/get_more_spec.rb +146 -0
  258. data/spec/mongo/protocol/insert_spec.rb +161 -0
  259. data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
  260. data/spec/mongo/protocol/query_spec.rb +285 -0
  261. data/spec/mongo/protocol/reply_spec.rb +157 -0
  262. data/spec/mongo/protocol/update_spec.rb +186 -0
  263. data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
  264. data/spec/mongo/server/connection_pool_spec.rb +120 -0
  265. data/spec/mongo/server/connection_spec.rb +312 -0
  266. data/spec/mongo/server/description/features_spec.rb +138 -0
  267. data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
  268. data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
  269. data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
  270. data/spec/mongo/server/description_spec.rb +510 -0
  271. data/spec/mongo/server/monitor_spec.rb +144 -0
  272. data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
  273. data/spec/mongo/server_selection_rtt_spec.rb +104 -0
  274. data/spec/mongo/server_selection_spec.rb +89 -0
  275. data/spec/mongo/server_selector/nearest_spec.rb +250 -0
  276. data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
  277. data/spec/mongo/server_selector/primary_spec.rb +114 -0
  278. data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
  279. data/spec/mongo/server_selector/secondary_spec.rb +196 -0
  280. data/spec/mongo/server_selector_spec.rb +101 -0
  281. data/spec/mongo/server_spec.rb +131 -0
  282. data/spec/mongo/uri_spec.rb +517 -0
  283. data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
  284. data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
  285. data/spec/spec_helper.rb +133 -0
  286. data/spec/support/authorization.rb +247 -0
  287. data/spec/support/crud/read.rb +144 -0
  288. data/spec/support/crud/write.rb +214 -0
  289. data/spec/support/crud.rb +203 -0
  290. data/spec/support/crud_tests/read/aggregate.yml +43 -0
  291. data/spec/support/crud_tests/read/count.yml +37 -0
  292. data/spec/support/crud_tests/read/distinct.yml +33 -0
  293. data/spec/support/crud_tests/read/find.yml +50 -0
  294. data/spec/support/crud_tests/write/deleteMany.yml +36 -0
  295. data/spec/support/crud_tests/write/deleteOne.yml +49 -0
  296. data/spec/support/crud_tests/write/findOneAndDelete.yml +54 -0
  297. data/spec/support/crud_tests/write/findOneAndReplace.yml +153 -0
  298. data/spec/support/crud_tests/write/findOneAndUpdate.yml +161 -0
  299. data/spec/support/crud_tests/write/insertMany.yml +24 -0
  300. data/spec/support/crud_tests/write/insertOne.yml +19 -0
  301. data/spec/support/crud_tests/write/replaceOne.yml +96 -0
  302. data/spec/support/crud_tests/write/updateMany.yml +83 -0
  303. data/spec/support/crud_tests/write/updateOne.yml +80 -0
  304. data/spec/support/helpers.rb +140 -0
  305. data/spec/support/matchers.rb +37 -0
  306. data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
  307. data/spec/support/sdam/rs/discover_passives.yml +41 -0
  308. data/spec/support/sdam/rs/discover_primary.yml +40 -0
  309. data/spec/support/sdam/rs/discover_secondary.yml +41 -0
  310. data/spec/support/sdam/rs/discovery.yml +195 -0
  311. data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
  312. data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
  313. data/spec/support/sdam/rs/member_reconfig.yml +68 -0
  314. data/spec/support/sdam/rs/member_standalone.yml +60 -0
  315. data/spec/support/sdam/rs/new_primary.yml +74 -0
  316. data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
  317. data/spec/support/sdam/rs/non_rs_member.yml +31 -0
  318. data/spec/support/sdam/rs/normalize_case.yml +49 -0
  319. data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
  320. data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
  321. data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
  322. data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
  323. data/spec/support/sdam/rs/response_from_removed.yml +63 -0
  324. data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
  325. data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
  326. data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
  327. data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
  328. data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
  329. data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
  330. data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
  331. data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
  332. data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
  333. data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
  334. data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
  335. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
  336. data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
  337. data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
  338. data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
  339. data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
  340. data/spec/support/sdam/single/not_ok_response.yml +39 -0
  341. data/spec/support/sdam/single/standalone_removed.yml +32 -0
  342. data/spec/support/sdam/single/unavailable_seed.yml +28 -0
  343. data/spec/support/server_discovery_and_monitoring.rb +167 -0
  344. data/spec/support/server_selection/rtt/first_value.yml +4 -0
  345. data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
  346. data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
  347. data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
  348. data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
  349. data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
  350. data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
  351. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +26 -0
  352. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +21 -0
  353. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +21 -0
  354. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +26 -0
  355. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +21 -0
  356. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +26 -0
  357. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +26 -0
  358. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +21 -0
  359. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +21 -0
  360. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +33 -0
  361. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +26 -0
  362. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +29 -0
  363. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +29 -0
  364. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +29 -0
  365. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +31 -0
  366. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +31 -0
  367. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +29 -0
  368. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +26 -0
  369. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +26 -0
  370. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +19 -0
  371. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +11 -0
  372. data/spec/support/server_selection.rb +157 -0
  373. data/spec/support/server_selection_rtt.rb +41 -0
  374. data/spec/support/shared/bulk_write.rb +535 -0
  375. data/spec/support/shared/cursor.rb +38 -0
  376. data/spec/support/shared/operation.rb +77 -0
  377. data/spec/support/shared/protocol.rb +31 -0
  378. data/spec/support/shared/server_selector.rb +111 -0
  379. data/spec/support/shared/socket.rb +82 -0
  380. data/spec/support/travis.rb +14 -0
  381. data.tar.gz.sig +2 -3
  382. metadata +583 -186
  383. metadata.gz.sig +0 -0
  384. data/VERSION +0 -1
  385. data/lib/mongo/bulk_write_collection_view.rb +0 -387
  386. data/lib/mongo/collection_writer.rb +0 -364
  387. data/lib/mongo/connection/node.rb +0 -249
  388. data/lib/mongo/connection/pool.rb +0 -340
  389. data/lib/mongo/connection/pool_manager.rb +0 -320
  390. data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
  391. data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
  392. data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
  393. data/lib/mongo/connection/socket/unix_socket.rb +0 -39
  394. data/lib/mongo/db.rb +0 -808
  395. data/lib/mongo/exception.rb +0 -145
  396. data/lib/mongo/functional/authentication.rb +0 -455
  397. data/lib/mongo/functional/logging.rb +0 -85
  398. data/lib/mongo/functional/read_preference.rb +0 -183
  399. data/lib/mongo/functional/scram.rb +0 -556
  400. data/lib/mongo/functional/uri_parser.rb +0 -409
  401. data/lib/mongo/functional/write_concern.rb +0 -66
  402. data/lib/mongo/gridfs/grid.rb +0 -112
  403. data/lib/mongo/gridfs/grid_ext.rb +0 -53
  404. data/lib/mongo/gridfs/grid_file_system.rb +0 -163
  405. data/lib/mongo/gridfs/grid_io.rb +0 -484
  406. data/lib/mongo/legacy.rb +0 -140
  407. data/lib/mongo/mongo_client.rb +0 -697
  408. data/lib/mongo/mongo_replica_set_client.rb +0 -535
  409. data/lib/mongo/mongo_sharded_client.rb +0 -159
  410. data/lib/mongo/networking.rb +0 -372
  411. data/lib/mongo/utils/conversions.rb +0 -110
  412. data/lib/mongo/utils/core_ext.rb +0 -70
  413. data/lib/mongo/utils/server_version.rb +0 -69
  414. data/lib/mongo/utils/support.rb +0 -80
  415. data/test/functional/authentication_test.rb +0 -39
  416. data/test/functional/bulk_api_stress_test.rb +0 -133
  417. data/test/functional/bulk_write_collection_view_test.rb +0 -1198
  418. data/test/functional/client_test.rb +0 -627
  419. data/test/functional/collection_test.rb +0 -2175
  420. data/test/functional/collection_writer_test.rb +0 -83
  421. data/test/functional/conversions_test.rb +0 -163
  422. data/test/functional/cursor_fail_test.rb +0 -57
  423. data/test/functional/cursor_message_test.rb +0 -56
  424. data/test/functional/cursor_test.rb +0 -683
  425. data/test/functional/db_api_test.rb +0 -835
  426. data/test/functional/db_test.rb +0 -348
  427. data/test/functional/grid_file_system_test.rb +0 -285
  428. data/test/functional/grid_io_test.rb +0 -252
  429. data/test/functional/grid_test.rb +0 -273
  430. data/test/functional/pool_test.rb +0 -136
  431. data/test/functional/safe_test.rb +0 -98
  432. data/test/functional/support_test.rb +0 -62
  433. data/test/functional/timeout_test.rb +0 -60
  434. data/test/functional/uri_test.rb +0 -446
  435. data/test/functional/write_concern_test.rb +0 -118
  436. data/test/helpers/general.rb +0 -50
  437. data/test/helpers/test_unit.rb +0 -476
  438. data/test/replica_set/authentication_test.rb +0 -37
  439. data/test/replica_set/basic_test.rb +0 -189
  440. data/test/replica_set/client_test.rb +0 -393
  441. data/test/replica_set/connection_test.rb +0 -138
  442. data/test/replica_set/count_test.rb +0 -66
  443. data/test/replica_set/cursor_test.rb +0 -220
  444. data/test/replica_set/insert_test.rb +0 -157
  445. data/test/replica_set/max_values_test.rb +0 -151
  446. data/test/replica_set/pinning_test.rb +0 -105
  447. data/test/replica_set/query_test.rb +0 -73
  448. data/test/replica_set/read_preference_test.rb +0 -219
  449. data/test/replica_set/refresh_test.rb +0 -211
  450. data/test/replica_set/replication_ack_test.rb +0 -95
  451. data/test/sharded_cluster/basic_test.rb +0 -203
  452. data/test/shared/authentication/basic_auth_shared.rb +0 -260
  453. data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
  454. data/test/shared/authentication/gssapi_shared.rb +0 -176
  455. data/test/shared/authentication/sasl_plain_shared.rb +0 -96
  456. data/test/shared/authentication/scram_shared.rb +0 -92
  457. data/test/shared/ssl_shared.rb +0 -235
  458. data/test/test_helper.rb +0 -61
  459. data/test/threading/basic_test.rb +0 -120
  460. data/test/tools/mongo_config.rb +0 -708
  461. data/test/tools/mongo_config_test.rb +0 -160
  462. data/test/unit/client_test.rb +0 -381
  463. data/test/unit/collection_test.rb +0 -166
  464. data/test/unit/connection_test.rb +0 -335
  465. data/test/unit/cursor_test.rb +0 -307
  466. data/test/unit/db_test.rb +0 -136
  467. data/test/unit/grid_test.rb +0 -76
  468. data/test/unit/mongo_sharded_client_test.rb +0 -48
  469. data/test/unit/node_test.rb +0 -93
  470. data/test/unit/pool_manager_test.rb +0 -111
  471. data/test/unit/read_pref_test.rb +0 -406
  472. data/test/unit/read_test.rb +0 -159
  473. data/test/unit/safe_test.rb +0 -158
  474. data/test/unit/sharding_pool_manager_test.rb +0 -84
  475. data/test/unit/write_concern_test.rb +0 -175
@@ -0,0 +1,149 @@
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
+ module Grid
17
+
18
+ # Represents a view of the GridFS in the database.
19
+ #
20
+ # @since 2.0.0
21
+ class FS
22
+ extend Forwardable
23
+
24
+ # The default root prefix.
25
+ #
26
+ # @since 2.0.0
27
+ DEFAULT_ROOT = 'fs'.freeze
28
+
29
+ # The specification for the chunks index.
30
+ #
31
+ # @since 2.0.0
32
+ INDEX_SPEC = { :files_id => 1, :n => 1 }.freeze
33
+
34
+ # @return [ Collection ] chunks_collection The chunks collection.
35
+ attr_reader :chunks_collection
36
+
37
+ # @return [ Database ] database The database.
38
+ attr_reader :database
39
+
40
+ # @return [ Collection ] files_collection The files collection.
41
+ attr_reader :files_collection
42
+
43
+ # Get write concern from database.
44
+ def_delegators :database, :write_concern
45
+
46
+ # Find a file in the GridFS.
47
+ #
48
+ # @example Find a file by it's id.
49
+ # fs.find_one(_id: id)
50
+ #
51
+ # @example Find a file by it's filename.
52
+ # fs.find_one(filename: 'test.txt')
53
+ #
54
+ # @param [ Hash ] selector The selector.
55
+ #
56
+ # @return [ Grid::File ] The file.
57
+ #
58
+ # @since 2.0.0
59
+ def find_one(selector = nil)
60
+ metadata = files_collection.find(selector).first
61
+ return nil unless metadata
62
+ chunks = chunks_collection.find(:files_id => metadata[:_id]).sort(:n => 1)
63
+ Grid::File.new(chunks.to_a, metadata)
64
+ end
65
+
66
+ # Insert a single file into the GridFS.
67
+ #
68
+ # @example Insert a single file.
69
+ # fs.insert_one(file)
70
+ #
71
+ # @param [ Grid::File ] file The file to insert.
72
+ #
73
+ # @return [ Result ] The result of the insert.
74
+ #
75
+ # @since 2.0.0
76
+ def insert_one(file)
77
+ files_collection.insert_one(file.metadata)
78
+ result = chunks_collection.insert_many(file.chunks)
79
+ if write_concern.get_last_error
80
+ validate_md5!(file)
81
+ else
82
+ result
83
+ end
84
+ end
85
+
86
+ # Create the GridFS.
87
+ #
88
+ # @example Create the GridFS.
89
+ # Grid::FS.new(database)
90
+ #
91
+ # @param [ Database ] database The database the files reside in.
92
+ # @param [ Hash ] options The GridFS options.
93
+ #
94
+ # @option options [ String ] :fs_name The prefix for the files and chunks
95
+ # collections.
96
+ #
97
+ # @since 2.0.0
98
+ def initialize(database, options = {})
99
+ @database = database
100
+ @options = options
101
+ @chunks_collection = database[chunks_name]
102
+ @files_collection = database[files_name]
103
+ chunks_collection.indexes.create_one(INDEX_SPEC, :unique => true)
104
+ end
105
+
106
+ # Get the prefix for the GridFS
107
+ #
108
+ # @example Get the prefix.
109
+ # fs.prefix
110
+ #
111
+ # @return [ String ] The GridFS prefix.
112
+ #
113
+ # @since 2.0.0
114
+ def prefix
115
+ @options[:fs_name] || DEFAULT_ROOT
116
+ end
117
+
118
+ # Remove a single file from the GridFS.
119
+ #
120
+ # @example Remove a file from the GridFS.
121
+ # fs.delete_one(file)
122
+ #
123
+ # @param [ Grid::File ] file The file to remove.
124
+ #
125
+ # @return [ Result ] The result of the remove.
126
+ #
127
+ # @since 2.0.0
128
+ def delete_one(file)
129
+ files_collection.find(:_id => file.id).delete_one
130
+ chunks_collection.find(:files_id => file.id).delete_many
131
+ end
132
+
133
+ private
134
+
135
+ def chunks_name
136
+ "#{prefix}.#{Grid::File::Chunk::COLLECTION}"
137
+ end
138
+
139
+ def files_name
140
+ "#{prefix}.#{Grid::File::Metadata::COLLECTION}"
141
+ end
142
+
143
+ def validate_md5!(file)
144
+ md5 = database.command(:filemd5 => file.id, :root => prefix).documents[0][:md5]
145
+ raise Error::InvalidFile.new(file.md5, md5) unless file.md5 == md5
146
+ end
147
+ end
148
+ end
149
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2009-2013 MongoDB, Inc.
1
+ # Copyright (C) 2014-2015 MongoDB, Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,7 +12,5 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'mongo/gridfs/grid_ext'
16
- require 'mongo/gridfs/grid'
17
- require 'mongo/gridfs/grid_file_system'
18
- require 'mongo/gridfs/grid_io'
15
+ require 'mongo/grid/file'
16
+ require 'mongo/grid/fs'
@@ -0,0 +1,261 @@
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
+ module Index
17
+
18
+ # A class representing a view of indexes.
19
+ #
20
+ # @since 2.0.0
21
+ class View
22
+ extend Forwardable
23
+ include Enumerable
24
+
25
+ # @return [ Collection ] collection The indexes collection.
26
+ attr_reader :collection
27
+
28
+ # @return [ Integer ] batch_size The size of the batch of results
29
+ # when sending the listIndexes command.
30
+ attr_reader :batch_size
31
+
32
+ def_delegators :@collection, :cluster, :database, :read_preference
33
+ def_delegators :cluster, :next_primary
34
+
35
+ # The index key field.
36
+ #
37
+ # @since 2.0.0
38
+ KEY = 'key'.freeze
39
+
40
+ # The index name field.
41
+ #
42
+ # @since 2.0.0
43
+ NAME = 'name'.freeze
44
+
45
+ # The mappings of Ruby index options to server options.
46
+ #
47
+ # @since 2.0.0
48
+ OPTIONS = {
49
+ :background => :background,
50
+ :bits => :bits,
51
+ :bucket_size => :bucketSize,
52
+ :default_language => :default_language,
53
+ :expire_after => :expireAfterSeconds,
54
+ :key => :key,
55
+ :language_override => :language_override,
56
+ :max => :max,
57
+ :min => :min,
58
+ :name => :name,
59
+ :sparse => :sparse,
60
+ :sphere_version => :'2dsphereIndexVersion',
61
+ :storage_engine => :storageEngine,
62
+ :text_version => :textIndexVersion,
63
+ :unique => :unique,
64
+ :version => :v,
65
+ :weights => :weights
66
+ }.freeze
67
+
68
+ # Drop an index by its name.
69
+ #
70
+ # @example Drop an index by its name.
71
+ # view.drop_one('name_1')
72
+ #
73
+ # @param [ String ] name The name of the index.
74
+ #
75
+ # @return [ Result ] The response.
76
+ #
77
+ # @since 2.0.0
78
+ def drop_one(name)
79
+ raise Error::MultiIndexDrop.new if name == '*'
80
+ drop_by_name(name)
81
+ end
82
+
83
+ # Drop all indexes on the collection.
84
+ #
85
+ # @example Drop all indexes on the collection.
86
+ # view.drop_all
87
+ #
88
+ # @return [ Result ] The response.
89
+ #
90
+ # @since 2.0.0
91
+ def drop_all
92
+ drop_by_name('*')
93
+ end
94
+
95
+ # Creates an index on the collection.
96
+ #
97
+ # @example Create a unique index on the collection.
98
+ # view.create_one({ name: 1 }, { unique: true })
99
+ #
100
+ # @param [ Hash ] keys A hash of field name/direction pairs.
101
+ # @param [ Hash ] options Options for this index.
102
+ #
103
+ # @option options [ true, false ] :unique (false) If true, this index will enforce
104
+ # a uniqueness constraint on that field.
105
+ # @option options [ true, false ] :background (false) If true, the index will be built
106
+ # in the background (only available for server versions >= 1.3.2 )
107
+ # @option options [ true, false ] :drop_dups (false) If creating a unique index on
108
+ # this collection, this option will keep the first document the database indexes
109
+ # and drop all subsequent documents with duplicate values on this field.
110
+ # @option options [ Integer ] :bucket_size (nil) For use with geoHaystack indexes.
111
+ # Number of documents to group together within a certain proximity to a given
112
+ # longitude and latitude.
113
+ # @option options [ Integer ] :max (nil) Specify the max latitude and longitude for
114
+ # a geo index.
115
+ # @option options [ Integer ] :min (nil) Specify the min latitude and longitude for
116
+ # a geo index.
117
+ #
118
+ # @note Note that the options listed may be subset of those available.
119
+ # See the MongoDB documentation for a full list of supported options by server version.
120
+ #
121
+ # @return [ Result ] The response.
122
+ #
123
+ # @since 2.0.0
124
+ def create_one(keys, options = {})
125
+ create_many({ key: keys }.merge(options))
126
+ end
127
+
128
+ # Creates multiple indexes on the collection.
129
+ #
130
+ # @example Create multiple indexes.
131
+ # view.create_many([
132
+ # { key: { name: 1 }, unique: true },
133
+ # { key: { age: -1 }, background: true }
134
+ # ])
135
+ #
136
+ # @note On MongoDB 3.0.0 and higher, the indexes will be created in
137
+ # parallel on the server.
138
+ #
139
+ # @param [ Array<Hash> ] models The index specifications. Each model MUST
140
+ # include a :key option.
141
+ #
142
+ # @return [ Result ] The result of the command.
143
+ #
144
+ # @since 2.0.0
145
+ def create_many(*models)
146
+ Operation::Write::CreateIndex.new(
147
+ indexes: normalize_models(models.flatten),
148
+ db_name: database.name,
149
+ coll_name: collection.name,
150
+ ).execute(next_primary.context)
151
+ end
152
+
153
+ # Convenience method for getting index information by a specific name or
154
+ # spec.
155
+ #
156
+ # @example Get index information by name.
157
+ # view.get('name_1')
158
+ #
159
+ # @example Get index information by the keys.
160
+ # view.get(name: 1)
161
+ #
162
+ # @param [ Hash, String ] keys_or_name The index name or spec.
163
+ #
164
+ # @return [ Hash ] The index information.
165
+ #
166
+ # @since 2.0.0
167
+ def get(keys_or_name)
168
+ find do |index|
169
+ (index[NAME] == keys_or_name) || (index[KEY] == normalize_keys(keys_or_name))
170
+ end
171
+ end
172
+
173
+ # Iterate over all indexes for the collection.
174
+ #
175
+ # @example Get all the indexes.
176
+ # view.each do |index|
177
+ # ...
178
+ # end
179
+ #
180
+ # @since 2.0.0
181
+ def each(&block)
182
+ server = next_primary
183
+ cursor = Cursor.new(self, send_initial_query(server), server).to_enum
184
+ cursor.each do |doc|
185
+ yield doc
186
+ end if block_given?
187
+ cursor
188
+ end
189
+
190
+ # Create the new index view.
191
+ #
192
+ # @example Create the new index view.
193
+ # View::Index.new(collection)
194
+ #
195
+ # @param [ Collection ] collection The collection.
196
+ # @param [ Hash ] options Options for getting a list of indexes.
197
+ # Only relevant for when the listIndexes command is used with server
198
+ # versions >=2.8.
199
+ #
200
+ # @option options [ Integer ] :batch_size The batch size for results
201
+ # returned from the listIndexes command.
202
+ #
203
+ # @since 2.0.0
204
+ def initialize(collection, options = {})
205
+ @collection = collection
206
+ @batch_size = options[:batch_size]
207
+ end
208
+
209
+ private
210
+
211
+ def drop_by_name(name)
212
+ Operation::Write::DropIndex.new(
213
+ db_name: database.name,
214
+ coll_name: collection.name,
215
+ index_name: name
216
+ ).execute(next_primary.context)
217
+ end
218
+
219
+ def index_name(spec)
220
+ spec.to_a.join('_')
221
+ end
222
+
223
+ def indexes_spec
224
+ { selector: {
225
+ listIndexes: collection.name,
226
+ cursor: batch_size ? { batchSize: batch_size } : {} },
227
+ coll_name: collection.name,
228
+ db_name: database.name }
229
+ end
230
+
231
+ def initial_query_op
232
+ Operation::Read::Indexes.new(indexes_spec)
233
+ end
234
+
235
+ def limit; -1; end
236
+
237
+ def normalize_keys(spec)
238
+ return false if spec.is_a?(String)
239
+ Options::Mapper.transform_keys_to_strings(spec)
240
+ end
241
+
242
+ def normalize_models(models)
243
+ with_generated_names(models).map do |model|
244
+ Options::Mapper.transform(model, OPTIONS)
245
+ end
246
+ end
247
+
248
+ def send_initial_query(server)
249
+ initial_query_op.execute(server.context)
250
+ end
251
+
252
+ def with_generated_names(models)
253
+ models.dup.each do |model|
254
+ unless model[:name]
255
+ model[:name] = index_name(model[:key])
256
+ end
257
+ end
258
+ end
259
+ end
260
+ end
261
+ end
@@ -0,0 +1,64 @@
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/index/view'
16
+
17
+ module Mongo
18
+
19
+ # Contains constants for indexing purposes.
20
+ #
21
+ # @since 2.0.0
22
+ module Index
23
+
24
+ # Specify ascending order for an index.
25
+ #
26
+ # @since 2.0.0
27
+ ASCENDING = 1
28
+
29
+ # Specify descending order for an index.
30
+ #
31
+ # @since 2.0.0
32
+ DESCENDING = -1
33
+
34
+ # Specify a 2d Geo index.
35
+ #
36
+ # @since 2.0.0
37
+ GEO2D = '2d'.freeze
38
+
39
+ # Specify a 2d sphere Geo index.
40
+ #
41
+ # @since 2.0.0
42
+ GEO2DSPHERE = '2dsphere'.freeze
43
+
44
+ # Specify a geoHaystack index.
45
+ #
46
+ # @since 2.0.0
47
+ GEOHAYSTACK = 'geoHaystack'.freeze
48
+
49
+ # Encodes a text index.
50
+ #
51
+ # @since 2.0.0
52
+ TEXT = 'text'.freeze
53
+
54
+ # Specify a hashed index.
55
+ #
56
+ # @since 2.0.0
57
+ HASHED = 'hashed'.freeze
58
+
59
+ # Constant for the indexes collection.
60
+ #
61
+ # @since 2.0.0
62
+ COLLECTION = 'system.indexes'.freeze
63
+ end
64
+ end
@@ -0,0 +1,126 @@
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
+
17
+ # Allows objects to easily log operations.
18
+ #
19
+ # @since 2.0.0
20
+ module Loggable
21
+
22
+ # The standard MongoDB log prefix.
23
+ #
24
+ # @since 2.0.0
25
+ PREFIX = 'MONGODB'.freeze
26
+
27
+ # Log the operations. If a block is provided it will be yielded to,
28
+ # otherwise only the logging will take place.
29
+ #
30
+ # @example Log a query operation.
31
+ # loggable.log(:debug, "MONGO.query", operations)
32
+ #
33
+ # @param [ Symbol ] level The log level.
34
+ # @param [ String ] prefix The prefix for the log line.
35
+ # @param [ Array<Object> ] operations The operations to log. The must
36
+ # respond to #log_message.
37
+ #
38
+ # @return [ Object ] The result of the block or nil if no block given.
39
+ #
40
+ # @since 2.0.0
41
+ def log(level, prefix, operations)
42
+ started = Time.new
43
+ begin
44
+ yield(operations) if block_given?
45
+ rescue Exception => e
46
+ raise e
47
+ ensure
48
+ runtime = ("%.4fms" % (1000 * (Time.now.to_f - started.to_f)))
49
+ operations.each do |operation|
50
+ Logger.send(level, prefix, log_inspect(operation), runtime)
51
+ end
52
+ end
53
+ end
54
+
55
+ # Convenience method to log debug messages with the standard prefix.
56
+ #
57
+ # @example Log a debug message.
58
+ # log_debug([ 'Message' ])
59
+ #
60
+ # @param [ Array<Operation, String> ] operations The operations or messages
61
+ # to log.
62
+ #
63
+ # @since 2.0.0
64
+ def log_debug(operations, &block)
65
+ log(:debug, PREFIX, operations, &block)
66
+ end
67
+
68
+ # Convenience method to log error messages with the standard prefix.
69
+ #
70
+ # @example Log a error message.
71
+ # log_error([ 'Message' ])
72
+ #
73
+ # @param [ Array<Operation, String> ] operations The operations or messages
74
+ # to log.
75
+ #
76
+ # @since 2.0.0
77
+ def log_error(operations, &block)
78
+ log(:error, PREFIX, operations, &block)
79
+ end
80
+
81
+ # Convenience method to log fatal messages with the standard prefix.
82
+ #
83
+ # @example Log a fatal message.
84
+ # log_fatal([ 'Message' ])
85
+ #
86
+ # @param [ Array<Operation, String> ] operations The operations or messages
87
+ # to log.
88
+ #
89
+ # @since 2.0.0
90
+ def log_fatal(operations, &block)
91
+ log(:fatal, PREFIX, operations, &block)
92
+ end
93
+
94
+ # Convenience method to log info messages with the standard prefix.
95
+ #
96
+ # @example Log a info message.
97
+ # log_info([ 'Message' ])
98
+ #
99
+ # @param [ Array<Operation, String> ] operations The operations or messages
100
+ # to log.
101
+ #
102
+ # @since 2.0.0
103
+ def log_info(operations, &block)
104
+ log(:info, PREFIX, operations, &block)
105
+ end
106
+
107
+ # Convenience method to log warn messages with the standard prefix.
108
+ #
109
+ # @example Log a warn message.
110
+ # log_warn([ 'Message' ])
111
+ #
112
+ # @param [ Array<Operation, String> ] operations The operations or messages
113
+ # to log.
114
+ #
115
+ # @since 2.0.0
116
+ def log_warn(operations, &block)
117
+ log(:warn, PREFIX, operations, &block)
118
+ end
119
+
120
+ private
121
+
122
+ def log_inspect(operation)
123
+ operation.respond_to?(:log_message) ? operation.log_message : operation
124
+ end
125
+ end
126
+ end