mongo 2.0.0.beta → 2.0.0.rc

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.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +14 -1
  5. data/lib/mongo.rb +2 -1
  6. data/lib/mongo/auth.rb +2 -2
  7. data/lib/mongo/bulk_write.rb +52 -0
  8. data/lib/mongo/bulk_write/bulk_writable.rb +191 -0
  9. data/lib/mongo/bulk_write/deletable.rb +60 -0
  10. data/lib/mongo/bulk_write/insertable.rb +52 -0
  11. data/lib/mongo/bulk_write/ordered_bulk_write.rb +48 -0
  12. data/lib/mongo/bulk_write/replacable.rb +57 -0
  13. data/lib/mongo/bulk_write/unordered_bulk_write.rb +46 -0
  14. data/lib/mongo/bulk_write/updatable.rb +68 -0
  15. data/lib/mongo/client.rb +15 -2
  16. data/lib/mongo/cluster/topology/replica_set.rb +1 -1
  17. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  18. data/lib/mongo/cluster/topology/standalone.rb +1 -1
  19. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  20. data/lib/mongo/collection.rb +1 -1
  21. data/lib/mongo/collection/view/aggregation.rb +1 -1
  22. data/lib/mongo/collection/view/readable.rb +1 -1
  23. data/lib/mongo/collection/view/writable.rb +5 -5
  24. data/lib/mongo/cursor.rb +0 -2
  25. data/lib/mongo/error.rb +4 -3
  26. data/lib/mongo/error/{bulk_write_failure.rb → bulk_write_error.rb} +2 -2
  27. data/lib/mongo/error/invalid_bulk_operation.rb +2 -2
  28. data/lib/mongo/error/invalid_bulk_operation_type.rb +36 -0
  29. data/lib/mongo/error/{empty_batch.rb → multi_index_drop.rb} +5 -10
  30. data/lib/mongo/grid/file/metadata.rb +1 -8
  31. data/lib/mongo/grid/fs.rb +5 -5
  32. data/lib/mongo/index/view.rb +90 -34
  33. data/lib/mongo/operation.rb +0 -1
  34. data/lib/mongo/operation/aggregate.rb +2 -2
  35. data/lib/mongo/operation/aggregate/result.rb +4 -0
  36. data/lib/mongo/operation/bulk_delete/result.rb +2 -127
  37. data/lib/mongo/operation/bulk_insert/result.rb +2 -132
  38. data/lib/mongo/operation/bulk_update/result.rb +2 -142
  39. data/lib/mongo/operation/command.rb +1 -1
  40. data/lib/mongo/operation/executable.rb +3 -3
  41. data/lib/mongo/operation/list_collections/result.rb +0 -2
  42. data/lib/mongo/operation/map_reduce.rb +1 -1
  43. data/lib/mongo/operation/read/collections_info.rb +1 -1
  44. data/lib/mongo/operation/read/get_more.rb +1 -1
  45. data/lib/mongo/operation/read/indexes.rb +1 -1
  46. data/lib/mongo/operation/read/list_collections.rb +1 -1
  47. data/lib/mongo/operation/read/list_indexes.rb +1 -1
  48. data/lib/mongo/operation/read/query.rb +1 -1
  49. data/lib/mongo/operation/specifiable.rb +18 -1
  50. data/lib/mongo/operation/write.rb +2 -0
  51. data/lib/mongo/operation/write/bulk_delete.rb +5 -19
  52. data/lib/mongo/operation/write/bulk_insert.rb +9 -40
  53. data/lib/mongo/operation/write/bulk_mergable.rb +67 -0
  54. data/lib/mongo/operation/write/bulk_update.rb +5 -19
  55. data/lib/mongo/operation/write/command.rb +1 -1
  56. data/lib/mongo/operation/write/command/{ensure_index.rb → create_index.rb} +4 -9
  57. data/lib/mongo/operation/write/command/delete.rb +4 -4
  58. data/lib/mongo/operation/write/command/drop_index.rb +1 -1
  59. data/lib/mongo/operation/write/command/insert.rb +4 -4
  60. data/lib/mongo/operation/write/command/update.rb +4 -4
  61. data/lib/mongo/operation/write/create_index.rb +12 -7
  62. data/lib/mongo/operation/write/create_user.rb +1 -1
  63. data/lib/mongo/operation/write/delete.rb +1 -1
  64. data/lib/mongo/operation/write/drop_index.rb +1 -1
  65. data/lib/mongo/operation/write/insert.rb +1 -1
  66. data/lib/mongo/operation/write/legacy_bulk_mergable.rb +83 -0
  67. data/lib/mongo/operation/write/remove_user.rb +1 -1
  68. data/lib/mongo/operation/write/update.rb +1 -1
  69. data/lib/mongo/{bulk.rb → options.rb} +2 -2
  70. data/lib/mongo/options/mapper.rb +78 -0
  71. data/lib/mongo/server.rb +2 -2
  72. data/lib/mongo/server/connection_pool/queue.rb +1 -1
  73. data/lib/mongo/server/description.rb +1 -1
  74. data/lib/mongo/server/description/inspector.rb +1 -1
  75. data/lib/mongo/server_selector.rb +1 -1
  76. data/lib/mongo/socket/unix.rb +2 -4
  77. data/lib/mongo/version.rb +1 -1
  78. data/lib/mongo/write_concern/acknowledged.rb +15 -1
  79. data/lib/mongo/write_concern/normalizable.rb +0 -22
  80. data/lib/mongo/write_concern/unacknowledged.rb +12 -0
  81. data/spec/mongo/bulk/bulk_write_spec.rb +178 -91
  82. data/spec/mongo/collection/view/aggregation_spec.rb +14 -1
  83. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  84. data/spec/mongo/collection/view/map_reduce_spec.rb +2 -2
  85. data/spec/mongo/collection/view/readable_spec.rb +2 -2
  86. data/spec/mongo/collection/view/writable_spec.rb +7 -7
  87. data/spec/mongo/collection/view_spec.rb +14 -5
  88. data/spec/mongo/collection_spec.rb +5 -5
  89. data/spec/mongo/cursor_spec.rb +3 -3
  90. data/spec/mongo/database_spec.rb +4 -8
  91. data/spec/mongo/grid/fs_spec.rb +8 -8
  92. data/spec/mongo/index/view_spec.rb +139 -35
  93. data/spec/mongo/operation/aggregate_spec.rb +14 -22
  94. data/spec/mongo/operation/command_spec.rb +8 -16
  95. data/spec/mongo/operation/map_reduce_spec.rb +1 -1
  96. data/spec/mongo/operation/read/indexes_spec.rb +2 -2
  97. data/spec/mongo/operation/write/bulk_delete_spec.rb +1 -239
  98. data/spec/mongo/operation/write/bulk_insert_spec.rb +3 -234
  99. data/spec/mongo/operation/write/bulk_update_spec.rb +1 -289
  100. data/spec/mongo/operation/write/command/delete_spec.rb +0 -13
  101. data/spec/mongo/operation/write/command/insert_spec.rb +0 -14
  102. data/spec/mongo/operation/write/command/update_spec.rb +0 -14
  103. data/spec/mongo/operation/write/{ensure_index_spec.rb → create_index_spec.rb} +8 -26
  104. data/spec/mongo/operation/write/delete_spec.rb +1 -1
  105. data/spec/mongo/operation/write/drop_index_spec.rb +1 -1
  106. data/spec/mongo/operation/write/insert_spec.rb +3 -3
  107. data/spec/mongo/operation/write/update_spec.rb +1 -1
  108. data/spec/mongo/server_selection_spec.rb +2 -2
  109. data/spec/support/authorization.rb +4 -2
  110. data/spec/support/server_selection.rb +25 -8
  111. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +4 -10
  112. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +6 -12
  113. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +4 -6
  114. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +4 -10
  115. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +6 -12
  116. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +4 -10
  117. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +4 -10
  118. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +6 -12
  119. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +6 -12
  120. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +9 -17
  121. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +9 -17
  122. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +6 -10
  123. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +11 -21
  124. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +11 -18
  125. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +31 -0
  126. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +31 -0
  127. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +29 -0
  128. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +26 -0
  129. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +4 -10
  130. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +2 -6
  131. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +0 -2
  132. data/spec/support/shared/bulk_write.rb +109 -72
  133. metadata +29 -10
  134. metadata.gz.sig +0 -0
  135. data/lib/mongo/bulk/bulk_write.rb +0 -307
  136. data/lib/mongo/operation/batchable.rb +0 -103
