mongoid 5.4.1 → 6.0.0.beta
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/config/locales/en.yml +23 -16
- data/lib/mongoid.rb +4 -9
- data/lib/mongoid/atomic.rb +1 -1
- data/lib/mongoid/atomic/modifiers.rb +8 -12
- data/lib/mongoid/attributes.rb +9 -11
- data/lib/mongoid/attributes/dynamic.rb +5 -6
- data/lib/mongoid/attributes/nested.rb +1 -1
- data/lib/mongoid/attributes/processing.rb +4 -0
- data/lib/mongoid/attributes/readonly.rb +22 -0
- data/lib/mongoid/cacheable.rb +36 -0
- data/lib/mongoid/changeable.rb +37 -1
- data/lib/mongoid/clients.rb +0 -63
- data/lib/mongoid/clients/factory.rb +0 -2
- data/lib/mongoid/clients/options.rb +54 -249
- data/lib/mongoid/clients/storage_options.rb +1 -69
- data/lib/mongoid/composable.rb +26 -2
- data/lib/mongoid/config.rb +1 -1
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +6 -9
- data/lib/mongoid/contextual/geo_near.rb +2 -3
- data/lib/mongoid/contextual/map_reduce.rb +97 -24
- data/lib/mongoid/contextual/memory.rb +7 -4
- data/lib/mongoid/contextual/mongo.rb +63 -54
- data/lib/mongoid/contextual/none.rb +2 -2
- data/lib/mongoid/copyable.rb +19 -19
- data/lib/mongoid/criteria.rb +5 -4
- data/lib/mongoid/criteria/findable.rb +2 -3
- data/lib/mongoid/criteria/includable.rb +63 -16
- data/lib/mongoid/criteria/marshalable.rb +2 -2
- data/lib/mongoid/criteria/modifiable.rb +17 -1
- data/lib/mongoid/criteria/options.rb +25 -0
- data/lib/mongoid/criteria/queryable.rb +86 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
- data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
- data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +45 -0
- data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
- data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
- data/lib/mongoid/criteria/queryable/key.rb +103 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +271 -0
- data/lib/mongoid/criteria/queryable/optional.rb +411 -0
- data/lib/mongoid/criteria/queryable/options.rb +136 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +662 -0
- data/lib/mongoid/criteria/queryable/selector.rb +196 -0
- data/lib/mongoid/criteria/queryable/smash.rb +103 -0
- data/lib/mongoid/document.rb +9 -23
- data/lib/mongoid/errors.rb +2 -1
- data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +2 -2
- data/lib/mongoid/errors/invalid_field.rb +2 -2
- data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
- data/lib/mongoid/errors/invalid_relation.rb +66 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/evolvable.rb +1 -1
- data/lib/mongoid/extensions.rb +0 -5
- data/lib/mongoid/extensions/big_decimal.rb +17 -8
- data/lib/mongoid/extensions/date.rb +4 -1
- data/lib/mongoid/extensions/hash.rb +2 -3
- data/lib/mongoid/extensions/object.rb +2 -2
- data/lib/mongoid/extensions/string.rb +4 -3
- data/lib/mongoid/extensions/time.rb +5 -2
- data/lib/mongoid/factory.rb +1 -0
- data/lib/mongoid/fields/foreign_key.rb +2 -2
- data/lib/mongoid/fields/localized.rb +3 -8
- data/lib/mongoid/fields/validators/macro.rb +18 -0
- data/lib/mongoid/findable.rb +3 -3
- data/lib/mongoid/indexable.rb +17 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +1 -2
- data/lib/mongoid/interceptable.rb +6 -17
- data/lib/mongoid/loggable.rb +1 -1
- data/lib/mongoid/matchable.rb +3 -10
- data/lib/mongoid/matchable/gt.rb +2 -0
- data/lib/mongoid/matchable/gte.rb +2 -0
- data/lib/mongoid/matchable/lt.rb +2 -0
- data/lib/mongoid/matchable/lte.rb +2 -0
- data/lib/mongoid/persistable.rb +6 -5
- data/lib/mongoid/persistable/creatable.rb +2 -0
- data/lib/mongoid/persistable/deletable.rb +7 -3
- data/lib/mongoid/persistable/settable.rb +3 -16
- data/lib/mongoid/persistable/updatable.rb +10 -12
- data/lib/mongoid/persistence_context.rb +216 -0
- data/lib/mongoid/query_cache.rb +5 -30
- data/lib/mongoid/relations/accessors.rb +6 -2
- data/lib/mongoid/relations/auto_save.rb +12 -4
- data/lib/mongoid/relations/bindings/embedded/in.rb +4 -0
- data/lib/mongoid/relations/bindings/embedded/many.rb +8 -1
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -0
- data/lib/mongoid/relations/bindings/referenced/many.rb +4 -0
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/counter_cache.rb +28 -18
- data/lib/mongoid/relations/eager.rb +19 -7
- data/lib/mongoid/relations/eager/base.rb +5 -5
- data/lib/mongoid/relations/embedded/batchable.rb +9 -33
- data/lib/mongoid/relations/embedded/in.rb +16 -2
- data/lib/mongoid/relations/embedded/many.rb +23 -8
- data/lib/mongoid/relations/embedded/one.rb +17 -2
- data/lib/mongoid/relations/macros.rb +9 -2
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/nested_builder.rb +1 -1
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/proxy.rb +2 -33
- data/lib/mongoid/relations/referenced/in.rb +23 -11
- data/lib/mongoid/relations/referenced/many.rb +24 -16
- data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
- data/lib/mongoid/relations/referenced/one.rb +17 -1
- data/lib/mongoid/relations/reflections.rb +3 -5
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +2 -3
- data/lib/mongoid/tasks/database.rb +1 -2
- data/lib/mongoid/threaded.rb +4 -4
- data/lib/mongoid/traversable.rb +1 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +2 -4
- data/lib/mongoid/validatable/uniqueness.rb +1 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -7
- data/spec/app/models/album.rb +5 -1
- data/spec/app/models/artist.rb +21 -0
- data/spec/app/models/band.rb +0 -1
- data/spec/app/models/church.rb +0 -2
- data/spec/app/models/ordered_post.rb +5 -0
- data/spec/app/models/oscar.rb +1 -2
- data/spec/app/models/person.rb +3 -1
- data/spec/app/models/post.rb +0 -1
- data/spec/app/models/princess.rb +2 -0
- data/spec/app/models/record.rb +1 -0
- data/spec/app/models/thing.rb +1 -1
- data/spec/config/mongoid.yml +1 -5
- data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
- data/spec/mongoid/atomic_spec.rb +17 -17
- data/spec/mongoid/attributes/nested_spec.rb +14 -14
- data/spec/mongoid/attributes/readonly_spec.rb +87 -44
- data/spec/mongoid/attributes_spec.rb +63 -0
- data/spec/mongoid/cacheable_spec.rb +112 -0
- data/spec/mongoid/changeable_spec.rb +58 -0
- data/spec/mongoid/clients/factory_spec.rb +3 -11
- data/spec/mongoid/clients/options_spec.rb +378 -96
- data/spec/mongoid/clients_spec.rb +207 -170
- data/spec/mongoid/composable_spec.rb +7 -0
- data/spec/mongoid/config_spec.rb +41 -21
- data/spec/mongoid/contextual/atomic_spec.rb +77 -343
- data/spec/mongoid/contextual/map_reduce_spec.rb +119 -111
- data/spec/mongoid/contextual/memory_spec.rb +56 -316
- data/spec/mongoid/contextual/mongo_spec.rb +104 -378
- data/spec/mongoid/copyable_spec.rb +8 -15
- data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
- data/spec/mongoid/criteria/options_spec.rb +29 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
- data/spec/mongoid/{extensions/origin/regexp_raw_spec.rb → criteria/queryable/extensions/regexp_spec.rb} +21 -20
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1786 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +4159 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +778 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
- data/spec/mongoid/criteria_spec.rb +45 -63
- data/spec/mongoid/document_spec.rb +21 -88
- data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +320 -18
- data/spec/mongoid/extensions/date_spec.rb +2 -6
- data/spec/mongoid/extensions/date_time_spec.rb +2 -6
- data/spec/mongoid/extensions/float_spec.rb +8 -1
- data/spec/mongoid/extensions/integer_spec.rb +8 -1
- data/spec/mongoid/extensions/object_spec.rb +11 -0
- data/spec/mongoid/extensions/string_spec.rb +21 -0
- data/spec/mongoid/extensions/time_spec.rb +4 -8
- data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
- data/spec/mongoid/fields/localized_spec.rb +0 -91
- data/spec/mongoid/findable_spec.rb +46 -1
- data/spec/mongoid/indexable_spec.rb +6 -46
- data/spec/mongoid/interceptable_spec.rb +49 -10
- data/spec/mongoid/matchable/gt_spec.rb +11 -0
- data/spec/mongoid/matchable/gte_spec.rb +10 -0
- data/spec/mongoid/matchable/lt_spec.rb +11 -0
- data/spec/mongoid/matchable/lte_spec.rb +11 -0
- data/spec/mongoid/matchable_spec.rb +1 -51
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +1 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
- data/spec/mongoid/persistable/savable_spec.rb +30 -30
- data/spec/mongoid/persistable/settable_spec.rb +0 -185
- data/spec/mongoid/persistable/updatable_spec.rb +166 -5
- data/spec/mongoid/persistence_context_spec.rb +654 -0
- data/spec/mongoid/positional_spec.rb +10 -10
- data/spec/mongoid/query_cache_spec.rb +89 -65
- data/spec/mongoid/relations/accessors_spec.rb +1 -1
- data/spec/mongoid/relations/auto_save_spec.rb +39 -6
- data/spec/mongoid/relations/builders_spec.rb +37 -10
- data/spec/mongoid/relations/counter_cache_spec.rb +64 -15
- data/spec/mongoid/relations/cyclic_spec.rb +0 -22
- data/spec/mongoid/relations/embedded/many_spec.rb +9 -41
- data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
- data/spec/mongoid/relations/macros_spec.rb +395 -7
- data/spec/mongoid/relations/proxy_spec.rb +3 -1
- data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +6 -29
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +6 -29
- data/spec/mongoid/relations/reflections_spec.rb +9 -9
- data/spec/mongoid/reloadable_spec.rb +51 -0
- data/spec/mongoid/scopable_spec.rb +0 -12
- data/spec/mongoid/serializable_spec.rb +0 -50
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +16 -9
- data/spec/mongoid/validatable_spec.rb +16 -0
- data/spec/spec_helper.rb +10 -10
- metadata +536 -479
- metadata.gz.sig +0 -0
- data/lib/mongoid/clients/thread_options.rb +0 -19
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -20
- data/lib/mongoid/extensions/decimal128.rb +0 -39
- data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/spec/app/models/post_genre.rb +0 -6
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -44
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
@@ -17,8 +17,8 @@ describe Mongoid::Positional do
|
|
17
17
|
"children.0.field" => "value",
|
18
18
|
"children.0.children.1.children.3.field" => "value"
|
19
19
|
},
|
20
|
-
"$
|
21
|
-
"children.0.children.1.children.3.fields" =>
|
20
|
+
"$pushAll" => {
|
21
|
+
"children.0.children.1.children.3.fields" => [ "value", "value" ]
|
22
22
|
}
|
23
23
|
}
|
24
24
|
end
|
@@ -113,8 +113,8 @@ describe Mongoid::Positional do
|
|
113
113
|
"children.$.field" => "value",
|
114
114
|
"children.0.children.1.children.3.field" => "value"
|
115
115
|
},
|
116
|
-
"$
|
117
|
-
"children.0.children.1.children.3.fields" =>
|
116
|
+
"$pushAll" => {
|
117
|
+
"children.0.children.1.children.3.fields" => [ "value", "value" ]
|
118
118
|
}
|
119
119
|
}
|
120
120
|
end
|
@@ -141,8 +141,8 @@ describe Mongoid::Positional do
|
|
141
141
|
"children.0.field" => "value",
|
142
142
|
"children.0.children.1.children.3.field" => "value"
|
143
143
|
},
|
144
|
-
"$
|
145
|
-
"children.0.children.1.children.3.fields" =>
|
144
|
+
"$pushAll" => {
|
145
|
+
"children.0.children.1.children.3.fields" => [ "value", "value" ]
|
146
146
|
}
|
147
147
|
}
|
148
148
|
end
|
@@ -170,8 +170,8 @@ describe Mongoid::Positional do
|
|
170
170
|
"children.$.field" => "value",
|
171
171
|
"children.0.children.1.children.3.field" => "value"
|
172
172
|
},
|
173
|
-
"$
|
174
|
-
"children.0.children.1.children.3.fields" =>
|
173
|
+
"$pushAll" => {
|
174
|
+
"children.0.children.1.children.3.fields" => [ "value", "value" ]
|
175
175
|
}
|
176
176
|
}
|
177
177
|
end
|
@@ -203,8 +203,8 @@ describe Mongoid::Positional do
|
|
203
203
|
"children.$.field" => "value",
|
204
204
|
"children.0.children.1.children.3.field" => "value"
|
205
205
|
},
|
206
|
-
"$
|
207
|
-
"children.0.children.1.children.3.fields" =>
|
206
|
+
"$pushAll" => {
|
207
|
+
"children.0.children.1.children.3.fields" => [ "value", "value" ]
|
208
208
|
}
|
209
209
|
}
|
210
210
|
end
|
@@ -7,6 +7,95 @@ describe Mongoid::QueryCache do
|
|
7
7
|
Mongoid::QueryCache.cache { spec.run }
|
8
8
|
end
|
9
9
|
|
10
|
+
context 'when iterating over objects sharing the same base' do
|
11
|
+
|
12
|
+
let(:server) do
|
13
|
+
relations.first.mongo_client.cluster.next_primary
|
14
|
+
end
|
15
|
+
|
16
|
+
before do
|
17
|
+
person = Person.create
|
18
|
+
3.times do
|
19
|
+
person.send(relation).create
|
20
|
+
end
|
21
|
+
person.save
|
22
|
+
end
|
23
|
+
|
24
|
+
let!(:relations) do
|
25
|
+
Person.first.send(relation).to_a
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when the association is has-many' do
|
29
|
+
|
30
|
+
let(:relation) do
|
31
|
+
:posts
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'when query cache is disabled' do
|
35
|
+
|
36
|
+
before do
|
37
|
+
Mongoid::QueryCache.enabled = false
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'queries for each access to the base' do
|
41
|
+
expect(server).to receive(:context).exactly(relations.size).times.and_call_original
|
42
|
+
relations.each do |object|
|
43
|
+
object.person
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when query cache is enabled' do
|
49
|
+
|
50
|
+
before do
|
51
|
+
Mongoid::QueryCache.enabled = true
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'queries only once for the base' do
|
55
|
+
expect(server).to receive(:context).exactly(1).times.and_call_original
|
56
|
+
relations.each do |object|
|
57
|
+
object.person
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when the association is embeds-many' do
|
64
|
+
|
65
|
+
let(:relation) do
|
66
|
+
:symptoms
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'when query cache is disabled' do
|
70
|
+
|
71
|
+
before do
|
72
|
+
Mongoid::QueryCache.enabled = false
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'does not query for access to the base' do
|
76
|
+
expect(server).to receive(:context).exactly(0).times.and_call_original
|
77
|
+
relations.each do |object|
|
78
|
+
object.person
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'when query cache is enabled' do
|
84
|
+
|
85
|
+
before do
|
86
|
+
Mongoid::QueryCache.enabled = true
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'does not query for access to the base' do
|
90
|
+
expect(server).to receive(:context).exactly(0).times.and_call_original
|
91
|
+
relations.each do |object|
|
92
|
+
object.person
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
10
99
|
context "when querying for a single document" do
|
11
100
|
|
12
101
|
[ :first, :one, :last ].each do |method|
|
@@ -75,40 +164,6 @@ describe Mongoid::QueryCache do
|
|
75
164
|
end
|
76
165
|
end
|
77
166
|
|
78
|
-
context 'when the first query has a collation', if: collation_supported? do
|
79
|
-
|
80
|
-
before do
|
81
|
-
Band.where(name: 'DEPECHE MODE').collation(locale: 'en_US', strength: 2).to_a
|
82
|
-
end
|
83
|
-
|
84
|
-
context "when the next query has the same collation" do
|
85
|
-
|
86
|
-
it "uses the cache" do
|
87
|
-
expect_no_queries do
|
88
|
-
Band.where(name: 'DEPECHE MODE').collation(locale: 'en_US', strength: 2).to_a
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context "when the next query does not have the same collation" do
|
94
|
-
|
95
|
-
it "queries again" do
|
96
|
-
expect_query(1) do
|
97
|
-
Band.where(name: 'DEPECHE MODE').collation(locale: 'fr', strength: 2).to_a
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
context "when the next query does not have a collation" do
|
103
|
-
|
104
|
-
it "queries again" do
|
105
|
-
expect_query(1) do
|
106
|
-
Band.where(name: 'DEPECHE MODE').to_a
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
167
|
context "when the first query has no limit" do
|
113
168
|
|
114
169
|
let(:game) do
|
@@ -305,37 +360,6 @@ describe Mongoid::QueryCache do
|
|
305
360
|
end
|
306
361
|
end
|
307
362
|
|
308
|
-
context "when reloading a document" do
|
309
|
-
|
310
|
-
let!(:band_id) do
|
311
|
-
Band.create.id
|
312
|
-
end
|
313
|
-
|
314
|
-
context 'when query cache is disabled' do
|
315
|
-
|
316
|
-
before do
|
317
|
-
Mongoid::QueryCache.enabled = false
|
318
|
-
end
|
319
|
-
|
320
|
-
it "queries again" do
|
321
|
-
band = Band.find(band_id)
|
322
|
-
expect_query(1) do
|
323
|
-
band.reload
|
324
|
-
end
|
325
|
-
end
|
326
|
-
end
|
327
|
-
|
328
|
-
context 'when query cache is enabled' do
|
329
|
-
|
330
|
-
it "queries again" do
|
331
|
-
band = Band.find(band_id)
|
332
|
-
expect_query(1) do
|
333
|
-
band.reload
|
334
|
-
end
|
335
|
-
end
|
336
|
-
end
|
337
|
-
end
|
338
|
-
|
339
363
|
context "when querying a very large collection" do
|
340
364
|
|
341
365
|
before do
|
@@ -70,13 +70,44 @@ describe Mongoid::Relations::AutoSave do
|
|
70
70
|
|
71
71
|
context "when saving a new parent document" do
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
context 'when persistence options are not set on the parent' do
|
74
|
+
before do
|
75
|
+
person.drugs << drug
|
76
|
+
person.save
|
77
|
+
end
|
78
|
+
|
79
|
+
it "saves the relation" do
|
80
|
+
expect(drug).to be_persisted
|
81
|
+
end
|
76
82
|
end
|
77
83
|
|
78
|
-
|
79
|
-
|
84
|
+
context 'when persistence options are set on the parent' do
|
85
|
+
|
86
|
+
let(:other_database) do
|
87
|
+
:other
|
88
|
+
end
|
89
|
+
|
90
|
+
after do
|
91
|
+
Person.with(database: other_database) do |person_class|
|
92
|
+
person_class.delete_all
|
93
|
+
end
|
94
|
+
Drug.with(database: other_database) do |drug_class|
|
95
|
+
drug_class.delete_all
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
before do
|
100
|
+
person.with(database: other_database) do |per|
|
101
|
+
per.drugs << drug
|
102
|
+
per.save
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'saves the relation with the persistence options' do
|
107
|
+
Drug.with(database: other_database) do |drug_class|
|
108
|
+
expect(drug_class.count).to eq(1)
|
109
|
+
end
|
110
|
+
end
|
80
111
|
end
|
81
112
|
end
|
82
113
|
|
@@ -160,7 +191,9 @@ describe Mongoid::Relations::AutoSave do
|
|
160
191
|
it "sends one insert" do
|
161
192
|
account.name = "account"
|
162
193
|
expect_query(1) do
|
163
|
-
person.with(write: {w:0})
|
194
|
+
person.with(write: {w:0}) do |_person|
|
195
|
+
_person.save
|
196
|
+
end
|
164
197
|
end
|
165
198
|
end
|
166
199
|
end
|
@@ -185,20 +185,47 @@ describe Mongoid::Relations::Builders do
|
|
185
185
|
|
186
186
|
context "when a document already exists" do
|
187
187
|
|
188
|
-
|
189
|
-
person.create_game(name: "Skyrim")
|
190
|
-
end
|
188
|
+
context "when the relation belongs_to is already set" do
|
191
189
|
|
192
|
-
|
193
|
-
|
194
|
-
|
190
|
+
let!(:game_one) do
|
191
|
+
game = person.create_game(name: "Starcraft")
|
192
|
+
game.person = person
|
193
|
+
end
|
194
|
+
|
195
|
+
let!(:game_two) do
|
196
|
+
person.create_game(name: "Skyrim")
|
197
|
+
end
|
198
|
+
|
199
|
+
it "replaces the existing document" do
|
200
|
+
expect(person.game).to eq(game_two)
|
201
|
+
end
|
202
|
+
|
203
|
+
it "persists the change" do
|
204
|
+
expect(person.game(true)).to eq(game_two)
|
205
|
+
end
|
195
206
|
|
196
|
-
|
197
|
-
|
207
|
+
it "removes the old document from the database" do
|
208
|
+
expect(Game.collection.find.count).to eq(1)
|
209
|
+
end
|
198
210
|
end
|
199
211
|
|
200
|
-
|
201
|
-
|
212
|
+
context 'when the relation belongs_to is not already set' do
|
213
|
+
|
214
|
+
let!(:game_two) do
|
215
|
+
person.create_game(name: "Skyrim")
|
216
|
+
end
|
217
|
+
|
218
|
+
it "replaces the existing document" do
|
219
|
+
expect(person.game).to eq(game_two)
|
220
|
+
end
|
221
|
+
|
222
|
+
it "persists the change" do
|
223
|
+
expect(person.game(true)).to eq(game_two)
|
224
|
+
end
|
225
|
+
|
226
|
+
it "removes the old document from the database" do
|
227
|
+
expect(Game.collection.find.count).to eq(1)
|
228
|
+
end
|
202
229
|
end
|
203
230
|
end
|
204
231
|
end
|
@@ -34,7 +34,7 @@ describe Mongoid::Relations::CounterCache do
|
|
34
34
|
it "expect to raise an error" do
|
35
35
|
expect {
|
36
36
|
person.reset_counters(:not_exist)
|
37
|
-
}.to raise_error
|
37
|
+
}.to raise_error(NoMethodError)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -85,6 +85,26 @@ describe Mongoid::Relations::CounterCache do
|
|
85
85
|
expect(subscription.reload[:packs_count]).to eq(1)
|
86
86
|
end
|
87
87
|
end
|
88
|
+
|
89
|
+
context 'when there are persistence options set' do
|
90
|
+
|
91
|
+
let(:subscription) do
|
92
|
+
Subscription.new
|
93
|
+
end
|
94
|
+
|
95
|
+
before do
|
96
|
+
subscription.with(collection: 'other') do |sub|
|
97
|
+
sub.save
|
98
|
+
sub.packs.create
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'applies the persistence options when resetting the counter' do
|
103
|
+
subscription.with(collection: 'other') do |sub|
|
104
|
+
expect(sub.reload[:packs_count]).to eq(1)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
88
108
|
end
|
89
109
|
|
90
110
|
describe ".reset_counters" do
|
@@ -111,7 +131,7 @@ describe Mongoid::Relations::CounterCache do
|
|
111
131
|
it "expect to raise an error" do
|
112
132
|
expect {
|
113
133
|
Person.reset_counters "1", :drugs
|
114
|
-
}.to raise_error
|
134
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
115
135
|
end
|
116
136
|
end
|
117
137
|
|
@@ -124,7 +144,7 @@ describe Mongoid::Relations::CounterCache do
|
|
124
144
|
it "expect to raise an error" do
|
125
145
|
expect {
|
126
146
|
Person.reset_counters person.id, :not_exist
|
127
|
-
}.to raise_error
|
147
|
+
}.to raise_error(NoMethodError)
|
128
148
|
end
|
129
149
|
end
|
130
150
|
|
@@ -256,6 +276,26 @@ describe Mongoid::Relations::CounterCache do
|
|
256
276
|
expect(person.reload.drugs_count).to eq(3)
|
257
277
|
end
|
258
278
|
end
|
279
|
+
|
280
|
+
context 'when there are persistence options set' do
|
281
|
+
|
282
|
+
let(:person) do
|
283
|
+
Person.new
|
284
|
+
end
|
285
|
+
|
286
|
+
before do
|
287
|
+
person.with(collection: 'other') do |per|
|
288
|
+
per.save
|
289
|
+
per.drugs.create
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
it 'applies the persistence options when resetting the counter' do
|
294
|
+
person.with(collection: 'other') do |per|
|
295
|
+
expect(per.drugs_count).to eq(1)
|
296
|
+
end
|
297
|
+
end
|
298
|
+
end
|
259
299
|
end
|
260
300
|
|
261
301
|
describe "#decrement_counter" do
|
@@ -286,6 +326,27 @@ describe Mongoid::Relations::CounterCache do
|
|
286
326
|
expect(person.reload.drugs_count).to eq(0)
|
287
327
|
end
|
288
328
|
end
|
329
|
+
|
330
|
+
context 'when there are persistence options set' do
|
331
|
+
|
332
|
+
let(:person) do
|
333
|
+
Person.new
|
334
|
+
end
|
335
|
+
|
336
|
+
before do
|
337
|
+
person.with(collection: 'other') do |per|
|
338
|
+
per.save
|
339
|
+
drug = per.drugs.create
|
340
|
+
drug.destroy
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
it 'applies the persistence options when resetting the counter' do
|
345
|
+
person.with(collection: 'other') do |per|
|
346
|
+
expect(per.reload.drugs_count).to eq(0)
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|
289
350
|
end
|
290
351
|
|
291
352
|
describe "#add_counter_cache_callbacks" do
|
@@ -351,18 +412,6 @@ describe Mongoid::Relations::CounterCache do
|
|
351
412
|
it "updates the original object's counter cache" do
|
352
413
|
expect(person1.reload.drugs_count).to eq(1)
|
353
414
|
end
|
354
|
-
|
355
|
-
context 'when foreign_key differs from model name' do
|
356
|
-
|
357
|
-
let(:genre) { PostGenre.create }
|
358
|
-
|
359
|
-
let(:post) { Post.create }
|
360
|
-
|
361
|
-
it 'updates correct counter cache' do
|
362
|
-
post.update post_genre: genre
|
363
|
-
expect(genre.reload.posts_count).to eq 1
|
364
|
-
end
|
365
|
-
end
|
366
415
|
end
|
367
416
|
end
|
368
417
|
|