mongoid 7.4.3 → 8.0.7
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/README.md +3 -3
- data/Rakefile +25 -0
- 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 +33 -10
- 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 +65 -41
- 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 +28 -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 +70 -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 +26 -16
- 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.rb +7 -0
- data/lib/mongoid/attributes/dynamic.rb +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +37 -6
- 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 +43 -10
- 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/options.rb +3 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +62 -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 +260 -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 +3 -14
- 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 +1 -15
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -9
- 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 +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- 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 +93 -8
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +16 -35
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +135 -34
- data/lib/mongoid/equality.rb +8 -8
- 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 +37 -8
- 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 +55 -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 +233 -40
- 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 +185 -16
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +33 -13
- 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 +1 -1
- 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 +10 -8
- data/lib/mongoid/scopable.rb +26 -22
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/shardable.rb +35 -11
- 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 +42 -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 +5 -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 +4 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -12
- data/spec/integration/associations/belongs_to_spec.rb +18 -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 +246 -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/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 +235 -40
- data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -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 +202 -201
- 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 +160 -119
- 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/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 +551 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- 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_spec.rb +78 -18
- 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 +1253 -247
- 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/string_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- 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 +15 -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 +89 -4
- data/spec/mongoid/criteria/queryable/storable_spec.rb +72 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- 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/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 +33 -3
- 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 +364 -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 +807 -27
- 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 +59 -2
- data/spec/mongoid/scopable_spec.rb +54 -16
- data/spec/mongoid/shardable_models.rb +14 -0
- data/spec/mongoid/shardable_spec.rb +157 -51
- 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/mongoid_spec.rb +1 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/docker_runner.rb +7 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +36 -40
- data/spec/shared/shlib/server.sh +32 -8
- data/spec/shared/shlib/set_env.sh +4 -4
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +46 -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/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/purse.rb +9 -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.tar.gz.sig +4 -1
- metadata +682 -635
- 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,40 @@ 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
|
155
|
+
end
|
156
|
+
|
157
|
+
# Mongoid::Extensions::Array defines Array#delete_one, so we need
|
158
|
+
# to make sure that method behaves reasonably on proxies, too.
|
159
|
+
alias delete_one delete
|
160
|
+
|
161
|
+
# Removes a single document from the collection *in memory only*.
|
162
|
+
# It will *not* persist the change.
|
163
|
+
#
|
164
|
+
# @param [ Document ] document The document to delete.
|
165
|
+
#
|
166
|
+
# @api private
|
167
|
+
def _remove(document)
|
168
|
+
_target.delete_one(document)
|
169
|
+
_unscoped.delete_one(document)
|
170
|
+
update_attributes_hash
|
149
171
|
reindex
|
150
|
-
execute_callback :after_remove, document
|
151
|
-
doc
|
152
172
|
end
|
153
173
|
|
154
174
|
# Delete all the documents in the association without running callbacks.
|
@@ -173,7 +193,7 @@ module Mongoid
|
|
173
193
|
# doc.state == "GA"
|
174
194
|
# end
|
175
195
|
#
|
176
|
-
# @return [ Many
|
196
|
+
# @return [ Many | Enumerator ] The association or an enumerator if no
|
177
197
|
# block was provided.
|
178
198
|
def delete_if
|
179
199
|
if block_given?
|
@@ -207,9 +227,9 @@ module Mongoid
|
|
207
227
|
# @example Are there persisted documents?
|
208
228
|
# person.posts.exists?
|
209
229
|
#
|
210
|
-
# @return [ true
|
230
|
+
# @return [ true | false ] True is persisted documents exist, false if not.
|
211
231
|
def exists?
|
212
|
-
|
232
|
+
_target.any? { |doc| doc.persisted? }
|
213
233
|
end
|
214
234
|
|
215
235
|
# Finds a document in this association through several different
|
@@ -256,6 +276,7 @@ module Mongoid
|
|
256
276
|
integrate(doc)
|
257
277
|
doc._index = index
|
258
278
|
end
|
279
|
+
update_attributes_hash
|
259
280
|
@_unscoped = _target.dup
|
260
281
|
@_target = scope(_target)
|
261
282
|
end
|
@@ -283,7 +304,7 @@ module Mongoid
|
|
283
304
|
# @param [ Integer ] count The number of documents to pop, or 1 if not
|
284
305
|
# provided.
|
285
306
|
#
|
286
|
-
# @return [ Document
|
307
|
+
# @return [ Document | Array<Document> ] The popped document(s).
|
287
308
|
def pop(count = nil)
|
288
309
|
if count
|
289
310
|
if docs = _target[_target.size - count, _target.size]
|
@@ -291,6 +312,8 @@ module Mongoid
|
|
291
312
|
end
|
292
313
|
else
|
293
314
|
delete(_target[-1])
|
315
|
+
end.tap do
|
316
|
+
update_attributes_hash
|
294
317
|
end
|
295
318
|
end
|
296
319
|
|
@@ -306,7 +329,7 @@ module Mongoid
|
|
306
329
|
# @param [ Integer ] count The number of documents to shift, or 1 if not
|
307
330
|
# provided.
|
308
331
|
#
|
309
|
-
# @return [ Document
|
332
|
+
# @return [ Document | Array<Document> ] The shifted document(s).
|
310
333
|
def shift(count = nil)
|
311
334
|
if count
|
312
335
|
if _target.size > 0 && docs = _target[0, count]
|
@@ -314,6 +337,8 @@ module Mongoid
|
|
314
337
|
end
|
315
338
|
else
|
316
339
|
delete(_target[0])
|
340
|
+
end.tap do
|
341
|
+
update_attributes_hash
|
317
342
|
end
|
318
343
|
end
|
319
344
|
|
@@ -328,6 +353,7 @@ module Mongoid
|
|
328
353
|
# @return [ Many ] The proxied association.
|
329
354
|
def substitute(docs)
|
330
355
|
batch_replace(docs)
|
356
|
+
update_attributes_hash
|
331
357
|
self
|
332
358
|
end
|
333
359
|
|
@@ -365,6 +391,7 @@ module Mongoid
|
|
365
391
|
end
|
366
392
|
_unscoped.push(document)
|
367
393
|
integrate(document)
|
394
|
+
update_attributes_hash
|
368
395
|
document._index = _unscoped.size - 1
|
369
396
|
execute_callback :after_add, document
|
370
397
|
end
|
@@ -387,20 +414,6 @@ module Mongoid
|
|
387
414
|
_association.criteria(_base, _target)
|
388
415
|
end
|
389
416
|
|
390
|
-
# Deletes one document from the target and unscoped.
|
391
|
-
#
|
392
|
-
# @api private
|
393
|
-
#
|
394
|
-
# @example Delete one document.
|
395
|
-
# relation.delete_one(doc)
|
396
|
-
#
|
397
|
-
# @param [ Document ] document The document to delete.
|
398
|
-
def delete_one(document)
|
399
|
-
_target.delete_one(document)
|
400
|
-
_unscoped.delete_one(document)
|
401
|
-
reindex
|
402
|
-
end
|
403
|
-
|
404
417
|
# Integrate the document into the association. will set its metadata and
|
405
418
|
# attempt to bind the inverse.
|
406
419
|
#
|
@@ -418,7 +431,7 @@ module Mongoid
|
|
418
431
|
#
|
419
432
|
# If the method exists on the array, use the default proxy behavior.
|
420
433
|
#
|
421
|
-
# @param [ Symbol
|
434
|
+
# @param [ Symbol | String ] name The name of the method.
|
422
435
|
# @param [ Array ] args The method args
|
423
436
|
# @param [ Proc ] block Optional block to pass.
|
424
437
|
#
|
@@ -435,7 +448,7 @@ module Mongoid
|
|
435
448
|
# @example Can we persist the association?
|
436
449
|
# relation.persistable?
|
437
450
|
#
|
438
|
-
# @return [ true
|
451
|
+
# @return [ true | false ] If the association is persistable.
|
439
452
|
def persistable?
|
440
453
|
_base.persisted? && !_binding?
|
441
454
|
end
|
@@ -479,13 +492,14 @@ module Mongoid
|
|
479
492
|
# relation.remove_all({ :num => 1 }, true)
|
480
493
|
#
|
481
494
|
# @param [ Hash ] conditions Conditions to filter by.
|
482
|
-
# @param [ true
|
495
|
+
# @param [ true | false ] method :delete or :destroy.
|
483
496
|
#
|
484
497
|
# @return [ Integer ] The number of documents removed.
|
485
498
|
def remove_all(conditions = {}, method = :delete)
|
486
499
|
criteria = where(conditions || {})
|
487
500
|
removed = criteria.size
|
488
501
|
batch_remove(criteria, method)
|
502
|
+
update_attributes_hash
|
489
503
|
removed
|
490
504
|
end
|
491
505
|
|
@@ -511,12 +525,22 @@ module Mongoid
|
|
511
525
|
@_unscoped = docs
|
512
526
|
end
|
513
527
|
|
528
|
+
# Returns a list of attributes hashes for each document.
|
529
|
+
#
|
530
|
+
# @return [ Array<Hash> ] The list of attributes hashes
|
514
531
|
def as_attributes
|
515
|
-
|
516
|
-
|
517
|
-
|
532
|
+
_unscoped.map { |doc| doc.send(:as_attributes) }
|
533
|
+
end
|
534
|
+
|
535
|
+
# Update the _base's attributes hash with the _target's attributes
|
536
|
+
#
|
537
|
+
# @api private
|
538
|
+
def update_attributes_hash
|
539
|
+
if !_target.empty?
|
540
|
+
_base.attributes.merge!(_association.store_as => _target.map(&:attributes))
|
541
|
+
else
|
542
|
+
_base.attributes.delete(_association.store_as)
|
518
543
|
end
|
519
|
-
attributes
|
520
544
|
end
|
521
545
|
|
522
546
|
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,12 +12,38 @@ 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
|
+
|
38
|
+
# @return [ Set<String> ] The set of associations that are configured
|
39
|
+
# with :store_as parameter.
|
40
|
+
class_attribute :stored_as_associations
|
41
|
+
|
17
42
|
self.embedded = false
|
18
43
|
self.embedded_relations = BSON::Document.new
|
19
44
|
self.relations = BSON::Document.new
|
20
45
|
self.aliased_associations = {}
|
46
|
+
self.stored_as_associations = Set.new
|
21
47
|
end
|
22
48
|
|
23
49
|
# This is convenience for libraries still on the old API.
|
@@ -196,8 +222,9 @@ module Mongoid
|
|
196
222
|
Association::MACRO_MAPPING[macro_name].new(self, name, options, &block).tap do |assoc|
|
197
223
|
assoc.setup!
|
198
224
|
self.relations = self.relations.merge(name => assoc)
|
199
|
-
if assoc.respond_to?(:store_as) && assoc.store_as != name
|
225
|
+
if assoc.embedded? && assoc.respond_to?(:store_as) && assoc.store_as != name
|
200
226
|
self.aliased_associations[assoc.store_as] = name
|
227
|
+
self.stored_as_associations << assoc.store_as
|
201
228
|
end
|
202
229
|
end
|
203
230
|
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
|