mongoid 6.4.2 → 7.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
- data/README.md +1 -1
- data/lib/config/locales/en.yml +17 -0
- data/lib/mongoid/association/accessors.rb +339 -0
- data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
- data/lib/mongoid/association/builders.rb +92 -0
- data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
- data/lib/mongoid/association/depending.rb +137 -0
- data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
- data/lib/mongoid/{relations → association}/embedded/batchable.rb +19 -19
- data/lib/mongoid/association/embedded/cyclic.rb +109 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
- data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
- data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
- data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +552 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
- data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
- data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
- data/lib/mongoid/association/embedded.rb +4 -0
- data/lib/mongoid/association/macros.rb +204 -0
- data/lib/mongoid/{relations → association}/many.rb +19 -49
- data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
- data/lib/mongoid/association/nested/many.rb +200 -0
- data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
- data/lib/mongoid/association/nested/one.rb +127 -0
- data/lib/mongoid/association/nested.rb +15 -0
- data/lib/mongoid/{relations → association}/one.rb +6 -6
- data/lib/mongoid/association/options.rb +152 -0
- data/lib/mongoid/{relations → association}/proxy.rb +31 -58
- data/lib/mongoid/association/referenced/auto_save.rb +79 -0
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
- data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
- data/lib/mongoid/association/referenced/eager.rb +162 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +312 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
- data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +510 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +578 -0
- data/lib/mongoid/association/referenced/has_many.rb +275 -0
- data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
- data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
- data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
- data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
- data/lib/mongoid/association/referenced/has_one.rb +204 -0
- data/lib/mongoid/association/referenced/syncable.rb +170 -0
- data/lib/mongoid/association/referenced.rb +7 -0
- data/lib/mongoid/{relations → association}/reflections.rb +21 -17
- data/lib/mongoid/association/relatable.rb +509 -0
- data/lib/mongoid/{relations.rb → association.rb} +57 -56
- data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
- data/lib/mongoid/atomic.rb +4 -4
- data/lib/mongoid/attributes/dynamic.rb +2 -2
- data/lib/mongoid/attributes/nested.rb +22 -11
- data/lib/mongoid/attributes/processing.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +2 -4
- data/lib/mongoid/attributes.rb +22 -13
- data/lib/mongoid/changeable.rb +1 -1
- data/lib/mongoid/clients/options.rb +7 -5
- data/lib/mongoid/composable.rb +4 -4
- data/lib/mongoid/config.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +1 -1
- data/lib/mongoid/contextual/memory.rb +21 -3
- data/lib/mongoid/contextual/mongo.rb +10 -8
- data/lib/mongoid/copyable.rb +7 -6
- data/lib/mongoid/criteria/includable.rb +14 -14
- data/lib/mongoid/criteria/modifiable.rb +8 -14
- data/lib/mongoid/criteria/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/string.rb +1 -1
- data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
- data/lib/mongoid/criteria/queryable/selectable.rb +37 -7
- data/lib/mongoid/criteria.rb +2 -2
- data/lib/mongoid/document.rb +15 -6
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
- data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
- data/lib/mongoid/errors/unknown_model.rb +25 -0
- data/lib/mongoid/errors.rb +3 -0
- data/lib/mongoid/extensions/array.rb +5 -5
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +5 -2
- data/lib/mongoid/extensions/object.rb +4 -4
- data/lib/mongoid/extensions/range.rb +1 -0
- data/lib/mongoid/extensions/regexp.rb +1 -0
- data/lib/mongoid/extensions.rb +0 -4
- data/lib/mongoid/factory.rb +13 -3
- data/lib/mongoid/fields/foreign_key.rb +5 -5
- data/lib/mongoid/fields/standard.rb +2 -14
- data/lib/mongoid/fields/validators/macro.rb +1 -1
- data/lib/mongoid/fields.rb +3 -3
- data/lib/mongoid/indexable.rb +4 -1
- data/lib/mongoid/interceptable.rb +5 -5
- data/lib/mongoid/matchable/and.rb +1 -1
- data/lib/mongoid/matchable/elem_match.rb +9 -3
- data/lib/mongoid/matchable/eq.rb +22 -0
- data/lib/mongoid/matchable/ne.rb +1 -1
- data/lib/mongoid/matchable.rb +3 -1
- data/lib/mongoid/persistable/deletable.rb +7 -6
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +57 -12
- data/lib/mongoid/persistable.rb +4 -5
- data/lib/mongoid/persistence_context.rb +20 -5
- data/lib/mongoid/query_cache.rb +8 -4
- data/lib/mongoid/railtie.rb +17 -0
- data/lib/mongoid/railties/controller_runtime.rb +86 -0
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +4 -4
- data/lib/mongoid/shardable.rb +1 -1
- data/lib/mongoid/threaded.rb +36 -0
- data/lib/mongoid/touchable.rb +102 -0
- data/lib/mongoid/traversable.rb +3 -3
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +4 -4
- data/lib/mongoid/validatable.rb +8 -8
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -0
- data/spec/app/models/animal.rb +2 -1
- data/spec/app/models/bomb.rb +1 -1
- data/spec/app/models/message.rb +1 -1
- data/spec/app/models/minim.rb +7 -0
- data/spec/app/models/person.rb +5 -2
- data/spec/app/models/shipment_address.rb +1 -0
- data/spec/app/models/store_as_dup_test3.rb +7 -0
- data/spec/app/models/store_as_dup_test4.rb +7 -0
- data/spec/app/models/updatable.rb +7 -0
- data/spec/app/models/vertex.rb +6 -0
- data/spec/app/models/wiki_page.rb +1 -1
- data/spec/config/mongoid.yml +13 -3
- data/spec/integration/associations/belongs_to_spec.rb +13 -0
- data/spec/lite_spec_helper.rb +56 -0
- data/spec/mongoid/{relations → association}/accessors_spec.rb +40 -1
- data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
- data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
- data/spec/mongoid/association/constrainable_spec.rb +115 -0
- data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +866 -0
- data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
- data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
- data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
- data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
- data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
- data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
- data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
- data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +124 -182
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
- data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
- data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
- data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
- data/spec/mongoid/{relations → association}/macros_spec.rb +148 -73
- data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
- data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
- data/spec/mongoid/association/options_spec.rb +1321 -0
- data/spec/mongoid/{relations → association}/polymorphic_spec.rb +66 -34
- data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
- data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
- data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +33 -14
- data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2006 -0
- data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
- data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +26 -7
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +56 -0
- data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
- data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
- data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +26 -11
- data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +122 -1
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
- data/spec/mongoid/association/referenced/has_many_models.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
- data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
- data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
- data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
- data/spec/mongoid/association/referenced/has_one_models.rb +48 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1350 -0
- data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
- data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
- data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +2 -2
- data/spec/mongoid/atomic_spec.rb +4 -4
- data/spec/mongoid/attributes/nested_spec.rb +29 -11
- data/spec/mongoid/attributes/readonly_spec.rb +80 -125
- data/spec/mongoid/attributes_spec.rb +38 -2
- data/spec/mongoid/clients/factory_spec.rb +24 -18
- data/spec/mongoid/clients/options_spec.rb +58 -44
- data/spec/mongoid/clients/sessions_spec.rb +1 -1
- data/spec/mongoid/clients/transactions_spec.rb +369 -0
- data/spec/mongoid/clients_spec.rb +68 -8
- data/spec/mongoid/config_spec.rb +27 -1
- data/spec/mongoid/contextual/memory_spec.rb +19 -0
- data/spec/mongoid/contextual/mongo_spec.rb +33 -5
- data/spec/mongoid/copyable_spec.rb +90 -6
- data/spec/mongoid/copyable_spec_models.rb +17 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +43 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +42 -3
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
- data/spec/mongoid/criteria/scopable_spec.rb +81 -0
- data/spec/mongoid/criteria_spec.rb +33 -18
- data/spec/mongoid/document_spec.rb +83 -4
- data/spec/mongoid/extensions/array_spec.rb +11 -15
- data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
- data/spec/mongoid/extensions/hash_spec.rb +18 -1
- data/spec/mongoid/extensions/object_spec.rb +7 -11
- data/spec/mongoid/extensions/range_spec.rb +7 -0
- data/spec/mongoid/extensions/regexp_spec.rb +23 -0
- data/spec/mongoid/factory_spec.rb +19 -1
- data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
- data/spec/mongoid/fields_spec.rb +2 -2
- data/spec/mongoid/findable_spec.rb +1 -1
- data/spec/mongoid/indexable_spec.rb +18 -8
- data/spec/mongoid/interceptable_spec.rb +22 -1
- data/spec/mongoid/matchable/elem_match_spec.rb +20 -0
- data/spec/mongoid/matchable/eq_spec.rb +48 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
- data/spec/mongoid/persistable/savable_spec.rb +2 -2
- data/spec/mongoid/persistable/settable_spec.rb +95 -10
- data/spec/mongoid/persistable_spec.rb +21 -6
- data/spec/mongoid/persistence_context_spec.rb +1 -1
- data/spec/mongoid/query_cache_spec.rb +61 -22
- data/spec/mongoid/relations/proxy_spec.rb +124 -124
- data/spec/mongoid/scopable_spec.rb +13 -0
- data/spec/mongoid/shardable_spec.rb +32 -12
- data/spec/mongoid/threaded_spec.rb +68 -0
- data/spec/mongoid/{relations/touchable_spec.rb → touchable_spec.rb} +40 -1
- data/spec/mongoid/validatable/associated_spec.rb +1 -1
- data/spec/mongoid/validatable/presence_spec.rb +7 -6
- data/spec/mongoid/validatable_spec.rb +1 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +110 -0
- data/spec/spec_helper.rb +51 -25
- data/spec/support/constraints.rb +101 -0
- data/spec/support/macros.rb +20 -0
- data/spec/support/spec_config.rb +39 -0
- metadata +602 -582
- checksums.yaml.gz.sig +0 -2
- data/lib/mongoid/relations/accessors.rb +0 -267
- data/lib/mongoid/relations/auto_save.rb +0 -94
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
- data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
- data/lib/mongoid/relations/bindings.rb +0 -9
- data/lib/mongoid/relations/builder.rb +0 -57
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
- data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
- data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
- data/lib/mongoid/relations/builders.rb +0 -106
- data/lib/mongoid/relations/cascading/delete.rb +0 -44
- data/lib/mongoid/relations/cascading/destroy.rb +0 -43
- data/lib/mongoid/relations/cascading/nullify.rb +0 -35
- data/lib/mongoid/relations/cascading/restrict.rb +0 -39
- data/lib/mongoid/relations/cascading.rb +0 -56
- data/lib/mongoid/relations/conversions.rb +0 -34
- data/lib/mongoid/relations/counter_cache.rb +0 -160
- data/lib/mongoid/relations/cyclic.rb +0 -107
- data/lib/mongoid/relations/eager/base.rb +0 -153
- data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
- data/lib/mongoid/relations/eager/has_many.rb +0 -38
- data/lib/mongoid/relations/eager/has_one.rb +0 -30
- data/lib/mongoid/relations/embedded/in.rb +0 -241
- data/lib/mongoid/relations/embedded/many.rb +0 -683
- data/lib/mongoid/relations/embedded/one.rb +0 -235
- data/lib/mongoid/relations/macros.rb +0 -367
- data/lib/mongoid/relations/metadata.rb +0 -1179
- data/lib/mongoid/relations/nested_builder.rb +0 -74
- data/lib/mongoid/relations/options.rb +0 -49
- data/lib/mongoid/relations/polymorphic.rb +0 -39
- data/lib/mongoid/relations/referenced/in.rb +0 -304
- data/lib/mongoid/relations/referenced/many.rb +0 -812
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
- data/lib/mongoid/relations/referenced/one.rb +0 -290
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets/enumerable.rb +0 -493
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -97
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
- data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
- data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
- data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
- data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
- data/spec/mongoid/relations/cascading_spec.rb +0 -355
- data/spec/mongoid/relations/constraint_spec.rb +0 -75
- data/spec/mongoid/relations/conversions_spec.rb +0 -128
- data/spec/mongoid/relations/metadata_spec.rb +0 -1985
- data/spec/mongoid/relations/options_spec.rb +0 -35
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -0
- /data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
|
@@ -24,7 +24,7 @@ module Mongoid
|
|
|
24
24
|
# @since 2.0.0
|
|
25
25
|
POLYGON = "Polygon"
|
|
26
26
|
|
|
27
|
-
# @attribute [rw] negating If the next
|
|
27
|
+
# @attribute [rw] negating If the next spression is negated.
|
|
28
28
|
# @attribute [rw] selector The query selector.
|
|
29
29
|
attr_accessor :negating, :selector
|
|
30
30
|
|
|
@@ -134,13 +134,21 @@ module Mongoid
|
|
|
134
134
|
::Boolean.evolve(value)
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
-
# Add a $geoIntersects or $geoWithin selection. Symbol operators must
|
|
138
|
-
# the examples to expand the criteria.
|
|
137
|
+
# Add a $geoIntersects or $geoWithin selection. Symbol operators must
|
|
138
|
+
# be used as shown in the examples to expand the criteria.
|
|
139
139
|
#
|
|
140
140
|
# @note The only valid geometry shapes for a $geoIntersects are:
|
|
141
141
|
# :intersects_line, :intersects_point, and :intersects_polygon.
|
|
142
142
|
#
|
|
143
|
-
# @note The only valid
|
|
143
|
+
# @note The only valid options for a $geoWithin query are the geometry
|
|
144
|
+
# shape :within_polygon and the operator :within_box.
|
|
145
|
+
#
|
|
146
|
+
# @note The :within_box operator for the $geoWithin query expects the
|
|
147
|
+
# lower left (south west) coordinate pair as the first argument and
|
|
148
|
+
# the upper right (north east) as the second argument.
|
|
149
|
+
# Important: When latitude and longitude are passed, longitude is
|
|
150
|
+
# expected as the first element of the coordinate pair.
|
|
151
|
+
# Source: https://docs.mongodb.com/manual/reference/operator/query/box/
|
|
144
152
|
#
|
|
145
153
|
# @example Add a geo intersect criterion for a line.
|
|
146
154
|
# query.geo_spacial(:location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
|
|
@@ -154,6 +162,9 @@ module Mongoid
|
|
|
154
162
|
# @example Add a geo within criterion for a polygon.
|
|
155
163
|
# query.geo_spacial(:location.within_polygon => [[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]])
|
|
156
164
|
#
|
|
165
|
+
# @example Add a geo within criterion for a box.
|
|
166
|
+
# query.geo_spacial(:location.within_box => [[ 1, 10 ], [ 2, 10 ])
|
|
167
|
+
#
|
|
157
168
|
# @param [ Hash ] criterion The criterion.
|
|
158
169
|
#
|
|
159
170
|
# @return [ Selectable ] The cloned selectable.
|
|
@@ -174,6 +185,7 @@ module Mongoid
|
|
|
174
185
|
key :within_polygon, :override, "$geoWithin", "$geometry" do |value|
|
|
175
186
|
{ "type" => POLYGON, "coordinates" => value }
|
|
176
187
|
end
|
|
188
|
+
key :within_box, :override, "$geoWithin", "$box"
|
|
177
189
|
|
|
178
190
|
# Add the $gt criterion to the selector.
|
|
179
191
|
#
|
|
@@ -501,6 +513,11 @@ module Mongoid
|
|
|
501
513
|
# @example Construct a text search selector with options.
|
|
502
514
|
# selectable.text_search("testing", :$language => "fr")
|
|
503
515
|
#
|
|
516
|
+
# @note Per https://docs.mongodb.com/manual/reference/operator/query/text/
|
|
517
|
+
# it is not currently possible to supply multiple text search
|
|
518
|
+
# conditions in a query. Mongoid will build such a query but the
|
|
519
|
+
# server will return an error when trying to execute it.
|
|
520
|
+
#
|
|
504
521
|
# @param [ String, Symbol ] terms A string of terms that MongoDB parses
|
|
505
522
|
# and uses to query the text index.
|
|
506
523
|
# @param [ Hash ] opts Text search options. See MongoDB documentation
|
|
@@ -512,9 +529,19 @@ module Mongoid
|
|
|
512
529
|
def text_search(terms, opts = nil)
|
|
513
530
|
clone.tap do |query|
|
|
514
531
|
if terms
|
|
515
|
-
criterion = {
|
|
516
|
-
criterion[
|
|
517
|
-
query.selector
|
|
532
|
+
criterion = {'$text' => { '$search' => terms }}
|
|
533
|
+
criterion['$text'].merge!(opts) if opts
|
|
534
|
+
if query.selector['$text']
|
|
535
|
+
# Per https://docs.mongodb.com/manual/reference/operator/query/text/
|
|
536
|
+
# multiple $text expressions are not currently supported by
|
|
537
|
+
# MongoDB server, but build the query correctly instead of
|
|
538
|
+
# overwriting previous text search condition with the currently
|
|
539
|
+
# given one.
|
|
540
|
+
Mongoid.logger.warn('Multiple $text expressions per query are not currently supported by the server')
|
|
541
|
+
query.selector = {'$and' => [query.selector]}.merge(criterion)
|
|
542
|
+
else
|
|
543
|
+
query.selector = query.selector.merge(criterion)
|
|
544
|
+
end
|
|
518
545
|
end
|
|
519
546
|
end
|
|
520
547
|
end
|
|
@@ -535,6 +562,9 @@ module Mongoid
|
|
|
535
562
|
#
|
|
536
563
|
# @since 1.0.0
|
|
537
564
|
def where(criterion = nil)
|
|
565
|
+
# We need to save the criterion in an instance variable so Modifiable methods
|
|
566
|
+
# know how to create a polymorphic object.
|
|
567
|
+
@criterion = criterion
|
|
538
568
|
criterion.is_a?(String) ? js_query(criterion) : expr_query(criterion)
|
|
539
569
|
end
|
|
540
570
|
|
data/lib/mongoid/criteria.rb
CHANGED
|
@@ -27,8 +27,8 @@ module Mongoid
|
|
|
27
27
|
include Modifiable
|
|
28
28
|
include Scopable
|
|
29
29
|
include Clients::Options
|
|
30
|
-
include Options
|
|
31
30
|
include Clients::Sessions
|
|
31
|
+
include Options
|
|
32
32
|
|
|
33
33
|
# Static array used to check with method missing - we only need to ever
|
|
34
34
|
# instantiate once.
|
|
@@ -36,7 +36,7 @@ module Mongoid
|
|
|
36
36
|
# @since 4.0.0
|
|
37
37
|
CHECK = []
|
|
38
38
|
|
|
39
|
-
attr_accessor :embedded, :klass, :parent_document, :
|
|
39
|
+
attr_accessor :embedded, :klass, :parent_document, :association
|
|
40
40
|
|
|
41
41
|
# Returns true if the supplied +Enumerable+ or +Criteria+ is equal to the results
|
|
42
42
|
# of this +Criteria+ or the criteria itself.
|
data/lib/mongoid/document.rb
CHANGED
|
@@ -4,7 +4,6 @@ require "mongoid/evolvable"
|
|
|
4
4
|
require "mongoid/extensions"
|
|
5
5
|
require "mongoid/errors"
|
|
6
6
|
require "mongoid/threaded"
|
|
7
|
-
require "mongoid/relations"
|
|
8
7
|
require "mongoid/atomic"
|
|
9
8
|
require "mongoid/attributes"
|
|
10
9
|
require "mongoid/contextual"
|
|
@@ -14,7 +13,9 @@ require "mongoid/criteria"
|
|
|
14
13
|
require "mongoid/factory"
|
|
15
14
|
require "mongoid/fields"
|
|
16
15
|
require "mongoid/timestamps"
|
|
16
|
+
require "mongoid/association"
|
|
17
17
|
require "mongoid/composable"
|
|
18
|
+
require "mongoid/touchable"
|
|
18
19
|
|
|
19
20
|
module Mongoid
|
|
20
21
|
|
|
@@ -23,6 +24,7 @@ module Mongoid
|
|
|
23
24
|
module Document
|
|
24
25
|
extend ActiveSupport::Concern
|
|
25
26
|
include Composable
|
|
27
|
+
include Mongoid::Touchable::InstanceMethods
|
|
26
28
|
|
|
27
29
|
attr_accessor :__selected_fields
|
|
28
30
|
attr_reader :new_record
|
|
@@ -178,6 +180,13 @@ module Mongoid
|
|
|
178
180
|
|
|
179
181
|
# Calls #as_json on the document with additional, Mongoid-specific options.
|
|
180
182
|
#
|
|
183
|
+
# @note Rails 6 changes return value of as_json for non-primitive types
|
|
184
|
+
# such as BSON::ObjectId. In Rails <= 5, as_json returned these as
|
|
185
|
+
# instances of the class. In Rails 6, these are returned serialized to
|
|
186
|
+
# primitive types (e.g. {"$oid"=>"5bcfc40bde340b37feda98e9"}).
|
|
187
|
+
# See https://github.com/rails/rails/commit/2e5cb980a448e7f4ab00df6e9ad4c1cc456616aa
|
|
188
|
+
# for more information.
|
|
189
|
+
#
|
|
181
190
|
# @example Get the document as json.
|
|
182
191
|
# document.as_json(compact: true)
|
|
183
192
|
#
|
|
@@ -190,11 +199,11 @@ module Mongoid
|
|
|
190
199
|
#
|
|
191
200
|
# @since 5.1.0
|
|
192
201
|
def as_json(options = nil)
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
super(options)
|
|
202
|
+
rv = super
|
|
203
|
+
if options && options[:compact]
|
|
204
|
+
rv = rv.compact
|
|
197
205
|
end
|
|
206
|
+
rv
|
|
198
207
|
end
|
|
199
208
|
|
|
200
209
|
# Returns an instance of the specified class with the attributes,
|
|
@@ -281,7 +290,7 @@ module Mongoid
|
|
|
281
290
|
without_autobuild do
|
|
282
291
|
relation, stored = send(name), meta.store_as
|
|
283
292
|
if attributes.key?(stored) || !relation.blank?
|
|
284
|
-
if relation
|
|
293
|
+
if !relation.nil?
|
|
285
294
|
attributes[stored] = relation.send(:as_attributes)
|
|
286
295
|
else
|
|
287
296
|
attributes.delete(stored)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
|
+
|
|
5
|
+
# This error is raised when an invalid strategy is defined for an association dependency.
|
|
6
|
+
class InvalidDependentStrategy < MongoidError
|
|
7
|
+
|
|
8
|
+
# Create the new error.
|
|
9
|
+
#
|
|
10
|
+
# @example Create the new error.
|
|
11
|
+
# InvalidDependentStrategy.new(association, invalid_strategy, valid_strategies)
|
|
12
|
+
#
|
|
13
|
+
# @param [ Mongoid::Association ] association The association for which this
|
|
14
|
+
# dependency is defined.
|
|
15
|
+
# @param [ Symbol, String ] invalid_strategy The attempted invalid strategy.
|
|
16
|
+
# @param [ Array<Symbol> ] valid_strategies The valid strategies.
|
|
17
|
+
#
|
|
18
|
+
# @since 7.0.0
|
|
19
|
+
def initialize(association, invalid_strategy, valid_strategies)
|
|
20
|
+
super(
|
|
21
|
+
compose_message(
|
|
22
|
+
"invalid_dependent_strategy",
|
|
23
|
+
{ association: association,
|
|
24
|
+
invalid_strategy: invalid_strategy,
|
|
25
|
+
valid_strategies: valid_strategies
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
|
+
|
|
5
|
+
# Raised when an option provided for a relation is invalid.
|
|
6
|
+
class InvalidRelationOption < MongoidError
|
|
7
|
+
|
|
8
|
+
# Create the new error.
|
|
9
|
+
#
|
|
10
|
+
# @example Create the new error.
|
|
11
|
+
# InvalidRelationOption.new(Person, invalid_option: 'make_me_a_sandwich')
|
|
12
|
+
#
|
|
13
|
+
# @param [ Class ] klass The model class.
|
|
14
|
+
# @param [ String, Symbol ] name The relation name.
|
|
15
|
+
# @param [ Symbol ] option The invalid option.
|
|
16
|
+
# @param [ Array<Symbol> ] valid_options The valid option.
|
|
17
|
+
#
|
|
18
|
+
# @since 3.0.0
|
|
19
|
+
def initialize(klass, name, option, valid_options)
|
|
20
|
+
super(
|
|
21
|
+
compose_message(
|
|
22
|
+
"invalid_relation_option",
|
|
23
|
+
{ klass: klass, name: name, option: option, valid_options: valid_options }
|
|
24
|
+
)
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
|
+
|
|
5
|
+
# This error is raised when trying to instantiate a model object from the value in
|
|
6
|
+
# the '_type' field of a document and the class doesn't exist.
|
|
7
|
+
class UnknownModel < MongoidError
|
|
8
|
+
|
|
9
|
+
# Create the new error.
|
|
10
|
+
#
|
|
11
|
+
# @example Instantiate the error.
|
|
12
|
+
# UnknownModel.new('InvalidClass', "invalid_class")
|
|
13
|
+
#
|
|
14
|
+
# @param [ String ] klass The model class.
|
|
15
|
+
# @param [ String ] value The value used to determine the (invalid) class.
|
|
16
|
+
#
|
|
17
|
+
# @since 7.0.0
|
|
18
|
+
def initialize(klass, value)
|
|
19
|
+
super(
|
|
20
|
+
compose_message("unknown_model", { klass: klass, value: value })
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
data/lib/mongoid/errors.rb
CHANGED
|
@@ -8,6 +8,7 @@ require "mongoid/errors/eager_load"
|
|
|
8
8
|
require "mongoid/errors/in_memory_collation_not_supported"
|
|
9
9
|
require "mongoid/errors/invalid_collection"
|
|
10
10
|
require "mongoid/errors/invalid_config_option"
|
|
11
|
+
require "mongoid/errors/invalid_dependent_strategy"
|
|
11
12
|
require "mongoid/errors/invalid_field"
|
|
12
13
|
require "mongoid/errors/invalid_field_option"
|
|
13
14
|
require "mongoid/errors/invalid_find"
|
|
@@ -17,6 +18,7 @@ require "mongoid/errors/invalid_options"
|
|
|
17
18
|
require "mongoid/errors/invalid_path"
|
|
18
19
|
require "mongoid/errors/invalid_persistence_option"
|
|
19
20
|
require "mongoid/errors/invalid_relation"
|
|
21
|
+
require "mongoid/errors/invalid_relation_option"
|
|
20
22
|
require "mongoid/errors/invalid_scope"
|
|
21
23
|
require "mongoid/errors/invalid_session_use"
|
|
22
24
|
require "mongoid/errors/invalid_set_polymorphic_relation"
|
|
@@ -42,6 +44,7 @@ require "mongoid/errors/readonly_document"
|
|
|
42
44
|
require "mongoid/errors/scope_overwrite"
|
|
43
45
|
require "mongoid/errors/too_many_nested_attribute_records"
|
|
44
46
|
require "mongoid/errors/unknown_attribute"
|
|
47
|
+
require "mongoid/errors/unknown_model"
|
|
45
48
|
require "mongoid/errors/unsaved_document"
|
|
46
49
|
require "mongoid/errors/unsupported_javascript"
|
|
47
50
|
require "mongoid/errors/validations"
|
|
@@ -122,22 +122,22 @@ module Mongoid
|
|
|
122
122
|
|
|
123
123
|
module ClassMethods
|
|
124
124
|
|
|
125
|
-
# Convert the provided object to a
|
|
125
|
+
# Convert the provided object to a proper array of foreign keys.
|
|
126
126
|
#
|
|
127
127
|
# @example Mongoize the object.
|
|
128
128
|
# Array.__mongoize_fk__(constraint, object)
|
|
129
129
|
#
|
|
130
|
-
# @param [
|
|
130
|
+
# @param [ Association ] association The association metadata.
|
|
131
131
|
# @param [ Object ] object The object to convert.
|
|
132
132
|
#
|
|
133
133
|
# @return [ Array ] The array of ids.
|
|
134
134
|
#
|
|
135
135
|
# @since 3.0.0
|
|
136
|
-
def __mongoize_fk__(
|
|
136
|
+
def __mongoize_fk__(association, object)
|
|
137
137
|
if object.resizable?
|
|
138
|
-
object.blank? ? object :
|
|
138
|
+
object.blank? ? object : association.convert_to_foreign_key(object)
|
|
139
139
|
else
|
|
140
|
-
object.blank? ? [] :
|
|
140
|
+
object.blank? ? [] : association.convert_to_foreign_key(Array(object))
|
|
141
141
|
end
|
|
142
142
|
end
|
|
143
143
|
|
|
@@ -53,7 +53,7 @@ module Mongoid
|
|
|
53
53
|
#
|
|
54
54
|
# @since 3.0.0
|
|
55
55
|
def demongoize(object)
|
|
56
|
-
object && object.numeric? ?
|
|
56
|
+
object && object.numeric? ? BigDecimal(object.to_s) : nil
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
# Mongoize an object of any type to how it's stored in the db as a String.
|
|
@@ -106,8 +106,11 @@ module Mongoid
|
|
|
106
106
|
value = self
|
|
107
107
|
keys.each do |key|
|
|
108
108
|
return nil if value.nil?
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
value_for_key = value[key]
|
|
110
|
+
if value_for_key.nil? && key.to_i.to_s == key
|
|
111
|
+
value_for_key = value[key.to_i]
|
|
112
|
+
end
|
|
113
|
+
value = value_for_key
|
|
111
114
|
end
|
|
112
115
|
value
|
|
113
116
|
end
|
|
@@ -225,17 +225,17 @@ module Mongoid
|
|
|
225
225
|
# contstraint.
|
|
226
226
|
#
|
|
227
227
|
# @example Convert the object to a fk.
|
|
228
|
-
# Object.__mongoize_fk__(
|
|
228
|
+
# Object.__mongoize_fk__(association, object)
|
|
229
229
|
#
|
|
230
|
-
# @param [
|
|
230
|
+
# @param [ Association ] association The association metadata.
|
|
231
231
|
# @param [ Object ] object The object to convert.
|
|
232
232
|
#
|
|
233
233
|
# @return [ Object ] The converted object.
|
|
234
234
|
#
|
|
235
235
|
# @since 3.0.0
|
|
236
|
-
def __mongoize_fk__(
|
|
236
|
+
def __mongoize_fk__(association, object)
|
|
237
237
|
return nil if !object || object == ""
|
|
238
|
-
|
|
238
|
+
association.convert_to_foreign_key(object)
|
|
239
239
|
end
|
|
240
240
|
|
|
241
241
|
# Convert the object from its mongo friendly ruby type to this type.
|
|
@@ -70,6 +70,7 @@ module Mongoid
|
|
|
70
70
|
def mongoize(object)
|
|
71
71
|
return nil if object.nil?
|
|
72
72
|
return object if object.is_a?(::Hash)
|
|
73
|
+
return object if object.is_a?(String)
|
|
73
74
|
hash = { "min" => object.first, "max" => object.last }
|
|
74
75
|
if object.respond_to?(:exclude_end?) && object.exclude_end?
|
|
75
76
|
hash.merge!("exclude_end" => true)
|
data/lib/mongoid/extensions.rb
CHANGED
|
@@ -5,10 +5,6 @@ class BSON::ObjectId
|
|
|
5
5
|
end
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
class Symbol
|
|
9
|
-
remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
|
|
10
|
-
end
|
|
11
|
-
|
|
12
8
|
class BSON::Document
|
|
13
9
|
# We need to override this as ActiveSupport creates a new Object, instead of a new Hash
|
|
14
10
|
# see https://github.com/rails/rails/commit/f1bad130d0c9bd77c94e43b696adca56c46a66aa
|
data/lib/mongoid/factory.rb
CHANGED
|
@@ -38,12 +38,22 @@ module Mongoid
|
|
|
38
38
|
# #only we give the document a list of the selected fields.
|
|
39
39
|
#
|
|
40
40
|
# @return [ Document ] The instantiated document.
|
|
41
|
-
def from_db(klass, attributes = nil,
|
|
41
|
+
def from_db(klass, attributes = nil, criteria = nil)
|
|
42
|
+
selected_fields = criteria.options[:fields] if criteria
|
|
42
43
|
type = (attributes || {})[TYPE]
|
|
43
44
|
if type.blank?
|
|
44
|
-
klass.instantiate(attributes, selected_fields)
|
|
45
|
+
obj = klass.instantiate(attributes, selected_fields)
|
|
46
|
+
if criteria && criteria.association && criteria.parent_document
|
|
47
|
+
obj.set_relation(criteria.association.inverse, criteria.parent_document)
|
|
48
|
+
end
|
|
49
|
+
obj
|
|
45
50
|
else
|
|
46
|
-
type.camelize
|
|
51
|
+
camelized = type.camelize
|
|
52
|
+
begin
|
|
53
|
+
camelized.constantize.instantiate(attributes, selected_fields)
|
|
54
|
+
rescue NameError
|
|
55
|
+
raise Errors::UnknownModel.new(camelized, type)
|
|
56
|
+
end
|
|
47
57
|
end
|
|
48
58
|
end
|
|
49
59
|
end
|
|
@@ -63,8 +63,8 @@ module Mongoid
|
|
|
63
63
|
# @since 3.0.0
|
|
64
64
|
def evolve(object)
|
|
65
65
|
if object_id_field? || object.is_a?(Document)
|
|
66
|
-
if
|
|
67
|
-
|
|
66
|
+
if association.polymorphic?
|
|
67
|
+
association.convert_to_foreign_key(object)
|
|
68
68
|
else
|
|
69
69
|
object.__evolve_object_id__
|
|
70
70
|
end
|
|
@@ -97,7 +97,7 @@ module Mongoid
|
|
|
97
97
|
# @since 3.0.0
|
|
98
98
|
def mongoize(object)
|
|
99
99
|
if type.resizable? || object_id_field?
|
|
100
|
-
type.__mongoize_fk__(
|
|
100
|
+
type.__mongoize_fk__(association, object)
|
|
101
101
|
else
|
|
102
102
|
related_id_field.mongoize(object)
|
|
103
103
|
end
|
|
@@ -113,7 +113,7 @@ module Mongoid
|
|
|
113
113
|
# @since 2.2.0
|
|
114
114
|
def object_id_field?
|
|
115
115
|
@object_id_field ||=
|
|
116
|
-
|
|
116
|
+
association.polymorphic? ? true : association.klass.using_object_ids?
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
# Returns true if an array, false if not.
|
|
@@ -156,7 +156,7 @@ module Mongoid
|
|
|
156
156
|
#
|
|
157
157
|
# @since 3.0.0
|
|
158
158
|
def related_id_field
|
|
159
|
-
@related_id_field ||=
|
|
159
|
+
@related_id_field ||= association.klass.fields["_id"]
|
|
160
160
|
end
|
|
161
161
|
|
|
162
162
|
# This is used when default values need to be serialized. Most of the
|
|
@@ -26,18 +26,6 @@ module Mongoid
|
|
|
26
26
|
mods[key] = new
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
# Get the constraint from the metadata once.
|
|
30
|
-
#
|
|
31
|
-
# @example Get the constraint.
|
|
32
|
-
# field.constraint
|
|
33
|
-
#
|
|
34
|
-
# @return [ Constraint ] The relation's contraint.
|
|
35
|
-
#
|
|
36
|
-
# @since 2.1.0
|
|
37
|
-
def constraint
|
|
38
|
-
@constraint ||= metadata.constraint
|
|
39
|
-
end
|
|
40
|
-
|
|
41
29
|
# Evaluate the default value and return it. Will handle the
|
|
42
30
|
# serialization, proc calls, and duplication if necessary.
|
|
43
31
|
#
|
|
@@ -127,8 +115,8 @@ module Mongoid
|
|
|
127
115
|
# @return [ Metadata ] The relation metadata.
|
|
128
116
|
#
|
|
129
117
|
# @since 2.2.0
|
|
130
|
-
def
|
|
131
|
-
@
|
|
118
|
+
def association
|
|
119
|
+
@association ||= options[:association]
|
|
132
120
|
end
|
|
133
121
|
|
|
134
122
|
# Is the field a BSON::ObjectId?
|
data/lib/mongoid/fields.rb
CHANGED
|
@@ -411,7 +411,7 @@ module Mongoid
|
|
|
411
411
|
def create_field_getter(name, meth, field)
|
|
412
412
|
generated_methods.module_eval do
|
|
413
413
|
re_define_method(meth) do
|
|
414
|
-
raw =
|
|
414
|
+
raw = read_raw_attribute(name)
|
|
415
415
|
if lazy_settable?(field, raw)
|
|
416
416
|
write_attribute(name, field.eval_default(self))
|
|
417
417
|
else
|
|
@@ -461,7 +461,7 @@ module Mongoid
|
|
|
461
461
|
re_define_method("#{meth}=") do |value|
|
|
462
462
|
val = write_attribute(name, value)
|
|
463
463
|
if field.foreign_key?
|
|
464
|
-
remove_ivar(field.
|
|
464
|
+
remove_ivar(field.association.name)
|
|
465
465
|
end
|
|
466
466
|
val
|
|
467
467
|
end
|
|
@@ -480,7 +480,7 @@ module Mongoid
|
|
|
480
480
|
def create_field_check(name, meth)
|
|
481
481
|
generated_methods.module_eval do
|
|
482
482
|
re_define_method("#{meth}?") do
|
|
483
|
-
value =
|
|
483
|
+
value = read_raw_attribute(name)
|
|
484
484
|
lookup_attribute_presence(name, value)
|
|
485
485
|
end
|
|
486
486
|
end
|
data/lib/mongoid/indexable.rb
CHANGED
|
@@ -28,8 +28,11 @@ module Mongoid
|
|
|
28
28
|
# @since 1.0.0
|
|
29
29
|
def create_indexes
|
|
30
30
|
return unless index_specifications
|
|
31
|
+
|
|
32
|
+
default_options = {background: Config.background_indexing}
|
|
33
|
+
|
|
31
34
|
index_specifications.each do |spec|
|
|
32
|
-
key, options = spec.key, spec.options
|
|
35
|
+
key, options = spec.key, default_options.merge(spec.options)
|
|
33
36
|
if database = options[:database]
|
|
34
37
|
with(database: database) do |klass|
|
|
35
38
|
klass.collection.indexes(session: _session).create_one(key, options.except(:database))
|
|
@@ -160,8 +160,8 @@ module Mongoid
|
|
|
160
160
|
#
|
|
161
161
|
# @since 2.3.0
|
|
162
162
|
def cascadable_children(kind, children = Set.new)
|
|
163
|
-
embedded_relations.each_pair do |name,
|
|
164
|
-
next unless
|
|
163
|
+
embedded_relations.each_pair do |name, association|
|
|
164
|
+
next unless association.cascading_callbacks?
|
|
165
165
|
without_autobuild do
|
|
166
166
|
delayed_pulls = delayed_atomic_pulls[name]
|
|
167
167
|
delayed_unsets = delayed_atomic_unsets[name]
|
|
@@ -170,7 +170,7 @@ module Mongoid
|
|
|
170
170
|
relation = send(name)
|
|
171
171
|
Array.wrap(relation).each do |child|
|
|
172
172
|
next if children.include?(child)
|
|
173
|
-
children.add(child) if cascadable_child?(kind, child,
|
|
173
|
+
children.add(child) if cascadable_child?(kind, child, association)
|
|
174
174
|
child.send(:cascadable_children, kind, children)
|
|
175
175
|
end
|
|
176
176
|
end
|
|
@@ -189,9 +189,9 @@ module Mongoid
|
|
|
189
189
|
# @return [ true, false ] If the child should fire the callback.
|
|
190
190
|
#
|
|
191
191
|
# @since 2.3.0
|
|
192
|
-
def cascadable_child?(kind, child,
|
|
192
|
+
def cascadable_child?(kind, child, association)
|
|
193
193
|
return false if kind == :initialize || kind == :find || kind == :touch
|
|
194
|
-
return false if kind == :validate &&
|
|
194
|
+
return false if kind == :validate && association.validate?
|
|
195
195
|
child.callback_executable?(kind) ? child.in_callback_state?(kind) : false
|
|
196
196
|
end
|
|
197
197
|
|
|
@@ -13,13 +13,19 @@ module Mongoid
|
|
|
13
13
|
#
|
|
14
14
|
# @return [ true, false ] If the values match.
|
|
15
15
|
def _matches?(value)
|
|
16
|
-
|
|
16
|
+
elem_match = value["$elemMatch"] || value[:$elemMatch]
|
|
17
|
+
|
|
18
|
+
if !@attribute.is_a?(Array) || !value.kind_of?(Hash) || !elem_match.kind_of?(Hash)
|
|
17
19
|
return false
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
return @attribute.any? do |sub_document|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
elem_match.all? do |k, v|
|
|
24
|
+
if v.try(:first).try(:[],0) == "$not".freeze || v.try(:first).try(:[],0) == :$not
|
|
25
|
+
!Matchable.matcher(sub_document, k, v.first[1])._matches?(v.first[1])
|
|
26
|
+
else
|
|
27
|
+
Matchable.matcher(sub_document, k, v)._matches?(v)
|
|
28
|
+
end
|
|
23
29
|
end
|
|
24
30
|
end
|
|
25
31
|
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
module Mongoid
|
|
4
|
+
module Matchable
|
|
5
|
+
|
|
6
|
+
# Performs equivalency checks.
|
|
7
|
+
class Eq < Default
|
|
8
|
+
|
|
9
|
+
# Return true if the attribute and first value are equal.
|
|
10
|
+
#
|
|
11
|
+
# @example Do the values match?
|
|
12
|
+
# matcher._matches?({ :key => 10 })
|
|
13
|
+
#
|
|
14
|
+
# @param [ Hash ] value The values to check.
|
|
15
|
+
#
|
|
16
|
+
# @return [ true, false ] True if matches, false if not.
|
|
17
|
+
def _matches?(value)
|
|
18
|
+
super(value.values.first)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/mongoid/matchable/ne.rb
CHANGED