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
@@ -30,40 +30,14 @@ module Mongo
30
30
  #
31
31
  # @since 2.0.0
32
32
  class UpdateUser
33
- include Executable
33
+ include GLE
34
+ include WriteCommandEnabled
34
35
  include Specifiable
35
36
 
36
- # Execute the operation.
37
- #
38
- # @note Updating users behaves different on 2.7+, 2.6.x, and
39
- # 2.4- so we need to break this out into separate operations.
40
- #
41
- # @example Execute the operation.
42
- # operation.execute(context)
43
- #
44
- # @param [ Mongo::Server::Context ] context The context for this operation.
45
- #
46
- # @return [ Result ] The operation result.
47
- #
48
- # @since 2.0.0
49
- def execute(context)
50
- if context.features.write_command_enabled?
51
- execute_write_command(context)
52
- else
53
- execute_message(context)
54
- end
55
- end
56
-
57
37
  private
58
38
 
59
- def execute_write_command(context)
60
- Result.new(Command::UpdateUser.new(spec).execute(context)).validate!
61
- end
62
-
63
- def execute_message(context)
64
- context.with_connection do |connection|
65
- Result.new(connection.dispatch([ message, gle ].compact)).validate!
66
- end
39
+ def write_command_op
40
+ Command::UpdateUser.new(spec)
67
41
  end
68
42
 
69
43
  def message
@@ -0,0 +1,53 @@
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 Write
18
+
19
+ # This module contains common functionality for operations that send either
20
+ # a write command or a specific wire protocol message, depending on server version.
21
+ # For server versions >= 2.6, a write command is sent.
22
+ #
23
+ # @since 2.1.0
24
+ module WriteCommandEnabled
25
+
26
+ # Execute the operation.
27
+ #
28
+ # @example Execute the operation.
29
+ # operation.execute(context)
30
+ #
31
+ # @param [ Mongo::Server::Context ] context The context for this operation.
32
+ #
33
+ # @return [ Result ] The operation result.
34
+ #
35
+ # @since 2.1.0
36
+ def execute(context)
37
+ if context.features.write_command_enabled?
38
+ execute_write_command(context)
39
+ else
40
+ execute_message(context)
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def execute_write_command(context)
47
+ result_class = defined?(self.class::Result) ? self.class::Result : Result
48
+ result_class.new(write_command_op.execute(context)).validate!
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -34,8 +34,10 @@ module Mongo
34
34
  #
35
35
  # @since 2.0.0
36
36
  def transform(options, mappings)
37
- options.reduce({}) do |transformed, (key, value)|
38
- transformed[mappings[key] || key] = value
37
+ map = transform_keys_to_strings(mappings)
38
+ opts = transform_keys_to_strings(options)
39
+ opts.reduce({}) do |transformed, (key, value)|
40
+ transformed[map[key]] = value if map[key]
39
41
  transformed
40
42
  end
41
43
  end
@@ -43,8 +43,9 @@ module Mongo
43
43
  def initialize(database, collection, selector, options = {})
44
44
  @database = database
45
45
  @namespace = "#{database}.#{collection}"
46
- @selector = selector
47
- @flags = options[:flags] || []
46
+ @selector = selector
47
+ @flags = options[:flags] || []
48
+ @upconverter = Upconverter.new(collection, selector, options)
48
49
  end
49
50
 
50
51
  # Return the event payload for monitoring.
@@ -56,11 +57,18 @@ module Mongo
56
57
  #
57
58
  # @since 2.1.0
58
59
  def payload
59
- { command_name: 'delete', database_name: @database, command: selector, request_id: request_id }
60
+ {
61
+ command_name: 'delete',
62
+ database_name: @database,
63
+ command: upconverter.command,
64
+ request_id: request_id
65
+ }
60
66
  end
61
67
 
62
68
  private
63
69
 
70
+ attr_reader :upconverter
71
+
64
72
  # The operation code required to specify a Delete message.
65
73
  # @return [Fixnum] the operation code.
66
74
  def op_code
@@ -84,6 +92,63 @@ module Mongo
84
92
  # @!attribute
85
93
  # @return [Hash] The selector for this Delete message.
86
94
  field :selector, Document