@@ -2,33 +2,25 @@
2
2
  topology_description:
3
3
  type: ReplicaSetWithPrimary
4
4
  servers:
5
- - &1
6
- address: b:27017
5
+ - address: b:27017
7
6
  avg_rtt_ms: 5
8
7
  type: RSSecondary
9
- tag_sets:
10
- - data_center: nyc
11
- - &2
12
- address: c:27017
8
+ tags:
9
+ data_center: nyc
10
+ - address: c:27017
13
11
  avg_rtt_ms: 100
14
12
  type: RSSecondary
15
- tag_sets:
16
- - data_center: nyc
17
- - &3
18
- address: a:27017
13
+ tags:
14
+ data_center: nyc
15
+ - address: a:27017
19
16
  avg_rtt_ms: 26
20
17
  type: RSPrimary
21
- tag_sets:
22
- - data_center: nyc
18
+ tags:
19
+ data_center: nyc
23
20
  operation: read
24
21
  read_preference:
25
22
  mode: Nearest
26
23
  tag_sets:
27
24
  - data_center: sf
28
- candidate_servers:
29
- - *1
30
- - *2
31
- - *3
32
- eligible_servers: []
33
25
  suitable_servers: []
34
26
  in_latency_window: []
@@ -5,28 +5,24 @@ topology_description:
5
5
  - address: b:27017
