mongoid 4.0.2 → 5.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +66 -1
- data/README.md +14 -13
- data/lib/config/locales/en.yml +28 -28
- data/lib/mongoid.rb +28 -21
- data/lib/mongoid/atomic.rb +2 -4
- data/lib/mongoid/attributes.rb +7 -7
- data/lib/mongoid/attributes/processing.rb +4 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/changeable.rb +4 -6
- data/lib/mongoid/clients.rb +142 -0
- data/lib/mongoid/clients/factory.rb +78 -0
- data/lib/mongoid/{sessions → clients}/options.rb +30 -19
- data/lib/mongoid/{sessions → clients}/storage_options.rb +27 -13
- data/lib/mongoid/{sessions → clients}/thread_options.rb +6 -3
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/{sessions → clients}/validators/storage.rb +5 -2
- data/lib/mongoid/composable.rb +3 -3
- data/lib/mongoid/config.rb +39 -41
- data/lib/mongoid/config/environment.rb +1 -1
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config/validators/{session.rb → client.rb} +31 -28
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +11 -11
- data/lib/mongoid/contextual/command.rb +9 -6
- data/lib/mongoid/contextual/geo_near.rb +17 -1
- data/lib/mongoid/contextual/map_reduce.rb +12 -11
- data/lib/mongoid/contextual/memory.rb +2 -5
- data/lib/mongoid/contextual/mongo.rb +92 -82
- data/lib/mongoid/contextual/none.rb +13 -0
- data/lib/mongoid/copyable.rb +6 -1
- data/lib/mongoid/criteria.rb +36 -3
- data/lib/mongoid/document.rb +3 -4
- data/lib/mongoid/errors.rb +6 -6
- data/lib/mongoid/errors/{mixed_session_configuration.rb → mixed_client_configuration.rb} +5 -5
- data/lib/mongoid/errors/no_client_config.rb +22 -0
- data/lib/mongoid/errors/{no_session_database.rb → no_client_database.rb} +4 -4
- data/lib/mongoid/errors/{no_session_hosts.rb → no_client_hosts.rb} +4 -4
- data/lib/mongoid/errors/{no_sessions_config.rb → no_clients_config.rb} +4 -4
- data/lib/mongoid/errors/no_default_client.rb +23 -0
- data/lib/mongoid/extensions/hash.rb +5 -1
- data/lib/mongoid/extensions/object.rb +3 -2
- data/lib/mongoid/extensions/set.rb +5 -5
- data/lib/mongoid/factory.rb +4 -2
- data/lib/mongoid/fields.rb +7 -2
- data/lib/mongoid/findable.rb +4 -1
- data/lib/mongoid/indexable.rb +15 -9
- data/lib/mongoid/persistable.rb +1 -2
- data/lib/mongoid/persistable/creatable.rb +2 -2
- data/lib/mongoid/persistable/deletable.rb +3 -3
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/poppable.rb +1 -1
- data/lib/mongoid/persistable/pullable.rb +2 -2
- data/lib/mongoid/persistable/pushable.rb +2 -2
- data/lib/mongoid/persistable/renamable.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +1 -1
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/query_cache.rb +98 -104
- data/lib/mongoid/railtie.rb +1 -21
- data/lib/mongoid/railties/database.rake +1 -1
- data/lib/mongoid/relations/builders.rb +3 -1
- data/lib/mongoid/relations/counter_cache.rb +1 -1
- data/lib/mongoid/relations/embedded/batchable.rb +3 -10
- data/lib/mongoid/relations/embedded/many.rb +4 -2
- data/lib/mongoid/relations/many.rb +1 -0
- data/lib/mongoid/relations/proxy.rb +6 -6
- data/lib/mongoid/relations/referenced/many.rb +2 -1
- data/lib/mongoid/relations/targets/enumerable.rb +11 -11
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/scopable.rb +6 -17
- data/lib/mongoid/selectable.rb +1 -36
- data/lib/mongoid/serializable.rb +2 -2
- data/lib/mongoid/stateful.rb +0 -1
- data/lib/mongoid/tasks/database.rake +2 -2
- data/lib/mongoid/tasks/database.rb +23 -16
- data/lib/mongoid/threaded.rb +54 -33
- data/lib/mongoid/threaded/lifecycle.rb +21 -16
- data/lib/mongoid/traversable.rb +16 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/queryable.rb +1 -1
- data/lib/mongoid/validatable/uniqueness.rb +3 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +91 -57
- data/lib/rails/mongoid.rb +2 -2
- data/spec/app/models/audio.rb +1 -1
- data/spec/app/models/band.rb +1 -0
- data/spec/app/models/company.rb +5 -0
- data/spec/app/models/label.rb +7 -0
- data/spec/app/models/pub.rb +6 -0
- data/spec/app/models/staff.rb +7 -0
- data/spec/app/models/store_as_dup_test1.rb +5 -0
- data/spec/app/models/store_as_dup_test2.rb +5 -0
- data/spec/config/mongoid.yml +7 -25
- data/spec/mongoid/atomic/paths_spec.rb +3 -11
- data/spec/mongoid/attributes/nested_spec.rb +16 -16
- data/spec/mongoid/attributes/readonly_spec.rb +80 -18
- data/spec/mongoid/attributes_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +70 -0
- data/spec/mongoid/clients/factory_spec.rb +284 -0
- data/spec/mongoid/{sessions → clients}/options_spec.rb +4 -6
- data/spec/mongoid/clients_spec.rb +739 -0
- data/spec/mongoid/config/environment_spec.rb +14 -11
- data/spec/mongoid/config_spec.rb +33 -48
- data/spec/mongoid/contextual/atomic_spec.rb +1 -17
- data/spec/mongoid/contextual/geo_near_spec.rb +35 -0
- data/spec/mongoid/contextual/mongo_spec.rb +26 -83
- data/spec/mongoid/contextual/none_spec.rb +15 -0
- data/spec/mongoid/copyable_spec.rb +35 -1
- data/spec/mongoid/criteria/findable_spec.rb +197 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +7 -29
- data/spec/mongoid/criteria_spec.rb +74 -91
- data/spec/mongoid/document_spec.rb +1 -1
- data/spec/mongoid/errors/{mixed_session_configuration_spec.rb → mixed_client_configuration_spec.rb} +1 -1
- data/spec/mongoid/errors/{no_session_config_spec.rb → no_client_config_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_database_spec.rb → no_client_database_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_hosts_spec.rb → no_client_hosts_spec.rb} +3 -3
- data/spec/mongoid/errors/{no_sessions_config_spec.rb → no_clients_config_spec.rb} +2 -2
- data/spec/mongoid/fields/localized_spec.rb +1 -0
- data/spec/mongoid/fields_spec.rb +1 -0
- data/spec/mongoid/findable_spec.rb +2 -23
- data/spec/mongoid/indexable_spec.rb +12 -8
- data/spec/mongoid/interceptable_spec.rb +15 -0
- data/spec/mongoid/persistable/settable_spec.rb +16 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -2
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/query_cache_spec.rb +13 -8
- data/spec/mongoid/relations/auto_save_spec.rb +1 -1
- data/spec/mongoid/relations/counter_cache_spec.rb +34 -0
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +9 -0
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +3 -3
- data/spec/mongoid/relations/embedded/many_spec.rb +123 -1
- data/spec/mongoid/relations/embedded/one_spec.rb +3 -3
- data/spec/mongoid/relations/proxy_spec.rb +28 -0
- data/spec/mongoid/relations/referenced/in_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +47 -23
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/one_spec.rb +1 -1
- data/spec/mongoid/relations/targets/enumerable_spec.rb +9 -2
- data/spec/mongoid/reloadable_spec.rb +6 -6
- data/spec/mongoid/scopable_spec.rb +41 -28
- data/spec/mongoid/selectable_spec.rb +6 -16
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +2 -2
- data/spec/mongoid/threaded_spec.rb +0 -7
- data/spec/mongoid/traversable_spec.rb +2 -2
- data/spec/mongoid/validatable/uniqueness_spec.rb +30 -1
- data/spec/mongoid_spec.rb +13 -15
- data/spec/rails/mongoid_spec.rb +13 -4
- data/spec/spec_helper.rb +44 -27
- data/spec/support/authorization.rb +12 -0
- data/spec/support/expectations.rb +14 -0
- metadata +52 -59
- data/lib/mongoid/contextual/find_and_modify.rb +0 -69
- data/lib/mongoid/contextual/text_search.rb +0 -178
- data/lib/mongoid/criteria/#findable.rb# +0 -141
- data/lib/mongoid/errors/no_default_session.rb +0 -23
- data/lib/mongoid/errors/no_session_config.rb +0 -22
- data/lib/mongoid/log_subscriber.rb +0 -55
- data/lib/mongoid/positional.rb +0 -71
- data/lib/mongoid/sessions.rb +0 -125
- data/lib/mongoid/sessions/factory.rb +0 -131
- data/lib/mongoid/sessions/mongo_uri.rb +0 -93
- data/lib/mongoid/sessions/validators.rb +0 -2
- data/lib/mongoid/support/query_counter.rb +0 -23
- data/spec/helpers.rb +0 -18
- data/spec/mongoid/#atomic_spec.rb# +0 -365
- data/spec/mongoid/contextual/find_and_modify_spec.rb +0 -220
- data/spec/mongoid/contextual/text_search_spec.rb +0 -209
- data/spec/mongoid/log_subscriber_spec.rb +0 -75
- data/spec/mongoid/positional_spec.rb +0 -222
- data/spec/mongoid/sessions/factory_spec.rb +0 -333
- data/spec/mongoid/sessions/mongo_uri_spec.rb +0 -103
- data/spec/mongoid/sessions_spec.rb +0 -1252
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Mongoid::Errors::
|
3
|
+
describe Mongoid::Errors::NoClientConfig do
|
4
4
|
|
5
5
|
describe "#message" do
|
6
6
|
|
@@ -10,19 +10,19 @@ describe Mongoid::Errors::NoSessionConfig do
|
|
10
10
|
|
11
11
|
it "contains the problem in the message" do
|
12
12
|
expect(error.message).to include(
|
13
|
-
"No configuration could be found for a
|
13
|
+
"No configuration could be found for a client named 'secondary'."
|
14
14
|
)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "contains the summary in the message" do
|
18
18
|
expect(error.message).to include(
|
19
|
-
"When attempting to create the new
|
19
|
+
"When attempting to create the new client, Mongoid could not find a client"
|
20
20
|
)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "contains the resolution in the message" do
|
24
24
|
expect(error.message).to include(
|
25
|
-
"Double check your mongoid.yml to make sure under the
|
25
|
+
"Double check your mongoid.yml to make sure under the clients"
|
26
26
|
)
|
27
27
|
end
|
28
28
|
end
|
@@ -1,22 +1,22 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Mongoid::Errors::
|
3
|
+
describe Mongoid::Errors::NoClientDatabase do
|
4
4
|
|
5
5
|
describe "#message" do
|
6
6
|
|
7
7
|
let(:error) do
|
8
|
-
described_class.new(:secondary, { hosts: [ "
|
8
|
+
described_class.new(:secondary, { hosts: [ "127.0.0.1:27017" ] })
|
9
9
|
end
|
10
10
|
|
11
11
|
it "contains the problem in the message" do
|
12
12
|
expect(error.message).to include(
|
13
|
-
"No database provided for
|
13
|
+
"No database provided for client configuration: :secondary."
|
14
14
|
)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "contains the summary in the message" do
|
18
18
|
expect(error.message).to include(
|
19
|
-
"Each
|
19
|
+
"Each client configuration must provide a database so Mongoid"
|
20
20
|
)
|
21
21
|
end
|
22
22
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Mongoid::Errors::
|
3
|
+
describe Mongoid::Errors::NoClientHosts do
|
4
4
|
|
5
5
|
describe "#message" do
|
6
6
|
|
@@ -10,13 +10,13 @@ describe Mongoid::Errors::NoSessionHosts do
|
|
10
10
|
|
11
11
|
it "contains the problem in the message" do
|
12
12
|
expect(error.message).to include(
|
13
|
-
"No hosts provided for
|
13
|
+
"No hosts provided for client configuration: :secondary."
|
14
14
|
)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "contains the summary in the message" do
|
18
18
|
expect(error.message).to include(
|
19
|
-
"Each
|
19
|
+
"Each client configuration must provide hosts so Mongoid"
|
20
20
|
)
|
21
21
|
end
|
22
22
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Mongoid::Errors::
|
3
|
+
describe Mongoid::Errors::NoClientsConfig do
|
4
4
|
|
5
5
|
describe "#message" do
|
6
6
|
|
@@ -10,7 +10,7 @@ describe Mongoid::Errors::NoSessionsConfig do
|
|
10
10
|
|
11
11
|
it "contains the problem in the message" do
|
12
12
|
expect(error.message).to include(
|
13
|
-
"No
|
13
|
+
"No clients configuration provided."
|
14
14
|
)
|
15
15
|
end
|
16
16
|
|
data/spec/mongoid/fields_spec.rb
CHANGED
@@ -40,14 +40,14 @@ describe Mongoid::Findable do
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
describe ".
|
43
|
+
describe ".find_one_and_update" do
|
44
44
|
|
45
45
|
let!(:person) do
|
46
46
|
Person.create(title: "Senior")
|
47
47
|
end
|
48
48
|
|
49
49
|
it "returns the document" do
|
50
|
-
expect(Person.
|
50
|
+
expect(Person.find_one_and_update(title: "Junior")).to eq(person)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -485,25 +485,4 @@ describe Mongoid::Findable do
|
|
485
485
|
end
|
486
486
|
end
|
487
487
|
end
|
488
|
-
|
489
|
-
describe "#text_search" do
|
490
|
-
|
491
|
-
before do
|
492
|
-
Word.with(database: "admin").mongo_session.command(setParameter: 1, textSearchEnabled: true)
|
493
|
-
Word.create_indexes
|
494
|
-
Word.create!(name: "phase", origin: "latin")
|
495
|
-
end
|
496
|
-
|
497
|
-
after(:all) do
|
498
|
-
Word.remove_indexes
|
499
|
-
end
|
500
|
-
|
501
|
-
let(:search) do
|
502
|
-
Word.text_search("phase")
|
503
|
-
end
|
504
|
-
|
505
|
-
it "returns all fields" do
|
506
|
-
expect(search.first.origin).to eq("latin")
|
507
|
-
end
|
508
|
-
end
|
509
488
|
end
|
@@ -41,13 +41,13 @@ describe Mongoid::Indexable do
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
context "when database specific options exist" do
|
44
|
+
context "when database specific options exist", if: non_legacy_server? do
|
45
45
|
|
46
46
|
let(:klass) do
|
47
47
|
Class.new do
|
48
48
|
include Mongoid::Document
|
49
49
|
store_in collection: "test_db_remove"
|
50
|
-
index({ test: 1 }, { database: "
|
50
|
+
index({ test: 1 }, { database: "mongoid_optional" })
|
51
51
|
index({ name: 1 }, { background: true })
|
52
52
|
end
|
53
53
|
end
|
@@ -58,7 +58,7 @@ describe Mongoid::Indexable do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
let(:indexes) do
|
61
|
-
klass.with(database: "
|
61
|
+
klass.with(database: "mongoid_optional").collection.indexes
|
62
62
|
end
|
63
63
|
|
64
64
|
it "creates the indexes" do
|
@@ -84,17 +84,17 @@ describe Mongoid::Indexable do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
it "creates the indexes" do
|
87
|
-
expect(klass.collection.indexes
|
87
|
+
expect(klass.collection.indexes.get(_type: 1)).to_not be_nil
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
-
context "when database options are specified" do
|
91
|
+
context "when database options are specified", if: non_legacy_server? do
|
92
92
|
|
93
93
|
let(:klass) do
|
94
94
|
Class.new do
|
95
95
|
include Mongoid::Document
|
96
96
|
store_in collection: "test_db_indexes"
|
97
|
-
index({ _type: 1 }, { database: "
|
97
|
+
index({ _type: 1 }, { database: "mongoid_optional" })
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
@@ -102,12 +102,16 @@ describe Mongoid::Indexable do
|
|
102
102
|
klass.create_indexes
|
103
103
|
end
|
104
104
|
|
105
|
+
after do
|
106
|
+
klass.remove_indexes
|
107
|
+
end
|
108
|
+
|
105
109
|
let(:indexes) do
|
106
|
-
klass.with(database: "
|
110
|
+
klass.with(database: "mongoid_optional").collection.indexes
|
107
111
|
end
|
108
112
|
|
109
113
|
it "creates the indexes" do
|
110
|
-
expect(indexes
|
114
|
+
expect(indexes.get(_type: 1)).to_not be_nil
|
111
115
|
end
|
112
116
|
end
|
113
117
|
end
|
@@ -929,6 +929,21 @@ describe Mongoid::Interceptable do
|
|
929
929
|
expect(band.reload.records.first.before_save_called).to be true
|
930
930
|
end
|
931
931
|
end
|
932
|
+
|
933
|
+
context "when the child is created" do
|
934
|
+
|
935
|
+
let!(:band) do
|
936
|
+
Band.create
|
937
|
+
end
|
938
|
+
|
939
|
+
let!(:label) do
|
940
|
+
band.create_label(name: 'Label')
|
941
|
+
end
|
942
|
+
|
943
|
+
it "only executes callback once" do
|
944
|
+
expect(label.before_save_count).to be 1
|
945
|
+
end
|
946
|
+
end
|
932
947
|
end
|
933
948
|
|
934
949
|
describe "#before_update" do
|
@@ -159,4 +159,20 @@ describe Mongoid::Persistable::Settable do
|
|
159
159
|
expect(person.reload.somethingnew).to eq "somethingnew"
|
160
160
|
end
|
161
161
|
end
|
162
|
+
|
163
|
+
context "with an attribute with private setter" do
|
164
|
+
let(:agent) do
|
165
|
+
Agent.create
|
166
|
+
end
|
167
|
+
|
168
|
+
let(:title) do
|
169
|
+
"Double-Oh Seven"
|
170
|
+
end
|
171
|
+
|
172
|
+
it "updates the attribute" do
|
173
|
+
agent.singleton_class.send :private, :title=
|
174
|
+
agent.set(title: title)
|
175
|
+
expect(agent.reload.title).to eq title
|
176
|
+
end
|
177
|
+
end
|
162
178
|
end
|
@@ -217,6 +217,7 @@ describe Mongoid::Persistable::Updatable do
|
|
217
217
|
end
|
218
218
|
|
219
219
|
before do
|
220
|
+
I18n.enforce_available_locales = false
|
220
221
|
::I18n.locale = :de
|
221
222
|
product.update_attribute(:description, "Die Bombe")
|
222
223
|
end
|
@@ -283,7 +284,7 @@ describe Mongoid::Persistable::Updatable do
|
|
283
284
|
it "raises an error" do
|
284
285
|
expect {
|
285
286
|
person.update_attributes(map: { "bad.key" => "value" })
|
286
|
-
}.to raise_error(
|
287
|
+
}.to raise_error(Mongo::Error::OperationFailure)
|
287
288
|
end
|
288
289
|
end
|
289
290
|
|
@@ -319,7 +320,7 @@ describe Mongoid::Persistable::Updatable do
|
|
319
320
|
it "raises an error" do
|
320
321
|
expect {
|
321
322
|
person.send(method, map: { "bad.key" => "value" })
|
322
|
-
}.to raise_error(
|
323
|
+
}.to raise_error(Mongo::Error::OperationFailure)
|
323
324
|
end
|
324
325
|
end
|
325
326
|
|
@@ -61,7 +61,7 @@ describe Mongoid::Persistable do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
before do
|
64
|
-
expect_any_instance_of(
|
64
|
+
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
|
65
65
|
end
|
66
66
|
|
67
67
|
let!(:update) do
|
@@ -88,7 +88,7 @@ describe Mongoid::Persistable do
|
|
88
88
|
end
|
89
89
|
|
90
90
|
before do
|
91
|
-
expect_any_instance_of(
|
91
|
+
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
|
92
92
|
end
|
93
93
|
|
94
94
|
let!(:update) do
|
@@ -116,7 +116,7 @@ describe Mongoid::Persistable do
|
|
116
116
|
end
|
117
117
|
|
118
118
|
before do
|
119
|
-
expect_any_instance_of(
|
119
|
+
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
|
120
120
|
end
|
121
121
|
|
122
122
|
let!(:update) do
|
@@ -153,7 +153,7 @@ describe Mongoid::Persistable do
|
|
153
153
|
end
|
154
154
|
|
155
155
|
before do
|
156
|
-
expect_any_instance_of(
|
156
|
+
expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
|
157
157
|
end
|
158
158
|
|
159
159
|
let!(:update) do
|
@@ -15,7 +15,7 @@ describe Mongoid::QueryCache do
|
|
15
15
|
Band.all.send(method)
|
16
16
|
end
|
17
17
|
|
18
|
-
context "when query cache
|
18
|
+
context "when query cache is disabled" do
|
19
19
|
|
20
20
|
before do
|
21
21
|
Mongoid::QueryCache.enabled = false
|
@@ -54,7 +54,7 @@ describe Mongoid::QueryCache do
|
|
54
54
|
Band.all.to_a
|
55
55
|
end
|
56
56
|
|
57
|
-
context "when query cache
|
57
|
+
context "when query cache is disabled" do
|
58
58
|
|
59
59
|
before do
|
60
60
|
Mongoid::QueryCache.enabled = false
|
@@ -76,20 +76,24 @@ describe Mongoid::QueryCache do
|
|
76
76
|
end
|
77
77
|
|
78
78
|
context "when querying only the first" do
|
79
|
-
|
79
|
+
|
80
|
+
let(:game) do
|
81
|
+
Game.create!(name: "2048")
|
82
|
+
end
|
80
83
|
|
81
84
|
before do
|
82
85
|
game.ratings.where(:value.gt => 5).asc(:id).all.to_a
|
83
86
|
end
|
84
87
|
|
85
|
-
it "
|
86
|
-
|
88
|
+
it "does not query again" do
|
89
|
+
expect_no_queries do
|
87
90
|
game.ratings.where(:value.gt => 5).asc(:id).first
|
88
91
|
end
|
89
92
|
end
|
90
93
|
end
|
91
94
|
|
92
|
-
context "limiting the result" do
|
95
|
+
context "when limiting the result" do
|
96
|
+
|
93
97
|
it "queries again" do
|
94
98
|
expect_query(1) do
|
95
99
|
Band.limit(2).all.to_a
|
@@ -97,7 +101,8 @@ describe Mongoid::QueryCache do
|
|
97
101
|
end
|
98
102
|
end
|
99
103
|
|
100
|
-
context "specifying a different skip value" do
|
104
|
+
context "when specifying a different skip value" do
|
105
|
+
|
101
106
|
before do
|
102
107
|
Band.limit(2).skip(1).all.to_a
|
103
108
|
end
|
@@ -213,7 +218,7 @@ describe Mongoid::QueryCache do
|
|
213
218
|
|
214
219
|
it "does not cache the query" do
|
215
220
|
expect(Mongoid::QueryCache).to receive(:cache_table).never
|
216
|
-
Band.collection.indexes.
|
221
|
+
Band.collection.indexes.create_one(name: 1)
|
217
222
|
end
|
218
223
|
end
|
219
224
|
end
|
@@ -287,4 +287,38 @@ describe Mongoid::Relations::CounterCache do
|
|
287
287
|
end
|
288
288
|
end
|
289
289
|
end
|
290
|
+
|
291
|
+
describe "#add_counter_cache_callbacks" do
|
292
|
+
|
293
|
+
let(:person) do
|
294
|
+
Person.create
|
295
|
+
end
|
296
|
+
|
297
|
+
let!(:drug) do
|
298
|
+
person.drugs.create
|
299
|
+
end
|
300
|
+
|
301
|
+
context "when parent is not frozen" do
|
302
|
+
|
303
|
+
before do
|
304
|
+
drug.destroy
|
305
|
+
end
|
306
|
+
|
307
|
+
it "before_destroy updates counter cache" do
|
308
|
+
expect(person.drugs_count).to eq(0)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
context "when parent is frozen" do
|
313
|
+
|
314
|
+
before do
|
315
|
+
person.destroy
|
316
|
+
drug.destroy
|
317
|
+
end
|
318
|
+
|
319
|
+
it "before_destroy doesn't update counter cache" do
|
320
|
+
expect(person.drugs_count).to eq(1)
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
290
324
|
end
|