mongoid 5.4.1 → 6.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -8,6 +8,18 @@ module Mongoid
|
|
8
8
|
# multiple documents.
|
9
9
|
class In < Relations::One
|
10
10
|
|
11
|
+
# The allowed options when defining this relation.
|
12
|
+
#
|
13
|
+
# @return [ Array<Symbol> ] The allowed options when defining this relation.
|
14
|
+
#
|
15
|
+
# @since 6.0.0
|
16
|
+
VALID_OPTIONS = [
|
17
|
+
:autobuild,
|
18
|
+
:cyclic,
|
19
|
+
:polymorphic,
|
20
|
+
:touch
|
21
|
+
].freeze
|
22
|
+
|
11
23
|
# Instantiate a new embedded_in relation.
|
12
24
|
#
|
13
25
|
# @example Create the new relation.
|
@@ -31,7 +43,7 @@ module Mongoid
|
|
31
43
|
# @example Substitute the new document.
|
32
44
|
# person.name.substitute(new_name)
|
33
45
|
#
|
34
|
-
# @param [ Document ]
|
46
|
+
# @param [ Document ] other A document to replace the target.
|
35
47
|
#
|
36
48
|
# @return [ Document, nil ] The relation or nil.
|
37
49
|
#
|
@@ -55,6 +67,8 @@ module Mongoid
|
|
55
67
|
# @example Get the binding.
|
56
68
|
# binding([ address ])
|
57
69
|
#
|
70
|
+
# @param [ Proxy ] new_target The new documents to bind with.
|
71
|
+
#
|
58
72
|
# @return [ Binding ] A binding object.
|
59
73
|
#
|
60
74
|
# @since 2.0.0.rc.1
|
@@ -207,7 +221,7 @@ module Mongoid
|
|
207
221
|
#
|
208
222
|
# @since 2.1.0
|
209
223
|
def valid_options
|
210
|
-
|
224
|
+
VALID_OPTIONS
|
211
225
|
end
|
212
226
|
|
213
227
|
# Get the default validation setting for the relation. Determines if
|
@@ -10,6 +10,23 @@ module Mongoid
|
|
10
10
|
class Many < Relations::Many
|
11
11
|
include Batchable
|
12
12
|
|
13
|
+
# The allowed options when defining this relation.
|
14
|
+
#
|
15
|
+
# @return [ Array<Symbol> ] The allowed options when defining this relation.
|
16
|
+
#
|
17
|
+
# @since 6.0.0
|
18
|
+
VALID_OPTIONS = [
|
19
|
+
:as,
|
20
|
+
:cascade_callbacks,
|
21
|
+
:cyclic,
|
22
|
+
:order,
|
23
|
+
:store_as,
|
24
|
+
:before_add,
|
25
|
+
:after_add,
|
26
|
+
:before_remove,
|
27
|
+
:after_remove
|
28
|
+
].freeze
|
29
|
+
|
13
30
|
# Appends a document or array of documents to the relation. Will set
|
14
31
|
# the parent and update the index in the process.
|
15
32
|
#
|
@@ -19,8 +36,7 @@ module Mongoid
|
|
19
36
|
# @example Push a document.
|
20
37
|
# person.addresses.push(address)
|
21
38
|
#
|
22
|
-
# @param [ Document, Array<Document> ] args Any number of documents.
|
23
|
-
#
|
39
|
+
# @param [ Document, Array<Document> ] *args Any number of documents.
|
24
40
|
def <<(*args)
|
25
41
|
docs = args.flatten
|
26
42
|
return concat(docs) if docs.size > 1
|
@@ -60,7 +76,7 @@ module Mongoid
|
|
60
76
|
#
|
61
77
|
# @since 2.4.0
|
62
78
|
def concat(docs)
|
63
|
-
|
79
|
+
batch_insert(docs) unless docs.empty?
|
64
80
|
self
|
65
81
|
end
|
66
82
|
|
@@ -338,6 +354,8 @@ module Mongoid
|
|
338
354
|
# @example Create the binding.
|
339
355
|
# relation.binding([ address ])
|
340
356
|
#
|
357
|
+
# @param [ Array<Document> ] new_target The new documents to bind with.
|
358
|
+
#
|
341
359
|
# @return [ Binding ] The many binding.
|
342
360
|
#
|
343
361
|
# @since 2.0.0.rc.1
|
@@ -460,7 +478,7 @@ module Mongoid
|
|
460
478
|
# relation.remove_all({ :num => 1 }, true)
|
461
479
|
#
|
462
480
|
# @param [ Hash ] conditions Conditions to filter by.
|
463
|
-
# @param [ true, false ]
|
481
|
+
# @param [ true, false ] destroy If true then destroy, else delete.
|
464
482
|
#
|
465
483
|
# @return [ Integer ] The number of documents removed.
|
466
484
|
def remove_all(conditions = {}, method = :delete)
|
@@ -617,10 +635,7 @@ module Mongoid
|
|
617
635
|
#
|
618
636
|
# @since 2.1.0
|
619
637
|
def valid_options
|
620
|
-
|
621
|
-
:as, :cascade_callbacks, :cyclic, :order, :store_as,
|
622
|
-
:before_add, :after_add, :before_remove, :after_remove
|
623
|
-
]
|
638
|
+
VALID_OPTIONS
|
624
639
|
end
|
625
640
|
|
626
641
|
# Get the default validation setting for the relation. Determines if
|
@@ -7,6 +7,19 @@ module Mongoid
|
|
7
7
|
# relations.
|
8
8
|
class One < Relations::One
|
9
9
|
|
10
|
+
# The allowed options when defining this relation.
|
11
|
+
#
|
12
|
+
# @return [ Array<Symbol> ] The allowed options when defining this relation.
|
13
|
+
#
|
14
|
+
# @since 6.0.0
|
15
|
+
VALID_OPTIONS = [
|
16
|
+
:autobuild,
|
17
|
+
:as,
|
18
|
+
:cascade_callbacks,
|
19
|
+
:cyclic,
|
20
|
+
:store_as
|
21
|
+
].freeze
|
22
|
+
|
10
23
|
# Instantiate a new embeds_one relation.
|
11
24
|
#
|
12
25
|
# @example Create the new proxy.
|
@@ -31,7 +44,7 @@ module Mongoid
|
|
31
44
|
# @example Substitute the new document.
|
32
45
|
# person.name.substitute(new_name)
|
33
46
|
#
|
34
|
-
# @param [ Document ]
|
47
|
+
# @param [ Document ] other A document to replace the target.
|
35
48
|
#
|
36
49
|
# @return [ Document, nil ] The relation or nil.
|
37
50
|
#
|
@@ -61,6 +74,8 @@ module Mongoid
|
|
61
74
|
# @example Get the binding.
|
62
75
|
# relation.binding([ address ])
|
63
76
|
#
|
77
|
+
# @param [ Document ] new_target The new document to bind with.
|
78
|
+
#
|
64
79
|
# @return [ Binding ] The relation's binding.
|
65
80
|
#
|
66
81
|
# @since 2.0.0.rc.1
|
@@ -200,7 +215,7 @@ module Mongoid
|
|
200
215
|
#
|
201
216
|
# @since 2.1.0
|
202
217
|
def valid_options
|
203
|
-
|
218
|
+
VALID_OPTIONS
|
204
219
|
end
|
205
220
|
|
206
221
|
# Get the default validation setting for the relation. Determines if
|
@@ -140,6 +140,7 @@ module Mongoid
|
|
140
140
|
aliased_fields[name.to_s] = meta.foreign_key
|
141
141
|
touchable(meta)
|
142
142
|
add_counter_cache_callbacks(meta) if meta.counter_cached?
|
143
|
+
validates(name, presence: true) if require_association?(options)
|
143
144
|
meta
|
144
145
|
end
|
145
146
|
|
@@ -326,8 +327,7 @@ module Mongoid
|
|
326
327
|
# Model.reference_one_to_one(:name, meta)
|
327
328
|
#
|
328
329
|
# @param [ Symbol ] name The name of the relation.
|
329
|
-
# @param [
|
330
|
-
# @param [ Metadata ] relation The relation.
|
330
|
+
# @param [ Metadata ] meta The relation metadata.
|
331
331
|
#
|
332
332
|
# @return [ Class ] The model class.
|
333
333
|
#
|
@@ -350,9 +350,16 @@ module Mongoid
|
|
350
350
|
# @param [ Symbol ] name The name of the relation.
|
351
351
|
# @param [ Metadata ] metadata The metadata for the relation.
|
352
352
|
def relate(name, metadata)
|
353
|
+
Fields::Validators::Macro.validate_relation(self, name)
|
353
354
|
self.relations = relations.merge(name.to_s => metadata)
|
354
355
|
getter(name, metadata).setter(name, metadata).existence_check(name)
|
355
356
|
end
|
357
|
+
|
358
|
+
def require_association?(options = {})
|
359
|
+
required = options[:required] if options.key?(:required)
|
360
|
+
required = !options[:optional] if options.key?(:optional) && required.nil?
|
361
|
+
required.nil? ? Mongoid.belongs_to_required_by_default : required
|
362
|
+
end
|
356
363
|
end
|
357
364
|
end
|
358
365
|
end
|
@@ -920,7 +920,7 @@ module Mongoid
|
|
920
920
|
# @example Find the module from the parts.
|
921
921
|
# metadata.find_from_parts([ "Namespace", "Module" ])
|
922
922
|
#
|
923
|
-
# @param [ Array<String> ]
|
923
|
+
# @param [ Array<String> ] The modules.
|
924
924
|
#
|
925
925
|
# @return [ String ] The matching module.
|
926
926
|
#
|
@@ -1127,7 +1127,7 @@ module Mongoid
|
|
1127
1127
|
# @example Find the inverses.
|
1128
1128
|
# metadata.lookup_inverses(other)
|
1129
1129
|
#
|
1130
|
-
# @param [ Document ]
|
1130
|
+
# @param [ Document ] : The inverse document.
|
1131
1131
|
#
|
1132
1132
|
# @return [ Array<String> ] The inverse names.
|
1133
1133
|
def lookup_inverses(other)
|
@@ -1150,7 +1150,7 @@ module Mongoid
|
|
1150
1150
|
# @example Find the inverse.
|
1151
1151
|
# metadata.lookup_inverse(other)
|
1152
1152
|
#
|
1153
|
-
# @param [ Document ]
|
1153
|
+
# @param [ Document ] : The inverse document.
|
1154
1154
|
#
|
1155
1155
|
# @return [ String ] The inverse name.
|
1156
1156
|
#
|
@@ -25,7 +25,7 @@ module Mongoid
|
|
25
25
|
# @example Is there a reject proc?
|
26
26
|
# builder.reject?
|
27
27
|
#
|
28
|
-
# @param
|
28
|
+
# @param The parent document of the relation
|
29
29
|
# @param [ Hash ] attrs The attributes to check for rejection.
|
30
30
|
#
|
31
31
|
# @return [ true, false ] True and call proc or method if rejectable, false if not.
|
@@ -17,7 +17,7 @@ module Mongoid
|
|
17
17
|
:name,
|
18
18
|
:relation,
|
19
19
|
:validate
|
20
|
-
]
|
20
|
+
].freeze
|
21
21
|
|
22
22
|
# Determine if the provided options are valid for the relation.
|
23
23
|
#
|
@@ -32,7 +32,7 @@ module Mongoid
|
|
32
32
|
#
|
33
33
|
# @since 2.1.0
|
34
34
|
def validate!(options)
|
35
|
-
valid_options = options[:relation]
|
35
|
+
valid_options = options[:relation]::VALID_OPTIONS + COMMON
|
36
36
|
options.keys.each do |key|
|
37
37
|
if !valid_options.include?(key)
|
38
38
|
raise Errors::InvalidOptions.new(
|
@@ -84,35 +84,6 @@ module Mongoid
|
|
84
84
|
target
|
85
85
|
end
|
86
86
|
|
87
|
-
# Tell the next persistence operation to store in a specific collection,
|
88
|
-
# database or client.
|
89
|
-
#
|
90
|
-
# @example Save the current document to a different collection.
|
91
|
-
# model.with(collection: "secondary").save
|
92
|
-
#
|
93
|
-
# @example Save the current document to a different database.
|
94
|
-
# model.with(database: "secondary").save
|
95
|
-
#
|
96
|
-
# @example Save the current document to a different client.
|
97
|
-
# model.with(client: "replica_set").save
|
98
|
-
#
|
99
|
-
# @example Save with a combination of options.
|
100
|
-
# model.with(client: "sharded", database: "secondary").save
|
101
|
-
#
|
102
|
-
# @param [ Hash ] options The storage options.
|
103
|
-
#
|
104
|
-
# @option options [ String, Symbol ] :collection The collection name.
|
105
|
-
# @option options [ String, Symbol ] :database The database name.
|
106
|
-
# @option options [ String, Symbol ] :client The client name.
|
107
|
-
#
|
108
|
-
# @return [ Document ] The current document.
|
109
|
-
#
|
110
|
-
# @since 3.0.0
|
111
|
-
def with(options)
|
112
|
-
@persistence_options = options
|
113
|
-
self
|
114
|
-
end
|
115
|
-
|
116
87
|
protected
|
117
88
|
|
118
89
|
# Get the collection from the root of the hierarchy.
|
@@ -125,7 +96,6 @@ module Mongoid
|
|
125
96
|
# @since 2.0.0
|
126
97
|
def collection
|
127
98
|
root = base._root
|
128
|
-
root.with(@persistence_options)
|
129
99
|
root.collection unless root.embedded?
|
130
100
|
end
|
131
101
|
|
@@ -145,8 +115,7 @@ module Mongoid
|
|
145
115
|
# to the target of the proxy. This can be overridden in special cases.
|
146
116
|
#
|
147
117
|
# @param [ String, Symbol ] name The name of the method.
|
148
|
-
# @param [ Array ] args The arguments passed to the method.
|
149
|
-
#
|
118
|
+
# @param [ Array ] *args The arguments passed to the method.
|
150
119
|
def method_missing(name, *args, &block)
|
151
120
|
target.send(name, *args, &block)
|
152
121
|
end
|
@@ -184,7 +153,7 @@ module Mongoid
|
|
184
153
|
# @example returns the before_add callback method name
|
185
154
|
# callback_method(:before_add)
|
186
155
|
#
|
187
|
-
# @param [ Symbol ]
|
156
|
+
# @param [ Symbol ] which callback
|
188
157
|
#
|
189
158
|
# @return [ Array ] with callback methods to be executed, the array may have symbols and Procs
|
190
159
|
#
|
@@ -10,6 +10,24 @@ module Mongoid
|
|
10
10
|
class In < Relations::One
|
11
11
|
include Evolvable
|
12
12
|
|
13
|
+
# The allowed options when defining this relation.
|
14
|
+
#
|
15
|
+
# @return [ Array<Symbol> ] The allowed options when defining this relation.
|
16
|
+
#
|
17
|
+
# @since 6.0.0
|
18
|
+
VALID_OPTIONS = [
|
19
|
+
:autobuild,
|
20
|
+
:autosave,
|
21
|
+
:dependent,
|
22
|
+
:foreign_key,
|
23
|
+
:index,
|
24
|
+
:polymorphic,
|
25
|
+
:primary_key,
|
26
|
+
:touch,
|
27
|
+
:optional,
|
28
|
+
:required
|
29
|
+
].freeze
|
30
|
+
|
13
31
|
# Instantiate a new referenced_in relation.
|
14
32
|
#
|
15
33
|
# @example Create the new relation.
|
@@ -44,7 +62,8 @@ module Mongoid
|
|
44
62
|
# @example Substitute the relation.
|
45
63
|
# name.substitute(new_name)
|
46
64
|
#
|
47
|
-
# @param [ Document, Array<Document> ]
|
65
|
+
# @param [ Document, Array<Document> ] new_target The replacement.
|
66
|
+
# @param [ true, false ] building Are we in build mode?
|
48
67
|
#
|
49
68
|
# @return [ In, nil ] The relation or nil.
|
50
69
|
#
|
@@ -64,6 +83,8 @@ module Mongoid
|
|
64
83
|
# @example Get the binding object.
|
65
84
|
# binding([ address ])
|
66
85
|
#
|
86
|
+
# @param [ Document, Array<Document> ] new_target The replacement.
|
87
|
+
#
|
67
88
|
# @return [ Binding ] The binding object.
|
68
89
|
#
|
69
90
|
# @since 2.0.0.rc.1
|
@@ -264,16 +285,7 @@ module Mongoid
|
|
264
285
|
#
|
265
286
|
# @since 2.1.0
|
266
287
|
def valid_options
|
267
|
-
|
268
|
-
:autobuild,
|
269
|
-
:autosave,
|
270
|
-
:dependent,
|
271
|
-
:foreign_key,
|
272
|
-
:index,
|
273
|
-
:polymorphic,
|
274
|
-
:primary_key,
|
275
|
-
:touch
|
276
|
-
]
|
288
|
+
VALID_OPTIONS
|
277
289
|
end
|
278
290
|
|
279
291
|
# Get the default validation setting for the relation. Determines if
|
@@ -10,6 +10,24 @@ module Mongoid
|
|
10
10
|
delegate :count, to: :criteria
|
11
11
|
delegate :first, :in_memory, :last, :reset, :uniq, to: :target
|
12
12
|
|
13
|
+
# The allowed options when defining this relation.
|
14
|
+
#
|
15
|
+
# @return [ Array<Symbol> ] The allowed options when defining this relation.
|
16
|
+
#
|
17
|
+
# @since 6.0.0
|
18
|
+
VALID_OPTIONS = [
|
19
|
+
:after_add,
|
20
|
+
:after_remove,
|
21
|
+
:as,
|
22
|
+
:autosave,
|
23
|
+
:before_add,
|
24
|
+
:before_remove,
|
25
|
+
:dependent,
|
26
|
+
:foreign_key,
|
27
|
+
:order,
|
28
|
+
:primary_key
|
29
|
+
].freeze
|
30
|
+
|
13
31
|
# Appends a document or array of documents to the relation. Will set
|
14
32
|
# the parent and update the index in the process.
|
15
33
|
#
|
@@ -22,7 +40,7 @@ module Mongoid
|
|
22
40
|
# @example Concat with other documents.
|
23
41
|
# person.posts.concat([ post_one, post_two ])
|
24
42
|
#
|
25
|
-
# @param [ Document, Array<Document> ] args Any number of documents.
|
43
|
+
# @param [ Document, Array<Document> ] *args Any number of documents.
|
26
44
|
#
|
27
45
|
# @return [ Array<Document> ] The loaded docs.
|
28
46
|
#
|
@@ -190,7 +208,7 @@ module Mongoid
|
|
190
208
|
# @note This will keep matching documents in memory for iteration
|
191
209
|
# later.
|
192
210
|
#
|
193
|
-
# @param [ BSON::ObjectId, Array<BSON::ObjectId> ]
|
211
|
+
# @param [ BSON::ObjectId, Array<BSON::ObjectId> ] arg The ids.
|
194
212
|
#
|
195
213
|
# @return [ Document, Criteria ] The matching document(s).
|
196
214
|
#
|
@@ -320,7 +338,6 @@ module Mongoid
|
|
320
338
|
#
|
321
339
|
# @since 2.0.0.rc.1
|
322
340
|
def append(document)
|
323
|
-
document.with(@persistence_options) if @persistence_options
|
324
341
|
with_add_callbacks(document, already_related?(document)) do
|
325
342
|
target.push(document)
|
326
343
|
characterize_one(document)
|
@@ -368,6 +385,8 @@ module Mongoid
|
|
368
385
|
# @example Get the binding.
|
369
386
|
# relation.binding([ address ])
|
370
387
|
#
|
388
|
+
# @param [ Array<Document> ] new_target The new documents to bind with.
|
389
|
+
#
|
371
390
|
# @return [ Binding ] The binding.
|
372
391
|
#
|
373
392
|
# @since 2.0.0.rc.1
|
@@ -491,7 +510,7 @@ module Mongoid
|
|
491
510
|
# person.posts.delete_all({ :title => "Testing" })
|
492
511
|
#
|
493
512
|
# @param [ Hash ] conditions Optional conditions to delete with.
|
494
|
-
# @param [ Symbol ]
|
513
|
+
# @param [ Symbol ] The deletion method to call.
|
495
514
|
#
|
496
515
|
# @return [ Integer ] The number of documents deleted.
|
497
516
|
#
|
@@ -729,18 +748,7 @@ module Mongoid
|
|
729
748
|
#
|
730
749
|
# @since 2.1.0
|
731
750
|
def valid_options
|
732
|
-
|
733
|
-
:after_add,
|
734
|
-
:after_remove,
|
735
|
-
:as,
|
736
|
-
:autosave,
|
737
|
-
:before_add,
|
738
|
-
:before_remove,
|
739
|
-
:dependent,
|
740
|
-
:foreign_key,
|
741
|
-
:order,
|
742
|
-
:primary_key
|
743
|
-
]
|
751
|
+
VALID_OPTIONS
|
744
752
|
end
|
745
753
|
|
746
754
|
# Get the default validation setting for the relation. Determines if
|