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
data/spec/app/models/record.rb
CHANGED
data/spec/app/models/thing.rb
CHANGED
data/spec/config/mongoid.yml
CHANGED
@@ -13,10 +13,6 @@ test:
|
|
13
13
|
tag_sets:
|
14
14
|
- use: web
|
15
15
|
max_pool_size: 1
|
16
|
-
reports:
|
17
|
-
database: reports
|
18
|
-
hosts:
|
19
|
-
- <%=ENV["MONGOID_SPEC_HOST"]%>:<%=ENV["MONGOID_SPEC_PORT"]%>
|
20
16
|
options:
|
21
17
|
include_root_in_json: false
|
22
18
|
include_type_for_serialization: false
|
@@ -26,4 +22,4 @@ test:
|
|
26
22
|
use_activesupport_time_zone: true
|
27
23
|
use_utc: false
|
28
24
|
log_level: :warn
|
29
|
-
|
25
|
+
belongs_to_required_by_default: false
|
@@ -211,10 +211,10 @@ describe Mongoid::Atomic::Modifiers do
|
|
211
211
|
|
212
212
|
it "adds the push all modifiers" do
|
213
213
|
expect(modifiers).to eq(
|
214
|
-
{ "$
|
215
|
-
{ "addresses" =>
|
214
|
+
{ "$pushAll" =>
|
215
|
+
{ "addresses" => [
|
216
216
|
{ "street" => "Oxford St" }
|
217
|
-
]
|
217
|
+
]
|
218
218
|
}
|
219
219
|
}
|
220
220
|
)
|
@@ -238,11 +238,11 @@ describe Mongoid::Atomic::Modifiers do
|
|
238
238
|
|
239
239
|
it "adds the push all modifiers" do
|
240
240
|
expect(modifiers).to eq(
|
241
|
-
{ "$
|
242
|
-
{ "addresses" =>
|
241
|
+
{ "$pushAll" =>
|
242
|
+
{ "addresses" => [
|
243
243
|
{ "street" => "Hobrechtstr." },
|
244
244
|
{ "street" => "Pflugerstr." }
|
245
|
-
]
|
245
|
+
]
|
246
246
|
}
|
247
247
|
}
|
248
248
|
)
|
@@ -270,10 +270,10 @@ describe Mongoid::Atomic::Modifiers do
|
|
270
270
|
it "adds the push all modifiers to the conflicts hash" do
|
271
271
|
expect(modifiers).to eq(
|
272
272
|
{ "$set" => { "addresses.0.street" => "Bond" },
|
273
|
-
conflicts: { "$
|
274
|
-
{ "addresses" =>
|
273
|
+
conflicts: { "$pushAll" =>
|
274
|
+
{ "addresses" => [
|
275
275
|
{ "street" => "Oxford St" }
|
276
|
-
]
|
276
|
+
]
|
277
277
|
}
|
278
278
|
}
|
279
279
|
}
|
@@ -300,10 +300,10 @@ describe Mongoid::Atomic::Modifiers do
|
|
300
300
|
expect(modifiers).to eq(
|
301
301
|
{ "$pullAll" => {
|
302
302
|
"addresses" => { "street" => "Bond St" }},
|
303
|
-
conflicts: { "$
|
304
|
-
{ "addresses" =>
|
303
|
+
conflicts: { "$pushAll" =>
|
304
|
+
{ "addresses" => [
|
305
305
|
{ "street" => "Oxford St" }
|
306
|
-
]
|
306
|
+
]
|
307
307
|
}
|
308
308
|
}
|
309
309
|
}
|
@@ -328,12 +328,12 @@ describe Mongoid::Atomic::Modifiers do
|
|
328
328
|
|
329
329
|
it "adds the push all modifiers to the conflicts hash" do
|
330
330
|
expect(modifiers).to eq(
|
331
|
-
{ "$
|
332
|
-
"addresses.0.locations" =>
|
333
|
-
conflicts: { "$
|
334
|
-
{ "addresses" =>
|
331
|
+
{ "$pushAll" => {
|
332
|
+
"addresses.0.locations" => [{ "street" => "Bond St" }]},
|
333
|
+
conflicts: { "$pushAll" =>
|
334
|
+
{ "addresses" => [
|
335
335
|
{ "street" => "Oxford St" }
|
336
|
-
]
|
336
|
+
]
|
337
337
|
}
|
338
338
|
}
|
339
339
|
}
|
data/spec/mongoid/atomic_spec.rb
CHANGED
@@ -76,13 +76,13 @@ describe Mongoid::Atomic do
|
|
76
76
|
person.addresses.build(street: "Oxford St")
|
77
77
|
end
|
78
78
|
|
79
|
-
it "returns a $set and $
|
79
|
+
it "returns a $set and $pushAll for modifications" do
|
80
80
|
expect(person.atomic_updates).to eq(
|
81
81
|
{
|
82
82
|
"$set" => { "title" => "Sir" },
|
83
|
-
"$
|
83
|
+
"$pushAll" => { "addresses" => [
|
84
84
|
{ "_id" => "oxford-st", "street" => "Oxford St" }
|
85
|
-
]
|
85
|
+
]}
|
86
86
|
}
|
87
87
|
)
|
88
88
|
end
|
@@ -197,8 +197,8 @@ describe Mongoid::Atomic do
|
|
197
197
|
"addresses.0.street" => "Bond St"
|
198
198
|
},
|
199
199
|
conflicts: {
|
200
|
-
"$
|
201
|
-
"addresses.0.locations" =>
|
200
|
+
"$pushAll" => {
|
201
|
+
"addresses.0.locations" => [{ "_id" => location.id, "name" => "Home" }]
|
202
202
|
}
|
203
203
|
}
|
204
204
|
}
|
@@ -215,8 +215,8 @@ describe Mongoid::Atomic do
|
|
215
215
|
"addresses.0.street" => "Bond St"
|
216
216
|
},
|
217
217
|
conflicts: {
|
218
|
-
"$
|
219
|
-
"addresses.0.locations" =>
|
218
|
+
"$pushAll" => {
|
219
|
+
"addresses.0.locations" => [{ "_id" => location.id, "name" => "Home" }]
|
220
220
|
}
|
221
221
|
}
|
222
222
|
}
|
@@ -263,15 +263,15 @@ describe Mongoid::Atomic do
|
|
263
263
|
"addresses.0.street" => "Bond St"
|
264
264
|
},
|
265
265
|
conflicts: {
|
266
|
-
"$
|
267
|
-
"addresses" =>
|
266
|
+
"$pushAll" => {
|
267
|
+
"addresses" => [{
|
268
268
|
"_id" => new_address.id,
|
269
269
|
"street" => "Another",
|
270
270
|
"locations" => [
|
271
271
|
"_id" => location.id,
|
272
272
|
"name" => "Home"
|
273
273
|
]
|
274
|
-
}]
|
274
|
+
}]
|
275
275
|
}
|
276
276
|
}
|
277
277
|
}
|
@@ -310,15 +310,15 @@ describe Mongoid::Atomic do
|
|
310
310
|
"$set" => {
|
311
311
|
"title" => "Sir"
|
312
312
|
},
|
313
|
-
"$
|
314
|
-
"addresses" =>
|
313
|
+
"$pushAll" => {
|
314
|
+
"addresses" => [{
|
315
315
|
"_id" => new_address.id,
|
316
316
|
"street" => "Ipanema",
|
317
317
|
"locations" => [
|
318
318
|
"_id" => location.id,
|
319
319
|
"name" => "Home"
|
320
320
|
]
|
321
|
-
}]
|
321
|
+
}]
|
322
322
|
},
|
323
323
|
conflicts: {
|
324
324
|
"$set" => { "addresses.0.street"=>"Bond St" }
|
@@ -339,21 +339,21 @@ describe Mongoid::Atomic do
|
|
339
339
|
address.locations.build(name: "Home")
|
340
340
|
end
|
341
341
|
|
342
|
-
it "returns the proper $sets and $
|
342
|
+
it "returns the proper $sets and $pushAlls for all levels" do
|
343
343
|
expect(person.atomic_updates).to eq(
|
344
344
|
{
|
345
345
|
"$set" => {
|
346
346
|
"title" => "Sir",
|
347
347
|
},
|
348
|
-
"$
|
349
|
-
"addresses" =>
|
348
|
+
"$pushAll" => {
|
349
|
+
"addresses" => [{
|
350
350
|
"_id" => address.id,
|
351
351
|
"street" => "Another",
|
352
352
|
"locations" => [
|
353
353
|
"_id" => location.id,
|
354
354
|
"name" => "Home"
|
355
355
|
]
|
356
|
-
}]
|
356
|
+
}]
|
357
357
|
}
|
358
358
|
}
|
359
359
|
)
|
@@ -1335,7 +1335,7 @@ describe Mongoid::Attributes::Nested do
|
|
1335
1335
|
expect {
|
1336
1336
|
person.addresses_attributes =
|
1337
1337
|
{ "foo" => { "id" => "test", "street" => "Test" } }
|
1338
|
-
}.to raise_error
|
1338
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
1339
1339
|
end
|
1340
1340
|
end
|
1341
1341
|
end
|
@@ -1434,7 +1434,7 @@ describe Mongoid::Attributes::Nested do
|
|
1434
1434
|
Person.create(age: 42)
|
1435
1435
|
end
|
1436
1436
|
|
1437
|
-
context "when the child
|
1437
|
+
context "when the child halts the callback chain in a before callback" do
|
1438
1438
|
|
1439
1439
|
context "when the child is not paranoid" do
|
1440
1440
|
|
@@ -1970,7 +1970,7 @@ describe Mongoid::Attributes::Nested do
|
|
1970
1970
|
}
|
1971
1971
|
end
|
1972
1972
|
|
1973
|
-
it "ignores the
|
1973
|
+
it "ignores the marked document" do
|
1974
1974
|
expect(person.addresses.size).to eq(1)
|
1975
1975
|
end
|
1976
1976
|
|
@@ -2031,7 +2031,7 @@ describe Mongoid::Attributes::Nested do
|
|
2031
2031
|
}
|
2032
2032
|
end
|
2033
2033
|
|
2034
|
-
it "adds the
|
2034
|
+
it "adds the marked document" do
|
2035
2035
|
expect(person.addresses.first.street).to eq("Maybachufer")
|
2036
2036
|
end
|
2037
2037
|
|
@@ -2091,7 +2091,7 @@ describe Mongoid::Attributes::Nested do
|
|
2091
2091
|
}
|
2092
2092
|
end
|
2093
2093
|
|
2094
|
-
it "adds the
|
2094
|
+
it "adds the marked document" do
|
2095
2095
|
expect(person.addresses.first.street).to eq("Maybachufer")
|
2096
2096
|
end
|
2097
2097
|
|
@@ -3028,7 +3028,7 @@ describe Mongoid::Attributes::Nested do
|
|
3028
3028
|
expect {
|
3029
3029
|
person.posts_attributes =
|
3030
3030
|
{ "foo" => { "id" => "test", "title" => "Test" } }
|
3031
|
-
}.to raise_error
|
3031
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
3032
3032
|
end
|
3033
3033
|
end
|
3034
3034
|
end
|
@@ -3431,7 +3431,7 @@ describe Mongoid::Attributes::Nested do
|
|
3431
3431
|
}
|
3432
3432
|
end
|
3433
3433
|
|
3434
|
-
it "ignores the
|
3434
|
+
it "ignores the marked document" do
|
3435
3435
|
expect(person.posts.size).to eq(1)
|
3436
3436
|
end
|
3437
3437
|
|
@@ -3492,7 +3492,7 @@ describe Mongoid::Attributes::Nested do
|
|
3492
3492
|
}
|
3493
3493
|
end
|
3494
3494
|
|
3495
|
-
it "adds the
|
3495
|
+
it "adds the marked document" do
|
3496
3496
|
expect(person.posts.first.title).to eq("New Blog")
|
3497
3497
|
end
|
3498
3498
|
|
@@ -3552,7 +3552,7 @@ describe Mongoid::Attributes::Nested do
|
|
3552
3552
|
}
|
3553
3553
|
end
|
3554
3554
|
|
3555
|
-
it "adds the
|
3555
|
+
it "adds the marked document" do
|
3556
3556
|
expect(person.posts.first.title).to eq("New Blog")
|
3557
3557
|
end
|
3558
3558
|
|
@@ -3745,7 +3745,7 @@ describe Mongoid::Attributes::Nested do
|
|
3745
3745
|
expect {
|
3746
3746
|
person.preferences_attributes =
|
3747
3747
|
{ "foo" => { "id" => "test", "name" => "Test" } }
|
3748
|
-
}.to raise_error
|
3748
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
3749
3749
|
end
|
3750
3750
|
end
|
3751
3751
|
end
|
@@ -4097,7 +4097,7 @@ describe Mongoid::Attributes::Nested do
|
|
4097
4097
|
}
|
4098
4098
|
end
|
4099
4099
|
|
4100
|
-
it "ignores the
|
4100
|
+
it "ignores the marked document" do
|
4101
4101
|
expect(person.preferences.size).to eq(1)
|
4102
4102
|
end
|
4103
4103
|
|
@@ -4158,7 +4158,7 @@ describe Mongoid::Attributes::Nested do
|
|
4158
4158
|
}
|
4159
4159
|
end
|
4160
4160
|
|
4161
|
-
it "adds the
|
4161
|
+
it "adds the marked document" do
|
4162
4162
|
expect(person.preferences.first.name).to eq("New Blog")
|
4163
4163
|
end
|
4164
4164
|
|
@@ -4218,7 +4218,7 @@ describe Mongoid::Attributes::Nested do
|
|
4218
4218
|
}
|
4219
4219
|
end
|
4220
4220
|
|
4221
|
-
it "adds the
|
4221
|
+
it "adds the marked document" do
|
4222
4222
|
expect(person.preferences.first.name).to eq("New Blog")
|
4223
4223
|
end
|
4224
4224
|
|
@@ -4852,7 +4852,7 @@ describe Mongoid::Attributes::Nested do
|
|
4852
4852
|
end
|
4853
4853
|
|
4854
4854
|
it "the update raises an error" do
|
4855
|
-
expect{ error_raising_update }.to raise_error
|
4855
|
+
expect{ error_raising_update }.to raise_error(Mongoid::Errors::Validations)
|
4856
4856
|
end
|
4857
4857
|
|
4858
4858
|
it "the update does not occur" do
|
@@ -2,49 +2,56 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Mongoid::Attributes::Readonly do
|
4
4
|
|
5
|
-
|
5
|
+
before do
|
6
|
+
Person.attr_readonly(*attributes)
|
7
|
+
end
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
+
after do
|
10
|
+
Person.readonly_attributes.reject! do |a|
|
11
|
+
[ attributes ].flatten.include?(a.to_sym) ||
|
12
|
+
[ attributes ].flatten.include?(Person.aliased_fields.key(a).to_sym)
|
9
13
|
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe ".attr_readonly" do
|
10
17
|
|
11
18
|
context "when providing a single field" do
|
12
19
|
|
13
|
-
|
14
|
-
|
20
|
+
let(:attributes) do
|
21
|
+
:title
|
15
22
|
end
|
16
23
|
|
17
24
|
it "adds the field to readonly attributes" do
|
18
|
-
expect(Person.readonly_attributes.to_a).to
|
25
|
+
expect(Person.readonly_attributes.to_a).to include("title")
|
19
26
|
end
|
20
27
|
end
|
21
28
|
|
22
29
|
context "when providing a field alias" do
|
23
30
|
|
24
|
-
|
25
|
-
|
31
|
+
let(:attributes) do
|
32
|
+
:aliased_timestamp
|
26
33
|
end
|
27
34
|
|
28
35
|
it "adds the database field name to readonly attributes" do
|
29
|
-
expect(Person.readonly_attributes.to_a).to
|
36
|
+
expect(Person.readonly_attributes.to_a).to include("at")
|
30
37
|
end
|
31
38
|
end
|
32
39
|
|
33
40
|
context "when providing multiple fields" do
|
34
41
|
|
35
|
-
|
36
|
-
|
42
|
+
let(:attributes) do
|
43
|
+
[ :title, :terms ]
|
37
44
|
end
|
38
45
|
|
39
46
|
it "adds the fields to readonly attributes" do
|
40
|
-
expect(Person.readonly_attributes.to_a).to
|
47
|
+
expect(Person.readonly_attributes.to_a).to include("title", "terms")
|
41
48
|
end
|
42
49
|
end
|
43
50
|
|
44
51
|
context "when creating a new document with a readonly field" do
|
45
52
|
|
46
|
-
|
47
|
-
|
53
|
+
let(:attributes) do
|
54
|
+
[ :title, :terms, :aliased_timestamp ]
|
48
55
|
end
|
49
56
|
|
50
57
|
let(:person) do
|
@@ -78,8 +85,8 @@ describe Mongoid::Attributes::Readonly do
|
|
78
85
|
|
79
86
|
context "when updating an existing readonly field" do
|
80
87
|
|
81
|
-
|
82
|
-
|
88
|
+
let(:attributes) do
|
89
|
+
[ :title, :terms, :score, :aliased_timestamp ]
|
83
90
|
end
|
84
91
|
|
85
92
|
let(:person) do
|
@@ -88,25 +95,31 @@ describe Mongoid::Attributes::Readonly do
|
|
88
95
|
|
89
96
|
context "when updating via the setter" do
|
90
97
|
|
91
|
-
before do
|
92
|
-
person.title = "mr"
|
93
|
-
person.aliased_timestamp = Time.at(43)
|
94
|
-
person.save
|
95
|
-
end
|
96
|
-
|
97
98
|
it "does not update the first field" do
|
99
|
+
expect {
|
100
|
+
person.title = 'mr'
|
101
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
98
102
|
expect(person.title).to eq("sir")
|
99
103
|
end
|
100
104
|
|
101
105
|
it "does not update the second field" do
|
106
|
+
expect {
|
107
|
+
person.aliased_timestamp = Time.at(43)
|
108
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
102
109
|
expect(person.aliased_timestamp).to eq(Time.at(42))
|
103
110
|
end
|
104
111
|
|
105
112
|
it "does not persist the first field" do
|
113
|
+
expect {
|
114
|
+
person.title = 'mr'
|
115
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
106
116
|
expect(person.reload.title).to eq("sir")
|
107
117
|
end
|
108
118
|
|
109
119
|
it "does not persist the second field" do
|
120
|
+
expect {
|
121
|
+
person.aliased_timestamp = Time.at(43)
|
122
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
110
123
|
expect(person.reload.aliased_timestamp).to eq(Time.at(42))
|
111
124
|
end
|
112
125
|
end
|
@@ -114,6 +127,7 @@ describe Mongoid::Attributes::Readonly do
|
|
114
127
|
context "when updating via inc" do
|
115
128
|
|
116
129
|
context 'with single field operation' do
|
130
|
+
|
117
131
|
it "raises an error " do
|
118
132
|
expect {
|
119
133
|
person.inc(score: 1)
|
@@ -122,6 +136,7 @@ describe Mongoid::Attributes::Readonly do
|
|
122
136
|
end
|
123
137
|
|
124
138
|
context 'with multiple fields operation' do
|
139
|
+
|
125
140
|
it "raises an error " do
|
126
141
|
expect {
|
127
142
|
person.inc(score: 1, age: 1)
|
@@ -133,6 +148,7 @@ describe Mongoid::Attributes::Readonly do
|
|
133
148
|
context "when updating via bit" do
|
134
149
|
|
135
150
|
context 'with single field operation' do
|
151
|
+
|
136
152
|
it "raises an error " do
|
137
153
|
expect {
|
138
154
|
person.bit(score: { or: 13 })
|
@@ -141,6 +157,7 @@ describe Mongoid::Attributes::Readonly do
|
|
141
157
|
end
|
142
158
|
|
143
159
|
context 'with multiple fields operation' do
|
160
|
+
|
144
161
|
it "raises an error " do
|
145
162
|
expect {
|
146
163
|
person.bit(
|
@@ -153,98 +170,124 @@ describe Mongoid::Attributes::Readonly do
|
|
153
170
|
|
154
171
|
context "when updating via []=" do
|
155
172
|
|
156
|
-
before do
|
157
|
-
person[:title] = "mr"
|
158
|
-
person[:aliased_timestamp] = Time.at(43)
|
159
|
-
person.save
|
160
|
-
end
|
161
|
-
|
162
173
|
it "does not update the first field" do
|
174
|
+
expect {
|
175
|
+
person[:title] = "mr"
|
176
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
163
177
|
expect(person.title).to eq("sir")
|
164
178
|
end
|
165
179
|
|
166
180
|
it "does not update the second field" do
|
181
|
+
expect {
|
182
|
+
person[:aliased_timestamp] = Time.at(43)
|
183
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
167
184
|
expect(person.aliased_timestamp).to eq(Time.at(42))
|
168
185
|
end
|
169
186
|
|
170
187
|
it "does not persist the first field" do
|
188
|
+
expect {
|
189
|
+
person[:title] = "mr"
|
190
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
171
191
|
expect(person.reload.title).to eq("sir")
|
172
192
|
end
|
173
193
|
|
174
194
|
it "does not persist the second field" do
|
195
|
+
expect {
|
196
|
+
person[:aliased_timestamp] = Time.at(43)
|
197
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
175
198
|
expect(person.reload.aliased_timestamp).to eq(Time.at(42))
|
176
199
|
end
|
177
200
|
end
|
178
201
|
|
179
202
|
context "when updating via write_attribute" do
|
180
203
|
|
181
|
-
before do
|
182
|
-
person.write_attribute(:title, "mr")
|
183
|
-
person.write_attribute(:aliased_timestamp, Time.at(43))
|
184
|
-
person.save
|
185
|
-
end
|
186
|
-
|
187
204
|
it "does not update the first field" do
|
205
|
+
expect {
|
206
|
+
person.write_attribute(:title, "mr")
|
207
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
188
208
|
expect(person.title).to eq("sir")
|
189
209
|
end
|
190
210
|
|
191
211
|
it "does not update the second field" do
|
212
|
+
expect {
|
213
|
+
person.write_attribute(:aliased_timestamp, Time.at(43))
|
214
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
192
215
|
expect(person.aliased_timestamp).to eq(Time.at(42))
|
193
216
|
end
|
194
217
|
|
195
218
|
it "does not persist the first field" do
|
219
|
+
expect {
|
220
|
+
person.write_attribute(:title, "mr")
|
221
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
196
222
|
expect(person.reload.title).to eq("sir")
|
197
223
|
end
|
198
224
|
|
199
225
|
it "does not persist the second field" do
|
226
|
+
expect {
|
227
|
+
person.write_attribute(:aliased_timestamp, Time.at(43))
|
228
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
200
229
|
expect(person.reload.aliased_timestamp).to eq(Time.at(42))
|
201
230
|
end
|
202
231
|
end
|
203
232
|
|
204
233
|
context "when updating via update_attributes" do
|
205
234
|
|
206
|
-
before do
|
207
|
-
person.update_attributes(title: "mr", aliased_timestamp: Time.at(43))
|
208
|
-
person.save
|
209
|
-
end
|
210
|
-
|
211
235
|
it "does not update the first field" do
|
236
|
+
expect {
|
237
|
+
person.update_attributes(title: "mr", aliased_timestamp: Time.at(43))
|
238
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
212
239
|
expect(person.title).to eq("sir")
|
213
240
|
end
|
214
241
|
|
215
242
|
it "does not update the second field" do
|
243
|
+
expect {
|
244
|
+
person.update_attributes(title: "mr", aliased_timestamp: Time.at(43))
|
245
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
216
246
|
expect(person.aliased_timestamp).to eq(Time.at(42))
|
217
247
|
end
|
218
248
|
|
219
249
|
it "does not persist the first field" do
|
250
|
+
expect {
|
251
|
+
person.update_attributes(title: "mr", aliased_timestamp: Time.at(43))
|
252
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
220
253
|
expect(person.reload.title).to eq("sir")
|
221
254
|
end
|
222
255
|
|
223
256
|
it "does not persist the second field" do
|
257
|
+
expect {
|
258
|
+
person.update_attributes(title: "mr", aliased_timestamp: Time.at(43))
|
259
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
224
260
|
expect(person.reload.aliased_timestamp).to eq(Time.at(42))
|
225
261
|
end
|
226
262
|
end
|
227
263
|
|
228
264
|
context "when updating via update_attributes!" do
|
229
265
|
|
230
|
-
before do
|
231
|
-
person.update_attributes!(title: "mr", aliased_timestamp: Time.at(43))
|
232
|
-
person.save
|
233
|
-
end
|
234
|
-
|
235
266
|
it "does not update the first field" do
|
267
|
+
expect {
|
268
|
+
person.update_attributes!(title: "mr", aliased_timestamp: Time.at(43))
|
269
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
236
270
|
expect(person.title).to eq("sir")
|
237
271
|
end
|
238
272
|
|
239
273
|
it "does not update the second field" do
|
274
|
+
expect {
|
275
|
+
person.update_attributes!(title: "mr", aliased_timestamp: Time.at(43))
|
276
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
240
277
|
expect(person.aliased_timestamp).to eq(Time.at(42))
|
241
278
|
end
|
242
279
|
|
243
280
|
it "does not persist the first field" do
|
281
|
+
expect {
|
282
|
+
person.update_attributes!(title: "mr", aliased_timestamp: Time.at(43))
|
283
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
244
284
|
expect(person.reload.title).to eq("sir")
|
245
285
|
end
|
246
286
|
|
247
287
|
it "does not persist the second field" do
|
288
|
+
expect {
|
289
|
+
person.update_attributes!(title: "mr", aliased_timestamp: Time.at(43))
|
290
|
+
}.to raise_exception(Mongoid::Errors::ReadonlyAttribute)
|
248
291
|
expect(person.reload.aliased_timestamp).to eq(Time.at(42))
|
249
292
|
end
|
250
293
|
end
|