mongoid 6.4.8 → 7.0.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 +0 -26
- 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 +116 -0
- data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
- data/lib/mongoid/{relations → association}/embedded/batchable.rb +21 -21
- 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 +529 -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 +20 -50
- 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 +159 -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 +310 -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 +415 -0
- data/lib/mongoid/association/touchable.rb +97 -0
- data/lib/mongoid/association.rb +150 -0
- 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 +10 -10
- 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 +1 -1
- data/lib/mongoid/clients/sessions.rb +2 -2
- data/lib/mongoid/composable.rb +4 -4
- data/lib/mongoid/config.rb +1 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +4 -4
- data/lib/mongoid/contextual/memory.rb +25 -7
- data/lib/mongoid/contextual/mongo.rb +13 -11
- data/lib/mongoid/copyable.rb +6 -6
- data/lib/mongoid/criteria/includable.rb +14 -14
- data/lib/mongoid/criteria/modifiable.rb +8 -14
- 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 +10 -34
- data/lib/mongoid/criteria.rb +2 -2
- data/lib/mongoid/document.rb +6 -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 +0 -1
- data/lib/mongoid/extensions/string.rb +1 -3
- 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 +8 -5
- 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.rb +0 -3
- data/lib/mongoid/persistable/creatable.rb +2 -2
- data/lib/mongoid/persistable/deletable.rb +9 -8
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +5 -5
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistable.rb +5 -6
- data/lib/mongoid/persistence_context.rb +1 -5
- data/lib/mongoid/query_cache.rb +19 -64
- data/lib/mongoid/railtie.rb +0 -17
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +4 -4
- data/lib/mongoid/shardable.rb +1 -1
- data/lib/mongoid/tasks/database.rb +2 -2
- data/lib/mongoid/threaded.rb +0 -36
- 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/mongoid.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/person.rb +5 -2
- data/spec/app/models/shipment_address.rb +1 -0
- data/spec/app/models/vertex.rb +6 -0
- data/spec/app/models/wiki_page.rb +1 -1
- data/spec/config/mongoid.yml +1 -0
- data/spec/mongoid/{relations → association}/accessors_spec.rb +1 -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 +613 -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} +140 -428
- 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 +7 -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} +9 -9
- 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 +1963 -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} +5 -5
- 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_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/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
- 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_spec.rb +1244 -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 → association}/touchable_spec.rb +19 -1
- 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 +14 -12
- data/spec/mongoid/attributes/readonly_spec.rb +80 -125
- data/spec/mongoid/attributes_spec.rb +38 -2
- data/spec/mongoid/clients/factory_spec.rb +28 -52
- data/spec/mongoid/clients/options_spec.rb +65 -69
- data/spec/mongoid/clients/sessions_spec.rb +4 -13
- data/spec/mongoid/config_spec.rb +24 -0
- data/spec/mongoid/contextual/geo_near_spec.rb +0 -1
- data/spec/mongoid/contextual/memory_spec.rb +19 -0
- data/spec/mongoid/contextual/mongo_spec.rb +30 -5
- data/spec/mongoid/copyable_spec.rb +34 -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 +3 -42
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
- data/spec/mongoid/criteria/scopable_spec.rb +0 -81
- data/spec/mongoid/criteria_spec.rb +16 -19
- data/spec/mongoid/document_spec.rb +2 -56
- 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 +0 -23
- data/spec/mongoid/extensions/string_spec.rb +7 -35
- 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_spec.rb +1 -26
- 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 +1 -35
- data/spec/mongoid/persistable_spec.rb +21 -6
- data/spec/mongoid/query_cache_spec.rb +16 -99
- data/spec/mongoid/relations/proxy_spec.rb +124 -124
- data/spec/mongoid/scopable_spec.rb +0 -13
- data/spec/mongoid/shardable_spec.rb +32 -12
- data/spec/mongoid/threaded_spec.rb +0 -68
- 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/spec_helper.rb +12 -14
- data.tar.gz.sig +1 -1
- metadata +192 -207
- metadata.gz.sig +0 -0
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/railties/controller_runtime.rb +0 -86
- 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/lib/mongoid/relations.rb +0 -148
- data/spec/app/models/array_field.rb +0 -7
- data/spec/app/models/delegating_patient.rb +0 -16
- data/spec/integration/document_spec.rb +0 -22
- 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/matchable/nor_spec.rb +0 -209
- 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/spec/rails/controller_extension/controller_runtime_spec.rb +0 -110
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/constraints.rb +0 -101
- data/spec/support/macros.rb +0 -20
- data/spec/support/session_registry.rb +0 -50
- data/spec/support/spec_config.rb +0 -42
- /data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
|
@@ -72,16 +72,21 @@ module Mongoid
|
|
|
72
72
|
#
|
|
73
73
|
# @example Add the unwind.
|
|
74
74
|
# pipeline.unwind(:field)
|
|
75
|
+
# pipeline.unwind(document)
|
|
75
76
|
#
|
|
76
|
-
# @param [ String, Symbol ]
|
|
77
|
+
# @param [ String, Symbol, Hash ] field_or_doc The name of the field or a document.
|
|
77
78
|
#
|
|
78
79
|
# @return [ Pipeline ] The pipeline.
|
|
79
80
|
#
|
|
80
81
|
# @since 2.0.0
|
|
81
|
-
def unwind(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
def unwind(field_or_doc)
|
|
83
|
+
unless field_or_doc.respond_to? :keys
|
|
84
|
+
normalized = field_or_doc.to_s
|
|
85
|
+
name = aliases[normalized] || normalized
|
|
86
|
+
push("$unwind" => name.__mongo_expression__)
|
|
87
|
+
else
|
|
88
|
+
push("$unwind" => field_or_doc)
|
|
89
|
+
end
|
|
85
90
|
end
|
|
86
91
|
|
|
87
92
|
private
|
|
@@ -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,21 +134,13 @@ module Mongoid
|
|
|
134
134
|
::Boolean.evolve(value)
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
-
# Add a $geoIntersects or $geoWithin selection. Symbol operators must
|
|
138
|
-
#
|
|
137
|
+
# Add a $geoIntersects or $geoWithin selection. Symbol operators must be used as shown in
|
|
138
|
+
# 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
|
|
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/
|
|
143
|
+
# @note The only valid geometry shape for a $geoWithin is :within_polygon
|
|
152
144
|
#
|
|
153
145
|
# @example Add a geo intersect criterion for a line.
|
|
154
146
|
# query.geo_spacial(:location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
|
|
@@ -162,9 +154,6 @@ module Mongoid
|
|
|
162
154
|
# @example Add a geo within criterion for a polygon.
|
|
163
155
|
# query.geo_spacial(:location.within_polygon => [[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]])
|
|
164
156
|
#
|
|
165
|
-
# @example Add a geo within criterion for a box.
|
|
166
|
-
# query.geo_spacial(:location.within_box => [[ 1, 10 ], [ 2, 10 ])
|
|
167
|
-
#
|
|
168
157
|
# @param [ Hash ] criterion The criterion.
|
|
169
158
|
#
|
|
170
159
|
# @return [ Selectable ] The cloned selectable.
|
|
@@ -185,7 +174,6 @@ module Mongoid
|
|
|
185
174
|
key :within_polygon, :override, "$geoWithin", "$geometry" do |value|
|
|
186
175
|
{ "type" => POLYGON, "coordinates" => value }
|
|
187
176
|
end
|
|
188
|
-
key :within_box, :override, "$geoWithin", "$box"
|
|
189
177
|
|
|
190
178
|
# Add the $gt criterion to the selector.
|
|
191
179
|
#
|
|
@@ -513,11 +501,6 @@ module Mongoid
|
|
|
513
501
|
# @example Construct a text search selector with options.
|
|
514
502
|
# selectable.text_search("testing", :$language => "fr")
|
|
515
503
|
#
|
|
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
|
-
#
|
|
521
504
|
# @param [ String, Symbol ] terms A string of terms that MongoDB parses
|
|
522
505
|
# and uses to query the text index.
|
|
523
506
|
# @param [ Hash ] opts Text search options. See MongoDB documentation
|
|
@@ -529,19 +512,9 @@ module Mongoid
|
|
|
529
512
|
def text_search(terms, opts = nil)
|
|
530
513
|
clone.tap do |query|
|
|
531
514
|
if terms
|
|
532
|
-
criterion = {
|
|
533
|
-
criterion[
|
|
534
|
-
|
|
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
|
|
515
|
+
criterion = { :$text => { :$search => terms } }
|
|
516
|
+
criterion[:$text].merge!(opts) if opts
|
|
517
|
+
query.selector = criterion
|
|
545
518
|
end
|
|
546
519
|
end
|
|
547
520
|
end
|
|
@@ -562,6 +535,9 @@ module Mongoid
|
|
|
562
535
|
#
|
|
563
536
|
# @since 1.0.0
|
|
564
537
|
def where(criterion = nil)
|
|
538
|
+
# We need to save the criterion in an instance variable so Modifiable methods
|
|
539
|
+
# know how to create a polymorphic object.
|
|
540
|
+
@criterion = criterion
|
|
565
541
|
criterion.is_a?(String) ? js_query(criterion) : expr_query(criterion)
|
|
566
542
|
end
|
|
567
543
|
|
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,6 +13,7 @@ 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
18
|
|
|
19
19
|
module Mongoid
|
|
@@ -190,11 +190,11 @@ module Mongoid
|
|
|
190
190
|
#
|
|
191
191
|
# @since 5.1.0
|
|
192
192
|
def as_json(options = nil)
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
193
|
+
if options && (options[:compact] == true)
|
|
194
|
+
super(options).reject! { |k,v| v.nil? }
|
|
195
|
+
else
|
|
196
|
+
super(options)
|
|
196
197
|
end
|
|
197
|
-
rv
|
|
198
198
|
end
|
|
199
199
|
|
|
200
200
|
# Returns an instance of the specified class with the attributes,
|
|
@@ -281,7 +281,7 @@ module Mongoid
|
|
|
281
281
|
without_autobuild do
|
|
282
282
|
relation, stored = send(name), meta.store_as
|
|
283
283
|
if attributes.key?(stored) || !relation.blank?
|
|
284
|
-
if relation
|
|
284
|
+
if !relation.nil?
|
|
285
285
|
attributes[stored] = relation.send(:as_attributes)
|
|
286
286
|
else
|
|
287
287
|
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? ? BigDecimal(object.to_s) : nil
|
|
56
|
+
object && object.numeric? ? ::BigDecimal.new(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,14 +28,17 @@ 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
|
-
klass.collection.indexes(session:
|
|
38
|
+
klass.collection.indexes(session: session).create_one(key, options.except(:database))
|
|
36
39
|
end
|
|
37
40
|
else
|
|
38
|
-
collection.indexes(session:
|
|
41
|
+
collection.indexes(session: session).create_one(key, options)
|
|
39
42
|
end
|
|
40
43
|
end and true
|
|
41
44
|
end
|
|
@@ -53,9 +56,9 @@ module Mongoid
|
|
|
53
56
|
indexed_database_names.each do |database|
|
|
54
57
|
with(database: database) do |klass|
|
|
55
58
|
begin
|
|
56
|
-
klass.collection.indexes(session:
|
|
59
|
+
klass.collection.indexes(session: session).each do |spec|
|
|
57
60
|
unless spec["name"] == "_id_"
|
|
58
|
-
klass.collection.indexes(session:
|
|
61
|
+
klass.collection.indexes(session: session).drop_one(spec["key"])
|
|
59
62
|
logger.info(
|
|
60
63
|
"MONGOID: Removed index '#{spec["name"]}' on collection " +
|
|
61
64
|
"'#{klass.collection.name}' in database '#{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
|