mongo 2.1.0.rc0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +5 -2
- data.tar.gz.sig +0 -0
- data/Rakefile +2 -2
- data/lib/mongo.rb +2 -1
- data/lib/mongo/address.rb +11 -5
- data/lib/mongo/address/ipv4.rb +6 -1
- data/lib/mongo/auth/cr/conversation.rb +1 -1
- data/lib/mongo/auth/ldap/conversation.rb +1 -1
- data/lib/mongo/auth/scram/conversation.rb +1 -1
- data/lib/mongo/auth/user/view.rb +2 -2
- data/lib/mongo/auth/x509/conversation.rb +1 -1
- data/lib/mongo/bulk_write.rb +12 -9
- data/lib/mongo/bulk_write/transformable.rb +20 -5
- data/lib/mongo/client.rb +11 -11
- data/lib/mongo/cluster.rb +2 -2
- data/lib/mongo/collection.rb +21 -8
- data/lib/mongo/collection/view.rb +1 -0
- data/lib/mongo/collection/view/aggregation.rb +11 -5
- data/lib/mongo/collection/view/iterable.rb +6 -2
- data/lib/mongo/collection/view/map_reduce.rb +39 -5
- data/lib/mongo/collection/view/readable.rb +35 -30
- data/lib/mongo/collection/view/writable.rb +26 -18
- data/lib/mongo/database.rb +12 -2
- data/lib/mongo/database/view.rb +4 -3
- data/lib/mongo/dbref.rb +4 -4
- data/lib/mongo/grid/fs_bucket.rb +8 -1
- data/lib/mongo/grid/stream/read.rb +1 -1
- data/lib/mongo/index.rb +5 -0
- data/lib/mongo/index/view.rb +2 -2
- data/lib/mongo/monitoring/command_log_subscriber.rb +9 -3
- data/lib/mongo/monitoring/event.rb +1 -0
- data/lib/mongo/monitoring/event/command_started.rb +2 -1
- data/lib/mongo/monitoring/event/command_succeeded.rb +6 -3
- data/lib/mongo/monitoring/event/secure.rb +58 -0
- data/lib/mongo/operation.rb +31 -1
- data/lib/mongo/operation/commands/collections_info.rb +2 -0
- data/lib/mongo/operation/commands/collections_info/result.rb +39 -0
- data/lib/mongo/operation/commands/list_indexes/result.rb +2 -1
- data/lib/mongo/operation/commands/map_reduce/result.rb +1 -1
- data/lib/mongo/operation/read/query.rb +2 -0
- data/lib/mongo/operation/read/query/result.rb +40 -0
- data/lib/mongo/operation/result.rb +13 -1
- data/lib/mongo/operation/write/bulk/delete.rb +2 -2
- data/lib/mongo/operation/write/bulk/update.rb +3 -3
- data/lib/mongo/operation/write/delete.rb +2 -2
- data/lib/mongo/operation/write/update.rb +9 -4
- data/lib/mongo/options.rb +1 -0
- data/lib/mongo/options/redacted.rb +156 -0
- data/lib/mongo/protocol/insert.rb +25 -6
- data/lib/mongo/protocol/query.rb +45 -31
- data/lib/mongo/protocol/reply.rb +29 -6
- data/lib/mongo/protocol/serializers.rb +1 -1
- data/lib/mongo/retryable.rb +83 -0
- data/lib/mongo/server.rb +16 -3
- data/lib/mongo/server/connectable.rb +21 -3
- data/lib/mongo/server/connection.rb +38 -4
- data/lib/mongo/server/connection_pool.rb +12 -0
- data/lib/mongo/server/connection_pool/queue.rb +15 -0
- data/lib/mongo/server/monitor/connection.rb +2 -2
- data/lib/mongo/server_selector.rb +5 -0
- data/lib/mongo/server_selector/selectable.rb +16 -9
- data/lib/mongo/socket.rb +6 -2
- data/lib/mongo/uri.rb +1 -1
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +11 -11
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +10 -10
- data/spec/mongo/client_spec.rb +101 -18
- data/spec/mongo/collection_spec.rb +44 -0
- data/spec/mongo/connection_string_spec.rb +36 -58
- data/spec/mongo/database_spec.rb +20 -0
- data/spec/mongo/grid/fs_bucket_spec.rb +1 -1
- data/spec/mongo/grid/stream/write_spec.rb +2 -2
- data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
- data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
- data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
- data/spec/mongo/operation/commands/aggregate_spec.rb +0 -16
- data/spec/mongo/operation/commands/command_spec.rb +0 -18
- data/spec/mongo/operation/kill_cursors_spec.rb +0 -16
- data/spec/mongo/operation/read/get_more_spec.rb +0 -16
- data/spec/mongo/operation/read/query_spec.rb +19 -16
- data/spec/mongo/operation/write/bulk/delete_spec.rb +16 -16
- data/spec/mongo/operation/write/bulk/update_spec.rb +6 -6
- data/spec/mongo/operation/write/command/delete_spec.rb +0 -16
- data/spec/mongo/operation/write/command/insert_spec.rb +0 -16
- data/spec/mongo/operation/write/command/update_spec.rb +0 -16
- data/spec/mongo/operation/write/delete_spec.rb +3 -3
- data/spec/mongo/operation/write/update_spec.rb +6 -6
- data/spec/mongo/options/redacted_spec.rb +350 -0
- data/spec/mongo/protocol/query_spec.rb +15 -1
- data/spec/mongo/retryable_spec.rb +147 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
- data/spec/mongo/server/connection_pool_spec.rb +32 -0
- data/spec/mongo/server/connection_spec.rb +37 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +24 -59
- data/spec/mongo/server_selection_rtt_spec.rb +37 -57
- data/spec/mongo/server_selection_spec.rb +2 -0
- data/spec/mongo/server_selector/nearest_spec.rb +1 -0
- data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -0
- data/spec/mongo/server_selector/primary_spec.rb +8 -2
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +1 -0
- data/spec/mongo/server_selector/secondary_spec.rb +1 -0
- data/spec/mongo/server_spec.rb +68 -1
- data/spec/mongo/socket/ssl_spec.rb +29 -5
- data/spec/mongo/uri_spec.rb +20 -20
- data/spec/support/crud.rb +7 -1
- data/spec/support/matchers.rb +1 -1
- data/spec/support/shared/server_selector.rb +58 -2
- metadata +20 -5
- metadata.gz.sig +0 -0
@@ -24,8 +24,18 @@ module Mongo
|
|
24
24
|
extend Forwardable
|
25
25
|
include Enumerable
|
26
26
|
include Immutable
|
27
|
-
include Iterable
|
28
27
|
include Loggable
|
28
|
+
include Retryable
|
29
|
+
|
30
|
+
# The inline option.
|
31
|
+
#
|
32
|
+
# @since 2.1.0
|
33
|
+
INLINE = 'inline'.freeze
|
34
|
+
|
35
|
+
# Reroute message.
|
36
|
+
#
|
37
|
+
# @since 2.1.0
|
38
|
+
REROUTE = 'Rerouting the MapReduce operation to the primary server.'.freeze
|
29
39
|
|
30
40
|
# @return [ View ] view The collection view.
|
31
41
|
attr_reader :view
|
@@ -42,6 +52,31 @@ module Mongo
|
|
42
52
|
# Delegate necessary operations to the collection.
|
43
53
|
def_delegators :collection, :database
|
44
54
|
|
55
|
+
# Iterate through documents returned by the map/reduce.
|
56
|
+
#
|
57
|
+
# @example Iterate through the result of the map/reduce.
|
58
|
+
# map_reduce.each do |document|
|
59
|
+
# p document
|
60
|
+
# end
|
61
|
+
#
|
62
|
+
# @return [ Enumerator ] The enumerator.
|
63
|
+
#
|
64
|
+
# @since 2.0.0
|
65
|
+
#
|
66
|
+
# @yieldparam [ Hash ] Each matching document.
|
67
|
+
def each
|
68
|
+
@cursor = nil
|
69
|
+
write_with_retry do
|
70
|
+
server = read.select_server(cluster)
|
71
|
+
result = send_initial_query(server)
|
72
|
+
@cursor = Cursor.new(view, result, server)
|
73
|
+
end
|
74
|
+
@cursor.each do |doc|
|
75
|
+
yield doc
|
76
|
+
end if block_given?
|
77
|
+
@cursor.to_enum
|
78
|
+
end
|
79
|
+
|
45
80
|
# Set or get the finalize function for the operation.
|
46
81
|
#
|
47
82
|
# @example Set the finalize function.
|
@@ -148,7 +183,7 @@ module Mongo
|
|
148
183
|
private
|
149
184
|
|
150
185
|
def inline?
|
151
|
-
out.nil? || out == { inline: 1 } || out == {
|
186
|
+
out.nil? || out == { inline: 1 } || out == { INLINE => 1 }
|
152
187
|
end
|
153
188
|
|
154
189
|
def map_reduce_spec
|
@@ -182,13 +217,12 @@ module Mongo
|
|
182
217
|
end
|
183
218
|
|
184
219
|
def secondary_ok?
|
185
|
-
out.respond_to?(:keys) &&
|
186
|
-
out.keys.first.to_s.downcase == 'inline'
|
220
|
+
out.respond_to?(:keys) && out.keys.first.to_s.downcase == INLINE
|
187
221
|
end
|
188
222
|
|
189
223
|
def send_initial_query(server)
|
190
224
|
unless valid_server?(server)
|
191
|
-
log_warn(
|
225
|
+
log_warn(REROUTE)
|
192
226
|
server = cluster.next_primary
|
193
227
|
end
|
194
228
|
result = initial_query_op.execute(server.context)
|
@@ -25,17 +25,17 @@ module Mongo
|
|
25
25
|
#
|
26
26
|
# @since 2.0.0
|
27
27
|
SPECIAL_FIELDS = {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
28
|
+
:sort => :$orderby,
|
29
|
+
:hint => :$hint,
|
30
|
+
:comment => :$comment,
|
31
|
+
:snapshot => :$snapshot,
|
32
|
+
:max_scan => :$maxScan,
|
33
|
+
:max_value => :$max,
|
34
|
+
:min_value => :$min,
|
35
|
+
:max_time_ms => :$maxTimeMS,
|
36
|
+
:return_key => :$returnKey,
|
37
|
+
:show_disk_loc => :$showDiskLoc,
|
38
|
+
:explain => :$explain
|
39
39
|
}.freeze
|
40
40
|
|
41
41
|
# Options to cursor flags mapping.
|
@@ -92,7 +92,7 @@ module Mongo
|
|
92
92
|
#
|
93
93
|
# @since 2.0.0
|
94
94
|
def batch_size(batch_size = nil)
|
95
|
-
configure(
|
95
|
+
configure(:batch_size, batch_size)
|
96
96
|
end
|
97
97
|
|
98
98
|
# Associate a comment with the query.
|
@@ -110,7 +110,7 @@ module Mongo
|
|
110
110
|
#
|
111
111
|
# @since 2.0.0
|
112
112
|
def comment(comment = nil)
|
113
|
-
configure_modifier(
|
113
|
+
configure_modifier(:comment, comment)
|
114
114
|
end
|
115
115
|
|
116
116
|
# Get a count of matching documents in the collection.
|
@@ -137,7 +137,9 @@ module Mongo
|
|
137
137
|
cmd[:hint] = options[:hint] if options[:hint]
|
138
138
|
cmd[:limit] = options[:limit] if options[:limit]
|
139
139
|
cmd[:maxTimeMS] = options[:max_time_ms] if options[:max_time_ms]
|
140
|
-
|
140
|
+
read_with_retry do
|
141
|
+
database.command(cmd, options).n
|
142
|
+
end
|
141
143
|
end
|
142
144
|
|
143
145
|
# Get a list of distinct values for a specific field.
|
@@ -160,7 +162,9 @@ module Mongo
|
|
160
162
|
:key => field_name.to_s,
|
161
163
|
:query => selector }
|
162
164
|
cmd[:maxTimeMS] = options[:max_time_ms] if options[:max_time_ms]
|
163
|
-
|
165
|
+
read_with_retry do
|
166
|
+
database.command(cmd, options).first['values']
|
167
|
+
end
|
164
168
|
end
|
165
169
|
|
166
170
|
# The index that MongoDB will be forced to use for the query.
|
@@ -174,7 +178,7 @@ module Mongo
|
|
174
178
|
#
|
175
179
|
# @since 2.0.0
|
176
180
|
def hint(hint = nil)
|
177
|
-
configure_modifier(
|
181
|
+
configure_modifier(:hint, hint)
|
178
182
|
end
|
179
183
|
|
180
184
|
# The max number of docs to return from the query.
|
@@ -188,7 +192,7 @@ module Mongo
|
|
188
192
|
#
|
189
193
|
# @since 2.0.0
|
190
194
|
def limit(limit = nil)
|
191
|
-
configure(
|
195
|
+
configure(:limit, limit)
|
192
196
|
end
|
193
197
|
|
194
198
|
# Execute a map/reduce operation on the collection view.
|
@@ -218,7 +222,7 @@ module Mongo
|
|
218
222
|
#
|
219
223
|
# @since 2.0.0
|
220
224
|
def max_scan(value = nil)
|
221
|
-
configure_modifier(
|
225
|
+
configure_modifier(:max_scan, value)
|
222
226
|
end
|
223
227
|
|
224
228
|
# Set the maximum value to search.
|
@@ -232,7 +236,7 @@ module Mongo
|
|
232
236
|
#
|
233
237
|
# @since 2.1.0
|
234
238
|
def max_value(value = nil)
|
235
|
-
configure_modifier(
|
239
|
+
configure_modifier(:max_value, value)
|
236
240
|
end
|
237
241
|
|
238
242
|
# Set the minimum value to search.
|
@@ -246,7 +250,7 @@ module Mongo
|
|
246
250
|
#
|
247
251
|
# @since 2.1.0
|
248
252
|
def min_value(value = nil)
|
249
|
-
configure_modifier(
|
253
|
+
configure_modifier(:min_value, value)
|
250
254
|
end
|
251
255
|
|
252
256
|
# The server normally times out idle cursors after an inactivity period
|
@@ -259,7 +263,7 @@ module Mongo
|
|
259
263
|
#
|
260
264
|
# @since 2.0.0
|
261
265
|
def no_cursor_timeout
|
262
|
-
configure_flag(
|
266
|
+
configure_flag(:no_cursor_timeout)
|
263
267
|
end
|
264
268
|
|
265
269
|
# The fields to include or exclude from each doc in the result set.
|
@@ -278,7 +282,7 @@ module Mongo
|
|
278
282
|
# @since 2.0.0
|
279
283
|
def projection(document = nil)
|
280
284
|
validate_doc!(document) if document
|
281
|
-
configure(
|
285
|
+
configure(:projection, document)
|
282
286
|
end
|
283
287
|
|
284
288
|
# The read preference to use for the query.
|
@@ -294,7 +298,8 @@ module Mongo
|
|
294
298
|
# @since 2.0.0
|
295
299
|
def read(value = nil)
|
296
300
|
return default_read if value.nil?
|
297
|
-
|
301
|
+
selector = value.is_a?(Hash) ? ServerSelector.get(client.options.merge(value)) : value
|
302
|
+
configure(:read, selector)
|
298
303
|
end
|
299
304
|
|
300
305
|
# Set whether to return only the indexed field or fields.
|
@@ -308,7 +313,7 @@ module Mongo
|
|
308
313
|
#
|
309
314
|
# @since 2.1.0
|
310
315
|
def return_key(value = nil)
|
311
|
-
configure_modifier(
|
316
|
+
configure_modifier(:return_key, value)
|
312
317
|
end
|
313
318
|
|
314
319
|
# Set whether the disk location should be shown for each document.
|
@@ -323,7 +328,7 @@ module Mongo
|
|
323
328
|
#
|
324
329
|
# @since 2.0.0
|
325
330
|
def show_disk_loc(value = nil)
|
326
|
-
configure_modifier(
|
331
|
+
configure_modifier(:show_disk_loc, value)
|
327
332
|
end
|
328
333
|
|
329
334
|
# The number of docs to skip before returning results.
|
@@ -338,7 +343,7 @@ module Mongo
|
|
338
343
|
#
|
339
344
|
# @since 2.0.0
|
340
345
|
def skip(number = nil)
|
341
|
-
configure(
|
346
|
+
configure(:skip, number)
|
342
347
|
end
|
343
348
|
|
344
349
|
# Set the snapshot value for the view.
|
@@ -353,7 +358,7 @@ module Mongo
|
|
353
358
|
#
|
354
359
|
# @since 2.0.0
|
355
360
|
def snapshot(value = nil)
|
356
|
-
configure_modifier(
|
361
|
+
configure_modifier(:snapshot, value)
|
357
362
|
end
|
358
363
|
|
359
364
|
# The key and direction pairs by which the result set will be sorted.
|
@@ -368,7 +373,7 @@ module Mongo
|
|
368
373
|
#
|
369
374
|
# @since 2.0.0
|
370
375
|
def sort(spec = nil)
|
371
|
-
configure_modifier(
|
376
|
+
configure_modifier(:sort, spec)
|
372
377
|
end
|
373
378
|
|
374
379
|
# “meta” operators that let you modify the output or behavior of a query.
|
@@ -383,7 +388,7 @@ module Mongo
|
|
383
388
|
# @since 2.1.0
|
384
389
|
def modifiers(doc = nil)
|
385
390
|
return @modifiers if doc.nil?
|
386
|
-
new(options.merge(
|
391
|
+
new(options.merge(:modifiers => doc))
|
387
392
|
end
|
388
393
|
|
389
394
|
# A cumulative time limit in milliseconds for processing operations on a cursor.
|
@@ -397,7 +402,7 @@ module Mongo
|
|
397
402
|
#
|
398
403
|
# @since 2.1.0
|
399
404
|
def max_time_ms(max = nil)
|
400
|
-
configure_modifier(
|
405
|
+
configure_modifier(:max_time_ms, max)
|
401
406
|
end
|
402
407
|
|
403
408
|
private
|
@@ -35,7 +35,9 @@ module Mongo
|
|
35
35
|
cmd[:fields] = projection if projection
|
36
36
|
cmd[:sort] = sort if sort
|
37
37
|
cmd[:maxTimeMS] = max_time_ms if max_time_ms
|
38
|
-
|
38
|
+
write_with_retry do
|
39
|
+
database.command(cmd).first['value']
|
40
|
+
end
|
39
41
|
end
|
40
42
|
|
41
43
|
# Finds a single document and replaces it.
|
@@ -81,8 +83,10 @@ module Mongo
|
|
81
83
|
cmd[:new] = !!(opts[:return_document] && opts[:return_document] == :after)
|
82
84
|
cmd[:upsert] = opts[:upsert] if opts[:upsert]
|
83
85
|
cmd[:maxTimeMS] = max_time_ms if max_time_ms
|
84
|
-
|
85
|
-
|
86
|
+
write_with_retry do
|
87
|
+
value = database.command(cmd).first['value']
|
88
|
+
value unless value.nil? || value.empty?
|
89
|
+
end
|
86
90
|
end
|
87
91
|
|
88
92
|
# Remove documents from the collection.
|
@@ -166,24 +170,28 @@ module Mongo
|
|
166
170
|
private
|
167
171
|
|
168
172
|
def remove(value)
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
173
|
+
write_with_retry do
|
174
|
+
Operation::Write::Delete.new(
|
175
|
+
:delete => { Operation::Q => selector, Operation::LIMIT => value },
|
176
|
+
:db_name => collection.database.name,
|
177
|
+
:coll_name => collection.name,
|
178
|
+
:write_concern => collection.write_concern
|
179
|
+
).execute(next_primary.context)
|
180
|
+
end
|
175
181
|
end
|
176
182
|
|
177
183
|
def update(spec, multi, opts)
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
184
|
+
write_with_retry do
|
185
|
+
Operation::Write::Update.new(
|
186
|
+
:update => { Operation::Q => selector,
|
187
|
+
Operation::U => spec,
|
188
|
+
Operation::MULTI => multi,
|
189
|
+
Operation::UPSERT => !!opts[:upsert] },
|
190
|
+
:db_name => collection.database.name,
|
191
|
+
:coll_name => collection.name,
|
192
|
+
:write_concern => collection.write_concern
|
193
|
+
).execute(next_primary.context)
|
194
|
+
end
|
187
195
|
end
|
188
196
|
end
|
189
197
|
end
|
data/lib/mongo/database.rb
CHANGED
@@ -36,7 +36,17 @@ module Mongo
|
|
36
36
|
# The default database options.
|
37
37
|
#
|
38
38
|
# @since 2.0.0
|
39
|
-
DEFAULT_OPTIONS =
|
39
|
+
DEFAULT_OPTIONS = Options::Redacted.new(:database => ADMIN).freeze
|
40
|
+
|
41
|
+
# Database name field constant.
|
42
|
+
#
|
43
|
+
# @since 2.1.0
|
44
|
+
NAME = 'name'.freeze
|
45
|
+
|
46
|
+
# Databases constant.
|
47
|
+
#
|
48
|
+
# @since 2.1.0
|
49
|
+
DATABASES = 'databases'.freeze
|
40
50
|
|
41
51
|
# The name of the collection that holds all the collection names.
|
42
52
|
#
|
@@ -138,7 +148,7 @@ module Mongo
|
|
138
148
|
#
|
139
149
|
# @return [ Hash ] The result of the command execution.
|
140
150
|
def command(operation, opts = {})
|
141
|
-
preference = opts[:read] ? ServerSelector.get(opts[:read]
|
151
|
+
preference = opts[:read] ? ServerSelector.get(client.options.merge(opts[:read])) : read_preference
|
142
152
|
server = preference.select_server(cluster)
|
143
153
|
Operation::Command.new({
|
144
154
|
:selector => operation,
|
data/lib/mongo/database/view.rb
CHANGED
@@ -51,9 +51,10 @@ module Mongo
|
|
51
51
|
def collection_names(options = {})
|
52
52
|
@batch_size = options[:batch_size]
|
53
53
|
server = next_primary
|
54
|
+
@limit = -1 if server.features.list_collections_enabled?
|
54
55
|
collections_info(server).collect do |info|
|
55
|
-
server.
|
56
|
-
info[
|
56
|
+
server.features.list_collections_enabled? ?
|
57
|
+
info[Database::NAME] : info[Database::NAME].sub("#{@database.name}.", '')
|
57
58
|
end
|
58
59
|
end
|
59
60
|
|
@@ -80,7 +81,7 @@ module Mongo
|
|
80
81
|
def initialize(database)
|
81
82
|
@database = database
|
82
83
|
@batch_size = nil
|
83
|
-
@limit =
|
84
|
+
@limit = nil
|
84
85
|
@collection = @database[Database::COMMAND]
|
85
86
|
end
|
86
87
|
|
data/lib/mongo/dbref.rb
CHANGED
@@ -53,8 +53,8 @@ module Mongo
|
|
53
53
|
#
|
54
54
|
# @since 2.1.0
|
55
55
|
def as_json(*args)
|
56
|
-
document = {
|
57
|
-
document.merge!(
|
56
|
+
document = { COLLECTION => collection, ID => id }
|
57
|
+
document.merge!(DATABASE => database) if database
|
58
58
|
document
|
59
59
|
end
|
60
60
|
|
@@ -101,8 +101,8 @@ module Mongo
|
|
101
101
|
# @since 2.0.0
|
102
102
|
def from_bson(bson)
|
103
103
|
decoded = super
|
104
|
-
if ref = decoded[
|
105
|
-
decoded = DBRef.new(ref, decoded[
|
104
|
+
if ref = decoded[COLLECTION]
|
105
|
+
decoded = DBRef.new(ref, decoded[ID], decoded[DATABASE])
|
106
106
|
end
|
107
107
|
decoded
|
108
108
|
end
|
data/lib/mongo/grid/fs_bucket.rb
CHANGED
@@ -19,6 +19,7 @@ module Mongo
|
|
19
19
|
#
|
20
20
|
# @since 2.0.0
|
21
21
|
class FSBucket
|
22
|
+
extend Forwardable
|
22
23
|
|
23
24
|
# The default root prefix.
|
24
25
|
#
|
@@ -55,6 +56,12 @@ module Mongo
|
|
55
56
|
# @since 2.1.0
|
56
57
|
attr_reader :options
|
57
58
|
|
59
|
+
# Get client from the database.
|
60
|
+
#
|
61
|
+
# @since 2.1.0
|
62
|
+
def_delegators :database,
|
63
|
+
:client
|
64
|
+
|
58
65
|
# Find files collection documents matching a given selector.
|
59
66
|
#
|
60
67
|
# @example Find files collection documents by a filename.
|
@@ -395,7 +402,7 @@ module Mongo
|
|
395
402
|
# @since 2.1.0
|
396
403
|
def read_preference
|
397
404
|
@read_preference ||= @options[:read] ?
|
398
|
-
ServerSelector.get((@options[:read] || {}).merge(
|
405
|
+
ServerSelector.get(Options::Redacted.new((@options[:read] || {}).merge(client.options))) :
|
399
406
|
database.read_preference
|
400
407
|
end
|
401
408
|
|
@@ -134,7 +134,7 @@ module Mongo
|
|
134
134
|
# @since 2.1.0
|
135
135
|
def read_preference
|
136
136
|
@read_preference ||= @options[:read] ?
|
137
|
-
ServerSelector.get((@options[:read] || {}).merge(fs.options)) :
|
137
|
+
ServerSelector.get(Options::Redacted.new((@options[:read] || {}).merge(fs.options))) :
|
138
138
|
fs.read_preference
|
139
139
|
end
|
140
140
|
|