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
|
@@ -75,6 +75,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
describe "#counts" do
|
|
78
|
+
max_server_version '4.2'
|
|
78
79
|
|
|
79
80
|
let(:criteria) do
|
|
80
81
|
Band.all
|
|
@@ -103,7 +104,8 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
103
104
|
end
|
|
104
105
|
|
|
105
106
|
it "iterates over the results" do
|
|
106
|
-
|
|
107
|
+
ordered_results = results.entries.sort_by { |doc| doc['_id'] }
|
|
108
|
+
expect(ordered_results.entries).to eq([
|
|
107
109
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
108
110
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
109
111
|
])
|
|
@@ -124,7 +126,8 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
124
126
|
end
|
|
125
127
|
|
|
126
128
|
it "iterates over the results" do
|
|
127
|
-
|
|
129
|
+
ordered_results = results.entries.sort_by { |doc| doc['_id'] }
|
|
130
|
+
expect(ordered_results).to eq(expected_results)
|
|
128
131
|
end
|
|
129
132
|
|
|
130
133
|
it 'outputs to the collection' do
|
|
@@ -144,6 +147,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
144
147
|
end
|
|
145
148
|
|
|
146
149
|
context "when the statstics are requested" do
|
|
150
|
+
max_server_version '4.2'
|
|
147
151
|
|
|
148
152
|
it "raises an error" do
|
|
149
153
|
expect {
|
|
@@ -188,14 +192,16 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
188
192
|
Band.where(name: 'DEPECHE MODE').collation(locale: 'en_US', strength: 2)
|
|
189
193
|
end
|
|
190
194
|
|
|
191
|
-
context 'when the server supports collations'
|
|
195
|
+
context 'when the server supports collations' do
|
|
196
|
+
min_server_version '3.4'
|
|
192
197
|
|
|
193
198
|
it 'applies the collation' do
|
|
194
199
|
expect(map_reduce.out(inline: 1).count).to eq(1)
|
|
195
200
|
end
|
|
196
201
|
end
|
|
197
202
|
|
|
198
|
-
context 'when the server does not support collations'
|
|
203
|
+
context 'when the server does not support collations' do
|
|
204
|
+
max_server_version '3.2'
|
|
199
205
|
|
|
200
206
|
it 'raises an exception' do
|
|
201
207
|
expect {
|
|
@@ -207,6 +213,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
207
213
|
end
|
|
208
214
|
|
|
209
215
|
describe "#emitted" do
|
|
216
|
+
max_server_version '4.2'
|
|
210
217
|
|
|
211
218
|
let(:emitted) do
|
|
212
219
|
map_reduce.out(inline: 1).emitted
|
|
@@ -258,6 +265,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
258
265
|
end
|
|
259
266
|
|
|
260
267
|
describe "#input" do
|
|
268
|
+
max_server_version '4.2'
|
|
261
269
|
|
|
262
270
|
let(:input) do
|
|
263
271
|
map_reduce.out(inline: 1).input
|
|
@@ -308,6 +316,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
308
316
|
end
|
|
309
317
|
|
|
310
318
|
describe "#output" do
|
|
319
|
+
max_server_version '4.2'
|
|
311
320
|
|
|
312
321
|
let(:output) do
|
|
313
322
|
map_reduce.out(inline: 1).output
|
|
@@ -340,12 +349,16 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
340
349
|
end
|
|
341
350
|
|
|
342
351
|
context 'when a read preference is defined' do
|
|
352
|
+
require_topology :replica_set
|
|
353
|
+
# On 4.4 it seems the server inserts on the primary, not on the server
|
|
354
|
+
# that executed the map/reduce.
|
|
355
|
+
max_server_version '4.2'
|
|
343
356
|
|
|
344
357
|
let(:criteria) do
|
|
345
358
|
Band.all.read(mode: :secondary)
|
|
346
359
|
end
|
|
347
360
|
|
|
348
|
-
it "uses the read preference"
|
|
361
|
+
it "uses the read preference" do
|
|
349
362
|
|
|
350
363
|
expect {
|
|
351
364
|
replace_map_reduce.raw
|
|
@@ -356,6 +369,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
356
369
|
end
|
|
357
370
|
|
|
358
371
|
describe "#reduced" do
|
|
372
|
+
max_server_version '4.2'
|
|
359
373
|
|
|
360
374
|
let(:reduced) do
|
|
361
375
|
map_reduce.out(inline: 1).reduced
|
|
@@ -386,6 +400,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
|
386
400
|
end
|
|
387
401
|
|
|
388
402
|
describe "#time" do
|
|
403
|
+
max_server_version '4.2'
|
|
389
404
|
|
|
390
405
|
let(:time) do
|
|
391
406
|
map_reduce.out(inline: 1).time
|
|
@@ -987,6 +987,25 @@ describe Mongoid::Contextual::Memory do
|
|
|
987
987
|
end
|
|
988
988
|
end
|
|
989
989
|
|
|
990
|
+
describe '#inc' do
|
|
991
|
+
|
|
992
|
+
let(:criteria) do
|
|
993
|
+
Address.all.tap do |crit|
|
|
994
|
+
crit.documents = [ Address.new(number: 1),
|
|
995
|
+
Address.new(number: 2),
|
|
996
|
+
Address.new(number: 3) ]
|
|
997
|
+
end
|
|
998
|
+
end
|
|
999
|
+
|
|
1000
|
+
let(:context) do
|
|
1001
|
+
described_class.new(criteria)
|
|
1002
|
+
end
|
|
1003
|
+
|
|
1004
|
+
it 'increases each member' do
|
|
1005
|
+
expect(context.inc(number: 10).collect(&:number)).to eql([11, 12, 13])
|
|
1006
|
+
end
|
|
1007
|
+
end
|
|
1008
|
+
|
|
990
1009
|
describe "#skip" do
|
|
991
1010
|
|
|
992
1011
|
let(:hobrecht) do
|
|
@@ -168,7 +168,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
168
168
|
end
|
|
169
169
|
end
|
|
170
170
|
|
|
171
|
-
context 'when a collation is specified'
|
|
171
|
+
context 'when a collation is specified' do
|
|
172
|
+
min_server_version '3.4'
|
|
172
173
|
|
|
173
174
|
let(:context) do
|
|
174
175
|
described_class.new(criteria)
|
|
@@ -229,7 +230,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
229
230
|
expect(deleted).to eq(1)
|
|
230
231
|
end
|
|
231
232
|
|
|
232
|
-
context 'when the criteria has a collation'
|
|
233
|
+
context 'when the criteria has a collation' do
|
|
234
|
+
min_server_version '3.4'
|
|
233
235
|
|
|
234
236
|
let(:criteria) do
|
|
235
237
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -333,7 +335,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
333
335
|
expect(destroyed).to eq(1)
|
|
334
336
|
end
|
|
335
337
|
|
|
336
|
-
context 'when the criteria has a collation'
|
|
338
|
+
context 'when the criteria has a collation' do
|
|
339
|
+
min_server_version '3.4'
|
|
337
340
|
|
|
338
341
|
let(:criteria) do
|
|
339
342
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -455,7 +458,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
455
458
|
end
|
|
456
459
|
end
|
|
457
460
|
|
|
458
|
-
context 'when a collation is specified'
|
|
461
|
+
context 'when a collation is specified' do
|
|
462
|
+
min_server_version '3.4'
|
|
459
463
|
|
|
460
464
|
before do
|
|
461
465
|
Band.create(name: 'DEPECHE MODE')
|
|
@@ -493,7 +497,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
493
497
|
described_class.new(criteria)
|
|
494
498
|
end
|
|
495
499
|
|
|
496
|
-
context 'when the criteria has a collation'
|
|
500
|
+
context 'when the criteria has a collation' do
|
|
501
|
+
min_server_version '3.4'
|
|
497
502
|
|
|
498
503
|
let(:criteria) do
|
|
499
504
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -577,6 +582,31 @@ describe Mongoid::Contextual::Mongo do
|
|
|
577
582
|
end
|
|
578
583
|
end
|
|
579
584
|
end
|
|
585
|
+
|
|
586
|
+
context 'when the criteria has a parent document' do
|
|
587
|
+
|
|
588
|
+
before do
|
|
589
|
+
Post.create(person: person)
|
|
590
|
+
Post.create(person: person)
|
|
591
|
+
Post.create(person: person)
|
|
592
|
+
end
|
|
593
|
+
|
|
594
|
+
let(:person) do
|
|
595
|
+
Person.new
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
let(:criteria) do
|
|
599
|
+
person.posts.all
|
|
600
|
+
end
|
|
601
|
+
|
|
602
|
+
let(:persons) do
|
|
603
|
+
criteria.collect(&:person)
|
|
604
|
+
end
|
|
605
|
+
|
|
606
|
+
it 'sets the same parent object on each related object' do
|
|
607
|
+
expect(persons.uniq.size).to eq(1)
|
|
608
|
+
end
|
|
609
|
+
end
|
|
580
610
|
end
|
|
581
611
|
|
|
582
612
|
describe "#eager_load" do
|
|
@@ -591,12 +621,12 @@ describe Mongoid::Contextual::Mongo do
|
|
|
591
621
|
|
|
592
622
|
context "when no documents are returned" do
|
|
593
623
|
|
|
594
|
-
let(:
|
|
624
|
+
let(:game_association) do
|
|
595
625
|
Person.reflect_on_association(:game)
|
|
596
626
|
end
|
|
597
627
|
|
|
598
628
|
it "does not make any additional database queries" do
|
|
599
|
-
expect(
|
|
629
|
+
expect(game_association).to receive(:eager_load).never
|
|
600
630
|
context.send(:eager_load, [])
|
|
601
631
|
end
|
|
602
632
|
end
|
|
@@ -825,7 +855,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
825
855
|
end
|
|
826
856
|
end
|
|
827
857
|
|
|
828
|
-
context 'when a collation is specified on the criteria'
|
|
858
|
+
context 'when a collation is specified on the criteria' do
|
|
859
|
+
min_server_version '3.4'
|
|
829
860
|
|
|
830
861
|
let(:criteria) do
|
|
831
862
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -978,7 +1009,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
978
1009
|
end
|
|
979
1010
|
end
|
|
980
1011
|
|
|
981
|
-
context 'when a collation is specified on the criteria'
|
|
1012
|
+
context 'when a collation is specified on the criteria' do
|
|
1013
|
+
min_server_version '3.4'
|
|
982
1014
|
|
|
983
1015
|
let(:criteria) do
|
|
984
1016
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1052,7 +1084,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1052
1084
|
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
1053
1085
|
end
|
|
1054
1086
|
|
|
1055
|
-
context 'when a collation is specified on the criteria'
|
|
1087
|
+
context 'when a collation is specified on the criteria' do
|
|
1088
|
+
min_server_version '3.4'
|
|
1056
1089
|
|
|
1057
1090
|
let(:criteria) do
|
|
1058
1091
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1124,7 +1157,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1124
1157
|
expect(context.send(method)).to eq(depeche_mode)
|
|
1125
1158
|
end
|
|
1126
1159
|
|
|
1127
|
-
context 'when the criteria has a collation'
|
|
1160
|
+
context 'when the criteria has a collation' do
|
|
1161
|
+
min_server_version '3.4'
|
|
1128
1162
|
|
|
1129
1163
|
let(:criteria) do
|
|
1130
1164
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1528,6 +1562,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1528
1562
|
}}
|
|
1529
1563
|
end
|
|
1530
1564
|
|
|
1565
|
+
let(:ordered_results) do
|
|
1566
|
+
results['results'].sort_by { |doc| doc['_id'] }
|
|
1567
|
+
end
|
|
1568
|
+
|
|
1531
1569
|
context "when no selection is provided" do
|
|
1532
1570
|
|
|
1533
1571
|
let(:criteria) do
|
|
@@ -1559,36 +1597,40 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1559
1597
|
end
|
|
1560
1598
|
|
|
1561
1599
|
it "contains the entire raw results" do
|
|
1562
|
-
expect(
|
|
1600
|
+
expect(ordered_results).to eq([
|
|
1563
1601
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
1564
1602
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
1565
1603
|
])
|
|
1566
1604
|
end
|
|
1567
1605
|
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
end
|
|
1606
|
+
context 'when statistics are available' do
|
|
1607
|
+
max_server_version '4.2'
|
|
1571
1608
|
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
})
|
|
1576
|
-
end
|
|
1609
|
+
it "contains the execution time" do
|
|
1610
|
+
expect(results.time).to_not be_nil
|
|
1611
|
+
end
|
|
1577
1612
|
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1613
|
+
it "contains the count statistics" do
|
|
1614
|
+
expect(results["counts"]).to eq({
|
|
1615
|
+
"input" => 2, "emit" => 2, "reduce" => 0, "output" => 2
|
|
1616
|
+
})
|
|
1617
|
+
end
|
|
1581
1618
|
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1619
|
+
it "contains the input count" do
|
|
1620
|
+
expect(results.input).to eq(2)
|
|
1621
|
+
end
|
|
1585
1622
|
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1623
|
+
it "contains the emitted count" do
|
|
1624
|
+
expect(results.emitted).to eq(2)
|
|
1625
|
+
end
|
|
1626
|
+
|
|
1627
|
+
it "contains the reduced count" do
|
|
1628
|
+
expect(results.reduced).to eq(0)
|
|
1629
|
+
end
|
|
1589
1630
|
|
|
1590
|
-
|
|
1591
|
-
|
|
1631
|
+
it "contains the output count" do
|
|
1632
|
+
expect(results.output).to eq(2)
|
|
1633
|
+
end
|
|
1592
1634
|
end
|
|
1593
1635
|
end
|
|
1594
1636
|
|
|
@@ -1617,35 +1659,39 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1617
1659
|
end
|
|
1618
1660
|
|
|
1619
1661
|
it "contains the entire raw results" do
|
|
1620
|
-
expect(
|
|
1662
|
+
expect(ordered_results).to eq([
|
|
1621
1663
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
|
1622
1664
|
])
|
|
1623
1665
|
end
|
|
1624
1666
|
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
end
|
|
1667
|
+
context 'when statistics are available' do
|
|
1668
|
+
max_server_version '4.2'
|
|
1628
1669
|
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
})
|
|
1633
|
-
end
|
|
1670
|
+
it "contains the execution time" do
|
|
1671
|
+
expect(results.time).to_not be_nil
|
|
1672
|
+
end
|
|
1634
1673
|
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1674
|
+
it "contains the count statistics" do
|
|
1675
|
+
expect(results["counts"]).to eq({
|
|
1676
|
+
"input" => 1, "emit" => 1, "reduce" => 0, "output" => 1
|
|
1677
|
+
})
|
|
1678
|
+
end
|
|
1638
1679
|
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1680
|
+
it "contains the input count" do
|
|
1681
|
+
expect(results.input).to eq(1)
|
|
1682
|
+
end
|
|
1642
1683
|
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1684
|
+
it "contains the emitted count" do
|
|
1685
|
+
expect(results.emitted).to eq(1)
|
|
1686
|
+
end
|
|
1646
1687
|
|
|
1647
|
-
|
|
1648
|
-
|
|
1688
|
+
it "contains the reduced count" do
|
|
1689
|
+
expect(results.reduced).to eq(0)
|
|
1690
|
+
end
|
|
1691
|
+
|
|
1692
|
+
it "contains the output count" do
|
|
1693
|
+
expect(results.output).to eq(1)
|
|
1694
|
+
end
|
|
1649
1695
|
end
|
|
1650
1696
|
end
|
|
1651
1697
|
|
|
@@ -1685,7 +1731,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1685
1731
|
end
|
|
1686
1732
|
|
|
1687
1733
|
it "contains the entire raw results" do
|
|
1688
|
-
expect(
|
|
1734
|
+
expect(ordered_results).to eq([
|
|
1689
1735
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
1690
1736
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
1691
1737
|
])
|
|
@@ -1693,6 +1739,9 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1693
1739
|
end
|
|
1694
1740
|
|
|
1695
1741
|
context "when limiting is provided" do
|
|
1742
|
+
# map/reduce with limit is not supported on sharded clusters:
|
|
1743
|
+
# https://jira.mongodb.org/browse/SERVER-2099
|
|
1744
|
+
require_topology :single, :replica_set
|
|
1696
1745
|
|
|
1697
1746
|
let(:criteria) do
|
|
1698
1747
|
Band.limit(1)
|
|
@@ -2133,7 +2182,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2133
2182
|
end
|
|
2134
2183
|
end
|
|
2135
2184
|
|
|
2136
|
-
context 'when provided array filters'
|
|
2185
|
+
context 'when provided array filters' do
|
|
2186
|
+
min_server_version '3.6'
|
|
2137
2187
|
|
|
2138
2188
|
before do
|
|
2139
2189
|
Band.delete_all
|
|
@@ -2305,7 +2355,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2305
2355
|
end
|
|
2306
2356
|
end
|
|
2307
2357
|
|
|
2308
|
-
context 'when provided array filters'
|
|
2358
|
+
context 'when provided array filters' do
|
|
2359
|
+
min_server_version '3.6'
|
|
2309
2360
|
|
|
2310
2361
|
before do
|
|
2311
2362
|
Band.delete_all
|
|
@@ -2328,7 +2379,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2328
2379
|
|
|
2329
2380
|
let!(:update) do
|
|
2330
2381
|
context.update_all({ '$set' => { 'labels.$[i].name' => 'Sony' } },
|
|
2331
|
-
|
|
2382
|
+
array_filters: [{ 'i.name' => 'Cbs' }])
|
|
2332
2383
|
end
|
|
2333
2384
|
|
|
2334
2385
|
it 'applies the array filters' do
|
|
@@ -2343,7 +2394,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2343
2394
|
|
|
2344
2395
|
describe '#pipeline' do
|
|
2345
2396
|
|
|
2346
|
-
context 'when the criteria has a selector'
|
|
2397
|
+
context 'when the criteria has a selector' do
|
|
2347
2398
|
|
|
2348
2399
|
before do
|
|
2349
2400
|
Artist.index(name: "text")
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
require "spec_helper"
|
|
3
3
|
|
|
4
|
+
require_relative './copyable_spec_models'
|
|
5
|
+
|
|
4
6
|
describe Mongoid::Copyable do
|
|
5
7
|
|
|
6
8
|
[ :clone, :dup ].each do |method|
|
|
@@ -35,6 +37,10 @@ describe Mongoid::Copyable do
|
|
|
35
37
|
person.build_game(name: "Tron")
|
|
36
38
|
end
|
|
37
39
|
|
|
40
|
+
let!(:name_translations) do
|
|
41
|
+
person.name.translations.build(language: 'en')
|
|
42
|
+
end
|
|
43
|
+
|
|
38
44
|
context "when the document has an id field in the database" do
|
|
39
45
|
|
|
40
46
|
let!(:band) do
|
|
@@ -86,16 +92,48 @@ describe Mongoid::Copyable do
|
|
|
86
92
|
|
|
87
93
|
context "and dynamic attributes are not set" do
|
|
88
94
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
context 'embeds_one' do
|
|
96
|
+
|
|
97
|
+
it "clones" do
|
|
98
|
+
t = StoreAsDupTest1.new(:name => "hi")
|
|
99
|
+
t.build_store_as_dup_test2(:name => "there")
|
|
100
|
+
t.save
|
|
101
|
+
copy = t.send(method)
|
|
102
|
+
expect(copy.object_id).not_to eq(t.object_id)
|
|
103
|
+
expect(copy.store_as_dup_test2.name).to eq(t.store_as_dup_test2.name)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context 'embeds_many' do
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
it "clones" do
|
|
111
|
+
t = StoreAsDupTest3.new(:name => "hi")
|
|
112
|
+
t.store_as_dup_test4s << StoreAsDupTest4.new
|
|
113
|
+
t.save
|
|
114
|
+
copy = t.send(method)
|
|
115
|
+
expect(copy.object_id).not_to eq(t.object_id)
|
|
116
|
+
expect(copy.store_as_dup_test4s).not_to be_empty
|
|
117
|
+
expect(copy.store_as_dup_test4s.first.object_id).not_to eq(t.store_as_dup_test4s.first.object_id)
|
|
118
|
+
end
|
|
95
119
|
end
|
|
96
120
|
end
|
|
97
121
|
end
|
|
98
122
|
|
|
123
|
+
context 'nested embeds_many' do
|
|
124
|
+
it 'works' do
|
|
125
|
+
a = CopyableSpec::A.new
|
|
126
|
+
a.locations << CopyableSpec::Location.new
|
|
127
|
+
a.locations.first.buildings << CopyableSpec::Building.new
|
|
128
|
+
a.save!
|
|
129
|
+
|
|
130
|
+
new_a = a.send(method)
|
|
131
|
+
|
|
132
|
+
expect(new_a.locations.length).to be 1
|
|
133
|
+
expect(new_a.locations.first.buildings.length).to be 1
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
99
137
|
context "when cloning a document with multiple languages field" do
|
|
100
138
|
|
|
101
139
|
before do
|
|
@@ -144,6 +182,40 @@ describe Mongoid::Copyable do
|
|
|
144
182
|
end
|
|
145
183
|
end
|
|
146
184
|
|
|
185
|
+
context "when cloning a document with polymorphic embedded documents with multiple language field" do
|
|
186
|
+
|
|
187
|
+
let!(:shipment_address) do
|
|
188
|
+
person.addresses.build({ shipping_name: "Title" }, ShipmentAddress)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
before do
|
|
192
|
+
I18n.enforce_available_locales = false
|
|
193
|
+
I18n.locale = 'pt_BR'
|
|
194
|
+
person.addresses.type(ShipmentAddress).each { |address| address.shipping_name = "Título" }
|
|
195
|
+
person.save
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
after do
|
|
199
|
+
I18n.locale = :en
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
let!(:from_db) do
|
|
203
|
+
Person.find(person.id)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
let(:copy) do
|
|
207
|
+
from_db.send(method)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
it 'sets embedded translations' do
|
|
211
|
+
I18n.locale = 'pt_BR'
|
|
212
|
+
copy.addresses.type(ShipmentAddress).each do |address|
|
|
213
|
+
expect(address.shipping_name).to eq("Título")
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
end
|
|
218
|
+
|
|
147
219
|
context "when cloning a loaded document" do
|
|
148
220
|
|
|
149
221
|
before do
|
|
@@ -211,14 +283,26 @@ describe Mongoid::Copyable do
|
|
|
211
283
|
expect(copy.addresses).to eq(person.addresses)
|
|
212
284
|
end
|
|
213
285
|
|
|
286
|
+
it "copys deep embeds many documents" do
|
|
287
|
+
expect(copy.name.translations).to eq(person.name.translations)
|
|
288
|
+
end
|
|
289
|
+
|
|
214
290
|
it "sets the embedded many documents as new" do
|
|
215
291
|
expect(copy.addresses.first).to be_new_record
|
|
216
292
|
end
|
|
217
293
|
|
|
294
|
+
it "sets the deep embedded many documents as new" do
|
|
295
|
+
expect(copy.name.translations.first).to be_new_record
|
|
296
|
+
end
|
|
297
|
+
|
|
218
298
|
it "creates new embeds many instances" do
|
|
219
299
|
expect(copy.addresses).to_not equal(person.addresses)
|
|
220
300
|
end
|
|
221
301
|
|
|
302
|
+
it "creates new deep embeds many instances" do
|
|
303
|
+
expect(copy.name.translations).to_not equal(person.name.translations)
|
|
304
|
+
end
|
|
305
|
+
|
|
222
306
|
it "copys embeds one documents" do
|
|
223
307
|
expect(copy.name).to eq(person.name)
|
|
224
308
|
end
|