6
6
  avg_rtt_ms: 5
7
7
  type: RSSecondary
8
- tag_sets:
9
- - data_center: nyc
8
+ tags:
9
+ data_center: nyc
10
10
  - address: c:27017
11
11
  avg_rtt_ms: 100
12
12
  type: RSSecondary
13
- tag_sets:
14
- - data_center: nyc
13
+ tags:
14
+ data_center: nyc
15
15
  - &1
16
16
  address: a:27017
17
17
  avg_rtt_ms: 26
18
18
  type: RSPrimary
19
- tag_sets:
20
- - data_center: nyc
19
+ tags:
20
+ data_center: nyc
21
21
  operation: read
22
22
  read_preference:
23
23
  mode: Primary
24
24
  tag_sets:
25
25
  - {}
26
- candidate_servers:
27
- - *1
28
- eligible_servers:
29
- - *1
30
26
  suitable_servers:
31
27
  - *1
32
28
  in_latency_window:
@@ -2,38 +2,28 @@
2
2
  topology_description:
3
3
  type: ReplicaSetWithPrimary
4
4
  servers:
5
- - &1
6
- address: b:27017
5
+ - address: b:27017
7
6
  avg_rtt_ms: 5
8
7
  type: RSSecondary
9
- tag_sets:
10
- - data_center: nyc
11
- - &2
12
- address: c:27017
8
+ tags:
9
+ data_center: nyc
10
+ - address: c:27017
13
11
  avg_rtt_ms: 100
14
12
  type: RSSecondary
15
- tag_sets:
16
- - data_center: nyc
17
- - &3
13
+ tags:
14
+ data_center: nyc
15
+ - &1
18
16
  address: a:27017
19
17
  avg_rtt_ms: 26
20
18
  type: RSPrimary
21
- tag_sets:
22
- - data_center: nyc
19
+ tags:
20
+ data_center: nyc
23
21
  operation: read
24
22
  read_preference:
25
23
  mode: PrimaryPreferred
26
24
  tag_sets:
27
25
  - {}
28
- candidate_servers:
29
- - *1
30
- - *2
31
- - *3
32
- eligible_servers:
33
- - *1
34
- - *2
35
- - *3
36
26
  suitable_servers:
37
- - *3
27
+ - *1
38
28
  in_latency_window:
39
- - *3
29
+ - *1
@@ -2,35 +2,28 @@
2
2
  topology_description:
3
3
  type: ReplicaSetWithPrimary
4
4
  servers:
5
- - &1
6
- address: b:27017
5
+ - address: b:27017
7
6
  avg_rtt_ms: 5
8
7
  type: RSSecondary
9
- tag_sets:
10
- - data_center: nyc
11
- - &2
12
- address: c:27017
8
+ tags:
9
+ data_center: nyc
10
+ - address: c:27017
13
11
  avg_rtt_ms: 100
14
12
  type: RSSecondary
15
- tag_sets:
16
- - data_center: nyc
17
- - &3
13
+ tags:
14
+ data_center: nyc
15
+ - &1
18
16
  address: a:27017
19
17
  avg_rtt_ms: 26
20
18
  type: RSPrimary
21
- tag_sets:
22
- - data_center: nyc
19
+ tags:
20
+ data_center: nyc
23
21
  operation: read
24
22
  read_preference:
25
23
  mode: PrimaryPreferred
26
24
  tag_sets:
27
25
  - data_center: sf
28
- candidate_servers:
29
- - *1
30
- - *2
31
- - *3
32
- eligible_servers: []
33
26
  suitable_servers:
34
- - *3
27
+ - *1
35
28
  in_latency_window:
