mongoid 9.0.12 → 9.1.0
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
- data/CHANGELOG.md +8 -8
- data/README.md +5 -11
- data/Rakefile +35 -38
- data/lib/config/locales/en.yml +11 -45
- data/lib/mongoid/association/accessors.rb +19 -26
- data/lib/mongoid/association/bindable.rb +43 -45
- data/lib/mongoid/association/builders.rb +18 -15
- data/lib/mongoid/association/constrainable.rb +3 -5
- data/lib/mongoid/association/depending.rb +38 -46
- data/lib/mongoid/association/eager.rb +47 -13
- data/lib/mongoid/association/eager_loadable.rb +152 -24
- data/lib/mongoid/association/embedded/batchable.rb +28 -30
- data/lib/mongoid/association/embedded/cyclic.rb +8 -11
- data/lib/mongoid/association/embedded/eager.rb +1 -6
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +6 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +25 -22
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many.rb +24 -21
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +2 -6
- data/lib/mongoid/association/embedded/embeds_one.rb +20 -18
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +3 -7
- data/lib/mongoid/association/many.rb +75 -3
- data/lib/mongoid/association/marshalable.rb +0 -3
- data/lib/mongoid/association/nested/many.rb +23 -47
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -23
- data/lib/mongoid/association/nested/one.rb +4 -7
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +0 -3
- data/lib/mongoid/association/options.rb +8 -7
- data/lib/mongoid/association/referenced/auto_save.rb +0 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
- data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
- data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
- data/lib/mongoid/association/referenced/has_many/proxy.rb +11 -106
- data/lib/mongoid/association/referenced/has_many.rb +30 -24
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_one.rb +26 -21
- data/lib/mongoid/association/referenced/syncable.rb +30 -34
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +0 -3
- data/lib/mongoid/association/relatable.rb +69 -83
- data/lib/mongoid/association.rb +12 -15
- data/lib/mongoid/atomic/modifiers.rb +65 -25
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +2 -4
- data/lib/mongoid/atomic/paths/embedded.rb +3 -6
- data/lib/mongoid/atomic/paths/root.rb +1 -4
- data/lib/mongoid/atomic/paths.rb +2 -3
- data/lib/mongoid/atomic.rb +0 -3
- data/lib/mongoid/attributes/dynamic.rb +6 -7
- data/lib/mongoid/attributes/nested.rb +8 -10
- data/lib/mongoid/attributes/projector.rb +7 -20
- data/lib/mongoid/attributes/readonly.rb +6 -11
- data/lib/mongoid/attributes.rb +18 -34
- data/lib/mongoid/cacheable.rb +24 -6
- data/lib/mongoid/clients/factory.rb +12 -15
- data/lib/mongoid/clients/options.rb +2 -5
- data/lib/mongoid/clients/sessions.rb +50 -60
- data/lib/mongoid/clients/storage_options.rb +1 -4
- data/lib/mongoid/clients/validators/storage.rb +2 -3
- data/lib/mongoid/clients/validators.rb +1 -2
- data/lib/mongoid/clients.rb +8 -11
- data/lib/mongoid/collection_configurable.rb +10 -22
- data/lib/mongoid/composable.rb +30 -34
- data/lib/mongoid/config/defaults.rb +7 -4
- data/lib/mongoid/config/encryption.rb +19 -39
- data/lib/mongoid/config/environment.rb +7 -16
- data/lib/mongoid/config/introspection.rb +14 -16
- data/lib/mongoid/config/options.rb +16 -10
- data/lib/mongoid/config/validators/async_query_executor.rb +3 -6
- data/lib/mongoid/config/validators/client.rb +12 -15
- data/lib/mongoid/config/validators/option.rb +3 -5
- data/lib/mongoid/config/validators.rb +3 -4
- data/lib/mongoid/config.rb +127 -84
- data/lib/mongoid/contextual/aggregable/memory.rb +4 -9
- data/lib/mongoid/contextual/aggregable/mongo.rb +20 -22
- data/lib/mongoid/contextual/aggregable/none.rb +2 -4
- data/lib/mongoid/contextual/aggregable.rb +5 -7
- data/lib/mongoid/contextual/atomic.rb +20 -24
- data/lib/mongoid/contextual/command.rb +0 -3
- data/lib/mongoid/contextual/map_reduce.rb +12 -16
- data/lib/mongoid/contextual/memory.rb +76 -80
- data/lib/mongoid/contextual/mongo/documents_loader.rb +2 -3
- data/lib/mongoid/contextual/mongo.rb +169 -85
- data/lib/mongoid/contextual/none.rb +9 -9
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +7 -9
- data/lib/mongoid/criteria/findable.rb +5 -7
- data/lib/mongoid/criteria/includable.rb +37 -8
- data/lib/mongoid/criteria/inspectable.rb +2 -5
- data/lib/mongoid/criteria/marshalable.rb +4 -8
- data/lib/mongoid/criteria/modifiable.rb +3 -11
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +34 -37
- data/lib/mongoid/criteria/queryable/aggregable.rb +9 -10
- data/lib/mongoid/criteria/queryable/expandable.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -10
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +20 -11
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -11
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -8
- data/lib/mongoid/criteria/queryable/extensions/range.rb +6 -9
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -12
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -6
- data/lib/mongoid/criteria/queryable/extensions/string.rb +5 -9
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +2 -12
- data/lib/mongoid/criteria/queryable/extensions.rb +18 -21
- data/lib/mongoid/criteria/queryable/key.rb +12 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +31 -43
- data/lib/mongoid/criteria/queryable/optional.rb +17 -18
- data/lib/mongoid/criteria/queryable/options.rb +20 -9
- data/lib/mongoid/criteria/queryable/pipeline.rb +6 -9
- data/lib/mongoid/criteria/queryable/selectable.rb +130 -301
- data/lib/mongoid/criteria/queryable/selector.rb +20 -29
- data/lib/mongoid/criteria/queryable/smash.rb +1 -6
- data/lib/mongoid/criteria/queryable/storable.rb +20 -39
- data/lib/mongoid/criteria/queryable.rb +25 -15
- data/lib/mongoid/criteria/scopable.rb +5 -11
- data/lib/mongoid/criteria/translator.rb +5 -8
- data/lib/mongoid/criteria.rb +109 -54
- data/lib/mongoid/deprecable.rb +1 -4
- data/lib/mongoid/deprecation.rb +2 -6
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/encryptable.rb +1 -48
- data/lib/mongoid/equality.rb +4 -5
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +1 -4
- data/lib/mongoid/errors/callback.rb +1 -4
- data/lib/mongoid/errors/create_collection_failure.rb +8 -11
- data/lib/mongoid/errors/criteria_argument_required.rb +2 -5
- data/lib/mongoid/errors/delete_restriction.rb +1 -4
- data/lib/mongoid/errors/document_not_destroyed.rb +1 -4
- data/lib/mongoid/errors/document_not_found.rb +16 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +7 -10
- data/lib/mongoid/errors/empty_config_file.rb +1 -4
- data/lib/mongoid/errors/immutable_attribute.rb +1 -4
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -4
- data/lib/mongoid/errors/invalid_async_query_executor.rb +2 -5
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +2 -5
- data/lib/mongoid/errors/invalid_collection.rb +1 -3
- data/lib/mongoid/errors/invalid_config_file.rb +1 -4
- data/lib/mongoid/errors/invalid_config_option.rb +2 -5
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +6 -10
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +2 -4
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -4
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +1 -4
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +1 -4
- data/lib/mongoid/errors/invalid_expression_operator.rb +3 -7
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_field_option.rb +2 -5
- data/lib/mongoid/errors/invalid_field_type.rb +1 -4
- data/lib/mongoid/errors/invalid_find.rb +1 -4
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -4
- data/lib/mongoid/errors/invalid_includes.rb +3 -6
- data/lib/mongoid/errors/invalid_index.rb +1 -4
- data/lib/mongoid/errors/invalid_options.rb +1 -4
- data/lib/mongoid/errors/invalid_path.rb +1 -4
- data/lib/mongoid/errors/invalid_persistence_option.rb +4 -7
- data/lib/mongoid/errors/invalid_query.rb +6 -11
- data/lib/mongoid/errors/invalid_relation.rb +10 -13
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -7
- data/lib/mongoid/errors/invalid_scope.rb +1 -4
- data/lib/mongoid/errors/invalid_session_nesting.rb +0 -3
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +2 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -4
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +1 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -4
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +7 -11
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -4
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -4
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +1 -4
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -4
- data/lib/mongoid/errors/no_metadata.rb +1 -4
- data/lib/mongoid/errors/no_parent.rb +1 -4
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -4
- data/lib/mongoid/errors/rollback.rb +0 -2
- data/lib/mongoid/errors/scope_overwrite.rb +2 -4
- data/lib/mongoid/errors/sessions_not_supported.rb +0 -3
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -3
- data/lib/mongoid/errors/transaction_error.rb +0 -3
- data/lib/mongoid/errors/transactions_not_supported.rb +0 -3
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -4
- data/lib/mongoid/errors/unregistered_class.rb +1 -1
- data/lib/mongoid/errors/unsaved_document.rb +1 -3
- data/lib/mongoid/errors/unsupported_isolation_level.rb +22 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -4
- data/lib/mongoid/errors/validations.rb +3 -5
- data/lib/mongoid/errors.rb +72 -74
- data/lib/mongoid/evolvable.rb +0 -3
- data/lib/mongoid/extensions/array.rb +5 -7
- data/lib/mongoid/extensions/big_decimal.rb +6 -7
- data/lib/mongoid/extensions/binary.rb +3 -6
- data/lib/mongoid/extensions/boolean.rb +4 -7
- data/lib/mongoid/extensions/bson_document.rb +28 -0
- data/lib/mongoid/extensions/date.rb +10 -14
- data/lib/mongoid/extensions/date_time.rb +2 -6
- data/lib/mongoid/extensions/decimal128.rb +1 -5
- data/lib/mongoid/extensions/false_class.rb +3 -5
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +5 -10
- data/lib/mongoid/extensions/integer.rb +5 -10
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -1
- data/lib/mongoid/extensions/object.rb +9 -14
- data/lib/mongoid/extensions/object_id.rb +2 -6
- data/lib/mongoid/extensions/range.rb +14 -15
- data/lib/mongoid/extensions/raw_value.rb +0 -3
- data/lib/mongoid/extensions/regexp.rb +3 -6
- data/lib/mongoid/extensions/set.rb +3 -4
- data/lib/mongoid/extensions/string.rb +8 -12
- data/lib/mongoid/extensions/symbol.rb +3 -7
- data/lib/mongoid/extensions/time.rb +24 -26
- data/lib/mongoid/extensions/time_with_zone.rb +4 -7
- data/lib/mongoid/extensions/true_class.rb +3 -5
- data/lib/mongoid/extensions.rb +26 -26
- data/lib/mongoid/factory.rb +5 -9
- data/lib/mongoid/fields/encrypted.rb +0 -1
- data/lib/mongoid/fields/foreign_key.rb +9 -10
- data/lib/mongoid/fields/localized.rb +12 -12
- data/lib/mongoid/fields/standard.rb +5 -7
- data/lib/mongoid/fields/validators/macro.rb +23 -34
- data/lib/mongoid/fields/validators.rb +1 -2
- data/lib/mongoid/fields.rb +151 -58
- data/lib/mongoid/findable.rb +82 -53
- data/lib/mongoid/indexable/specification.rb +20 -6
- data/lib/mongoid/indexable/validators/options.rb +33 -40
- data/lib/mongoid/indexable.rb +41 -52
- data/lib/mongoid/inspectable.rb +4 -7
- data/lib/mongoid/interceptable.rb +41 -40
- data/lib/mongoid/loadable.rb +17 -18
- data/lib/mongoid/loggable.rb +4 -8
- data/lib/mongoid/matchable.rb +1 -8
- data/lib/mongoid/matcher/all.rb +2 -5
- data/lib/mongoid/matcher/and.rb +0 -3
- data/lib/mongoid/matcher/bits.rb +13 -8
- data/lib/mongoid/matcher/bits_all_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_all_set.rb +1 -3
- data/lib/mongoid/matcher/bits_any_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_any_set.rb +1 -3
- data/lib/mongoid/matcher/elem_match.rb +13 -15
- data/lib/mongoid/matcher/elem_match_expression.rb +0 -3
- data/lib/mongoid/matcher/eq.rb +0 -3
- data/lib/mongoid/matcher/eq_impl.rb +12 -17
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +4 -2
- data/lib/mongoid/matcher/exists.rb +1 -4
- data/lib/mongoid/matcher/expression.rb +5 -10
- data/lib/mongoid/matcher/expression_operator.rb +1 -3
- data/lib/mongoid/matcher/field_expression.rb +10 -13
- data/lib/mongoid/matcher/field_operator.rb +4 -6
- data/lib/mongoid/matcher/gt.rb +0 -3
- data/lib/mongoid/matcher/gte.rb +0 -3
- data/lib/mongoid/matcher/in.rb +9 -12
- data/lib/mongoid/matcher/lt.rb +0 -3
- data/lib/mongoid/matcher/lte.rb +0 -3
- data/lib/mongoid/matcher/mod.rb +4 -8
- data/lib/mongoid/matcher/ne.rb +0 -3
- data/lib/mongoid/matcher/nin.rb +0 -3
- data/lib/mongoid/matcher/nor.rb +1 -6
- data/lib/mongoid/matcher/not.rb +0 -3
- data/lib/mongoid/matcher/or.rb +0 -3
- data/lib/mongoid/matcher/regex.rb +12 -11
- data/lib/mongoid/matcher/size.rb +2 -5
- data/lib/mongoid/matcher/type.rb +32 -37
- data/lib/mongoid/matcher.rb +7 -16
- data/lib/mongoid/model_resolver.rb +1 -0
- data/lib/mongoid/persistable/creatable.rb +23 -7
- data/lib/mongoid/persistable/deletable.rb +6 -7
- data/lib/mongoid/persistable/destroyable.rb +2 -6
- data/lib/mongoid/persistable/incrementable.rb +1 -3
- data/lib/mongoid/persistable/logical.rb +3 -5
- data/lib/mongoid/persistable/maxable.rb +2 -4
- data/lib/mongoid/persistable/minable.rb +2 -4
- data/lib/mongoid/persistable/multipliable.rb +1 -3
- data/lib/mongoid/persistable/poppable.rb +2 -4
- data/lib/mongoid/persistable/pullable.rb +3 -5
- data/lib/mongoid/persistable/pushable.rb +5 -7
- data/lib/mongoid/persistable/renamable.rb +1 -3
- data/lib/mongoid/persistable/savable.rb +0 -3
- data/lib/mongoid/persistable/settable.rb +4 -13
- data/lib/mongoid/persistable/unsettable.rb +1 -3
- data/lib/mongoid/persistable/updatable.rb +16 -24
- data/lib/mongoid/persistable/upsertable.rb +8 -10
- data/lib/mongoid/persistable.rb +28 -27
- data/lib/mongoid/persistence_context.rb +34 -76
- data/lib/mongoid/pluckable.rb +0 -2
- data/lib/mongoid/positional.rb +5 -11
- data/lib/mongoid/railtie.rb +16 -22
- data/lib/mongoid/railties/console_sandbox.rb +6 -8
- data/lib/mongoid/railties/controller_runtime.rb +7 -11
- data/lib/mongoid/railties/database.rake +42 -44
- data/lib/mongoid/scopable.rb +23 -31
- data/lib/mongoid/search_indexable.rb +337 -14
- data/lib/mongoid/selectable.rb +1 -3
- data/lib/mongoid/serializable.rb +6 -8
- data/lib/mongoid/shardable.rb +8 -17
- data/lib/mongoid/stateful.rb +5 -10
- data/lib/mongoid/stringified_symbol.rb +5 -9
- data/lib/mongoid/tasks/database.rake +31 -32
- data/lib/mongoid/tasks/database.rb +37 -53
- data/lib/mongoid/tasks/encryption.rb +10 -15
- data/lib/mongoid/threaded/lifecycle.rb +6 -9
- data/lib/mongoid/threaded.rb +132 -69
- data/lib/mongoid/timestamps/created/short.rb +2 -3
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +8 -13
- data/lib/mongoid/timestamps/updated/short.rb +2 -3
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +4 -6
- data/lib/mongoid/touchable.rb +19 -11
- data/lib/mongoid/traversable.rb +3 -2
- data/lib/mongoid/validatable/associated.rb +1 -5
- data/lib/mongoid/validatable/format.rb +0 -2
- data/lib/mongoid/validatable/length.rb +0 -2
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/numericality.rb +24 -3
- data/lib/mongoid/validatable/presence.rb +8 -10
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +12 -14
- data/lib/mongoid/validatable.rb +15 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +10 -11
- data/lib/mongoid.rb +30 -34
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
- data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
- data/lib/rails/generators/mongoid_generator.rb +6 -10
- data/lib/rails/mongoid.rb +1 -3
- data/spec/integration/active_job_spec.rb +1 -2
- data/spec/integration/app_spec.rb +142 -185
- data/spec/integration/associations/belongs_to_spec.rb +30 -28
- data/spec/integration/associations/embedded_dirty_spec.rb +0 -1
- data/spec/integration/associations/embedded_spec.rb +41 -43
- data/spec/integration/associations/embeds_many_spec.rb +46 -29
- data/spec/integration/associations/embeds_one_spec.rb +2 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -11
- data/spec/integration/associations/foreign_key_spec_models.rb +8 -9
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +18 -30
- data/spec/integration/associations/has_many_spec.rb +17 -18
- data/spec/integration/associations/has_one_spec.rb +42 -45
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +36 -39
- data/spec/integration/associations/reverse_population_spec.rb +4 -5
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +18 -20
- data/spec/integration/atomic/modifiers_spec.rb +72 -52
- data/spec/integration/bson_regexp_raw_spec.rb +2 -3
- data/spec/integration/caching_spec.rb +68 -0
- data/spec/integration/callbacks_models.rb +11 -9
- data/spec/integration/callbacks_spec.rb +78 -80
- data/spec/integration/contextual/empty_spec.rb +19 -20
- data/spec/integration/criteria/alias_query_spec.rb +12 -19
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +23 -18
- data/spec/integration/criteria/logical_spec.rb +18 -19
- data/spec/integration/criteria/range_spec.rb +77 -86
- data/spec/integration/criteria/raw_value_spec.rb +122 -109
- data/spec/integration/criteria/time_with_zone_spec.rb +33 -24
- data/spec/integration/discriminator_key_spec.rb +85 -85
- data/spec/integration/discriminator_value_spec.rb +70 -73
- data/spec/integration/document_spec.rb +9 -10
- data/spec/integration/dots_and_dollars_spec.rb +105 -130
- data/spec/integration/encryption_spec.rb +8 -160
- data/spec/integration/i18n_fallbacks_spec.rb +7 -8
- data/spec/integration/isolation_state_spec.rb +241 -0
- data/spec/integration/matcher_examples_spec.rb +145 -168
- data/spec/integration/matcher_operator_data/in.yml +6 -6
- data/spec/integration/matcher_operator_data/regex.yml +0 -21
- data/spec/integration/matcher_operator_spec.rb +16 -26
- data/spec/integration/matcher_spec.rb +31 -32
- data/spec/integration/persistence/collection_options_spec.rb +0 -2
- data/spec/integration/persistence/range_field_spec.rb +24 -2
- data/spec/integration/server_query_spec.rb +43 -37
- data/spec/integration/shardable_spec.rb +10 -11
- data/spec/integration/stringified_symbol_field_spec.rb +28 -43
- data/spec/lite_spec_helper.rb +11 -12
- data/spec/mongoid/association/accessors_spec.rb +197 -285
- data/spec/mongoid/association/auto_save_spec.rb +62 -93
- data/spec/mongoid/association/builders_spec.rb +121 -74
- data/spec/mongoid/association/constrainable_spec.rb +9 -22
- data/spec/mongoid/association/counter_cache_spec.rb +71 -104
- data/spec/mongoid/association/depending_spec.rb +166 -208
- data/spec/mongoid/association/eager_spec.rb +416 -80
- data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
- data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
- data/spec/mongoid/association/macros_spec.rb +213 -300
- data/spec/mongoid/association/nested/many_spec.rb +51 -73
- data/spec/mongoid/association/nested/one_spec.rb +56 -80
- data/spec/mongoid/association/options_spec.rb +187 -310
- data/spec/mongoid/association/polymorphic_spec.rb +35 -53
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
- data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -1023
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +9 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +5 -6
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +59 -177
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +29 -43
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +53 -53
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +104 -67
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +431 -675
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -156
- data/spec/mongoid/association/referenced/has_many_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_many_spec.rb +44 -188
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +26 -38
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +28 -29
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +29 -42
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +270 -332
- data/spec/mongoid/association/referenced/has_one_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_one_spec.rb +40 -188
- data/spec/mongoid/association/reflections_spec.rb +14 -24
- data/spec/mongoid/association/syncable_spec.rb +102 -125
- data/spec/mongoid/association_spec.rb +47 -70
- data/spec/mongoid/atomic/modifiers_spec.rb +184 -197
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +39 -52
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +35 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +9 -15
- data/spec/mongoid/atomic/paths_spec.rb +81 -117
- data/spec/mongoid/atomic_spec.rb +156 -171
- data/spec/mongoid/attributes/dynamic_spec.rb +5 -6
- data/spec/mongoid/attributes/nested_spec.rb +1221 -1888
- data/spec/mongoid/attributes/nested_spec_models.rb +8 -9
- data/spec/mongoid/attributes/projector_spec.rb +2 -6
- data/spec/mongoid/attributes/readonly_spec.rb +73 -97
- data/spec/mongoid/attributes_spec.rb +669 -826
- data/spec/mongoid/cacheable_spec.rb +74 -44
- data/spec/mongoid/changeable_spec.rb +591 -733
- data/spec/mongoid/clients/factory_spec.rb +122 -154
- data/spec/mongoid/clients/options_spec.rb +40 -59
- data/spec/mongoid/clients/sessions_spec.rb +25 -44
- data/spec/mongoid/clients/transactions_spec.rb +33 -50
- data/spec/mongoid/clients/transactions_spec_models.rb +3 -4
- data/spec/mongoid/clients_spec.rb +265 -355
- data/spec/mongoid/collection_configurable_spec.rb +9 -12
- data/spec/mongoid/composable_spec.rb +2 -9
- data/spec/mongoid/config/defaults_spec.rb +24 -49
- data/spec/mongoid/config/encryption_spec.rb +53 -284
- data/spec/mongoid/config/environment_spec.rb +30 -40
- data/spec/mongoid/config/introspection_spec.rb +42 -37
- data/spec/mongoid/config/options_spec.rb +14 -21
- data/spec/mongoid/config_spec.rb +145 -195
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +98 -226
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +4 -7
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +149 -187
- data/spec/mongoid/contextual/aggregable/none_spec.rb +14 -16
- data/spec/mongoid/contextual/atomic_spec.rb +223 -271
- data/spec/mongoid/contextual/map_reduce_spec.rb +110 -138
- data/spec/mongoid/contextual/memory_spec.rb +706 -1031
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +12 -13
- data/spec/mongoid/contextual/mongo_spec.rb +1008 -1213
- data/spec/mongoid/contextual/none_spec.rb +54 -59
- data/spec/mongoid/contextual/short_circuit_spec.rb +139 -0
- data/spec/mongoid/copyable_spec.rb +254 -300
- data/spec/mongoid/copyable_spec_models.rb +0 -1
- data/spec/mongoid/criteria/findable_spec.rb +322 -387
- data/spec/mongoid/criteria/includable_spec.rb +421 -372
- data/spec/mongoid/criteria/includable_spec_models.rb +16 -7
- data/spec/mongoid/criteria/inspectable_spec.rb +11 -14
- data/spec/mongoid/criteria/marshalable_spec.rb +11 -14
- data/spec/mongoid/criteria/modifiable_spec.rb +366 -512
- data/spec/mongoid/criteria/options_spec.rb +2 -7
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +112 -141
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +8 -11
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +127 -184
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +123 -60
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +84 -117
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +44 -65
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +86 -108
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +94 -33
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +103 -138
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +95 -34
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +25 -38
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +26 -28
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +32 -54
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +136 -130
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +16 -24
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +15 -24
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +12 -19
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -63
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +28 -42
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +73 -96
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +71 -92
- data/spec/mongoid/criteria/queryable/key_spec.rb +32 -36
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +44 -49
- data/spec/mongoid/criteria/queryable/optional_spec.rb +373 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +172 -123
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +65 -87
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +41 -53
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +576 -682
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +7 -11
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +807 -998
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +154 -391
- data/spec/mongoid/criteria/queryable/selector_spec.rb +294 -390
- data/spec/mongoid/criteria/queryable/smash_spec.rb +6 -11
- data/spec/mongoid/criteria/queryable/storable_spec.rb +54 -81
- data/spec/mongoid/criteria/queryable_mql_spec.rb +92 -0
- data/spec/mongoid/criteria/scopable_spec.rb +102 -138
- data/spec/mongoid/criteria/translator_spec.rb +59 -60
- data/spec/mongoid/criteria_projection_spec.rb +81 -99
- data/spec/mongoid/criteria_spec.rb +935 -952
- data/spec/mongoid/document_fields_spec.rb +28 -30
- data/spec/mongoid/document_persistence_context_spec.rb +13 -15
- data/spec/mongoid/document_query_spec.rb +9 -12
- data/spec/mongoid/document_spec.rb +317 -409
- data/spec/mongoid/equality_spec.rb +69 -102
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
- data/spec/mongoid/errors/callback_spec.rb +8 -11
- data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
- data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
- data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
- data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
- data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
- data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
- data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
- data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
- data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
- data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
- data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_environment_spec.rb +8 -11
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
- data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
- data/spec/mongoid/errors/no_parent_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
- data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
- data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
- data/spec/mongoid/errors/validations_spec.rb +11 -14
- data/spec/mongoid/extensions/array_spec.rb +70 -92
- data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
- data/spec/mongoid/extensions/binary_spec.rb +21 -32
- data/spec/mongoid/extensions/boolean_spec.rb +52 -75
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
- data/spec/mongoid/extensions/date_spec.rb +26 -38
- data/spec/mongoid/extensions/date_time_spec.rb +22 -32
- data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
- data/spec/mongoid/extensions/false_class_spec.rb +10 -17
- data/spec/mongoid/extensions/float_spec.rb +40 -61
- data/spec/mongoid/extensions/hash_spec.rb +46 -64
- data/spec/mongoid/extensions/integer_spec.rb +40 -61
- data/spec/mongoid/extensions/module_spec.rb +13 -18
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
- data/spec/mongoid/extensions/object_id_spec.rb +159 -247
- data/spec/mongoid/extensions/object_spec.rb +31 -47
- data/spec/mongoid/extensions/range_spec.rb +112 -115
- data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
- data/spec/mongoid/extensions/regexp_spec.rb +23 -36
- data/spec/mongoid/extensions/set_spec.rb +38 -49
- data/spec/mongoid/extensions/string_spec.rb +118 -167
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
- data/spec/mongoid/extensions/symbol_spec.rb +12 -20
- data/spec/mongoid/extensions/time_spec.rb +160 -202
- data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
- data/spec/mongoid/extensions/true_class_spec.rb +10 -17
- data/spec/mongoid/factory_spec.rb +125 -148
- data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
- data/spec/mongoid/fields/localized_spec.rb +140 -185
- data/spec/mongoid/fields/standard_spec.rb +43 -59
- data/spec/mongoid/fields_spec.rb +751 -620
- data/spec/mongoid/findable_spec.rb +260 -228
- data/spec/mongoid/indexable/specification_spec.rb +42 -58
- data/spec/mongoid/indexable_spec.rb +260 -264
- data/spec/mongoid/inspectable_spec.rb +45 -55
- data/spec/mongoid/interceptable_spec.rb +784 -922
- data/spec/mongoid/interceptable_spec_models.rb +35 -35
- data/spec/mongoid/loading_spec.rb +47 -43
- data/spec/mongoid/loggable_spec.rb +3 -6
- data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
- data/spec/mongoid/mongoizable_spec.rb +81 -90
- data/spec/mongoid/monkey_patches_spec.rb +4 -0
- data/spec/mongoid/persistable/creatable_spec.rb +181 -220
- data/spec/mongoid/persistable/deletable_spec.rb +139 -179
- data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
- data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
- data/spec/mongoid/persistable/logical_spec.rb +48 -61
- data/spec/mongoid/persistable/maxable_spec.rb +45 -44
- data/spec/mongoid/persistable/minable_spec.rb +45 -44
- data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
- data/spec/mongoid/persistable/poppable_spec.rb +47 -60
- data/spec/mongoid/persistable/pullable_spec.rb +79 -103
- data/spec/mongoid/persistable/pushable_spec.rb +106 -131
- data/spec/mongoid/persistable/renamable_spec.rb +52 -65
- data/spec/mongoid/persistable/savable_spec.rb +152 -189
- data/spec/mongoid/persistable/settable_spec.rb +121 -145
- data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
- data/spec/mongoid/persistable/updatable_spec.rb +185 -232
- data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
- data/spec/mongoid/persistable_spec.rb +132 -139
- data/spec/mongoid/persistence_context_spec.rb +31 -89
- data/spec/mongoid/positional_spec.rb +67 -79
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
- data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
- data/spec/mongoid/relations/proxy_spec.rb +0 -1
- data/spec/mongoid/reloadable_spec.rb +250 -145
- data/spec/mongoid/scopable_spec.rb +319 -398
- data/spec/mongoid/search_indexable_spec.rb +446 -41
- data/spec/mongoid/selectable_spec.rb +36 -51
- data/spec/mongoid/serializable_spec.rb +269 -312
- data/spec/mongoid/shardable_models.rb +5 -5
- data/spec/mongoid/shardable_spec.rb +44 -46
- data/spec/mongoid/stateful_spec.rb +55 -75
- data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
- data/spec/mongoid/tasks/database_spec.rb +80 -98
- data/spec/mongoid/tasks/encryption_spec.rb +22 -20
- data/spec/mongoid/threaded_spec.rb +57 -83
- data/spec/mongoid/timestamps/created/short_spec.rb +12 -16
- data/spec/mongoid/timestamps/created_spec.rb +16 -20
- data/spec/mongoid/timestamps/timeless_spec.rb +31 -43
- data/spec/mongoid/timestamps/updated/short_spec.rb +21 -28
- data/spec/mongoid/timestamps/updated_spec.rb +18 -25
- data/spec/mongoid/timestamps_spec.rb +171 -188
- data/spec/mongoid/timestamps_spec_models.rb +12 -13
- data/spec/mongoid/touchable_spec.rb +330 -294
- data/spec/mongoid/touchable_spec_models.rb +35 -37
- data/spec/mongoid/traversable_spec.rb +435 -471
- data/spec/mongoid/validatable/associated_spec.rb +42 -60
- data/spec/mongoid/validatable/format_spec.rb +24 -34
- data/spec/mongoid/validatable/length_spec.rb +62 -86
- data/spec/mongoid/validatable/numericality_spec.rb +114 -23
- data/spec/mongoid/validatable/presence_spec.rb +149 -203
- data/spec/mongoid/validatable/uniqueness_spec.rb +632 -830
- data/spec/mongoid/validatable_spec.rb +71 -103
- data/spec/mongoid/warnings_spec.rb +5 -9
- data/spec/mongoid_spec.rb +25 -41
- data/spec/rails/controller_extension/controller_runtime_spec.rb +45 -49
- data/spec/rails/mongoid_spec.rb +15 -15
- data/spec/shared/lib/mrss/cluster_config.rb +5 -40
- data/spec/shared/lib/mrss/constraints.rb +7 -46
- data/spec/shared/lib/mrss/docker_runner.rb +10 -21
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -31
- data/spec/shared/lib/mrss/release/candidate.rb +18 -12
- data/spec/shared/lib/mrss/server_version_registry.rb +1 -5
- data/spec/shared/share/Dockerfile.erb +6 -8
- data/spec/shared/shlib/server.sh +0 -50
- data/spec/shared/shlib/set_env.sh +4 -10
- data/spec/spec_helper.rb +54 -31
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +1 -2
- data/spec/support/constraints.rb +8 -25
- data/spec/support/crypt/models.rb +7 -165
- data/spec/support/crypt.rb +6 -9
- data/spec/support/expectations.rb +21 -7
- data/spec/support/feature_sandbox.rb +1 -4
- data/spec/support/helpers.rb +0 -1
- data/spec/support/immutable_ids.rb +20 -21
- data/spec/support/macros.rb +1 -3
- data/spec/support/models/account.rb +4 -5
- data/spec/support/models/acolyte.rb +5 -5
- data/spec/support/models/actor.rb +3 -3
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +11 -11
- data/spec/support/models/address_component.rb +1 -1
- data/spec/support/models/address_number.rb +1 -1
- data/spec/support/models/agency.rb +1 -1
- data/spec/support/models/agent.rb +1 -1
- data/spec/support/models/album.rb +1 -2
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +4 -5
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +2 -2
- data/spec/support/models/armrest.rb +0 -1
- data/spec/support/models/array_field.rb +0 -1
- data/spec/support/models/article.rb +0 -1
- data/spec/support/models/artist.rb +16 -12
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +0 -1
- data/spec/support/models/audio.rb +2 -2
- data/spec/support/models/augmentation.rb +1 -2
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +0 -1
- data/spec/support/models/bar.rb +2 -2
- data/spec/support/models/basic.rb +0 -1
- data/spec/support/models/bed.rb +0 -1
- data/spec/support/models/big_palette.rb +0 -1
- data/spec/support/models/birthday.rb +3 -5
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +1 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -2
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +2 -2
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +5 -6
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -2
- data/spec/support/models/catalog.rb +0 -1
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +5 -6
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +2 -2
- data/spec/support/models/circus.rb +0 -1
- data/spec/support/models/code.rb +2 -1
- data/spec/support/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +0 -1
- data/spec/support/models/comment.rb +0 -1
- data/spec/support/models/company.rb +0 -1
- data/spec/support/models/consumption_period.rb +0 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -3
- data/spec/support/models/courier_job.rb +2 -2
- data/spec/support/models/cover.rb +0 -1
- data/spec/support/models/crate.rb +0 -1
- data/spec/support/models/customer.rb +0 -1
- data/spec/support/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +2 -2
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +2 -2
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +2 -2
- data/spec/support/models/drug.rb +1 -1
- data/spec/support/models/dungeon.rb +1 -1
- data/spec/support/models/edit.rb +1 -1
- data/spec/support/models/email.rb +1 -1
- data/spec/support/models/employer.rb +1 -2
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +3 -4
- data/spec/support/models/exhibition.rb +1 -1
- data/spec/support/models/exhibitor.rb +1 -1
- data/spec/support/models/explosion.rb +1 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +2 -3
- data/spec/support/models/face.rb +2 -3
- data/spec/support/models/fanatic.rb +1 -1
- data/spec/support/models/favorite.rb +1 -1
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -2
- data/spec/support/models/folder_item.rb +1 -3
- data/spec/support/models/fruits.rb +9 -5
- data/spec/support/models/game.rb +3 -4
- data/spec/support/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +0 -1
- data/spec/support/models/hole.rb +0 -1
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +2 -2
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +3 -3
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +1 -2
- data/spec/support/models/instrument.rb +2 -3
- data/spec/support/models/item.rb +2 -2
- data/spec/support/models/jar.rb +1 -2
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +1 -1
- data/spec/support/models/location.rb +1 -1
- data/spec/support/models/login.rb +1 -2
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +1 -2
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/modifier_models.rb +25 -0
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -2
- data/spec/support/models/name.rb +4 -5
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +3 -3
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +1 -1
- data/spec/support/models/ordered_post.rb +1 -1
- data/spec/support/models/ordered_preference.rb +1 -1
- data/spec/support/models/oscar.rb +1 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +3 -11
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +3 -3
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +2 -2
- data/spec/support/models/parent.rb +2 -2
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +0 -1
- data/spec/support/models/patient.rb +2 -2
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +32 -28
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +1 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +5 -5
- data/spec/support/models/post.rb +12 -12
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +1 -2
- data/spec/support/models/preference.rb +2 -2
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +3 -3
- data/spec/support/models/profile.rb +2 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +2 -2
- data/spec/support/models/publication/encyclopedia.rb +0 -1
- data/spec/support/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +0 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +1 -1
- data/spec/support/models/question.rb +2 -2
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +2 -3
- data/spec/support/models/registry.rb +1 -1
- data/spec/support/models/role.rb +1 -1
- data/spec/support/models/root_category.rb +1 -1
- data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_user.rb +0 -1
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +0 -1
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +1 -1
- data/spec/support/models/series.rb +1 -1
- data/spec/support/models/server.rb +1 -1
- data/spec/support/models/service.rb +2 -2
- data/spec/support/models/shape.rb +3 -3
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +2 -2
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +2 -2
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +1 -1
- data/spec/support/models/simple.rb +1 -1
- data/spec/support/models/slave.rb +1 -1
- data/spec/support/models/song.rb +1 -2
- data/spec/support/models/sound.rb +2 -2
- data/spec/support/models/spacer.rb +0 -1
- data/spec/support/models/square.rb +0 -1
- data/spec/support/models/staff.rb +0 -1
- data/spec/support/models/store_as_dup_test1.rb +2 -2
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +2 -2
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +1 -2
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +2 -2
- data/spec/support/models/survey.rb +2 -2
- data/spec/support/models/symptom.rb +2 -2
- data/spec/support/models/system_role.rb +2 -3
- data/spec/support/models/tag.rb +2 -2
- data/spec/support/models/target.rb +1 -1
- data/spec/support/models/template.rb +1 -1
- data/spec/support/models/thing.rb +1 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +3 -3
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +2 -3
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +3 -4
- data/spec/support/models/user_account.rb +3 -3
- data/spec/support/models/validation_callback.rb +4 -4
- data/spec/support/models/vehicle.rb +2 -3
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +2 -2
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +1 -2
- data/spec/support/models/wiki_page.rb +2 -3
- data/spec/support/models/word.rb +2 -2
- data/spec/support/models/word_origin.rb +1 -2
- data/spec/support/models/writer.rb +3 -3
- data/spec/support/rails_mock.rb +7 -12
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/sinatra_mock.rb +4 -2
- data/spec/support/spec_config.rb +19 -18
- metadata +14 -14
- data/lib/mongoid/errors/in_memory_regexp_timeout.rb +0 -26
- data/lib/mongoid/errors/no_encryption_schema.rb +0 -28
- data/lib/mongoid/field_readable.rb +0 -70
- data/lib/mongoid/matcher/regexp_budget.rb +0 -383
- data/spec/integration/matcher_regexp_timeout_spec.rb +0 -215
- data/spec/integration/query_operator_guard_spec.rb +0 -89
- data/spec/mongoid/encryptable_spec.rb +0 -61
- data/spec/mongoid/matcher/regexp_budget_spec.rb +0 -570
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
require 'mongoid/pluckable'
|
|
5
4
|
|
|
@@ -7,7 +6,6 @@ module Mongoid
|
|
|
7
6
|
module Association
|
|
8
7
|
module Referenced
|
|
9
8
|
class HasMany
|
|
10
|
-
|
|
11
9
|
# This class is the wrapper for all referenced associations that have a
|
|
12
10
|
# target that can be a criteria or array of _loaded documents. This
|
|
13
11
|
# handles both cases or a combination of the two.
|
|
@@ -35,6 +33,7 @@ module Mongoid
|
|
|
35
33
|
# @return [ true | false ] If the objects are equal.
|
|
36
34
|
def ==(other)
|
|
37
35
|
return false unless other.respond_to?(:entries)
|
|
36
|
+
|
|
38
37
|
entries == other.entries
|
|
39
38
|
end
|
|
40
39
|
|
|
@@ -49,6 +48,7 @@ module Mongoid
|
|
|
49
48
|
# @return [ true | false ] If the objects are equal in a case.
|
|
50
49
|
def ===(other)
|
|
51
50
|
return false unless other.respond_to?(:entries)
|
|
51
|
+
|
|
52
52
|
entries === other.entries
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -65,7 +65,7 @@ module Mongoid
|
|
|
65
65
|
self
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
alias
|
|
68
|
+
alias push <<
|
|
69
69
|
|
|
70
70
|
# Clears out all the documents in this enumerable. If passed a block it
|
|
71
71
|
# will yield to each document that is in memory.
|
|
@@ -79,10 +79,8 @@ module Mongoid
|
|
|
79
79
|
# end
|
|
80
80
|
#
|
|
81
81
|
# @return [ Array<Document> ] The cleared out _added docs.
|
|
82
|
-
def clear
|
|
83
|
-
if block_given?
|
|
84
|
-
in_memory { |doc| yield(doc) }
|
|
85
|
-
end
|
|
82
|
+
def clear(&block)
|
|
83
|
+
in_memory(&block) if block_given?
|
|
86
84
|
_loaded.clear and _added.clear
|
|
87
85
|
end
|
|
88
86
|
|
|
@@ -107,12 +105,10 @@ module Mongoid
|
|
|
107
105
|
#
|
|
108
106
|
# @return [ Document ] The deleted document.
|
|
109
107
|
def delete(document)
|
|
110
|
-
doc =
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return document
|
|
115
|
-
end
|
|
108
|
+
doc = _loaded.delete(document._id) || _added.delete(document._id)
|
|
109
|
+
if !doc && _unloaded && _unloaded.where(_id: document._id).exists?
|
|
110
|
+
yield(document) if block_given?
|
|
111
|
+
return document
|
|
116
112
|
end
|
|
117
113
|
yield(doc) if block_given?
|
|
118
114
|
doc
|
|
@@ -163,11 +159,10 @@ module Mongoid
|
|
|
163
159
|
#
|
|
164
160
|
# @return [ true ] That the enumerable is now _loaded.
|
|
165
161
|
def each
|
|
166
|
-
unless block_given?
|
|
167
|
-
|
|
168
|
-
end
|
|
162
|
+
return to_enum unless block_given?
|
|
163
|
+
|
|
169
164
|
if _loaded?
|
|
170
|
-
_loaded.each_pair do |
|
|
165
|
+
_loaded.each_pair do |_id, doc|
|
|
171
166
|
document = _added.delete(doc._id) || doc
|
|
172
167
|
set_base(document)
|
|
173
168
|
yield(document)
|
|
@@ -180,7 +175,7 @@ module Mongoid
|
|
|
180
175
|
yield(document)
|
|
181
176
|
end
|
|
182
177
|
end
|
|
183
|
-
_added.each_pair do |
|
|
178
|
+
_added.each_pair do |_id, doc|
|
|
184
179
|
yield(doc)
|
|
185
180
|
end
|
|
186
181
|
@executed = true
|
|
@@ -248,15 +243,15 @@ module Mongoid
|
|
|
248
243
|
# @return [ Document ] The first document found.
|
|
249
244
|
def first(limit = nil)
|
|
250
245
|
_loaded.try(:values).try(:first) ||
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
246
|
+
_added[(ul = _unloaded.try(:first, limit)).try(:_id)] ||
|
|
247
|
+
ul ||
|
|
248
|
+
_added.values.try(:first)
|
|
254
249
|
end
|
|
255
250
|
|
|
256
251
|
# Initialize the new enumerable either with a criteria or an array.
|
|
257
252
|
#
|
|
258
253
|
# @example Initialize the enumerable with a criteria.
|
|
259
|
-
#
|
|
254
|
+
# Enumerable.new(Post.where(:person_id => id))
|
|
260
255
|
#
|
|
261
256
|
# @example Initialize the enumerable with an array.
|
|
262
257
|
# Enumerable.new([ post ])
|
|
@@ -269,9 +264,8 @@ module Mongoid
|
|
|
269
264
|
@_added, @executed, @_loaded, @_unloaded = {}, false, {}, target
|
|
270
265
|
else
|
|
271
266
|
@_added, @executed = {}, true
|
|
272
|
-
@_loaded = target.
|
|
267
|
+
@_loaded = target.each_with_object({}) do |doc, _target|
|
|
273
268
|
_target[doc._id] = doc if doc
|
|
274
|
-
_target
|
|
275
269
|
end
|
|
276
270
|
end
|
|
277
271
|
end
|
|
@@ -286,6 +280,7 @@ module Mongoid
|
|
|
286
280
|
# @return [ true | false ] If the document is in the target.
|
|
287
281
|
def include?(doc)
|
|
288
282
|
return super unless _unloaded
|
|
283
|
+
|
|
289
284
|
_unloaded.where(_id: doc._id).exists? || _added.has_key?(doc._id)
|
|
290
285
|
end
|
|
291
286
|
|
|
@@ -333,9 +328,9 @@ module Mongoid
|
|
|
333
328
|
# @return [ Document ] The last document found.
|
|
334
329
|
def last(limit = nil)
|
|
335
330
|
_added.values.try(:last) ||
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
331
|
+
_loaded.try(:values).try(:last) ||
|
|
332
|
+
_added[(ul = _unloaded.try(:last, limit)).try(:_id)] ||
|
|
333
|
+
ul
|
|
339
334
|
end
|
|
340
335
|
|
|
341
336
|
# Loads all the documents in the enumerable from the database.
|
|
@@ -344,7 +339,7 @@ module Mongoid
|
|
|
344
339
|
# enumerable.load_all!
|
|
345
340
|
#
|
|
346
341
|
# @return [ true ] That the enumerable is _loaded.
|
|
347
|
-
alias
|
|
342
|
+
alias load_all! entries
|
|
348
343
|
|
|
349
344
|
# Has the enumerable been _loaded? This will be true if the criteria has
|
|
350
345
|
# been executed or we manually load the entire thing.
|
|
@@ -364,7 +359,7 @@ module Mongoid
|
|
|
364
359
|
#
|
|
365
360
|
# @return [ Array<Object> ] The dumped data.
|
|
366
361
|
def marshal_dump
|
|
367
|
-
[_added, _loaded, _unloaded, @executed]
|
|
362
|
+
[ _added, _loaded, _unloaded, @executed ]
|
|
368
363
|
end
|
|
369
364
|
|
|
370
365
|
# Loads the data needed to Marshal.load an enumerable proxy.
|
|
@@ -398,11 +393,11 @@ module Mongoid
|
|
|
398
393
|
results.concat pluck_from_documents(docs, prepared[:field_names], document_class: klass)
|
|
399
394
|
elsif _unloaded
|
|
400
395
|
criteria = if _added.any?
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
396
|
+
ids_to_exclude = _added.keys
|
|
397
|
+
_unloaded.not(:_id.in => ids_to_exclude)
|
|
398
|
+
else
|
|
399
|
+
_unloaded
|
|
400
|
+
end
|
|
406
401
|
|
|
407
402
|
results.concat criteria.pluck(*keys)
|
|
408
403
|
end
|
|
@@ -484,7 +479,7 @@ module Mongoid
|
|
|
484
479
|
end
|
|
485
480
|
end
|
|
486
481
|
|
|
487
|
-
alias
|
|
482
|
+
alias length size
|
|
488
483
|
|
|
489
484
|
# Send #to_json to the entries.
|
|
490
485
|
#
|
|
@@ -510,6 +505,71 @@ module Mongoid
|
|
|
510
505
|
entries.as_json(options)
|
|
511
506
|
end
|
|
512
507
|
|
|
508
|
+
# Get the sum of the provided field for all documents in the
|
|
509
|
+
# enumerable. When the association is loaded, computes in memory
|
|
510
|
+
# without querying the database.
|
|
511
|
+
#
|
|
512
|
+
# @example Get the sum of a field.
|
|
513
|
+
# enumerable.sum(:likes)
|
|
514
|
+
#
|
|
515
|
+
# @param [ Symbol ] field The field to sum.
|
|
516
|
+
#
|
|
517
|
+
# @return [ Numeric ] The sum value.
|
|
518
|
+
def sum(field = nil)
|
|
519
|
+
return super(field || 0) if block_given?
|
|
520
|
+
|
|
521
|
+
field_values_for(field).sum || 0
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
# Get the average of the provided field for all documents in the
|
|
525
|
+
# enumerable. When the association is loaded, computes in memory
|
|
526
|
+
# without querying the database.
|
|
527
|
+
#
|
|
528
|
+
# @example Get the average of a field.
|
|
529
|
+
# enumerable.avg(:likes)
|
|
530
|
+
#
|
|
531
|
+
# @param [ Symbol ] field The field to average.
|
|
532
|
+
#
|
|
533
|
+
# @return [ Float | nil ] The average value or nil if no documents.
|
|
534
|
+
def avg(field)
|
|
535
|
+
values = field_values_for(field)
|
|
536
|
+
return nil if values.empty?
|
|
537
|
+
|
|
538
|
+
values.sum / values.size.to_f
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
# Get the minimum value of the provided field for all documents in
|
|
542
|
+
# the enumerable. When the association is loaded, computes in memory
|
|
543
|
+
# without querying the database.
|
|
544
|
+
#
|
|
545
|
+
# @example Get the min of a field.
|
|
546
|
+
# enumerable.min(:likes)
|
|
547
|
+
#
|
|
548
|
+
# @param [ Symbol ] field The field to min.
|
|
549
|
+
#
|
|
550
|
+
# @return [ Numeric | nil ] The min value or nil if no documents.
|
|
551
|
+
def min(field = nil)
|
|
552
|
+
return super() if block_given?
|
|
553
|
+
|
|
554
|
+
field_values_for(field).min
|
|
555
|
+
end
|
|
556
|
+
|
|
557
|
+
# Get the maximum value of the provided field for all documents in
|
|
558
|
+
# the enumerable. When the association is loaded, computes in memory
|
|
559
|
+
# without querying the database.
|
|
560
|
+
#
|
|
561
|
+
# @example Get the max of a field.
|
|
562
|
+
# enumerable.max(:likes)
|
|
563
|
+
#
|
|
564
|
+
# @param [ Symbol ] field The field to max.
|
|
565
|
+
#
|
|
566
|
+
# @return [ Numeric | nil ] The max value or nil if no documents.
|
|
567
|
+
def max(field = nil)
|
|
568
|
+
return super() if block_given?
|
|
569
|
+
|
|
570
|
+
field_values_for(field).max
|
|
571
|
+
end
|
|
572
|
+
|
|
513
573
|
# Return all the unique documents in the enumerable.
|
|
514
574
|
#
|
|
515
575
|
# @note This operation loads all documents from the database.
|
|
@@ -524,10 +584,19 @@ module Mongoid
|
|
|
524
584
|
|
|
525
585
|
private
|
|
526
586
|
|
|
587
|
+
# Collect non-nil values for the given field from all documents.
|
|
588
|
+
#
|
|
589
|
+
# @param [ Symbol ] field The field name.
|
|
590
|
+
#
|
|
591
|
+
# @return [ Array<Numeric> ] The non-nil field values.
|
|
592
|
+
def field_values_for(field)
|
|
593
|
+
map { |doc| doc.public_send(field) }.compact
|
|
594
|
+
end
|
|
595
|
+
|
|
527
596
|
def set_base(document)
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
597
|
+
return unless @_association.is_a?(Referenced::HasMany)
|
|
598
|
+
|
|
599
|
+
document.set_relation(@_association.inverse, @_base) if @_association
|
|
531
600
|
end
|
|
532
601
|
|
|
533
602
|
ruby2_keywords def method_missing(name, *args, &block)
|
|
@@ -157,7 +157,7 @@ module Mongoid
|
|
|
157
157
|
# @example Delete all documents in the association.
|
|
158
158
|
# person.posts.delete_all
|
|
159
159
|
#
|
|
160
|
-
# @example
|
|
160
|
+
# @example Conditionally delete all documents in the association.
|
|
161
161
|
# person.posts.delete_all({ :title => "Testing" })
|
|
162
162
|
#
|
|
163
163
|
# @param [ Hash ] conditions Optional conditions to delete with.
|
|
@@ -260,9 +260,13 @@ module Mongoid
|
|
|
260
260
|
#
|
|
261
261
|
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
|
262
262
|
def find(*args, &block)
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
263
|
+
if block_given? && args.empty?
|
|
264
|
+
detect(&block)
|
|
265
|
+
else
|
|
266
|
+
matching = criteria.find(*args, &block)
|
|
267
|
+
Array(matching).each { |doc| _target.push(doc) }
|
|
268
|
+
matching
|
|
269
|
+
end
|
|
266
270
|
end
|
|
267
271
|
|
|
268
272
|
# Removes all associations between the base document and the target
|
|
@@ -475,7 +479,7 @@ module Mongoid
|
|
|
475
479
|
#
|
|
476
480
|
# @return [ Criteria | Object ] A Criteria or return value from the target.
|
|
477
481
|
#
|
|
478
|
-
# TODO: make sure we are
|
|
482
|
+
# TODO: make sure we are consistently using respond_to_missing
|
|
479
483
|
# anywhere we define method_missing.
|
|
480
484
|
# rubocop:disable Style/MissingRespondToMissing
|
|
481
485
|
ruby2_keywords def method_missing(name, *args, &block)
|
|
@@ -525,7 +529,7 @@ module Mongoid
|
|
|
525
529
|
# @example Delete all documents in the association.
|
|
526
530
|
# person.posts.delete_all
|
|
527
531
|
#
|
|
528
|
-
# @example
|
|
532
|
+
# @example Conditionally delete all documents in the association.
|
|
529
533
|
# person.posts.delete_all({ :title => "Testing" })
|
|
530
534
|
#
|
|
531
535
|
# @param [ Hash ] conditions Optional conditions to delete with.
|
|
@@ -534,111 +538,12 @@ module Mongoid
|
|
|
534
538
|
# @return [ Integer ] The number of documents deleted.
|
|
535
539
|
def remove_all(conditions = nil, method = :delete_all)
|
|
536
540
|
selector = conditions || {}
|
|
537
|
-
selector.merge!(criteria.selector)
|
|
538
|
-
|
|
539
|
-
# Scanning before the delete means scanning only what is already in
|
|
540
|
-
# memory, so it is only done where there is a pattern whose cost has
|
|
541
|
-
# to be bounded. Everywhere else the delete comes first and the scan
|
|
542
|
-
# sees the survivors, which is what this association has always
|
|
543
|
-
# done.
|
|
544
|
-
#
|
|
545
|
-
# The limit is read once and carried into whichever branch is taken.
|
|
546
|
-
# Letting the branch below ask again would read it a second time,
|
|
547
|
-
# across a server round trip, and a limit that had become positive
|
|
548
|
-
# in the meantime would put a deadline on the delete_if -- a query,
|
|
549
|
-
# and an unbind of every match -- which is the arrangement this
|
|
550
|
-
# branch exists to avoid.
|
|
551
|
-
limit = Matcher::RegexpBudget.limit_for(selector)
|
|
552
|
-
return remove_all_bounded(selector, method, limit) if limit
|
|
553
|
-
|
|
554
|
-
removed = klass.send(method, selector)
|
|
555
|
-
|
|
556
|
-
# No scope around this. The scan runs after the delete, so the
|
|
557
|
-
# association this loads comes back holding only what the delete did
|
|
558
|
-
# not match, and there is no pattern here to bound in any case.
|
|
559
|
-
# Opening a scope would save _matches? from deciding once per
|
|
560
|
-
# document -- 0.48us against 1.74us for the match itself -- but a
|
|
561
|
-
# scope with nothing to bound suppresses that decision for
|
|
562
|
-
# everything nested inside it, and loading the association runs
|
|
563
|
-
# find callbacks. A pattern in a selector one of those evaluates
|
|
564
|
-
# would go unguarded, which costs more than the saving is worth on a
|
|
565
|
-
# path that has just made two round trips.
|
|
541
|
+
removed = klass.send(method, selector.merge!(criteria.selector))
|
|
566
542
|
_target.delete_if do |doc|
|
|
567
543
|
doc._matches?(selector).tap do |b|
|
|
568
544
|
unbind_one(doc) if b
|
|
569
545
|
end
|
|
570
546
|
end
|
|
571
|
-
|
|
572
|
-
removed
|
|
573
|
-
end
|
|
574
|
-
|
|
575
|
-
# Deletes all related documents matching a selector that carries a
|
|
576
|
-
# regular expression, with the whole scan under one regexp budget.
|
|
577
|
-
#
|
|
578
|
-
# The scan runs before anything is deleted, so a budget that runs out
|
|
579
|
-
# leaves both the database and the association untouched rather than
|
|
580
|
-
# reporting a failure for a delete that has already happened. It also
|
|
581
|
-
# means the budget is closed by the time the association is mutated,
|
|
582
|
-
# so where the budget is enforced with Timeout there is no window for
|
|
583
|
-
# the exception to land in the middle of an unbind.
|
|
584
|
-
#
|
|
585
|
-
# @param [ Hash ] selector The selector to delete with.
|
|
586
|
-
# @param [ Symbol ] method The deletion method to call.
|
|
587
|
-
# @param [ Float ] limit The seconds the scan may spend, as read by
|
|
588
|
-
# the caller when it chose this path.
|
|
589
|
-
#
|
|
590
|
-
# @return [ Integer ] The number of documents deleted.
|
|
591
|
-
def remove_all_bounded(selector, method, limit)
|
|
592
|
-
# Only what the association already holds. Iterating it instead
|
|
593
|
-
# would load the whole association before the delete, and for a
|
|
594
|
-
# broad pattern that is every document the association has: /.*/ is
|
|
595
|
-
# both the cheapest pattern an attacker can supply and the one that
|
|
596
|
-
# matches everything, so bounding the cost of the matching would
|
|
597
|
-
# have been paid for with an unbounded amount of memory. Nothing is
|
|
598
|
-
# missed by not loading, because the server evaluates the same
|
|
599
|
-
# selector for the delete itself.
|
|
600
|
-
#
|
|
601
|
-
# It also means the scan runs no query, so no deadline of ours can
|
|
602
|
-
# land on one. Where the budget is enforced with Timeout, covering
|
|
603
|
-
# a query would report a slow network as a regexp timeout and could
|
|
604
|
-
# deliver the asynchronous exception inside the driver's socket
|
|
605
|
-
# read.
|
|
606
|
-
documents = _target.in_memory
|
|
607
|
-
|
|
608
|
-
matching = Matcher::RegexpBudget.open_with(limit) do
|
|
609
|
-
documents.select { |doc| doc._matches?(selector) }
|
|
610
|
-
end
|
|
611
|
-
|
|
612
|
-
removed = klass.send(method, selector)
|
|
613
|
-
|
|
614
|
-
# The ids are already known to be in memory, so the loaded and added
|
|
615
|
-
# documents can be dropped directly. Enumerable#delete would look
|
|
616
|
-
# each one up by id and stop at the first hash that has it, which
|
|
617
|
-
# removes the wrong instance when both hashes hold one for the same
|
|
618
|
-
# id. Enumerable#delete_if drops it from both, as this does, but
|
|
619
|
-
# only after load_all!, which is the load this scan exists to avoid.
|
|
620
|
-
#
|
|
621
|
-
# Which documents get unbound has always depended on which ones
|
|
622
|
-
# happened to be in memory, and scanning only what is in memory
|
|
623
|
-
# keeps that. It matters for has_and_belongs_to_many, whose
|
|
624
|
-
# unbind_one pulls the id out of the foreign key array on _base and
|
|
625
|
-
# marks it dirty; the scan used to run after the delete, against an
|
|
626
|
-
# association that a cold proxy had just reloaded as holding only
|
|
627
|
-
# the survivors, so nothing matched and nothing was unbound.
|
|
628
|
-
#
|
|
629
|
-
# TODO: unbinding should not depend on what was in memory. Every
|
|
630
|
-
# matched document leaves the association, so every one of them
|
|
631
|
-
# should be unbound, which would also stop _base's foreign key
|
|
632
|
-
# array from keeping ids that no longer resolve. That is a
|
|
633
|
-
# behaviour change for has_and_belongs_to_many and belongs in a
|
|
634
|
-
# ticket of its own, with a release note; it should not ride along
|
|
635
|
-
# on this one.
|
|
636
|
-
matching.each do |doc|
|
|
637
|
-
unbind_one(doc)
|
|
638
|
-
_target._loaded.delete(doc._id)
|
|
639
|
-
_target._added.delete(doc._id)
|
|
640
|
-
end
|
|
641
|
-
|
|
642
547
|
removed
|
|
643
548
|
end
|
|
644
549
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
require 'mongoid/association/referenced/has_many/binding'
|
|
5
4
|
require 'mongoid/association/referenced/has_many/buildable'
|
|
@@ -11,7 +10,6 @@ require 'mongoid/association/referenced/with_polymorphic_criteria'
|
|
|
11
10
|
module Mongoid
|
|
12
11
|
module Association
|
|
13
12
|
module Referenced
|
|
14
|
-
|
|
15
13
|
# The has_many association.
|
|
16
14
|
class HasMany
|
|
17
15
|
include Relatable
|
|
@@ -22,18 +20,18 @@ module Mongoid
|
|
|
22
20
|
# common ones.
|
|
23
21
|
#
|
|
24
22
|
# @return [ Array<Symbol> ] The extra valid options.
|
|
25
|
-
ASSOCIATION_OPTIONS = [
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
23
|
+
ASSOCIATION_OPTIONS = %i[
|
|
24
|
+
after_add
|
|
25
|
+
after_remove
|
|
26
|
+
as
|
|
27
|
+
autosave
|
|
28
|
+
before_add
|
|
29
|
+
before_remove
|
|
30
|
+
dependent
|
|
31
|
+
foreign_key
|
|
32
|
+
order
|
|
33
|
+
primary_key
|
|
34
|
+
scope
|
|
37
35
|
].freeze
|
|
38
36
|
|
|
39
37
|
# The complete list of valid options for this association, including
|
|
@@ -45,7 +43,7 @@ module Mongoid
|
|
|
45
43
|
# The default foreign key suffix.
|
|
46
44
|
#
|
|
47
45
|
# @return [ String ] '_id'
|
|
48
|
-
FOREIGN_KEY_SUFFIX = '_id'
|
|
46
|
+
FOREIGN_KEY_SUFFIX = '_id'
|
|
49
47
|
|
|
50
48
|
# The list of association complements.
|
|
51
49
|
#
|
|
@@ -78,30 +76,38 @@ module Mongoid
|
|
|
78
76
|
self
|
|
79
77
|
end
|
|
80
78
|
|
|
81
|
-
|
|
82
79
|
# Get the foreign key field on the inverse for saving the association reference.
|
|
83
80
|
#
|
|
84
81
|
# @return [ String ] The foreign key field on the inverse for saving the
|
|
85
82
|
# association reference.
|
|
86
83
|
def foreign_key
|
|
87
|
-
@foreign_key ||=
|
|
84
|
+
@foreign_key ||= if @options[:foreign_key]
|
|
85
|
+
@options[:foreign_key].to_s
|
|
86
|
+
else
|
|
88
87
|
default_foreign_key_field
|
|
88
|
+
end
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
# Is this association type embedded?
|
|
92
92
|
#
|
|
93
93
|
# @return [ false ] Always false.
|
|
94
|
-
def embedded
|
|
94
|
+
def embedded?
|
|
95
|
+
false
|
|
96
|
+
end
|
|
95
97
|
|
|
96
98
|
# The default for validation the association object.
|
|
97
99
|
#
|
|
98
100
|
# @return [ true ] Always true.
|
|
99
|
-
def validation_default
|
|
101
|
+
def validation_default
|
|
102
|
+
true
|
|
103
|
+
end
|
|
100
104
|
|
|
101
105
|
# Does this association type store the foreign key?
|
|
102
106
|
#
|
|
103
107
|
# @return [ true ] Always true.
|
|
104
|
-
def stores_foreign_key
|
|
108
|
+
def stores_foreign_key?
|
|
109
|
+
false
|
|
110
|
+
end
|
|
105
111
|
|
|
106
112
|
# Get the association proxy class for this association type.
|
|
107
113
|
#
|
|
@@ -200,18 +206,18 @@ module Mongoid
|
|
|
200
206
|
@default_foreign_key_field ||= "#{inverse}#{FOREIGN_KEY_SUFFIX}"
|
|
201
207
|
end
|
|
202
208
|
|
|
203
|
-
def polymorphic_inverses(
|
|
209
|
+
def polymorphic_inverses(_other)
|
|
204
210
|
[ as ]
|
|
205
211
|
end
|
|
206
212
|
|
|
207
213
|
def determine_inverses(other)
|
|
208
214
|
matches = (other || relation_class).relations.values.select do |rel|
|
|
209
215
|
relation_complements.include?(rel.class) &&
|
|
210
|
-
|
|
211
|
-
|
|
216
|
+
rel.relation_class_name == inverse_class_name
|
|
212
217
|
end
|
|
213
218
|
if matches.size > 1
|
|
214
219
|
return [ default_inverse.name ] if default_inverse
|
|
220
|
+
|
|
215
221
|
raise Errors::AmbiguousRelationship.new(relation_class, @owner_class, name, matches)
|
|
216
222
|
end
|
|
217
223
|
matches.collect { |m| m.name } unless matches.blank?
|
|
@@ -242,7 +248,7 @@ module Mongoid
|
|
|
242
248
|
def with_inverse_field_criterion(criteria)
|
|
243
249
|
inverse_association = inverse_association(klass)
|
|
244
250
|
if inverse_association.try(:inverse_of)
|
|
245
|
-
criteria.any_in(inverse_association.inverse_of => [name, nil])
|
|
251
|
+
criteria.any_in(inverse_association.inverse_of => [ name, nil ])
|
|
246
252
|
else
|
|
247
253
|
criteria
|
|
248
254
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
require 'mongoid/association/referenced/with_polymorphic_criteria'
|
|
5
4
|
|
|
@@ -7,7 +6,6 @@ module Mongoid
|
|
|
7
6
|
module Association
|
|
8
7
|
module Referenced
|
|
9
8
|
class HasOne
|
|
10
|
-
|
|
11
9
|
# The Builder behavior for has_one associations.
|
|
12
10
|
module Buildable
|
|
13
11
|
include WithPolymorphicCriteria
|
|
@@ -22,11 +20,15 @@ module Mongoid
|
|
|
22
20
|
# @param [ nil ] selected_fields Must be nil.
|
|
23
21
|
#
|
|
24
22
|
# @return [ Document ] A single document.
|
|
25
|
-
def build(base, object,
|
|
23
|
+
def build(base, object, _type = nil, selected_fields = nil)
|
|
26
24
|
if query?(object)
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
# Handle array of hashes from $lookup aggregation
|
|
26
|
+
if object.is_a?(Array) && object.all? { |o| o.is_a?(Hash) }
|
|
27
|
+
doc = object.first
|
|
28
|
+
return doc ? Factory.execute_from_db(klass, doc, nil, selected_fields, execute_callbacks: false) : nil
|
|
29
29
|
end
|
|
30
|
+
|
|
31
|
+
execute_query(object, base) unless base.new_record?
|
|
30
32
|
else
|
|
31
33
|
clear_associated(object)
|
|
32
34
|
object
|
|
@@ -38,10 +40,10 @@ module Mongoid
|
|
|
38
40
|
def clear_associated(object)
|
|
39
41
|
unless inverse
|
|
40
42
|
raise Errors::InverseNotFound.new(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
@owner_class,
|
|
44
|
+
name,
|
|
45
|
+
object.class,
|
|
46
|
+
foreign_key
|
|
45
47
|
)
|
|
46
48
|
end
|
|
47
49
|
if object && (associated = object.send(inverse))
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Association
|
|
@@ -7,7 +6,6 @@ module Mongoid
|
|
|
7
6
|
class HasOne
|
|
8
7
|
# Eager class for has_one associations.
|
|
9
8
|
class Eager < Association::Eager
|
|
10
|
-
|
|
11
9
|
private
|
|
12
10
|
|
|
13
11
|
def preload
|
|
@@ -28,7 +26,6 @@ module Mongoid
|
|
|
28
26
|
def key
|
|
29
27
|
@association.foreign_key
|
|
30
28
|
end
|
|
31
|
-
|
|
32
29
|
end
|
|
33
30
|
end
|
|
34
31
|
end
|