95
+
96
+ # Converts legacy delete messages to the appropriare OP_COMMAND style
97
+ # message.
98
+ #
99
+ # @since 2.1.0
100
+ class Upconverter
101
+
102
+ # @return [ String ] collection The name of the collection.
103
+ attr_reader :collection
104
+
105
+ # @return [ BSON::Document, Hash ] filter The query filter or command.
106
+ attr_reader :filter
107
+
108
+ # @return [ Hash ] options The options.
109
+ attr_reader :options
110
+
111
+ # Instantiate the upconverter.
112
+ #
113
+ # @example Instantiate the upconverter.
114
+ # Upconverter.new('users', { name: 'test' })
115
+ #
116
+ # @param [ String ] collection The name of the collection.
117
+ # @param [ BSON::Document, Hash ] filter The filter or command.
118
+ #
119
+ # @since 2.1.0
120
+ def initialize(collection, filter, options)
121
+ @collection = collection
122
+ @filter = filter
123
+ @options = options
124
+ end
125
+
126
+ # Get the upconverted command.
127
+ #
128
+ # @example Get the command.
129
+ # upconverter.command
130
+ #
131
+ # @return [ BSON::Document ] The upconverted command.
132
+ #
133
+ # @since 2.1.0
134
+ def command
135
+ BSON::Document.new(
136
+ delete: collection,
137
+ deletes: [ BSON::Document.new(q: filter, limit: limit) ],
138
+ ordered: true
139
+ )
140
+ end
141
+
142
+ private
143
+
144
+ def limit
145
+ if options.key?(:flags)
146
+ options[:flags].include?(:single_remove) ? 1 : 0
147
+ else
148
+ 0
149
+ end
150
+ end
151
+ end
87
152
  end
88
153
  end
89
154
  end
@@ -41,6 +41,7 @@ module Mongo
41
41
  @namespace = "#{database}.#{collection}"
42
42
  @number_to_return = number_to_return
43
43
  @cursor_id = cursor_id
44
+ @upconverter = Upconverter.new(collection, cursor_id, number_to_return)
44
45
  end
45
46
 
46
47
  # Return the event payload for monitoring.
@@ -53,9 +54,9 @@ module Mongo
53
54
  # @since 2.1.0
54
55
  def payload
55
56
  {
56
- command_name: 'getmore',
57
+ command_name: 'getMore',
57
58
  database_name: @database,
58
- command: { cursor_id: cursor_id, number_to_return: number_to_return },
59
+ command: upconverter.command,
59
60
  request_id: request_id
60
61
  }
61
62
  end
@@ -74,6 +75,8 @@ module Mongo
74
75
 
75
76
  private
76
77
 
78
+ attr_reader :upconverter
79
+
77
80
  # The operation code required to specify a GetMore message.
78
81
  # @return [Fixnum] the operation code.
79
82
  def op_code
@@ -94,6 +97,55 @@ module Mongo
94
97
  # @!attribute
95
98
  # @return [Fixnum] The cursor id to get more documents from.
96
99
  field :cursor_id, Int64
100
+
101
+ # Converts legacy getmore messages to the appropriare OP_COMMAND style
102
+ # message.
103
+ #
104
+ # @since 2.1.0
105
+ class Upconverter
106
+
107
+ # @return [ String ] collection The name of the collection.
108
+ attr_reader :collection
109
+
110
+ # @return [ Integer ] cursor_id The cursor id.
111
+ attr_reader :cursor_id
112
+
113
+ # @return [ Integer ] number_to_return The number of docs to return.
114
+ attr_reader :number_to_return
115
+
116
+ # Instantiate the upconverter.
117
+ #
118
+ # @example Instantiate the upconverter.
119
+ # Upconverter.new('users', 1, 1)
120
+ #
121
+ # @param [ String ] collection The name of the collection.
122
+ # @param [ Integer ] cursor_id The cursor id.
123
+ # @param [ Integer ] number_to_return The number of documents to
124
+ # return.
125
+ #
126
+ # @since 2.1.0
127
+ def initialize(collection, cursor_id, number_to_return)
128
+ @collection = collection
129
+ @cursor_id = cursor_id
130
+ @number_to_return = number_to_return
131
+ end
132
+
133
+ # Get the upconverted command.
134
+ #
135
+ # @example Get the command.
136
+ # upconverter.command
137
+ #
138
+ # @return [ BSON::Document ] The upconverted command.
139
+ #
140
+ # @since 2.1.0
141
+ def command
142
+ BSON::Document.new(
143
+ getMore: cursor_id,
144
+ batchSize: number_to_return,
145
+ collection: collection
146
+ )
147
+ end
148
+ end
97
149
  end
98
150
  end
99
151
  end
@@ -53,6 +53,7 @@ module Mongo
53
53
  @namespace = "#{database}.#{collection}"
54
54
  @documents = documents
55
55
  @flags = options[:flags] || []
56
+ @upconverter = Upconverter.new(collection, documents, options)
56
57
  end
57
58
 
58
59
  # Return the event payload for monitoring.
@@ -64,11 +65,18 @@ module Mongo
64
65
  #
65
66
  # @since 2.1.0
66
67
  def payload
67
- { command_name: 'insert', database_name: @database, command: documents, request_id: request_id }
68
+ {
69
+ command_name: 'insert',
70
+ database_name: @database,
71
+ command: upconverter.command,
72
+ request_id: request_id
73
+ }
68
74
  end
69
75
 
70
76
  private
71
77
 
78
+ attr_reader :upconverter
79
+
72
80
  # The operation code required to specify an Insert message.
73
81
  # @return [Fixnum] the operation code.
74
82
  def op_code
@@ -89,6 +97,56 @@ module Mongo
89
97
  # @!attribute