36
- - *3
29
+ - *1
@@ -0,0 +1,31 @@
1
+ ---
2
+ topology_description:
3
+ type: ReplicaSetWithPrimary
4
+ servers:
5
+ - &1
6
+ address: b:27017
7
+ avg_rtt_ms: 5
8
+ type: RSSecondary
9
+ tags:
10
+ data_center: nyc
11
+ - &2
12
+ address: c:27017
13
+ avg_rtt_ms: 100
14
+ type: RSSecondary
15
+ tags:
16
+ data_center: nyc
17
+ - address: a:27017
18
+ avg_rtt_ms: 26
19
+ type: RSPrimary
20
+ tags:
21
+ data_center: nyc
22
+ operation: read
23
+ read_preference:
24
+ mode: Secondary
25
+ tag_sets:
26
+ - data_center: nyc
27
+ suitable_servers:
28
+ - *1
29
+ - *2
30
+ in_latency_window:
31
+ - *1
@@ -0,0 +1,31 @@
1
+ ---
2
+ topology_description:
3
+ type: ReplicaSetWithPrimary
4
+ servers:
5
+ - &1
6
+ address: b:27017
7
+ avg_rtt_ms: 5
8
+ type: RSSecondary
9
+ tags:
10
+ data_center: nyc
11
+ - &2
12
+ address: c:27017
13
+ avg_rtt_ms: 100
14
+ type: RSSecondary
15
+ tags:
16
+ data_center: nyc
17
+ - address: a:27017
18
+ avg_rtt_ms: 26
19
+ type: RSPrimary
20
+ tags:
21
+ data_center: nyc
22
+ operation: read
23
+ read_preference:
24
+ mode: SecondaryPreferred
25
+ tag_sets:
26
+ - data_center: nyc
27
+ suitable_servers:
28
+ - *1
29
+ - *2
30
+ in_latency_window:
31
+ - *1
@@ -0,0 +1,29 @@
1
+ ---
2
+ topology_description:
3
+ type: ReplicaSetWithPrimary
4
+ servers:
5
+ - address: b:27017
6
+ avg_rtt_ms: 5
7
+ type: RSSecondary
8
+ tags:
9
+ data_center: nyc
10
+ - address: c:27017
11
+ avg_rtt_ms: 100
12
+ type: RSSecondary
13
+ tags:
14
+ data_center: nyc
15
+ - &1
16
+ address: a:27017
17
+ avg_rtt_ms: 26
18
+ type: RSPrimary
19
+ tags:
20
+ data_center: nyc
21
+ operation: read
22
+ read_preference:
23
+ mode: SecondaryPreferred
24
+ tag_sets:
25
+ - data_center: sf
26
+ suitable_servers:
27
+ - *1
28
+ in_latency_window:
29
+ - *1
@@ -0,0 +1,26 @@
1
+ ---
2
+ topology_description:
3
+ type: ReplicaSetWithPrimary
4
+ servers:
5
+ - address: b:27017
6
+ avg_rtt_ms: 5
7
+ type: RSSecondary
8
+ tags:
9
+ data_center: nyc
10
+ - address: c:27017
11
+ avg_rtt_ms: 100
12
+ type: RSSecondary
13
+ tags:
14
+ data_center: nyc
15
+ - address: a:27017
16
+ avg_rtt_ms: 26
17
+ type: RSPrimary
18
+ tags:
19
+ data_center: nyc
20
+ operation: read
21
+ read_preference:
22
+ mode: Secondary
23
+ tag_sets:
24
+ - data_center: sf
25
+ suitable_servers: []
26
+ in_latency_window: []
@@ -6,25 +6,19 @@ topology_description:
6
6
  address: g:27017
7
7
  avg_rtt_ms: 5
8
8
  type: Mongos
9
- tag_sets:
10
- - data_center: nyc
9
+ tags:
10
+ data_center: nyc
11
11
  - &2
12
12
  address: h:27017
13
13
  avg_rtt_ms: 35
14
14
  type: Mongos
15
- tag_sets:
16
- - data_center: dc
15
+ tags:
16
+ data_center: dc
17
17
  operation: read
18
18
  read_preference:
19
19
  mode: SecondaryPreferred
20
20
  tag_sets:
21
21
  - data_center: nyc
22
- candidate_servers:
23
- - *1
24
- - *2
25
- eligible_servers:
26
- - *1
27
- - *2
28
22
  suitable_servers:
29
23
  - *1
30
24
  - *2
@@ -6,17 +6,13 @@ topology_description:
6
6
  address: a:27017
7
7
  avg_rtt_ms: 5
8
8
  type: Standalone
