mongoid 7.4.0 → 8.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +3 -3
- data/lib/config/locales/en.yml +52 -28
- data/lib/mongoid/association/accessors.rb +38 -9
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +53 -13
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +50 -28
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +23 -4
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +22 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +5 -5
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +14 -3
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +66 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -24
- data/lib/mongoid/association/referenced/has_many/proxy.rb +24 -18
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +2 -2
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +19 -0
- data/lib/mongoid/attributes/dynamic.rb +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +10 -3
- data/lib/mongoid/attributes/projector.rb +1 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/attributes.rb +43 -40
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +42 -7
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/validators/storage.rb +3 -3
- data/lib/mongoid/config/environment.rb +20 -4
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +32 -17
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +180 -21
- data/lib/mongoid/contextual/mongo.rb +237 -217
- data/lib/mongoid/contextual/none.rb +67 -5
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +7 -4
- data/lib/mongoid/criteria/includable.rb +24 -20
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -13
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -2
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +3 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +21 -0
- data/lib/mongoid/criteria/queryable/optional.rb +5 -11
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +31 -37
- data/lib/mongoid/criteria/queryable/selector.rb +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria.rb +15 -35
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +98 -34
- data/lib/mongoid/equality.rb +12 -12
- data/lib/mongoid/errors/document_not_found.rb +33 -12
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +2 -2
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +13 -6
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +8 -6
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +27 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +42 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +9 -4
- data/lib/mongoid/fields/standard.rb +7 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +201 -35
- data/lib/mongoid/findable.rb +34 -13
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +73 -13
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +12 -7
- data/lib/mongoid/persistable/creatable.rb +18 -9
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +2 -2
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +19 -12
- data/lib/mongoid/persistable/upsertable.rb +2 -2
- data/lib/mongoid/persistable.rb +3 -3
- data/lib/mongoid/persistence_context.rb +63 -10
- data/lib/mongoid/query_cache.rb +8 -260
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +7 -3
- data/lib/mongoid/scopable.rb +26 -22
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/stateful.rb +35 -9
- data/lib/mongoid/tasks/database.rb +0 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +12 -12
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +8 -4
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +6 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +2 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +11 -5
- data/spec/config/mongoid.yml +16 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +28 -26
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +28 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +95 -1
- data/spec/integration/callbacks_spec.rb +226 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -17
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/lite_spec_helper.rb +1 -1
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +219 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +67 -4
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +8 -8
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -13
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +14 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/atomic_spec.rb +22 -0
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +524 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +34 -42
- data/spec/mongoid/clients/options_spec.rb +1 -0
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +57 -2
- data/spec/mongoid/config/environment_spec.rb +39 -1
- data/spec/mongoid/config_spec.rb +104 -13
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +1336 -69
- data/spec/mongoid/contextual/mongo_spec.rb +1105 -174
- data/spec/mongoid/contextual/none_spec.rb +38 -0
- data/spec/mongoid/copyable_spec.rb +451 -1
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +289 -124
- data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
- data/spec/mongoid/criteria_projection_spec.rb +0 -1
- data/spec/mongoid/criteria_spec.rb +475 -1199
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +30 -0
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +37 -12
- data/spec/mongoid/fields_spec.rb +321 -50
- data/spec/mongoid/findable_spec.rb +80 -15
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +39 -20
- data/spec/mongoid/interceptable_spec.rb +584 -5
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +50 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +0 -154
- data/spec/mongoid/reloadable_spec.rb +35 -2
- data/spec/mongoid/scopable_spec.rb +54 -16
- data/spec/mongoid/shardable_spec.rb +14 -0
- data/spec/mongoid/stateful_spec.rb +28 -0
- data/spec/mongoid/timestamps_spec.rb +390 -0
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +116 -0
- data/spec/mongoid/touchable_spec_models.rb +12 -8
- data/spec/mongoid/traversable_spec.rb +4 -11
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +59 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/constraints.rb +8 -16
- data/spec/shared/lib/mrss/docker_runner.rb +23 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
- data/spec/shared/share/Dockerfile.erb +34 -48
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/server.sh +32 -19
- data/spec/shared/shlib/set_env.sh +37 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +55 -0
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +3 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/code.rb +2 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/membership.rb +1 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +1 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/spec_config.rb +4 -0
- data.tar.gz.sig +0 -0
- metadata +682 -619
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -75,7 +75,7 @@ module Mongoid
|
|
75
75
|
|
76
76
|
# Is this association polymorphic?
|
77
77
|
#
|
78
|
-
# @return [ true
|
78
|
+
# @return [ true | false ] Whether this association is polymorphic.
|
79
79
|
def polymorphic?
|
80
80
|
!!@options[:polymorphic]
|
81
81
|
end
|
@@ -114,7 +114,8 @@ module Mongoid
|
|
114
114
|
rel.as == name &&
|
115
115
|
rel.relation_class_name == inverse_class_name
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
|
+
matches.map { |m| m.name }
|
118
119
|
end
|
119
120
|
end
|
120
121
|
|
@@ -31,7 +31,7 @@ module Mongoid
|
|
31
31
|
docs = []
|
32
32
|
object.each do |attrs|
|
33
33
|
if _loading? && base.persisted?
|
34
|
-
docs.push(Factory.
|
34
|
+
docs.push(Factory.execute_from_db(klass, attrs, nil, selected_fields, execute_callbacks: false))
|
35
35
|
else
|
36
36
|
docs.push(Factory.build(klass, attrs))
|
37
37
|
end
|
@@ -19,7 +19,7 @@ module Mongoid
|
|
19
19
|
# @example Push a document.
|
20
20
|
# person.addresses.push(address)
|
21
21
|
#
|
22
|
-
# @param [ Document
|
22
|
+
# @param [ Document | Array<Document> ] args Any number of documents.
|
23
23
|
def <<(*args)
|
24
24
|
docs = args.flatten
|
25
25
|
return concat(docs) if docs.size > 1
|
@@ -67,10 +67,11 @@ module Mongoid
|
|
67
67
|
#
|
68
68
|
# @return [ Document ] The new document.
|
69
69
|
def build(attributes = {}, type = nil)
|
70
|
-
doc = Factory.
|
70
|
+
doc = Factory.execute_build(type || _association.klass, attributes, execute_callbacks: false)
|
71
71
|
append(doc)
|
72
72
|
doc.apply_post_processed_defaults
|
73
73
|
yield(doc) if block_given?
|
74
|
+
doc.run_pending_callbacks
|
74
75
|
doc.run_callbacks(:build) { doc }
|
75
76
|
_base._reset_memoized_descendants!
|
76
77
|
doc
|
@@ -94,6 +95,7 @@ module Mongoid
|
|
94
95
|
# @return [ self ] The empty association.
|
95
96
|
def clear
|
96
97
|
batch_clear(_target.dup)
|
98
|
+
update_attributes_hash
|
97
99
|
self
|
98
100
|
end
|
99
101
|
|
@@ -115,7 +117,7 @@ module Mongoid
|
|
115
117
|
# @example Use #persisted? inside block to count persisted documents.
|
116
118
|
# person.addresses.count { |a| a.persisted? && a.country == "FR" }
|
117
119
|
#
|
118
|
-
# @param [ Object
|
120
|
+
# @param [ Object | Array<Object> ] args Args to delegate to the target.
|
119
121
|
#
|
120
122
|
# @return [ Integer ] The total number of persisted embedded docs, as
|
121
123
|
# flagged by the #persisted? method.
|
@@ -133,22 +135,23 @@ module Mongoid
|
|
133
135
|
#
|
134
136
|
# @param [ Document ] document The document to be deleted.
|
135
137
|
#
|
136
|
-
# @return [ Document
|
138
|
+
# @return [ Document | nil ] The deleted document or nil if nothing deleted.
|
137
139
|
def delete(document)
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
140
|
+
execute_callbacks_around(:remove, document) do
|
141
|
+
doc = _target.delete_one(document)
|
142
|
+
if doc && !_binding?
|
143
|
+
_unscoped.delete_one(doc)
|
144
|
+
if _assigning?
|
145
|
+
_base.add_atomic_pull(doc)
|
146
|
+
else
|
147
|
+
doc.delete(suppress: true)
|
148
|
+
unbind_one(doc)
|
149
|
+
end
|
150
|
+
update_attributes_hash
|
147
151
|
end
|
152
|
+
reindex
|
153
|
+
doc
|
148
154
|
end
|
149
|
-
reindex
|
150
|
-
execute_callback :after_remove, document
|
151
|
-
doc
|
152
155
|
end
|
153
156
|
|
154
157
|
# Delete all the documents in the association without running callbacks.
|
@@ -173,7 +176,7 @@ module Mongoid
|
|
173
176
|
# doc.state == "GA"
|
174
177
|
# end
|
175
178
|
#
|
176
|
-
# @return [ Many
|
179
|
+
# @return [ Many | Enumerator ] The association or an enumerator if no
|
177
180
|
# block was provided.
|
178
181
|
def delete_if
|
179
182
|
if block_given?
|
@@ -207,9 +210,9 @@ module Mongoid
|
|
207
210
|
# @example Are there persisted documents?
|
208
211
|
# person.posts.exists?
|
209
212
|
#
|
210
|
-
# @return [ true
|
213
|
+
# @return [ true | false ] True is persisted documents exist, false if not.
|
211
214
|
def exists?
|
212
|
-
|
215
|
+
_target.any? { |doc| doc.persisted? }
|
213
216
|
end
|
214
217
|
|
215
218
|
# Finds a document in this association through several different
|
@@ -256,6 +259,7 @@ module Mongoid
|
|
256
259
|
integrate(doc)
|
257
260
|
doc._index = index
|
258
261
|
end
|
262
|
+
update_attributes_hash
|
259
263
|
@_unscoped = _target.dup
|
260
264
|
@_target = scope(_target)
|
261
265
|
end
|
@@ -283,7 +287,7 @@ module Mongoid
|
|
283
287
|
# @param [ Integer ] count The number of documents to pop, or 1 if not
|
284
288
|
# provided.
|
285
289
|
#
|
286
|
-
# @return [ Document
|
290
|
+
# @return [ Document | Array<Document> ] The popped document(s).
|
287
291
|
def pop(count = nil)
|
288
292
|
if count
|
289
293
|
if docs = _target[_target.size - count, _target.size]
|
@@ -291,6 +295,8 @@ module Mongoid
|
|
291
295
|
end
|
292
296
|
else
|
293
297
|
delete(_target[-1])
|
298
|
+
end.tap do
|
299
|
+
update_attributes_hash
|
294
300
|
end
|
295
301
|
end
|
296
302
|
|
@@ -306,7 +312,7 @@ module Mongoid
|
|
306
312
|
# @param [ Integer ] count The number of documents to shift, or 1 if not
|
307
313
|
# provided.
|
308
314
|
#
|
309
|
-
# @return [ Document
|
315
|
+
# @return [ Document | Array<Document> ] The shifted document(s).
|
310
316
|
def shift(count = nil)
|
311
317
|
if count
|
312
318
|
if _target.size > 0 && docs = _target[0, count]
|
@@ -314,6 +320,8 @@ module Mongoid
|
|
314
320
|
end
|
315
321
|
else
|
316
322
|
delete(_target[0])
|
323
|
+
end.tap do
|
324
|
+
update_attributes_hash
|
317
325
|
end
|
318
326
|
end
|
319
327
|
|
@@ -328,6 +336,7 @@ module Mongoid
|
|
328
336
|
# @return [ Many ] The proxied association.
|
329
337
|
def substitute(docs)
|
330
338
|
batch_replace(docs)
|
339
|
+
update_attributes_hash
|
331
340
|
self
|
332
341
|
end
|
333
342
|
|
@@ -365,6 +374,7 @@ module Mongoid
|
|
365
374
|
end
|
366
375
|
_unscoped.push(document)
|
367
376
|
integrate(document)
|
377
|
+
update_attributes_hash
|
368
378
|
document._index = _unscoped.size - 1
|
369
379
|
execute_callback :after_add, document
|
370
380
|
end
|
@@ -398,6 +408,7 @@ module Mongoid
|
|
398
408
|
def delete_one(document)
|
399
409
|
_target.delete_one(document)
|
400
410
|
_unscoped.delete_one(document)
|
411
|
+
update_attributes_hash
|
401
412
|
reindex
|
402
413
|
end
|
403
414
|
|
@@ -418,7 +429,7 @@ module Mongoid
|
|
418
429
|
#
|
419
430
|
# If the method exists on the array, use the default proxy behavior.
|
420
431
|
#
|
421
|
-
# @param [ Symbol
|
432
|
+
# @param [ Symbol | String ] name The name of the method.
|
422
433
|
# @param [ Array ] args The method args
|
423
434
|
# @param [ Proc ] block Optional block to pass.
|
424
435
|
#
|
@@ -435,7 +446,7 @@ module Mongoid
|
|
435
446
|
# @example Can we persist the association?
|
436
447
|
# relation.persistable?
|
437
448
|
#
|
438
|
-
# @return [ true
|
449
|
+
# @return [ true | false ] If the association is persistable.
|
439
450
|
def persistable?
|
440
451
|
_base.persisted? && !_binding?
|
441
452
|
end
|
@@ -479,13 +490,14 @@ module Mongoid
|
|
479
490
|
# relation.remove_all({ :num => 1 }, true)
|
480
491
|
#
|
481
492
|
# @param [ Hash ] conditions Conditions to filter by.
|
482
|
-
# @param [ true
|
493
|
+
# @param [ true | false ] method :delete or :destroy.
|
483
494
|
#
|
484
495
|
# @return [ Integer ] The number of documents removed.
|
485
496
|
def remove_all(conditions = {}, method = :delete)
|
486
497
|
criteria = where(conditions || {})
|
487
498
|
removed = criteria.size
|
488
499
|
batch_remove(criteria, method)
|
500
|
+
update_attributes_hash
|
489
501
|
removed
|
490
502
|
end
|
491
503
|
|
@@ -511,12 +523,22 @@ module Mongoid
|
|
511
523
|
@_unscoped = docs
|
512
524
|
end
|
513
525
|
|
526
|
+
# Returns a list of attributes hashes for each document.
|
527
|
+
#
|
528
|
+
# @return [ Array<Hash> ] The list of attributes hashes
|
514
529
|
def as_attributes
|
515
|
-
|
516
|
-
|
517
|
-
|
530
|
+
_unscoped.map { |doc| doc.send(:as_attributes) }
|
531
|
+
end
|
532
|
+
|
533
|
+
# Update the _base's attributes hash with the _target's attributes
|
534
|
+
#
|
535
|
+
# @api private
|
536
|
+
def update_attributes_hash
|
537
|
+
if !_target.empty?
|
538
|
+
_base.attributes.merge!(_association.store_as => _target.map(&:attributes))
|
539
|
+
else
|
540
|
+
_base.attributes.delete(_association.store_as)
|
518
541
|
end
|
519
|
-
attributes
|
520
542
|
end
|
521
543
|
|
522
544
|
class << self
|
@@ -92,7 +92,7 @@ module Mongoid
|
|
92
92
|
|
93
93
|
# Is this association polymorphic?
|
94
94
|
#
|
95
|
-
# @return [ true
|
95
|
+
# @return [ true | false ] Whether this association is polymorphic.
|
96
96
|
def polymorphic?
|
97
97
|
@polymorphic ||= !!@options[:as]
|
98
98
|
end
|
@@ -101,7 +101,7 @@ module Mongoid
|
|
101
101
|
#
|
102
102
|
# @note Only relevant if the association is polymorphic.
|
103
103
|
#
|
104
|
-
# @return [ String
|
104
|
+
# @return [ String | nil ] The field for storing the associated object's type.
|
105
105
|
def type
|
106
106
|
@type ||= "#{as}_type" if polymorphic?
|
107
107
|
end
|
@@ -25,11 +25,25 @@ module Mongoid
|
|
25
25
|
#
|
26
26
|
# @return [ Document ] A single document.
|
27
27
|
def build(base, object, _type = nil, selected_fields = nil)
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
if object.is_a?(Hash)
|
29
|
+
if _loading? && base.persisted?
|
30
|
+
Factory.execute_from_db(klass, object, nil, selected_fields, execute_callbacks: false)
|
31
|
+
else
|
32
|
+
Factory.build(klass, object)
|
33
|
+
end
|
31
34
|
else
|
32
|
-
|
35
|
+
clear_associated(object)
|
36
|
+
object
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def clear_associated(doc)
|
43
|
+
if doc && (inv = inverse(doc))
|
44
|
+
if associated = doc.ivar(inv)
|
45
|
+
associated.substitute(nil)
|
46
|
+
end
|
33
47
|
end
|
34
48
|
end
|
35
49
|
end
|
@@ -31,6 +31,7 @@ module Mongoid
|
|
31
31
|
characterize_one(_target)
|
32
32
|
bind_one
|
33
33
|
characterize_one(_target)
|
34
|
+
update_attributes_hash(_target)
|
34
35
|
_base._reset_memoized_descendants!
|
35
36
|
_target.save if persistable?
|
36
37
|
end
|
@@ -44,7 +45,7 @@ module Mongoid
|
|
44
45
|
#
|
45
46
|
# @param [ Document ] replacement A document to replace the target.
|
46
47
|
#
|
47
|
-
# @return [ Document
|
48
|
+
# @return [ Document | nil ] The association or nil.
|
48
49
|
def substitute(replacement)
|
49
50
|
if replacement != self
|
50
51
|
if _assigning?
|
@@ -80,11 +81,15 @@ module Mongoid
|
|
80
81
|
end
|
81
82
|
end
|
82
83
|
unbind_one
|
83
|
-
|
84
|
+
unless replacement
|
85
|
+
update_attributes_hash(replacement)
|
86
|
+
return nil
|
87
|
+
end
|
84
88
|
replacement = Factory.build(klass, replacement) if replacement.is_a?(::Hash)
|
85
89
|
self._target = replacement
|
86
|
-
bind_one
|
87
90
|
characterize_one(_target)
|
91
|
+
bind_one
|
92
|
+
update_attributes_hash(_target)
|
88
93
|
_target.save if persistable?
|
89
94
|
end
|
90
95
|
self
|
@@ -107,11 +112,25 @@ module Mongoid
|
|
107
112
|
# @example Can we persist the association?
|
108
113
|
# relation.persistable?
|
109
114
|
#
|
110
|
-
# @return [ true
|
115
|
+
# @return [ true | false ] If the association is persistable.
|
111
116
|
def persistable?
|
112
117
|
_base.persisted? && !_binding? && !_building? && !_assigning?
|
113
118
|
end
|
114
119
|
|
120
|
+
# Update the _base's attributes hash with the _target's attributes
|
121
|
+
#
|
122
|
+
# @param replacement [ Document | nil ] The doc to use to update the
|
123
|
+
# attributes hash.
|
124
|
+
#
|
125
|
+
# @api private
|
126
|
+
def update_attributes_hash(replacement)
|
127
|
+
if replacement
|
128
|
+
_base.attributes.merge!(_association.store_as => replacement.attributes)
|
129
|
+
else
|
130
|
+
_base.attributes.delete(_association.store_as)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
115
134
|
class << self
|
116
135
|
|
117
136
|
# Returns true if the association is an embedded one. In this case
|
@@ -66,7 +66,7 @@ module Mongoid
|
|
66
66
|
# @example Get the validation default.
|
67
67
|
# Proxy.validation_default
|
68
68
|
#
|
69
|
-
# @return [ true
|
69
|
+
# @return [ true | false ] The validation default.
|
70
70
|
def validation_default; true; end
|
71
71
|
|
72
72
|
# Does this association type store the foreign key?
|
@@ -88,7 +88,7 @@ module Mongoid
|
|
88
88
|
|
89
89
|
# Is this association polymorphic?
|
90
90
|
#
|
91
|
-
# @return [ true
|
91
|
+
# @return [ true | false ] Whether this association is polymorphic.
|
92
92
|
def polymorphic?
|
93
93
|
@polymorphic ||= !!@options[:as]
|
94
94
|
end
|
@@ -97,7 +97,7 @@ module Mongoid
|
|
97
97
|
#
|
98
98
|
# @note Only relevant if the association is polymorphic.
|
99
99
|
#
|
100
|
-
# @return [ String
|
100
|
+
# @return [ String | nil ] The field for storing the associated object's type.
|
101
101
|
def type
|
102
102
|
@type ||= "#{as}_type" if polymorphic?
|
103
103
|
end
|
@@ -12,8 +12,29 @@ module Mongoid
|
|
12
12
|
class_attribute :embedded, instance_reader: false
|
13
13
|
class_attribute :embedded_relations
|
14
14
|
class_attribute :relations
|
15
|
+
|
16
|
+
# A hash that maps aliases to their associations. This hash maps the
|
17
|
+
# associations "in database name" to its "in code" name. This is used when
|
18
|
+
# associations specify the `store_as` option, or on a referenced association.
|
19
|
+
# On a referenced association, this is used to map the foreign key to
|
20
|
+
# the association's name. For example, if we had the following
|
21
|
+
# relationship:
|
22
|
+
#
|
23
|
+
# User has_many Accounts
|
24
|
+
#
|
25
|
+
# User will have an entry in the aliased associations hash:
|
26
|
+
#
|
27
|
+
# account_ids => accounts
|
28
|
+
#
|
29
|
+
# Note that on the belongs_to associations, the mapping from
|
30
|
+
# foreign key => name is not in the aliased_associations hash, but a
|
31
|
+
# mapping from name => foreign key is in the aliased_fields hash.
|
32
|
+
#
|
33
|
+
# @return [ Hash<String, String> ] The aliased associations hash.
|
34
|
+
#
|
15
35
|
# @api private
|
16
36
|
class_attribute :aliased_associations
|
37
|
+
|
17
38
|
self.embedded = false
|
18
39
|
self.embedded_relations = BSON::Document.new
|
19
40
|
self.relations = BSON::Document.new
|
@@ -196,7 +217,7 @@ module Mongoid
|
|
196
217
|
Association::MACRO_MAPPING[macro_name].new(self, name, options, &block).tap do |assoc|
|
197
218
|
assoc.setup!
|
198
219
|
self.relations = self.relations.merge(name => assoc)
|
199
|
-
if assoc.respond_to?(:store_as) && assoc.store_as != name
|
220
|
+
if assoc.embedded? && assoc.respond_to?(:store_as) && assoc.store_as != name
|
200
221
|
self.aliased_associations[assoc.store_as] = name
|
201
222
|
end
|
202
223
|
end
|
@@ -17,7 +17,7 @@ module Mongoid
|
|
17
17
|
# @example Is the association empty??
|
18
18
|
# person.addresses.blank?
|
19
19
|
#
|
20
|
-
# @return [ true
|
20
|
+
# @return [ true | false ] If the association is empty or not.
|
21
21
|
def blank?
|
22
22
|
!any?
|
23
23
|
end
|
@@ -28,7 +28,6 @@ module Mongoid
|
|
28
28
|
# @example Create and save the new document.
|
29
29
|
# person.posts.create(:text => "Testing")
|
30
30
|
#
|
31
|
-
#
|
32
31
|
# @param [ Hash ] attributes The attributes to create with.
|
33
32
|
# @param [ Class ] type The optional type of document to create.
|
34
33
|
#
|
@@ -61,6 +60,11 @@ module Mongoid
|
|
61
60
|
attributes.map { |attrs| create!(attrs, type, &block) }
|
62
61
|
else
|
63
62
|
doc = build(attributes, type, &block)
|
63
|
+
|
64
|
+
Array(doc).each do |doc|
|
65
|
+
doc.try(:run_pending_callbacks)
|
66
|
+
end
|
67
|
+
|
64
68
|
_base.persisted? ? doc.save! : raise_unsaved(doc)
|
65
69
|
doc
|
66
70
|
end
|
@@ -126,9 +130,9 @@ module Mongoid
|
|
126
130
|
# relation.respond_to?(:name)
|
127
131
|
#
|
128
132
|
# @param [ Symbol ] name The method name.
|
129
|
-
# @param [ true
|
133
|
+
# @param [ true | false ] include_private Whether to include private methods.
|
130
134
|
#
|
131
|
-
# @return [ true
|
135
|
+
# @return [ true | false ] If the proxy responds to the method.
|
132
136
|
def respond_to?(name, include_private = false)
|
133
137
|
[].respond_to?(name, include_private) ||
|
134
138
|
klass.respond_to?(name, include_private) || super
|
@@ -153,9 +157,9 @@ module Mongoid
|
|
153
157
|
#
|
154
158
|
# @param [ Hash ] options The options to pass.
|
155
159
|
#
|
156
|
-
# @option options [ Symbol ] :
|
157
|
-
# @option options [ Symbol ] :
|
158
|
-
# @option options [ Symbol ] :
|
160
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :except Do not include these field(s).
|
161
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :include Which association(s) to include.
|
162
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :only Limit the field(s) to only these.
|
159
163
|
#
|
160
164
|
# @return [ Hash ] The documents, ready to be serialized.
|
161
165
|
def serializable_hash(options = {})
|
@@ -65,7 +65,7 @@ module Mongoid
|
|
65
65
|
#
|
66
66
|
# @param [ Hash ] attributes The attributes to pull the flag from.
|
67
67
|
#
|
68
|
-
# @return [ true
|
68
|
+
# @return [ true | false ] If the association can potentially be deleted.
|
69
69
|
def destroyable?(attributes)
|
70
70
|
destroy = attributes.delete(:_destroy)
|
71
71
|
Nested::DESTROY_FLAGS.include?(destroy) && allow_destroy?
|
@@ -79,7 +79,7 @@ module Mongoid
|
|
79
79
|
#
|
80
80
|
# @param [ Hash ] attributes The attributes being set.
|
81
81
|
#
|
82
|
-
# @return [ true
|
82
|
+
# @return [ true | false ] If the attributes exceed the limit.
|
83
83
|
def over_limit?(attributes)
|
84
84
|
limit = options[:limit]
|
85
85
|
limit ? attributes.size > limit : false
|
@@ -134,8 +134,9 @@ module Mongoid
|
|
134
134
|
# @param [ Proxy ] relation The association proxy.
|
135
135
|
# @param [ Document ] doc The document to delete.
|
136
136
|
def destroy_document(relation, doc)
|
137
|
+
res = doc.destroy unless doc.embedded? || doc.destroyed?
|
137
138
|
relation.delete(doc)
|
138
|
-
|
139
|
+
res
|
139
140
|
end
|
140
141
|
|
141
142
|
# Update the document.
|
@@ -164,7 +165,7 @@ module Mongoid
|
|
164
165
|
# builder.update_nested_relation(parent, id, attrs)
|
165
166
|
#
|
166
167
|
# @param [ Document ] parent The parent document.
|
167
|
-
# @param [ String
|
168
|
+
# @param [ String | BSON::ObjectId ] id of the related document.
|
168
169
|
# @param [ Hash ] attrs The single document attributes to process.
|
169
170
|
def update_nested_relation(parent, id, attrs)
|
170
171
|
first = existing.first
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
# @example Do we allow a destroy?
|
13
13
|
# builder.allow_destroy?
|
14
14
|
#
|
15
|
-
# @return [ true
|
15
|
+
# @return [ true | false ] True if the allow destroy option was set.
|
16
16
|
def allow_destroy?
|
17
17
|
options[:allow_destroy] || false
|
18
18
|
end
|
@@ -25,7 +25,7 @@ module Mongoid
|
|
25
25
|
# @param [ Document ] document The parent document of the association
|
26
26
|
# @param [ Hash ] attrs The attributes to check for rejection.
|
27
27
|
#
|
28
|
-
# @return [ true
|
28
|
+
# @return [ true | false ] True and call proc or method if rejectable, false if not.
|
29
29
|
def reject?(document, attrs)
|
30
30
|
case callback = options[:reject_if]
|
31
31
|
when Symbol
|
@@ -43,7 +43,7 @@ module Mongoid
|
|
43
43
|
# @example Is this update only?
|
44
44
|
# builder.update_only?
|
45
45
|
#
|
46
|
-
# @return [ true
|
46
|
+
# @return [ true | false ] True if the update_only option was set.
|
47
47
|
def update_only?
|
48
48
|
options[:update_only] || false
|
49
49
|
end
|
@@ -56,7 +56,7 @@ module Mongoid
|
|
56
56
|
# @param [ Class ] klass The class we're trying to convert for.
|
57
57
|
# @param [ String ] id The id, usually coming from the form.
|
58
58
|
#
|
59
|
-
# @return [ BSON::ObjectId
|
59
|
+
# @return [ BSON::ObjectId | String | Object ] The converted id.
|
60
60
|
def convert_id(klass, id)
|
61
61
|
klass.using_object_ids? ? BSON::ObjectId.mongoize(id) : id
|
62
62
|
end
|
@@ -62,7 +62,7 @@ module Mongoid
|
|
62
62
|
# @example Is the id acceptable?
|
63
63
|
# one.acceptable_id?
|
64
64
|
#
|
65
|
-
# @return [ true
|
65
|
+
# @return [ true | false ] If the id part of the logic will allow an update.
|
66
66
|
def acceptable_id?
|
67
67
|
id = association.klass.extract_id_field(attributes)
|
68
68
|
id = convert_id(existing.class, id)
|
@@ -74,7 +74,7 @@ module Mongoid
|
|
74
74
|
# @example Can the existing object be deleted?
|
75
75
|
# one.delete?
|
76
76
|
#
|
77
|
-
# @return [ true
|
77
|
+
# @return [ true | false ] If the association should be deleted.
|
78
78
|
def delete?
|
79
79
|
id = association.klass.extract_id_field(attributes)
|
80
80
|
destroyable? && !id.nil?
|
@@ -85,7 +85,7 @@ module Mongoid
|
|
85
85
|
# @example Is the object destroyable?
|
86
86
|
# one.destroyable?({ :_destroy => "1" })
|
87
87
|
#
|
88
|
-
# @return [ true
|
88
|
+
# @return [ true | false ] If the association can potentially be
|
89
89
|
# destroyed.
|
90
90
|
def destroyable?
|
91
91
|
Nested::DESTROY_FLAGS.include?(destroy) && allow_destroy?
|
@@ -96,7 +96,7 @@ module Mongoid
|
|
96
96
|
# @example Is the document to be replaced?
|
97
97
|
# one.replace?
|
98
98
|
#
|
99
|
-
# @return [ true
|
99
|
+
# @return [ true | false ] If the document should be replaced.
|
100
100
|
def replace?
|
101
101
|
!existing && !destroyable? && !attributes.blank?
|
102
102
|
end
|
@@ -106,7 +106,7 @@ module Mongoid
|
|
106
106
|
# @example Should the document be updated?
|
107
107
|
# one.update?
|
108
108
|
#
|
109
|
-
# @return [ true
|
109
|
+
# @return [ true | false ] If the object should have its attributes updated.
|
110
110
|
def update?
|
111
111
|
existing && !destroyable? && acceptable_id?
|
112
112
|
end
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
# @example Clear the relation.
|
13
13
|
# relation.clear
|
14
14
|
#
|
15
|
-
# @return [ true
|
15
|
+
# @return [ true | false ] If the delete succeeded.
|
16
16
|
def clear
|
17
17
|
_target.delete
|
18
18
|
end
|
@@ -34,7 +34,7 @@ module Mongoid
|
|
34
34
|
#
|
35
35
|
# @param [ Symbol ] name The method name.
|
36
36
|
#
|
37
|
-
# @return [ true
|
37
|
+
# @return [ true | false ] If the proxy responds to the method.
|
38
38
|
def respond_to?(name, include_private = false)
|
39
39
|
_target.respond_to?(name, include_private) || super
|
40
40
|
end
|