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
data/lib/mongoid/criteria.rb
CHANGED
|
@@ -52,7 +52,7 @@ module Mongoid
|
|
|
52
52
|
#
|
|
53
53
|
# @param [ Object ] other The other +Enumerable+ or +Criteria+ to compare to.
|
|
54
54
|
#
|
|
55
|
-
# @return [ true
|
|
55
|
+
# @return [ true | false ] If the objects are equal.
|
|
56
56
|
def ==(other)
|
|
57
57
|
return super if other.respond_to?(:selector)
|
|
58
58
|
entries == other
|
|
@@ -73,6 +73,9 @@ module Mongoid
|
|
|
73
73
|
# treated by Mongoid - the decision between delegating to +Findable+ vs
|
|
74
74
|
# +Enumerable+ is made solely based on whether +find+ is passed a block.
|
|
75
75
|
#
|
|
76
|
+
# @note Each argument can be an individual id, an array of ids or
|
|
77
|
+
# a nested array. Each array will be flattened.
|
|
78
|
+
#
|
|
76
79
|
# @example Finds a document by its _id, invokes Findable#find.
|
|
77
80
|
# critera.find("1234")
|
|
78
81
|
#
|
|
@@ -85,6 +88,9 @@ module Mongoid
|
|
|
85
88
|
# @example Tries to find a document whose _id is the stringification of the provided Proc, typically failing.
|
|
86
89
|
# enumerator = criteria.find(-> { "Default Band" })
|
|
87
90
|
#
|
|
91
|
+
# @param [ Object | Array<Object> ] *args The ids.
|
|
92
|
+
# @param [ Proc ] block Optional block to pass.
|
|
93
|
+
#
|
|
88
94
|
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
|
89
95
|
#
|
|
90
96
|
# @raise Errors::DocumentNotFound If the parameters were _id values and
|
|
@@ -112,31 +118,6 @@ module Mongoid
|
|
|
112
118
|
entries.as_json(options)
|
|
113
119
|
end
|
|
114
120
|
|
|
115
|
-
# Tells the criteria that the cursor that gets returned needs to be
|
|
116
|
-
# cached. This is so multiple iterations don't hit the database multiple
|
|
117
|
-
# times, however this is not advisable when working with large data sets
|
|
118
|
-
# as the entire results will get stored in memory.
|
|
119
|
-
#
|
|
120
|
-
# @example Flag the criteria as cached.
|
|
121
|
-
# criteria.cache
|
|
122
|
-
#
|
|
123
|
-
# @return [ Criteria ] The cloned criteria.
|
|
124
|
-
def cache
|
|
125
|
-
crit = clone
|
|
126
|
-
crit.options.merge!(cache: true)
|
|
127
|
-
crit
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
# Will return true if the cache option has been set.
|
|
131
|
-
#
|
|
132
|
-
# @example Is the criteria cached?
|
|
133
|
-
# criteria.cached?
|
|
134
|
-
#
|
|
135
|
-
# @return [ true, false ] If the criteria is flagged as cached.
|
|
136
|
-
def cached?
|
|
137
|
-
options[:cache] == true
|
|
138
|
-
end
|
|
139
|
-
|
|
140
121
|
# Get the documents from the embedded criteria.
|
|
141
122
|
#
|
|
142
123
|
# @example Get the documents.
|
|
@@ -163,7 +144,7 @@ module Mongoid
|
|
|
163
144
|
# @example Is the criteria for embedded documents?
|
|
164
145
|
# criteria.embedded?
|
|
165
146
|
#
|
|
166
|
-
# @return [ true
|
|
147
|
+
# @return [ true | false ] If the criteria is embedded.
|
|
167
148
|
def embedded?
|
|
168
149
|
!!@embedded
|
|
169
150
|
end
|
|
@@ -230,7 +211,7 @@ module Mongoid
|
|
|
230
211
|
@klass = klass
|
|
231
212
|
@embedded = nil
|
|
232
213
|
@none = nil
|
|
233
|
-
klass ? super(klass.aliased_fields, klass.fields) : super({}, {})
|
|
214
|
+
klass ? super(klass.aliased_fields, klass.fields, klass.relations, klass.aliased_associations) : super({}, {}, {}, {})
|
|
234
215
|
end
|
|
235
216
|
|
|
236
217
|
# Merges another object with this +Criteria+ and returns a new criteria.
|
|
@@ -293,7 +274,7 @@ module Mongoid
|
|
|
293
274
|
# @example Is the criteria a none criteria?
|
|
294
275
|
# criteria.empty_and_chainable?
|
|
295
276
|
#
|
|
296
|
-
# @return [ true
|
|
277
|
+
# @return [ true | false ] If the criteria is a none.
|
|
297
278
|
def empty_and_chainable?
|
|
298
279
|
!!@none
|
|
299
280
|
end
|
|
@@ -351,9 +332,9 @@ module Mongoid
|
|
|
351
332
|
# crtiteria.respond_to?(:each)
|
|
352
333
|
#
|
|
353
334
|
# @param [ Symbol ] name The name of the class method on the +Document+.
|
|
354
|
-
# @param [ true
|
|
335
|
+
# @param [ true | false ] include_private Whether to include privates.
|
|
355
336
|
#
|
|
356
|
-
# @return [ true
|
|
337
|
+
# @return [ true | false ] If the criteria responds to the method.
|
|
357
338
|
def respond_to?(name, include_private = false)
|
|
358
339
|
super || klass.respond_to?(name) || CHECK.respond_to?(name, include_private)
|
|
359
340
|
end
|
|
@@ -404,7 +385,7 @@ module Mongoid
|
|
|
404
385
|
# @example Add a javascript selection.
|
|
405
386
|
# criteria.where("this.name == 'syd'")
|
|
406
387
|
#
|
|
407
|
-
# @param [ String
|
|
388
|
+
# @param [ String | Hash ] expression The javascript or standard selection.
|
|
408
389
|
#
|
|
409
390
|
# @raise [ UnsupportedJavascript ] If provided a string and the criteria
|
|
410
391
|
# is embedded.
|
|
@@ -430,7 +411,6 @@ module Mongoid
|
|
|
430
411
|
super
|
|
431
412
|
end
|
|
432
413
|
|
|
433
|
-
|
|
434
414
|
# Get a version of this criteria without the options.
|
|
435
415
|
#
|
|
436
416
|
# @example Get the criteria without options.
|
|
@@ -536,7 +516,7 @@ module Mongoid
|
|
|
536
516
|
# @example Add the type selection.
|
|
537
517
|
# criteria.merge_type_selection
|
|
538
518
|
#
|
|
539
|
-
# @return [ true
|
|
519
|
+
# @return [ true | false ] If type selection was added.
|
|
540
520
|
def merge_type_selection
|
|
541
521
|
selector.merge!(type_selection) if type_selectable?
|
|
542
522
|
end
|
|
@@ -548,7 +528,7 @@ module Mongoid
|
|
|
548
528
|
# @example If the criteria type selectable?
|
|
549
529
|
# criteria.type_selectable?
|
|
550
530
|
#
|
|
551
|
-
# @return [ true
|
|
531
|
+
# @return [ true | false ] If type selection should be added.
|
|
552
532
|
def type_selectable?
|
|
553
533
|
klass.hereditary? &&
|
|
554
534
|
!selector.keys.include?(self.discriminator_key) &&
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "mongoid/deprecation"
|
|
4
|
+
|
|
5
|
+
module Mongoid
|
|
6
|
+
|
|
7
|
+
# Adds ability to declare Mongoid-specific deprecations.
|
|
8
|
+
#
|
|
9
|
+
# @api private
|
|
10
|
+
module Deprecable
|
|
11
|
+
|
|
12
|
+
# Declares method(s) as deprecated.
|
|
13
|
+
#
|
|
14
|
+
# @example Deprecate a method.
|
|
15
|
+
# Mongoid.deprecate(Cat, :meow); Cat.new.meow
|
|
16
|
+
# #=> Mongoid.logger.warn("meow is deprecated and will be removed from Mongoid 8.0")
|
|
17
|
+
#
|
|
18
|
+
# @example Deprecate a method and declare the replacement method.
|
|
19
|
+
# Mongoid.deprecate(Cat, meow: :speak); Cat.new.meow
|
|
20
|
+
# #=> Mongoid.logger.warn("meow is deprecated and will be removed from Mongoid 8.0 (use speak instead)")
|
|
21
|
+
#
|
|
22
|
+
# @example Deprecate a method and give replacement instructions.
|
|
23
|
+
# Mongoid.deprecate(Cat, meow: 'eat :catnip instead'); Cat.new.meow
|
|
24
|
+
# #=> Mongoid.logger.warn("meow is deprecated and will be removed from Mongoid 8.0 (eat :catnip instead)")
|
|
25
|
+
#
|
|
26
|
+
# @param [ Module ] target_module The parent which contains the method.
|
|
27
|
+
# @param [ Symbol | Hash<Symbol, [ Symbol | String ]> ] method_descriptors
|
|
28
|
+
# The methods to deprecate, with optional replacement instructions.
|
|
29
|
+
def deprecate(target_module, *method_descriptors)
|
|
30
|
+
Mongoid::Deprecation.deprecate_methods(target_module, *method_descriptors)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Ensure Mongoid.deprecate can be used during initialization
|
|
36
|
+
Mongoid.extend(Mongoid::Deprecable)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongoid
|
|
4
|
+
|
|
5
|
+
# Utility class for logging deprecation warnings.
|
|
6
|
+
class Deprecation < ::ActiveSupport::Deprecation
|
|
7
|
+
|
|
8
|
+
@gem_name = 'Mongoid'
|
|
9
|
+
|
|
10
|
+
# Per change policy, deprecations will be removed in the next major version.
|
|
11
|
+
@deprecation_horizon = "#{Mongoid::VERSION.split('.').first.to_i + 1}.0".freeze
|
|
12
|
+
|
|
13
|
+
# Overrides default ActiveSupport::Deprecation behavior
|
|
14
|
+
# to use Mongoid's logger.
|
|
15
|
+
#
|
|
16
|
+
# @return Array<Proc> The deprecation behavior.
|
|
17
|
+
def behavior
|
|
18
|
+
@behavior ||= Array(->(message, callstack, _deprecation_horizon, _gem_name) {
|
|
19
|
+
logger = Mongoid.logger
|
|
20
|
+
logger.warn(message)
|
|
21
|
+
logger.debug(callstack.join("\n ")) if debug
|
|
22
|
+
})
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
data/lib/mongoid/document.rb
CHANGED
|
@@ -56,7 +56,7 @@ module Mongoid
|
|
|
56
56
|
# @example Check if frozen
|
|
57
57
|
# document.frozen?
|
|
58
58
|
#
|
|
59
|
-
# @return [ true
|
|
59
|
+
# @return [ true | false ] True if frozen, else false.
|
|
60
60
|
def frozen?
|
|
61
61
|
attributes.frozen?
|
|
62
62
|
end
|
|
@@ -100,21 +100,8 @@ module Mongoid
|
|
|
100
100
|
# @param [ Hash ] attrs The attributes to set up the document with.
|
|
101
101
|
#
|
|
102
102
|
# @return [ Document ] A new document.
|
|
103
|
-
def initialize(attrs = nil)
|
|
104
|
-
|
|
105
|
-
_building do
|
|
106
|
-
@new_record = true
|
|
107
|
-
@attributes ||= {}
|
|
108
|
-
apply_pre_processed_defaults
|
|
109
|
-
apply_default_scoping
|
|
110
|
-
process_attributes(attrs) do
|
|
111
|
-
yield(self) if block_given?
|
|
112
|
-
end
|
|
113
|
-
apply_post_processed_defaults
|
|
114
|
-
# @todo: #2586: Need to have access to parent document in these
|
|
115
|
-
# callbacks.
|
|
116
|
-
run_callbacks(:initialize) unless _initialize_callbacks.empty?
|
|
117
|
-
end
|
|
103
|
+
def initialize(attrs = nil, &block)
|
|
104
|
+
construct_document(attrs, execute_callbacks: true, &block)
|
|
118
105
|
end
|
|
119
106
|
|
|
120
107
|
# Return the model name of the document.
|
|
@@ -137,16 +124,6 @@ module Mongoid
|
|
|
137
124
|
(persisted? || destroyed?) ? [ _id.to_s ] : nil
|
|
138
125
|
end
|
|
139
126
|
|
|
140
|
-
# Return an array with this +Document+ only in it.
|
|
141
|
-
#
|
|
142
|
-
# @example Return the document in an array.
|
|
143
|
-
# document.to_a
|
|
144
|
-
#
|
|
145
|
-
# @return [ Array<Document> ] An array with the document as its only item.
|
|
146
|
-
def to_a
|
|
147
|
-
[ self ]
|
|
148
|
-
end
|
|
149
|
-
|
|
150
127
|
# Return a hash of the entire document hierarchy from this document and
|
|
151
128
|
# below. Used when the attributes are needed for everything and not just
|
|
152
129
|
# the current document.
|
|
@@ -173,14 +150,14 @@ module Mongoid
|
|
|
173
150
|
#
|
|
174
151
|
# @param [ Hash ] options The options.
|
|
175
152
|
#
|
|
176
|
-
# @option options [ true
|
|
153
|
+
# @option options [ true | false ] :compact (Deprecated) Whether to include fields
|
|
177
154
|
# with nil values in the json document.
|
|
178
155
|
#
|
|
179
156
|
# @return [ Hash ] The document as json.
|
|
180
157
|
def as_json(options = nil)
|
|
181
158
|
rv = super
|
|
182
159
|
if options && options[:compact]
|
|
183
|
-
Mongoid.
|
|
160
|
+
Mongoid::Warnings.warn_as_json_compact_deprecated
|
|
184
161
|
rv = rv.compact
|
|
185
162
|
end
|
|
186
163
|
rv
|
|
@@ -228,6 +205,38 @@ module Mongoid
|
|
|
228
205
|
|
|
229
206
|
private
|
|
230
207
|
|
|
208
|
+
# Does the construction of a document.
|
|
209
|
+
#
|
|
210
|
+
# @param [ Hash ] attrs The attributes to set up the document with.
|
|
211
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
|
212
|
+
# should be run.
|
|
213
|
+
#
|
|
214
|
+
# @return [ Document ] A new document.
|
|
215
|
+
#
|
|
216
|
+
# @api private
|
|
217
|
+
def construct_document(attrs = nil, execute_callbacks: true)
|
|
218
|
+
@__parent = nil
|
|
219
|
+
_building do
|
|
220
|
+
@new_record = true
|
|
221
|
+
@attributes ||= {}
|
|
222
|
+
apply_pre_processed_defaults
|
|
223
|
+
apply_default_scoping
|
|
224
|
+
process_attributes(attrs) do
|
|
225
|
+
yield(self) if block_given?
|
|
226
|
+
end
|
|
227
|
+
@attributes_before_type_cast = @attributes.merge(attributes_before_type_cast)
|
|
228
|
+
|
|
229
|
+
if execute_callbacks
|
|
230
|
+
apply_post_processed_defaults
|
|
231
|
+
run_callbacks(:initialize) unless _initialize_callbacks.empty?
|
|
232
|
+
else
|
|
233
|
+
pending_callbacks << :apply_post_processed_defaults
|
|
234
|
+
pending_callbacks << :initialize
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
self
|
|
238
|
+
end
|
|
239
|
+
|
|
231
240
|
# Returns the logger
|
|
232
241
|
#
|
|
233
242
|
# @return [ Logger ] The configured logger or a default Logger instance.
|
|
@@ -245,6 +254,14 @@ module Mongoid
|
|
|
245
254
|
@model_cache_key ||= self.class.model_name.cache_key
|
|
246
255
|
end
|
|
247
256
|
|
|
257
|
+
# Returns a hash of the attributes.
|
|
258
|
+
#
|
|
259
|
+
# Note this method modifies the attributes hash that already exists on the
|
|
260
|
+
# class and returns it. This means that the hash returned by this method
|
|
261
|
+
# refers to the same hash as calling #attributes on the instance. See
|
|
262
|
+
# MONGOID-4476 for an explanation on how this is used.
|
|
263
|
+
#
|
|
264
|
+
# @return [ Hash ] The attributes hash.
|
|
248
265
|
def as_attributes
|
|
249
266
|
return attributes if frozen?
|
|
250
267
|
embedded_relations.each_pair do |name, meta|
|
|
@@ -273,20 +290,67 @@ module Mongoid
|
|
|
273
290
|
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
|
274
291
|
# @param [ Integer ] selected_fields The selected fields from the
|
|
275
292
|
# criteria.
|
|
293
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
|
294
|
+
# should be run.
|
|
295
|
+
#
|
|
296
|
+
# @return [ Document ] A new document.
|
|
297
|
+
def instantiate(attrs = nil, selected_fields = nil, &block)
|
|
298
|
+
instantiate_document(attrs, selected_fields, execute_callbacks: true, &block)
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
# Instantiate the document.
|
|
302
|
+
#
|
|
303
|
+
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
|
304
|
+
# @param [ Integer ] selected_fields The selected fields from the
|
|
305
|
+
# criteria.
|
|
306
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
|
307
|
+
# should be run.
|
|
276
308
|
#
|
|
277
309
|
# @return [ Document ] A new document.
|
|
278
|
-
|
|
279
|
-
|
|
310
|
+
#
|
|
311
|
+
# @api private
|
|
312
|
+
def instantiate_document(attrs = nil, selected_fields = nil, execute_callbacks: true)
|
|
313
|
+
attributes = if Mongoid.legacy_attributes
|
|
314
|
+
attrs
|
|
315
|
+
else
|
|
316
|
+
attrs&.to_h
|
|
317
|
+
end || {}
|
|
318
|
+
|
|
280
319
|
doc = allocate
|
|
281
320
|
doc.__selected_fields = selected_fields
|
|
282
321
|
doc.instance_variable_set(:@attributes, attributes)
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
doc.
|
|
322
|
+
# TODO: remove the to_h when the legacy_attributes flag is removed.
|
|
323
|
+
# The to_h ensures that we don't accidentally make attributes_before_type_cast
|
|
324
|
+
# a BSON::Document.
|
|
325
|
+
doc.instance_variable_set(:@attributes_before_type_cast, attributes&.to_h.dup)
|
|
326
|
+
|
|
327
|
+
if execute_callbacks
|
|
328
|
+
doc.apply_defaults
|
|
329
|
+
yield(doc) if block_given?
|
|
330
|
+
doc.run_callbacks(:find) unless doc._find_callbacks.empty?
|
|
331
|
+
doc.run_callbacks(:initialize) unless doc._initialize_callbacks.empty?
|
|
332
|
+
else
|
|
333
|
+
yield(doc) if block_given?
|
|
334
|
+
doc.pending_callbacks += [:apply_defaults, :find, :initialize]
|
|
335
|
+
end
|
|
336
|
+
|
|
287
337
|
doc
|
|
288
338
|
end
|
|
289
339
|
|
|
340
|
+
# Allocates and constructs a document.
|
|
341
|
+
#
|
|
342
|
+
# @param [ Hash ] attrs The attributes to set up the document with.
|
|
343
|
+
# @param [ true | false ] execute_callbacks Flag specifies whether callbacks
|
|
344
|
+
# should be run.
|
|
345
|
+
#
|
|
346
|
+
# @return [ Document ] A new document.
|
|
347
|
+
#
|
|
348
|
+
# @api private
|
|
349
|
+
def construct_document(attrs = nil, execute_callbacks: true)
|
|
350
|
+
doc = allocate
|
|
351
|
+
doc.send(:construct_document, attrs, execute_callbacks: execute_callbacks)
|
|
352
|
+
end
|
|
353
|
+
|
|
290
354
|
# Returns all types to query for when using this class as the base.
|
|
291
355
|
#
|
|
292
356
|
# @example Get the types.
|
data/lib/mongoid/equality.rb
CHANGED
|
@@ -26,9 +26,9 @@ module Mongoid
|
|
|
26
26
|
# @example Compare for equality.
|
|
27
27
|
# document == other
|
|
28
28
|
#
|
|
29
|
-
# @param [ Document
|
|
29
|
+
# @param [ Document | Object ] other The other object to compare with.
|
|
30
30
|
#
|
|
31
|
-
# @return [ true
|
|
31
|
+
# @return [ true | false ] True if the ids are equal, false if not.
|
|
32
32
|
def ==(other)
|
|
33
33
|
self.class == other.class &&
|
|
34
34
|
attributes["_id"] == other.attributes["_id"]
|
|
@@ -39,14 +39,14 @@ module Mongoid
|
|
|
39
39
|
# @example Compare the classes.
|
|
40
40
|
# document === other
|
|
41
41
|
#
|
|
42
|
-
# @param [ Document
|
|
42
|
+
# @param [ Document | Object ] other The other object to compare with.
|
|
43
43
|
#
|
|
44
|
-
# @return [ true
|
|
44
|
+
# @return [ true | false ] True if the classes are equal, false if not.
|
|
45
45
|
def ===(other)
|
|
46
46
|
if Mongoid.legacy_triple_equals
|
|
47
|
-
super
|
|
48
|
-
else
|
|
49
47
|
other.class == Class ? self.class === other : self == other
|
|
48
|
+
else
|
|
49
|
+
super
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
|
|
@@ -55,9 +55,9 @@ module Mongoid
|
|
|
55
55
|
# @example Perform equality checking.
|
|
56
56
|
# document.eql?(other)
|
|
57
57
|
#
|
|
58
|
-
# @param [ Document
|
|
58
|
+
# @param [ Document | Object ] other The object to check against.
|
|
59
59
|
#
|
|
60
|
-
# @return [ true
|
|
60
|
+
# @return [ true | false ] True if equal, false if not.
|
|
61
61
|
def eql?(other)
|
|
62
62
|
self == (other)
|
|
63
63
|
end
|
|
@@ -68,14 +68,14 @@ module Mongoid
|
|
|
68
68
|
# @example Compare the classes.
|
|
69
69
|
# document === other
|
|
70
70
|
#
|
|
71
|
-
# @param [ Document
|
|
71
|
+
# @param [ Document | Object ] other The other object to compare with.
|
|
72
72
|
#
|
|
73
|
-
# @return [ true
|
|
73
|
+
# @return [ true | false ] True if the classes are equal, false if not.
|
|
74
74
|
def ===(other)
|
|
75
75
|
if Mongoid.legacy_triple_equals
|
|
76
|
-
other.is_a?(self)
|
|
77
|
-
else
|
|
78
76
|
other.class == Class ? self <= other : other.is_a?(self)
|
|
77
|
+
else
|
|
78
|
+
other.is_a?(self)
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
end
|
|
@@ -19,23 +19,25 @@ module Mongoid
|
|
|
19
19
|
# DocumentNotFound.new(Person, :ssn => "1234", :name => "Helen")
|
|
20
20
|
#
|
|
21
21
|
# @param [ Class ] klass The model class.
|
|
22
|
-
# @param [ Hash
|
|
23
|
-
# @param [ Array ] unmatched The unmatched ids, if appropriate
|
|
22
|
+
# @param [ Hash | Array | Object ] params The attributes or ids.
|
|
23
|
+
# @param [ Array | Hash ] unmatched The unmatched ids, if appropriate. If
|
|
24
|
+
# there is a shard key this will be a hash.
|
|
24
25
|
def initialize(klass, params, unmatched = nil)
|
|
25
26
|
if !unmatched && !params.is_a?(Hash)
|
|
26
|
-
unmatched = Array(params)
|
|
27
|
+
unmatched = Array(params) if params
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
@klass, @params = klass, params
|
|
30
31
|
super(
|
|
31
32
|
compose_message(
|
|
32
|
-
message_key(params),
|
|
33
|
+
message_key(params, unmatched),
|
|
33
34
|
{
|
|
34
35
|
klass: klass.name,
|
|
35
36
|
searched: searched(params),
|
|
36
37
|
attributes: params,
|
|
37
38
|
total: total(params),
|
|
38
|
-
missing: missing(unmatched)
|
|
39
|
+
missing: missing(unmatched),
|
|
40
|
+
shard_key: shard_key(unmatched)
|
|
39
41
|
}
|
|
40
42
|
)
|
|
41
43
|
)
|
|
@@ -48,12 +50,14 @@ module Mongoid
|
|
|
48
50
|
# @example Get the missing string.
|
|
49
51
|
# error.missing(1)
|
|
50
52
|
#
|
|
51
|
-
# @param [ Object
|
|
53
|
+
# @param [ Object | Array ] unmatched The ids that did not match.
|
|
52
54
|
#
|
|
53
55
|
# @return [ String ] The missing string.
|
|
54
56
|
def missing(unmatched)
|
|
55
57
|
if unmatched.is_a?(::Array)
|
|
56
58
|
unmatched.join(", ")
|
|
59
|
+
elsif unmatched.is_a?(::Hash)
|
|
60
|
+
unmatched[:_id] || unmatched["_id"]
|
|
57
61
|
else
|
|
58
62
|
unmatched
|
|
59
63
|
end
|
|
@@ -64,7 +68,7 @@ module Mongoid
|
|
|
64
68
|
# @example Get the searched string.
|
|
65
69
|
# error.searched(1)
|
|
66
70
|
#
|
|
67
|
-
# @param [ Object
|
|
71
|
+
# @param [ Object | Array ] params The ids that were searched for.
|
|
68
72
|
#
|
|
69
73
|
# @return [ String ] The searched string.
|
|
70
74
|
def searched(params)
|
|
@@ -80,7 +84,7 @@ module Mongoid
|
|
|
80
84
|
# @example Get the total.
|
|
81
85
|
# error.total([ 1, 2, 3 ])
|
|
82
86
|
#
|
|
83
|
-
# @param [ Object
|
|
87
|
+
# @param [ Object | Array ] params What was searched for.
|
|
84
88
|
#
|
|
85
89
|
# @return [ Integer ] The total number.
|
|
86
90
|
def total(params)
|
|
@@ -93,10 +97,27 @@ module Mongoid
|
|
|
93
97
|
# error.problem
|
|
94
98
|
#
|
|
95
99
|
# @return [ String ] The problem.
|
|
96
|
-
def message_key(params)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
def message_key(params, unmatched)
|
|
101
|
+
if !params && !unmatched
|
|
102
|
+
"no_documents_found"
|
|
103
|
+
elsif Hash === params
|
|
104
|
+
"document_with_attributes_not_found"
|
|
105
|
+
elsif Hash === unmatched && unmatched.size >= 2
|
|
106
|
+
"document_with_shard_key_not_found"
|
|
107
|
+
else
|
|
108
|
+
"document_not_found"
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Get the shard key from the unmatched hash.
|
|
113
|
+
#
|
|
114
|
+
# @return [ String ] the shard key and value.
|
|
115
|
+
def shard_key(unmatched)
|
|
116
|
+
if Hash === unmatched
|
|
117
|
+
h = unmatched.dup
|
|
118
|
+
h.delete("_id")
|
|
119
|
+
h.delete(:_id)
|
|
120
|
+
h.map{|k,v| "#{k}: #{v}" }.join(", ")
|
|
100
121
|
end
|
|
101
122
|
end
|
|
102
123
|
end
|
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
|
12
12
|
# @example Create the new error.
|
|
13
13
|
# InvalidConfigOption.new(:name, [ :option ])
|
|
14
14
|
#
|
|
15
|
-
# @param [ Symbol
|
|
15
|
+
# @param [ Symbol | String ] name The attempted config option name.
|
|
16
16
|
def initialize(name)
|
|
17
17
|
super(
|
|
18
18
|
compose_message(
|
|
@@ -13,7 +13,7 @@ module Mongoid
|
|
|
13
13
|
#
|
|
14
14
|
# @param [ Mongoid::Association ] association The association for which this
|
|
15
15
|
# dependency is defined.
|
|
16
|
-
# @param [ Symbol
|
|
16
|
+
# @param [ Symbol | String ] invalid_strategy The attempted invalid strategy.
|
|
17
17
|
# @param [ Array<Symbol> ] valid_strategies The valid strategies.
|
|
18
18
|
def initialize(association, invalid_strategy, valid_strategies)
|
|
19
19
|
super(
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongoid
|
|
4
|
+
module Errors
|
|
5
|
+
|
|
6
|
+
# This error is raised when trying to use the setter for a field that starts
|
|
7
|
+
# with a dollar sign ($) or contains a dot/period (.).
|
|
8
|
+
class InvalidDotDollarAssignment < MongoidError
|
|
9
|
+
|
|
10
|
+
# Create the new error.
|
|
11
|
+
#
|
|
12
|
+
# @param [ Class ] klass The class of the document.
|
|
13
|
+
# @param [ Class ] attr The attribute attempted to be written.
|
|
14
|
+
#
|
|
15
|
+
# @api private
|
|
16
|
+
def initialize(klass, attr)
|
|
17
|
+
super(
|
|
18
|
+
compose_message("invalid_dot_dollar_assignment", { klass: klass, attr: attr })
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -12,14 +12,18 @@ module Mongoid
|
|
|
12
12
|
# @example Create the error.
|
|
13
13
|
# InvalidField.new(person, :crazy_method_name)
|
|
14
14
|
#
|
|
15
|
+
# @api private
|
|
16
|
+
#
|
|
15
17
|
# @param [ Class ] klass The document class.
|
|
18
|
+
# @param [ Symbol ] field The field name.
|
|
16
19
|
# @param [ Symbol ] name The method name.
|
|
17
|
-
def initialize(klass, name)
|
|
20
|
+
def initialize(klass, field, name)
|
|
18
21
|
super(
|
|
19
22
|
compose_message(
|
|
20
23
|
"invalid_field",
|
|
21
24
|
{
|
|
22
25
|
name: name,
|
|
26
|
+
field: field,
|
|
23
27
|
origin: origin(klass, name),
|
|
24
28
|
file: location(klass, name)[0],
|
|
25
29
|
line: location(klass, name)[1]
|
|
@@ -38,7 +42,7 @@ module Mongoid
|
|
|
38
42
|
# @param [ Class ] klass The document class.
|
|
39
43
|
# @param [ Symbol ] name The method name.
|
|
40
44
|
#
|
|
41
|
-
# @return [ Class
|
|
45
|
+
# @return [ Class | Module ] The originating class or module.
|
|
42
46
|
def origin(klass, name)
|
|
43
47
|
klass.instance_method(name).owner
|
|
44
48
|
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongoid
|
|
4
|
+
module Errors
|
|
5
|
+
|
|
6
|
+
# This error is raised when trying to define a field using a :type option value
|
|
7
|
+
# that is not present in the field type mapping.
|
|
8
|
+
class InvalidFieldType < MongoidError
|
|
9
|
+
|
|
10
|
+
# Create the new error.
|
|
11
|
+
#
|
|
12
|
+
# @example Instantiate the error.
|
|
13
|
+
# InvalidFieldType.new('Person', 'first_name', 'stringgy')
|
|
14
|
+
#
|
|
15
|
+
# @param [ String ] klass The model class.
|
|
16
|
+
# @param [ String ] field The field on which the invalid type is used.
|
|
17
|
+
# @param [ Symbol | String ] type The value of the field :type option.
|
|
18
|
+
def initialize(klass, field, type)
|
|
19
|
+
super(
|
|
20
|
+
compose_message('invalid_field_type',
|
|
21
|
+
klass: klass, field: field, type_inspection: type.inspect)
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -38,7 +38,7 @@ module Mongoid
|
|
|
38
38
|
# @param [ Class ] klass The document class.
|
|
39
39
|
# @param [ Symbol ] name The method name.
|
|
40
40
|
#
|
|
41
|
-
# @return [ Class
|
|
41
|
+
# @return [ Class | Module ] The originating class or module.
|
|
42
42
|
def origin(klass, name)
|
|
43
43
|
klass.instance_method(name).owner
|
|
44
44
|
end
|
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
|
12
12
|
# InvalidRelationOption.new(Person, invalid_option: 'make_me_a_sandwich')
|
|
13
13
|
#
|
|
14
14
|
# @param [ Class ] klass The model class.
|
|
15
|
-
# @param [ String
|
|
15
|
+
# @param [ String | Symbol ] name The association name.
|
|
16
16
|
# @param [ Symbol ] option The invalid option.
|
|
17
17
|
# @param [ Array<Symbol> ] valid_options The valid option.
|
|
18
18
|
def initialize(klass, name, option, valid_options)
|
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
|
12
12
|
# @example Create the error.
|
|
13
13
|
# InvalidSessionUse.new(:invalid_session_use)
|
|
14
14
|
#
|
|
15
|
-
# @param [ :invalid_session_use
|
|
15
|
+
# @param [ :invalid_session_use | :invalid_session_nesting ] error_type The type of session misuse.
|
|
16
16
|
def initialize(error_type)
|
|
17
17
|
super(compose_message(error_type.to_s))
|
|
18
18
|
end
|