9
- tag_sets:
10
- - data_center: dc
9
+ tags:
10
+ data_center: dc
11
11
  operation: read
12
12
  read_preference:
13
13
  mode: SecondaryPreferred
14
14
  tag_sets:
15
15
  - data_center: nyc
16
- candidate_servers:
17
- - *1
18
- eligible_servers:
19
- - *1
20
16
  suitable_servers:
21
17
  - *1
22
18
  in_latency_window:
@@ -7,7 +7,5 @@ read_preference:
7
7
  mode: SecondaryPreferred
8
8
  tag_sets:
9
9
  - data_center: nyc
10
- candidate_servers: []
11
- eligible_servers: []
12
10
  suitable_servers: []
13
11
  in_latency_window: []
@@ -2,12 +2,14 @@ shared_examples 'a bulk write object' do
2
2
 
3
3
  context 'when no operations are provided' do
4
4
 
5
- let(:operations) {[]}
5
+ let(:operations) do
6
+ []
7
+ end
6
8
 
7
9
  it 'raises an error' do
8
10
  expect {
9
11
  bulk.execute
10
- }.to raise_error(Mongo::Error::EmptyBatch)
12
+ }.to raise_error(ArgumentError)
11
13
  end
12
14
  end
13
15
 
@@ -20,7 +22,7 @@ shared_examples 'a bulk write object' do
20
22
  it 'raises an error' do
21
23
  expect {
22
24
  bulk.execute
23
- }.to raise_error(Mongo::Error::InvalidBulkOperation)
25
+ }.to raise_error(Mongo::Error::InvalidBulkOperationType)
24
26
  end
25
27
  end
26
28
 
@@ -32,8 +34,8 @@ shared_examples 'a bulk write object' do
32
34
  [{ insert_one: { name: 'test' }}]
33
35
  end
34
36
 
35
- it 'returns nInserted of 1' do
36
- expect(bulk.execute['nInserted']).to eq(1)
37
+ it 'returns n_inserted of 1' do
38
+ expect(bulk.execute[:n_inserted]).to eq(1)
37
39
  end
38
40
 
39
41
  it 'only inserts that document' do
@@ -51,7 +53,7 @@ shared_examples 'a bulk write object' do
51
53
  it 'raises an exception' do
52
54
  expect {
53
55
  bulk.execute
54
- }.to raise_error(Mongo::Error::InvalidDocument)
56
+ }.to raise_error(Mongo::Error::InvalidBulkOperation)
55
57
  end
56
58
  end
57
59
  end
@@ -71,7 +73,9 @@ shared_examples 'a bulk write object' do
71
73
  end
72
74
 
73
75
  let(:operations) do
74
- [{ delete_one: { a: 1 }}]
76
+ [ { delete_one: { a: 1 }},
77
+ { delete_one: { a: 2 }}
78
+ ]
75
79
  end
76
80
 
77
81
  context 'when no selector is specified' do
@@ -83,14 +87,14 @@ shared_examples 'a bulk write object' do
83
87
  it 'raises an exception' do
84
88
  expect {
85
89
  bulk.execute
86
- }.to raise_exception(Mongo::Error::InvalidDocument)
90
+ }.to raise_exception(Mongo::Error::InvalidBulkOperation)
87
91
  end
88
92
  end
89
93
 
90
94
  context 'when multiple documents match delete selector' do
91
95
 
92
- it 'reports nRemoved correctly' do
93
- expect(bulk.execute['nRemoved']).to eq(1)
96
+ it 'reports n_removed correctly' do
97
+ expect(bulk.execute[:n_removed]).to eq(1)
94
98
  end
95
99
 
96
100
  it 'deletes only matching documents' do
@@ -123,7 +127,7 @@ shared_examples 'a bulk write object' do
123
127
  it 'raises an exception' do
124
128
  expect {
125
129
  bulk.execute
126
- }.to raise_exception(Mongo::Error::InvalidDocument)
130
+ }.to raise_exception(Mongo::Error::InvalidBulkOperation)
127
131
  end
128
132
  end
129
133
 
@@ -131,8 +135,8 @@ shared_examples 'a bulk write object' do
131
135
 
132
136
  context 'when multiple documents match delete selector' do
133
137
 
134
- it 'reports nRemoved correctly' do
135
- expect(bulk.execute['nRemoved']).to eq(2)
138
+ it 'reports n_removed correctly' do
139
+ expect(bulk.execute[:n_removed]).to eq(2)
136
140
  end
137
141
 
138
142
  it 'deletes all matching documents' do
