mongo 2.13.0.rc1 → 2.13.3

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 (68) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/mongo/address.rb +1 -1
  4. data/lib/mongo/auth/aws/request.rb +27 -3
  5. data/lib/mongo/client.rb +48 -2
  6. data/lib/mongo/collection.rb +21 -12
  7. data/lib/mongo/database/view.rb +1 -1
  8. data/lib/mongo/database.rb +14 -2
  9. data/lib/mongo/error/invalid_server_auth_host.rb +22 -0
  10. data/lib/mongo/error/operation_failure.rb +5 -5
  11. data/lib/mongo/error.rb +2 -0
  12. data/lib/mongo/grid/fs_bucket.rb +37 -37
  13. data/lib/mongo/index/view.rb +3 -0
  14. data/lib/mongo/operation/collections_info/command.rb +5 -0
  15. data/lib/mongo/operation/collections_info/result.rb +16 -1
  16. data/lib/mongo/operation/parallel_scan/command.rb +1 -2
  17. data/lib/mongo/operation/shared/read_preference_supported.rb +38 -36
  18. data/lib/mongo/operation/shared/sessions_supported.rb +3 -2
  19. data/lib/mongo/protocol/message.rb +11 -2
  20. data/lib/mongo/protocol/msg.rb +22 -3
  21. data/lib/mongo/protocol/query.rb +47 -11
  22. data/lib/mongo/server/app_metadata.rb +27 -3
  23. data/lib/mongo/server/connection_base.rb +35 -11
  24. data/lib/mongo/server_selector/secondary_preferred.rb +2 -7
  25. data/lib/mongo/version.rb +1 -1
  26. data/spec/integration/bson_symbol_spec.rb +4 -2
  27. data/spec/integration/bulk_write_spec.rb +19 -0
  28. data/spec/integration/client_authentication_options_spec.rb +37 -0
  29. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -5
  30. data/spec/integration/sdam_error_handling_spec.rb +18 -1
  31. data/spec/integration/sdam_events_spec.rb +8 -7
  32. data/spec/integration/secondary_reads_spec.rb +102 -0
  33. data/spec/integration/size_limit_spec.rb +20 -6
  34. data/spec/lite_spec_helper.rb +1 -1
  35. data/spec/mongo/auth/aws/request_region_spec.rb +42 -0
  36. data/spec/mongo/auth/aws/request_spec.rb +32 -32
  37. data/spec/mongo/client_construction_spec.rb +123 -0
  38. data/spec/mongo/client_encryption_spec.rb +16 -10
  39. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  40. data/spec/mongo/database_spec.rb +64 -0
  41. data/spec/mongo/index/view_spec.rb +150 -2
  42. data/spec/mongo/operation/read_preference_legacy_spec.rb +9 -19
  43. data/spec/mongo/operation/read_preference_op_msg_spec.rb +3 -3
  44. data/spec/mongo/server/app_metadata_shared.rb +114 -8
  45. data/spec/mongo/server_selector/secondary_preferred_spec.rb +6 -6
  46. data/spec/runners/transactions/operation.rb +13 -2
  47. data/spec/shared/LICENSE +20 -0
  48. data/spec/shared/bin/get-mongodb-download-url +17 -0
  49. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  50. data/spec/shared/lib/mrss/cluster_config.rb +221 -0
  51. data/spec/shared/lib/mrss/constraints.rb +346 -0
  52. data/spec/shared/lib/mrss/docker_runner.rb +265 -0
  53. data/spec/shared/lib/mrss/lite_constraints.rb +191 -0
  54. data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
  55. data/spec/shared/lib/mrss/spec_organizer.rb +152 -0
  56. data/spec/shared/lib/mrss/utils.rb +15 -0
  57. data/spec/shared/share/Dockerfile.erb +231 -0
  58. data/spec/shared/shlib/distro.sh +73 -0
  59. data/spec/shared/shlib/server.sh +290 -0
  60. data/spec/shared/shlib/set_env.sh +128 -0
  61. data/spec/support/client_registry.rb +8 -4
  62. data/spec/support/client_registry_macros.rb +14 -5
  63. data/spec/support/spec_config.rb +12 -0
  64. data/spec/support/spec_setup.rb +48 -38
  65. data.tar.gz.sig +3 -1
  66. metadata +1005 -974
  67. metadata.gz.sig +0 -0
  68. data/spec/integration/size_limit_spec.rb~12e1e9c4f... RUBY-2242 Fix zlib compression (#2021) +0 -98
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: db8c88ed58f349728a9361db891376926e93450f4a8ac86aae0bc67599c91a7b
4
- data.tar.gz: b4f7daaf1d43b55839c1f689504d4f1c212c638e45f6d2211732bc07a41f77e5
3
+ metadata.gz: 41f37eb33cbd1ebf2c916187b4610eefd895885042eeb3949882ce0a8c4ed069
4
+ data.tar.gz: db734108633f8b5988eaa15de33165182233ba5064f0b805298747256fb578b1
5
5
  SHA512:
6
- metadata.gz: 22471d116179fff42716707a40fa18ebc3c53492a6313bb16be96f447db725110b8ed0b3ee8e199026098a59b8f2941290cd1493249c8e9120ec2849e0229fa1
7
- data.tar.gz: 8965e04c6926343e4363110d010e14b1a8fde146eb4e239f620005f251ff24b63393bc13f5f332ac4d8aa39cc790a66f080401d9b0923c54a8b40b7d80aa25ea
6
+ metadata.gz: 27c0c7ca84b6b7983767eb652f6aa5968362d8b42a4adf3eab3ee4a11fe4e74d36096b636436ac5075b31207470a67a8c5ecb00eac7f27a3889966ee30d84db9
7
+ data.tar.gz: 86c9fb09b3fb9c9512db2e7caed2f21ac2d53ee75f671d1cbcc92b89afa0d471cc1217552c3971ee9641f90b4c710692ab885c454f8701371726623e16114604
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/mongo/address.rb CHANGED
@@ -286,7 +286,7 @@ module Mongo
286
286
  rescue IOError, SystemCallError => e
287
287
  raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
288
288
  rescue OpenSSL::SSL::SSLError => e
289
- raise Error::SocketError, "#{e.class}: #{e} (for #{self}) (#{SSL_ERROR})"
289
+ raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
290
290
  end
291
291
  end
292
292
  end
@@ -61,9 +61,13 @@ module Mongo
61
61
  %i(access_key_id secret_access_key host server_nonce).each do |arg|
62
62
  value = instance_variable_get("@#{arg}")
63
63
  if value.nil? || value.empty?
64
- raise ArgumentError, "Value for #{arg} is required"
64
+ raise Error::InvalidServerAuthResponse, "Value for '#{arg}' is required"
65
65
  end
66
66
  end
67
+
68
+ if host && host.length > 255
69
+ raise Error::InvalidServerAuthHost, "Value for 'host' is too long: #{@host}"
70
+ end
67
71
  end
68
72
 
69
73
  # @return [ String ] access_key_id The access key id.
@@ -98,8 +102,28 @@ module Mongo
98
102
 
99
103
  # @return [ String ] region The region of the host, derived from the host.
100
104
  def region
101
- # TODO implement region derivation when SPEC-1646 is done.
102
- 'us-east-1'
105
+ # Common case
106
+ if host == 'sts.amazonaws.com'
107
+ return 'us-east-1'
108
+ end
109
+
110
+ if host.start_with?('.')
111
+ raise Error::InvalidServerAuthHost, "Host begins with a period: #{host}"
112
+ end
113
+ if host.end_with?('.')
114
+ raise Error::InvalidServerAuthHost, "Host ends with a period: #{host}"
115
+ end
116
+
117
+ parts = host.split('.')
118
+ if parts.any? { |part| part.empty? }
119
+ raise Error::InvalidServerAuthHost, "Host has an empty component: #{host}"
120
+ end
121
+
122
+ if parts.length == 1
123
+ 'us-east-1'
124
+ else
125
+ parts[1]
126
+ end
103
127
  end
104
128
 
105
129
  # Returns the scope of the request, per the AWS signature V4 specification.
data/lib/mongo/client.rb CHANGED
@@ -104,6 +104,7 @@ module Mongo
104
104
  :truncate_logs,
105
105
  :user,
106
106
  :wait_queue_timeout,
107
+ :wrapping_libraries,
107
108
  :write,
108
109
  :write_concern,
109
110
  :zlib_compression_level,
@@ -375,6 +376,10 @@ module Mongo
375
376
  # @option options [ String ] :user The user name.
376
377
  # @option options [ Float ] :wait_queue_timeout The time to wait, in
377
378
  # seconds, in the connection pool for a connection to be checked in.
379
+ # @option options [ Array<Hash> ] :wrapping_libraries Information about
380
+ # libraries such as ODMs that are wrapping the driver, to be added to
381
+ # metadata sent to the server. Specify the lower level libraries first.
382
+ # Allowed hash keys: :name, :version, :platform.
378
383
  # @option options [ Hash ] :write Deprecated. Equivalent to :write_concern
379
384
  # option.
380
385
  # @option options [ Hash ] :write_concern The write concern options.
@@ -461,7 +466,18 @@ module Mongo
461
466
  # construction
462
467
  sdam_proc = options.delete(:sdam_proc)
463
468
 
464
- options = default_options(options).merge(options)
469
+ # For gssapi service_name, the default option is given in a hash
470
+ # (one level down from the top level).
471
+ merged_options = default_options(options)
472
+ options.each do |k, v|
473
+ default_v = merged_options[k]
474
+ if Hash === default_v
475
+ v = default_v.merge(v)
476
+ end
477
+ merged_options[k] = v
478
+ end
479
+ options = merged_options
480
+
465
481
  @options = validate_new_options!(options)
466
482
  =begin WriteConcern object support
467
483
  if @options[:write_concern].is_a?(WriteConcern::Base)
@@ -627,7 +643,7 @@ module Mongo
627
643
  #
628
644
  # @return [ BSON::Document ] The user-defined read preference.
629
645
  # The document may have the following fields:
630
- # - *:read* -- read preference specified as a symbol; valid values are
646
+ # - *:mode* -- read preference specified as a symbol; valid values are
631
647
  # *:primary*, *:primary_preferred*, *:secondary*, *:secondary_preferred*
632
648
  # and *:nearest*.
633
649
  # - *:tag_sets* -- an array of hashes.
@@ -1160,6 +1176,36 @@ module Mongo
1160
1176
  raise ArgumentError, ":bg_error_backtrace option value must be true, false, nil or a positive integer: #{value}"
1161
1177
  end
1162
1178
  end
1179
+
1180
+ if libraries = options[:wrapping_libraries]
1181
+ unless Array === libraries
1182
+ raise ArgumentError, ":wrapping_libraries must be an array of hashes: #{libraries}"
1183
+ end
1184
+
1185
+ libraries = libraries.map do |library|
1186
+ Utils.shallow_symbolize_keys(library)
1187
+ end
1188
+
1189
+ libraries.each do |library|
1190
+ unless Hash === library
1191
+ raise ArgumentError, ":wrapping_libraries element is not a hash: #{library}"
1192
+ end
1193
+
1194
+ if library.empty?
1195
+ raise ArgumentError, ":wrapping_libraries element is empty"
1196
+ end
1197
+
1198
+ unless (library.keys - %i(name platform version)).empty?
1199
+ raise ArgumentError, ":wrapping_libraries element has invalid keys (allowed keys: :name, :platform, :version): #{library}"
1200
+ end
1201
+
1202
+ library.each do |key, value|
1203
+ if value.include?('|')
1204
+ raise ArgumentError, ":wrapping_libraries element value cannot include '|': #{value}"
1205
+ end
1206
+ end
1207
+ end
1208
+ end
1163
1209
  end
1164
1210
 
1165
1211
  # Validates all authentication-related options after they are set on the client
@@ -278,8 +278,12 @@ module Mongo
278
278
  }).execute(next_primary(nil, session), client: client)
