mongoid 7.1.0 → 7.1.6
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/CHANGELOG.md +6 -6
- data/README.md +1 -1
- data/Rakefile +14 -5
- data/lib/config/locales/en.yml +5 -5
- data/lib/mongoid/association/accessors.rb +37 -2
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -1
- data/lib/mongoid/association/embedded/embeds_one.rb +2 -1
- data/lib/mongoid/association/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +38 -2
- data/lib/mongoid/association/referenced/eager.rb +29 -9
- data/lib/mongoid/association/referenced/has_one/proxy.rb +6 -1
- data/lib/mongoid/atomic.rb +13 -3
- data/lib/mongoid/clients/factory.rb +2 -2
- data/lib/mongoid/clients/options.rb +8 -8
- data/lib/mongoid/clients/sessions.rb +20 -4
- data/lib/mongoid/clients/storage_options.rb +5 -5
- data/lib/mongoid/config.rb +39 -9
- data/lib/mongoid/criteria.rb +23 -4
- data/lib/mongoid/criteria/modifiable.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +12 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +75 -8
- data/lib/mongoid/criteria/queryable/pipeline.rb +3 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +120 -13
- data/lib/mongoid/criteria/queryable/storable.rb +104 -99
- data/lib/mongoid/errors/eager_load.rb +2 -0
- data/lib/mongoid/errors/no_client_config.rb +2 -2
- data/lib/mongoid/errors/no_default_client.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +4 -2
- data/lib/mongoid/extensions/regexp.rb +1 -1
- data/lib/mongoid/fields.rb +2 -1
- data/lib/mongoid/fields/validators/macro.rb +4 -1
- data/lib/mongoid/matchable/regexp.rb +2 -2
- data/lib/mongoid/persistable/pushable.rb +11 -2
- data/lib/mongoid/persistence_context.rb +6 -6
- data/lib/mongoid/query_cache.rb +61 -18
- data/lib/mongoid/serializable.rb +9 -3
- data/lib/mongoid/tasks/database.rb +38 -3
- data/lib/mongoid/validatable/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +32 -23
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/spec/app/models/coding.rb +4 -0
- data/spec/app/models/coding/pull_request.rb +12 -0
- data/spec/app/models/delegating_patient.rb +16 -0
- data/spec/app/models/passport.rb +1 -0
- data/spec/app/models/person.rb +2 -0
- data/spec/app/models/phone.rb +1 -0
- data/spec/app/models/publication.rb +5 -0
- data/spec/app/models/publication/encyclopedia.rb +12 -0
- data/spec/app/models/publication/review.rb +14 -0
- data/spec/app/models/series.rb +1 -0
- data/spec/app/models/wiki_page.rb +1 -0
- data/spec/integration/app_spec.rb +254 -0
- data/spec/integration/associations/embedded_spec.rb +54 -0
- data/spec/integration/associations/embeds_many_spec.rb +24 -0
- data/spec/integration/associations/embeds_one_spec.rb +24 -0
- data/spec/integration/associations/has_many_spec.rb +76 -0
- data/spec/integration/associations/has_one_spec.rb +76 -0
- data/spec/integration/bson_regexp_raw_spec.rb +20 -0
- data/spec/integration/criteria/date_field_spec.rb +41 -0
- data/spec/integration/criteria/logical_spec.rb +13 -0
- data/spec/integration/document_spec.rb +22 -0
- data/spec/integration/shardable_spec.rb +20 -4
- data/spec/lite_spec_helper.rb +12 -4
- data/spec/mongoid/association/accessors_spec.rb +238 -63
- data/spec/mongoid/association/embedded/embeds_many_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +10 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -2
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +193 -10
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +140 -1
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +105 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +2 -1
- data/spec/mongoid/clients/factory_spec.rb +8 -8
- data/spec/mongoid/clients/options_spec.rb +11 -11
- data/spec/mongoid/clients/sessions_spec.rb +8 -4
- data/spec/mongoid/clients/transactions_spec.rb +20 -8
- data/spec/mongoid/clients_spec.rb +2 -2
- data/spec/mongoid/contextual/atomic_spec.rb +22 -11
- data/spec/mongoid/contextual/geo_near_spec.rb +11 -2
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -5
- data/spec/mongoid/contextual/mongo_spec.rb +76 -53
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +19 -7
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +28 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +45 -12
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1051 -392
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +52 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +80 -2
- data/spec/mongoid/criteria_spec.rb +36 -2
- data/spec/mongoid/document_persistence_context_spec.rb +33 -0
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -3
- data/spec/mongoid/fields_spec.rb +24 -1
- data/spec/mongoid/indexable_spec.rb +6 -4
- data/spec/mongoid/matchable/default_spec.rb +1 -1
- data/spec/mongoid/matchable/regexp_spec.rb +2 -2
- data/spec/mongoid/matchable_spec.rb +2 -2
- data/spec/mongoid/persistable/pushable_spec.rb +55 -1
- data/spec/mongoid/query_cache_spec.rb +77 -9
- data/spec/mongoid/relations/proxy_spec.rb +1 -1
- data/spec/mongoid/scopable_spec.rb +2 -1
- data/spec/mongoid/serializable_spec.rb +129 -18
- data/spec/mongoid/shardable_models.rb +1 -1
- data/spec/mongoid/shardable_spec.rb +2 -2
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +1 -1
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +211 -0
- data/spec/shared/lib/mrss/constraints.rb +312 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/spec_helper.rb +2 -31
- data/spec/support/child_process_helper.rb +76 -0
- data/spec/support/cluster_config.rb +3 -3
- data/spec/support/constraints.rb +26 -10
- data/spec/support/expectations.rb +3 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/session_registry.rb +50 -0
- data/spec/support/spec_config.rb +12 -4
- metadata +520 -473
- metadata.gz.sig +0 -0
|
@@ -2907,7 +2907,8 @@ describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
|
2907
2907
|
expect(posts).to eq([ post_one ])
|
|
2908
2908
|
end
|
|
2909
2909
|
|
|
2910
|
-
context 'when providing a collation'
|
|
2910
|
+
context 'when providing a collation' do
|
|
2911
|
+
min_server_version '3.4'
|
|
2911
2912
|
|
|
2912
2913
|
let(:posts) do
|
|
2913
2914
|
person.posts.where(title: "FIRST").collation(locale: 'en_US', strength: 2)
|
|
@@ -41,7 +41,7 @@ describe Mongoid::Clients::Factory do
|
|
|
41
41
|
let(:config) do
|
|
42
42
|
{
|
|
43
43
|
default: { hosts: SpecConfig.instance.addresses, database: database_id },
|
|
44
|
-
|
|
44
|
+
analytics: { hosts: SpecConfig.instance.addresses, database: database_id }
|
|
45
45
|
}
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -54,7 +54,7 @@ describe Mongoid::Clients::Factory do
|
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
let(:client) do
|
|
57
|
-
described_class.create(:
|
|
57
|
+
described_class.create(:analytics)
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
let(:cluster) do
|
|
@@ -81,7 +81,7 @@ describe Mongoid::Clients::Factory do
|
|
|
81
81
|
let(:config) do
|
|
82
82
|
{
|
|
83
83
|
default: { hosts: [ "127.0.0.1" ], database: database_id },
|
|
84
|
-
|
|
84
|
+
analytics: { hosts: [ "127.0.0.1" ], database: database_id }
|
|
85
85
|
}
|
|
86
86
|
end
|
|
87
87
|
|
|
@@ -94,7 +94,7 @@ describe Mongoid::Clients::Factory do
|
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
let(:client) do
|
|
97
|
-
described_class.create(:
|
|
97
|
+
described_class.create(:analytics)
|
|
98
98
|
end
|
|
99
99
|
|
|
100
100
|
let(:default) do
|
|
@@ -125,7 +125,7 @@ describe Mongoid::Clients::Factory do
|
|
|
125
125
|
let(:config) do
|
|
126
126
|
{
|
|
127
127
|
default: { hosts: [ "127.0.0.1:27017" ], database: database_id },
|
|
128
|
-
|
|
128
|
+
analytics: { uri: "mongodb://127.0.0.1:27017/mongoid_test" }
|
|
129
129
|
}
|
|
130
130
|
end
|
|
131
131
|
|
|
@@ -138,7 +138,7 @@ describe Mongoid::Clients::Factory do
|
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
let(:client) do
|
|
141
|
-
described_class.create(:
|
|
141
|
+
described_class.create(:analytics)
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
let(:cluster) do
|
|
@@ -163,7 +163,7 @@ describe Mongoid::Clients::Factory do
|
|
|
163
163
|
let(:config) do
|
|
164
164
|
{
|
|
165
165
|
default: { hosts: [ "127.0.0.1:1234" ], database: database_id, server_selection_timeout: 1 },
|
|
166
|
-
|
|
166
|
+
analytics: { uri: "mongodb://127.0.0.1:1234,127.0.0.1:5678/mongoid_test?serverSelectionTimeoutMS=1000" }
|
|
167
167
|
}
|
|
168
168
|
end
|
|
169
169
|
|
|
@@ -176,7 +176,7 @@ describe Mongoid::Clients::Factory do
|
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
let(:client) do
|
|
179
|
-
described_class.create(:
|
|
179
|
+
described_class.create(:analytics)
|
|
180
180
|
end
|
|
181
181
|
|
|
182
182
|
let(:cluster) do
|
|
@@ -14,7 +14,7 @@ describe Mongoid::Clients::Options, retry: 3 do
|
|
|
14
14
|
Mongoid::Clients.clients.clear
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
describe '#with'
|
|
17
|
+
describe '#with' do
|
|
18
18
|
|
|
19
19
|
context 'when passing some options' do
|
|
20
20
|
|
|
@@ -151,7 +151,7 @@ describe Mongoid::Clients::Options, retry: 3 do
|
|
|
151
151
|
let(:config) do
|
|
152
152
|
{
|
|
153
153
|
default: { hosts: SpecConfig.instance.addresses, database: database_id },
|
|
154
|
-
|
|
154
|
+
analytics: { uri: "mongodb://#{SpecConfig.instance.addresses.first}/analytics-db?connectTimeoutMS=3000" }
|
|
155
155
|
}
|
|
156
156
|
end
|
|
157
157
|
|
|
@@ -164,14 +164,14 @@ describe Mongoid::Clients::Options, retry: 3 do
|
|
|
164
164
|
end
|
|
165
165
|
|
|
166
166
|
let(:persistence_context) do
|
|
167
|
-
Minim.with(client: :
|
|
167
|
+
Minim.with(client: :analytics) do |klass|
|
|
168
168
|
klass.persistence_context
|
|
169
169
|
end
|
|
170
170
|
end
|
|
171
171
|
|
|
172
172
|
it 'uses the database specified in the uri' do
|
|
173
|
-
expect(persistence_context.database_name).to eq('
|
|
174
|
-
expect(persistence_context.client.database.name).to eq('
|
|
173
|
+
expect(persistence_context.database_name).to eq('analytics-db')
|
|
174
|
+
expect(persistence_context.client.database.name).to eq('analytics-db')
|
|
175
175
|
end
|
|
176
176
|
|
|
177
177
|
it 'uses the options specified in the uri' do
|
|
@@ -291,7 +291,7 @@ describe Mongoid::Clients::Options, retry: 3 do
|
|
|
291
291
|
end
|
|
292
292
|
end
|
|
293
293
|
|
|
294
|
-
describe '.with'
|
|
294
|
+
describe '.with' do
|
|
295
295
|
|
|
296
296
|
context 'when passing some options' do
|
|
297
297
|
|
|
@@ -344,8 +344,8 @@ describe Mongoid::Clients::Options, retry: 3 do
|
|
|
344
344
|
let(:config) do
|
|
345
345
|
{
|
|
346
346
|
default: { hosts: SpecConfig.instance.addresses, database: database_id },
|
|
347
|
-
|
|
348
|
-
uri: "mongodb://#{SpecConfig.instance.addresses.first}/
|
|
347
|
+
analytics: {
|
|
348
|
+
uri: "mongodb://#{SpecConfig.instance.addresses.first}/analytics-db",
|
|
349
349
|
options: {
|
|
350
350
|
server_selection_timeout: 0.5,
|
|
351
351
|
},
|
|
@@ -358,14 +358,14 @@ describe Mongoid::Clients::Options, retry: 3 do
|
|
|
358
358
|
end
|
|
359
359
|
|
|
360
360
|
let(:persistence_context) do
|
|
361
|
-
test_model.with(client: :
|
|
361
|
+
test_model.with(client: :analytics) do |object|
|
|
362
362
|
object.persistence_context
|
|
363
363
|
end
|
|
364
364
|
end
|
|
365
365
|
|
|
366
366
|
it 'uses the database specified in the uri' do
|
|
367
|
-
expect(persistence_context.database_name).to eq('
|
|
368
|
-
expect(persistence_context.client.database.name).to eq('
|
|
367
|
+
expect(persistence_context.database_name).to eq('analytics-db')
|
|
368
|
+
expect(persistence_context.client.database.name).to eq('analytics-db')
|
|
369
369
|
end
|
|
370
370
|
end
|
|
371
371
|
|
|
@@ -43,7 +43,8 @@ describe Mongoid::Clients::Sessions do
|
|
|
43
43
|
|
|
44
44
|
context 'when a session is used on a model class' do
|
|
45
45
|
|
|
46
|
-
context 'when sessions are supported'
|
|
46
|
+
context 'when sessions are supported' do
|
|
47
|
+
min_server_version '3.6'
|
|
47
48
|
|
|
48
49
|
around do |example|
|
|
49
50
|
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
|
@@ -172,7 +173,8 @@ describe Mongoid::Clients::Sessions do
|
|
|
172
173
|
end
|
|
173
174
|
end
|
|
174
175
|
|
|
175
|
-
context 'when sessions are not supported'
|
|
176
|
+
context 'when sessions are not supported' do
|
|
177
|
+
max_server_version '3.4'
|
|
176
178
|
|
|
177
179
|
let!(:error) do
|
|
178
180
|
e = nil
|
|
@@ -199,7 +201,8 @@ describe Mongoid::Clients::Sessions do
|
|
|
199
201
|
end
|
|
200
202
|
end
|
|
201
203
|
|
|
202
|
-
context 'when sessions are supported'
|
|
204
|
+
context 'when sessions are supported' do
|
|
205
|
+
min_server_version '3.6'
|
|
203
206
|
|
|
204
207
|
around do |example|
|
|
205
208
|
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
|
@@ -316,7 +319,8 @@ describe Mongoid::Clients::Sessions do
|
|
|
316
319
|
end
|
|
317
320
|
end
|
|
318
321
|
|
|
319
|
-
context 'when sessions are not supported'
|
|
322
|
+
context 'when sessions are not supported' do
|
|
323
|
+
max_server_version '3.4'
|
|
320
324
|
|
|
321
325
|
let!(:error) do
|
|
322
326
|
e = nil
|
|
@@ -55,7 +55,8 @@ describe Mongoid::Clients::Sessions do
|
|
|
55
55
|
|
|
56
56
|
context 'when a transaction is used on a model class' do
|
|
57
57
|
|
|
58
|
-
context 'when transactions are supported'
|
|
58
|
+
context 'when transactions are supported' do
|
|
59
|
+
require_transaction_support
|
|
59
60
|
|
|
60
61
|
around do |example|
|
|
61
62
|
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
|
@@ -191,7 +192,10 @@ describe Mongoid::Clients::Sessions do
|
|
|
191
192
|
end
|
|
192
193
|
end
|
|
193
194
|
|
|
194
|
-
context 'when sessions are supported but transactions are not'
|
|
195
|
+
context 'when sessions are supported but transactions are not' do
|
|
196
|
+
min_server_version '3.6'
|
|
197
|
+
# Could also test 4.0 in sharded cluster
|
|
198
|
+
max_server_version '3.6'
|
|
195
199
|
|
|
196
200
|
let!(:error) do
|
|
197
201
|
e = nil
|
|
@@ -222,7 +226,8 @@ describe Mongoid::Clients::Sessions do
|
|
|
222
226
|
end
|
|
223
227
|
end
|
|
224
228
|
|
|
225
|
-
context 'when transactions are supported'
|
|
229
|
+
context 'when transactions are supported' do
|
|
230
|
+
require_transaction_support
|
|
226
231
|
|
|
227
232
|
around do |example|
|
|
228
233
|
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
|
@@ -345,16 +350,23 @@ describe Mongoid::Clients::Sessions do
|
|
|
345
350
|
end
|
|
346
351
|
end
|
|
347
352
|
|
|
348
|
-
context 'when sessions are supported but transactions are not'
|
|
353
|
+
context 'when sessions are supported but transactions are not' do
|
|
354
|
+
min_server_version '3.6'
|
|
355
|
+
# Could also test 4.0 in sharded cluster
|
|
356
|
+
max_server_version '3.6'
|
|
349
357
|
|
|
350
358
|
around do |example|
|
|
351
359
|
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
|
352
360
|
Mongoid::Clients.with_name(:other).command(create: :people)
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
361
|
+
|
|
362
|
+
begin
|
|
363
|
+
subscriber.clear_events!
|
|
364
|
+
person.with(client: :other) do
|
|
365
|
+
example.run
|
|
366
|
+
end
|
|
367
|
+
ensure
|
|
368
|
+
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
|
356
369
|
end
|
|
357
|
-
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
|
358
370
|
end
|
|
359
371
|
|
|
360
372
|
let!(:error) do
|
|
@@ -728,7 +728,7 @@ describe Mongoid::Clients do
|
|
|
728
728
|
end
|
|
729
729
|
end
|
|
730
730
|
|
|
731
|
-
describe ".store_in"
|
|
731
|
+
describe ".store_in" do
|
|
732
732
|
|
|
733
733
|
context "when provided a non hash" do
|
|
734
734
|
|
|
@@ -765,7 +765,7 @@ describe Mongoid::Clients do
|
|
|
765
765
|
end
|
|
766
766
|
end
|
|
767
767
|
|
|
768
|
-
describe ".with"
|
|
768
|
+
describe ".with" do
|
|
769
769
|
|
|
770
770
|
context "when changing write concern options" do
|
|
771
771
|
|
|
@@ -77,7 +77,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
77
77
|
end
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
-
context 'when the criteria has a collation'
|
|
80
|
+
context 'when the criteria has a collation' do
|
|
81
|
+
min_server_version '3.4'
|
|
81
82
|
|
|
82
83
|
let(:criteria) do
|
|
83
84
|
Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
|
|
@@ -173,7 +174,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
173
174
|
end
|
|
174
175
|
end
|
|
175
176
|
|
|
176
|
-
context 'when the criteria has a collation'
|
|
177
|
+
context 'when the criteria has a collation' do
|
|
178
|
+
min_server_version '3.4'
|
|
177
179
|
|
|
178
180
|
let(:criteria) do
|
|
179
181
|
Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
|
|
@@ -244,7 +246,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
244
246
|
end
|
|
245
247
|
end
|
|
246
248
|
|
|
247
|
-
context 'when the criteria has a collation'
|
|
249
|
+
context 'when the criteria has a collation' do
|
|
250
|
+
min_server_version '3.4'
|
|
248
251
|
|
|
249
252
|
let!(:depeche_mode) do
|
|
250
253
|
Band.create(members: [ "Dave" ], likes: 60)
|
|
@@ -323,7 +326,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
323
326
|
end
|
|
324
327
|
end
|
|
325
328
|
|
|
326
|
-
context 'when the criteria has a collation'
|
|
329
|
+
context 'when the criteria has a collation' do
|
|
330
|
+
min_server_version '3.4'
|
|
327
331
|
|
|
328
332
|
let!(:depeche_mode) do
|
|
329
333
|
Band.create(members: [ "Dave" ])
|
|
@@ -395,7 +399,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
395
399
|
end
|
|
396
400
|
end
|
|
397
401
|
|
|
398
|
-
context 'when the criteria has a collation'
|
|
402
|
+
context 'when the criteria has a collation' do
|
|
403
|
+
min_server_version '3.4'
|
|
399
404
|
|
|
400
405
|
let!(:depeche_mode) do
|
|
401
406
|
Band.create(members: [ "Dave" ])
|
|
@@ -449,7 +454,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
449
454
|
expect(smiths.reload.members).to be_nil
|
|
450
455
|
end
|
|
451
456
|
|
|
452
|
-
context 'when the criteria has a collation'
|
|
457
|
+
context 'when the criteria has a collation' do
|
|
458
|
+
min_server_version '3.4'
|
|
453
459
|
|
|
454
460
|
let!(:depeche_mode) do
|
|
455
461
|
Band.create(members: [ "Dave" ])
|
|
@@ -506,7 +512,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
506
512
|
end
|
|
507
513
|
end
|
|
508
514
|
|
|
509
|
-
context 'when the criteria has a collation'
|
|
515
|
+
context 'when the criteria has a collation' do
|
|
516
|
+
min_server_version '3.4'
|
|
510
517
|
|
|
511
518
|
let!(:depeche_mode) do
|
|
512
519
|
Band.create(members: [ "Dave", "Alan", "Fletch" ])
|
|
@@ -563,7 +570,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
563
570
|
end
|
|
564
571
|
end
|
|
565
572
|
|
|
566
|
-
context 'when the criteria has a collation'
|
|
573
|
+
context 'when the criteria has a collation' do
|
|
574
|
+
min_server_version '3.4'
|
|
567
575
|
|
|
568
576
|
let!(:depeche_mode) do
|
|
569
577
|
Band.create(members: [ "Dave" ])
|
|
@@ -628,7 +636,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
628
636
|
end
|
|
629
637
|
end
|
|
630
638
|
|
|
631
|
-
context 'when the criteria has a collation'
|
|
639
|
+
context 'when the criteria has a collation' do
|
|
640
|
+
min_server_version '3.4'
|
|
632
641
|
|
|
633
642
|
let!(:depeche_mode) do
|
|
634
643
|
Band.create(members: [ "Dave" ])
|
|
@@ -689,7 +698,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
689
698
|
end
|
|
690
699
|
end
|
|
691
700
|
|
|
692
|
-
context 'when the criteria has a collation'
|
|
701
|
+
context 'when the criteria has a collation' do
|
|
702
|
+
min_server_version '3.4'
|
|
693
703
|
|
|
694
704
|
let!(:depeche_mode) do
|
|
695
705
|
Band.create(members: [ "Dave" ])
|
|
@@ -848,7 +858,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
848
858
|
end
|
|
849
859
|
end
|
|
850
860
|
|
|
851
|
-
context 'when the criteria has a collation'
|
|
861
|
+
context 'when the criteria has a collation' do
|
|
862
|
+
min_server_version '3.4'
|
|
852
863
|
|
|
853
864
|
let!(:depeche_mode) do
|
|
854
865
|
Band.create(name: "Depeche Mode", years: 10)
|
|
@@ -49,8 +49,17 @@ describe Mongoid::Contextual::GeoNear do
|
|
|
49
49
|
described_class.new(collection, criteria, [ 52, 13 ])
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
let(:expected_value) do
|
|
53
|
+
if ClusterConfig.instance.fcv_ish == '4.0' && ClusterConfig.instance.topology == :sharded
|
|
54
|
+
# https://jira.mongodb.org/browse/SERVER-50074
|
|
55
|
+
0.0
|
|
56
|
+
else
|
|
57
|
+
nil
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "is nil except for 4.0 sharded when it is 0" do
|
|
62
|
+
expect(geo_near.average_distance).to be expected_value
|
|
54
63
|
end
|
|
55
64
|
end
|
|
56
65
|
end
|
|
@@ -78,6 +78,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
describe "#counts" do
|
|
81
|
+
max_server_version '4.2'
|
|
81
82
|
|
|
82
83
|
let(:criteria) do
|
|
83
84
|
Band.all
|
|
@@ -106,7 +107,8 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
106
107
|
end
|
|
107
108
|
|
|
108
109
|
it "iterates over the results" do
|
|
109
|
-
|
|
110
|
+
ordered_results = results.entries.sort_by { |doc| doc['_id'] }
|
|
111
|
+
expect(ordered_results.entries).to eq([
|
|
110
112
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
111
113
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
112
114
|
])
|
|
@@ -127,7 +129,8 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
127
129
|
end
|
|
128
130
|
|
|
129
131
|
it "iterates over the results" do
|
|
130
|
-
|
|
132
|
+
ordered_results = results.entries.sort_by { |doc| doc['_id'] }
|
|
133
|
+
expect(ordered_results).to eq(expected_results)
|
|
131
134
|
end
|
|
132
135
|
|
|
133
136
|
it 'outputs to the collection' do
|
|
@@ -147,6 +150,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
147
150
|
end
|
|
148
151
|
|
|
149
152
|
context "when the statstics are requested" do
|
|
153
|
+
max_server_version '4.2'
|
|
150
154
|
|
|
151
155
|
it "raises an error" do
|
|
152
156
|
expect {
|
|
@@ -191,14 +195,16 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
191
195
|
Band.where(name: 'DEPECHE MODE').collation(locale: 'en_US', strength: 2)
|
|
192
196
|
end
|
|
193
197
|
|
|
194
|
-
context 'when the server supports collations'
|
|
198
|
+
context 'when the server supports collations' do
|
|
199
|
+
min_server_version '3.4'
|
|
195
200
|
|
|
196
201
|
it 'applies the collation' do
|
|
197
202
|
expect(map_reduce.out(inline: 1).count).to eq(1)
|
|
198
203
|
end
|
|
199
204
|
end
|
|
200
205
|
|
|
201
|
-
context 'when the server does not support collations'
|
|
206
|
+
context 'when the server does not support collations' do
|
|
207
|
+
max_server_version '3.2'
|
|
202
208
|
|
|
203
209
|
it 'raises an exception' do
|
|
204
210
|
expect {
|
|
@@ -210,6 +216,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
210
216
|
end
|
|
211
217
|
|
|
212
218
|
describe "#emitted" do
|
|
219
|
+
max_server_version '4.2'
|
|
213
220
|
|
|
214
221
|
let(:emitted) do
|
|
215
222
|
map_reduce.out(inline: 1).emitted
|
|
@@ -261,6 +268,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
261
268
|
end
|
|
262
269
|
|
|
263
270
|
describe "#input" do
|
|
271
|
+
max_server_version '4.2'
|
|
264
272
|
|
|
265
273
|
let(:input) do
|
|
266
274
|
map_reduce.out(inline: 1).input
|
|
@@ -311,6 +319,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
311
319
|
end
|
|
312
320
|
|
|
313
321
|
describe "#output" do
|
|
322
|
+
max_server_version '4.2'
|
|
314
323
|
|
|
315
324
|
let(:output) do
|
|
316
325
|
map_reduce.out(inline: 1).output
|
|
@@ -343,12 +352,16 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
343
352
|
end
|
|
344
353
|
|
|
345
354
|
context 'when a read preference is defined' do
|
|
355
|
+
require_topology :replica_set
|
|
356
|
+
# On 4.4 it seems the server inserts on the primary, not on the server
|
|
357
|
+
# that executed the map/reduce.
|
|
358
|
+
max_server_version '4.2'
|
|
346
359
|
|
|
347
360
|
let(:criteria) do
|
|
348
361
|
Band.all.read(mode: :secondary)
|
|
349
362
|
end
|
|
350
363
|
|
|
351
|
-
it "uses the read preference"
|
|
364
|
+
it "uses the read preference" do
|
|
352
365
|
|
|
353
366
|
expect {
|
|
354
367
|
replace_map_reduce.raw
|
|
@@ -359,6 +372,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
359
372
|
end
|
|
360
373
|
|
|
361
374
|
describe "#reduced" do
|
|
375
|
+
max_server_version '4.2'
|
|
362
376
|
|
|
363
377
|
let(:reduced) do
|
|
364
378
|
map_reduce.out(inline: 1).reduced
|
|
@@ -389,6 +403,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
389
403
|
end
|
|
390
404
|
|
|
391
405
|
describe "#time" do
|
|
406
|
+
max_server_version '4.2'
|
|
392
407
|
|
|
393
408
|
let(:time) do
|
|
394
409
|
map_reduce.out(inline: 1).time
|