@@ -151,8 +155,8 @@ shared_examples 'a bulk write object' do
151
155
  [{ 'a' => 2 }]
152
156
  end
153
157
 
154
- it 'reports nRemoved correctly' do
155
- expect(bulk.execute['nRemoved']).to eq(1)
158
+ it 'reports n_removed correctly' do
159
+ expect(bulk.execute[:n_removed]).to eq(1)
156
160
  end
157
161
 
158
162
  it 'deletes all matching documents' do
@@ -182,32 +186,41 @@ shared_examples 'a bulk write object' do
182
186
  end
183
187
 
184
188
  let(:operations) do
185
- [{ replace_one: [{ a: 1 }, replacement ]}]
189
+ [{ replace_one: { find: { a: 1 },
190
+ replacement: replacement,
191
+ upsert: false }
192
+ }]
186
193
  end
187
194
 
188
195
  context 'when a replace document is not specified' do
189
196
 
190
197
  let(:operations) do
191
- [{ replace_one: [{ a: 1 }]}]
198
+ [{ replace_one: { find: { a: 1 },
199
+ replacement: nil,
200
+ upsert: false }
201
+ }]
192
202
  end
193
203
 
194
204
  it 'raises an exception' do
195
205
  expect {
196
206
  bulk.execute
197
- }.to raise_exception(ArgumentError)
207
+ }.to raise_exception(Mongo::Error::InvalidBulkOperation)
198
208
  end
199
209
  end
200
210
 
201
211
  context 'when there are $-operator top-level keys' do
202
212
 
203
- let(:replacement) do
204
- { :$set => { a: 3 }}
213
+ let(:operations) do
214
+ [{ replace_one: { find: { a: 1 },
215
+ replacement: { :$set => { a: 3 }},
216
+ upsert: false }
217
+ }]
205
218
  end
206
219
 
207
220
  it 'raises an exception' do
208
221
  expect {
209
222
  bulk.execute
210
- }.to raise_exception(Mongo::Error::InvalidReplacementDocument)
223
+ }.to raise_exception(Mongo::Error::InvalidBulkOperation)
211
224
  end
212
225
 
213
226
  end
@@ -219,8 +232,8 @@ shared_examples 'a bulk write object' do
219
232
  expect(authorized_collection.find(replacement).count).to eq(1)
220
233
  end
221
234
 
222
- it 'reports nMatched correctly' do
223
- expect(bulk.execute['nMatched']).to eq(1)
235
+ it 'reports n_matched correctly' do
236
+ expect(bulk.execute[:n_matched]).to eq(1)
224
237
  end
225
238
 
226
239
  it 'only applies the replacement to one matching document' do
@@ -231,7 +244,10 @@ shared_examples 'a bulk write object' do
231
244
  context 'when upsert is true' do
232
245
 
233
246
  let(:operations) do
234
- [{ replace_one: [{ a: 4 }, replacement, { :upsert => true }]}]
247
+ [{ replace_one: { find: { a: 4 },
248
+ replacement: replacement,
249
+ upsert: true }
250
+ }]
235
251
  end
236
252
 
237
253
  let(:expected) do
@@ -243,8 +259,8 @@ shared_examples 'a bulk write object' do
243
259
  expect(authorized_collection.find(replacement).count).to eq(1)
244
260
  end
245
261
 
246
- it 'reports nMatched correctly' do
247
- expect(bulk.execute['nMatched']).to eq(0)
262
+ it 'reports n_matched correctly' do
263
+ expect(bulk.execute[:n_matched]).to eq(0)
248
264
  end
249
265
 
250
266
  it 'does not replace any documents' do
@@ -266,7 +282,10 @@ shared_examples 'a bulk write object' do
266
282
  end
267
283
 
268
284
  let(:operations) do
269
- [{ update_one: [{ a: 1 }, update ]}]
285
+ [{ update_one: { find: { a: 1 },
286
+ update: update,
287
+ upsert: false }
288
+ }]
270
289
  end
271
290
 
272
291
  before do
@@ -283,10 +302,16 @@ shared_examples 'a bulk write object' do
283
302
  [{ update_one: [{ a: 1 }]}]
284
303
  end
285
304
 
305
+ let(:operations) do
306
+ [{ update_one: { find: { a: 1 },
307
+ upsert: false }
308
+ }]
309
+ end
310
+
286
311
  it 'raises an exception' do
287
312
  expect {
288
313
  bulk.execute
289
- }.to raise_exception(ArgumentError)
314
+ }.to raise_exception(Mongo::Error::InvalidBulkOperation)
290
315
  end
291
316
  end
292
317
 
