mongoid 6.4.8 → 7.0.13
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/LICENSE +1 -0
- data/README.md +4 -3
- data/Rakefile +33 -7
- 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 +211 -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 +174 -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 +45 -59
- 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 +511 -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/paths/embedded.rb +1 -1
- data/lib/mongoid/atomic.rb +14 -4
- data/lib/mongoid/attributes/dynamic.rb +16 -15
- 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 +55 -31
- data/lib/mongoid/changeable.rb +1 -1
- data/lib/mongoid/clients/options.rb +7 -5
- data/lib/mongoid/clients/sessions.rb +20 -4
- data/lib/mongoid/composable.rb +4 -4
- data/lib/mongoid/config/environment.rb +21 -8
- 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 +11 -6
- data/lib/mongoid/criteria/includable.rb +14 -14
- data/lib/mongoid/criteria/modifiable.rb +8 -3
- data/lib/mongoid/criteria/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/string.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +12 -0
- data/lib/mongoid/criteria/queryable/key.rb +67 -8
- data/lib/mongoid/criteria/queryable/mergeable.rb +5 -4
- data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
- data/lib/mongoid/criteria/queryable/selectable.rb +5 -3
- data/lib/mongoid/criteria/queryable/selector.rb +9 -31
- data/lib/mongoid/criteria.rb +9 -3
- data/lib/mongoid/document.rb +14 -4
- 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/hash.rb +9 -4
- data/lib/mongoid/extensions/object.rb +4 -4
- data/lib/mongoid/extensions/range.rb +1 -0
- data/lib/mongoid/extensions/regexp.rb +1 -1
- data/lib/mongoid/extensions/string.rb +2 -2
- 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 +5 -4
- data/lib/mongoid/indexable.rb +4 -1
- data/lib/mongoid/interceptable.rb +8 -6
- data/lib/mongoid/matchable/all.rb +4 -3
- data/lib/mongoid/matchable/and.rb +1 -1
- data/lib/mongoid/matchable/default.rb +71 -24
- 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/regexp.rb +2 -2
- data/lib/mongoid/matchable.rb +17 -16
- 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/pushable.rb +11 -2
- data/lib/mongoid/persistable/settable.rb +57 -12
- data/lib/mongoid/persistable.rb +4 -5
- data/lib/mongoid/persistence_context.rb +26 -11
- data/lib/mongoid/positional.rb +1 -1
- data/lib/mongoid/query_cache.rb +4 -2
- data/lib/mongoid/serializable.rb +4 -4
- data/lib/mongoid/shardable.rb +1 -1
- data/lib/mongoid/touchable.rb +102 -0
- data/lib/mongoid/traversable.rb +3 -3
- data/lib/mongoid/validatable/macros.rb +1 -1
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +5 -5
- data/lib/mongoid/validatable.rb +8 -8
- data/lib/mongoid/version.rb +2 -1
- data/lib/mongoid.rb +1 -0
- data/lib/rails/generators/mongoid/config/config_generator.rb +8 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -0
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/spec/README.md +18 -0
- data/spec/app/models/animal.rb +2 -1
- data/spec/app/models/bomb.rb +1 -1
- data/spec/app/models/customer.rb +11 -0
- data/spec/app/models/customer_address.rb +12 -0
- data/spec/app/models/message.rb +1 -1
- data/spec/app/models/minim.rb +7 -0
- data/spec/app/models/other_owner_object.rb +2 -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/app_spec.rb +341 -0
- data/spec/integration/associations/belongs_to_spec.rb +13 -0
- data/spec/integration/associations/embedded_spec.rb +176 -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 +41 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +32 -0
- data/spec/integration/matchable_spec.rb +680 -0
- data/spec/lite_spec_helper.rb +71 -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 → association}/embedded/dirty_spec.rb +0 -0
- 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} +55 -77
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +901 -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_models.rb +53 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +862 -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_dnl_models.rb +6 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +954 -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 +2023 -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} +247 -99
- 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 +227 -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} +30 -94
- 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 +1360 -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/paths_spec.rb +41 -0
- data/spec/mongoid/atomic_spec.rb +4 -4
- data/spec/mongoid/attributes/dynamic_spec.rb +153 -0
- data/spec/mongoid/attributes/nested_spec.rb +29 -11
- data/spec/mongoid/attributes/readonly_spec.rb +80 -125
- data/spec/mongoid/attributes_spec.rb +298 -9
- data/spec/mongoid/clients/factory_spec.rb +20 -38
- data/spec/mongoid/clients/options_spec.rb +64 -50
- data/spec/mongoid/clients/sessions_spec.rb +9 -5
- data/spec/mongoid/clients/transactions_spec.rb +390 -0
- data/spec/mongoid/clients_spec.rb +70 -10
- data/spec/mongoid/config_spec.rb +27 -1
- data/spec/mongoid/contextual/atomic_spec.rb +37 -14
- data/spec/mongoid/contextual/geo_near_spec.rb +11 -2
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -5
- data/spec/mongoid/contextual/memory_spec.rb +19 -0
- data/spec/mongoid/contextual/mongo_spec.rb +107 -56
- data/spec/mongoid/copyable_spec.rb +90 -6
- data/spec/mongoid/copyable_spec_models.rb +17 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +173 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +54 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +44 -1
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +19 -7
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +28 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +48 -6
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +762 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +5 -224
- data/spec/mongoid/criteria/queryable/selector_spec.rb +37 -0
- data/spec/mongoid/criteria_spec.rb +36 -19
- data/spec/mongoid/document_fields_spec.rb +88 -0
- data/spec/mongoid/document_persistence_context_spec.rb +33 -0
- data/spec/mongoid/document_spec.rb +29 -4
- data/spec/mongoid/extensions/array_spec.rb +11 -15
- 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/factory_spec.rb +21 -3
- data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
- data/spec/mongoid/fields_spec.rb +1 -1
- data/spec/mongoid/indexable_spec.rb +24 -12
- data/spec/mongoid/interceptable_spec.rb +22 -1
- data/spec/mongoid/matchable/default_spec.rb +10 -3
- data/spec/mongoid/matchable/elem_match_spec.rb +20 -0
- data/spec/mongoid/matchable/eq_spec.rb +48 -0
- data/spec/mongoid/matchable/regexp_spec.rb +2 -2
- data/spec/mongoid/matchable_spec.rb +2 -2
- data/spec/mongoid/persistable/pushable_spec.rb +55 -1
- data/spec/mongoid/persistable/savable_spec.rb +5 -5
- data/spec/mongoid/persistable/settable_spec.rb +125 -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 +65 -27
- data/spec/mongoid/relations/proxy_spec.rb +124 -124
- data/spec/mongoid/scopable_spec.rb +2 -1
- data/spec/mongoid/shardable_spec.rb +32 -12
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +1 -1
- 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/uniqueness_spec.rb +33 -6
- data/spec/mongoid/validatable_spec.rb +1 -1
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +221 -0
- data/spec/shared/lib/mrss/constraints.rb +354 -0
- data/spec/shared/lib/mrss/docker_runner.rb +265 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +191 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +162 -0
- 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 +34 -49
- data/spec/support/cluster_config.rb +3 -3
- data/spec/support/constraints.rb +21 -76
- data/spec/support/expectations.rb +17 -3
- data/spec/support/spec_config.rb +20 -7
- data.tar.gz.sig +0 -0
- metadata +646 -541
- metadata.gz.sig +1 -5
- 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
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Association
|
|
3
|
+
module Embedded
|
|
4
|
+
class EmbeddedIn
|
|
5
|
+
|
|
6
|
+
class Proxy < Association::One
|
|
7
|
+
|
|
8
|
+
# Instantiate a new embedded_in relation.
|
|
9
|
+
#
|
|
10
|
+
# @example Create the new relation.
|
|
11
|
+
# Association::Embedded::EmbeddedIn.new(person, address, association)
|
|
12
|
+
#
|
|
13
|
+
# @param [ Document ] base The document the relation hangs off of.
|
|
14
|
+
# @param [ Document ] target The target (parent) of the relation.
|
|
15
|
+
# @param [ Association ] association The association metadata.
|
|
16
|
+
#
|
|
17
|
+
# @return [ In ] The proxy.
|
|
18
|
+
def initialize(base, target, association)
|
|
19
|
+
init(base, target, association) do
|
|
20
|
+
characterize_one(_target)
|
|
21
|
+
bind_one
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Substitutes the supplied target documents for the existing document
|
|
26
|
+
# in the relation.
|
|
27
|
+
#
|
|
28
|
+
# @example Substitute the new document.
|
|
29
|
+
# person.name.substitute(new_name)
|
|
30
|
+
#
|
|
31
|
+
# @param [ Document ] replacement A document to replace the target.
|
|
32
|
+
#
|
|
33
|
+
# @return [ Document, nil ] The relation or nil.
|
|
34
|
+
#
|
|
35
|
+
# @since 2.0.0.rc.1
|
|
36
|
+
def substitute(replacement)
|
|
37
|
+
unbind_one
|
|
38
|
+
unless replacement
|
|
39
|
+
_base.delete if persistable?
|
|
40
|
+
return nil
|
|
41
|
+
end
|
|
42
|
+
_base.new_record = true
|
|
43
|
+
self._target = replacement
|
|
44
|
+
bind_one
|
|
45
|
+
self
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
# Instantiate the binding associated with this relation.
|
|
51
|
+
#
|
|
52
|
+
# @example Get the binding.
|
|
53
|
+
# binding([ address ])
|
|
54
|
+
#
|
|
55
|
+
# @return [ Binding ] A binding object.
|
|
56
|
+
#
|
|
57
|
+
# @since 2.0.0.rc.1
|
|
58
|
+
def binding
|
|
59
|
+
Binding.new(_base, _target, _association)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Characterize the document.
|
|
63
|
+
#
|
|
64
|
+
# @example Set the base association.
|
|
65
|
+
# object.characterize_one(document)
|
|
66
|
+
#
|
|
67
|
+
# @param [ Document ] document The document to set the association metadata on.
|
|
68
|
+
#
|
|
69
|
+
# @since 2.1.0
|
|
70
|
+
def characterize_one(document)
|
|
71
|
+
unless _base._association
|
|
72
|
+
_base._association = _association.inverse_association(document)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Are we able to persist this relation?
|
|
77
|
+
#
|
|
78
|
+
# @example Can we persist the relation?
|
|
79
|
+
# relation.persistable?
|
|
80
|
+
#
|
|
81
|
+
# @return [ true, false ] If the relation is persistable.
|
|
82
|
+
#
|
|
83
|
+
# @since 2.1.0
|
|
84
|
+
def persistable?
|
|
85
|
+
_target.persisted? && !_binding? && !_building?
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class << self
|
|
89
|
+
|
|
90
|
+
# Returns true if the relation is an embedded one. In this case
|
|
91
|
+
# always true.
|
|
92
|
+
#
|
|
93
|
+
# @example Is this relation embedded?
|
|
94
|
+
# Association::Embedded::EmbeddedIn.embedded?
|
|
95
|
+
#
|
|
96
|
+
# @return [ true ] true.
|
|
97
|
+
#
|
|
98
|
+
# @since 2.0.0.rc.1
|
|
99
|
+
def embedded?
|
|
100
|
+
true
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Get the path calculator for the supplied document.
|
|
104
|
+
#
|
|
105
|
+
# @example Get the path calculator.
|
|
106
|
+
# Proxy.path(document)
|
|
107
|
+
#
|
|
108
|
+
# @param [ Document ] document The document to calculate on.
|
|
109
|
+
#
|
|
110
|
+
# @return [ Root ] The root atomic path calculator.
|
|
111
|
+
#
|
|
112
|
+
# @since 2.1.0
|
|
113
|
+
def path(document)
|
|
114
|
+
Mongoid::Atomic::Paths::Root.new(document)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
require 'mongoid/association/embedded/embedded_in/binding'
|
|
2
|
+
require 'mongoid/association/embedded/embedded_in/buildable'
|
|
3
|
+
require 'mongoid/association/embedded/embedded_in/proxy'
|
|
4
|
+
|
|
5
|
+
module Mongoid
|
|
6
|
+
module Association
|
|
7
|
+
module Embedded
|
|
8
|
+
|
|
9
|
+
# The EmbeddedIn type association.
|
|
10
|
+
#
|
|
11
|
+
# @since 7.0
|
|
12
|
+
class EmbeddedIn
|
|
13
|
+
include Relatable
|
|
14
|
+
include Buildable
|
|
15
|
+
|
|
16
|
+
# The options available for this type of association, in addition to the
|
|
17
|
+
# common ones.
|
|
18
|
+
#
|
|
19
|
+
# @return [ Array<Symbol> ] The extra valid options.
|
|
20
|
+
#
|
|
21
|
+
# @since 7.0
|
|
22
|
+
ASSOCIATION_OPTIONS = [
|
|
23
|
+
:autobuild,
|
|
24
|
+
:cyclic,
|
|
25
|
+
:polymorphic,
|
|
26
|
+
:touch
|
|
27
|
+
].freeze
|
|
28
|
+
|
|
29
|
+
# The complete list of valid options for this association, including
|
|
30
|
+
# the shared ones.
|
|
31
|
+
#
|
|
32
|
+
# @return [ Array<Symbol> ] The valid options.
|
|
33
|
+
#
|
|
34
|
+
# @since 7.0
|
|
35
|
+
VALID_OPTIONS = (ASSOCIATION_OPTIONS + SHARED_OPTIONS).freeze
|
|
36
|
+
|
|
37
|
+
# Setup the instance methods, fields, etc. on the association owning class.
|
|
38
|
+
#
|
|
39
|
+
# @return [ self ]
|
|
40
|
+
#
|
|
41
|
+
# @since 7.0
|
|
42
|
+
def setup!
|
|
43
|
+
setup_instance_methods!
|
|
44
|
+
@owner_class.embedded = true
|
|
45
|
+
self
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Is this association type embedded?
|
|
49
|
+
#
|
|
50
|
+
# @return [ true ] Always true.
|
|
51
|
+
#
|
|
52
|
+
# @since 7.0
|
|
53
|
+
def embedded?; true; end
|
|
54
|
+
|
|
55
|
+
# The primary key
|
|
56
|
+
#
|
|
57
|
+
# @return [ nil ] Not relevant for this relation
|
|
58
|
+
def primary_key; end
|
|
59
|
+
|
|
60
|
+
# Does this association type store the foreign key?
|
|
61
|
+
#
|
|
62
|
+
# @return [ false ] Always false.
|
|
63
|
+
#
|
|
64
|
+
# @since 7.0
|
|
65
|
+
def stores_foreign_key?; false; end
|
|
66
|
+
|
|
67
|
+
# The default for validating the association object.
|
|
68
|
+
#
|
|
69
|
+
# @return [ false ] Always false.
|
|
70
|
+
#
|
|
71
|
+
# @since 7.0
|
|
72
|
+
def validation_default; false; end
|
|
73
|
+
|
|
74
|
+
# The key that is used to get the attributes for the associated object.
|
|
75
|
+
#
|
|
76
|
+
# @return [ String ] The name of the relation.
|
|
77
|
+
#
|
|
78
|
+
# @since 7.0
|
|
79
|
+
def key
|
|
80
|
+
@key ||= name.to_s
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Get the relation proxy class for this association type.
|
|
84
|
+
#
|
|
85
|
+
# @return [ Association::Embedded::EmbeddedIn::Proxy ] The proxy class.
|
|
86
|
+
#
|
|
87
|
+
# @since 7.0
|
|
88
|
+
def relation
|
|
89
|
+
Proxy
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Is this association polymorphic?
|
|
93
|
+
#
|
|
94
|
+
# @return [ true, false ] Whether this association is polymorphic.
|
|
95
|
+
#
|
|
96
|
+
# @since 7.0
|
|
97
|
+
def polymorphic?
|
|
98
|
+
!!@options[:polymorphic]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# The nested builder object.
|
|
102
|
+
#
|
|
103
|
+
# @param [ Hash ] attributes The attributes to use to build the association object.
|
|
104
|
+
# @param [ Hash ] options The options for the association.
|
|
105
|
+
#
|
|
106
|
+
# @return [ Association::Nested::One ] The Nested Builder object.
|
|
107
|
+
#
|
|
108
|
+
# @since 7.0
|
|
109
|
+
def nested_builder(attributes, options)
|
|
110
|
+
Nested::One.new(self, attributes, options)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
private
|
|
114
|
+
|
|
115
|
+
def setup_instance_methods!
|
|
116
|
+
define_getter!
|
|
117
|
+
define_setter!
|
|
118
|
+
define_existence_check!
|
|
119
|
+
define_builder!
|
|
120
|
+
define_creator!
|
|
121
|
+
define_counter_cache_callbacks!
|
|
122
|
+
define_touchable!
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def relation_complements
|
|
126
|
+
@relation_complements ||= [ Embedded::EmbedsMany,
|
|
127
|
+
Embedded::EmbedsOne ].freeze
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def polymorphic_inverses(other = nil)
|
|
131
|
+
if other
|
|
132
|
+
matches = other.relations.values.select do |rel|
|
|
133
|
+
relation_complements.include?(rel.class) &&
|
|
134
|
+
rel.as == name &&
|
|
135
|
+
rel.relation_class_name == inverse_class_name
|
|
136
|
+
end
|
|
137
|
+
matches.collect { |m| m.name }
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def determine_inverses(other)
|
|
142
|
+
matches = (other || relation_class).relations.values.select do |rel|
|
|
143
|
+
relation_complements.include?(rel.class) &&
|
|
144
|
+
rel.relation_class_name == inverse_class_name
|
|
145
|
+
end
|
|
146
|
+
if matches.size > 1
|
|
147
|
+
raise Errors::AmbiguousRelationship.new(relation_class, @owner_class, name, matches)
|
|
148
|
+
end
|
|
149
|
+
matches.collect { |m| m.name } unless matches.blank?
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb}
RENAMED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
1
|
module Mongoid
|
|
3
|
-
module
|
|
4
|
-
module
|
|
5
|
-
|
|
2
|
+
module Association
|
|
3
|
+
module Embedded
|
|
4
|
+
class EmbedsMany
|
|
6
5
|
|
|
7
|
-
# Binding class for embeds_many relations.
|
|
8
|
-
|
|
6
|
+
# Binding class for all embeds_many relations.
|
|
7
|
+
#
|
|
8
|
+
# @since 7.0
|
|
9
|
+
class Binding
|
|
10
|
+
include Bindable
|
|
9
11
|
|
|
10
12
|
# Binds a single document with the inverse relation. Used
|
|
11
13
|
# specifically when appending to the proxy.
|
|
@@ -17,9 +19,9 @@ module Mongoid
|
|
|
17
19
|
#
|
|
18
20
|
# @since 2.0.0.rc.1
|
|
19
21
|
def bind_one(doc)
|
|
20
|
-
doc.parentize(
|
|
22
|
+
doc.parentize(_base)
|
|
21
23
|
binding do
|
|
22
|
-
doc.do_or_do_not(
|
|
24
|
+
doc.do_or_do_not(_association.inverse_setter(_target), _base)
|
|
23
25
|
end
|
|
24
26
|
end
|
|
25
27
|
|
|
@@ -33,7 +35,7 @@ module Mongoid
|
|
|
33
35
|
# @since 2.0.0.rc.1
|
|
34
36
|
def unbind_one(doc)
|
|
35
37
|
binding do
|
|
36
|
-
doc.do_or_do_not(
|
|
38
|
+
doc.do_or_do_not(_association.inverse_setter(_target), nil)
|
|
37
39
|
end
|
|
38
40
|
end
|
|
39
41
|
end
|
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
1
|
module Mongoid
|
|
3
|
-
module
|
|
4
|
-
module
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
module Association
|
|
3
|
+
module Embedded
|
|
4
|
+
class EmbedsMany
|
|
5
|
+
|
|
6
|
+
# Builder class for embeds_many associations.
|
|
7
|
+
#
|
|
8
|
+
# @since 7.0
|
|
9
|
+
module Buildable
|
|
10
|
+
include Threaded::Lifecycle
|
|
7
11
|
|
|
8
12
|
# Builds the document out of the attributes using the provided
|
|
9
|
-
# metadata
|
|
13
|
+
# association metadata. Instantiates through the factory in order
|
|
10
14
|
# to make sure subclasses and allocation are used if fitting. This
|
|
11
15
|
# case will return many documents.
|
|
12
16
|
#
|
|
13
17
|
# @example Build the documents.
|
|
14
18
|
# Builder.new(meta, attrs).build
|
|
15
19
|
#
|
|
20
|
+
# @param [ Object ] base The base object.
|
|
21
|
+
# @param [ Object ] object The object to use to build the relation.
|
|
16
22
|
# @param [ String ] type Not used in this context.
|
|
17
23
|
#
|
|
18
24
|
# @return [ Array<Document ] The documents.
|
|
19
|
-
def build(type = nil)
|
|
25
|
+
def build(base, object, type = nil)
|
|
20
26
|
return [] if object.blank?
|
|
21
27
|
return object if object.first.is_a?(Document)
|
|
22
28
|
docs = []
|