mongo 2.0.0 → 2.0.1
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/lib/mongo/operation/result.rb +1 -1
- data/lib/mongo/operation/write.rb +1 -0
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +8 -6
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +62 -0
- data/lib/mongo/operation/write/idable.rb +41 -0
- data/lib/mongo/operation/write/insert.rb +5 -3
- data/lib/mongo/operation/write/insert/result.rb +30 -0
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/collection_spec.rb +8 -0
- data/spec/mongo/operation/write/{bulk_delete_spec.rb → bulk/bulk_delete_spec.rb} +0 -0
- data/spec/mongo/operation/write/{bulk_insert_spec.rb → bulk/bulk_insert_spec.rb} +27 -0
- data/spec/mongo/operation/write/{bulk_update_spec.rb → bulk/bulk_update_spec.rb} +0 -0
- data/spec/mongo/operation/write/command/insert_spec.rb +1 -1
- data/spec/mongo/operation/write/insert_spec.rb +27 -0
- data/spec/support/crud/write.rb +3 -5
- metadata +9 -8
- 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: d95f4cbddad1184a95d53cb257befaceb5b9d1b0
|
4
|
+
data.tar.gz: 2639f1045f2be8059283b80bcd4e7a867b1ee35c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 806e70e8f37683ba17c3416a9eb4c6d662305c4b8138f62b9af82c234b3cd98c10d1cd3119040b2b5751208e2058cd57532b4dfd63acee6628da692e8af55bad
|
7
|
+
data.tar.gz: e5a1c81c7930634054d5ace16c452ef4ba0c313a1fc779c2cc3deca75910b7014cae202b73cdd659d50f47d2e66f549fbd1e6017651815fec257b09db6ff4bd6
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
@@ -12,6 +12,7 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
require 'mongo/operation/write/idable'
|
15
16
|
require 'mongo/operation/write/bulk'
|
16
17
|
require 'mongo/operation/write/delete'
|
17
18
|
require 'mongo/operation/write/insert'
|
@@ -47,6 +47,7 @@ module Mongo
|
|
47
47
|
# @since 2.0.0
|
48
48
|
class BulkInsert
|
49
49
|
include Specifiable
|
50
|
+
include Idable
|
50
51
|
|
51
52
|
# Execute the bulk insert operation.
|
52
53
|
#
|
@@ -69,21 +70,22 @@ module Mongo
|
|
69
70
|
private
|
70
71
|
|
71
72
|
def execute_write_command(context)
|
72
|
-
|
73
|
+
command_spec = spec.merge(:documents => ensure_ids(documents))
|
74
|
+
Result.new(Command::Insert.new(command_spec).execute(context), @ids)
|
73
75
|
end
|
74
76
|
|
75
77
|
def execute_message(context)
|
76
78
|
replies = []
|
77
79
|
messages.map do |m|
|
78
80
|
context.with_connection do |connection|
|
79
|
-
result = LegacyResult.new(connection.dispatch([ m, gle ].compact))
|
81
|
+
result = LegacyResult.new(connection.dispatch([ m, gle ].compact), @ids)
|
80
82
|
replies << result.reply
|
81
83
|
if stop_sending?(result)
|
82
|
-
return LegacyResult.new(replies)
|
84
|
+
return LegacyResult.new(replies, @ids)
|
83
85
|
end
|
84
86
|
end
|
85
87
|
end
|
86
|
-
LegacyResult.new(replies.compact.empty? ? nil : replies)
|
88
|
+
LegacyResult.new(replies.compact.empty? ? nil : replies, @ids)
|
87
89
|
end
|
88
90
|
|
89
91
|
def stop_sending?(result)
|
@@ -117,10 +119,10 @@ module Mongo
|
|
117
119
|
def messages
|
118
120
|
if ordered? || gle
|
119
121
|
documents.collect do |doc|
|
120
|
-
Protocol::Insert.new(db_name, coll_name, [ doc ], options)
|
122
|
+
Protocol::Insert.new(db_name, coll_name, ensure_ids([ doc ]), options)
|
121
123
|
end
|
122
124
|
else
|
123
|
-
[ Protocol::Insert.new(db_name, coll_name, documents, { :flags => [:continue_on_error] }) ]
|
125
|
+
[ Protocol::Insert.new(db_name, coll_name, ensure_ids(documents), { :flags => [:continue_on_error] }) ]
|
124
126
|
end
|
125
127
|
end
|
126
128
|
end
|
@@ -26,6 +26,25 @@ module Mongo
|
|
26
26
|
class Result < Operation::Result
|
27
27
|
include BulkMergable
|
28
28
|
|
29
|
+
# Get the ids of the inserted documents.
|
30
|
+
#
|
31
|
+
# @since 2.0.0
|
32
|
+
attr_reader :inserted_ids
|
33
|
+
|
34
|
+
# Initialize a new result.
|
35
|
+
#
|
36
|
+
# @example Instantiate the result.
|
37
|
+
# Result.new(replies, inserted_ids)
|
38
|
+
#
|
39
|
+
# @param [ Protocol::Reply ] replies The wire protocol replies.
|
40
|
+
# @params [ Array<Object> ] ids The ids of the inserted documents.
|
41
|
+
#
|
42
|
+
# @since 2.0.0
|
43
|
+
def initialize(replies, ids)
|
44
|
+
@replies = replies.is_a?(Protocol::Reply) ? [ replies ] : replies
|
45
|
+
@inserted_ids = ids
|
46
|
+
end
|
47
|
+
|
29
48
|
# Gets the number of documents inserted.
|
30
49
|
#
|
31
50
|
# @example Get the number of documents inserted.
|
@@ -37,6 +56,18 @@ module Mongo
|
|
37
56
|
def n_inserted
|
38
57
|
written_count
|
39
58
|
end
|
59
|
+
|
60
|
+
# Gets the id of the document inserted.
|
61
|
+
#
|
62
|
+
# @example Get id of the document inserted.
|
63
|
+
# result.inserted_id
|
64
|
+
#
|
65
|
+
# @return [ Object ] The id of the document inserted.
|
66
|
+
#
|
67
|
+
# @since 2.0.0
|
68
|
+
def inserted_id
|
69
|
+
inserted_ids.first
|
70
|
+
end
|
40
71
|
end
|
41
72
|
|
42
73
|
# Defines custom behaviour of results when inserting.
|
@@ -46,6 +77,25 @@ module Mongo
|
|
46
77
|
class LegacyResult < Operation::Result
|
47
78
|
include LegacyBulkMergable
|
48
79
|
|
80
|
+
# Get the ids of the inserted documents.
|
81
|
+
#
|
82
|
+
# @since 2.0.0
|
83
|
+
attr_reader :inserted_ids
|
84
|
+
|
85
|
+
# Initialize a new result.
|
86
|
+
#
|
87
|
+
# @example Instantiate the result.
|
88
|
+
# Result.new(replies, inserted_ids)
|
89
|
+
#
|
90
|
+
# @param [ Protocol::Reply ] replies The wire protocol replies.
|
91
|
+
# @params [ Array<Object> ] ids The ids of the inserted documents.
|
92
|
+
#
|
93
|
+
# @since 2.0.0
|
94
|
+
def initialize(replies, ids)
|
95
|
+
@replies = replies.is_a?(Protocol::Reply) ? [ replies ] : replies
|
96
|
+
@inserted_ids = ids
|
97
|
+
end
|
98
|
+
|
49
99
|
# Gets the number of documents inserted.
|
50
100
|
#
|
51
101
|
# @example Get the number of documents inserted.
|
@@ -61,6 +111,18 @@ module Mongo
|
|
61
111
|
n
|
62
112
|
end
|
63
113
|
end
|
114
|
+
|
115
|
+
# Gets the id of the document inserted.
|
116
|
+
#
|
117
|
+
# @example Get id of the document inserted.
|
118
|
+
# result.inserted_id
|
119
|
+
#
|
120
|
+
# @return [ Object ] The id of the document inserted.
|
121
|
+
#
|
122
|
+
# @since 2.0.0
|
123
|
+
def inserted_id
|
124
|
+
inserted_ids.first
|
125
|
+
end
|
64
126
|
end
|
65
127
|
end
|
66
128
|
end
|
@@ -0,0 +1,41 @@
|
|
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
|
+
module Idable
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def id(doc)
|
23
|
+
doc.respond_to?(:id) ? doc.id : (doc['_id'] || doc[:_id])
|
24
|
+
end
|
25
|
+
|
26
|
+
def has_id?(doc)
|
27
|
+
id(doc)
|
28
|
+
end
|
29
|
+
|
30
|
+
def ensure_ids(documents)
|
31
|
+
@ids ||= []
|
32
|
+
documents.collect do |doc|
|
33
|
+
doc_with_id = has_id?(doc) ? doc : doc.merge(_id: BSON::ObjectId.new)
|
34
|
+
@ids << id(doc_with_id)
|
35
|
+
doc_with_id
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -44,6 +44,7 @@ module Mongo
|
|
44
44
|
class Insert
|
45
45
|
include Executable
|
46
46
|
include Specifiable
|
47
|
+
include Idable
|
47
48
|
|
48
49
|
# Execute the insert operation.
|
49
50
|
#
|
@@ -66,12 +67,13 @@ module Mongo
|
|
66
67
|
private
|
67
68
|
|
68
69
|
def execute_write_command(context)
|
69
|
-
|
70
|
+
command_spec = spec.merge(:documents => ensure_ids(documents))
|
71
|
+
Result.new(Command::Insert.new(command_spec).execute(context), @ids).validate!
|
70
72
|
end
|
71
73
|
|
72
74
|
def execute_message(context)
|
73
75
|
context.with_connection do |connection|
|
74
|
-
Result.new(connection.dispatch([ message, gle ].compact)).validate!
|
76
|
+
Result.new(connection.dispatch([ message, gle ].compact), @ids).validate!
|
75
77
|
end
|
76
78
|
end
|
77
79
|
|
@@ -82,7 +84,7 @@ module Mongo
|
|
82
84
|
|
83
85
|
def message
|
84
86
|
opts = !!options[:continue_on_error] ? { :flags => [:continue_on_error] } : {}
|
85
|
-
Protocol::Insert.new(db_name, coll_name, documents, opts)
|
87
|
+
Protocol::Insert.new(db_name, coll_name, ensure_ids(documents), opts)
|
86
88
|
end
|
87
89
|
end
|
88
90
|
end
|
@@ -25,6 +25,36 @@ module Mongo
|
|
25
25
|
# @since 2.0.0
|
26
26
|
class Result < Operation::Result
|
27
27
|
|
28
|
+
# Get the ids of the inserted documents.
|
29
|
+
#
|
30
|
+
# @since 2.0.0
|
31
|
+
attr_reader :inserted_ids
|
32
|
+
|
33
|
+
# Initialize a new result.
|
34
|
+
#
|
35
|
+
# @example Instantiate the result.
|
36
|
+
# Result.new(replies, inserted_ids)
|
37
|
+
#
|
38
|
+
# @param [ Protocol::Reply ] replies The wire protocol replies.
|
39
|
+
# @params [ Array<Object> ] ids The ids of the inserted documents.
|
40
|
+
#
|
41
|
+
# @since 2.0.0
|
42
|
+
def initialize(replies, ids)
|
43
|
+
@replies = replies.is_a?(Protocol::Reply) ? [ replies ] : replies
|
44
|
+
@inserted_ids = ids
|
45
|
+
end
|
46
|
+
|
47
|
+
# Gets the id of the document inserted.
|
48
|
+
#
|
49
|
+
# @example Get id of the document inserted.
|
50
|
+
# result.inserted_id
|
51
|
+
#
|
52
|
+
# @return [ Object ] The id of the document inserted.
|
53
|
+
#
|
54
|
+
# @since 2.0.0
|
55
|
+
def inserted_id
|
56
|
+
inserted_ids.first
|
57
|
+
end
|
28
58
|
end
|
29
59
|
end
|
30
60
|
end
|
data/lib/mongo/version.rb
CHANGED
@@ -294,6 +294,10 @@ describe Mongo::Collection do
|
|
294
294
|
it 'inserts the documents into the collection', unless: write_command_enabled? do
|
295
295
|
expect(result.written_count).to eq(0)
|
296
296
|
end
|
297
|
+
|
298
|
+
it 'contains the ids in the result' do
|
299
|
+
expect(result.inserted_ids.size).to eq(2)
|
300
|
+
end
|
297
301
|
end
|
298
302
|
|
299
303
|
describe '#insert_one' do
|
@@ -313,6 +317,10 @@ describe Mongo::Collection do
|
|
313
317
|
it 'inserts the document into the collection', unless: write_command_enabled? do
|
314
318
|
expect(result.written_count).to eq(0)
|
315
319
|
end
|
320
|
+
|
321
|
+
it 'contains the id in the result' do
|
322
|
+
expect(result.inserted_id).to_not be_nil
|
323
|
+
end
|
316
324
|
end
|
317
325
|
|
318
326
|
describe '#inspect' do
|
File without changes
|
@@ -19,6 +19,10 @@ describe Mongo::Operation::Write::BulkInsert do
|
|
19
19
|
described_class.new(spec)
|
20
20
|
end
|
21
21
|
|
22
|
+
after do
|
23
|
+
authorized_collection.find.delete_many
|
24
|
+
end
|
25
|
+
|
22
26
|
describe '#initialize' do
|
23
27
|
|
24
28
|
context 'spec' do
|
@@ -81,6 +85,29 @@ describe Mongo::Operation::Write::BulkInsert do
|
|
81
85
|
end
|
82
86
|
end
|
83
87
|
|
88
|
+
describe 'document ids' do
|
89
|
+
|
90
|
+
context 'when documents do not contain an id' do
|
91
|
+
|
92
|
+
let(:documents) do
|
93
|
+
[{ 'field' => 'test' },
|
94
|
+
{ 'field' => 'test' }]
|
95
|
+
end
|
96
|
+
|
97
|
+
let(:inserted_ids) do
|
98
|
+
op.execute(authorized_primary.context).inserted_ids
|
99
|
+
end
|
100
|
+
|
101
|
+
let(:collection_ids) do
|
102
|
+
authorized_collection.find(field: 'test').collect { |d| d['_id'] }
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'adds an id to the documents' do
|
106
|
+
expect(inserted_ids).to eq(collection_ids)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
84
111
|
describe '#execute' do
|
85
112
|
|
86
113
|
before do
|
File without changes
|
@@ -15,6 +15,10 @@ describe Mongo::Operation::Write::Insert do
|
|
15
15
|
}
|
16
16
|
end
|
17
17
|
|
18
|
+
after do
|
19
|
+
authorized_collection.find.delete_many
|
20
|
+
end
|
21
|
+
|
18
22
|
let(:insert) do
|
19
23
|
described_class.new(spec)
|
20
24
|
end
|
@@ -80,6 +84,29 @@ describe Mongo::Operation::Write::Insert do
|
|
80
84
|
end
|
81
85
|
end
|
82
86
|
|
87
|
+
describe 'document ids' do
|
88
|
+
|
89
|
+
context 'when documents do not contain an id' do
|
90
|
+
|
91
|
+
let(:documents) do
|
92
|
+
[{ 'field' => 'test' },
|
93
|
+
{ 'field' => 'test' }]
|
94
|
+
end
|
95
|
+
|
96
|
+
let(:inserted_ids) do
|
97
|
+
insert.execute(authorized_primary.context).inserted_ids
|
98
|
+
end
|
99
|
+
|
100
|
+
let(:collection_ids) do
|
101
|
+
authorized_collection.find(field: 'test').collect { |d| d['_id'] }
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'adds an id to the documents' do
|
105
|
+
expect(inserted_ids).to eq(collection_ids)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
83
110
|
describe '#execute' do
|
84
111
|
|
85
112
|
before do
|
data/spec/support/crud/write.rb
CHANGED
@@ -121,15 +121,13 @@ module Mongo
|
|
121
121
|
end
|
122
122
|
|
123
123
|
def insert_many(collection)
|
124
|
-
collection.insert_many(documents)
|
125
|
-
|
126
|
-
{ 'insertedIds' => documents.collect { |d| d['_id'] } }
|
124
|
+
result = collection.insert_many(documents)
|
125
|
+
{ 'insertedIds' => result.inserted_ids }
|
127
126
|
end
|
128
127
|
|
129
128
|
def insert_one(collection)
|
130
129
|
result = collection.insert_one(document)
|
131
|
-
|
132
|
-
{ 'insertedId' => document['_id'] }
|
130
|
+
{ 'insertedId' => result.inserted_id }
|
133
131
|
end
|
134
132
|
|
135
133
|
def update_return_doc(result)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Brock
|
@@ -32,7 +32,7 @@ cert_chain:
|
|
32
32
|
o2UXDbWtz5PqoFd8EgNJAn3+BG1pwC9S9pVFG3WPucfAx/bE8iq/vvchHei5Y/Vo
|
33
33
|
aAz5f/hY4zFeYWvGDBHYEXE1rTN2hhMSyJscPcFbmz0=
|
34
34
|
-----END CERTIFICATE-----
|
35
|
-
date: 2015-03-
|
35
|
+
date: 2015-03-26 00:00:00.000000000 Z
|
36
36
|
dependencies:
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: bson
|
@@ -186,6 +186,7 @@ files:
|
|
186
186
|
- lib/mongo/operation/write/delete.rb
|
187
187
|
- lib/mongo/operation/write/delete/result.rb
|
188
188
|
- lib/mongo/operation/write/drop_index.rb
|
189
|
+
- lib/mongo/operation/write/idable.rb
|
189
190
|
- lib/mongo/operation/write/insert.rb
|
190
191
|
- lib/mongo/operation/write/insert/result.rb
|
191
192
|
- lib/mongo/operation/write/remove_user.rb
|
@@ -293,9 +294,9 @@ files:
|
|
293
294
|
- spec/mongo/operation/read/query_spec.rb
|
294
295
|
- spec/mongo/operation/result_spec.rb
|
295
296
|
- spec/mongo/operation/specifiable_spec.rb
|
296
|
-
- spec/mongo/operation/write/bulk_delete_spec.rb
|
297
|
-
- spec/mongo/operation/write/bulk_insert_spec.rb
|
298
|
-
- spec/mongo/operation/write/bulk_update_spec.rb
|
297
|
+
- spec/mongo/operation/write/bulk/bulk_delete_spec.rb
|
298
|
+
- spec/mongo/operation/write/bulk/bulk_insert_spec.rb
|
299
|
+
- spec/mongo/operation/write/bulk/bulk_update_spec.rb
|
299
300
|
- spec/mongo/operation/write/command/delete_spec.rb
|
300
301
|
- spec/mongo/operation/write/command/insert_spec.rb
|
301
302
|
- spec/mongo/operation/write/command/update_spec.rb
|
@@ -514,9 +515,9 @@ test_files:
|
|
514
515
|
- spec/mongo/operation/read/query_spec.rb
|
515
516
|
- spec/mongo/operation/result_spec.rb
|
516
517
|
- spec/mongo/operation/specifiable_spec.rb
|
517
|
-
- spec/mongo/operation/write/bulk_delete_spec.rb
|
518
|
-
- spec/mongo/operation/write/bulk_insert_spec.rb
|
519
|
-
- spec/mongo/operation/write/bulk_update_spec.rb
|
518
|
+
- spec/mongo/operation/write/bulk/bulk_delete_spec.rb
|
519
|
+
- spec/mongo/operation/write/bulk/bulk_insert_spec.rb
|
520
|
+
- spec/mongo/operation/write/bulk/bulk_update_spec.rb
|
520
521
|
- spec/mongo/operation/write/command/delete_spec.rb
|
521
522
|
- spec/mongo/operation/write/command/insert_spec.rb
|
522
523
|
- spec/mongo/operation/write/command/update_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|