mongo 2.1.0.beta → 2.1.0.rc0

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 (253) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +2 -2
  5. data/lib/mongo.rb +2 -3
  6. data/lib/mongo/address.rb +7 -5
  7. data/lib/mongo/address/unix.rb +2 -2
  8. data/lib/mongo/auth/ldap/conversation.rb +6 -2
  9. data/lib/mongo/auth/scram/conversation.rb +8 -2
  10. data/lib/mongo/auth/user/view.rb +21 -0
  11. data/lib/mongo/bulk_write.rb +155 -23
  12. data/lib/mongo/bulk_write/combineable.rb +51 -0
  13. data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
  14. data/lib/mongo/bulk_write/result.rb +61 -8
  15. data/lib/mongo/bulk_write/result_combiner.rb +117 -0
  16. data/lib/mongo/bulk_write/transformable.rb +117 -0
  17. data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
  18. data/lib/mongo/bulk_write/validatable.rb +62 -0
  19. data/lib/mongo/client.rb +7 -3
  20. data/lib/mongo/cluster.rb +3 -3
  21. data/lib/mongo/cluster/topology/replica_set.rb +8 -6
  22. data/lib/mongo/cluster/topology/unknown.rb +5 -2
  23. data/lib/mongo/collection.rb +75 -4
  24. data/lib/mongo/collection/view.rb +1 -2
  25. data/lib/mongo/collection/view/aggregation.rb +13 -8
  26. data/lib/mongo/collection/view/immutable.rb +6 -6
  27. data/lib/mongo/collection/view/iterable.rb +13 -4
  28. data/lib/mongo/collection/view/map_reduce.rb +22 -17
  29. data/lib/mongo/collection/view/readable.rb +121 -70
  30. data/lib/mongo/cursor.rb +5 -1
  31. data/lib/mongo/database.rb +3 -3
  32. data/lib/mongo/database/view.rb +1 -1
  33. data/lib/mongo/error.rb +7 -0
  34. data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
  35. data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
  36. data/lib/mongo/error/file_not_found.rb +37 -0
  37. data/lib/mongo/error/invalid_file.rb +2 -2
  38. data/lib/mongo/error/invalid_file_revision.rb +37 -0
  39. data/lib/mongo/error/invalid_uri.rb +5 -4
  40. data/lib/mongo/error/missing_file_chunk.rb +38 -0
  41. data/lib/mongo/error/operation_failure.rb +1 -1
  42. data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
  43. data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
  44. data/lib/mongo/grid.rb +2 -1
  45. data/lib/mongo/grid/file.rb +12 -9
  46. data/lib/mongo/grid/file/chunk.rb +6 -6
  47. data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
  48. data/lib/mongo/grid/fs_bucket.rb +441 -0
  49. data/lib/mongo/grid/stream.rb +64 -0
  50. data/lib/mongo/grid/stream/read.rb +208 -0
  51. data/lib/mongo/grid/stream/write.rb +187 -0
  52. data/lib/mongo/index/view.rb +1 -1
  53. data/lib/mongo/loggable.rb +34 -57
  54. data/lib/mongo/logger.rb +16 -78
  55. data/lib/mongo/monitoring.rb +1 -5
  56. data/lib/mongo/monitoring/command_log_subscriber.rb +35 -17
  57. data/lib/mongo/monitoring/event/command_succeeded.rb +20 -1
  58. data/lib/mongo/monitoring/publishable.rb +22 -12
  59. data/lib/mongo/operation.rb +3 -6
  60. data/lib/mongo/operation/commands.rb +24 -0
  61. data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
  62. data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
  63. data/lib/mongo/operation/commands/collections_info.rb +66 -0
  64. data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
  65. data/lib/mongo/operation/commands/indexes.rb +70 -0
  66. data/lib/mongo/operation/commands/list_collections.rb +54 -0
  67. data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
  68. data/lib/mongo/operation/commands/list_indexes.rb +56 -0
  69. data/lib/mongo/operation/commands/list_indexes/result.rb +115 -0
  70. data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
  71. data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +0 -0
  72. data/lib/mongo/operation/{parallel_scan.rb → commands/parallel_scan.rb} +3 -23
  73. data/lib/mongo/operation/{parallel_scan → commands/parallel_scan}/result.rb +0 -0
  74. data/lib/mongo/operation/commands/user_query.rb +69 -0
  75. data/lib/mongo/operation/commands/users_info.rb +53 -0
  76. data/lib/mongo/operation/commands/users_info/result.rb +36 -0
  77. data/lib/mongo/operation/executable.rb +4 -68
  78. data/lib/mongo/operation/kill_cursors.rb +3 -3
  79. data/lib/mongo/operation/read.rb +0 -4
  80. data/lib/mongo/operation/read/get_more.rb +2 -22
  81. data/lib/mongo/operation/read/query.rb +2 -21
  82. data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
  83. data/lib/mongo/operation/specifiable.rb +24 -0
  84. data/lib/mongo/operation/write.rb +2 -0
  85. data/lib/mongo/operation/write/bulk.rb +6 -3
  86. data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
  87. data/lib/mongo/operation/write/bulk/delete.rb +71 -0
  88. data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
  89. data/lib/mongo/operation/write/bulk/insert.rb +96 -0
  90. data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
  91. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
  92. data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
  93. data/lib/mongo/operation/write/bulk/update.rb +81 -0
  94. data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
  95. data/lib/mongo/operation/write/command/create_index.rb +0 -1
  96. data/lib/mongo/operation/write/command/create_user.rb +0 -1
  97. data/lib/mongo/operation/write/command/delete.rb +0 -1
  98. data/lib/mongo/operation/write/command/drop_index.rb +0 -1
  99. data/lib/mongo/operation/write/command/insert.rb +0 -1
  100. data/lib/mongo/operation/write/command/remove_user.rb +0 -1
  101. data/lib/mongo/operation/write/command/update.rb +0 -1
  102. data/lib/mongo/operation/write/command/update_user.rb +0 -1
  103. data/lib/mongo/operation/write/command/writable.rb +13 -18
  104. data/lib/mongo/operation/write/create_index.rb +4 -27
  105. data/lib/mongo/operation/write/create_user.rb +4 -30
  106. data/lib/mongo/operation/write/delete.rb +5 -28
  107. data/lib/mongo/operation/write/drop_index.rb +3 -3
  108. data/lib/mongo/operation/write/gle.rb +48 -0
  109. data/lib/mongo/operation/write/idable.rb +5 -0
  110. data/lib/mongo/operation/write/insert.rb +2 -24
  111. data/lib/mongo/operation/write/remove_user.rb +4 -27
  112. data/lib/mongo/operation/write/update.rb +4 -32
  113. data/lib/mongo/operation/write/update_user.rb +4 -30
  114. data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
  115. data/lib/mongo/options/mapper.rb +4 -2
  116. data/lib/mongo/protocol/delete.rb +68 -3
  117. data/lib/mongo/protocol/get_more.rb +54 -2
  118. data/lib/mongo/protocol/insert.rb +59 -1
  119. data/lib/mongo/protocol/kill_cursors.rb +53 -4
  120. data/lib/mongo/protocol/message.rb +12 -12
  121. data/lib/mongo/protocol/query.rb +139 -65
  122. data/lib/mongo/protocol/reply.rb +69 -1
  123. data/lib/mongo/protocol/update.rb +70 -1
  124. data/lib/mongo/server/connection.rb +11 -3
  125. data/lib/mongo/server/description.rb +29 -0
  126. data/lib/mongo/server/description/features.rb +2 -1
  127. data/lib/mongo/server/monitor.rb +2 -2
  128. data/lib/mongo/server_selector.rb +14 -10
  129. data/lib/mongo/server_selector/selectable.rb +24 -22
  130. data/lib/mongo/socket.rb +6 -3
  131. data/lib/mongo/socket/tcp.rb +2 -2
  132. data/lib/mongo/socket/unix.rb +5 -8
  133. data/lib/mongo/uri.rb +243 -139
  134. data/lib/mongo/version.rb +1 -1
  135. data/spec/mongo/address/unix_spec.rb +1 -1
  136. data/spec/mongo/address_spec.rb +25 -0
  137. data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
  138. data/spec/mongo/auth/user/view_spec.rb +26 -1
  139. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
  140. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
  141. data/spec/mongo/bulk_write_spec.rb +332 -166
  142. data/spec/mongo/client_spec.rb +25 -0
  143. data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
  144. data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
  145. data/spec/mongo/collection/view/immutable_spec.rb +103 -0
  146. data/spec/mongo/collection/view/map_reduce_spec.rb +98 -3
  147. data/spec/mongo/collection/view/readable_spec.rb +17 -30
  148. data/spec/mongo/collection/view_spec.rb +233 -7
  149. data/spec/mongo/collection_spec.rb +360 -18
  150. data/spec/mongo/command_monitoring_spec.rb +51 -0
  151. data/spec/mongo/connection_string_spec.rb +137 -0
  152. data/spec/mongo/database_spec.rb +27 -11
  153. data/spec/mongo/grid/file/chunk_spec.rb +5 -5
  154. data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
  155. data/spec/mongo/grid/file_spec.rb +8 -8
  156. data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
  157. data/spec/mongo/grid/stream/read_spec.rb +275 -0
  158. data/spec/mongo/grid/stream/write_spec.rb +440 -0
  159. data/spec/mongo/grid/stream_spec.rb +48 -0
  160. data/spec/mongo/gridfs_spec.rb +50 -0
  161. data/spec/mongo/logger_spec.rb +0 -40
  162. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
  163. data/spec/mongo/operation/{aggregate_spec.rb → commands/aggregate_spec.rb} +0 -42
  164. data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
  165. data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -0
  166. data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
  167. data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +0 -18
  168. data/spec/mongo/operation/kill_cursors_spec.rb +1 -1
  169. data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
  170. data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +1 -12
  171. data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
  172. data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +1 -12
  173. data/spec/mongo/operation/write/insert_spec.rb +0 -11
  174. data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
  175. data/spec/mongo/server/description_spec.rb +42 -0
  176. data/spec/mongo/server/monitor_spec.rb +21 -0
  177. data/spec/mongo/server_discovery_and_monitoring_spec.rb +1 -0
  178. data/spec/mongo/server_selection_spec.rb +3 -3
  179. data/spec/mongo/server_selector/nearest_spec.rb +34 -27
  180. data/spec/mongo/server_selector/primary_preferred_spec.rb +31 -30
  181. data/spec/mongo/server_selector/primary_spec.rb +14 -13
  182. data/spec/mongo/server_selector/secondary_preferred_spec.rb +27 -26
  183. data/spec/mongo/server_selector/secondary_spec.rb +23 -22
  184. data/spec/mongo/server_selector_spec.rb +87 -24
  185. data/spec/mongo/socket/unix_spec.rb +52 -0
  186. data/spec/mongo/uri_spec.rb +251 -39
  187. data/spec/spec_helper.rb +11 -4
  188. data/spec/support/authorization.rb +4 -5
  189. data/spec/support/command_monitoring.rb +365 -0
  190. data/spec/support/command_monitoring/bulkWrite.yml +73 -0
  191. data/spec/support/command_monitoring/command.yml +42 -0
  192. data/spec/support/command_monitoring/deleteMany.yml +55 -0
  193. data/spec/support/command_monitoring/deleteOne.yml +55 -0
  194. data/spec/support/command_monitoring/find.yml +219 -0
  195. data/spec/support/command_monitoring/insertMany.yml +81 -0
  196. data/spec/support/command_monitoring/insertOne.yml +51 -0
  197. data/spec/support/command_monitoring/updateMany.yml +67 -0
  198. data/spec/support/command_monitoring/updateOne.yml +95 -0
  199. data/spec/support/connection_string.rb +228 -0
  200. data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
  201. data/spec/support/connection_string_tests/valid-auth.yml +256 -0
  202. data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
  203. data/spec/support/connection_string_tests/valid-options.yml +30 -0
  204. data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
  205. data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
  206. data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
  207. data/spec/support/crud.rb +3 -1
  208. data/spec/support/crud/read.rb +14 -10
  209. data/spec/support/crud/write.rb +36 -9
  210. data/spec/support/gridfs.rb +637 -0
  211. data/spec/support/gridfs_tests/delete.yml +157 -0
  212. data/spec/support/gridfs_tests/download.yml +210 -0
  213. data/spec/support/gridfs_tests/download_by_name.yml +113 -0
  214. data/spec/support/gridfs_tests/upload.yml +158 -0
  215. data/spec/support/sdam/rs/equal_electionids.yml +1 -2
  216. data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
  217. data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
  218. data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
  219. data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
  220. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
  221. data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
  222. data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
  223. data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
  224. data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
  225. data/spec/support/sdam/single/not_ok_response.yml +0 -1
  226. data/spec/support/server_discovery_and_monitoring.rb +3 -1
  227. data/spec/support/server_selection.rb +3 -1
  228. data/spec/support/shared/bulk_write.rb +192 -0
  229. data/spec/support/shared/server_selector.rb +21 -12
  230. metadata +147 -57
  231. metadata.gz.sig +0 -0
  232. data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
  233. data/lib/mongo/bulk_write/deletable.rb +0 -57
  234. data/lib/mongo/bulk_write/insertable.rb +0 -49
  235. data/lib/mongo/bulk_write/replacable.rb +0 -58
  236. data/lib/mongo/bulk_write/updatable.rb +0 -69
  237. data/lib/mongo/grid/fs.rb +0 -146
  238. data/lib/mongo/operation/list_collections/result.rb +0 -114
  239. data/lib/mongo/operation/list_indexes/result.rb +0 -118
  240. data/lib/mongo/operation/read/collections_info.rb +0 -68
  241. data/lib/mongo/operation/read/indexes.rb +0 -69
  242. data/lib/mongo/operation/read/list_collections.rb +0 -76
  243. data/lib/mongo/operation/read/list_indexes.rb +0 -78
  244. data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
  245. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
  246. data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
  247. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
  248. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
  249. data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
  250. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
  251. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
  252. data/spec/mongo/grid/fs_spec.rb +0 -160
  253. data/spec/mongo/loggable_spec.rb +0 -63