279
279
  end
280
280
  rescue Error::OperationFailure => ex
281
- raise ex unless ex.message =~ /ns not found/
282
- false
281
+ # NamespaceNotFound
282
+ if ex.code == 26 || ex.code.nil? && ex.message =~ /ns not found/
283
+ false
284
+ else
285
+ raise
286
+ end
283
287
  end
284
288
 
285
289
  # Find documents in the collection.
@@ -400,7 +404,7 @@ module Mongo
400
404
  View::ChangeStream.new(View.new(self, {}, options), pipeline, nil, options)
401
405
  end
402
406
 
403
- # Gets the number of matching documents in the collection.
407
+ # Gets an estimated number of matching documents in the collection.
404
408
  #
405
409
  # @example Get the count.
406
410
  # collection.count(name: 1)
@@ -429,11 +433,13 @@ module Mongo
429
433
  View.new(self, filter || {}, options).count(options)
430
434
  end
431
435
 
432
- # Gets the number of matching documents in the collection. Unlike the deprecated #count
433
- # method, this will return the exact number of documents matching the filter rather than the estimate.
436
+ # Gets the number of documents matching the query. Unlike the deprecated
437
+ # #count method, this will return the exact number of documents matching
438
+ # the filter (or exact number of documents in the collection, if no filter
439
+ # is provided) rather than an estimate.
434
440
  #
