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
data/lib/mongoid/atomic.rb
CHANGED
|
@@ -36,7 +36,9 @@ module Mongoid
|
|
|
36
36
|
# @since 2.2.0
|
|
37
37
|
def add_atomic_pull(document)
|
|
38
38
|
document.flagged_for_destroy = true
|
|
39
|
-
|
|
39
|
+
key = document.association_name.to_s
|
|
40
|
+
delayed_atomic_pulls[key] ||= []
|
|
41
|
+
delayed_atomic_pulls[key] << document
|
|
40
42
|
end
|
|
41
43
|
|
|
42
44
|
# Add an atomic unset for the document.
|
|
@@ -51,7 +53,9 @@ module Mongoid
|
|
|
51
53
|
# @since 3.0.0
|
|
52
54
|
def add_atomic_unset(document)
|
|
53
55
|
document.flagged_for_destroy = true
|
|
54
|
-
|
|
56
|
+
key = document.association_name.to_s
|
|
57
|
+
delayed_atomic_unsets[key] ||= []
|
|
58
|
+
delayed_atomic_unsets[key] << document
|
|
55
59
|
end
|
|
56
60
|
|
|
57
61
|
# Returns path of the attribute for modification
|
|
@@ -189,7 +193,13 @@ module Mongoid
|
|
|
189
193
|
#
|
|
190
194
|
# @since 2.1.0
|
|
191
195
|
def atomic_paths
|
|
192
|
-
@atomic_paths ||=
|
|
196
|
+
@atomic_paths ||= begin
|
|
197
|
+
if _association
|
|
198
|
+
_association.path(self)
|
|
199
|
+
else
|
|
200
|
+
Atomic::Paths::Root.new(self)
|
|
201
|
+
end
|
|
202
|
+
end
|
|
193
203
|
end
|
|
194
204
|
|
|
195
205
|
# Get all the attributes that need to be pulled.
|
|
@@ -218,7 +228,7 @@ module Mongoid
|
|
|
218
228
|
# @example Get the pushes.
|
|
219
229
|
# person.atomic_pushes
|
|
220
230
|
#
|
|
221
|
-
# @return [ Hash ] The
|
|
231
|
+
# @return [ Hash ] The $push and $each operations.
|
|
222
232
|
#
|
|
223
233
|
# @since 2.1.0
|
|
224
234
|
def atomic_pushes
|
|
@@ -38,12 +38,13 @@ module Mongoid
|
|
|
38
38
|
# @since 4.0.0
|
|
39
39
|
def define_dynamic_reader(name)
|
|
40
40
|
return unless name.valid_method_name?
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
|
|
42
|
+
class_eval do
|
|
43
|
+
define_method(name) do
|
|
44
|
+
attribute_will_change!(name)
|
|
45
|
+
read_raw_attribute(name)
|
|
45
46
|
end
|
|
46
|
-
|
|
47
|
+
end
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
# Define a reader method for a dynamic attribute before type cast.
|
|
@@ -57,12 +58,12 @@ module Mongoid
|
|
|
57
58
|
#
|
|
58
59
|
# @since 4.0.0
|
|
59
60
|
def define_dynamic_before_type_cast_reader(name)
|
|
60
|
-
class_eval
|
|
61
|
-
|
|
62
|
-
attribute_will_change!(
|
|
63
|
-
read_attribute_before_type_cast(
|
|
61
|
+
class_eval do
|
|
62
|
+
define_method("#{name}_before_type_cast") do
|
|
63
|
+
attribute_will_change!(name)
|
|
64
|
+
read_attribute_before_type_cast(name)
|
|
64
65
|
end
|
|
65
|
-
|
|
66
|
+
end
|
|
66
67
|
end
|
|
67
68
|
|
|
68
69
|
# Define a writer method for a dynamic attribute.
|
|
@@ -78,11 +79,11 @@ module Mongoid
|
|
|
78
79
|
def define_dynamic_writer(name)
|
|
79
80
|
return unless name.valid_method_name?
|
|
80
81
|
|
|
81
|
-
class_eval
|
|
82
|
-
|
|
83
|
-
write_attribute(
|
|
82
|
+
class_eval do
|
|
83
|
+
define_method("#{name}=") do |value|
|
|
84
|
+
write_attribute(name, value)
|
|
84
85
|
end
|
|
85
|
-
|
|
86
|
+
end
|
|
86
87
|
end
|
|
87
88
|
|
|
88
89
|
# If the attribute is dynamic, add a field for it with a type of object
|
|
@@ -147,7 +148,7 @@ module Mongoid
|
|
|
147
148
|
getter = attr.reader
|
|
148
149
|
define_dynamic_reader(getter)
|
|
149
150
|
attribute_will_change!(attr.reader)
|
|
150
|
-
|
|
151
|
+
read_raw_attribute(getter)
|
|
151
152
|
end
|
|
152
153
|
end
|
|
153
154
|
end
|
|
@@ -42,21 +42,27 @@ module Mongoid
|
|
|
42
42
|
# to a class method to reject documents with.
|
|
43
43
|
# @option *args [ Integer ] :limit The max number to create.
|
|
44
44
|
# @option *args [ true, false ] :update_only Only update existing docs.
|
|
45
|
+
# @options *args [ true, false ] :autosave Whether autosave should be enabled on the
|
|
46
|
+
# association. Note that since the default is true, setting autosave to nil will still
|
|
47
|
+
# enable it.
|
|
45
48
|
def accepts_nested_attributes_for(*args)
|
|
46
|
-
options = args.extract_options
|
|
49
|
+
options = args.extract_options!.dup
|
|
50
|
+
options[:autosave] = true if options[:autosave].nil?
|
|
51
|
+
|
|
47
52
|
options[:reject_if] = REJECT_ALL_BLANK_PROC if options[:reject_if] == :all_blank
|
|
48
53
|
args.each do |name|
|
|
49
54
|
meth = "#{name}_attributes="
|
|
50
55
|
self.nested_attributes["#{name}_attributes"] = meth
|
|
51
|
-
|
|
52
|
-
raise Errors::NestedAttributesMetadataNotFound.new(self, name) unless
|
|
53
|
-
autosave_nested_attributes(
|
|
56
|
+
association = relations[name.to_s]
|
|
57
|
+
raise Errors::NestedAttributesMetadataNotFound.new(self, name) unless association
|
|
58
|
+
autosave_nested_attributes(association) if options[:autosave]
|
|
59
|
+
|
|
54
60
|
re_define_method(meth) do |attrs|
|
|
55
61
|
_assigning do
|
|
56
|
-
if
|
|
57
|
-
options = options.merge!(:class_name => self.send(
|
|
62
|
+
if association.polymorphic? and association.inverse_type
|
|
63
|
+
options = options.merge!(:class_name => self.send(association.inverse_type))
|
|
58
64
|
end
|
|
59
|
-
|
|
65
|
+
association.nested_builder(attrs, options).build(self)
|
|
60
66
|
end
|
|
61
67
|
end
|
|
62
68
|
end
|
|
@@ -71,12 +77,17 @@ module Mongoid
|
|
|
71
77
|
# @example Add the autosave if appropriate.
|
|
72
78
|
# Person.autosave_nested_attributes(metadata)
|
|
73
79
|
#
|
|
74
|
-
# @param [
|
|
80
|
+
# @param [ Association ] association The existing association metadata.
|
|
75
81
|
#
|
|
76
82
|
# @since 3.1.4
|
|
77
|
-
def autosave_nested_attributes(
|
|
78
|
-
|
|
79
|
-
|
|
83
|
+
def autosave_nested_attributes(association)
|
|
84
|
+
# In order for the autosave functionality to work properly, the association needs to be
|
|
85
|
+
# marked as autosave despite the fact that the option isn't present. Because the method
|
|
86
|
+
# Association#autosave? is implemented by checking the autosave option, this is the most
|
|
87
|
+
# straightforward way to mark it.
|
|
88
|
+
if association.autosave? || (association.options[:autosave].nil? && !association.embedded?)
|
|
89
|
+
association.options[:autosave] = true
|
|
90
|
+
Association::Referenced::AutoSave.define_autosave!(association)
|
|
80
91
|
end
|
|
81
92
|
end
|
|
82
93
|
end
|
|
@@ -133,9 +133,9 @@ module Mongoid
|
|
|
133
133
|
# @since 2.0.0.rc.7
|
|
134
134
|
def process_relations
|
|
135
135
|
pending_relations.each_pair do |name, value|
|
|
136
|
-
|
|
136
|
+
association = relations[name]
|
|
137
137
|
if value.is_a?(Hash)
|
|
138
|
-
|
|
138
|
+
association.nested_builder(value, {}).build(self)
|
|
139
139
|
else
|
|
140
140
|
send("#{name}=", value)
|
|
141
141
|
end
|
|
@@ -22,17 +22,15 @@ module Mongoid
|
|
|
22
22
|
# readonly.
|
|
23
23
|
#
|
|
24
24
|
# @since 3.0.0
|
|
25
|
-
#
|
|
26
|
-
# @deprecated Use #as_writable_attribute! instead.
|
|
27
25
|
def attribute_writable?(name)
|
|
28
|
-
new_record? || !readonly_attributes.include?(
|
|
26
|
+
new_record? || (!readonly_attributes.include?(name) && _loaded?(name))
|
|
29
27
|
end
|
|
30
28
|
|
|
31
29
|
private
|
|
32
30
|
|
|
33
31
|
def as_writable_attribute!(name, value = :nil)
|
|
34
32
|
normalized_name = database_field_name(name)
|
|
35
|
-
if
|
|
33
|
+
if attribute_writable?(normalized_name)
|
|
36
34
|
yield(normalized_name)
|
|
37
35
|
else
|
|
38
36
|
raise Errors::ReadonlyAttribute.new(name, value)
|
data/lib/mongoid/attributes.rb
CHANGED
|
@@ -29,7 +29,7 @@ module Mongoid
|
|
|
29
29
|
#
|
|
30
30
|
# @since 1.0.0
|
|
31
31
|
def attribute_present?(name)
|
|
32
|
-
attribute =
|
|
32
|
+
attribute = read_raw_attribute(name)
|
|
33
33
|
!attribute.blank? || attribute == false
|
|
34
34
|
rescue ActiveModel::MissingAttributeError
|
|
35
35
|
false
|
|
@@ -92,21 +92,15 @@ module Mongoid
|
|
|
92
92
|
#
|
|
93
93
|
# @since 1.0.0
|
|
94
94
|
def read_attribute(name)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
end
|
|
99
|
-
if hash_dot_syntax?(normalized)
|
|
100
|
-
attributes.__nested__(normalized)
|
|
101
|
-
else
|
|
102
|
-
attributes[normalized]
|
|
103
|
-
end
|
|
95
|
+
field = fields[name.to_s]
|
|
96
|
+
raw = read_raw_attribute(name)
|
|
97
|
+
field ? field.demongoize(raw) : raw
|
|
104
98
|
end
|
|
105
99
|
alias :[] :read_attribute
|
|
106
100
|
|
|
107
101
|
# Read a value from the attributes before type cast. If the value has not
|
|
108
102
|
# yet been assigned then this will return the attribute's existing value
|
|
109
|
-
# using
|
|
103
|
+
# using read_raw_attribute.
|
|
110
104
|
#
|
|
111
105
|
# @example Read an attribute before type cast.
|
|
112
106
|
# person.read_attribute_before_type_cast(:price)
|
|
@@ -122,7 +116,7 @@ module Mongoid
|
|
|
122
116
|
if attributes_before_type_cast.key?(attr)
|
|
123
117
|
attributes_before_type_cast[attr]
|
|
124
118
|
else
|
|
125
|
-
|
|
119
|
+
read_raw_attribute(attr)
|
|
126
120
|
end
|
|
127
121
|
end
|
|
128
122
|
|
|
@@ -163,23 +157,31 @@ module Mongoid
|
|
|
163
157
|
#
|
|
164
158
|
# @since 1.0.0
|
|
165
159
|
def write_attribute(name, value)
|
|
166
|
-
|
|
160
|
+
field_name = database_field_name(name)
|
|
161
|
+
|
|
162
|
+
if attribute_missing?(field_name)
|
|
163
|
+
raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'"
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
if attribute_writable?(field_name)
|
|
167
167
|
_assigning do
|
|
168
|
-
validate_attribute_value(
|
|
169
|
-
localized = fields[
|
|
168
|
+
validate_attribute_value(field_name, value)
|
|
169
|
+
localized = fields[field_name].try(:localized?)
|
|
170
170
|
attributes_before_type_cast[name.to_s] = value
|
|
171
|
-
typed_value = typed_value_for(
|
|
172
|
-
unless attributes[
|
|
173
|
-
attribute_will_change!(
|
|
171
|
+
typed_value = typed_value_for(field_name, value)
|
|
172
|
+
unless attributes[field_name] == typed_value || attribute_changed?(field_name)
|
|
173
|
+
attribute_will_change!(field_name)
|
|
174
174
|
end
|
|
175
175
|
if localized
|
|
176
|
-
attributes[
|
|
177
|
-
attributes[
|
|
176
|
+
attributes[field_name] ||= {}
|
|
177
|
+
attributes[field_name].merge!(typed_value)
|
|
178
178
|
else
|
|
179
|
-
attributes[
|
|
179
|
+
attributes[field_name] = typed_value
|
|
180
180
|
end
|
|
181
181
|
typed_value
|
|
182
182
|
end
|
|
183
|
+
else
|
|
184
|
+
# TODO: MONGOID-5072
|
|
183
185
|
end
|
|
184
186
|
end
|
|
185
187
|
alias :[]= :write_attribute
|
|
@@ -292,6 +294,20 @@ module Mongoid
|
|
|
292
294
|
fields.key?(key) ? fields[key].mongoize(value) : value.mongoize
|
|
293
295
|
end
|
|
294
296
|
|
|
297
|
+
private
|
|
298
|
+
|
|
299
|
+
def read_raw_attribute(name)
|
|
300
|
+
normalized = database_field_name(name.to_s)
|
|
301
|
+
if attribute_missing?(normalized)
|
|
302
|
+
raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'"
|
|
303
|
+
end
|
|
304
|
+
if hash_dot_syntax?(normalized)
|
|
305
|
+
attributes.__nested__(normalized)
|
|
306
|
+
else
|
|
307
|
+
attributes[normalized]
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
|
|
295
311
|
module ClassMethods
|
|
296
312
|
|
|
297
313
|
# Alias the provided name to the original field. This will provide an
|
|
@@ -328,20 +344,28 @@ module Mongoid
|
|
|
328
344
|
|
|
329
345
|
private
|
|
330
346
|
|
|
331
|
-
# Validates an attribute value
|
|
332
|
-
#
|
|
333
|
-
# For now, only Hash and Array fields are validated
|
|
347
|
+
# Validates an attribute value as being assignable to the specified field.
|
|
348
|
+
#
|
|
349
|
+
# For now, only Hash and Array fields are validated, and the value is
|
|
350
|
+
# being checked to be of an appropriate type (i.e. either Hash or Array,
|
|
351
|
+
# respectively, or nil).
|
|
352
|
+
#
|
|
353
|
+
# This method takes the name of the field as stored in the document
|
|
354
|
+
# in the database, not (necessarily) the Ruby method name used to read/write
|
|
355
|
+
# the said field.
|
|
334
356
|
#
|
|
335
|
-
# @param [ String, Symbol ]
|
|
336
|
-
# @param [ Object ] value The to be validated.
|
|
357
|
+
# @param [ String, Symbol ] field_name The name of the field.
|
|
358
|
+
# @param [ Object ] value The value to be validated.
|
|
337
359
|
#
|
|
338
360
|
# @since 3.0.10
|
|
339
|
-
def validate_attribute_value(
|
|
340
|
-
return
|
|
361
|
+
def validate_attribute_value(field_name, value)
|
|
362
|
+
return if value.nil?
|
|
363
|
+
field = fields[field_name]
|
|
364
|
+
return unless field
|
|
341
365
|
validatable_types = [ Hash, Array ]
|
|
342
|
-
if validatable_types.include?
|
|
343
|
-
unless value.is_a?
|
|
344
|
-
raise Mongoid::Errors::InvalidValue.new(
|
|
366
|
+
if validatable_types.include?(field.type)
|
|
367
|
+
unless value.is_a?(field.type)
|
|
368
|
+
raise Mongoid::Errors::InvalidValue.new(field.type, value.class)
|
|
345
369
|
end
|
|
346
370
|
end
|
|
347
371
|
end
|
data/lib/mongoid/changeable.rb
CHANGED
|
@@ -227,7 +227,7 @@ module Mongoid
|
|
|
227
227
|
# @since 2.3.0
|
|
228
228
|
def attribute_will_change!(attr)
|
|
229
229
|
unless changed_attributes.key?(attr)
|
|
230
|
-
changed_attributes[attr] =
|
|
230
|
+
changed_attributes[attr] = read_raw_attribute(attr).__deep_copy__
|
|
231
231
|
end
|
|
232
232
|
end
|
|
233
233
|
|
|
@@ -20,11 +20,12 @@ module Mongoid
|
|
|
20
20
|
#
|
|
21
21
|
# @since 6.0.0
|
|
22
22
|
def with(options_or_context, &block)
|
|
23
|
+
original_context = PersistenceContext.get(self)
|
|
23
24
|
original_cluster = persistence_context.cluster
|
|
24
25
|
set_persistence_context(options_or_context)
|
|
25
26
|
yield self
|
|
26
27
|
ensure
|
|
27
|
-
clear_persistence_context(original_cluster)
|
|
28
|
+
clear_persistence_context(original_cluster, original_context)
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
def collection(parent = nil)
|
|
@@ -38,7 +39,7 @@ module Mongoid
|
|
|
38
39
|
def mongo_client
|
|
39
40
|
persistence_context.client
|
|
40
41
|
end
|
|
41
|
-
|
|
42
|
+
|
|
42
43
|
def persistence_context
|
|
43
44
|
PersistenceContext.get(self) ||
|
|
44
45
|
PersistenceContext.get(self.class) ||
|
|
@@ -51,8 +52,8 @@ module Mongoid
|
|
|
51
52
|
PersistenceContext.set(self, options_or_context)
|
|
52
53
|
end
|
|
53
54
|
|
|
54
|
-
def clear_persistence_context(original_cluster = nil)
|
|
55
|
-
PersistenceContext.clear(self, original_cluster)
|
|
55
|
+
def clear_persistence_context(original_cluster = nil, context = nil)
|
|
56
|
+
PersistenceContext.clear(self, original_cluster, context)
|
|
56
57
|
end
|
|
57
58
|
|
|
58
59
|
module ClassMethods
|
|
@@ -92,11 +93,12 @@ module Mongoid
|
|
|
92
93
|
#
|
|
93
94
|
# @since 6.0.0
|
|
94
95
|
def with(options, &block)
|
|
96
|
+
original_context = PersistenceContext.get(self)
|
|
95
97
|
original_cluster = persistence_context.cluster
|
|
96
98
|
PersistenceContext.set(self, options)
|
|
97
99
|
yield self
|
|
98
100
|
ensure
|
|
99
|
-
PersistenceContext.clear(self, original_cluster)
|
|
101
|
+
PersistenceContext.clear(self, original_cluster, original_context)
|
|
100
102
|
end
|
|
101
103
|
|
|
102
104
|
def persistence_context
|
|
@@ -38,12 +38,20 @@ module Mongoid
|
|
|
38
38
|
#
|
|
39
39
|
# @since 6.4.0
|
|
40
40
|
def with_session(options = {})
|
|
41
|
-
|
|
41
|
+
if Threaded.get_session
|
|
42
|
+
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_nesting)
|
|
43
|
+
end
|
|
42
44
|
session = persistence_context.client.start_session(options)
|
|
43
45
|
Threaded.set_session(session)
|
|
44
46
|
yield(session)
|
|
45
47
|
rescue Mongo::Error::InvalidSession => ex
|
|
46
|
-
if
|
|
48
|
+
if
|
|
49
|
+
# Driver 2.13.0+
|
|
50
|
+
defined?(Mongo::Error::SessionsNotSupported) &&
|
|
51
|
+
Mongo::Error::SessionsNotSupported === ex ||
|
|
52
|
+
# Legacy drivers
|
|
53
|
+
ex.message == Mongo::Session::SESSIONS_NOT_SUPPORTED
|
|
54
|
+
then
|
|
47
55
|
raise Mongoid::Errors::InvalidSessionUse.new(:sessions_not_supported)
|
|
48
56
|
end
|
|
49
57
|
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_use)
|
|
@@ -89,12 +97,20 @@ module Mongoid
|
|
|
89
97
|
#
|
|
90
98
|
# @since 6.4.0
|
|
91
99
|
def with_session(options = {})
|
|
92
|
-
|
|
100
|
+
if Threaded.get_session
|
|
101
|
+
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_nesting)
|
|
102
|
+
end
|
|
93
103
|
session = persistence_context.client.start_session(options)
|
|
94
104
|
Threaded.set_session(session)
|
|
95
105
|
yield(session)
|
|
96
106
|
rescue Mongo::Error::InvalidSession => ex
|
|
97
|
-
if
|
|
107
|
+
if
|
|
108
|
+
# Driver 2.13.0+
|
|
109
|
+
defined?(Mongo::Error::SessionsNotSupported) &&
|
|
110
|
+
Mongo::Error::SessionsNotSupported === ex ||
|
|
111
|
+
# Legacy drivers
|
|
112
|
+
ex.message == Mongo::Session::SESSIONS_NOT_SUPPORTED
|
|
113
|
+
then
|
|
98
114
|
raise Mongoid::Errors::InvalidSessionUse.new(:sessions_not_supported)
|
|
99
115
|
end
|
|
100
116
|
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_use)
|
data/lib/mongoid/composable.rb
CHANGED
|
@@ -43,7 +43,7 @@ module Mongoid
|
|
|
43
43
|
include Inspectable
|
|
44
44
|
include Matchable
|
|
45
45
|
include Persistable
|
|
46
|
-
include
|
|
46
|
+
include Association
|
|
47
47
|
include Reloadable
|
|
48
48
|
include Scopable
|
|
49
49
|
include Selectable
|
|
@@ -70,7 +70,7 @@ module Mongoid
|
|
|
70
70
|
Interceptable,
|
|
71
71
|
Matchable,
|
|
72
72
|
Persistable,
|
|
73
|
-
|
|
73
|
+
Association,
|
|
74
74
|
Reloadable,
|
|
75
75
|
Scopable,
|
|
76
76
|
Serializable,
|
|
@@ -83,8 +83,8 @@ module Mongoid
|
|
|
83
83
|
Traversable,
|
|
84
84
|
Validatable,
|
|
85
85
|
Equality,
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
Association::Referenced::Syncable,
|
|
87
|
+
Association::Macros,
|
|
88
88
|
ActiveModel::Model,
|
|
89
89
|
ActiveModel::Validations
|
|
90
90
|
]
|
|
@@ -6,35 +6,48 @@ module Mongoid
|
|
|
6
6
|
module Environment
|
|
7
7
|
extend self
|
|
8
8
|
|
|
9
|
-
# Get the name of the environment that
|
|
10
|
-
#
|
|
11
|
-
#
|
|
9
|
+
# Get the name of the environment that Mongoid is running under.
|
|
10
|
+
#
|
|
11
|
+
# Uses the following sources in order:
|
|
12
|
+
# - If +::Rails+ is defined, +Rails.env+.
|
|
13
|
+
# - If +::Sinatra+ is defined, +Sinatra::Base.environment+.
|
|
14
|
+
# - +RACK_ENV+
|
|
15
|
+
# - +MONGOID_ENV*
|
|
12
16
|
#
|
|
13
17
|
# @example Get the env name.
|
|
14
18
|
# Environment.env_name
|
|
15
19
|
#
|
|
16
|
-
# @raise [ Errors::NoEnvironment ] If
|
|
20
|
+
# @raise [ Errors::NoEnvironment ] If environment name cannot be
|
|
21
|
+
# determined because none of the sources was set.
|
|
17
22
|
#
|
|
18
23
|
# @return [ String ] The name of the current environment.
|
|
19
24
|
#
|
|
20
25
|
# @since 2.3.0
|
|
26
|
+
# @api public
|
|
21
27
|
def env_name
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
if defined?(::Rails)
|
|
29
|
+
return ::Rails.env
|
|
30
|
+
end
|
|
31
|
+
if defined?(::Sinatra)
|
|
32
|
+
return ::Sinatra::Base.environment.to_s
|
|
33
|
+
end
|
|
34
|
+
ENV["RACK_ENV"] || ENV["MONGOID_ENV"] or raise Errors::NoEnvironment
|
|
25
35
|
end
|
|
26
36
|
|
|
27
37
|
# Load the yaml from the provided path and return the settings for the
|
|
28
|
-
# current environment.
|
|
38
|
+
# specified environment, or for the current Mongoid environment.
|
|
29
39
|
#
|
|
30
40
|
# @example Load the yaml.
|
|
31
41
|
# Environment.load_yaml("/work/mongoid.yml")
|
|
32
42
|
#
|
|
33
43
|
# @param [ String ] path The location of the file.
|
|
44
|
+
# @param [ String | Symbol ] environment Optional environment name to
|
|
45
|
+
# override the current Mongoid environment.
|
|
34
46
|
#
|
|
35
47
|
# @return [ Hash ] The settings.
|
|
36
48
|
#
|
|
37
49
|
# @since 2.3.0
|
|
50
|
+
# @api private
|
|
38
51
|
def load_yaml(path, environment = nil)
|
|
39
52
|
env = environment ? environment.to_s : env_name
|
|
40
53
|
YAML.load(ERB.new(File.new(path).read).result)[env]
|
data/lib/mongoid/config.rb
CHANGED
|
@@ -27,6 +27,7 @@ module Mongoid
|
|
|
27
27
|
option :log_level, default: :info
|
|
28
28
|
option :belongs_to_required_by_default, default: true
|
|
29
29
|
option :app_name, default: nil
|
|
30
|
+
option :background_indexing, default: false
|
|
30
31
|
|
|
31
32
|
# Has Mongoid been configured? This is checking that at least a valid
|
|
32
33
|
# client config exists.
|
|
@@ -118,7 +118,7 @@ module Mongoid
|
|
|
118
118
|
# @since 3.0.0
|
|
119
119
|
def push_all(pushes)
|
|
120
120
|
push_each_updates = collect_operations(pushes).each.inject({}) do |ops, (field, elements)|
|
|
121
|
-
ops.merge!(field => {'$each' => elements})
|
|
121
|
+
ops.merge!(field => { '$each' => elements })
|
|
122
122
|
end
|
|
123
123
|
view.update_many("$push" => push_each_updates)
|
|
124
124
|
end
|
|
@@ -242,7 +242,7 @@ module Mongoid
|
|
|
242
242
|
# @since 3.0.0
|
|
243
243
|
def documents
|
|
244
244
|
results["results"].map do |attributes|
|
|
245
|
-
doc = Factory.from_db(criteria.klass, attributes["obj"], criteria
|
|
245
|
+
doc = Factory.from_db(criteria.klass, attributes["obj"], criteria)
|
|
246
246
|
doc.attributes["geo_near_distance"] = attributes["dis"]
|
|
247
247
|
doc
|
|
248
248
|
end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require "mongoid/contextual/aggregable/memory"
|
|
3
|
-
require "mongoid/
|
|
3
|
+
require "mongoid/association/eager_loadable"
|
|
4
4
|
|
|
5
5
|
module Mongoid
|
|
6
6
|
module Contextual
|
|
7
7
|
class Memory
|
|
8
8
|
include Enumerable
|
|
9
9
|
include Aggregable::Memory
|
|
10
|
-
include
|
|
10
|
+
include Association::EagerLoadable
|
|
11
11
|
include Queryable
|
|
12
12
|
include Positional
|
|
13
13
|
|
|
@@ -130,7 +130,7 @@ module Mongoid
|
|
|
130
130
|
# @return [ Document ] The first document.
|
|
131
131
|
#
|
|
132
132
|
# @since 3.0.0
|
|
133
|
-
def first
|
|
133
|
+
def first(*args)
|
|
134
134
|
eager_load([documents.first]).first
|
|
135
135
|
end
|
|
136
136
|
alias :one :first
|
|
@@ -155,6 +155,22 @@ module Mongoid
|
|
|
155
155
|
apply_options
|
|
156
156
|
end
|
|
157
157
|
|
|
158
|
+
# Increment a value on all documents.
|
|
159
|
+
#
|
|
160
|
+
# @example Perform the increment.
|
|
161
|
+
# context.inc(likes: 10)
|
|
162
|
+
#
|
|
163
|
+
# @param [ Hash ] incs The operations.
|
|
164
|
+
#
|
|
165
|
+
# @return [ Enumerator ] The enumerator.
|
|
166
|
+
#
|
|
167
|
+
# @since 7.0.0
|
|
168
|
+
def inc(*args)
|
|
169
|
+
each do |document|
|
|
170
|
+
document.inc *args
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
158
174
|
# Get the last document in the database for the criteria's selector.
|
|
159
175
|
#
|
|
160
176
|
# @example Get the last document.
|
|
@@ -446,6 +462,8 @@ module Mongoid
|
|
|
446
462
|
doc.destroyed = true
|
|
447
463
|
end
|
|
448
464
|
|
|
465
|
+
private
|
|
466
|
+
|
|
449
467
|
def _session
|
|
450
468
|
@criteria.send(:_session)
|
|
451
469
|
end
|