data/lib/mongo/grid/fs.rb DELETED
@@ -1,146 +0,0 @@
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 [ BSON::ObjectId ] The file id.
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
- validate_md5!(file) if write_concern.get_last_error
80
- file.id
81
- end
82
-
83
- # Create the GridFS.
84
- #
85
- # @example Create the GridFS.
86
- # Grid::FS.new(database)
87
- #
88
- # @param [ Database ] database The database the files reside in.
89
- # @param [ Hash ] options The GridFS options.
90
- #
91
- # @option options [ String ] :fs_name The prefix for the files and chunks
92
- # collections.
93
- #
94
- # @since 2.0.0
95
- def initialize(database, options = {})
96
- @database = database
97
- @options = options
98
- @chunks_collection = database[chunks_name]
99
- @files_collection = database[files_name]
100
- chunks_collection.indexes.create_one(INDEX_SPEC, :unique => true)
101
- end
102
-
103
- # Get the prefix for the GridFS
104
- #
105
- # @example Get the prefix.
106
- # fs.prefix
107
- #
108
- # @return [ String ] The GridFS prefix.
109
- #
110
- # @since 2.0.0
111
- def prefix
112
- @options[:fs_name] || DEFAULT_ROOT
113
- end
114
-
115
- # Remove a single file from the GridFS.
116
- #
117
- # @example Remove a file from the GridFS.
118
- # fs.delete_one(file)
119
- #
120
- # @param [ Grid::File ] file The file to remove.
121
- #
122
- # @return [ Result ] The result of the remove.
123
- #
124
- # @since 2.0.0
125
- def delete_one(file)
126
- files_collection.find(:_id => file.id).delete_one
127
- chunks_collection.find(:files_id => file.id).delete_many
128
- end
129
-
130
- private
131
-
132
- def chunks_name
133
- "#{prefix}.#{Grid::File::Chunk::COLLECTION}"
134
- end
135
-
136
- def files_name
137
- "#{prefix}.#{Grid::File::Metadata::COLLECTION}"
138
- end
139
-
140
- def validate_md5!(file)
141
- md5 = database.command(:filemd5 => file.id, :root => prefix).documents[0][:md5]
142
- raise Error::InvalidFile.new(file.md5, md5) unless file.md5 == md5
143
- end
144
- end
145
- end
146
- end
@@ -1,114 +0,0 @@
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 Operation
17
- module Read
18
- class ListCollections
19
-
20
- # Defines custom behaviour of results when using the
21
- # listCollections command.
22
- #
23
- # @since 2.0.0
24
- class Result < Operation::Result
25
-
26
- # The field name for the cursor document in a listCollections result.
27
- #
28
- # @since 2.0.0
29
- CURSOR = 'cursor'.freeze
30
-
31
- # The cursor id field in the cursor document.
32
- #
33
- # @since 2.0.0
34
- CURSOR_ID = 'id'.freeze
35
-
36
- # The namespace field in the cursor document.
37
- #
38
- # @since 2.0.0
39
- NAMESPACE = 'ns'.freeze
40
-
41
- # The field name for the first batch of a cursor.
42
- #
43
- # @since 2.0.0
44
- FIRST_BATCH = 'firstBatch'.freeze
45
-
46
- # Get the cursor id for the result.
47
- #
48
- # @example Get the cursor id.
49
- # result.cursor_id
50
- #
51
- # @note Even though the wire protocol has a cursor_id field for all
52
- # messages of type reply, it is always zero when using the
53
- # listCollections command and must be retrieved from the cursor
54
- # document itself.
55
- #
56
- # @return [ Integer ] The cursor id.
57
- #
58
- # @since 2.0.0
59
- def cursor_id
60
- cursor_document ? cursor_document[CURSOR_ID] : super
61
- end
62
-
63
- # Get the namespace for the cursor.
64
- #
65
- # @example Get the namespace.
66
- # result.namespace
67
- #
68
- # @return [ String ] The namespace.
69
- #
70
- # @since 2.0.0
71
- def namespace
72
- cursor_document ? cursor_document[NAMESPACE] : super
73
- end
74
-
75
- # Get the documents for the listCollections result. It is the 'firstBatch'
76
- # field in the 'cursor' field of the first document returned.
77
- #
78
- # @example Get the documents.
79
- # result.documents
80
- #
81
- # @return [ Array<BSON::Document> ] The documents.
82
- #
83
- # @since 2.0.0
84
- def documents
85
- cursor_document[FIRST_BATCH]
86
- end
87
-
88
- # Validate the result. In the case where an unauthorized client tries
89
- # to run the command we need to generate the proper error.
90
- #
91
- # @example Validate the result.
92
- # result.validate!
93
- #
94
- # @return [ Result ] Self if successful.
95
- #
96
- # @since 2.0.0
97
- def validate!
98
- !successful? ? raise(Error::OperationFailure.new(parser.message)) : self
99
- end
100
-
101
- private
102
-
103
- def cursor_document
104
- @cursor_document ||= first_document[CURSOR]
105
- end
106
-
107
- def first_document
108
- @first_document ||= reply.documents[0]
109
- end
110
- end
111
- end
112
- end
113
- end
114
- end
@@ -1,118 +0,0 @@
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 Operation
17
- module Read
18
- class ListIndexes
19
-
20
- # Defines custom behaviour of results when using the
21
- # listIndexes command.
22
- #
23
- # @since 2.0.0
24
- class Result < Operation::Result
25
-
26
- # The field name for the cursor document in a listIndexes result.
27
- #
28
- # @since 2.0.0
29
- CURSOR = 'cursor'.freeze
30
-
31
- # The cursor id field in the cursor document.
32
- #
33
- # @since 2.0.0
34
- CURSOR_ID = 'id'.freeze
35
-
36
- # The namespace field in the cursor document.
37
- #
38
- # @since 2.0.0
39
- NAMESPACE = 'ns'.freeze
40
-
41
- # The field name for the first batch of a cursor.
42
- #
43
- # @since 2.0.0
44
- FIRST_BATCH = 'firstBatch'.freeze
45
-
46
- # Get the cursor id for the result.
47
- #
48
- # @example Get the cursor id.
49
- # result.cursor_id
50
- #
51
- # @note Even though the wire protocol has a cursor_id field for all
52
- # messages of type reply, it is always zero when using the
53
- # listIndexes command and must be retrieved from the cursor
54
- # document itself.
55
- #
56
- # @return [ Integer ] The cursor id.
57
- #
58
- # @since 2.0.0
59
- def cursor_id
60
- cursor_document ? cursor_document[CURSOR_ID] : super
61
- end
62
-
63
- # Get the namespace for the cursor.
64
- #
65
- # @example Get the namespace.
66
- # result.namespace
67
- #
68
- # @return [ String ] The namespace.
69
- #
70
- # @since 2.0.0
71
- def namespace
72
- cursor_document ? cursor_document[NAMESPACE] : super
73
- end
74
-
75
- # Get the documents for the listIndexes result. This is the 'firstBatch'
76
- # field in the 'cursor' field of the first document returned.
77
- #
78
- # @example Get the documents.
79
- # result.documents
80
- #
81
- # @return [ Array<BSON::Document> ] The documents.
82
- #
83
- # @since 2.0.0
84
- def documents
85
- cursor_document[FIRST_BATCH]
86
- end
87
-
88
- # Validate the result. In the case where the database or collection
89
- # does not exist on the server we will get an error, and it's better
90
- # to raise a meaningful exception here than the ambiguous one when
91
- # the error occurs.
92
- #
93
- # @example Validate the result.
94
- # result.validate!
95
- #
96
- # @raise [ NoNamespace ] If the ns doesn't exist.
97
- #
98
- # @return [ Result ] Self if successful.
99
- #
100
- # @since 2.0.0
101
- def validate!
102
- !successful? ? raise(Error::OperationFailure.new(parser.message)) : self
103
- end
104
-
105
- private
106
-
107
- def cursor_document
108
- @cursor_document ||= first_document[CURSOR]
109
- end
110
-
111
- def first_document
112
- @first_document ||= reply.documents[0]
113
- end
114
- end
115
- end
116
- end
117
- end
118
- end
@@ -1,68 +0,0 @@
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 Operation
17
- module Read
18
-
19
- # A MongoDB operation to get a list of collection names in a database.
20
- #
21
- # @example Create the collection names operation.
22
- # Read::CollectionNames.new(:db_name => 'test-db')
23
- #
24
- # Initialization:
25
- # param [ Hash ] spec The specifications for the collection names operation.
26
- #
27
- # option spec :db_name [ String ] The name of the database whose collection
28
- # names is requested.
29
- # option spec :options [ Hash ] Options for the operation.
30
- #
31
- # @since 2.0.0
32
- class CollectionsInfo
33
- include Executable
34
- include Specifiable
35
- include ReadPreferrable
36
-
37
- # Execute the operation.
38
- # The context gets a connection on which the operation
39
- # is sent in the block.
40
- #
41
- # @param [ Mongo::Server::Context ] context The context for this operation.
42
- #
43
- # @return [ Result ] The operation response, if there is one.
44
- #
45
- # @since 2.0.0
46
- def execute(context)
47
- if context.features.list_collections_enabled?
48
- ListCollections.new(spec).execute(context)
49
- else
50
- context.with_connection do |connection|
51
- Result.new(connection.dispatch([ message(context) ])).validate!
52
- end
53
- end
54
- end
55
-
56
- private
57
-
58
- def selector
59
- { :name => { '$not' => /system\.|\$/ } }
60
- end
61
-
62
- def query_coll
63
- Database::NAMESPACES
64
- end
65
- end
66
- end
67
- end
68
- end