435
- # @example Get the number of documents in the collection.
436
- # collection_view.count_documents
441
+ # Use #estimated_document_count to retrieve an estimate of the number
442
+ # of documents in the collection using the collection metadata.
437
443
  #
438
444
  # @param [ Hash ] filter A filter for matching documents.
439
445
  # @param [ Hash ] options Options for the operation.
@@ -454,15 +460,16 @@ module Mongo
454
460
  View.new(self, filter, options).count_documents(options)
455
461
  end
456
462
 
457
- # Gets an estimate of the count of documents in a collection using collection metadata.
463
+ # Gets an estimate of the number of documents in the collection using the
464
+ # collection metadata.
458
465
  #
459
- # @example Get the number of documents in the collection.
460
- # collection_view.estimated_document_count
466
+ # Use #count_documents to retrieve the exact number of documents in the
467
+ # collection, or to count documents matching a filter.
461
468
  #
462
469
  # @param [ Hash ] options Options for the operation.
463
470
  #
464
- # @option opts :max_time_ms [ Integer ] The maximum amount of time to allow the command to
465
- # run.
471
+ # @option opts :max_time_ms [ Integer ] The maximum amount of time to allow
472
+ # the command to run for on the server.
466
473
  # @option opts [ Hash ] :read The read preference options.
