mongo 2.13.0.rc1 → 2.13.3

Sign up to get free protection for your applications and to get access to all the features.
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