mongoid 6.1.0 → 6.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mongoid/atomic.rb +3 -3
- data/lib/mongoid/attributes.rb +1 -2
- data/lib/mongoid/attributes/dynamic.rb +3 -2
- data/lib/mongoid/attributes/nested.rb +1 -1
- data/lib/mongoid/attributes/processing.rb +0 -4
- data/lib/mongoid/changeable.rb +1 -1
- data/lib/mongoid/clients/options.rb +1 -1
- data/lib/mongoid/composable.rb +3 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +3 -2
- data/lib/mongoid/contextual/memory.rb +3 -3
- data/lib/mongoid/contextual/mongo.rb +5 -5
- data/lib/mongoid/contextual/none.rb +14 -2
- data/lib/mongoid/copyable.rb +1 -5
- data/lib/mongoid/criteria.rb +2 -2
- data/lib/mongoid/criteria/findable.rb +3 -2
- data/lib/mongoid/criteria/includable.rb +2 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/array.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -4
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -4
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +34 -0
- data/lib/mongoid/criteria/queryable/options.rb +16 -0
- data/lib/mongoid/criteria/queryable/selector.rb +1 -1
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +2 -2
- data/lib/mongoid/errors/inverse_not_found.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +3 -2
- data/lib/mongoid/extensions/object.rb +2 -2
- data/lib/mongoid/extensions/time.rb +1 -1
- data/lib/mongoid/factory.rb +0 -1
- data/lib/mongoid/fields/foreign_key.rb +2 -2
- data/lib/mongoid/findable.rb +1 -1
- data/lib/mongoid/indexable.rb +3 -2
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/interceptable.rb +3 -9
- data/lib/mongoid/loggable.rb +1 -1
- data/lib/mongoid/matchable.rb +16 -9
- data/lib/mongoid/matchable/all.rb +2 -2
- data/lib/mongoid/matchable/and.rb +3 -3
- data/lib/mongoid/matchable/default.rb +2 -2
- data/lib/mongoid/matchable/elem_match.rb +3 -3
- data/lib/mongoid/matchable/exists.rb +2 -2
- data/lib/mongoid/matchable/gt.rb +2 -2
- data/lib/mongoid/matchable/gte.rb +2 -2
- data/lib/mongoid/matchable/in.rb +2 -2
- data/lib/mongoid/matchable/lt.rb +2 -2
- data/lib/mongoid/matchable/lte.rb +2 -2
- data/lib/mongoid/matchable/ne.rb +2 -2
- data/lib/mongoid/matchable/nin.rb +2 -2
- data/lib/mongoid/matchable/or.rb +3 -3
- data/lib/mongoid/matchable/regexp.rb +27 -0
- data/lib/mongoid/matchable/size.rb +2 -2
- data/lib/mongoid/persistable.rb +0 -3
- data/lib/mongoid/persistable/creatable.rb +2 -4
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +1 -1
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistence_context.rb +2 -3
- data/lib/mongoid/relations/accessors.rb +1 -2
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -4
- data/lib/mongoid/relations/bindings/embedded/many.rb +1 -8
- data/lib/mongoid/relations/bindings/embedded/one.rb +0 -10
- data/lib/mongoid/relations/bindings/referenced/many.rb +0 -4
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -4
- 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 +10 -10
- data/lib/mongoid/relations/eager.rb +6 -11
- data/lib/mongoid/relations/eager/base.rb +4 -4
- data/lib/mongoid/relations/embedded/batchable.rb +3 -3
- data/lib/mongoid/relations/embedded/in.rb +1 -3
- data/lib/mongoid/relations/embedded/many.rb +12 -9
- data/lib/mongoid/relations/embedded/one.rb +1 -3
- data/lib/mongoid/relations/macros.rb +3 -2
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/nested_builder.rb +1 -1
- data/lib/mongoid/relations/proxy.rb +3 -2
- data/lib/mongoid/relations/referenced/in.rb +1 -4
- data/lib/mongoid/relations/referenced/many.rb +5 -7
- data/lib/mongoid/relations/referenced/many_to_many.rb +2 -2
- data/lib/mongoid/relations/referenced/one.rb +0 -2
- data/lib/mongoid/relations/reflections.rb +2 -2
- data/lib/mongoid/relations/synchronization.rb +11 -11
- data/lib/mongoid/scopable.rb +2 -2
- data/lib/mongoid/serializable.rb +4 -3
- data/lib/mongoid/tasks/database.rb +2 -1
- data/lib/mongoid/threaded.rb +4 -4
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +4 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -2
- data/spec/app/models/book.rb +2 -1
- data/spec/app/models/page.rb +1 -1
- data/spec/mongoid/contextual/none_spec.rb +15 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +89 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +15 -0
- data/spec/mongoid/criteria_spec.rb +6 -2
- data/spec/mongoid/interceptable_spec.rb +19 -0
- data/spec/mongoid/matchable/all_spec.rb +4 -4
- data/spec/mongoid/matchable/and_spec.rb +10 -10
- data/spec/mongoid/matchable/default_spec.rb +12 -12
- data/spec/mongoid/matchable/elem_match_spec.rb +11 -11
- data/spec/mongoid/matchable/exists_spec.rb +5 -5
- data/spec/mongoid/matchable/gt_spec.rb +8 -8
- data/spec/mongoid/matchable/gte_spec.rb +8 -8
- data/spec/mongoid/matchable/in_spec.rb +5 -5
- data/spec/mongoid/matchable/lt_spec.rb +8 -8
- data/spec/mongoid/matchable/lte_spec.rb +8 -8
- data/spec/mongoid/matchable/ne_spec.rb +5 -5
- data/spec/mongoid/matchable/nin_spec.rb +5 -5
- data/spec/mongoid/matchable/or_spec.rb +7 -7
- data/spec/mongoid/matchable/regexp_spec.rb +59 -0
- data/spec/mongoid/matchable/size_spec.rb +3 -3
- data/spec/mongoid/matchable_spec.rb +108 -58
- data/spec/mongoid/persistable/deletable_spec.rb +15 -0
- data/spec/mongoid/persistable/settable_spec.rb +16 -0
- data/spec/mongoid/persistence_context_spec.rb +22 -1
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +4 -4
- data/spec/mongoid/relations/embedded/many_spec.rb +24 -6
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +1 -1
- data/spec/mongoid/relations/synchronization_spec.rb +48 -2
- data/spec/mongoid/relations/touchable_spec.rb +40 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +2 -0
- data/spec/spec_helper.rb +1 -1
- metadata +9 -26
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -1
- metadata.gz.sig +0 -1
@@ -12,8 +12,8 @@ module Mongoid
|
|
12
12
|
# @example Create the new belongs to eager load preloader.
|
13
13
|
# BelongsTo.new(relations_metadata, parent_docs)
|
14
14
|
#
|
15
|
-
# @param [ Array<Metadata> ] Relations to eager load
|
16
|
-
# @param [ Array<Document> ] Documents to preload the relations
|
15
|
+
# @param [ Array<Metadata> ] associations Relations to eager load
|
16
|
+
# @param [ Array<Document> ] docs Documents to preload the relations
|
17
17
|
#
|
18
18
|
# @return [ Base ] The eager load preloader
|
19
19
|
#
|
@@ -84,7 +84,7 @@ module Mongoid
|
|
84
84
|
# @example Set docs into parent with pk = "foo"
|
85
85
|
# loader.set_on_parent("foo", docs)
|
86
86
|
#
|
87
|
-
# @param [ ObjectId ] parent`s id
|
87
|
+
# @param [ ObjectId ] id parent`s id
|
88
88
|
# @param [ Document, Array ] element to push into the parent
|
89
89
|
#
|
90
90
|
# @since 4.0.0
|
@@ -140,7 +140,7 @@ module Mongoid
|
|
140
140
|
# @example Set docs into parent using the current relation name.
|
141
141
|
# loader.set_relation(doc, docs)
|
142
142
|
#
|
143
|
-
# @param [ Document ]
|
143
|
+
# @param [ Document ] doc
|
144
144
|
# @param [ Document, Array ] element to set into the parent
|
145
145
|
#
|
146
146
|
# @since 4.0.0
|
@@ -85,7 +85,7 @@ module Mongoid
|
|
85
85
|
else
|
86
86
|
batch_remove(target.dup)
|
87
87
|
end
|
88
|
-
|
88
|
+
elsif target != docs
|
89
89
|
base.delayed_atomic_sets.clear unless _assigning?
|
90
90
|
docs = normalize_docs(docs).compact
|
91
91
|
target.clear and _unscoped.clear
|
@@ -279,7 +279,7 @@ module Mongoid
|
|
279
279
|
self.inserts_valid = false
|
280
280
|
end
|
281
281
|
end
|
282
|
-
doc.
|
282
|
+
doc.send(:as_attributes)
|
283
283
|
end
|
284
284
|
end
|
285
285
|
|
@@ -308,7 +308,7 @@ module Mongoid
|
|
308
308
|
_unscoped.delete_one(doc)
|
309
309
|
unbind_one(doc)
|
310
310
|
execute_callback :after_remove, doc
|
311
|
-
doc.
|
311
|
+
doc.send(:as_attributes)
|
312
312
|
end
|
313
313
|
end
|
314
314
|
|
@@ -43,7 +43,7 @@ module Mongoid
|
|
43
43
|
# @example Substitute the new document.
|
44
44
|
# person.name.substitute(new_name)
|
45
45
|
#
|
46
|
-
# @param [ Document ]
|
46
|
+
# @param [ Document ] replacement A document to replace the target.
|
47
47
|
#
|
48
48
|
# @return [ Document, nil ] The relation or nil.
|
49
49
|
#
|
@@ -67,8 +67,6 @@ module Mongoid
|
|
67
67
|
# @example Get the binding.
|
68
68
|
# binding([ address ])
|
69
69
|
#
|
70
|
-
# @param [ Proxy ] new_target The new documents to bind with.
|
71
|
-
#
|
72
70
|
# @return [ Binding ] A binding object.
|
73
71
|
#
|
74
72
|
# @since 2.0.0.rc.1
|
@@ -36,7 +36,8 @@ module Mongoid
|
|
36
36
|
# @example Push a document.
|
37
37
|
# person.addresses.push(address)
|
38
38
|
#
|
39
|
-
# @param [ Document, Array<Document> ]
|
39
|
+
# @param [ Document, Array<Document> ] args Any number of documents.
|
40
|
+
#
|
40
41
|
def <<(*args)
|
41
42
|
docs = args.flatten
|
42
43
|
return concat(docs) if docs.size > 1
|
@@ -57,11 +58,7 @@ module Mongoid
|
|
57
58
|
#
|
58
59
|
# @since 2.0.0.rc.1
|
59
60
|
def as_document
|
60
|
-
|
61
|
-
_unscoped.each do |doc|
|
62
|
-
attributes.push(doc.as_document)
|
63
|
-
end
|
64
|
-
attributes
|
61
|
+
as_attributes.collect { |attrs| BSON::Document.new(attrs) }
|
65
62
|
end
|
66
63
|
|
67
64
|
# Appends an array of documents to the relation. Performs a batch
|
@@ -354,8 +351,6 @@ module Mongoid
|
|
354
351
|
# @example Create the binding.
|
355
352
|
# relation.binding([ address ])
|
356
353
|
#
|
357
|
-
# @param [ Array<Document> ] new_target The new documents to bind with.
|
358
|
-
#
|
359
354
|
# @return [ Binding ] The many binding.
|
360
355
|
#
|
361
356
|
# @since 2.0.0.rc.1
|
@@ -478,7 +473,7 @@ module Mongoid
|
|
478
473
|
# relation.remove_all({ :num => 1 }, true)
|
479
474
|
#
|
480
475
|
# @param [ Hash ] conditions Conditions to filter by.
|
481
|
-
# @param [ true, false ]
|
476
|
+
# @param [ true, false ] method
|
482
477
|
#
|
483
478
|
# @return [ Integer ] The number of documents removed.
|
484
479
|
def remove_all(conditions = {}, method = :delete)
|
@@ -514,6 +509,14 @@ module Mongoid
|
|
514
509
|
@_unscoped = docs
|
515
510
|
end
|
516
511
|
|
512
|
+
def as_attributes
|
513
|
+
attributes = []
|
514
|
+
_unscoped.each do |doc|
|
515
|
+
attributes.push(doc.as_document)
|
516
|
+
end
|
517
|
+
attributes
|
518
|
+
end
|
519
|
+
|
517
520
|
class << self
|
518
521
|
|
519
522
|
# Return the builder that is responsible for generating the documents
|
@@ -44,7 +44,7 @@ module Mongoid
|
|
44
44
|
# @example Substitute the new document.
|
45
45
|
# person.name.substitute(new_name)
|
46
46
|
#
|
47
|
-
# @param [ Document ]
|
47
|
+
# @param [ Document ] replacement A document to replace the target.
|
48
48
|
#
|
49
49
|
# @return [ Document, nil ] The relation or nil.
|
50
50
|
#
|
@@ -74,8 +74,6 @@ module Mongoid
|
|
74
74
|
# @example Get the binding.
|
75
75
|
# relation.binding([ address ])
|
76
76
|
#
|
77
|
-
# @param [ Document ] new_target The new document to bind with.
|
78
|
-
#
|
79
77
|
# @return [ Binding ] The relation's binding.
|
80
78
|
#
|
81
79
|
# @since 2.0.0.rc.1
|
@@ -198,7 +198,7 @@ module Mongoid
|
|
198
198
|
reference(meta, Array)
|
199
199
|
autosave(meta)
|
200
200
|
validates_relation(meta)
|
201
|
-
|
201
|
+
_synced(meta)
|
202
202
|
meta
|
203
203
|
end
|
204
204
|
|
@@ -327,7 +327,8 @@ module Mongoid
|
|
327
327
|
# Model.reference_one_to_one(:name, meta)
|
328
328
|
#
|
329
329
|
# @param [ Symbol ] name The name of the relation.
|
330
|
-
# @param [
|
330
|
+
# @param [ Symbol ] options The association options.
|
331
|
+
# @param [ Metadata ] relation The relation.
|
331
332
|
#
|
332
333
|
# @return [ Class ] The model class.
|
333
334
|
#
|
@@ -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> ] The modules.
|
923
|
+
# @param [ Array<String> ] modules 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 ] other 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 ] other 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 The parent document of the relation
|
28
|
+
# @param [ Document ] document 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.
|
@@ -115,7 +115,8 @@ module Mongoid
|
|
115
115
|
# to the target of the proxy. This can be overridden in special cases.
|
116
116
|
#
|
117
117
|
# @param [ String, Symbol ] name The name of the method.
|
118
|
-
# @param [ Array ]
|
118
|
+
# @param [ Array ] args The arguments passed to the method.
|
119
|
+
#
|
119
120
|
def method_missing(name, *args, &block)
|
120
121
|
target.send(name, *args, &block)
|
121
122
|
end
|
@@ -153,7 +154,7 @@ module Mongoid
|
|
153
154
|
# @example returns the before_add callback method name
|
154
155
|
# callback_method(:before_add)
|
155
156
|
#
|
156
|
-
# @param [ Symbol ]
|
157
|
+
# @param [ Symbol ] callback_name Which callback
|
157
158
|
#
|
158
159
|
# @return [ Array ] with callback methods to be executed, the array may have symbols and Procs
|
159
160
|
#
|
@@ -62,8 +62,7 @@ module Mongoid
|
|
62
62
|
# @example Substitute the relation.
|
63
63
|
# name.substitute(new_name)
|
64
64
|
#
|
65
|
-
# @param [ Document, Array<Document> ]
|
66
|
-
# @param [ true, false ] building Are we in build mode?
|
65
|
+
# @param [ Document, Array<Document> ] replacement The replacement.
|
67
66
|
#
|
68
67
|
# @return [ In, nil ] The relation or nil.
|
69
68
|
#
|
@@ -83,8 +82,6 @@ module Mongoid
|
|
83
82
|
# @example Get the binding object.
|
84
83
|
# binding([ address ])
|
85
84
|
#
|
86
|
-
# @param [ Document, Array<Document> ] new_target The replacement.
|
87
|
-
#
|
88
85
|
# @return [ Binding ] The binding object.
|
89
86
|
#
|
90
87
|
# @since 2.0.0.rc.1
|
@@ -40,7 +40,7 @@ module Mongoid
|
|
40
40
|
# @example Concat with other documents.
|
41
41
|
# person.posts.concat([ post_one, post_two ])
|
42
42
|
#
|
43
|
-
# @param [ Document, Array<Document> ]
|
43
|
+
# @param [ Document, Array<Document> ] args Any number of documents.
|
44
44
|
#
|
45
45
|
# @return [ Array<Document> ] The loaded docs.
|
46
46
|
#
|
@@ -208,7 +208,7 @@ module Mongoid
|
|
208
208
|
# @note This will keep matching documents in memory for iteration
|
209
209
|
# later.
|
210
210
|
#
|
211
|
-
# @param [ BSON::ObjectId, Array<BSON::ObjectId> ]
|
211
|
+
# @param [ BSON::ObjectId, Array<BSON::ObjectId> ] args The ids.
|
212
212
|
#
|
213
213
|
# @return [ Document, Criteria ] The matching document(s).
|
214
214
|
#
|
@@ -385,8 +385,6 @@ module Mongoid
|
|
385
385
|
# @example Get the binding.
|
386
386
|
# relation.binding([ address ])
|
387
387
|
#
|
388
|
-
# @param [ Array<Document> ] new_target The new documents to bind with.
|
389
|
-
#
|
390
388
|
# @return [ Binding ] The binding.
|
391
389
|
#
|
392
390
|
# @since 2.0.0.rc.1
|
@@ -510,7 +508,7 @@ module Mongoid
|
|
510
508
|
# person.posts.delete_all({ :title => "Testing" })
|
511
509
|
#
|
512
510
|
# @param [ Hash ] conditions Optional conditions to delete with.
|
513
|
-
# @param [ Symbol ] The deletion method to call.
|
511
|
+
# @param [ Symbol ] method The deletion method to call.
|
514
512
|
#
|
515
513
|
# @return [ Integer ] The number of documents deleted.
|
516
514
|
#
|
@@ -519,7 +517,7 @@ module Mongoid
|
|
519
517
|
selector = conditions || {}
|
520
518
|
removed = klass.send(method, selector.merge!(criteria.selector))
|
521
519
|
target.delete_if do |doc|
|
522
|
-
if doc.
|
520
|
+
if doc._matches?(selector)
|
523
521
|
unbind_one(doc) and true
|
524
522
|
end
|
525
523
|
end
|
@@ -569,7 +567,7 @@ module Mongoid
|
|
569
567
|
if doc.new_record? && doc.valid?(:create)
|
570
568
|
doc.run_before_callbacks(:save, :create)
|
571
569
|
docs.push(doc)
|
572
|
-
inserts.push(doc.
|
570
|
+
inserts.push(doc.send(:as_attributes))
|
573
571
|
else
|
574
572
|
doc.save
|
575
573
|
end
|
@@ -37,7 +37,7 @@ module Mongoid
|
|
37
37
|
# @example Concat with other documents.
|
38
38
|
# person.posts.concat([ post_one, post_two ])
|
39
39
|
#
|
40
|
-
# @param [ Document, Array<Document> ]
|
40
|
+
# @param [ Document, Array<Document> ] args Any number of documents.
|
41
41
|
#
|
42
42
|
# @return [ Array<Document> ] The loaded docs.
|
43
43
|
#
|
@@ -284,7 +284,7 @@ module Mongoid
|
|
284
284
|
#
|
285
285
|
# @since 3.0.0
|
286
286
|
def unsynced(doc, key)
|
287
|
-
doc.
|
287
|
+
doc._synced[key] = false
|
288
288
|
true
|
289
289
|
end
|
290
290
|
|
@@ -83,8 +83,6 @@ module Mongoid
|
|
83
83
|
# @example Get the binding.
|
84
84
|
# relation.binding([ address ])
|
85
85
|
#
|
86
|
-
# @param [ Document ] new_target The new target of the relation.
|
87
|
-
#
|
88
86
|
# @return [ Binding ] The binding object.
|
89
87
|
def binding
|
90
88
|
Bindings::Referenced::One.new(base, target, __metadata)
|
@@ -24,7 +24,7 @@ module Mongoid
|
|
24
24
|
# @example Find multiple relation metadata by macro.
|
25
25
|
# person.reflect_on_all_associations(:embeds_many)
|
26
26
|
#
|
27
|
-
# @param [ Array<Symbol> ]
|
27
|
+
# @param [ Array<Symbol> ] macros The relation macros.
|
28
28
|
#
|
29
29
|
# @return [ Array<Metadata> ] The matching relation metadata.
|
30
30
|
def reflect_on_all_associations(*macros)
|
@@ -50,7 +50,7 @@ module Mongoid
|
|
50
50
|
# @example Find multiple relation metadata by macro.
|
51
51
|
# Person.reflect_on_all_associations(:embeds_many)
|
52
52
|
#
|
53
|
-
# @param [ Array<Symbol> ]
|
53
|
+
# @param [ Array<Symbol> ] macros The relation macros.
|
54
54
|
#
|
55
55
|
# @return [ Array<Metadata> ] The matching relation metadata.
|
56
56
|
def reflect_on_all_associations(*macros)
|
@@ -11,41 +11,41 @@ module Mongoid
|
|
11
11
|
# the key has changed and the relation bindings have not been run.
|
12
12
|
#
|
13
13
|
# @example Are the foreign keys syncable?
|
14
|
-
# document.
|
14
|
+
# document._syncable??(metadata)
|
15
15
|
#
|
16
16
|
# @param [ Metadata ] metadata The relation metadata.
|
17
17
|
#
|
18
18
|
# @return [ true, false ] If we can sync.
|
19
19
|
#
|
20
20
|
# @since 2.1.0
|
21
|
-
def
|
22
|
-
!
|
21
|
+
def _syncable?(metadata)
|
22
|
+
!_synced?(metadata.foreign_key) && send(metadata.foreign_key_check)
|
23
23
|
end
|
24
24
|
|
25
25
|
# Get the synced foreign keys.
|
26
26
|
#
|
27
27
|
# @example Get the synced foreign keys.
|
28
|
-
# document.
|
28
|
+
# document._synced
|
29
29
|
#
|
30
30
|
# @return [ Hash ] The synced foreign keys.
|
31
31
|
#
|
32
32
|
# @since 2.1.0
|
33
|
-
def
|
34
|
-
@
|
33
|
+
def _synced
|
34
|
+
@_synced ||= {}
|
35
35
|
end
|
36
36
|
|
37
37
|
# Has the document been synced for the foreign key?
|
38
38
|
#
|
39
39
|
# @example Has the document been synced?
|
40
|
-
# document.
|
40
|
+
# document._synced??
|
41
41
|
#
|
42
42
|
# @param [ String ] foreign_key The foreign key.
|
43
43
|
#
|
44
44
|
# @return [ true, false ] If we can sync.
|
45
45
|
#
|
46
46
|
# @since 2.1.0
|
47
|
-
def
|
48
|
-
!!
|
47
|
+
def _synced?(foreign_key)
|
48
|
+
!!_synced[foreign_key]
|
49
49
|
end
|
50
50
|
|
51
51
|
# Update the inverse keys on destroy.
|
@@ -110,7 +110,7 @@ module Mongoid
|
|
110
110
|
# @param [ Metadata ] metadata The relation metadata.
|
111
111
|
#
|
112
112
|
# @since 2.1.0
|
113
|
-
def
|
113
|
+
def _synced(metadata)
|
114
114
|
unless metadata.forced_nil_inverse?
|
115
115
|
synced_save(metadata)
|
116
116
|
synced_destroy(metadata)
|
@@ -137,7 +137,7 @@ module Mongoid
|
|
137
137
|
set_callback(
|
138
138
|
:save,
|
139
139
|
:after,
|
140
|
-
if: ->(doc){ doc.
|
140
|
+
if: ->(doc){ doc._syncable?(metadata) }
|
141
141
|
) do |doc|
|
142
142
|
doc.update_inverse_keys(metadata)
|
143
143
|
end
|
data/lib/mongoid/scopable.rb
CHANGED
@@ -80,7 +80,7 @@ module Mongoid
|
|
80
80
|
# default_scope ->{ where(active: true) }
|
81
81
|
# end
|
82
82
|
#
|
83
|
-
# @param [ Proc, Criteria ]
|
83
|
+
# @param [ Proc, Criteria ] value The default scope.
|
84
84
|
#
|
85
85
|
# @raise [ Errors::InvalidScope ] If the scope is not a proc or criteria.
|
86
86
|
#
|
@@ -136,7 +136,7 @@ module Mongoid
|
|
136
136
|
# end
|
137
137
|
#
|
138
138
|
# @param [ Symbol ] name The name of the scope.
|
139
|
-
# @param [ Proc ]
|
139
|
+
# @param [ Proc ] value The conditions of the scope.
|
140
140
|
#
|
141
141
|
# @raise [ Errors::InvalidScope ] If the scope is not a proc.
|
142
142
|
# @raise [ Errors::ScopeOverwrite ] If the scope name already exists.
|
data/lib/mongoid/serializable.rb
CHANGED
@@ -66,7 +66,7 @@ module Mongoid
|
|
66
66
|
#
|
67
67
|
# @since 3.0.0
|
68
68
|
def field_names(options)
|
69
|
-
names = (
|
69
|
+
names = (as_attributes.keys + attribute_names).uniq.sort
|
70
70
|
|
71
71
|
only = Array.wrap(options[:only]).map(&:to_s)
|
72
72
|
except = Array.wrap(options[:except]).map(&:to_s)
|
@@ -138,7 +138,7 @@ module Mongoid
|
|
138
138
|
# @example Get the relation names.
|
139
139
|
# document.relation_names(:include => [ :addresses ])
|
140
140
|
#
|
141
|
-
# @param [ Hash, Symbol, Array<Symbol ] inclusions The inclusions.
|
141
|
+
# @param [ Hash, Symbol, Array<Symbol> ] inclusions The inclusions.
|
142
142
|
#
|
143
143
|
# @return [ Array<Symbol> ] The names of the included relations.
|
144
144
|
#
|
@@ -153,7 +153,8 @@ module Mongoid
|
|
153
153
|
# @example Get the relation options.
|
154
154
|
# document.relation_names(:include => [ :addresses ])
|
155
155
|
#
|
156
|
-
# @param [ Hash, Symbol, Array<Symbol ] inclusions The inclusions.
|
156
|
+
# @param [ Hash, Symbol, Array<Symbol> ] inclusions The inclusions.
|
157
|
+
# @param [ Hash ] options The options.
|
157
158
|
# @param [ Symbol ] name The name of the relation.
|
158
159
|
#
|
159
160
|
# @return [ Hash ] The options for the relation.
|