mongoid 7.4.0 → 8.0.3
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/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
|
@@ -25,7 +25,7 @@ module Mongoid
|
|
|
25
25
|
# @example Concat with other documents.
|
|
26
26
|
# person.posts.concat([ post_one, post_two ])
|
|
27
27
|
#
|
|
28
|
-
# @param [ Document
|
|
28
|
+
# @param [ Document | Array<Document> ] args Any number of documents.
|
|
29
29
|
#
|
|
30
30
|
# @return [ Array<Document> ] The loaded docs.
|
|
31
31
|
def <<(*args)
|
|
@@ -71,10 +71,11 @@ module Mongoid
|
|
|
71
71
|
#
|
|
72
72
|
# @return [ Document ] The new document.
|
|
73
73
|
def build(attributes = {}, type = nil)
|
|
74
|
-
doc = Factory.
|
|
74
|
+
doc = Factory.execute_build(type || klass, attributes, execute_callbacks: false)
|
|
75
75
|
append(doc)
|
|
76
76
|
doc.apply_post_processed_defaults
|
|
77
77
|
yield(doc) if block_given?
|
|
78
|
+
doc.run_pending_callbacks
|
|
78
79
|
doc.run_callbacks(:build) { doc }
|
|
79
80
|
doc
|
|
80
81
|
end
|
|
@@ -92,13 +93,15 @@ module Mongoid
|
|
|
92
93
|
#
|
|
93
94
|
# @return [ Document ] The matching document.
|
|
94
95
|
def delete(document)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
execute_callbacks_around(:remove, document) do
|
|
97
|
+
_target.delete(document) do |doc|
|
|
98
|
+
if doc
|
|
99
|
+
unbind_one(doc)
|
|
100
|
+
cascade!(doc) if !_assigning?
|
|
101
|
+
end
|
|
102
|
+
end.tap do
|
|
103
|
+
reset_unloaded
|
|
100
104
|
end
|
|
101
|
-
execute_callback :after_remove, doc
|
|
102
105
|
end
|
|
103
106
|
end
|
|
104
107
|
|
|
@@ -165,7 +168,7 @@ module Mongoid
|
|
|
165
168
|
# @example Are there persisted documents?
|
|
166
169
|
# person.posts.exists?
|
|
167
170
|
#
|
|
168
|
-
# @return [ true
|
|
171
|
+
# @return [ true | false ] True is persisted documents exist, false if not.
|
|
169
172
|
def exists?
|
|
170
173
|
criteria.exists?
|
|
171
174
|
end
|
|
@@ -181,6 +184,9 @@ module Mongoid
|
|
|
181
184
|
# of those found by the current Criteria object for which the block
|
|
182
185
|
# returns a truthy value.
|
|
183
186
|
#
|
|
187
|
+
# @note Each argument can be an individual id, an array of ids or
|
|
188
|
+
# a nested array. Each array will be flattened.
|
|
189
|
+
#
|
|
184
190
|
# @example Find by an id.
|
|
185
191
|
# person.posts.find(BSON::ObjectId.new)
|
|
186
192
|
#
|
|
@@ -193,7 +199,7 @@ module Mongoid
|
|
|
193
199
|
# @note This will keep matching documents in memory for iteration
|
|
194
200
|
# later.
|
|
195
201
|
#
|
|
196
|
-
# @param [
|
|
202
|
+
# @param [ Object | Array<Object> ] *args The ids.
|
|
197
203
|
# @param [ Proc ] block Optional block to pass.
|
|
198
204
|
#
|
|
199
205
|
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
|
@@ -325,7 +331,7 @@ module Mongoid
|
|
|
325
331
|
# relation.with_add_callbacks(document, false)
|
|
326
332
|
#
|
|
327
333
|
# @param [ Document ] document The document to append to the target.
|
|
328
|
-
# @param [ true
|
|
334
|
+
# @param [ true | false ] already_related Whether the document is already related
|
|
329
335
|
# to the target.
|
|
330
336
|
def with_add_callbacks(document, already_related)
|
|
331
337
|
execute_callback :before_add, document unless already_related
|
|
@@ -340,7 +346,7 @@ module Mongoid
|
|
|
340
346
|
#
|
|
341
347
|
# @param [ Document ] document The document to possibly append to the target.
|
|
342
348
|
#
|
|
343
|
-
# @return [ true
|
|
349
|
+
# @return [ true | false ] Whether the document is already related to the base and the
|
|
344
350
|
# association is persisted.
|
|
345
351
|
def already_related?(document)
|
|
346
352
|
document.persisted? &&
|
|
@@ -388,7 +394,7 @@ module Mongoid
|
|
|
388
394
|
#
|
|
389
395
|
# @param [ Document ] document The document to cascade on.
|
|
390
396
|
#
|
|
391
|
-
# @return [ true
|
|
397
|
+
# @return [ true | false ] If the association is destructive.
|
|
392
398
|
def cascade!(document)
|
|
393
399
|
if persistable?
|
|
394
400
|
case _association.dependent
|
|
@@ -407,11 +413,11 @@ module Mongoid
|
|
|
407
413
|
#
|
|
408
414
|
# If the method exists on the array, use the default proxy behavior.
|
|
409
415
|
#
|
|
410
|
-
# @param [ Symbol
|
|
416
|
+
# @param [ Symbol | String ] name The name of the method.
|
|
411
417
|
# @param [ Array ] args The method args
|
|
412
418
|
# @param [ Proc ] block Optional block to pass.
|
|
413
419
|
#
|
|
414
|
-
# @return [ Criteria
|
|
420
|
+
# @return [ Criteria | Object ] A Criteria or return value from the target.
|
|
415
421
|
ruby2_keywords def method_missing(name, *args, &block)
|
|
416
422
|
if _target.respond_to?(name)
|
|
417
423
|
_target.send(name, *args, &block)
|
|
@@ -447,7 +453,7 @@ module Mongoid
|
|
|
447
453
|
# @example Can we persist the association?
|
|
448
454
|
# relation.persistable?
|
|
449
455
|
#
|
|
450
|
-
# @return [ true
|
|
456
|
+
# @return [ true | false ] If the association is persistable.
|
|
451
457
|
def persistable?
|
|
452
458
|
!_binding? && (_creating? || _base.persisted? && !_building?)
|
|
453
459
|
end
|
|
@@ -469,8 +475,8 @@ module Mongoid
|
|
|
469
475
|
selector = conditions || {}
|
|
470
476
|
removed = klass.send(method, selector.merge!(criteria.selector))
|
|
471
477
|
_target.delete_if do |doc|
|
|
472
|
-
|
|
473
|
-
unbind_one(doc)
|
|
478
|
+
doc._matches?(selector).tap do |b|
|
|
479
|
+
unbind_one(doc) if b
|
|
474
480
|
end
|
|
475
481
|
end
|
|
476
482
|
removed
|
|
@@ -118,7 +118,7 @@ module Mongoid
|
|
|
118
118
|
#
|
|
119
119
|
# @note Only relevant for polymorphic associations.
|
|
120
120
|
#
|
|
121
|
-
# @return [ String
|
|
121
|
+
# @return [ String | nil ] The type field.
|
|
122
122
|
def type
|
|
123
123
|
@type ||= "#{as}_type" if polymorphic?
|
|
124
124
|
end
|
|
@@ -140,7 +140,7 @@ module Mongoid
|
|
|
140
140
|
|
|
141
141
|
# Is this association polymorphic?
|
|
142
142
|
#
|
|
143
|
-
# @return [ true
|
|
143
|
+
# @return [ true | false ] Whether this association is polymorphic.
|
|
144
144
|
def polymorphic?
|
|
145
145
|
@polymorphic ||= !!as
|
|
146
146
|
end
|
|
@@ -150,7 +150,7 @@ module Mongoid
|
|
|
150
150
|
#
|
|
151
151
|
# @param [ Document ] doc The document to be bound.
|
|
152
152
|
#
|
|
153
|
-
# @return [ true
|
|
153
|
+
# @return [ true | false ] Whether the document can be bound.
|
|
154
154
|
def bindable?(doc)
|
|
155
155
|
forced_nil_inverse? || (!!inverse && doc.fields.keys.include?(foreign_key))
|
|
156
156
|
end
|
|
@@ -60,7 +60,7 @@ module Mongoid
|
|
|
60
60
|
# @example Is the id acceptable?
|
|
61
61
|
# one.acceptable_id?
|
|
62
62
|
#
|
|
63
|
-
# @return [ true
|
|
63
|
+
# @return [ true | false ] If the id part of the logic will allow an update.
|
|
64
64
|
def acceptable_id?
|
|
65
65
|
id = convert_id(existing.class, attributes[:_id])
|
|
66
66
|
existing._id == id || id.nil? || (existing._id != id && update_only?)
|
|
@@ -71,7 +71,7 @@ module Mongoid
|
|
|
71
71
|
# @example Can the existing object be deleted?
|
|
72
72
|
# one.delete?
|
|
73
73
|
#
|
|
74
|
-
# @return [ true
|
|
74
|
+
# @return [ true | false ] If the association should be deleted.
|
|
75
75
|
def delete?
|
|
76
76
|
destroyable? && !attributes[:_id].nil?
|
|
77
77
|
end
|
|
@@ -81,7 +81,7 @@ module Mongoid
|
|
|
81
81
|
# @example Is the object destroyable?
|
|
82
82
|
# one.destroyable?({ :_destroy => "1" })
|
|
83
83
|
#
|
|
84
|
-
# @return [ true
|
|
84
|
+
# @return [ true | false ] If the association can potentially be
|
|
85
85
|
# destroyed.
|
|
86
86
|
def destroyable?
|
|
87
87
|
[ 1, "1", true, "true" ].include?(destroy) && allow_destroy?
|
|
@@ -92,7 +92,7 @@ module Mongoid
|
|
|
92
92
|
# @example Is the document to be replaced?
|
|
93
93
|
# one.replace?
|
|
94
94
|
#
|
|
95
|
-
# @return [ true
|
|
95
|
+
# @return [ true | false ] If the document should be replaced.
|
|
96
96
|
def replace?
|
|
97
97
|
!existing && !destroyable? && !attributes.blank?
|
|
98
98
|
end
|
|
@@ -102,7 +102,7 @@ module Mongoid
|
|
|
102
102
|
# @example Should the document be updated?
|
|
103
103
|
# one.update?
|
|
104
104
|
#
|
|
105
|
-
# @return [ true
|
|
105
|
+
# @return [ true | false ] If the object should have its attributes updated.
|
|
106
106
|
def update?
|
|
107
107
|
existing && !destroyable? && acceptable_id?
|
|
108
108
|
end
|
|
@@ -49,17 +49,14 @@ module Mongoid
|
|
|
49
49
|
#
|
|
50
50
|
# @return [ One ] The association.
|
|
51
51
|
def substitute(replacement)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
send(_association.dependent)
|
|
61
|
-
else
|
|
62
|
-
save if persisted?
|
|
52
|
+
if self != replacement
|
|
53
|
+
unbind_one
|
|
54
|
+
if persistable?
|
|
55
|
+
if _association.destructive?
|
|
56
|
+
send(_association.dependent)
|
|
57
|
+
else
|
|
58
|
+
save if persisted?
|
|
59
|
+
end
|
|
63
60
|
end
|
|
64
61
|
end
|
|
65
62
|
HasOne::Proxy.new(_base, replacement, _association) if replacement
|
|
@@ -82,7 +79,7 @@ module Mongoid
|
|
|
82
79
|
# @example Can we persist the association?
|
|
83
80
|
# relation.persistable?
|
|
84
81
|
#
|
|
85
|
-
# @return [ true
|
|
82
|
+
# @return [ true | false ] If the association is persistable.
|
|
86
83
|
def persistable?
|
|
87
84
|
_base.persisted? && !_binding? && !_building?
|
|
88
85
|
end
|
|
@@ -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 ||= !!as
|
|
98
98
|
end
|
|
@@ -101,7 +101,7 @@ module Mongoid
|
|
|
101
101
|
#
|
|
102
102
|
# @note Only relevant for polymorphic associations.
|
|
103
103
|
#
|
|
104
|
-
# @return [ String
|
|
104
|
+
# @return [ String | nil ] The type field.
|
|
105
105
|
def type
|
|
106
106
|
@type ||= "#{as}_type" if polymorphic?
|
|
107
107
|
end
|
|
@@ -111,7 +111,7 @@ module Mongoid
|
|
|
111
111
|
#
|
|
112
112
|
# @param [ Document ] doc The document to be bound.
|
|
113
113
|
#
|
|
114
|
-
# @return [ true
|
|
114
|
+
# @return [ true | false ] Whether the document can be bound.
|
|
115
115
|
def bindable?(doc)
|
|
116
116
|
forced_nil_inverse? || (!!inverse && doc.fields.keys.include?(foreign_key))
|
|
117
117
|
end
|
|
@@ -16,7 +16,7 @@ module Mongoid
|
|
|
16
16
|
#
|
|
17
17
|
# @param [ Association ] association The association metadata.
|
|
18
18
|
#
|
|
19
|
-
# @return [ true
|
|
19
|
+
# @return [ true | false ] If we can sync.
|
|
20
20
|
def _syncable?(association)
|
|
21
21
|
!_synced?(association.foreign_key) && send(association.foreign_key_check)
|
|
22
22
|
end
|
|
@@ -38,7 +38,7 @@ module Mongoid
|
|
|
38
38
|
#
|
|
39
39
|
# @param [ String ] foreign_key The foreign key.
|
|
40
40
|
#
|
|
41
|
-
# @return [ true
|
|
41
|
+
# @return [ true | false ] If we can sync.
|
|
42
42
|
def _synced?(foreign_key)
|
|
43
43
|
!!_synced[foreign_key]
|
|
44
44
|
end
|
|
@@ -67,8 +67,8 @@ module Mongoid
|
|
|
67
67
|
#
|
|
68
68
|
# @return [ Object ] The updated values.
|
|
69
69
|
def update_inverse_keys(association)
|
|
70
|
-
if
|
|
71
|
-
old, new =
|
|
70
|
+
if previous_changes.has_key?(association.foreign_key)
|
|
71
|
+
old, new = previous_changes[association.foreign_key]
|
|
72
72
|
adds, subs = new - (old || []), (old || []) - new
|
|
73
73
|
|
|
74
74
|
# If we are autosaving we don't want a duplicate to get added - the
|
|
@@ -13,7 +13,7 @@ module Mongoid
|
|
|
13
13
|
# @example Find association metadata by name.
|
|
14
14
|
# person.reflect_on_association(:addresses)
|
|
15
15
|
#
|
|
16
|
-
# @param [ String
|
|
16
|
+
# @param [ String | Symbol ] name The name of the association to find.
|
|
17
17
|
#
|
|
18
18
|
# @return [ Association ] The matching association metadata.
|
|
19
19
|
def reflect_on_association(name)
|
|
@@ -39,7 +39,7 @@ module Mongoid
|
|
|
39
39
|
# @example Find association metadata by name.
|
|
40
40
|
# Person.reflect_on_association(:addresses)
|
|
41
41
|
#
|
|
42
|
-
# @param [ String
|
|
42
|
+
# @param [ String | Symbol ] name The name of the association to find.
|
|
43
43
|
#
|
|
44
44
|
# @return [ Association ] The matching association metadata.
|
|
45
45
|
def reflect_on_association(name)
|
|
@@ -69,7 +69,7 @@ module Mongoid
|
|
|
69
69
|
#
|
|
70
70
|
# @param [ Symbol ] callback_type The type of callback type.
|
|
71
71
|
#
|
|
72
|
-
# @return [ Array<Proc
|
|
72
|
+
# @return [ Array<Proc | Symbol> ] A list of the callbacks, either method
|
|
73
73
|
# names or Procs.
|
|
74
74
|
def get_callbacks(callback_type)
|
|
75
75
|
Array(options[callback_type])
|
|
@@ -88,7 +88,7 @@ module Mongoid
|
|
|
88
88
|
#
|
|
89
89
|
# @param [ Document ] doc The document to be bound.
|
|
90
90
|
#
|
|
91
|
-
# @return [ true
|
|
91
|
+
# @return [ true | false ] Whether the document can be bound.
|
|
92
92
|
def bindable?(doc); false; end
|
|
93
93
|
|
|
94
94
|
# Get the inverse names.
|
|
@@ -189,7 +189,7 @@ module Mongoid
|
|
|
189
189
|
# The foreign key field if this association stores a foreign key.
|
|
190
190
|
# Otherwise, the primary key.
|
|
191
191
|
#
|
|
192
|
-
# @return [ Symbol
|
|
192
|
+
# @return [ Symbol | String ] The primary key.
|
|
193
193
|
def key
|
|
194
194
|
stores_foreign_key? ? foreign_key : primary_key
|
|
195
195
|
end
|
|
@@ -242,13 +242,13 @@ module Mongoid
|
|
|
242
242
|
#
|
|
243
243
|
# @return [ String ] The foreign key check.
|
|
244
244
|
def foreign_key_check
|
|
245
|
-
@foreign_key_check ||= "#{foreign_key}
|
|
245
|
+
@foreign_key_check ||= "#{foreign_key}_previously_changed?" if (stores_foreign_key? && foreign_key)
|
|
246
246
|
end
|
|
247
247
|
|
|
248
248
|
# Create an association proxy object using the owner and target.
|
|
249
249
|
#
|
|
250
250
|
# @param [ Document ] owner The document this association hangs off of.
|
|
251
|
-
# @param [ Document
|
|
251
|
+
# @param [ Document | Array<Document> ] target The target (parent) of the
|
|
252
252
|
# association.
|
|
253
253
|
#
|
|
254
254
|
# @return [ Proxy ]
|
|
@@ -258,7 +258,7 @@ module Mongoid
|
|
|
258
258
|
|
|
259
259
|
# Whether the dependent method is destructive.
|
|
260
260
|
#
|
|
261
|
-
# @return [ true
|
|
261
|
+
# @return [ true | false ] If the dependent method is destructive.
|
|
262
262
|
def destructive?
|
|
263
263
|
@destructive ||= !!(dependent && (dependent == :delete_all || dependent == :destroy))
|
|
264
264
|
end
|
|
@@ -289,7 +289,7 @@ module Mongoid
|
|
|
289
289
|
|
|
290
290
|
# Whether the associated object(s) should be validated.
|
|
291
291
|
#
|
|
292
|
-
# @return [ true
|
|
292
|
+
# @return [ true | false ] If the associated object(s)
|
|
293
293
|
# should be validated.
|
|
294
294
|
def validate?
|
|
295
295
|
@validate ||= if @options[:validate].nil?
|
|
@@ -299,6 +299,35 @@ module Mongoid
|
|
|
299
299
|
end
|
|
300
300
|
end
|
|
301
301
|
|
|
302
|
+
# @return [ Array<String> ] The associations above this one in the inclusion tree.
|
|
303
|
+
attr_accessor :parent_inclusions
|
|
304
|
+
|
|
305
|
+
def parent_inclusions
|
|
306
|
+
@parent_inclusions ||= []
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
# Is this association an embeds_many or has_many association?
|
|
310
|
+
#
|
|
311
|
+
# @return [ true | false ] true if it is a *_many association, false if not.
|
|
312
|
+
def many?
|
|
313
|
+
[Referenced::HasMany, Embedded::EmbedsMany].any? { |a| self.is_a?(a) }
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
# Is this association an embeds_one or has_one association?
|
|
317
|
+
#
|
|
318
|
+
# @return [ true | false ] true if it is a *_one association, false if not.
|
|
319
|
+
def one?
|
|
320
|
+
[Referenced::HasOne, Embedded::EmbedsOne].any? { |a| self.is_a?(a) }
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
# Is this association an embedded_in or belongs_to association?
|
|
324
|
+
#
|
|
325
|
+
# @return [ true | false ] true if it is an embedded_in or belongs_to
|
|
326
|
+
# association, false if not.
|
|
327
|
+
def in_to?
|
|
328
|
+
[Referenced::BelongsTo, Embedded::EmbeddedIn].any? { |a| self.is_a?(a) }
|
|
329
|
+
end
|
|
330
|
+
|
|
302
331
|
private
|
|
303
332
|
|
|
304
333
|
# Gets the model classes with inverse associations of this model. This is used to determine
|
|
@@ -404,10 +433,15 @@ module Mongoid
|
|
|
404
433
|
def namespace_hierarchy(mod)
|
|
405
434
|
parent = Object
|
|
406
435
|
hier = [parent]
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
436
|
+
|
|
437
|
+
# name is not present on anonymous modules
|
|
438
|
+
if mod.name
|
|
439
|
+
mod.name.split('::').each do |part|
|
|
440
|
+
parent = parent.const_get(part)
|
|
441
|
+
hier << parent
|
|
442
|
+
end
|
|
410
443
|
end
|
|
444
|
+
|
|
411
445
|
hier.reverse
|
|
412
446
|
end
|
|
413
447
|
|
data/lib/mongoid/association.rb
CHANGED
|
@@ -56,7 +56,7 @@ module Mongoid
|
|
|
56
56
|
# @example Is the document embedded?
|
|
57
57
|
# address.embedded?
|
|
58
58
|
#
|
|
59
|
-
# @return [ true
|
|
59
|
+
# @return [ true | false ] True if the document has a parent document.
|
|
60
60
|
def embedded?
|
|
61
61
|
@embedded ||= (cyclic ? _parent.present? : self.class.embedded?)
|
|
62
62
|
end
|
|
@@ -66,7 +66,7 @@ module Mongoid
|
|
|
66
66
|
# @example Is the document in an embeds many?
|
|
67
67
|
# address.embedded_many?
|
|
68
68
|
#
|
|
69
|
-
# @return [ true
|
|
69
|
+
# @return [ true | false ] True if in an embeds many.
|
|
70
70
|
def embedded_many?
|
|
71
71
|
_association && _association.is_a?(Association::Embedded::EmbedsMany)
|
|
72
72
|
end
|
|
@@ -76,7 +76,7 @@ module Mongoid
|
|
|
76
76
|
# @example Is the document in an embeds one?
|
|
77
77
|
# address.embedded_one?
|
|
78
78
|
#
|
|
79
|
-
# @return [ true
|
|
79
|
+
# @return [ true | false ] True if in an embeds one.
|
|
80
80
|
def embedded_one?
|
|
81
81
|
_association && _association.is_a?(Association::Embedded::EmbedsOne)
|
|
82
82
|
end
|
|
@@ -100,7 +100,7 @@ module Mongoid
|
|
|
100
100
|
# @example Is the document in a references many?
|
|
101
101
|
# post.referenced_many?
|
|
102
102
|
#
|
|
103
|
-
# @return [ true
|
|
103
|
+
# @return [ true | false ] True if in a references many.
|
|
104
104
|
def referenced_many?
|
|
105
105
|
_association && _association.is_a?(Association::Referenced::HasMany)
|
|
106
106
|
end
|
|
@@ -110,7 +110,7 @@ module Mongoid
|
|
|
110
110
|
# @example Is the document in a references one?
|
|
111
111
|
# address.referenced_one?
|
|
112
112
|
#
|
|
113
|
-
# @return [ true
|
|
113
|
+
# @return [ true | false ] True if in a references one.
|
|
114
114
|
def referenced_one?
|
|
115
115
|
_association && _association.is_a?(Association::Referenced::HasOne)
|
|
116
116
|
end
|
|
@@ -153,7 +153,7 @@ module Mongoid
|
|
|
153
153
|
#
|
|
154
154
|
# @param [ String ] field The field.
|
|
155
155
|
#
|
|
156
|
-
# @return [ true
|
|
156
|
+
# @return [ true | false ] If this field is a conflict.
|
|
157
157
|
def set_conflict?(field)
|
|
158
158
|
name = field.split(".", 2)[0]
|
|
159
159
|
pull_fields.has_key?(name) || push_fields.has_key?(name)
|
|
@@ -166,7 +166,7 @@ module Mongoid
|
|
|
166
166
|
#
|
|
167
167
|
# @param [ String ] field The field.
|
|
168
168
|
#
|
|
169
|
-
# @return [ true
|
|
169
|
+
# @return [ true | false ] If this field is a conflict.
|
|
170
170
|
def push_conflict?(field)
|
|
171
171
|
name = field.split(".", 2)[0]
|
|
172
172
|
set_fields.has_key?(name) || pull_fields.has_key?(name) ||
|
|
@@ -34,6 +34,25 @@ module Mongoid
|
|
|
34
34
|
locator = document.new_record? ? "" : ".#{document._index}"
|
|
35
35
|
"#{pos}#{"." unless pos.blank?}#{document._association.store_as}#{locator}"
|
|
36
36
|
end
|
|
37
|
+
|
|
38
|
+
class << self
|
|
39
|
+
|
|
40
|
+
# Get the position of where the document would go for the given
|
|
41
|
+
# association. The use case for this function is when trying to
|
|
42
|
+
# persist an empty list for an embedded association. All of the
|
|
43
|
+
# existing functions for getting the position to store a document
|
|
44
|
+
# require passing in a document to store, which we don't have when
|
|
45
|
+
# trying to store the empty list.
|
|
46
|
+
#
|
|
47
|
+
# @param [ Document ] parent The parent document to store in.
|
|
48
|
+
# @param [ Association ] association The association.
|
|
49
|
+
#
|
|
50
|
+
# @return [ String ] The position string.
|
|
51
|
+
def position_without_document(parent, association)
|
|
52
|
+
pos = parent.atomic_position
|
|
53
|
+
"#{pos}#{"." unless pos.blank?}#{association.store_as}"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
37
56
|
end
|
|
38
57
|
end
|
|
39
58
|
end
|
|
@@ -13,9 +13,9 @@ module Mongoid
|
|
|
13
13
|
# person.respond_to?(:title)
|
|
14
14
|
#
|
|
15
15
|
# @param [ Array ] name The name of the method.
|
|
16
|
-
# @param [ true
|
|
16
|
+
# @param [ true | false ] include_private
|
|
17
17
|
#
|
|
18
|
-
# @return [ true
|
|
18
|
+
# @return [ true | false ] True if it does, false if not.
|
|
19
19
|
def respond_to?(name, include_private = false)
|
|
20
20
|
super || (
|
|
21
21
|
attributes &&
|
|
@@ -114,7 +114,7 @@ module Mongoid
|
|
|
114
114
|
# @example Call through method_missing.
|
|
115
115
|
# document.method_missing(:test)
|
|
116
116
|
#
|
|
117
|
-
# @param [ String
|
|
117
|
+
# @param [ String | Symbol ] name The name of the method.
|
|
118
118
|
# @param [ Array ] args The arguments to the method.
|
|
119
119
|
#
|
|
120
120
|
# @return [ Object ] The result of the method call.
|
|
@@ -33,15 +33,15 @@ module Mongoid
|
|
|
33
33
|
# accepts_nested_attributes_for :addresses, :game, :posts
|
|
34
34
|
# end
|
|
35
35
|
#
|
|
36
|
-
# @param [ Array<Symbol
|
|
36
|
+
# @param [ Array<Symbol> | Hash ] args A list of association names, followed
|
|
37
37
|
# by a hash of options.
|
|
38
38
|
#
|
|
39
|
-
# @option *args [ true
|
|
40
|
-
# @option *args [ Proc
|
|
39
|
+
# @option *args [ true | false ] :allow_destroy Can deletion occur?
|
|
40
|
+
# @option *args [ Proc | Symbol ] :reject_if Block or symbol pointing
|
|
41
41
|
# to a class method to reject documents with.
|
|
42
42
|
# @option *args [ Integer ] :limit The max number to create.
|
|
43
|
-
# @option *args [ true
|
|
44
|
-
# @
|
|
43
|
+
# @option *args [ true | false ] :update_only Only update existing docs.
|
|
44
|
+
# @option *args [ true | false ] :autosave Whether autosave should be enabled on the
|
|
45
45
|
# association. Note that since the default is true, setting autosave to nil will still
|
|
46
46
|
# enable it.
|
|
47
47
|
def accepts_nested_attributes_for(*args)
|
|
@@ -40,14 +40,21 @@ module Mongoid
|
|
|
40
40
|
# @param [ Symbol ] key The name of the attribute.
|
|
41
41
|
# @param [ Object ] value The value of the attribute.
|
|
42
42
|
#
|
|
43
|
-
# @return [ true
|
|
43
|
+
# @return [ true | false ] True if pending, false if not.
|
|
44
44
|
def pending_attribute?(key, value)
|
|
45
45
|
name = key.to_s
|
|
46
|
-
|
|
46
|
+
|
|
47
|
+
aliased = if aliased_associations.key?(name)
|
|
48
|
+
aliased_associations[name]
|
|
49
|
+
else
|
|
50
|
+
name
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
if relations.has_key?(aliased)
|
|
47
54
|
pending_relations[name] = value
|
|
48
55
|
return true
|
|
49
56
|
end
|
|
50
|
-
if nested_attributes.has_key?(
|
|
57
|
+
if nested_attributes.has_key?(aliased)
|
|
51
58
|
pending_nested[name] = value
|
|
52
59
|
return true
|
|
53
60
|
end
|
|
@@ -41,7 +41,7 @@ module Mongoid
|
|
|
41
41
|
#
|
|
42
42
|
# @param [ String ] name The name of the attribute or a dot notation path.
|
|
43
43
|
#
|
|
44
|
-
# @return [ true
|
|
44
|
+
# @return [ true | false ] Whether the attribute is allowed by projection.
|
|
45
45
|
#
|
|
46
46
|
# @api private
|
|
47
47
|
def attribute_or_path_allowed?(name)
|
|
@@ -17,9 +17,9 @@ module Mongoid
|
|
|
17
17
|
# @example Can we write the attribute?
|
|
18
18
|
# model.attribute_writable?(:title)
|
|
19
19
|
#
|
|
20
|
-
# @param [ String
|
|
20
|
+
# @param [ String | Symbol ] name The name of the field.
|
|
21
21
|
#
|
|
22
|
-
# @return [ true
|
|
22
|
+
# @return [ true | false ] If the document is new, or if the field is not
|
|
23
23
|
# readonly.
|
|
24
24
|
def attribute_writable?(name)
|
|
25
25
|
new_record? || (!readonly_attributes.include?(name) && _loaded?(name))
|