467
474
  #
468
475
  # @return [ Integer ] The document count.
@@ -566,6 +573,8 @@ module Mongo
566
573
  # @param [ Array<Hash> ] documents The documents to insert.
567
574
  # @param [ Hash ] options The insert options.
568
575
  #
576
+ # @option options [ true | false ] :ordered Whether the operations
577
+ # should be executed in order.
569
578
  # @option options [ Session ] :session The session to use for the operation.
570
579
  #
571
580
  # @return [ Result ] The database response wrapper.
@@ -100,7 +100,7 @@ module Mongo
100
100
  #
101
101
  # @return [ Array<Hash> ] Info for each collection in the database.
102
102
  #
103
- # @since 2.0.5
103
+ # @since 2.0.5
104
104
  def list_collections(options = {})
105
105
  session = client.send(:get_session)
106
106
  collections_info(session, ServerSelector.primary, options)
@@ -315,8 +315,20 @@ module Mongo
315
315
 
316
316
  # Get the Grid "filesystem" for this database.
317
317
  #
318
- # @example Get the GridFS.
319
- # database.fs
318
+ # @param [ Hash ] options The GridFS options.
319
+ #
320
+ # @option options [ String ] :bucket_name The prefix for the files and chunks
321
+ # collections.
322
+ # @option options [ Integer ] :chunk_size Override the default chunk
323
+ # size.
324
+ # @option options [ String ] :fs_name The prefix for the files and chunks
325
+ # collections.
326
+ # @option options [ String ] :read The read preference.
327
+ # @option options [ Session ] :session The session to use.
328
+ # @option options [ Hash ] :write Deprecated. Equivalent to :write_concern
329
+ # option.
330
+ # @option options [ Hash ] :write_concern The write concern options.
331
+ # Can be :w => Integer|String, :fsync => Boolean, :j => Boolean.
320
332
  #