@@ -299,26 +324,26 @@ shared_examples 'a bulk write object' do
299
324
  it 'raises an exception' do
300
325
  expect {
301
326
  bulk.execute
302
- }.to raise_exception(Mongo::Error::InvalidUpdateDocument)
327
+ }.to raise_exception(Mongo::Error::InvalidBulkOperation)
303
328
  end
304
329
  end
305
330
 
306
331
  context 'when a valid update document is specified' do
307
332
 
308
- it 'reports nModified correctly', if: write_command_enabled? do
309
- expect(bulk.execute['nModified']).to eq(1)
333
+ it 'reports n_modified correctly', if: write_command_enabled? do
334
+ expect(bulk.execute[:n_modified]).to eq(1)
310
335
  end
311
336
 
312
- it 'reports nModified correctly', unless: write_command_enabled? do
313
- expect(bulk.execute['nModified']).to eq(nil)
337
+ it 'reports n_modified correctly', unless: write_command_enabled? do
338
+ expect(bulk.execute[:n_modified]).to eq(nil)
314
339
  end
315
340
 
316
- it 'reports nUpserted correctly' do
317
- expect(bulk.execute['nUpserted']).to eq(0)
341
+ it 'reports n_upserted correctly' do
342
+ expect(bulk.execute[:n_upserted]).to eq(0)
318
343
  end
319
344
 
320
- it 'reports nMatched correctly' do
321
- expect(bulk.execute['nMatched']).to eq(1)
345
+ it 'reports n_matched correctly' do
346
+ expect(bulk.execute[:n_matched]).to eq(1)
322
347
  end
323
348
 
324
349
  it 'applies the correct writes' do
@@ -329,27 +354,30 @@ shared_examples 'a bulk write object' do
329
354
  context 'when upsert is true' do
330
355
 
331
356
  let(:operations) do
332
- [{ update_one: [{ a: 3 }, update, { upsert: true }]}]
357
+ [{ update_one: { find: { a: 3 },
358
+ update: update,
359
+ upsert: true }
360
+ }]
333
361
  end
334
362
 
335
363
  let(:expected) do
336
364
  [{ 'a' => 1 }, { 'a' => 1 }, { 'a' => 2 }]
337
365
  end
338
366
 
339
- it 'reports nModified correctly', if: write_command_enabled? do
340
- expect(bulk.execute['nModified']).to eq(0)
367
+ it 'reports n_modified correctly', if: write_command_enabled? do
368
+ expect(bulk.execute[:n_modified]).to eq(0)
341
369
  end
342
370
 
343
- it 'reports nModified correctly', unless: write_command_enabled? do
344
- expect(bulk.execute['nModified']).to eq(nil)
371
+ it 'reports n_modified correctly', unless: write_command_enabled? do
372
+ expect(bulk.execute[:n_modified]).to eq(nil)
345
373
  end
346
374
 
347
- it 'reports nUpserted correctly' do
348
- expect(bulk.execute['nUpserted']).to eq(1)
375
+ it 'reports n_upserted correctly' do
376
+ expect(bulk.execute[:n_upserted]).to eq(1)
349
377
  end
350
378
 
351
- it 'reports nMatched correctly' do
352
- expect(bulk.execute['nMatched']).to eq(0)
379
+ it 'reports n_matched correctly' do
380
+ expect(bulk.execute[:n_matched]).to eq(0)
353
381
  end
354
382
 
355
383
  it 'applies the correct writes' do
@@ -371,7 +399,10 @@ shared_examples 'a bulk write object' do
371
399
  end
372
400
 
373
401
  let(:operations) do
374
- [{ update_many: [{ a: 1 }, update ]}]
402
+ [{ update_many: { find: { a: 1 },
403
+ update: update,
404
+ upsert: false }
405
+ }]
375
406
  end
376
407
 
377
408
  let(:expected) do
@@ -385,13 +416,15 @@ shared_examples 'a bulk write object' do
385
416
  context 'when an update document is not specified' do
386
417
 
387
418
  let(:operations) do
388
- [{ update_many: [{ a: 1 }]}]
419
+ [{ update_many: { find: { a: 1 },
420
+ upsert: false }
421
+ }]
389
422
  end
390
423
 
391
424
  it 'raises an exception' do
392
425
  expect do
393
426
  bulk.execute
394
- end.to raise_exception(ArgumentError)
427
+ end.to raise_exception(Mongo::Error::InvalidBulkOperation)
395
428
  end
396
429
  end
397
430
 
@@ -404,26 +437,26 @@ shared_examples 'a bulk write object' do
404
437
  it 'raises an exception' do
