mongoid 7.2.0 → 7.3.0
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/Rakefile +16 -0
- data/lib/config/locales/en.yml +2 -2
- data/lib/mongoid/association/accessors.rb +1 -1
- data/lib/mongoid/association/constrainable.rb +1 -1
- data/lib/mongoid/association/depending.rb +4 -4
- data/lib/mongoid/association/embedded/batchable.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +10 -3
- data/lib/mongoid/association/nested/many.rb +1 -1
- data/lib/mongoid/association/nested/one.rb +4 -2
- data/lib/mongoid/association/proxy.rb +6 -1
- data/lib/mongoid/association/referenced/auto_save.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +493 -495
- data/lib/mongoid/association/referenced/has_many/proxy.rb +2 -2
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +2 -2
- data/lib/mongoid/attributes/projector.rb +120 -0
- data/lib/mongoid/attributes.rb +32 -14
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/clients/factory.rb +22 -8
- data/lib/mongoid/clients.rb +1 -1
- data/lib/mongoid/config.rb +19 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +10 -8
- data/lib/mongoid/copyable.rb +1 -1
- data/lib/mongoid/criteria/findable.rb +1 -1
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -24
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +46 -20
- data/lib/mongoid/criteria/queryable/selectable.rb +8 -8
- data/lib/mongoid/criteria/queryable/selector.rb +0 -4
- data/lib/mongoid/criteria.rb +4 -5
- data/lib/mongoid/document.rb +4 -17
- data/lib/mongoid/errors/delete_restriction.rb +8 -9
- data/lib/mongoid/evolvable.rb +1 -1
- data/lib/mongoid/extensions/boolean.rb +1 -2
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +2 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/fields.rb +43 -5
- data/lib/mongoid/inspectable.rb +1 -1
- data/lib/mongoid/interceptable.rb +3 -1
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +2 -1
- data/lib/mongoid/matcher/expression.rb +9 -14
- data/lib/mongoid/matcher/field_expression.rb +4 -5
- data/lib/mongoid/matcher/field_operator.rb +13 -11
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +26 -43
- data/lib/mongoid/persistable/deletable.rb +1 -2
- data/lib/mongoid/persistable/destroyable.rb +8 -2
- data/lib/mongoid/persistable/updatable.rb +27 -2
- data/lib/mongoid/query_cache.rb +35 -29
- data/lib/mongoid/reloadable.rb +5 -0
- data/lib/mongoid/selectable.rb +5 -7
- data/lib/mongoid/shardable.rb +21 -5
- data/lib/mongoid/touchable.rb +23 -4
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/config_generator.rb +8 -1
- data/spec/integration/app_spec.rb +171 -84
- data/spec/integration/associations/embeds_many_spec.rb +44 -0
- data/spec/integration/associations/has_one_spec.rb +48 -0
- data/spec/integration/callbacks_models.rb +49 -0
- data/spec/integration/callbacks_spec.rb +216 -0
- data/spec/integration/criteria/date_field_spec.rb +1 -1
- data/spec/integration/document_spec.rb +30 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +46 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +96 -0
- data/spec/integration/matcher_operator_data/in.yml +16 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/lite_spec_helper.rb +5 -4
- data/spec/mongoid/association/depending_spec.rb +391 -352
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +50 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -14
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +25 -8
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +8 -0
- data/spec/mongoid/atomic/paths_spec.rb +105 -12
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +41 -0
- data/spec/mongoid/attributes_spec.rb +333 -0
- data/spec/mongoid/clients/factory_spec.rb +48 -0
- data/spec/mongoid/config_spec.rb +32 -0
- data/spec/mongoid/contextual/atomic_spec.rb +17 -4
- data/spec/mongoid/contextual/mongo_spec.rb +2 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -73
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +105 -7
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +265 -24
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1 -565
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
- data/spec/mongoid/criteria_projection_spec.rb +411 -0
- data/spec/mongoid/criteria_spec.rb +0 -275
- data/spec/mongoid/document_fields_spec.rb +26 -0
- data/spec/mongoid/document_spec.rb +13 -13
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/extensions/false_class_spec.rb +1 -1
- data/spec/mongoid/extensions/string_spec.rb +5 -5
- data/spec/mongoid/extensions/true_class_spec.rb +1 -1
- data/spec/mongoid/fields/localized_spec.rb +4 -4
- data/spec/mongoid/fields_spec.rb +4 -4
- data/spec/mongoid/inspectable_spec.rb +12 -4
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +68 -88
- data/spec/mongoid/matcher/extract_attribute_spec.rb +3 -13
- data/spec/mongoid/persistable/deletable_spec.rb +175 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +191 -3
- data/spec/mongoid/persistable/savable_spec.rb +3 -5
- data/spec/mongoid/persistable/settable_spec.rb +30 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +1 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +8 -0
- data/spec/mongoid/reloadable_spec.rb +18 -1
- data/spec/mongoid/shardable_spec.rb +44 -0
- data/spec/mongoid/touchable_spec.rb +104 -16
- data/spec/mongoid/touchable_spec_models.rb +52 -0
- data/spec/mongoid/validatable_spec.rb +1 -1
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/lib/mrss/cluster_config.rb +221 -0
- data/spec/shared/lib/mrss/constraints.rb +51 -0
- data/spec/shared/lib/mrss/docker_runner.rb +265 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +16 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +14 -1
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +231 -0
- data/spec/shared/shlib/distro.sh +73 -0
- data/spec/shared/shlib/server.sh +290 -0
- data/spec/shared/shlib/set_env.sh +128 -0
- data/spec/spec_helper.rb +6 -2
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/models/bolt.rb +8 -0
- data/spec/support/models/customer.rb +11 -0
- data/spec/support/models/customer_address.rb +12 -0
- data/spec/support/models/dictionary.rb +6 -0
- data/spec/support/models/hole.rb +13 -0
- data/spec/support/models/mop.rb +9 -0
- data/spec/support/models/nut.rb +8 -0
- data/spec/support/models/person.rb +6 -0
- data/spec/support/models/sealer.rb +8 -0
- data/spec/support/models/shirt.rb +12 -0
- data/spec/support/models/spacer.rb +8 -0
- data/spec/support/models/threadlocker.rb +8 -0
- data/spec/support/models/washer.rb +8 -0
- data/spec/support/spec_config.rb +8 -0
- data.tar.gz.sig +0 -0
- metadata +146 -14
- metadata.gz.sig +5 -2
- data/spec/support/cluster_config.rb +0 -158
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3d1e8ba04808e5217cc1622623532caa8c519a412278bfe85d2ed6cfdeda62c7
|
|
4
|
+
data.tar.gz: 38067c7a3a2a3347b8e564e2069938cbed1d1adb4668573465b088fc01bbe167
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 067d6b81359b6c45c2c877ebeab3382425abe08f3ca5a75bf4dd880e7f082479a63823c38030fba356c061da8e9a7ea7393ca30f58c10c858b2f2d412a0aca0d
|
|
7
|
+
data.tar.gz: 4cdc9196e41db201ec36ea7024eab9ce9d7f20bf45db005c5c5111bd73756e9c5cf1ff2fc2fbead7c702ac47fabaa44aead2ab6d4db6d008ffb387d2c0c0efdb
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/Rakefile
CHANGED
|
@@ -66,6 +66,22 @@ task :ci do
|
|
|
66
66
|
spec_organizer.run
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
+
task :bucket, %i(buckets) do |task, args|
|
|
70
|
+
buckets = args[:buckets]
|
|
71
|
+
buckets = if buckets.nil? || buckets.empty?
|
|
72
|
+
[nil]
|
|
73
|
+
else
|
|
74
|
+
buckets.split(':').map do |bucket|
|
|
75
|
+
if bucket.empty?
|
|
76
|
+
nil
|
|
77
|
+
else
|
|
78
|
+
bucket.to_sym
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
spec_organizer.run_buckets(*buckets)
|
|
83
|
+
end
|
|
84
|
+
|
|
69
85
|
task :default => :spec
|
|
70
86
|
|
|
71
87
|
desc "Generate all documentation"
|
data/lib/config/locales/en.yml
CHANGED
|
@@ -578,9 +578,9 @@ en:
|
|
|
578
578
|
resolution: "Try persisting the document with valid data or remove
|
|
579
579
|
the validations."
|
|
580
580
|
delete_restriction:
|
|
581
|
-
message: "Cannot
|
|
581
|
+
message: "Cannot destroy %{document} because of dependent '%{relation}'."
|
|
582
582
|
summary: "When defining '%{relation}' with a :dependent => :restrict_with_error,
|
|
583
|
-
Mongoid will raise an error when attempting to
|
|
583
|
+
Mongoid will raise an error when attempting to destroy the
|
|
584
584
|
%{document} when the child '%{relation}' still has documents in it."
|
|
585
585
|
resolution: "Don't attempt to delete the parent %{document} when
|
|
586
586
|
it has children, or change the dependent option on the association."
|
|
@@ -300,7 +300,7 @@ module Mongoid
|
|
|
300
300
|
ids_method = "#{association.name.to_s.singularize}_ids"
|
|
301
301
|
association.inverse_class.tap do |klass|
|
|
302
302
|
klass.re_define_method(ids_method) do
|
|
303
|
-
send(association.name).only(:
|
|
303
|
+
send(association.name).only(:_id).map(&:_id)
|
|
304
304
|
end
|
|
305
305
|
end
|
|
306
306
|
end
|
|
@@ -78,13 +78,13 @@ module Mongoid
|
|
|
78
78
|
# the appropriate strategy to perform the operation.
|
|
79
79
|
#
|
|
80
80
|
# @example Execute cascades.
|
|
81
|
-
# document.
|
|
81
|
+
# document.apply_destroy_dependencies!
|
|
82
82
|
#
|
|
83
83
|
# @since 2.0.0.rc.1
|
|
84
|
-
def
|
|
84
|
+
def apply_destroy_dependencies!
|
|
85
85
|
self.class._all_dependents.each do |association|
|
|
86
|
-
if association.try(:dependent)
|
|
87
|
-
send("_dependent_#{
|
|
86
|
+
if dependent = association.try(:dependent)
|
|
87
|
+
send("_dependent_#{dependent}!", association)
|
|
88
88
|
end
|
|
89
89
|
end
|
|
90
90
|
end
|
|
@@ -329,7 +329,7 @@ module Mongoid
|
|
|
329
329
|
self.path = doc.atomic_path unless path
|
|
330
330
|
execute_callback :before_remove, doc
|
|
331
331
|
unless _assigning?
|
|
332
|
-
doc.
|
|
332
|
+
doc.apply_destroy_dependencies!
|
|
333
333
|
doc.run_before_callbacks(:destroy) if method == :destroy
|
|
334
334
|
end
|
|
335
335
|
_target.delete_one(doc)
|
|
@@ -83,8 +83,15 @@ module Mongoid
|
|
|
83
83
|
|
|
84
84
|
alias :new :build
|
|
85
85
|
|
|
86
|
-
# Clear the association. Will delete the documents from the db
|
|
87
|
-
# already persisted.
|
|
86
|
+
# Clear the association. Will delete the documents from the db
|
|
87
|
+
# if they are already persisted.
|
|
88
|
+
#
|
|
89
|
+
# If the host document is not persisted but its _id matches a
|
|
90
|
+
# persisted document, calling #clear on an association will remove
|
|
91
|
+
# the association's documents from the database even though the
|
|
92
|
+
# set of documents in the application (as loaded in the host)
|
|
93
|
+
# is different from what is in the database, and the host may
|
|
94
|
+
# not contain any persisted documents in the association either.
|
|
88
95
|
#
|
|
89
96
|
# @example Clear the association.
|
|
90
97
|
# person.addresses.clear
|
|
@@ -332,7 +339,7 @@ module Mongoid
|
|
|
332
339
|
private
|
|
333
340
|
|
|
334
341
|
def object_already_related?(document)
|
|
335
|
-
_target.any? { |existing| existing.
|
|
342
|
+
_target.any? { |existing| existing._id && existing === document }
|
|
336
343
|
end
|
|
337
344
|
|
|
338
345
|
# Appends the document to the target array, updating the index on the
|
|
@@ -181,7 +181,7 @@ module Mongoid
|
|
|
181
181
|
first = existing.first
|
|
182
182
|
converted = first ? convert_id(first.class, id) : id
|
|
183
183
|
|
|
184
|
-
if existing.where(
|
|
184
|
+
if existing.where(_id: converted).exists?
|
|
185
185
|
# document exists in association
|
|
186
186
|
doc = existing.find(converted)
|
|
187
187
|
if destroyable?(attrs)
|
|
@@ -71,7 +71,8 @@ module Mongoid
|
|
|
71
71
|
#
|
|
72
72
|
# @since 2.0.0
|
|
73
73
|
def acceptable_id?
|
|
74
|
-
id =
|
|
74
|
+
id = association.klass.extract_id_field(attributes)
|
|
75
|
+
id = convert_id(existing.class, id)
|
|
75
76
|
existing._id == id || id.nil? || (existing._id != id && update_only?)
|
|
76
77
|
end
|
|
77
78
|
|
|
@@ -84,7 +85,8 @@ module Mongoid
|
|
|
84
85
|
#
|
|
85
86
|
# @since 2.0.0
|
|
86
87
|
def delete?
|
|
87
|
-
|
|
88
|
+
id = association.klass.extract_id_field(attributes)
|
|
89
|
+
destroyable? && !id.nil?
|
|
88
90
|
end
|
|
89
91
|
|
|
90
92
|
# Can the existing association potentially be destroyed?
|
|
@@ -16,7 +16,7 @@ module Mongoid
|
|
|
16
16
|
# We undefine most methods to get them sent through to the target.
|
|
17
17
|
instance_methods.each do |method|
|
|
18
18
|
undef_method(method) unless
|
|
19
|
-
method =~ /\A(__.*|send|object_id|equal\?|respond_to\?|tap|public_send|extend_proxy|extend_proxies)\z/
|
|
19
|
+
method =~ /\A(?:__.*|send|object_id|equal\?|respond_to\?|respond_to_missing\?|tap|public_send|extend_proxy|extend_proxies)\z/
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
include Threaded::Lifecycle
|
|
@@ -137,6 +137,11 @@ module Mongoid
|
|
|
137
137
|
_target.send(name, *args, &block)
|
|
138
138
|
end
|
|
139
139
|
|
|
140
|
+
# @api private
|
|
141
|
+
def respond_to_missing?(name, *args)
|
|
142
|
+
_target.respond_to?(name, *args)
|
|
143
|
+
end
|
|
144
|
+
|
|
140
145
|
# When the base document illegally references an embedded document this
|
|
141
146
|
# error will get raised.
|
|
142
147
|
#
|
|
@@ -63,8 +63,8 @@ module Mongoid
|
|
|
63
63
|
self.before_callback_halted = false
|
|
64
64
|
else
|
|
65
65
|
__autosaving__ do
|
|
66
|
-
if
|
|
67
|
-
Array(
|
|
66
|
+
if assoc_value = ivar(association.name)
|
|
67
|
+
Array(assoc_value).each do |doc|
|
|
68
68
|
doc.with(persistence_context) do |d|
|
|
69
69
|
d.save
|
|
70
70
|
end
|