mongoid 8.0.1 → 8.0.3
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/config/locales/en.yml +1 -0
- data/lib/mongoid/association/accessors.rb +6 -6
- data/lib/mongoid/association/bindable.rb +2 -2
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/embedded/batchable.rb +5 -5
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +10 -10
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/many.rb +6 -7
- data/lib/mongoid/association/nested/many.rb +3 -3
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +5 -5
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +2 -3
- data/lib/mongoid/association/referenced/auto_save.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +2 -2
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -10
- data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +2 -2
- data/lib/mongoid/association/reflections.rb +2 -2
- data/lib/mongoid/association/relatable.rb +6 -6
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/attributes/dynamic.rb +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +1 -1
- data/lib/mongoid/attributes/projector.rb +1 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/attributes.rb +13 -13
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +5 -5
- data/lib/mongoid/clients/options.rb +1 -1
- data/lib/mongoid/clients/validators/storage.rb +3 -3
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +7 -7
- data/lib/mongoid/contextual/aggregable/memory.rb +1 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +4 -4
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/memory.rb +5 -5
- data/lib/mongoid/contextual/mongo.rb +14 -14
- data/lib/mongoid/contextual/none.rb +2 -2
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -2
- data/lib/mongoid/criteria/findable.rb +7 -4
- data/lib/mongoid/criteria/includable.rb +1 -1
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +1 -1
- data/lib/mongoid/criteria/queryable/key.rb +3 -3
- data/lib/mongoid/criteria/queryable/optional.rb +2 -2
- data/lib/mongoid/criteria/queryable/options.rb +1 -1
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +3 -3
- data/lib/mongoid/criteria/queryable/selector.rb +3 -3
- data/lib/mongoid/criteria/queryable/smash.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +1 -1
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria.rb +14 -9
- data/lib/mongoid/deprecable.rb +1 -1
- data/lib/mongoid/document.rb +2 -2
- data/lib/mongoid/equality.rb +12 -12
- data/lib/mongoid/errors/document_not_found.rb +5 -5
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_field.rb +1 -1
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/extensions/array.rb +1 -1
- data/lib/mongoid/extensions/big_decimal.rb +4 -0
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +6 -2
- data/lib/mongoid/extensions/hash.rb +1 -1
- data/lib/mongoid/extensions/integer.rb +6 -2
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +6 -6
- data/lib/mongoid/extensions/string.rb +9 -9
- data/lib/mongoid/extensions/symbol.rb +1 -1
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/fields/foreign_key.rb +4 -4
- data/lib/mongoid/fields/localized.rb +9 -4
- data/lib/mongoid/fields/standard.rb +7 -7
- data/lib/mongoid/fields.rb +9 -9
- data/lib/mongoid/findable.rb +7 -6
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +2 -1
- data/lib/mongoid/interceptable.rb +4 -4
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +12 -7
- data/lib/mongoid/persistable/creatable.rb +4 -4
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +2 -2
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +7 -7
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistable.rb +3 -3
- data/lib/mongoid/persistence_context.rb +44 -8
- data/lib/mongoid/query_cache.rb +2 -2
- data/lib/mongoid/scopable.rb +26 -22
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/stateful.rb +10 -10
- data/lib/mongoid/tasks/database.rb +0 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +12 -12
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/traversable.rb +3 -3
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +7 -7
- data/lib/mongoid/validatable.rb +6 -6
- data/lib/mongoid/version.rb +1 -1
- data/spec/integration/i18n_fallbacks_spec.rb +1 -17
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/clients_spec.rb +25 -0
- data/spec/mongoid/contextual/memory_spec.rb +4 -5
- data/spec/mongoid/contextual/mongo_spec.rb +2 -4
- data/spec/mongoid/criteria_projection_spec.rb +0 -1
- data/spec/mongoid/criteria_spec.rb +1 -1
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/extensions/big_decimal_spec.rb +15 -0
- data/spec/mongoid/extensions/float_spec.rb +10 -3
- data/spec/mongoid/extensions/integer_spec.rb +10 -3
- data/spec/mongoid/fields/localized_spec.rb +37 -12
- data/spec/mongoid/indexable_spec.rb +23 -1
- data/spec/mongoid/scopable_spec.rb +34 -16
- data/spec/mongoid/validatable/uniqueness_spec.rb +0 -1
- data/spec/support/macros.rb +16 -0
- data.tar.gz.sig +0 -0
- metadata +643 -643
- metadata.gz.sig +0 -0
|
@@ -13,13 +13,13 @@ module Mongoid
|
|
|
13
13
|
# @example Update the attribute.
|
|
14
14
|
# person.update_attribute(:title, "Sir")
|
|
15
15
|
#
|
|
16
|
-
# @param [ Symbol
|
|
16
|
+
# @param [ Symbol | String ] name The name of the attribute.
|
|
17
17
|
# @param [ Object ] value The new value of the attribute.a
|
|
18
18
|
#
|
|
19
19
|
# @raise [ Errors::ReadonlyAttribute ] If the field cannot be changed due
|
|
20
20
|
# to being flagged as read-only.
|
|
21
21
|
#
|
|
22
|
-
# @return [ true
|
|
22
|
+
# @return [ true | false ] True if save was successful, false if not.
|
|
23
23
|
def update_attribute(name, value)
|
|
24
24
|
as_writable_attribute!(name, value) do |access|
|
|
25
25
|
normalized = name.to_s
|
|
@@ -35,7 +35,7 @@ module Mongoid
|
|
|
35
35
|
#
|
|
36
36
|
# @param [ Hash ] attributes The attributes to update.
|
|
37
37
|
#
|
|
38
|
-
# @return [ true
|
|
38
|
+
# @return [ true | false ] True if validation passed, false if not.
|
|
39
39
|
def update(attributes = {})
|
|
40
40
|
assign_attributes(attributes)
|
|
41
41
|
save
|
|
@@ -53,7 +53,7 @@ module Mongoid
|
|
|
53
53
|
# @raise [ Errors::Validations ] If validation failed.
|
|
54
54
|
# @raise [ Errors::Callbacks ] If a callback returns false.
|
|
55
55
|
#
|
|
56
|
-
# @return [ true
|
|
56
|
+
# @return [ true | false ] True if validation passed.
|
|
57
57
|
def update!(attributes = {})
|
|
58
58
|
result = update_attributes(attributes)
|
|
59
59
|
unless result
|
|
@@ -91,7 +91,7 @@ module Mongoid
|
|
|
91
91
|
#
|
|
92
92
|
# @param [ Hash ] options The options.
|
|
93
93
|
#
|
|
94
|
-
# @return [ true
|
|
94
|
+
# @return [ true | false ] The result of the update.
|
|
95
95
|
def prepare_update(options = {})
|
|
96
96
|
return false if performing_validations?(options) &&
|
|
97
97
|
invalid?(options[:context] || :update)
|
|
@@ -119,9 +119,9 @@ module Mongoid
|
|
|
119
119
|
#
|
|
120
120
|
# @param [ Hash ] options Options to pass to update.
|
|
121
121
|
#
|
|
122
|
-
# @option options [ true
|
|
122
|
+
# @option options [ true | false ] :validate Whether or not to validate.
|
|
123
123
|
#
|
|
124
|
-
# @return [ true
|
|
124
|
+
# @return [ true | false ] True if succeeded, false if not.
|
|
125
125
|
def update_document(options = {})
|
|
126
126
|
prepare_update(options) do
|
|
127
127
|
updates, conflicts = init_atomic_updates
|
|
@@ -36,7 +36,7 @@ module Mongoid
|
|
|
36
36
|
#
|
|
37
37
|
# @param [ Hash ] options The options hash.
|
|
38
38
|
#
|
|
39
|
-
# @return [ true
|
|
39
|
+
# @return [ true | false ] If the operation succeeded.
|
|
40
40
|
def prepare_upsert(options = {})
|
|
41
41
|
return false if performing_validations?(options) && invalid?(:upsert)
|
|
42
42
|
result = run_callbacks(:upsert) do
|
data/lib/mongoid/persistable.rb
CHANGED
|
@@ -79,11 +79,11 @@ module Mongoid
|
|
|
79
79
|
# document.set name: "Tool"
|
|
80
80
|
# end
|
|
81
81
|
#
|
|
82
|
-
# @param [ true
|
|
82
|
+
# @param [ true | false ] join_context Join the context (i.e. merge
|
|
83
83
|
# declared atomic operations) of the atomically block wrapping this one
|
|
84
84
|
# for the same document, if one exists.
|
|
85
85
|
#
|
|
86
|
-
# @return [ true
|
|
86
|
+
# @return [ true | false ] If the operation succeeded.
|
|
87
87
|
def atomically(join_context: nil)
|
|
88
88
|
join_context = Mongoid.join_contexts if join_context.nil?
|
|
89
89
|
call_depth = @atomic_depth ||= 0
|
|
@@ -146,7 +146,7 @@ module Mongoid
|
|
|
146
146
|
# @example Are we executing atomically?
|
|
147
147
|
# document.executing_atomically?
|
|
148
148
|
#
|
|
149
|
-
# @return [ true
|
|
149
|
+
# @return [ true | false ] If we are current executing atomically.
|
|
150
150
|
def executing_atomically?
|
|
151
151
|
!@atomic_updates_to_execute_stack.nil?
|
|
152
152
|
end
|
|
@@ -118,7 +118,7 @@ module Mongoid
|
|
|
118
118
|
#
|
|
119
119
|
# @param [ Object ] other The object to be compared with this one.
|
|
120
120
|
#
|
|
121
|
-
# @return [ true
|
|
121
|
+
# @return [ true | false ] Whether the two persistence contexts are equal.
|
|
122
122
|
def ==(other)
|
|
123
123
|
return false unless other.is_a?(PersistenceContext)
|
|
124
124
|
options == other.options
|
|
@@ -184,13 +184,12 @@ module Mongoid
|
|
|
184
184
|
# PersistenceContext.set(model)
|
|
185
185
|
#
|
|
186
186
|
# @param [ Object ] object The class or model instance.
|
|
187
|
-
# @param [ Hash
|
|
187
|
+
# @param [ Hash | Mongoid::PersistenceContext ] options_or_context The persistence
|
|
188
188
|
# options or a persistence context object.
|
|
189
189
|
#
|
|
190
190
|
# @return [ Mongoid::PersistenceContext ] The persistence context for the object.
|
|
191
191
|
def set(object, options_or_context)
|
|
192
|
-
|
|
193
|
-
existing_context = Thread.current[key]
|
|
192
|
+
existing_context = get_context(object)
|
|
194
193
|
existing_options = if existing_context
|
|
195
194
|
existing_context.options
|
|
196
195
|
else
|
|
@@ -201,7 +200,7 @@ module Mongoid
|
|
|
201
200
|
end
|
|
202
201
|
new_options = existing_options.merge(options_or_context)
|
|
203
202
|
context = PersistenceContext.new(object, new_options)
|
|
204
|
-
|
|
203
|
+
store_context(object, context)
|
|
205
204
|
end
|
|
206
205
|
|
|
207
206
|
# Get the persistence context for a particular class or model instance.
|
|
@@ -213,7 +212,7 @@ module Mongoid
|
|
|
213
212
|
#
|
|
214
213
|
# @return [ Mongoid::PersistenceContext ] The persistence context for the object.
|
|
215
214
|
def get(object)
|
|
216
|
-
|
|
215
|
+
get_context(object)
|
|
217
216
|
end
|
|
218
217
|
|
|
219
218
|
# Clear the persistence context for a particular class or model instance.
|
|
@@ -221,7 +220,7 @@ module Mongoid
|
|
|
221
220
|
# @example Clear the persistence context for a class or model instance.
|
|
222
221
|
# PersistenceContext.clear(model)
|
|
223
222
|
#
|
|
224
|
-
# @param [ Class
|
|
223
|
+
# @param [ Class | Object ] object The class or model instance.
|
|
225
224
|
# @param [ Mongo::Cluster ] cluster The original cluster before this context was used.
|
|
226
225
|
# @param [ Mongoid::PersistenceContext ] original_context The original persistence
|
|
227
226
|
# context that was set before this context was used.
|
|
@@ -232,7 +231,44 @@ module Mongoid
|
|
|
232
231
|
end
|
|
233
232
|
end
|
|
234
233
|
ensure
|
|
235
|
-
|
|
234
|
+
store_context(object, original_context)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
private
|
|
238
|
+
|
|
239
|
+
# Key to store persistence contexts in the thread local storage.
|
|
240
|
+
#
|
|
241
|
+
# @api private
|
|
242
|
+
PERSISTENCE_CONTEXT_KEY = :"[mongoid]:persistence_context"
|
|
243
|
+
|
|
244
|
+
# Get the persistence context for a given object from the thread local
|
|
245
|
+
# storage.
|
|
246
|
+
#
|
|
247
|
+
# @param [ Object ] object Object to get the persistance context for.
|
|
248
|
+
#
|
|
249
|
+
# @return [ Mongoid::PersistenceContext | nil ] The persistence context
|
|
250
|
+
# for the object if previously stored, otherwise nil.
|
|
251
|
+
#
|
|
252
|
+
# @api private
|
|
253
|
+
def get_context(object)
|
|
254
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY] ||= {}
|
|
255
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY][object.object_id]
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# Store persistence context for a given object in the thread local
|
|
259
|
+
# storage.
|
|
260
|
+
#
|
|
261
|
+
# @param [ Object ] object Object to store the persistance context for.
|
|
262
|
+
# @param [ Mongoid::PersistenceContext ] context Context to store
|
|
263
|
+
#
|
|
264
|
+
# @api private
|
|
265
|
+
def store_context(object, context)
|
|
266
|
+
if context.nil?
|
|
267
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY]&.delete(object.object_id)
|
|
268
|
+
else
|
|
269
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY] ||= {}
|
|
270
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY][object.object_id] = context
|
|
271
|
+
end
|
|
236
272
|
end
|
|
237
273
|
end
|
|
238
274
|
end
|
data/lib/mongoid/query_cache.rb
CHANGED
|
@@ -22,7 +22,7 @@ module Mongoid
|
|
|
22
22
|
# @example Set if the cache is enabled.
|
|
23
23
|
# QueryCache.enabled = true
|
|
24
24
|
#
|
|
25
|
-
# @param [ true
|
|
25
|
+
# @param [ true | false ] value The enabled value.
|
|
26
26
|
def enabled=(value)
|
|
27
27
|
Mongo::QueryCache.enabled = value
|
|
28
28
|
end
|
|
@@ -32,7 +32,7 @@ module Mongoid
|
|
|
32
32
|
# @example Is the query cache enabled?
|
|
33
33
|
# QueryCache.enabled?
|
|
34
34
|
#
|
|
35
|
-
# @return [ true
|
|
35
|
+
# @return [ true | false ] If the cache is enabled.
|
|
36
36
|
def enabled?
|
|
37
37
|
Mongo::QueryCache.enabled?
|
|
38
38
|
end
|
data/lib/mongoid/scopable.rb
CHANGED
|
@@ -23,7 +23,7 @@ module Mongoid
|
|
|
23
23
|
# @example Apply the default scoping.
|
|
24
24
|
# document.apply_default_scoping
|
|
25
25
|
#
|
|
26
|
-
# @return [ true
|
|
26
|
+
# @return [ true | false ] If default scoping was applied.
|
|
27
27
|
def apply_default_scoping
|
|
28
28
|
if default_scoping
|
|
29
29
|
default_scoping.call.selector.each do |field, value|
|
|
@@ -74,7 +74,7 @@ module Mongoid
|
|
|
74
74
|
# default_scope ->{ where(active: true) }
|
|
75
75
|
# end
|
|
76
76
|
#
|
|
77
|
-
# @param [ Proc
|
|
77
|
+
# @param [ Proc | Criteria ] value The default scope.
|
|
78
78
|
#
|
|
79
79
|
# @raise [ Errors::InvalidScope ] If the scope is not a proc or criteria.
|
|
80
80
|
#
|
|
@@ -90,7 +90,7 @@ module Mongoid
|
|
|
90
90
|
# @example Can the default scope be applied?
|
|
91
91
|
# Band.default_scopable?
|
|
92
92
|
#
|
|
93
|
-
# @return [ true
|
|
93
|
+
# @return [ true | false ] If the default scope can be applied.
|
|
94
94
|
def default_scopable?
|
|
95
95
|
default_scoping? && !Threaded.without_default_scope?(self)
|
|
96
96
|
end
|
|
@@ -168,9 +168,11 @@ module Mongoid
|
|
|
168
168
|
# Band.where(name: "Depeche Mode")
|
|
169
169
|
# end
|
|
170
170
|
#
|
|
171
|
-
# @note This will force the default scope to be removed
|
|
171
|
+
# @note This will force the default scope to be removed, but will not
|
|
172
|
+
# remove scopes declared with ``.with_scope``. This will be changed
|
|
173
|
+
# in Mongoid 9.
|
|
172
174
|
#
|
|
173
|
-
# @return [ Criteria
|
|
175
|
+
# @return [ Criteria | Object ] The unscoped criteria or result of the
|
|
174
176
|
# block.
|
|
175
177
|
def unscoped
|
|
176
178
|
if block_given?
|
|
@@ -240,7 +242,7 @@ module Mongoid
|
|
|
240
242
|
# @example Warn or raise error if name exists.
|
|
241
243
|
# Model.valid_scope_name?("test")
|
|
242
244
|
#
|
|
243
|
-
# @param [ String
|
|
245
|
+
# @param [ String | Symbol ] name The name of the scope.
|
|
244
246
|
#
|
|
245
247
|
# @raise [ Errors::ScopeOverwrite ] If the name exists and configured to
|
|
246
248
|
# raise the error.
|
|
@@ -249,12 +251,12 @@ module Mongoid
|
|
|
249
251
|
if Mongoid.scope_overwrite_exception
|
|
250
252
|
raise Errors::ScopeOverwrite.new(self.name, name)
|
|
251
253
|
else
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
254
|
+
Mongoid.logger.warn(
|
|
255
|
+
"Creating scope :#{name} which conflicts with #{self.name}.#{name}. " +
|
|
256
|
+
"Calls to `Mongoid::Criteria##{name}` will delegate to " +
|
|
257
|
+
"`Mongoid::Criteria##{name}` for criteria with klass #{self.name} " +
|
|
258
|
+
"and will ignore the declared scope."
|
|
259
|
+
)
|
|
258
260
|
end
|
|
259
261
|
end
|
|
260
262
|
end
|
|
@@ -289,15 +291,17 @@ module Mongoid
|
|
|
289
291
|
# @return [ Method ] The defined method.
|
|
290
292
|
def define_scope_method(name)
|
|
291
293
|
singleton_class.class_eval do
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
294
|
+
ruby2_keywords(
|
|
295
|
+
define_method(name) do |*args|
|
|
296
|
+
scoping = _declared_scopes[name]
|
|
297
|
+
scope = instance_exec(*args, &scoping[:scope])
|
|
298
|
+
extension = scoping[:extension]
|
|
299
|
+
to_merge = scope || queryable
|
|
300
|
+
criteria = to_merge.empty_and_chainable? ? to_merge : with_default_scope.merge(to_merge)
|
|
301
|
+
criteria.extend(extension)
|
|
302
|
+
criteria
|
|
303
|
+
end
|
|
304
|
+
)
|
|
301
305
|
end
|
|
302
306
|
end
|
|
303
307
|
|
|
@@ -309,7 +313,7 @@ module Mongoid
|
|
|
309
313
|
# @example Process the default scope.
|
|
310
314
|
# Model.process_default_scope(value)
|
|
311
315
|
#
|
|
312
|
-
# @param [ Criteria
|
|
316
|
+
# @param [ Criteria | Proc ] value The default scope value.
|
|
313
317
|
def process_default_scope(value)
|
|
314
318
|
if existing = default_scoping
|
|
315
319
|
->{ existing.call.merge(value.to_proc.call) }
|
data/lib/mongoid/serializable.rb
CHANGED
|
@@ -33,10 +33,14 @@ module Mongoid
|
|
|
33
33
|
#
|
|
34
34
|
# @param [ Hash ] options The options to pass.
|
|
35
35
|
#
|
|
36
|
-
# @option options [ Symbol
|
|
37
|
-
#
|
|
38
|
-
# @option options [ Symbol
|
|
39
|
-
#
|
|
36
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :except
|
|
37
|
+
# Do not include these field(s).
|
|
38
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :include
|
|
39
|
+
# Which association(s) to include.
|
|
40
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :only
|
|
41
|
+
# Limit the field(s) to only these.
|
|
42
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :methods
|
|
43
|
+
# What methods to include.
|
|
40
44
|
#
|
|
41
45
|
# @return [ Hash ] The document, ready to be serialized.
|
|
42
46
|
def serializable_hash(options = nil)
|
|
@@ -137,7 +141,7 @@ module Mongoid
|
|
|
137
141
|
# @example Get the association names.
|
|
138
142
|
# document.relation_names(:include => [ :addresses ])
|
|
139
143
|
#
|
|
140
|
-
# @param [ Hash
|
|
144
|
+
# @param [ Hash | Symbol | Array<Symbol> ] inclusions The inclusions.
|
|
141
145
|
#
|
|
142
146
|
# @return [ Array<Symbol> ] The names of the included associations.
|
|
143
147
|
def relation_names(inclusions)
|
|
@@ -150,7 +154,7 @@ module Mongoid
|
|
|
150
154
|
# @example Get the association options.
|
|
151
155
|
# document.relation_names(:include => [ :addresses ])
|
|
152
156
|
#
|
|
153
|
-
# @param [ Hash
|
|
157
|
+
# @param [ Hash | Symbol | Array<Symbol> ] inclusions The inclusions.
|
|
154
158
|
# @param [ Hash ] options The options.
|
|
155
159
|
# @param [ Symbol ] name The name of the association.
|
|
156
160
|
#
|
data/lib/mongoid/stateful.rb
CHANGED
|
@@ -23,7 +23,7 @@ module Mongoid
|
|
|
23
23
|
# @example Is the document new?
|
|
24
24
|
# person.new_record?
|
|
25
25
|
#
|
|
26
|
-
# @return [ true
|
|
26
|
+
# @return [ true | false ] True if new, false if not.
|
|
27
27
|
def new_record?
|
|
28
28
|
@new_record ||= false
|
|
29
29
|
end
|
|
@@ -32,7 +32,7 @@ module Mongoid
|
|
|
32
32
|
# save, the object didn't exist in the database and new_record? would have
|
|
33
33
|
# returned true.
|
|
34
34
|
#
|
|
35
|
-
# @return [ true
|
|
35
|
+
# @return [ true | false ] True if was just created, false if not.
|
|
36
36
|
def previously_new_record?
|
|
37
37
|
@previously_new_record ||= false
|
|
38
38
|
end
|
|
@@ -43,7 +43,7 @@ module Mongoid
|
|
|
43
43
|
# @example Is the document persisted?
|
|
44
44
|
# person.persisted?
|
|
45
45
|
#
|
|
46
|
-
# @return [ true
|
|
46
|
+
# @return [ true | false ] True if persisted, false if not.
|
|
47
47
|
def persisted?
|
|
48
48
|
!new_record? && !destroyed?
|
|
49
49
|
end
|
|
@@ -51,7 +51,7 @@ module Mongoid
|
|
|
51
51
|
# Checks if the document was previously saved to the database
|
|
52
52
|
# but now it has been deleted.
|
|
53
53
|
#
|
|
54
|
-
# @return [ true
|
|
54
|
+
# @return [ true | false ] True if was persisted but now destroyed,
|
|
55
55
|
# otherwise false.
|
|
56
56
|
def previously_persisted?
|
|
57
57
|
!new_record? && destroyed?
|
|
@@ -63,7 +63,7 @@ module Mongoid
|
|
|
63
63
|
# @example Is the document flagged?
|
|
64
64
|
# document.flagged_for_destroy?
|
|
65
65
|
#
|
|
66
|
-
# @return [ true
|
|
66
|
+
# @return [ true | false ] If the document is flagged.
|
|
67
67
|
def flagged_for_destroy?
|
|
68
68
|
@flagged_for_destroy ||= false
|
|
69
69
|
end
|
|
@@ -77,7 +77,7 @@ module Mongoid
|
|
|
77
77
|
# @example Is the document destroyed?
|
|
78
78
|
# person.destroyed?
|
|
79
79
|
#
|
|
80
|
-
# @return [ true
|
|
80
|
+
# @return [ true | false ] True if destroyed, false if not.
|
|
81
81
|
def destroyed?
|
|
82
82
|
@destroyed ||= false
|
|
83
83
|
end
|
|
@@ -87,7 +87,7 @@ module Mongoid
|
|
|
87
87
|
# @example Is this pushable?
|
|
88
88
|
# person.pushable?
|
|
89
89
|
#
|
|
90
|
-
# @return [ true
|
|
90
|
+
# @return [ true | false ] Is the document new and embedded?
|
|
91
91
|
def pushable?
|
|
92
92
|
new_record? &&
|
|
93
93
|
embedded_many? &&
|
|
@@ -100,7 +100,7 @@ module Mongoid
|
|
|
100
100
|
# @example Is the document readonly?
|
|
101
101
|
# document.readonly?
|
|
102
102
|
#
|
|
103
|
-
# @return [ true
|
|
103
|
+
# @return [ true | false ] If the document is readonly.
|
|
104
104
|
def readonly?
|
|
105
105
|
__selected_fields != nil
|
|
106
106
|
end
|
|
@@ -110,7 +110,7 @@ module Mongoid
|
|
|
110
110
|
# @example Is this settable?
|
|
111
111
|
# person.settable?
|
|
112
112
|
#
|
|
113
|
-
# @return [ true
|
|
113
|
+
# @return [ true | false ] Is this document a new embeds one?
|
|
114
114
|
def settable?
|
|
115
115
|
new_record? && embedded_one? && _parent.persisted?
|
|
116
116
|
end
|
|
@@ -120,7 +120,7 @@ module Mongoid
|
|
|
120
120
|
# @example Is the document updateable?
|
|
121
121
|
# person.updateable?
|
|
122
122
|
#
|
|
123
|
-
# @return [ true
|
|
123
|
+
# @return [ true | false ] If the document is changed and persisted.
|
|
124
124
|
def updateable?
|
|
125
125
|
persisted? && changed?
|
|
126
126
|
end
|
|
@@ -36,7 +36,6 @@ module Mongoid
|
|
|
36
36
|
# Mongoid::Tasks::Database.undefined_indexes
|
|
37
37
|
#
|
|
38
38
|
# @return [ Array<Hash> ] The list of undefined indexes by model.
|
|
39
|
-
#
|
|
40
39
|
def undefined_indexes(models = ::Mongoid.models)
|
|
41
40
|
undefined_by_model = {}
|
|
42
41
|
|
|
@@ -90,7 +89,6 @@ module Mongoid
|
|
|
90
89
|
# Mongoid::Tasks::Database.remove_indexes
|
|
91
90
|
#
|
|
92
91
|
# @return [ Array<Class> ] The un-indexed models.
|
|
93
|
-
#
|
|
94
92
|
def remove_indexes(models = ::Mongoid.models)
|
|
95
93
|
models.each do |model|
|
|
96
94
|
next if model.embedded?
|
|
@@ -37,7 +37,7 @@ module Mongoid
|
|
|
37
37
|
# @example Is the current thread in assigning mode?
|
|
38
38
|
# proxy._assigning?
|
|
39
39
|
#
|
|
40
|
-
# @return [ true
|
|
40
|
+
# @return [ true | false ] If the thread is assigning.
|
|
41
41
|
def _assigning?
|
|
42
42
|
Threaded.executing?(ASSIGN)
|
|
43
43
|
end
|
|
@@ -62,7 +62,7 @@ module Mongoid
|
|
|
62
62
|
# @example Is the current thread in binding mode?
|
|
63
63
|
# proxy.binding?
|
|
64
64
|
#
|
|
65
|
-
# @return [ true
|
|
65
|
+
# @return [ true | false ] If the thread is binding.
|
|
66
66
|
def _binding?
|
|
67
67
|
Threaded.executing?(BIND)
|
|
68
68
|
end
|
|
@@ -87,7 +87,7 @@ module Mongoid
|
|
|
87
87
|
# @example Is the current thread in building mode?
|
|
88
88
|
# proxy._building?
|
|
89
89
|
#
|
|
90
|
-
# @return [ true
|
|
90
|
+
# @return [ true | false ] If the thread is building.
|
|
91
91
|
def _building?
|
|
92
92
|
Threaded.executing?(BUILD)
|
|
93
93
|
end
|
|
@@ -97,7 +97,7 @@ module Mongoid
|
|
|
97
97
|
# @example Is the current thread in creating mode?
|
|
98
98
|
# proxy.creating?
|
|
99
99
|
#
|
|
100
|
-
# @return [ true
|
|
100
|
+
# @return [ true | false ] If the thread is creating.
|
|
101
101
|
def _creating?
|
|
102
102
|
Threaded.executing?(CREATE)
|
|
103
103
|
end
|
|
@@ -122,7 +122,7 @@ module Mongoid
|
|
|
122
122
|
# @example Is the current thread in loading mode?
|
|
123
123
|
# proxy._loading?
|
|
124
124
|
#
|
|
125
|
-
# @return [ true
|
|
125
|
+
# @return [ true | false ] If the thread is loading.
|
|
126
126
|
def _loading?
|
|
127
127
|
Threaded.executing?(LOAD)
|
|
128
128
|
end
|
data/lib/mongoid/threaded.rb
CHANGED
|
@@ -45,7 +45,7 @@ module Mongoid
|
|
|
45
45
|
# @example Get the global database override.
|
|
46
46
|
# Threaded.database_override
|
|
47
47
|
#
|
|
48
|
-
# @return [ String
|
|
48
|
+
# @return [ String | Symbol ] The override.
|
|
49
49
|
def database_override
|
|
50
50
|
Thread.current[DATABASE_OVERRIDE_KEY]
|
|
51
51
|
end
|
|
@@ -55,9 +55,9 @@ module Mongoid
|
|
|
55
55
|
# @example Set the global database override.
|
|
56
56
|
# Threaded.database_override = :testing
|
|
57
57
|
#
|
|
58
|
-
# @param [ String
|
|
58
|
+
# @param [ String | Symbol ] name The global override name.
|
|
59
59
|
#
|
|
60
|
-
# @return [ String
|
|
60
|
+
# @return [ String | Symbol ] The override.
|
|
61
61
|
def database_override=(name)
|
|
62
62
|
Thread.current[DATABASE_OVERRIDE_KEY] = name
|
|
63
63
|
end
|
|
@@ -167,7 +167,7 @@ module Mongoid
|
|
|
167
167
|
# @example Get the global client override.
|
|
168
168
|
# Threaded.client_override
|
|
169
169
|
#
|
|
170
|
-
# @return [ String
|
|
170
|
+
# @return [ String | Symbol ] The override.
|
|
171
171
|
def client_override
|
|
172
172
|
Thread.current[CLIENT_OVERRIDE_KEY]
|
|
173
173
|
end
|
|
@@ -177,9 +177,9 @@ module Mongoid
|
|
|
177
177
|
# @example Set the global client override.
|
|
178
178
|
# Threaded.client_override = :testing
|
|
179
179
|
#
|
|
180
|
-
# @param [ String
|
|
180
|
+
# @param [ String | Symbol ] name The global override name.
|
|
181
181
|
#
|
|
182
|
-
# @return [ String
|
|
182
|
+
# @return [ String | Symbol ] The override.
|
|
183
183
|
def client_override=(name)
|
|
184
184
|
Thread.current[CLIENT_OVERRIDE_KEY] = name
|
|
185
185
|
end
|
|
@@ -255,7 +255,7 @@ module Mongoid
|
|
|
255
255
|
#
|
|
256
256
|
# @param [ Document ] document The document to check.
|
|
257
257
|
#
|
|
258
|
-
# @return [ true
|
|
258
|
+
# @return [ true | false ] If the document is autosaved.
|
|
259
259
|
def autosaved?(document)
|
|
260
260
|
autosaves_for(document.class).include?(document._id)
|
|
261
261
|
end
|
|
@@ -267,7 +267,7 @@ module Mongoid
|
|
|
267
267
|
#
|
|
268
268
|
# @param [ Document ] document The document to check.
|
|
269
269
|
#
|
|
270
|
-
# @return [ true
|
|
270
|
+
# @return [ true | false ] If the document is validated.
|
|
271
271
|
def validated?(document)
|
|
272
272
|
validations_for(document.class).include?(document._id)
|
|
273
273
|
end
|
|
@@ -322,7 +322,7 @@ module Mongoid
|
|
|
322
322
|
#
|
|
323
323
|
# @param [ Mongo::Session ] session The session to save.
|
|
324
324
|
def set_session(session)
|
|
325
|
-
Thread.current[:session] = session
|
|
325
|
+
Thread.current["[mongoid]:session"] = session
|
|
326
326
|
end
|
|
327
327
|
|
|
328
328
|
# Get the cached session for this thread.
|
|
@@ -330,9 +330,9 @@ module Mongoid
|
|
|
330
330
|
# @example Get the session for this thread.
|
|
331
331
|
# Threaded.get_session
|
|
332
332
|
#
|
|
333
|
-
# @return [ Mongo::Session
|
|
333
|
+
# @return [ Mongo::Session | nil ] The session cached on this thread or nil.
|
|
334
334
|
def get_session
|
|
335
|
-
Thread.current[:session]
|
|
335
|
+
Thread.current["[mongoid]:session"]
|
|
336
336
|
end
|
|
337
337
|
|
|
338
338
|
# Clear the cached session for this thread.
|
|
@@ -344,7 +344,7 @@ module Mongoid
|
|
|
344
344
|
def clear_session
|
|
345
345
|
session = get_session
|
|
346
346
|
session.end_session if session
|
|
347
|
-
Thread.current[:session] = nil
|
|
347
|
+
Thread.current["[mongoid]:session"] = nil
|
|
348
348
|
end
|
|
349
349
|
end
|
|
350
350
|
end
|
|
@@ -35,7 +35,7 @@ module Mongoid
|
|
|
35
35
|
# @example Can the timestamp be set?
|
|
36
36
|
# document.able_to_set_updated_at?
|
|
37
37
|
#
|
|
38
|
-
# @return [ true
|
|
38
|
+
# @return [ true | false ] If the timestamp can be set.
|
|
39
39
|
def able_to_set_updated_at?
|
|
40
40
|
!frozen? && !timeless? && (new_record? || changed?)
|
|
41
41
|
end
|
data/lib/mongoid/traversable.rb
CHANGED
|
@@ -203,7 +203,7 @@ module Mongoid
|
|
|
203
203
|
# @example Check if the document is a subclass
|
|
204
204
|
# Square.new.hereditary?
|
|
205
205
|
#
|
|
206
|
-
# @return [ true
|
|
206
|
+
# @return [ true | false ] True if hereditary, false if not.
|
|
207
207
|
def hereditary?
|
|
208
208
|
self.class.hereditary?
|
|
209
209
|
end
|
|
@@ -283,7 +283,7 @@ module Mongoid
|
|
|
283
283
|
# @example Is the document the root?
|
|
284
284
|
# document._root?
|
|
285
285
|
#
|
|
286
|
-
# @return [ true
|
|
286
|
+
# @return [ true | false ] If the document is the root.
|
|
287
287
|
def _root?
|
|
288
288
|
_parent ? false : true
|
|
289
289
|
end
|
|
@@ -295,7 +295,7 @@ module Mongoid
|
|
|
295
295
|
# @example Check if the document is a subclass.
|
|
296
296
|
# Square.hereditary?
|
|
297
297
|
#
|
|
298
|
-
# @return [ true
|
|
298
|
+
# @return [ true | false ] True if hereditary, false if not.
|
|
299
299
|
def hereditary?
|
|
300
300
|
!!(Mongoid::Document > superclass)
|
|
301
301
|
end
|
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
|
12
12
|
# validator.validate_each(model, :name, "value")
|
|
13
13
|
#
|
|
14
14
|
# @param [ Document ] document The document.
|
|
15
|
-
# @param [ Symbol
|
|
15
|
+
# @param [ Symbol | String ] attribute The attribute to validate.
|
|
16
16
|
# @param [ Object ] value The attribute value.
|
|
17
17
|
def validate_each(document, attribute, value)
|
|
18
18
|
field = document.fields[document.database_field_name(attribute)]
|
|
@@ -19,7 +19,6 @@ module Mongoid
|
|
|
19
19
|
# end
|
|
20
20
|
#
|
|
21
21
|
# @param [ Array ] args The arguments to pass to the validator.
|
|
22
|
-
#
|
|
23
22
|
def validates_associated(*args)
|
|
24
23
|
validates_with(AssociatedValidator, _merge_attributes(args))
|
|
25
24
|
end
|
|
@@ -37,7 +36,6 @@ module Mongoid
|
|
|
37
36
|
# end
|
|
38
37
|
#
|
|
39
38
|
# @param [ Array ] args The arguments to pass to the validator.
|
|
40
|
-
#
|
|
41
39
|
def validates_uniqueness_of(*args)
|
|
42
40
|
validates_with(UniquenessValidator, _merge_attributes(args))
|
|
43
41
|
end
|
|
@@ -56,7 +56,7 @@ module Mongoid
|
|
|
56
56
|
# @param [ Symbol ] attr The attribute.
|
|
57
57
|
# @param [ Object ] value The value.
|
|
58
58
|
#
|
|
59
|
-
# @return [ true
|
|
59
|
+
# @return [ true | false ] If the doc is missing.
|
|
60
60
|
def relation_or_fk_missing?(doc, attr, value)
|
|
61
61
|
return true if value.blank? && doc.send(attr).blank?
|
|
62
62
|
association = doc.relations[attr.to_s]
|
|
@@ -72,7 +72,7 @@ module Mongoid
|
|
|
72
72
|
#
|
|
73
73
|
# @param [ Object ] value The value.
|
|
74
74
|
#
|
|
75
|
-
# @return [ true
|
|
75
|
+
# @return [ true | false ] If the value is not present.
|
|
76
76
|
def not_present?(value)
|
|
77
77
|
value.blank? && value != false
|
|
78
78
|
end
|