405
438
  expect do
406
439
  bulk.execute
407
- end.to raise_exception(Mongo::Error::InvalidUpdateDocument)
440
+ end.to raise_exception(Mongo::Error::InvalidBulkOperation)
408
441
  end
409
442
  end
410
443
 
411
444
  context 'when a valid update document is specified' do
412
445
 
413
- it 'reports nModified correctly', if: write_command_enabled? do
414
- expect(bulk.execute['nModified']).to eq(2)
446
+ it 'reports n_modified correctly', if: write_command_enabled? do
447
+ expect(bulk.execute[:n_modified]).to eq(2)
415
448
  end
416
449
 
417
- it 'reports nModified correctly', unless: write_command_enabled? do
418
- expect(bulk.execute['nModified']).to eq(nil)
450
+ it 'reports n_modified correctly', unless: write_command_enabled? do
451
+ expect(bulk.execute[:n_modified]).to eq(nil)
419
452
  end
420
453
 
421
- it 'reports nUpserted correctly' do
422
- expect(bulk.execute['nUpserted']).to eq(0)
454
+ it 'reports n_upserted correctly' do
455
+ expect(bulk.execute[:n_upserted]).to eq(0)
423
456
  end
424
457
 
425
- it 'reports nMatched correctly' do
426
- expect(bulk.execute['nMatched']).to eq(2)
458
+ it 'reports n_matched correctly' do
459
+ expect(bulk.execute[:n_matched]).to eq(2)
427
460
  end
428
461
 
429
462
  it 'applies the correct writes' do
@@ -434,27 +467,30 @@ shared_examples 'a bulk write object' do
434
467
  context 'when upsert is true' do
435
468
 
436
469
  let(:operations) do
437
- [{ update_one: [{ a: 3 }, update, { upsert: true }]}]
470
+ [{ update_many: { find: { a: 3 },
471
+ update: update,
472
+ upsert: true }
473
+ }]
438
474
  end
439
475
 
440
476
  let(:expected) do
441
477
  [ { 'a' => 1 }, { 'a' => 1 }, { 'a' => 2 } ]
442
478
  end
443
479
 
444
- it 'reports nModified correctly', if: write_command_enabled? do
445
- expect(bulk.execute['nModified']).to eq(0)
480
+ it 'reports n_modified correctly', if: write_command_enabled? do
481
+ expect(bulk.execute[:n_modified]).to eq(0)
446
482
  end
447
483
 
448
- it 'reports nModified correctly', unless: write_command_enabled? do
449
- expect(bulk.execute['nModified']).to eq(nil)
484
+ it 'reports n_modified correctly', unless: write_command_enabled? do
485
+ expect(bulk.execute[:n_modified]).to eq(nil)
450
486
  end
451
487
 
452
- it 'reports nUpserted correctly' do
453
- expect(bulk.execute['nUpserted']).to eq(1)
488
+ it 'reports n_upserted correctly' do
489
+ expect(bulk.execute[:n_upserted]).to eq(1)
454
490
  end
455
491
 
456
- it 'reports nMatched correctly' do
457
- expect(bulk.execute['nMatched']).to eq(0)
492
+ it 'reports n_matched correctly' do
493
+ expect(bulk.execute[:n_matched]).to eq(0)
458
494
  end
459
495
 
460
496
  it 'applies the correct writes' do
@@ -468,7 +504,6 @@ shared_examples 'a bulk write object' do
468
504
  context 'when the operations need to be split' do
469
505
 
470
506
  before do
471
- authorized_collection.find.remove_many
472
507
  6000.times do |i|
473
508
  authorized_collection.insert_one(x: i)
474
509
  end
@@ -477,14 +512,16 @@ shared_examples 'a bulk write object' do
477
512
  let(:operations) do
478
513
  [].tap do |ops|
479
514
  3000.times do |i|
480
- ops << { :update_one => [ { x: i },
481
- {'$set' => { x: 6000-i } }]
515
+ ops << { update_one: { find: { x: i },
516
+ update: { '$set' => { x: 6000-i } },
517
+ upsert: false }
482
518
  }
483
519
  end
484
520
  ops << { :insert_one => { test: 'emily' } }
485
521
  3000.times do |i|
486
- ops << { :update_one => [ { x: 3000+i },
487
- {'$set' => { x: 3000-i } }]
522
+ ops << { update_one: { find: { x: 3000+i },
523
+ update: { '$set' => { x: 3000-i } },
524
+ upsert: false }
488
525
  }
489
526
  end
490
527
  end