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/threaded.rb
CHANGED
|
@@ -45,7 +45,7 @@ module Mongoid
|
|
|
45
45
|
# @example Get the global database override.
|
|
46
46
|
# Threaded.database_override
|
|
47
47
|
#
|
|
48
|
-
# @return [ String
|
|
48
|
+
# @return [ String | Symbol ] The override.
|
|
49
49
|
def database_override
|
|
50
50
|
Thread.current[DATABASE_OVERRIDE_KEY]
|
|
51
51
|
end
|
|
@@ -55,9 +55,9 @@ module Mongoid
|
|
|
55
55
|
# @example Set the global database override.
|
|
56
56
|
# Threaded.database_override = :testing
|
|
57
57
|
#
|
|
58
|
-
# @param [ String
|
|
58
|
+
# @param [ String | Symbol ] name The global override name.
|
|
59
59
|
#
|
|
60
|
-
# @return [ String
|
|
60
|
+
# @return [ String | Symbol ] The override.
|
|
61
61
|
def database_override=(name)
|
|
62
62
|
Thread.current[DATABASE_OVERRIDE_KEY] = name
|
|
63
63
|
end
|
|
@@ -167,7 +167,7 @@ module Mongoid
|
|
|
167
167
|
# @example Get the global client override.
|
|
168
168
|
# Threaded.client_override
|
|
169
169
|
#
|
|
170
|
-
# @return [ String
|
|
170
|
+
# @return [ String | Symbol ] The override.
|
|
171
171
|
def client_override
|
|
172
172
|
Thread.current[CLIENT_OVERRIDE_KEY]
|
|
173
173
|
end
|
|
@@ -177,9 +177,9 @@ module Mongoid
|
|
|
177
177
|
# @example Set the global client override.
|
|
178
178
|
# Threaded.client_override = :testing
|
|
179
179
|
#
|
|
180
|
-
# @param [ String
|
|
180
|
+
# @param [ String | Symbol ] name The global override name.
|
|
181
181
|
#
|
|
182
|
-
# @return [ String
|
|
182
|
+
# @return [ String | Symbol ] The override.
|
|
183
183
|
def client_override=(name)
|
|
184
184
|
Thread.current[CLIENT_OVERRIDE_KEY] = name
|
|
185
185
|
end
|
|
@@ -255,7 +255,7 @@ module Mongoid
|
|
|
255
255
|
#
|
|
256
256
|
# @param [ Document ] document The document to check.
|
|
257
257
|
#
|
|
258
|
-
# @return [ true
|
|
258
|
+
# @return [ true | false ] If the document is autosaved.
|
|
259
259
|
def autosaved?(document)
|
|
260
260
|
autosaves_for(document.class).include?(document._id)
|
|
261
261
|
end
|
|
@@ -267,7 +267,7 @@ module Mongoid
|
|
|
267
267
|
#
|
|
268
268
|
# @param [ Document ] document The document to check.
|
|
269
269
|
#
|
|
270
|
-
# @return [ true
|
|
270
|
+
# @return [ true | false ] If the document is validated.
|
|
271
271
|
def validated?(document)
|
|
272
272
|
validations_for(document.class).include?(document._id)
|
|
273
273
|
end
|
|
@@ -322,7 +322,7 @@ module Mongoid
|
|
|
322
322
|
#
|
|
323
323
|
# @param [ Mongo::Session ] session The session to save.
|
|
324
324
|
def set_session(session)
|
|
325
|
-
Thread.current[:session] = session
|
|
325
|
+
Thread.current["[mongoid]:session"] = session
|
|
326
326
|
end
|
|
327
327
|
|
|
328
328
|
# Get the cached session for this thread.
|
|
@@ -330,9 +330,9 @@ module Mongoid
|
|
|
330
330
|
# @example Get the session for this thread.
|
|
331
331
|
# Threaded.get_session
|
|
332
332
|
#
|
|
333
|
-
# @return [ Mongo::Session
|
|
333
|
+
# @return [ Mongo::Session | nil ] The session cached on this thread or nil.
|
|
334
334
|
def get_session
|
|
335
|
-
Thread.current[:session]
|
|
335
|
+
Thread.current["[mongoid]:session"]
|
|
336
336
|
end
|
|
337
337
|
|
|
338
338
|
# Clear the cached session for this thread.
|
|
@@ -344,7 +344,7 @@ module Mongoid
|
|
|
344
344
|
def clear_session
|
|
345
345
|
session = get_session
|
|
346
346
|
session.end_session if session
|
|
347
|
-
Thread.current[:session] = nil
|
|
347
|
+
Thread.current["[mongoid]:session"] = nil
|
|
348
348
|
end
|
|
349
349
|
end
|
|
350
350
|
end
|
|
@@ -24,7 +24,7 @@ module Mongoid
|
|
|
24
24
|
# person.set_updated_at
|
|
25
25
|
def set_updated_at
|
|
26
26
|
if able_to_set_updated_at?
|
|
27
|
-
self.updated_at = Time.now
|
|
27
|
+
self.updated_at = Time.configured.now unless updated_at_changed?
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
clear_timeless_option
|
|
@@ -35,7 +35,7 @@ module Mongoid
|
|
|
35
35
|
# @example Can the timestamp be set?
|
|
36
36
|
# document.able_to_set_updated_at?
|
|
37
37
|
#
|
|
38
|
-
# @return [ true
|
|
38
|
+
# @return [ true | false ] If the timestamp can be set.
|
|
39
39
|
def able_to_set_updated_at?
|
|
40
40
|
!frozen? && !timeless? && (new_record? || changed?)
|
|
41
41
|
end
|
data/lib/mongoid/touchable.rb
CHANGED
|
@@ -19,10 +19,10 @@ module Mongoid
|
|
|
19
19
|
#
|
|
20
20
|
# @param [ Symbol ] field The name of an additional field to update.
|
|
21
21
|
#
|
|
22
|
-
# @return [ true/false ] false if
|
|
22
|
+
# @return [ true/false ] false if document is new_record otherwise true.
|
|
23
23
|
def touch(field = nil)
|
|
24
24
|
return false if _root.new_record?
|
|
25
|
-
current = Time.now
|
|
25
|
+
current = Time.configured.now
|
|
26
26
|
field = database_field_name(field)
|
|
27
27
|
write_attribute(:updated_at, current) if respond_to?("updated_at=")
|
|
28
28
|
write_attribute(field, current) if field
|
|
@@ -60,7 +60,6 @@ module Mongoid
|
|
|
60
60
|
|
|
61
61
|
# Callbacks are invoked on the composition root first and on the
|
|
62
62
|
# leaf-most embedded document last.
|
|
63
|
-
# TODO add tests, see MONGOID-5015.
|
|
64
63
|
run_callbacks(:touch)
|
|
65
64
|
true
|
|
66
65
|
end
|
data/lib/mongoid/traversable.rb
CHANGED
|
@@ -178,7 +178,10 @@ module Mongoid
|
|
|
178
178
|
to_expand = []
|
|
179
179
|
expanding.each do |child|
|
|
180
180
|
next if expanded[child]
|
|
181
|
-
expanded
|
|
181
|
+
# Don't mark expanded if _id is nil, since documents are compared by
|
|
182
|
+
# their _ids, multiple embedded documents with nil ids will compare
|
|
183
|
+
# equally, and some documents will not be expanded.
|
|
184
|
+
expanded[child] = true if child._id
|
|
182
185
|
children << child
|
|
183
186
|
to_expand += child._children
|
|
184
187
|
end
|
|
@@ -200,7 +203,7 @@ module Mongoid
|
|
|
200
203
|
# @example Check if the document is a subclass
|
|
201
204
|
# Square.new.hereditary?
|
|
202
205
|
#
|
|
203
|
-
# @return [ true
|
|
206
|
+
# @return [ true | false ] True if hereditary, false if not.
|
|
204
207
|
def hereditary?
|
|
205
208
|
self.class.hereditary?
|
|
206
209
|
end
|
|
@@ -230,6 +233,7 @@ module Mongoid
|
|
|
230
233
|
def remove_child(child)
|
|
231
234
|
name = child.association_name
|
|
232
235
|
if child.embedded_one?
|
|
236
|
+
self.attributes.delete(child._association.store_as)
|
|
233
237
|
remove_ivar(name)
|
|
234
238
|
else
|
|
235
239
|
relation = send(name)
|
|
@@ -279,7 +283,7 @@ module Mongoid
|
|
|
279
283
|
# @example Is the document the root?
|
|
280
284
|
# document._root?
|
|
281
285
|
#
|
|
282
|
-
# @return [ true
|
|
286
|
+
# @return [ true | false ] If the document is the root.
|
|
283
287
|
def _root?
|
|
284
288
|
_parent ? false : true
|
|
285
289
|
end
|
|
@@ -291,7 +295,7 @@ module Mongoid
|
|
|
291
295
|
# @example Check if the document is a subclass.
|
|
292
296
|
# Square.hereditary?
|
|
293
297
|
#
|
|
294
|
-
# @return [ true
|
|
298
|
+
# @return [ true | false ] True if hereditary, false if not.
|
|
295
299
|
def hereditary?
|
|
296
300
|
!!(Mongoid::Document > superclass)
|
|
297
301
|
end
|
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
|
12
12
|
# validator.validate_each(model, :name, "value")
|
|
13
13
|
#
|
|
14
14
|
# @param [ Document ] document The document.
|
|
15
|
-
# @param [ Symbol
|
|
15
|
+
# @param [ Symbol | String ] attribute The attribute to validate.
|
|
16
16
|
# @param [ Object ] value The attribute value.
|
|
17
17
|
def validate_each(document, attribute, value)
|
|
18
18
|
field = document.fields[document.database_field_name(attribute)]
|
|
@@ -19,7 +19,6 @@ module Mongoid
|
|
|
19
19
|
# end
|
|
20
20
|
#
|
|
21
21
|
# @param [ Array ] args The arguments to pass to the validator.
|
|
22
|
-
#
|
|
23
22
|
def validates_associated(*args)
|
|
24
23
|
validates_with(AssociatedValidator, _merge_attributes(args))
|
|
25
24
|
end
|
|
@@ -37,7 +36,6 @@ module Mongoid
|
|
|
37
36
|
# end
|
|
38
37
|
#
|
|
39
38
|
# @param [ Array ] args The arguments to pass to the validator.
|
|
40
|
-
#
|
|
41
39
|
def validates_uniqueness_of(*args)
|
|
42
40
|
validates_with(UniquenessValidator, _merge_attributes(args))
|
|
43
41
|
end
|
|
@@ -56,7 +56,7 @@ module Mongoid
|
|
|
56
56
|
# @param [ Symbol ] attr The attribute.
|
|
57
57
|
# @param [ Object ] value The value.
|
|
58
58
|
#
|
|
59
|
-
# @return [ true
|
|
59
|
+
# @return [ true | false ] If the doc is missing.
|
|
60
60
|
def relation_or_fk_missing?(doc, attr, value)
|
|
61
61
|
return true if value.blank? && doc.send(attr).blank?
|
|
62
62
|
association = doc.relations[attr.to_s]
|
|
@@ -72,7 +72,7 @@ module Mongoid
|
|
|
72
72
|
#
|
|
73
73
|
# @param [ Object ] value The value.
|
|
74
74
|
#
|
|
75
|
-
# @return [ true
|
|
75
|
+
# @return [ true | false ] If the value is not present.
|
|
76
76
|
def not_present?(value)
|
|
77
77
|
value.blank? && value != false
|
|
78
78
|
end
|
|
@@ -16,7 +16,7 @@ module Mongoid
|
|
|
16
16
|
# end
|
|
17
17
|
#
|
|
18
18
|
# It is also possible to limit the uniqueness constraint to a set of
|
|
19
|
-
#
|
|
19
|
+
# documents matching certain conditions:
|
|
20
20
|
# class Person
|
|
21
21
|
# include Mongoid::Document
|
|
22
22
|
# field :title
|
|
@@ -74,7 +74,7 @@ module Mongoid
|
|
|
74
74
|
# @example Is the validation case sensitive?
|
|
75
75
|
# validator.case_sensitive?
|
|
76
76
|
#
|
|
77
|
-
# @return [ true
|
|
77
|
+
# @return [ true | false ] If the validation is case sensitive.
|
|
78
78
|
def case_sensitive?
|
|
79
79
|
!(options[:case_sensitive] == false)
|
|
80
80
|
end
|
|
@@ -86,7 +86,7 @@ module Mongoid
|
|
|
86
86
|
# @example Create the criteria.
|
|
87
87
|
# validator.create_criteria(User, user, :name, "syd")
|
|
88
88
|
#
|
|
89
|
-
# @param [ Class
|
|
89
|
+
# @param [ Class | Proxy ] base The base to execute the criteria from.
|
|
90
90
|
# @param [ Document ] document The document to validate.
|
|
91
91
|
# @param [ Symbol ] attribute The name of the attribute.
|
|
92
92
|
# @param [ Object ] value The value of the object.
|
|
@@ -149,7 +149,7 @@ module Mongoid
|
|
|
149
149
|
#
|
|
150
150
|
# @param [ Object ] value The value to filter.
|
|
151
151
|
#
|
|
152
|
-
# @return [ Object
|
|
152
|
+
# @return [ Object | Regexp ] The value, filtered or not.
|
|
153
153
|
def filter(value)
|
|
154
154
|
!case_sensitive? && value ? /\A#{Regexp.escape(value.to_s)}\z/i : value
|
|
155
155
|
end
|
|
@@ -182,7 +182,7 @@ module Mongoid
|
|
|
182
182
|
#
|
|
183
183
|
# @param [ Document ] document The embedded document.
|
|
184
184
|
#
|
|
185
|
-
# @return [ true
|
|
185
|
+
# @return [ true | false ] If the validation should be skipped.
|
|
186
186
|
def skip_validation?(document)
|
|
187
187
|
!document._parent || document.embedded_one?
|
|
188
188
|
end
|
|
@@ -196,7 +196,7 @@ module Mongoid
|
|
|
196
196
|
#
|
|
197
197
|
# @param [ Document ] document The embedded document.
|
|
198
198
|
#
|
|
199
|
-
# @return [ true
|
|
199
|
+
# @return [ true | false ] If the scope reference has changed.
|
|
200
200
|
def scope_value_changed?(document)
|
|
201
201
|
Array.wrap(options[:scope]).any? do |item|
|
|
202
202
|
document.send("attribute_changed?", item.to_s)
|
|
@@ -242,6 +242,7 @@ module Mongoid
|
|
|
242
242
|
relation = document._parent.send(document.association_name)
|
|
243
243
|
criteria = create_criteria(relation, document, attribute, value)
|
|
244
244
|
criteria = criteria.merge(options[:conditions].call) if options[:conditions]
|
|
245
|
+
criteria = criteria.limit(2)
|
|
245
246
|
add_error(document, attribute, value) if criteria.count > 1
|
|
246
247
|
end
|
|
247
248
|
|
|
@@ -277,7 +278,7 @@ module Mongoid
|
|
|
277
278
|
# @param [ Document ] document The document getting validated.
|
|
278
279
|
# @param [ Symbol ] attribute The attribute to validate.
|
|
279
280
|
#
|
|
280
|
-
# @return [ true
|
|
281
|
+
# @return [ true | false ] If we need to validate.
|
|
281
282
|
def validation_required?(document, attribute)
|
|
282
283
|
document.new_record? ||
|
|
283
284
|
document.send("attribute_changed?", attribute.to_s) ||
|
|
@@ -294,7 +295,7 @@ module Mongoid
|
|
|
294
295
|
# @param [ Document ] document The document getting validated.
|
|
295
296
|
# @param [ Symbol ] attribute The attribute to validate.
|
|
296
297
|
#
|
|
297
|
-
# @return [ true
|
|
298
|
+
# @return [ true | false ] If the attribute is localized.
|
|
298
299
|
def localized?(document, attribute)
|
|
299
300
|
document.fields[document.database_field_name(attribute)].try(:localized?)
|
|
300
301
|
end
|
data/lib/mongoid/validatable.rb
CHANGED
|
@@ -44,7 +44,7 @@ module Mongoid
|
|
|
44
44
|
#
|
|
45
45
|
# @param [ Hash ] options The options to check.
|
|
46
46
|
#
|
|
47
|
-
# @return [ true
|
|
47
|
+
# @return [ true | false ] If we are validating.
|
|
48
48
|
def performing_validations?(options = {})
|
|
49
49
|
options[:validate].nil? ? true : options[:validate]
|
|
50
50
|
end
|
|
@@ -83,7 +83,7 @@ module Mongoid
|
|
|
83
83
|
#
|
|
84
84
|
# @param [ Symbol ] context The optional validation context.
|
|
85
85
|
#
|
|
86
|
-
# @return [ true
|
|
86
|
+
# @return [ true | false ] True if valid, false if not.
|
|
87
87
|
def valid?(context = nil)
|
|
88
88
|
super context ? context : (new_record? ? :create : :update)
|
|
89
89
|
end
|
|
@@ -93,7 +93,7 @@ module Mongoid
|
|
|
93
93
|
# @example Is the document validated?
|
|
94
94
|
# document.validated?
|
|
95
95
|
#
|
|
96
|
-
# @return [ true
|
|
96
|
+
# @return [ true | false ] Has the document already been validated?
|
|
97
97
|
def validated?
|
|
98
98
|
Threaded.validated?(self)
|
|
99
99
|
end
|
|
@@ -103,7 +103,7 @@ module Mongoid
|
|
|
103
103
|
# @example Are we validating with a query?
|
|
104
104
|
# document.validating_with_query?
|
|
105
105
|
#
|
|
106
|
-
# @return [ true
|
|
106
|
+
# @return [ true | false ] If we are validating with a query.
|
|
107
107
|
def validating_with_query?
|
|
108
108
|
self.class.validating_with_query?
|
|
109
109
|
end
|
|
@@ -129,7 +129,7 @@ module Mongoid
|
|
|
129
129
|
# @example Validate with a specific validator.
|
|
130
130
|
# validates_with MyValidator, on: :create
|
|
131
131
|
#
|
|
132
|
-
# @param [ Class<Array
|
|
132
|
+
# @param [ Class<Array> | Hash ] args The validator classes and options.
|
|
133
133
|
#
|
|
134
134
|
# @note See ActiveModel::Validations::With for full options. This is
|
|
135
135
|
# overridden to add autosave functionality when presence validation is
|
|
@@ -151,7 +151,7 @@ module Mongoid
|
|
|
151
151
|
# @example Are we validating with a query?
|
|
152
152
|
# Model.validating_with_query?
|
|
153
153
|
#
|
|
154
|
-
# @return [ true
|
|
154
|
+
# @return [ true | false ] If we are validating with a query.
|
|
155
155
|
def validating_with_query?
|
|
156
156
|
Threaded.executing?("#{name}-validate-with-query")
|
|
157
157
|
end
|
data/lib/mongoid/version.rb
CHANGED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongoid
|
|
4
|
+
|
|
5
|
+
# Encapsulates behavior around logging and caching warnings so they are only
|
|
6
|
+
# logged once.
|
|
7
|
+
#
|
|
8
|
+
# @api private
|
|
9
|
+
module Warnings
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
def warning(id, message)
|
|
13
|
+
singleton_class.class_eval do
|
|
14
|
+
define_method("warn_#{id}") do
|
|
15
|
+
unless instance_variable_get("@#{id}")
|
|
16
|
+
Mongoid.logger.warn(message)
|
|
17
|
+
instance_variable_set("@#{id}", true)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
warning :geo_haystack_deprecated, 'The geoHaystack type is deprecated.'
|
|
25
|
+
warning :as_json_compact_deprecated, '#as_json :compact option is deprecated. Please call #compact on the returned Hash object instead.'
|
|
26
|
+
warning :symbol_type_deprecated, 'The BSON Symbol type is deprecated by MongoDB. Please use String or StringifiedSymbol field types instead of the Symbol field type'
|
|
27
|
+
end
|
|
28
|
+
end
|
data/lib/mongoid.rb
CHANGED
|
@@ -16,6 +16,7 @@ require "mongo"
|
|
|
16
16
|
require 'mongo/active_support'
|
|
17
17
|
|
|
18
18
|
require "mongoid/version"
|
|
19
|
+
require "mongoid/deprecable"
|
|
19
20
|
require "mongoid/config"
|
|
20
21
|
require "mongoid/persistence_context"
|
|
21
22
|
require "mongoid/loggable"
|
|
@@ -23,6 +24,7 @@ require "mongoid/clients"
|
|
|
23
24
|
require "mongoid/document"
|
|
24
25
|
require "mongoid/tasks/database"
|
|
25
26
|
require "mongoid/query_cache"
|
|
27
|
+
require "mongoid/warnings"
|
|
26
28
|
|
|
27
29
|
# If we are using Rails then we will include the Mongoid railtie. This has all
|
|
28
30
|
# the nifty initializers that Mongoid needs.
|
|
@@ -80,8 +80,13 @@ development:
|
|
|
80
80
|
# (default: 10)
|
|
81
81
|
# connect_timeout: 10
|
|
82
82
|
|
|
83
|
-
#
|
|
84
|
-
#
|
|
83
|
+
# How long to wait for a response for each operation sent to the
|
|
84
|
+
# server. This timeout should be set to a value larger than the
|
|
85
|
+
# processing time for the longest operation that will be executed
|
|
86
|
+
# by the application. Note that this is a client-side timeout;
|
|
87
|
+
# the server may continue executing an operation after the client
|
|
88
|
+
# aborts it with the SocketTimeout exception.
|
|
89
|
+
# (default: nil, meaning no timeout)
|
|
85
90
|
# socket_timeout: 5
|
|
86
91
|
|
|
87
92
|
# The name of the replica set to connect to. Servers provided as seeds that do
|
|
@@ -120,9 +125,6 @@ development:
|
|
|
120
125
|
# database name is not explicitly defined. (default: nil)
|
|
121
126
|
# app_name: MyApplicationName
|
|
122
127
|
|
|
123
|
-
# Create indexes in background by default. (default: false)
|
|
124
|
-
# background_indexing: false
|
|
125
|
-
|
|
126
128
|
# Mark belongs_to associations as required by default, so that saving a
|
|
127
129
|
# model with a missing belongs_to association will trigger a validation
|
|
128
130
|
# error. (default: true)
|
|
@@ -167,6 +169,10 @@ development:
|
|
|
167
169
|
# (default: false)
|
|
168
170
|
# use_utc: false
|
|
169
171
|
|
|
172
|
+
# (Deprecated) In MongoDB 4.0 and earlier, set whether to create
|
|
173
|
+
# indexes in the background by default. (default: false)
|
|
174
|
+
# background_indexing: false
|
|
175
|
+
|
|
170
176
|
test:
|
|
171
177
|
clients:
|
|
172
178
|
default:
|
data/spec/config/mongoid.yml
CHANGED
|
@@ -40,6 +40,22 @@ test:
|
|
|
40
40
|
app_name: 'testing'
|
|
41
41
|
background_indexing: false
|
|
42
42
|
join_contexts: false
|
|
43
|
+
driver_options:
|
|
44
|
+
broken_view_options: false
|
|
45
|
+
# Don't set validate_update_replace here, as it is used to check if the
|
|
46
|
+
# default driver options are kept in Mongoid.
|
|
47
|
+
test_nil:
|
|
48
|
+
clients:
|
|
49
|
+
default:
|
|
50
|
+
database: mongoid_test
|
|
51
|
+
hosts:
|
|
52
|
+
<% SpecConfig.instance.addresses.each do |address| %>
|
|
53
|
+
- <%= address %>
|
|
54
|
+
<% end %>
|
|
55
|
+
driver_options:
|
|
56
|
+
broken_view_options:
|
|
57
|
+
validate_update_replace: false
|
|
58
|
+
|
|
43
59
|
test_with_max_staleness:
|
|
44
60
|
clients:
|
|
45
61
|
default:
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
test:
|
|
2
|
+
clients:
|
|
3
|
+
default:
|
|
4
|
+
database: mongoid_test
|
|
5
|
+
hosts:
|
|
6
|
+
<% SpecConfig.instance.addresses.each do |address| %>
|
|
7
|
+
- <%= address %>
|
|
8
|
+
<% end %>
|
|
9
|
+
options:
|
|
10
|
+
auto_encryption_options:
|
|
11
|
+
key_vault_namespace: 'admin.datakeys'
|
|
12
|
+
kms_providers:
|
|
13
|
+
local:
|
|
14
|
+
key: "z7iYiYKLuYymEWtk4kfny1ESBwwFdA58qMqff96A8ghiOcIK75lJGPUIocku8LOFjQuEgeIP4xlln3s7r93FV9J5sAE7zg8U"
|
|
15
|
+
schema_map:
|
|
16
|
+
blog_development.comments:
|
|
17
|
+
properties:
|
|
18
|
+
message:
|
|
19
|
+
encrypt:
|
|
20
|
+
keyId:
|
|
21
|
+
- !ruby/object:BSON::Binary
|
|
22
|
+
data: !binary |-
|
|
23
|
+
R/AgNcxASFiiJWKXqWGo5w==
|
|
24
|
+
type: :uuid
|
|
25
|
+
bsonType: "string"
|
|
26
|
+
algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
|
|
27
|
+
bsonType: "object"
|
|
@@ -5,6 +5,11 @@ require 'spec_helper'
|
|
|
5
5
|
BASE = File.join(File.dirname(__FILE__), '../..')
|
|
6
6
|
TMP_BASE = File.join(BASE, 'tmp')
|
|
7
7
|
|
|
8
|
+
def check_call(cmd, **opts)
|
|
9
|
+
puts "Executing #{cmd.join(' ')}"
|
|
10
|
+
Mrss::ChildProcessHelper.check_call(cmd, **opts)
|
|
11
|
+
end
|
|
12
|
+
|
|
8
13
|
describe 'Mongoid application tests' do
|
|
9
14
|
before(:all) do
|
|
10
15
|
unless SpecConfig.instance.app_tests?
|
|
@@ -87,14 +92,14 @@ describe 'Mongoid application tests' do
|
|
|
87
92
|
|
|
88
93
|
Dir.chdir(TMP_BASE) do
|
|
89
94
|
FileUtils.rm_rf('mongoid-test')
|
|
90
|
-
|
|
95
|
+
check_call(%w(rails new mongoid-test --skip-spring --skip-active-record), env: clean_env)
|
|
91
96
|
|
|
92
97
|
Dir.chdir('mongoid-test') do
|
|
93
98
|
adjust_app_gemfile
|
|
94
|
-
|
|
99
|
+
check_call(%w(bundle install), env: clean_env)
|
|
95
100
|
|
|
96
|
-
|
|
97
|
-
|
|
101
|
+
check_call(%w(rails g model post), env: clean_env)
|
|
102
|
+
check_call(%w(rails g model comment post:belongs_to), env: clean_env)
|
|
98
103
|
|
|
99
104
|
# https://jira.mongodb.org/browse/MONGOID-4885
|
|
100
105
|
comment_text = File.read('app/models/comment.rb')
|
|
@@ -109,16 +114,16 @@ describe 'Mongoid application tests' do
|
|
|
109
114
|
|
|
110
115
|
Dir.chdir(TMP_BASE) do
|
|
111
116
|
FileUtils.rm_rf('mongoid-test-config')
|
|
112
|
-
|
|
117
|
+
check_call(%w(rails new mongoid-test-config --skip-spring --skip-active-record), env: clean_env)
|
|
113
118
|
|
|
114
119
|
Dir.chdir('mongoid-test-config') do
|
|
115
120
|
adjust_app_gemfile
|
|
116
|
-
|
|
121
|
+
check_call(%w(bundle install), env: clean_env)
|
|
117
122
|
|
|
118
123
|
mongoid_config_file = File.join(TMP_BASE,'mongoid-test-config/config/mongoid.yml')
|
|
119
124
|
|
|
120
125
|
File.exist?(mongoid_config_file).should be false
|
|
121
|
-
|
|
126
|
+
check_call(%w(rails g mongoid:config), env: clean_env)
|
|
122
127
|
File.exist?(mongoid_config_file).should be true
|
|
123
128
|
|
|
124
129
|
config_text = File.read(mongoid_config_file)
|
|
@@ -130,10 +135,11 @@ describe 'Mongoid application tests' do
|
|
|
130
135
|
end
|
|
131
136
|
|
|
132
137
|
def install_rails
|
|
133
|
-
|
|
138
|
+
check_call(%w(gem uni rails -a))
|
|
134
139
|
if (rails_version = SpecConfig.instance.rails_version) == 'master'
|
|
135
140
|
else
|
|
136
|
-
|
|
141
|
+
check_call(%w(gem list))
|
|
142
|
+
check_call(%w(gem install rails --no-document -v) + ["~> #{rails_version}.0"])
|
|
137
143
|
end
|
|
138
144
|
end
|
|
139
145
|
|
|
@@ -157,7 +163,15 @@ describe 'Mongoid application tests' do
|
|
|
157
163
|
before do
|
|
158
164
|
Dir.chdir(APP_PATH) do
|
|
159
165
|
remove_bundler_req
|
|
160
|
-
|
|
166
|
+
|
|
167
|
+
if BSON::Environment.jruby?
|
|
168
|
+
# Remove existing Gemfile.lock - see
|
|
169
|
+
# https://github.com/rubygems/rubygems/issues/3231
|
|
170
|
+
require 'fileutils'
|
|
171
|
+
FileUtils.rm_f('Gemfile.lock')
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
check_call(%w(bundle install), env: env)
|
|
161
175
|
write_mongoid_yml
|
|
162
176
|
end
|
|
163
177
|
|
|
@@ -171,7 +185,7 @@ describe 'Mongoid application tests' do
|
|
|
171
185
|
end
|
|
172
186
|
index.should be nil
|
|
173
187
|
|
|
174
|
-
|
|
188
|
+
check_call(%w(bundle exec rake db:mongoid:create_indexes -t),
|
|
175
189
|
cwd: APP_PATH, env: env)
|
|
176
190
|
|
|
177
191
|
index = client['posts'].indexes.detect do |index|
|
|
@@ -189,11 +203,11 @@ describe 'Mongoid application tests' do
|
|
|
189
203
|
def clone_application(repo_url, subdir: nil)
|
|
190
204
|
Dir.chdir(TMP_BASE) do
|
|
191
205
|
FileUtils.rm_rf(File.basename(repo_url))
|
|
192
|
-
|
|
206
|
+
check_call(%w(git clone) + [repo_url])
|
|
193
207
|
Dir.chdir(File.join(*[File.basename(repo_url), subdir].compact)) do
|
|
194
208
|
adjust_app_gemfile
|
|
195
209
|
adjust_rails_defaults
|
|
196
|
-
|
|
210
|
+
check_call(%w(bundle install), env: clean_env)
|
|
197
211
|
puts `git diff`
|
|
198
212
|
|
|
199
213
|
write_mongoid_yml
|
|
@@ -281,18 +295,6 @@ describe 'Mongoid application tests' do
|
|
|
281
295
|
f << lines.join
|
|
282
296
|
end
|
|
283
297
|
end
|
|
284
|
-
|
|
285
|
-
if rails_version == '5.1'
|
|
286
|
-
secrets = {
|
|
287
|
-
'development' => {
|
|
288
|
-
'secret_key_base' => 'abracadabra',
|
|
289
|
-
'my_secret_token' => 'very_secret',
|
|
290
|
-
},
|
|
291
|
-
}
|
|
292
|
-
File.open('config/secrets.yml', 'w') do |f|
|
|
293
|
-
f << YAML.dump(secrets)
|
|
294
|
-
end
|
|
295
|
-
end
|
|
296
298
|
end
|
|
297
299
|
|
|
298
300
|
def remove_bundler_req
|
|
@@ -316,7 +318,7 @@ describe 'Mongoid application tests' do
|
|
|
316
318
|
# in `initialize': too long unix socket path (126bytes given but 108bytes max) (ArgumentError)
|
|
317
319
|
# Is it trying to create unix sockets in current directory?
|
|
318
320
|
# https://stackoverflow.com/questions/30302021/rails-runner-without-spring
|
|
319
|
-
|
|
321
|
+
check_call(%w(bin/spring binstub --remove --all), env: clean_env)
|
|
320
322
|
end
|
|
321
323
|
|
|
322
324
|
def clean_env
|
|
@@ -12,4 +12,22 @@ describe 'belongs_to associations' do
|
|
|
12
12
|
expect(child).to be_valid
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
|
+
|
|
16
|
+
context 'when an anonymous class defines a belongs_to association' do
|
|
17
|
+
let(:klass) do
|
|
18
|
+
Class.new do
|
|
19
|
+
include Mongoid::Document
|
|
20
|
+
belongs_to :movie
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'loads the association correctly' do
|
|
25
|
+
expect { klass }.to_not raise_error
|
|
26
|
+
expect { klass.new.movie }.to_not raise_error
|
|
27
|
+
instance = klass.new
|
|
28
|
+
movie = Movie.new
|
|
29
|
+
instance.movie = movie
|
|
30
|
+
expect(instance.movie).to eq movie
|
|
31
|
+
end
|
|
32
|
+
end
|
|
15
33
|
end
|