321
333
  # @return [ Grid::FSBucket ] The GridFS for the database.
322
334
  #
@@ -0,0 +1,22 @@
1
+ # Copyright (C) 2020 MongoDB Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Error
17
+
18
+ # Raised when the server returned an invalid Host value in AWS auth.
19
+ class InvalidServerAuthHost < InvalidServerAuthResponse
20
+ end
21
+ end
22
+ end
@@ -97,7 +97,8 @@ module Mongo
97
97
  # @since 2.1.1
98
98
  # @deprecated
99
99
  def retryable?
100
- write_retryable? || RETRY_MESSAGES.any?{ |m| message.include?(m) }
100
+ write_retryable? ||
101
+ code.nil? && RETRY_MESSAGES.any?{ |m| message.include?(m) }
101
102
  end
102
103
 
103
104
  # Whether the error is a retryable error according to the modern retryable
@@ -110,11 +111,11 @@ module Mongo
110
111
  #
111
112
  # @since 2.4.2
112
113
  def write_retryable?
113
- WRITE_RETRY_MESSAGES.any? { |m| message.include?(m) } ||
114
- write_retryable_code?
114
+ write_retryable_code? ||
115
+ code.nil? && WRITE_RETRY_MESSAGES.any? { |m| message.include?(m) }
115
116
  end
116
117
 
117
- def write_retryable_code?
118
+ private def write_retryable_code?
118
119
  if code
119
120
  WRITE_RETRY_ERRORS.any? { |e| e[:code] == code }
120
121
  else
@@ -122,7 +123,6 @@ module Mongo
122
123
  false
123
124
  end
124
125
  end
125
- private :write_retryable_code?
126
126
 
127
127
  # Error codes and code names that should result in a failing getMore
128
128
  # command on a change stream NOT being resumed.
data/lib/mongo/error.rb CHANGED
@@ -190,6 +190,8 @@ require 'mongo/error/invalid_application_name'
190
190
  require 'mongo/error/invalid_nonce'
191
191
  require 'mongo/error/invalid_replacement_document'
192
192
  require 'mongo/error/invalid_server_auth_response'
193
+ # Subclass of InvalidServerAuthResponse
194
+ require 'mongo/error/invalid_server_auth_host'
193
195
  require 'mongo/error/invalid_server_preference'
194
196
  require 'mongo/error/invalid_session'
195
197
  require 'mongo/error/invalid_signature'
@@ -36,6 +36,43 @@ module Mongo
36
36
  # @since 2.1.0
37
37
  FILES_INDEX = { filename: 1, uploadDate: 1 }.freeze
38
38
 
39
+ # Create the GridFS.
40
+ #
41
+ # @example Create the GridFS.
42
+ # Grid::FSBucket.new(database)
43
+ #
44
+ # @param [ Database ] database The database the files reside in.
45
+ # @param [ Hash ] options The GridFS options.
46
+ #
47
+ # @option options [ String ] :bucket_name The prefix for the files and chunks
48
+ # collections.
49
+ # @option options [ Integer ] :chunk_size Override the default chunk
50
+ # size.
51
+ # @option options [ String ] :fs_name The prefix for the files and chunks
52
+ # collections.
53
+ # @option options [ String ] :read The read preference.
54
+ # @option options [ Session ] :session The session to use.
55
+ # @option options [ Hash ] :write Deprecated. Equivalent to :write_concern
56
+ # option.
57
+ # @option options [ Hash ] :write_concern The write concern options.
58
+ # Can be :w => Integer|String, :fsync => Boolean, :j => Boolean.
59
+ #
60
+ # @since 2.0.0
61
+ def initialize(database, options = {})
62
+ @database = database
63
+ @options = options.dup
64
+ =begin WriteConcern object support
65
+ if @options[:write_concern].is_a?(WriteConcern::Base)
66
+ # Cache the instance so that we do not needlessly reconstruct it.
67
+ @write_concern = @options[:write_concern]
68
+ @options[:write_concern] = @write_concern.options
69
+ end
70
+ =end
71
+ @options.freeze
72
+ @chunks_collection = database[chunks_name]
73
+ @files_collection = database[files_name]
74
+ end
75
+
39
76
  # @return [ Collection ] chunks_collection The chunks collection.