90
98
  # @return [Array<Hash>] The documents to insert.
91
99
  field :documents, Document, true
100
+
101
+ # Converts legacy insert messages to the appropriare OP_COMMAND style
102
+ # message.
103
+ #
104
+ # @since 2.1.0
105
+ class Upconverter
106
+
107
+ # @return [ String ] collection The name of the collection.
108
+ attr_reader :collection
109
+
110
+ # @return [ Array<BSON::Document> ] documents The documents to insert.
111
+ attr_reader :documents
112
+
113
+ # @return [ Hash ] options The options.
114
+ attr_reader :options
115
+
116
+ # Instantiate the upconverter.
117
+ #
118
+ # @example Instantiate the upconverter.
119
+ # Upconverter.new('users', documents)
120
+ #
121
+ # @param [ String ] collection The name of the collection.
122
+ # @param [ Array<BSON::Document> ] documents The documents.
123
+ # @param [ Hash ] options The options.
124
+ #
125
+ # @since 2.1.0
126
+ def initialize(collection, documents, options)
127
+ @collection = collection
128
+ @documents = documents
129
+ @options = options
130
+ end
131
+
132
+ # Get the upconverted command.
133
+ #
134
+ # @example Get the command.
135
+ # upconverter.command
136
+ #
137
+ # @return [ BSON::Document ] The upconverted command.
138
+ #
139
+ # @since 2.1.0
140
+ def command
141
+ document = BSON::Document.new(
142
+ insert: collection,
143
+ documents: documents,
144
+ ordered: options.fetch(:ordered, true)
145
+ )
146
+ document.merge!(writeConcern: options[:write_concern].options) if options[:write_concern]
147
+ document
148
+ end
149
+ end
92
150
  end
93
151
  end
94
152
  end
@@ -28,11 +28,14 @@ module Mongo
28
28
  # @example Kill the cursor on the server with id 1.
29
29
  # KillCursors.new([1])
30
30
  #
31
- # @param cursor_ids [Array<Fixnum>] The cursor ids to kill.
32
- # @param options [Hash] The additional kill cursors options.
33
- def initialize(cursor_ids, options = {})
31
+ # @param [ Mongo::Database ] collection The collection.
32
+ # @param [ Mongo::Database ] database The database.
33
+ # @param [ Array<Fixnum> ] cursor_ids The cursor ids to kill.
34
+ def initialize(collection, database, cursor_ids)
35
+ @database = database
34
36
  @cursor_ids = cursor_ids
35
37
  @id_count = @cursor_ids.size
38
+ @upconverter = Upconverter.new(collection, cursor_ids)
36
39
  end
37
40
 
38
41
  # Return the event payload for monitoring.
@@ -44,11 +47,18 @@ module Mongo
44
47
  #
45
48
  # @since 2.1.0
46
49
  def payload
47
- { command_name: 'killcursors', command: { cursor_ids: cursor_ids }, request_id: request_id }
50
+ {
51
+ command_name: 'killCursors',
52
+ database_name: @database,
53
+ command: upconverter.command,
54
+ request_id: request_id
55
+ }
48
56
  end
49
57
 
50
58
  private
51
59
 
60
+ attr_reader :upconverter
61
+
52
62
  # The operation code required to specify +KillCursors+ message.
53
63
  # @return [Fixnum] the operation code.
54
64
  def op_code
@@ -65,6 +75,45 @@ module Mongo
65
75
  # @!attribute
66
76
  # @return [Array<Fixnum>] Cursors to kill.
67
77
  field :cursor_ids, Int64, true
78
+
79
+ # Converts legacy insert messages to the appropriare OP_COMMAND style
80
+ # message.
81
+ #
82
+ # @since 2.1.0
83
+ class Upconverter
84
+
85
+ # @return [ String ] collection The name of the collection.
86
+ attr_reader :collection
87
+
88
+ # @return [ Array<Integer> ] cursor_ids The cursor ids.
89
+ attr_reader :cursor_ids
90
+
91
+ # Instantiate the upconverter.
92
+ #
93
+ # @example Instantiate the upconverter.
94
+ # Upconverter.new('users', [ 1, 2, 3 ])
95
+ #
96
+ # @param [ String ] collection The name of the collection.
97
+ # @param [ Array<Integer> ] cursor_ids The cursor ids.
98
+ #
99
+ # @since 2.1.0
100
+ def initialize(collection, cursor_ids)
101
+ @collection = collection
102
+ @cursor_ids = cursor_ids
103
+ end
104
+
105
+ # Get the upconverted command.
106
+ #
107
+ # @example Get the command.
108
+ # upconverter.command
109
+ #
110
+ # @return [ BSON::Document ] The upconverted command.
111
+ #
112
+ # @since 2.1.0
113
+ def command
114
+ BSON::Document.new(killCursors: collection, cursors: cursor_ids)
115
+ end
116
+ end
68
117
  end
69
118
  end
70
119
  end