mongo 2.0.0 → 2.0.1
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.
- 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
|