40
77
  #
41
78
  # @since 2.0.0
@@ -133,43 +170,6 @@ module Mongo
133
170
  file.id
134
171
  end
135
172
 
136
- # Create the GridFS.
137
- #
138
- # @example Create the GridFS.
139
- # Grid::FSBucket.new(database)
140
- #
141
- # @param [ Database ] database The database the files reside in.
142
- # @param [ Hash ] options The GridFS options.
143
- #
144
- # @option options [ String ] :fs_name The prefix for the files and chunks
145
- # collections.
146
- # @option options [ String ] :bucket_name The prefix for the files and chunks
147
- # collections.
148
- # @option options [ Integer ] :chunk_size Override the default chunk
149
- # size.
150
- # @option options [ String ] :read The read preference.
151
- # @option options [ Session ] :session The session to use.
152
- # @option options [ Hash ] :write Deprecated. Equivalent to :write_concern
153
- # option.
154
- # @option options [ Hash ] :write_concern The write concern options.
155
- # Can be :w => Integer|String, :fsync => Boolean, :j => Boolean.
156
- #
157
- # @since 2.0.0
158
- def initialize(database, options = {})
159
- @database = database
160
- @options = options.dup
161
- =begin WriteConcern object support
162
- if @options[:write_concern].is_a?(WriteConcern::Base)
163
- # Cache the instance so that we do not needlessly reconstruct it.
164
- @write_concern = @options[:write_concern]
165
- @options[:write_concern] = @write_concern.options
166
- end
167
- =end
168
- @options.freeze
169
- @chunks_collection = database[chunks_name]
170
- @files_collection = database[files_name]
171
- end
172
-
173
173
  # Get the prefix for the GridFS
174
174
  #
175
175
  # @example Get the prefix.
@@ -120,6 +120,9 @@ module Mongo
120
120
  # a geo index.
121
121
  # @option options [ Hash ] :partial_filter_expression Specify a filter for a partial
122
122
  # index.
123
+ # @option options [ Boolean ] :hidden When :hidden is true, this index will
124
+ # exist on the collection but not be used by the query planner when
125
+ # executing operations.
123
126
  # @option options [ String | Integer ] :commit_quorum Specify how many
124
127
  # data-bearing members of a replica set, including the primary, must
125
128
  # complete the index builds successfully before the primary marks
@@ -27,6 +27,11 @@ module Mongo
27
27
 
28
28
  private
29
29
 
30
+ def get_result(connection, client, options = {})
31
+ # This is a Mongo::Operation::CollectionsInfo::Result
32
+ Result.new(*dispatch_message(connection, client), db_name)
33
+ end
34
+
30
35
  def selector(connection)
31
36
  {}
32
37
  end
@@ -22,6 +22,21 @@ module Mongo
22
22
  # @since 2.1.0
23
23
  class Result < Operation::Result
24
24
 
25
+ # Initialize a new result.
26
+ #
27
+ # @param [ Array<Protocol::Message> | nil ] replies The wire protocol replies, if any.
28
+ # @param [ Server::Description ] connection_description
29
+ # Server description of the server that performed the operation that
30
+ # this result is for.
31
+ # @param [ String ] database_name The name of the database that the
32
+ # query was sent to.
33
+ #
34
+ # @api private
35
+ def initialize(replies, connection_description, database_name)
36
+ super(replies, connection_description)
37
+ @database_name = database_name
38
+ end
39
+
25
40
  # Get the namespace for the cursor.
26
41
  #
27
42
  # @example Get the namespace.
@@ -31,7 +46,7 @@ module Mongo
31
46
  #
32
47
  # @since 2.1.0
33
48
  def namespace
34
- Database::NAMESPACES
49
+ "#{@database_name}.#{Database::NAMESPACES}"
35
50
  end
36
51
  end
37
52
  end