mongo 1.8.6 → 1.9.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 +0 -0
- data.tar.gz.sig +0 -0
- data/Rakefile +13 -1
- data/VERSION +1 -1
- data/bin/mongo_console +15 -0
- data/lib/mongo.rb +14 -0
- data/lib/mongo/collection.rb +80 -42
- data/lib/mongo/cursor.rb +15 -1
- data/lib/mongo/db.rb +56 -19
- data/lib/mongo/exceptions.rb +14 -0
- data/lib/mongo/gridfs/grid.rb +16 -3
- data/lib/mongo/gridfs/grid_ext.rb +14 -0
- data/lib/mongo/gridfs/grid_file_system.rb +16 -3
- data/lib/mongo/gridfs/grid_io.rb +17 -3
- data/lib/mongo/legacy.rb +14 -0
- data/lib/mongo/mongo_client.rb +93 -40
- data/lib/mongo/mongo_replica_set_client.rb +21 -0
- data/lib/mongo/mongo_sharded_client.rb +15 -1
- data/lib/mongo/networking.rb +14 -0
- data/lib/mongo/util/conversions.rb +16 -2
- data/lib/mongo/util/core_ext.rb +14 -31
- data/lib/mongo/util/logging.rb +23 -7
- data/lib/mongo/util/node.rb +17 -2
- data/lib/mongo/util/pool.rb +17 -1
- data/lib/mongo/util/pool_manager.rb +15 -2
- data/lib/mongo/util/read_preference.rb +14 -0
- data/lib/mongo/util/server_version.rb +15 -0
- data/lib/mongo/util/sharding_pool_manager.rb +13 -0
- data/lib/mongo/util/socket_util.rb +14 -0
- data/lib/mongo/util/ssl_socket.rb +48 -7
- data/lib/mongo/util/support.rb +14 -0
- data/lib/mongo/util/tcp_socket.rb +18 -4
- data/lib/mongo/util/thread_local_variable_manager.rb +14 -0
- data/lib/mongo/util/unix_socket.rb +20 -6
- data/lib/mongo/util/uri_parser.rb +16 -8
- data/lib/mongo/util/write_concern.rb +16 -2
- data/test/functional/authentication_test.rb +26 -1
- data/test/functional/collection_test.rb +140 -41
- data/test/functional/connection_test.rb +19 -6
- data/test/functional/conversions_test.rb +14 -0
- data/test/functional/cursor_fail_test.rb +14 -0
- data/test/functional/cursor_message_test.rb +14 -0
- data/test/functional/cursor_test.rb +15 -1
- data/test/functional/db_api_test.rb +15 -1
- data/test/functional/db_connection_test.rb +14 -0
- data/test/functional/db_test.rb +14 -0
- data/test/functional/grid_file_system_test.rb +16 -4
- data/test/functional/grid_io_test.rb +14 -0
- data/test/functional/grid_test.rb +14 -0
- data/test/functional/pool_test.rb +22 -6
- data/test/functional/safe_test.rb +14 -0
- data/test/functional/ssl_test.rb +109 -0
- data/test/functional/support_test.rb +14 -0
- data/test/functional/threading_test.rb +22 -8
- data/test/functional/timeout_test.rb +20 -6
- data/test/functional/uri_test.rb +14 -14
- data/test/functional/write_concern_test.rb +14 -0
- data/test/replica_set/authentication_test.rb +28 -2
- data/test/replica_set/basic_test.rb +14 -0
- data/test/replica_set/client_test.rb +14 -0
- data/test/replica_set/complex_connect_test.rb +14 -0
- data/test/replica_set/connection_test.rb +14 -0
- data/test/replica_set/count_test.rb +14 -0
- data/test/replica_set/cursor_test.rb +14 -0
- data/test/replica_set/insert_test.rb +14 -0
- data/test/replica_set/max_values_test.rb +14 -0
- data/test/replica_set/pinning_test.rb +14 -0
- data/test/replica_set/query_test.rb +14 -0
- data/test/replica_set/read_preference_test.rb +14 -0
- data/test/replica_set/refresh_test.rb +14 -0
- data/test/replica_set/replication_ack_test.rb +14 -0
- data/test/replica_set/ssl_test.rb +114 -0
- data/test/sharded_cluster/basic_test.rb +14 -0
- data/test/shared/authentication.rb +55 -0
- data/test/test_helper.rb +15 -1
- data/test/threading/basic_test.rb +14 -0
- data/test/tools/mongo_config.rb +16 -1
- data/test/tools/mongo_config_test.rb +15 -1
- data/test/unit/client_test.rb +14 -0
- data/test/unit/collection_test.rb +14 -0
- data/test/unit/connection_test.rb +14 -0
- data/test/unit/cursor_test.rb +14 -0
- data/test/unit/db_test.rb +15 -1
- data/test/unit/grid_test.rb +14 -0
- data/test/unit/mongo_sharded_client_test.rb +14 -0
- data/test/unit/node_test.rb +15 -0
- data/test/unit/pool_manager_test.rb +15 -0
- data/test/unit/pool_test.rb +14 -0
- data/test/unit/read_pref_test.rb +14 -0
- data/test/unit/read_test.rb +14 -0
- data/test/unit/safe_test.rb +14 -0
- data/test/unit/sharding_pool_manager_test.rb +15 -0
- data/test/unit/util_test.rb +14 -0
- data/test/unit/write_concern_test.rb +15 -1
- metadata +8 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f7fb956c60cb3b6d5b8388b45c3b03596d42215
|
4
|
+
data.tar.gz: 42c3a9fdf43eaf64304bd119a5f0aa07957b7ada
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 08c9bcfd41885ddfebffbf0bf3bed97298e5a17751ab67aeb1e15a1c2639d5bc7830efe319c9d4873793b86cc7aeb62523f8e2e8f6f52c7158dcb908581ab9a9
|
7
|
+
data.tar.gz: 4dd3325d16fd0729c9943b79eefb7f88a72818ac67a6a9822bc802fdba8b804fec651ea9ea54d614d32cb390a3cdf543e30492f0a29b43ab8b307c9ab02bece9
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/Rakefile
CHANGED
@@ -1,4 +1,16 @@
|
|
1
|
-
#
|
1
|
+
# Copyright (C) 2013 10gen 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.
|
2
14
|
|
3
15
|
require 'rubygems'
|
4
16
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.9.0
|
data/bin/mongo_console
CHANGED
@@ -1,4 +1,19 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Copyright (C) 2013 10gen Inc.
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
2
17
|
org_argv = ARGV.dup
|
3
18
|
ARGV.clear
|
4
19
|
|
data/lib/mongo.rb
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen 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
|
+
|
1
15
|
module Mongo
|
2
16
|
ASCENDING = 1
|
3
17
|
DESCENDING = -1
|
data/lib/mongo/collection.rb
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen 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
|
+
|
1
15
|
module Mongo
|
2
16
|
|
3
17
|
# A named collection of documents in a database.
|
@@ -1066,43 +1080,32 @@ module Mongo
|
|
1066
1080
|
nil
|
1067
1081
|
end
|
1068
1082
|
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
1073
|
-
message = BSON::ByteBuffer.new("", @connection.max_message_size)
|
1074
|
-
if flags[:continue_on_error]
|
1075
|
-
message.put_int(1)
|
1076
|
-
else
|
1077
|
-
message.put_int(0)
|
1083
|
+
def generate_index_name(spec)
|
1084
|
+
indexes = []
|
1085
|
+
spec.each_pair do |field, type|
|
1086
|
+
indexes.push("#{field}_#{type}")
|
1078
1087
|
end
|
1088
|
+
indexes.join("_")
|
1089
|
+
end
|
1079
1090
|
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1091
|
+
def insert_buffer(collection_name, continue_on_error)
|
1092
|
+
message = BSON::ByteBuffer.new("", @connection.max_message_size)
|
1093
|
+
message.put_int(continue_on_error ? 1 : 0)
|
1083
1094
|
BSON::BSON_RUBY.serialize_cstr(message, "#{@db.name}.#{collection_name}")
|
1084
|
-
|
1085
|
-
|
1086
|
-
documents.select do |doc|
|
1087
|
-
begin
|
1088
|
-
message.put_binary(BSON::BSON_CODER.serialize(doc, check_keys, true, @connection.max_bson_size).to_s)
|
1089
|
-
true
|
1090
|
-
rescue StandardError # StandardError will be replaced with BSONError
|
1091
|
-
doc.delete(:_id)
|
1092
|
-
error_docs << doc
|
1093
|
-
false
|
1094
|
-
end
|
1095
|
-
end
|
1096
|
-
else
|
1097
|
-
documents.each do |doc|
|
1098
|
-
message.put_binary(BSON::BSON_CODER.serialize(doc, check_keys, true, @connection.max_bson_size).to_s)
|
1099
|
-
end
|
1100
|
-
end
|
1095
|
+
message
|
1096
|
+
end
|
1101
1097
|
|
1102
|
-
|
1103
|
-
|
1098
|
+
def insert_batch(message, documents, write_concern, continue_on_error, errors, collection_name=@name)
|
1099
|
+
begin
|
1100
|
+
send_insert_message(message, documents, collection_name, write_concern)
|
1101
|
+
rescue ConnectionFailure, OperationFailure, OperationTimeout, SystemStackError,
|
1102
|
+
NoMemoryError, SystemCallError => ex
|
1103
|
+
raise ex unless continue_on_error
|
1104
|
+
errors << ex
|
1104
1105
|
end
|
1106
|
+
end
|
1105
1107
|
|
1108
|
+
def send_insert_message(message, documents, collection_name, write_concern)
|
1106
1109
|
instrument(:insert, :database => @db.name, :collection => collection_name, :documents => documents) do
|
1107
1110
|
if Mongo::WriteConcern.gle?(write_concern)
|
1108
1111
|
@connection.send_message_with_gle(Mongo::Constants::OP_INSERT, message, @db.name, nil, write_concern)
|
@@ -1110,21 +1113,56 @@ module Mongo
|
|
1110
1113
|
@connection.send_message(Mongo::Constants::OP_INSERT, message)
|
1111
1114
|
end
|
1112
1115
|
end
|
1116
|
+
end
|
1113
1117
|
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1118
|
+
# Sends a Mongo::Constants::OP_INSERT message to the database.
|
1119
|
+
# Takes an array of +documents+, an optional +collection_name+, and a
|
1120
|
+
# +check_keys+ setting.
|
1121
|
+
def insert_documents(documents, collection_name=@name, check_keys=true, write_concern={}, flags={})
|
1122
|
+
continue_on_error = !!flags[:continue_on_error]
|
1123
|
+
collect_on_error = !!flags[:collect_on_error]
|
1124
|
+
error_docs = [] # docs with errors on serialization
|
1125
|
+
errors = [] # for all errors on insertion
|
1126
|
+
batch_start = 0
|
1127
|
+
|
1128
|
+
message = insert_buffer(collection_name, continue_on_error)
|
1129
|
+
|
1130
|
+
documents.each_with_index do |doc, index|
|
1131
|
+
begin
|
1132
|
+
serialized_doc = BSON::BSON_CODER.serialize(doc, check_keys, true, @connection.max_bson_size)
|
1133
|
+
rescue BSON::InvalidDocument, BSON::InvalidKeyName, BSON::InvalidStringEncoding => ex
|
1134
|
+
raise ex unless collect_on_error
|
1135
|
+
error_docs << doc
|
1136
|
+
next
|
1137
|
+
end
|
1138
|
+
|
1139
|
+
# Check if the current msg has room for this doc. If not, send current msg and create a new one.
|
1140
|
+
# GLE is a sep msg with its own header so shouldn't be included in padding with header size.
|
1141
|
+
total_message_size = Networking::STANDARD_HEADER_SIZE + message.size + serialized_doc.size
|
1142
|
+
if total_message_size > @connection.max_message_size
|
1143
|
+
docs_to_insert = documents[batch_start..index] - error_docs
|
1144
|
+
insert_batch(message, docs_to_insert, write_concern, continue_on_error, errors, collection_name)
|
1145
|
+
batch_start = index
|
1146
|
+
message = insert_buffer(collection_name, continue_on_error)
|
1147
|
+
redo
|
1148
|
+
else
|
1149
|
+
message.put_binary(serialized_doc.to_s)
|
1150
|
+
end
|
1119
1151
|
end
|
1120
|
-
end
|
1121
1152
|
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1153
|
+
docs_to_insert = documents[batch_start..-1] - error_docs
|
1154
|
+
inserted_docs = documents - error_docs
|
1155
|
+
inserted_ids = inserted_docs.collect {|o| o[:_id] || o['_id']}
|
1156
|
+
|
1157
|
+
# Avoid insertion if all docs failed serialization and collect_on_error
|
1158
|
+
if error_docs.empty? || !docs_to_insert.empty?
|
1159
|
+
insert_batch(message, docs_to_insert, write_concern, continue_on_error, errors, collection_name)
|
1160
|
+
# insert_batch collects errors if w > 0 and continue_on_error is true,
|
1161
|
+
# so raise the error here, as this is the last or only msg sent
|
1162
|
+
raise errors.first unless errors.empty?
|
1126
1163
|
end
|
1127
|
-
|
1164
|
+
|
1165
|
+
collect_on_error ? [inserted_ids, error_docs] : inserted_ids
|
1128
1166
|
end
|
1129
1167
|
end
|
1130
1168
|
|
data/lib/mongo/cursor.rb
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen 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
|
+
|
1
15
|
module Mongo
|
2
16
|
|
3
17
|
# A cursor over query results. Returned objects are hashes.
|
@@ -424,7 +438,7 @@ module Mongo
|
|
424
438
|
{fields => 1}
|
425
439
|
when Array
|
426
440
|
return nil if fields.length.zero?
|
427
|
-
fields.
|
441
|
+
fields.inject({}) { |hash, field| hash[field] = 1; hash }
|
428
442
|
when Hash
|
429
443
|
return fields
|
430
444
|
end
|
data/lib/mongo/db.rb
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen 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
|
+
|
1
15
|
require 'socket'
|
2
16
|
require 'thread'
|
3
17
|
|
@@ -109,27 +123,35 @@ module Mongo
|
|
109
123
|
# @param [String] password
|
110
124
|
# @param [Boolean] save_auth
|
111
125
|
# Save this authentication to the client object using MongoClient#add_auth. This
|
112
|
-
# will ensure that the authentication will be applied
|
113
|
-
#
|
126
|
+
# will ensure that the authentication will be applied to all sockets and upon
|
127
|
+
# database reconnect.
|
128
|
+
# @param source [String] Database with user credentials. This should be used to
|
129
|
+
# authenticate against a database when the credentials exist elsewhere.
|
130
|
+
#
|
131
|
+
# @note save_auth must be true when using connection pooling or providing a source
|
132
|
+
# for credentials.
|
114
133
|
#
|
115
134
|
# @return [Boolean]
|
116
135
|
#
|
117
136
|
# @raise [AuthenticationError]
|
118
137
|
#
|
119
138
|
# @core authenticate authenticate-instance_method
|
120
|
-
def authenticate(username, password, save_auth=true)
|
121
|
-
if @connection.pool_size > 1 && !save_auth
|
122
|
-
raise MongoArgumentError, "If using connection pooling
|
139
|
+
def authenticate(username, password=nil, save_auth=true, source=nil)
|
140
|
+
if (@connection.pool_size > 1 || source) && !save_auth
|
141
|
+
raise MongoArgumentError, "If using connection pooling or delegated auth, " +
|
142
|
+
":save_auth must be set to true."
|
123
143
|
end
|
124
144
|
|
125
145
|
begin
|
126
146
|
socket = @connection.checkout_reader(:mode => :primary_preferred)
|
127
|
-
issue_authentication(username, password, save_auth,
|
147
|
+
issue_authentication(username, password, save_auth,
|
148
|
+
:socket => socket, :source => source)
|
128
149
|
ensure
|
129
150
|
socket.checkin if socket
|
130
151
|
end
|
131
152
|
|
132
153
|
@connection.authenticate_pools
|
154
|
+
true
|
133
155
|
end
|
134
156
|
|
135
157
|
def issue_authentication(username, password, save_auth=true, opts={})
|
@@ -137,15 +159,19 @@ module Mongo
|
|
137
159
|
raise MongoDBError, "Error retrieving nonce: #{doc}" unless ok?(doc)
|
138
160
|
nonce = doc['nonce']
|
139
161
|
|
162
|
+
# issue authentication against this database if source option not provided
|
163
|
+
source = opts[:source]
|
164
|
+
db = source ? @connection[source] : self
|
165
|
+
|
140
166
|
auth = BSON::OrderedHash.new
|
141
167
|
auth['authenticate'] = 1
|
142
168
|
auth['user'] = username
|
143
169
|
auth['nonce'] = nonce
|
144
170
|
auth['key'] = Mongo::Support.auth_key(username, password, nonce)
|
145
|
-
if ok?(doc =
|
146
|
-
@connection.add_auth(
|
171
|
+
if ok?(doc = db.command(auth, :check_response => false, :socket => opts[:socket]))
|
172
|
+
@connection.add_auth(name, username, password, source) if save_auth
|
147
173
|
else
|
148
|
-
message = "Failed to authenticate user '#{username}' on db '#{
|
174
|
+
message = "Failed to authenticate user '#{username}' on db '#{db.name}'"
|
149
175
|
raise Mongo::AuthenticationError.new(message, doc['code'], doc)
|
150
176
|
end
|
151
177
|
true
|
@@ -179,19 +205,30 @@ module Mongo
|
|
179
205
|
end
|
180
206
|
|
181
207
|
# Adds a user to this database for use with authentication. If the user already
|
182
|
-
# exists in the system, the password
|
208
|
+
# exists in the system, the password and any additional fields provided in opts
|
209
|
+
# will be updated.
|
183
210
|
#
|
184
211
|
# @param [String] username
|
185
212
|
# @param [String] password
|
186
213
|
# @param [Boolean] read_only
|
187
214
|
# Create a read-only user.
|
188
215
|
#
|
216
|
+
# @param [Hash] opts
|
217
|
+
# Optional fields for the user document (e.g. +userSource+, or +roles+)
|
218
|
+
#
|
219
|
+
# See {http://docs.mongodb.org/manual/reference/privilege-documents}
|
220
|
+
# for more information.
|
221
|
+
#
|
222
|
+
# @note The use of the opts argument to provide or update additional fields
|
223
|
+
# on the user document requires MongoDB >= 2.4.0
|
224
|
+
#
|
189
225
|
# @return [Hash] an object representing the user.
|
190
|
-
def add_user(username, password, read_only =
|
226
|
+
def add_user(username, password=nil, read_only=false, opts={})
|
191
227
|
users = self[SYSTEM_USER_COLLECTION]
|
192
228
|
user = users.find_one({:user => username}) || {:user => username}
|
193
|
-
user['pwd'] = Mongo::Support.hash_password(username, password)
|
194
|
-
user['readOnly'] = true if read_only
|
229
|
+
user['pwd'] = Mongo::Support.hash_password(username, password) if password
|
230
|
+
user['readOnly'] = true if read_only
|
231
|
+
user.merge!(opts)
|
195
232
|
begin
|
196
233
|
users.save(user)
|
197
234
|
rescue OperationFailure => ex
|
@@ -223,14 +260,14 @@ module Mongo
|
|
223
260
|
#
|
224
261
|
# @return [Boolean]
|
225
262
|
def logout(opts={})
|
226
|
-
|
227
|
-
|
263
|
+
auth = @connection.auths.find { |a| a[:db_name] == name }
|
264
|
+
db = auth && auth[:source] ? @connection[auth[:source]] : self
|
265
|
+
auth ? @connection.logout_pools(db.name) : db.issue_logout(opts)
|
266
|
+
@connection.remove_auth(db.name)
|
228
267
|
end
|
229
268
|
|
230
269
|
def issue_logout(opts={})
|
231
|
-
|
232
|
-
@connection.remove_auth(@name)
|
233
|
-
else
|
270
|
+
unless ok?(doc = command({:logout => 1}, :socket => opts[:socket]))
|
234
271
|
raise MongoDBError, "Error logging out: #{doc.inspect}"
|
235
272
|
end
|
236
273
|
true
|
@@ -336,7 +373,7 @@ module Mongo
|
|
336
373
|
return false if strict? && !collection_names.include?(name.to_s)
|
337
374
|
begin
|
338
375
|
ok?(command(:drop => name))
|
339
|
-
rescue OperationFailure
|
376
|
+
rescue OperationFailure
|
340
377
|
false
|
341
378
|
end
|
342
379
|
end
|
data/lib/mongo/exceptions.rb
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen 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
|
+
|
1
15
|
module Mongo
|
2
16
|
# Generic Mongo Ruby Driver exception class.
|
3
17
|
class MongoRubyError < StandardError; end
|
data/lib/mongo/gridfs/grid.rb
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen 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
|
+
|
1
15
|
module Mongo
|
2
16
|
|
3
17
|
# Implementation of the MongoDB GridFS specification. A file store.
|
@@ -21,7 +35,6 @@ module Mongo
|
|
21
35
|
@fs_name = fs_name
|
22
36
|
|
23
37
|
# This will create indexes only if we're connected to a primary node.
|
24
|
-
connection = @db.connection
|
25
38
|
begin
|
26
39
|
@chunks.ensure_index([['files_id', Mongo::ASCENDING], ['n', Mongo::ASCENDING]], :unique => true)
|
27
40
|
rescue Mongo::ConnectionFailure
|
@@ -46,8 +59,8 @@ module Mongo
|
|
46
59
|
# @option opts [Integer] (262144) :chunk_size size of file chunks in bytes.
|
47
60
|
# @option opts [String, Integer, Symbol] :w (1) Set write concern
|
48
61
|
#
|
49
|
-
# Notes on write concern:
|
50
|
-
# When :w > 0, the chunks sent to the server are validated using an md5 hash.
|
62
|
+
# Notes on write concern:
|
63
|
+
# When :w > 0, the chunks sent to the server are validated using an md5 hash.
|
51
64
|
# If validation fails, an exception will be raised.
|
52
65
|
#
|
53
66
|
# @return [BSON::ObjectId] the file's id.
|