mongoid 7.2.1 → 9.0.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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +20 -20
- data/LICENSE +1 -1
- data/README.md +7 -12
- data/Rakefile +58 -1
- data/lib/config/locales/en.yml +191 -60
- data/lib/mongoid/association/accessors.rb +67 -53
- data/lib/mongoid/association/bindable.rb +77 -31
- data/lib/mongoid/association/builders.rb +8 -14
- data/lib/mongoid/association/constrainable.rb +2 -5
- data/lib/mongoid/association/depending.rb +20 -12
- data/lib/mongoid/association/eager.rb +160 -0
- data/lib/mongoid/association/eager_loadable.rb +41 -11
- data/lib/mongoid/association/embedded/batchable.rb +63 -52
- data/lib/mongoid/association/embedded/cyclic.rb +4 -12
- data/lib/mongoid/association/embedded/eager.rb +23 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +29 -13
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +3 -5
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +25 -23
- data/lib/mongoid/association/embedded/embedded_in.rb +11 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -9
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +5 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +226 -203
- data/lib/mongoid/association/embedded/embeds_many.rb +3 -33
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +3 -9
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +20 -8
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +131 -42
- data/lib/mongoid/association/embedded/embeds_one.rb +4 -30
- data/lib/mongoid/association/embedded.rb +2 -1
- data/lib/mongoid/association/macros.rb +47 -16
- data/lib/mongoid/association/many.rb +12 -24
- data/lib/mongoid/association/marshalable.rb +4 -5
- data/lib/mongoid/association/nested/many.rb +14 -19
- data/lib/mongoid/association/nested/nested_buildable.rb +36 -13
- data/lib/mongoid/association/nested/one.rb +54 -26
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +3 -11
- data/lib/mongoid/association/options.rb +18 -44
- data/lib/mongoid/association/proxy.rb +49 -42
- data/lib/mongoid/association/referenced/auto_save.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -7
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +6 -6
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -2
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +23 -32
- data/lib/mongoid/association/referenced/belongs_to.rb +13 -37
- data/lib/mongoid/association/referenced/counter_cache.rb +18 -26
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -8
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +191 -123
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -42
- data/lib/mongoid/association/referenced/has_many/binding.rb +1 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +471 -496
- data/lib/mongoid/association/referenced/has_many/proxy.rb +182 -179
- data/lib/mongoid/association/referenced/has_many.rb +17 -43
- data/lib/mongoid/association/referenced/has_one/binding.rb +1 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/eager.rb +3 -4
- data/lib/mongoid/association/referenced/has_one/proxy.rb +38 -41
- data/lib/mongoid/association/referenced/has_one.rb +17 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -27
- data/lib/mongoid/association/referenced.rb +1 -1
- data/lib/mongoid/association/reflections.rb +9 -9
- data/lib/mongoid/association/relatable.rb +55 -74
- data/lib/mongoid/association.rb +10 -22
- data/lib/mongoid/atomic/modifiers.rb +7 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +20 -5
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -5
- data/lib/mongoid/atomic/paths/embedded.rb +1 -3
- data/lib/mongoid/atomic/paths/root.rb +1 -5
- data/lib/mongoid/atomic/paths.rb +1 -1
- data/lib/mongoid/atomic.rb +39 -86
- data/lib/mongoid/atomic_update_preparer.rb +88 -0
- data/lib/mongoid/attributes/dynamic.rb +5 -21
- data/lib/mongoid/attributes/embedded.rb +34 -0
- data/lib/mongoid/attributes/nested.rb +9 -13
- data/lib/mongoid/attributes/processing.rb +43 -28
- data/lib/mongoid/attributes/projector.rb +120 -0
- data/lib/mongoid/attributes/readonly.rb +4 -8
- data/lib/mongoid/attributes.rb +85 -89
- data/lib/mongoid/cacheable.rb +5 -9
- data/lib/mongoid/changeable.rb +183 -97
- data/lib/mongoid/clients/factory.rb +58 -15
- data/lib/mongoid/clients/options.rb +117 -8
- data/lib/mongoid/clients/sessions.rb +246 -84
- data/lib/mongoid/clients/storage_options.rb +37 -11
- data/lib/mongoid/clients/validators/storage.rb +4 -24
- data/lib/mongoid/clients/validators.rb +1 -1
- data/lib/mongoid/clients.rb +37 -14
- data/lib/mongoid/collection_configurable.rb +59 -0
- data/lib/mongoid/composable.rb +7 -7
- data/lib/mongoid/config/defaults.rb +40 -0
- data/lib/mongoid/config/encryption.rb +213 -0
- data/lib/mongoid/config/environment.rb +25 -5
- data/lib/mongoid/config/introspection.rb +152 -0
- data/lib/mongoid/config/options.rb +11 -14
- data/lib/mongoid/config/validators/async_query_executor.rb +34 -0
- data/lib/mongoid/config/validators/client.rb +7 -23
- data/lib/mongoid/config/validators/option.rb +1 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +183 -46
- data/lib/mongoid/contextual/aggregable/memory.rb +38 -26
- data/lib/mongoid/contextual/aggregable/mongo.rb +26 -32
- data/lib/mongoid/contextual/aggregable/none.rb +66 -0
- data/lib/mongoid/contextual/aggregable.rb +18 -0
- data/lib/mongoid/contextual/atomic.rb +97 -30
- data/lib/mongoid/contextual/command.rb +3 -5
- data/lib/mongoid/contextual/map_reduce.rb +8 -33
- data/lib/mongoid/contextual/memory.rb +396 -89
- data/lib/mongoid/contextual/mongo/documents_loader.rb +178 -0
- data/lib/mongoid/contextual/mongo.rb +640 -311
- data/lib/mongoid/contextual/none.rb +244 -30
- data/lib/mongoid/contextual/queryable.rb +5 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +34 -14
- data/lib/mongoid/criteria/findable.rb +52 -22
- data/lib/mongoid/criteria/includable.rb +31 -34
- data/lib/mongoid/criteria/inspectable.rb +4 -3
- data/lib/mongoid/criteria/marshalable.rb +14 -7
- data/lib/mongoid/criteria/modifiable.rb +5 -19
- data/lib/mongoid/criteria/options.rb +1 -3
- data/lib/mongoid/criteria/permission.rb +6 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +3 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +1 -25
- data/lib/mongoid/criteria/queryable/extensions/array.rb +6 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -9
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -7
- data/lib/mongoid/criteria/queryable/extensions/date.rb +10 -11
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +8 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +48 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -13
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +19 -34
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +6 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +8 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -5
- data/lib/mongoid/criteria/queryable/key.rb +15 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +1 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +69 -50
- data/lib/mongoid/criteria/queryable/optional.rb +12 -62
- data/lib/mongoid/criteria/queryable/options.rb +3 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +2 -14
- data/lib/mongoid/criteria/queryable/selectable.rb +87 -124
- data/lib/mongoid/criteria/queryable/selector.rb +96 -25
- data/lib/mongoid/criteria/queryable/smash.rb +41 -18
- data/lib/mongoid/criteria/queryable/storable.rb +14 -9
- data/lib/mongoid/criteria/queryable.rb +12 -13
- data/lib/mongoid/criteria/scopable.rb +32 -21
- data/lib/mongoid/criteria/translator.rb +46 -0
- data/lib/mongoid/criteria.rb +60 -109
- data/lib/mongoid/deprecable.rb +38 -0
- data/lib/mongoid/deprecation.rb +29 -0
- data/lib/mongoid/document.rb +263 -173
- data/lib/mongoid/encryptable.rb +53 -0
- data/lib/mongoid/equality.rb +22 -25
- data/lib/mongoid/errors/ambiguous_relationship.rb +3 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
- data/lib/mongoid/errors/callback.rb +1 -3
- data/lib/mongoid/errors/create_collection_failure.rb +34 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +9 -12
- data/lib/mongoid/errors/document_not_destroyed.rb +3 -7
- data/lib/mongoid/errors/document_not_found.rb +34 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +28 -0
- data/lib/mongoid/errors/empty_config_file.rb +26 -0
- data/lib/mongoid/errors/immutable_attribute.rb +27 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +26 -0
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
- data/lib/mongoid/errors/invalid_collection.rb +1 -1
- data/lib/mongoid/errors/invalid_config_file.rb +26 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -5
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_field.rb +7 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +1 -1
- data/lib/mongoid/errors/invalid_field_option.rb +1 -3
- data/lib/mongoid/errors/invalid_field_type.rb +27 -0
- data/lib/mongoid/errors/invalid_find.rb +1 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +23 -0
- data/lib/mongoid/errors/invalid_includes.rb +1 -3
- data/lib/mongoid/errors/invalid_index.rb +1 -3
- data/lib/mongoid/errors/invalid_options.rb +1 -3
- data/lib/mongoid/errors/invalid_path.rb +1 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +1 -5
- data/lib/mongoid/errors/invalid_query.rb +1 -1
- data/lib/mongoid/errors/invalid_relation.rb +2 -8
- data/lib/mongoid/errors/invalid_relation_option.rb +2 -4
- data/lib/mongoid/errors/invalid_scope.rb +1 -3
- data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -2
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -3
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -3
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +8 -16
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +2 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -3
- data/lib/mongoid/errors/no_client_database.rb +2 -4
- data/lib/mongoid/errors/no_client_hosts.rb +2 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -3
- data/lib/mongoid/errors/no_default_client.rb +1 -3
- data/lib/mongoid/errors/no_environment.rb +1 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -3
- data/lib/mongoid/errors/no_metadata.rb +1 -3
- data/lib/mongoid/errors/no_parent.rb +1 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -4
- data/lib/mongoid/errors/readonly_document.rb +2 -6
- data/lib/mongoid/errors/rollback.rb +15 -0
- data/lib/mongoid/errors/scope_overwrite.rb +1 -1
- data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -2
- data/lib/mongoid/errors/transaction_error.rb +25 -0
- data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -3
- data/lib/mongoid/errors/unsaved_document.rb +2 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -3
- data/lib/mongoid/errors/validations.rb +1 -1
- data/lib/mongoid/errors.rb +18 -5
- data/lib/mongoid/evolvable.rb +2 -4
- data/lib/mongoid/extensions/array.rb +20 -58
- data/lib/mongoid/extensions/big_decimal.rb +44 -24
- data/lib/mongoid/extensions/binary.rb +45 -0
- data/lib/mongoid/extensions/boolean.rb +11 -6
- data/lib/mongoid/extensions/date.rb +31 -29
- data/lib/mongoid/extensions/date_time.rb +5 -16
- data/lib/mongoid/extensions/decimal128.rb +3 -5
- data/lib/mongoid/extensions/false_class.rb +8 -10
- data/lib/mongoid/extensions/float.rb +11 -12
- data/lib/mongoid/extensions/hash.rb +28 -148
- data/lib/mongoid/extensions/integer.rb +13 -14
- data/lib/mongoid/extensions/module.rb +5 -5
- data/lib/mongoid/extensions/nil_class.rb +5 -7
- data/lib/mongoid/extensions/object.rb +32 -81
- data/lib/mongoid/extensions/object_id.rb +3 -7
- data/lib/mongoid/extensions/range.rb +47 -24
- data/lib/mongoid/extensions/raw_value.rb +34 -0
- data/lib/mongoid/extensions/regexp.rb +14 -7
- data/lib/mongoid/extensions/set.rb +24 -13
- data/lib/mongoid/extensions/string.rb +30 -62
- data/lib/mongoid/extensions/symbol.rb +9 -22
- data/lib/mongoid/extensions/time.rb +30 -40
- data/lib/mongoid/extensions/time_with_zone.rb +18 -11
- data/lib/mongoid/extensions/true_class.rb +8 -10
- data/lib/mongoid/extensions.rb +3 -20
- data/lib/mongoid/factory.rb +178 -37
- data/lib/mongoid/fields/encrypted.rb +48 -0
- data/lib/mongoid/fields/foreign_key.rb +39 -27
- data/lib/mongoid/fields/localized.rb +25 -15
- data/lib/mongoid/fields/standard.rb +22 -40
- data/lib/mongoid/fields/validators/macro.rb +6 -19
- data/lib/mongoid/fields/validators.rb +1 -1
- data/lib/mongoid/fields.rb +354 -76
- data/lib/mongoid/findable.rb +62 -22
- data/lib/mongoid/indexable/specification.rb +55 -34
- data/lib/mongoid/indexable/validators/options.rb +7 -9
- data/lib/mongoid/indexable.rb +2 -18
- data/lib/mongoid/inspectable.rb +34 -11
- data/lib/mongoid/interceptable.rb +197 -41
- data/lib/mongoid/loadable.rb +83 -0
- data/lib/mongoid/loggable.rb +1 -9
- data/lib/mongoid/matchable.rb +2 -6
- data/lib/mongoid/matcher/all.rb +15 -0
- data/lib/mongoid/matcher/and.rb +14 -0
- data/lib/mongoid/matcher/bits.rb +60 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +41 -0
- data/lib/mongoid/matcher/bits_all_set.rb +41 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +41 -0
- data/lib/mongoid/matcher/bits_any_set.rb +41 -0
- data/lib/mongoid/matcher/elem_match.rb +17 -1
- data/lib/mongoid/matcher/elem_match_expression.rb +14 -2
- data/lib/mongoid/matcher/eq.rb +15 -0
- data/lib/mongoid/matcher/eq_impl.rb +54 -2
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +18 -1
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +22 -14
- data/lib/mongoid/matcher/expression_operator.rb +14 -0
- data/lib/mongoid/matcher/field_expression.rb +19 -5
- data/lib/mongoid/matcher/field_operator.rb +30 -0
- data/lib/mongoid/matcher/gt.rb +15 -0
- data/lib/mongoid/matcher/gte.rb +15 -0
- data/lib/mongoid/matcher/in.rb +15 -0
- data/lib/mongoid/matcher/lt.rb +15 -0
- data/lib/mongoid/matcher/lte.rb +15 -0
- data/lib/mongoid/matcher/mod.rb +33 -0
- data/lib/mongoid/matcher/ne.rb +15 -0
- data/lib/mongoid/matcher/nin.rb +15 -0
- data/lib/mongoid/matcher/nor.rb +14 -0
- data/lib/mongoid/matcher/not.rb +16 -0
- data/lib/mongoid/matcher/or.rb +14 -0
- data/lib/mongoid/matcher/regex.rb +24 -0
- data/lib/mongoid/matcher/size.rb +16 -0
- data/lib/mongoid/matcher/type.rb +124 -0
- data/lib/mongoid/matcher.rb +59 -52
- data/lib/mongoid/persistable/creatable.rb +25 -29
- data/lib/mongoid/persistable/deletable.rb +10 -23
- data/lib/mongoid/persistable/destroyable.rb +37 -11
- data/lib/mongoid/persistable/incrementable.rb +2 -6
- data/lib/mongoid/persistable/logical.rb +1 -5
- data/lib/mongoid/persistable/maxable.rb +37 -0
- data/lib/mongoid/persistable/minable.rb +37 -0
- data/lib/mongoid/persistable/multipliable.rb +36 -0
- data/lib/mongoid/persistable/poppable.rb +1 -5
- data/lib/mongoid/persistable/pullable.rb +1 -7
- data/lib/mongoid/persistable/pushable.rb +1 -7
- data/lib/mongoid/persistable/renamable.rb +1 -5
- data/lib/mongoid/persistable/savable.rb +14 -8
- data/lib/mongoid/persistable/settable.rb +1 -5
- data/lib/mongoid/persistable/unsettable.rb +3 -7
- data/lib/mongoid/persistable/updatable.rb +114 -28
- data/lib/mongoid/persistable/upsertable.rb +33 -8
- data/lib/mongoid/persistable.rb +17 -27
- data/lib/mongoid/persistence_context.rb +111 -43
- data/lib/mongoid/positional.rb +1 -5
- data/lib/mongoid/railtie.rb +23 -15
- data/lib/mongoid/railties/bson_object_id_serializer.rb +39 -0
- data/lib/mongoid/railties/console_sandbox.rb +42 -0
- data/lib/mongoid/railties/controller_runtime.rb +21 -6
- data/lib/mongoid/railties/database.rake +19 -2
- data/lib/mongoid/reloadable.rb +45 -42
- data/lib/mongoid/scopable.rb +25 -53
- data/lib/mongoid/search_indexable.rb +167 -0
- data/lib/mongoid/selectable.rb +6 -17
- data/lib/mongoid/serializable.rb +11 -21
- data/lib/mongoid/shardable.rb +50 -16
- data/lib/mongoid/stateful.rb +66 -22
- data/lib/mongoid/stringified_symbol.rb +19 -7
- data/lib/mongoid/tasks/database.rake +25 -0
- data/lib/mongoid/tasks/database.rb +84 -8
- data/lib/mongoid/tasks/encryption.rake +59 -0
- data/lib/mongoid/tasks/encryption.rb +108 -0
- data/lib/mongoid/threaded/lifecycle.rb +6 -26
- data/lib/mongoid/threaded.rb +131 -92
- data/lib/mongoid/timestamps/created/short.rb +1 -1
- data/lib/mongoid/timestamps/created.rb +4 -4
- data/lib/mongoid/timestamps/short.rb +1 -1
- data/lib/mongoid/timestamps/timeless.rb +29 -7
- data/lib/mongoid/timestamps/updated/short.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +3 -5
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/touchable.rb +155 -29
- data/lib/mongoid/traversable.rb +180 -125
- data/lib/mongoid/utils.rb +52 -0
- data/lib/mongoid/validatable/associated.rb +97 -21
- data/lib/mongoid/validatable/format.rb +1 -1
- data/lib/mongoid/validatable/length.rb +1 -1
- data/lib/mongoid/validatable/localizable.rb +2 -4
- data/lib/mongoid/validatable/macros.rb +10 -14
- data/lib/mongoid/validatable/presence.rb +7 -13
- data/lib/mongoid/validatable/queryable.rb +9 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -39
- data/lib/mongoid/validatable.rb +20 -29
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/warnings.rb +37 -0
- data/lib/mongoid.rb +56 -22
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +44 -64
- data/lib/rails/generators/mongoid/model/model_generator.rb +4 -1
- data/lib/rails/generators/mongoid_generator.rb +13 -1
- data/lib/rails/mongoid.rb +4 -32
- data/spec/config/mongoid.yml +16 -1
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/active_job_spec.rb +32 -0
- data/spec/integration/app_spec.rb +180 -89
- data/spec/integration/associations/belongs_to_spec.rb +19 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +58 -0
- data/spec/integration/associations/embedded_spec.rb +90 -7
- data/spec/integration/associations/embeds_many_spec.rb +197 -1
- data/spec/integration/associations/embeds_one_spec.rb +19 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +1 -1
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +62 -0
- data/spec/integration/associations/has_many_spec.rb +1 -1
- data/spec/integration/associations/has_one_spec.rb +145 -1
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -1
- data/spec/integration/associations/reverse_population_spec.rb +1 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +1 -1
- data/spec/integration/associations/scope_option_spec.rb +102 -0
- data/spec/integration/atomic/modifiers_spec.rb +1 -1
- data/spec/integration/bson_regexp_raw_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +147 -3
- data/spec/integration/callbacks_spec.rb +398 -8
- data/spec/integration/contextual/empty_spec.rb +142 -0
- data/spec/integration/criteria/alias_query_spec.rb +98 -0
- data/spec/integration/criteria/date_field_spec.rb +2 -2
- data/spec/integration/criteria/default_scope_spec.rb +52 -0
- data/spec/integration/criteria/logical_spec.rb +12 -0
- data/spec/integration/criteria/range_spec.rb +358 -0
- data/spec/integration/criteria/raw_value_spec.rb +525 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +126 -15
- data/spec/integration/discriminator_key_spec.rb +119 -81
- data/spec/integration/discriminator_value_spec.rb +1 -1
- data/spec/integration/document_spec.rb +31 -1
- data/spec/integration/dots_and_dollars_spec.rb +278 -0
- data/spec/integration/encryption_spec.rb +100 -0
- data/spec/integration/i18n_fallbacks_spec.rb +10 -52
- data/spec/integration/matcher_examples_spec.rb +21 -14
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +144 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +144 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +46 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +96 -0
- data/spec/integration/matcher_operator_data/in.yml +16 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/size.yml +0 -3
- data/spec/integration/matcher_operator_data/type.yml +64 -0
- data/spec/integration/matcher_operator_data/type_array.yml +15 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +37 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +26 -3
- data/spec/integration/matcher_spec.rb +50 -1
- data/spec/integration/persistence/range_field_spec.rb +351 -0
- data/spec/integration/server_query_spec.rb +1 -1
- data/spec/integration/shardable_spec.rb +1 -1
- data/spec/integration/stringified_symbol_field_spec.rb +17 -3
- data/spec/lite_spec_helper.rb +47 -14
- data/spec/mongoid/association/accessors_spec.rb +31 -19
- data/spec/mongoid/association/auto_save_spec.rb +73 -34
- data/spec/mongoid/association/builders_spec.rb +2 -2
- data/spec/mongoid/association/constrainable_spec.rb +1 -1
- data/spec/mongoid/association/counter_cache_spec.rb +34 -34
- data/spec/mongoid/association/depending_spec.rb +397 -358
- data/spec/mongoid/association/eager_spec.rb +56 -6
- data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +3 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -2
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +55 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +110 -23
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -8
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +113 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +712 -203
- data/spec/mongoid/association/embedded/embeds_many_models.rb +189 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +14 -2
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +69 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +26 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +37 -24
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +25 -2
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -2
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +29 -1
- data/spec/mongoid/association/macros_spec.rb +10 -10
- data/spec/mongoid/association/nested/many_spec.rb +1 -1
- data/spec/mongoid/association/nested/one_spec.rb +17 -13
- data/spec/mongoid/association/options_spec.rb +1 -1
- data/spec/mongoid/association/polymorphic_spec.rb +1 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -2
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +110 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +51 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +113 -59
- data/spec/mongoid/association/referenced/belongs_to_models.rb +12 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +22 -2
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +27 -22
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +32 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +386 -376
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +44 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +57 -3
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +131 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +24 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +313 -134
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1313 -2109
- data/spec/mongoid/association/referenced/has_many_models.rb +39 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_many_spec.rb +47 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +54 -10
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +134 -28
- data/spec/mongoid/association/referenced/has_one_models.rb +43 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one_spec.rb +22 -1
- data/spec/mongoid/association/reflections_spec.rb +1 -1
- data/spec/mongoid/association/syncable_spec.rb +47 -33
- data/spec/mongoid/association_spec.rb +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +1 -1
- data/spec/mongoid/atomic/paths_spec.rb +65 -27
- data/spec/mongoid/atomic_spec.rb +29 -7
- data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
- data/spec/mongoid/attributes/dynamic_spec.rb +1 -1
- data/spec/mongoid/attributes/embedded_spec.rb +118 -0
- data/spec/mongoid/attributes/nested_spec.rb +147 -78
- data/spec/mongoid/attributes/nested_spec_models.rb +49 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +41 -0
- data/spec/mongoid/attributes/readonly_spec.rb +23 -23
- data/spec/mongoid/attributes_spec.rb +921 -69
- data/spec/mongoid/cacheable_spec.rb +5 -5
- data/spec/mongoid/changeable_spec.rb +468 -76
- data/spec/mongoid/clients/factory_spec.rb +152 -30
- data/spec/mongoid/clients/options_spec.rb +24 -12
- data/spec/mongoid/clients/sessions_spec.rb +49 -71
- data/spec/mongoid/clients/transactions_spec.rb +971 -176
- data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
- data/spec/mongoid/clients_spec.rb +230 -22
- data/spec/mongoid/collection_configurable_spec.rb +159 -0
- data/spec/mongoid/composable_spec.rb +1 -1
- data/spec/mongoid/config/defaults_spec.rb +99 -0
- data/spec/mongoid/config/encryption_spec.rb +152 -0
- data/spec/mongoid/config/environment_spec.rb +126 -39
- data/spec/mongoid/config/introspection_spec.rb +114 -0
- data/spec/mongoid/config/options_spec.rb +1 -1
- data/spec/mongoid/config_spec.rb +375 -43
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +432 -154
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +63 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +95 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +49 -0
- data/spec/mongoid/contextual/atomic_spec.rb +329 -87
- data/spec/mongoid/contextual/map_reduce_spec.rb +5 -19
- data/spec/mongoid/contextual/memory_spec.rb +1479 -127
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +194 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3374 -1254
- data/spec/mongoid/contextual/none_spec.rb +79 -68
- data/spec/mongoid/copyable_spec.rb +465 -23
- data/spec/mongoid/copyable_spec_models.rb +1 -1
- data/spec/mongoid/criteria/findable_spec.rb +295 -229
- data/spec/mongoid/criteria/includable_spec.rb +1493 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +55 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +1 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +19 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +38 -38
- data/spec/mongoid/criteria/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -74
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +8 -20
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +135 -27
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +32 -12
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -16
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +74 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +238 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -12
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -12
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -132
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -60
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +12 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +106 -8
- data/spec/mongoid/criteria/queryable/optional_spec.rb +17 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +700 -26
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +149 -683
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +186 -6
- data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +87 -1
- data/spec/mongoid/criteria/scopable_spec.rb +128 -1
- data/spec/mongoid/criteria/translator_spec.rb +133 -0
- data/spec/mongoid/criteria_projection_spec.rb +407 -0
- data/spec/mongoid/criteria_spec.rb +1029 -1806
- data/spec/mongoid/document_fields_spec.rb +180 -5
- data/spec/mongoid/document_persistence_context_spec.rb +77 -1
- data/spec/mongoid/document_query_spec.rb +55 -4
- data/spec/mongoid/document_spec.rb +43 -172
- data/spec/mongoid/equality_spec.rb +7 -8
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -1
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
- data/spec/mongoid/errors/callback_spec.rb +1 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +2 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +77 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +1 -1
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +6 -6
- data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -2
- data/spec/mongoid/errors/invalid_field_type_spec.rb +56 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +2 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +1 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +1 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +4 -4
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_database_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -1
- data/spec/mongoid/errors/no_clients_config_spec.rb +1 -1
- data/spec/mongoid/errors/no_environment_spec.rb +4 -4
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +1 -1
- data/spec/mongoid/errors/no_parent_spec.rb +1 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +3 -3
- data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -2
- data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +1 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -1
- data/spec/mongoid/errors/validations_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +19 -265
- data/spec/mongoid/extensions/big_decimal_spec.rb +713 -213
- data/spec/mongoid/extensions/binary_spec.rb +45 -10
- data/spec/mongoid/extensions/boolean_spec.rb +69 -83
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +15 -11
- data/spec/mongoid/extensions/date_spec.rb +74 -22
- data/spec/mongoid/extensions/date_time_spec.rb +18 -19
- data/spec/mongoid/extensions/decimal128_spec.rb +1 -1
- data/spec/mongoid/extensions/false_class_spec.rb +2 -9
- data/spec/mongoid/extensions/float_spec.rb +56 -84
- data/spec/mongoid/extensions/hash_spec.rb +45 -219
- data/spec/mongoid/extensions/integer_spec.rb +53 -73
- data/spec/mongoid/extensions/module_spec.rb +1 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/extensions/object_id_spec.rb +1 -1
- data/spec/mongoid/extensions/object_spec.rb +1 -177
- data/spec/mongoid/extensions/range_spec.rb +254 -64
- data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
- data/spec/mongoid/extensions/regexp_spec.rb +59 -34
- data/spec/mongoid/extensions/set_spec.rb +105 -1
- data/spec/mongoid/extensions/string_spec.rb +21 -104
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -1
- data/spec/mongoid/extensions/symbol_spec.rb +15 -53
- data/spec/mongoid/extensions/time_spec.rb +345 -131
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -107
- data/spec/mongoid/extensions/true_class_spec.rb +2 -9
- data/spec/mongoid/factory_spec.rb +63 -2
- data/spec/mongoid/fields/foreign_key_spec.rb +282 -120
- data/spec/mongoid/fields/localized_spec.rb +85 -42
- data/spec/mongoid/fields/standard_spec.rb +1 -1
- data/spec/mongoid/fields_spec.rb +826 -121
- data/spec/mongoid/findable_spec.rb +442 -80
- data/spec/mongoid/indexable/specification_spec.rb +132 -14
- data/spec/mongoid/indexable_spec.rb +361 -23
- data/spec/mongoid/inspectable_spec.rb +93 -5
- data/spec/mongoid/interceptable_spec.rb +926 -116
- data/spec/mongoid/interceptable_spec_models.rb +236 -4
- data/spec/mongoid/loading_spec.rb +110 -0
- data/spec/mongoid/loggable_spec.rb +1 -1
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +68 -88
- data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -15
- data/spec/mongoid/mongoizable_spec.rb +286 -0
- data/spec/mongoid/monkey_patches_spec.rb +211 -0
- data/spec/mongoid/persistable/creatable_spec.rb +5 -5
- data/spec/mongoid/persistable/deletable_spec.rb +267 -27
- data/spec/mongoid/persistable/destroyable_spec.rb +409 -24
- data/spec/mongoid/persistable/incrementable_spec.rb +46 -9
- data/spec/mongoid/persistable/logical_spec.rb +42 -5
- data/spec/mongoid/persistable/maxable_spec.rb +147 -0
- data/spec/mongoid/persistable/minable_spec.rb +147 -0
- data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
- data/spec/mongoid/persistable/poppable_spec.rb +41 -5
- data/spec/mongoid/persistable/pullable_spec.rb +81 -9
- data/spec/mongoid/persistable/pushable_spec.rb +81 -9
- data/spec/mongoid/persistable/renamable_spec.rb +40 -4
- data/spec/mongoid/persistable/savable_spec.rb +114 -20
- data/spec/mongoid/persistable/settable_spec.rb +77 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +41 -5
- data/spec/mongoid/persistable/updatable_spec.rb +64 -52
- data/spec/mongoid/persistable/upsertable_spec.rb +124 -4
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/persistence_context_spec.rb +58 -59
- data/spec/mongoid/positional_spec.rb +1 -1
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
- data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
- data/spec/mongoid/relations/proxy_spec.rb +7 -7
- data/spec/mongoid/reloadable_spec.rb +255 -30
- data/spec/mongoid/scopable_spec.rb +198 -58
- data/spec/mongoid/search_indexable_spec.rb +147 -0
- data/spec/mongoid/selectable_spec.rb +7 -7
- data/spec/mongoid/serializable_spec.rb +19 -40
- data/spec/mongoid/shardable_models.rb +15 -0
- data/spec/mongoid/shardable_spec.rb +181 -31
- data/spec/mongoid/stateful_spec.rb +152 -10
- data/spec/mongoid/tasks/database_rake_spec.rb +193 -42
- data/spec/mongoid/tasks/database_spec.rb +175 -2
- data/spec/mongoid/tasks/encryption_spec.rb +187 -0
- data/spec/mongoid/threaded_spec.rb +40 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +2 -2
- data/spec/mongoid/timestamps/created_spec.rb +2 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +3 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +4 -4
- data/spec/mongoid/timestamps/updated_spec.rb +4 -4
- data/spec/mongoid/timestamps_spec.rb +399 -11
- data/spec/mongoid/timestamps_spec_models.rb +68 -0
- data/spec/mongoid/touchable_spec.rb +971 -54
- data/spec/mongoid/touchable_spec_models.rb +154 -0
- data/spec/mongoid/traversable_spec.rb +79 -37
- data/spec/mongoid/validatable/associated_spec.rb +14 -31
- data/spec/mongoid/validatable/format_spec.rb +1 -1
- data/spec/mongoid/validatable/length_spec.rb +1 -1
- data/spec/mongoid/validatable/numericality_spec.rb +1 -1
- data/spec/mongoid/validatable/presence_spec.rb +27 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +170 -99
- data/spec/mongoid/validatable_spec.rb +4 -4
- data/spec/mongoid/warnings_spec.rb +36 -0
- data/spec/mongoid_spec.rb +61 -11
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -3
- data/spec/rails/mongoid_spec.rb +28 -132
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/cluster_config.rb +24 -4
- data/spec/shared/lib/mrss/constraints.rb +77 -29
- data/spec/shared/lib/mrss/docker_runner.rb +40 -4
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +64 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +78 -34
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +123 -71
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +187 -40
- data/spec/shared/shlib/set_env.sh +49 -31
- data/spec/spec_helper.rb +46 -49
- data/spec/support/authorization.rb +1 -1
- data/spec/support/client_registry.rb +10 -0
- data/spec/support/constraints.rb +25 -1
- data/spec/support/crypt/models.rb +50 -0
- data/spec/support/crypt.rb +80 -0
- data/spec/support/expectations.rb +1 -1
- data/spec/support/feature_sandbox.rb +72 -0
- data/spec/support/helpers.rb +1 -0
- data/spec/support/immutable_ids.rb +119 -0
- data/spec/support/macros.rb +107 -1
- data/spec/support/models/account.rb +2 -2
- data/spec/support/models/acolyte.rb +1 -1
- data/spec/support/models/actor.rb +1 -1
- data/spec/support/models/actress.rb +1 -1
- data/spec/support/models/address.rb +7 -1
- 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 -1
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +1 -1
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +1 -1
- data/spec/support/models/armrest.rb +1 -1
- data/spec/support/models/array_field.rb +1 -1
- data/spec/support/models/article.rb +1 -1
- data/spec/support/models/artist.rb +3 -2
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +4 -0
- data/spec/support/models/audio.rb +1 -1
- data/spec/support/models/augmentation.rb +13 -1
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +13 -1
- data/spec/support/models/bar.rb +1 -1
- data/spec/support/models/basic.rb +1 -1
- data/spec/support/models/bed.rb +1 -1
- data/spec/support/models/big_palette.rb +1 -1
- data/spec/support/models/birthday.rb +1 -1
- data/spec/support/models/bolt.rb +8 -0
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +2 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -1
- data/spec/support/models/building.rb +3 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +1 -1
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +1 -1
- data/spec/support/models/car.rb +1 -1
- data/spec/support/models/cat.rb +1 -1
- data/spec/support/models/catalog.rb +25 -0
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +4 -4
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +1 -1
- data/spec/support/models/circuit.rb +1 -1
- data/spec/support/models/circus.rb +4 -1
- data/spec/support/models/code.rb +3 -1
- data/spec/support/models/coding/pull_request.rb +1 -1
- data/spec/support/models/coding.rb +1 -1
- data/spec/support/models/comment.rb +1 -1
- data/spec/support/models/company.rb +1 -1
- data/spec/support/models/consumption_period.rb +1 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +1 -1
- data/spec/support/models/country_code.rb +3 -1
- data/spec/support/models/courier_job.rb +1 -1
- data/spec/support/models/cover.rb +11 -0
- data/spec/support/models/crate.rb +1 -1
- data/spec/support/models/customer.rb +1 -1
- data/spec/support/models/customer_address.rb +1 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +1 -1
- data/spec/support/models/description.rb +1 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +1 -1
- data/spec/support/models/doctor.rb +1 -1
- data/spec/support/models/dog.rb +1 -1
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +1 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +1 -1
- 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 -1
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +1 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +1 -1
- 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 +1 -1
- data/spec/support/models/eye_bowl.rb +1 -1
- data/spec/support/models/face.rb +1 -1
- data/spec/support/models/fanatic.rb +9 -0
- data/spec/support/models/favorite.rb +8 -2
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +1 -1
- data/spec/support/models/fish.rb +1 -1
- data/spec/support/models/folder.rb +1 -1
- data/spec/support/models/folder_item.rb +1 -1
- data/spec/support/models/fruits.rb +1 -1
- data/spec/support/models/game.rb +1 -1
- data/spec/support/models/ghost.rb +1 -1
- data/spec/support/models/guitar.rb +1 -1
- data/spec/support/models/hole.rb +13 -0
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +1 -1
- data/spec/support/models/html_writer.rb +1 -1
- data/spec/support/models/id_key.rb +1 -1
- data/spec/support/models/idnodef.rb +1 -1
- data/spec/support/models/image.rb +1 -1
- data/spec/support/models/implant.rb +10 -1
- data/spec/support/models/instrument.rb +1 -1
- data/spec/support/models/item.rb +1 -1
- data/spec/support/models/jar.rb +1 -1
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +5 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +1 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +1 -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 -1
- data/spec/support/models/manufacturer.rb +1 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +2 -1
- data/spec/support/models/message.rb +1 -1
- data/spec/support/models/minim.rb +1 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/mop.rb +10 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -1
- data/spec/support/models/name.rb +11 -1
- data/spec/support/models/name_only.rb +1 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +1 -1
- data/spec/support/models/nut.rb +8 -0
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +3 -1
- data/spec/support/models/ordered_post.rb +2 -2
- 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 +1 -1
- data/spec/support/models/override.rb +1 -1
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +1 -1
- data/spec/support/models/page.rb +1 -1
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +1 -1
- data/spec/support/models/parent.rb +1 -1
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +15 -1
- data/spec/support/models/patient.rb +1 -1
- data/spec/support/models/pdf_writer.rb +1 -1
- data/spec/support/models/pencil.rb +1 -1
- data/spec/support/models/person.rb +19 -1
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +3 -2
- data/spec/support/models/piano.rb +1 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +3 -1
- data/spec/support/models/post.rb +1 -1
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +13 -1
- data/spec/support/models/preference.rb +1 -1
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +2 -1
- data/spec/support/models/profile.rb +1 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +1 -1
- data/spec/support/models/publication/encyclopedia.rb +1 -1
- data/spec/support/models/publication/review.rb +1 -1
- data/spec/support/models/publication.rb +1 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +11 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/question.rb +1 -1
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +1 -1
- data/spec/support/models/registry.rb +2 -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 +4 -0
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_message.rb +4 -0
- data/spec/support/models/sandbox/sandbox_user.rb +4 -0
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +1 -1
- data/spec/support/models/school.rb +15 -0
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +8 -0
- data/spec/support/models/seat.rb +1 -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 +1 -1
- data/spec/support/models/shape.rb +1 -1
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +19 -0
- data/spec/support/models/shipment_address.rb +1 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +1 -1
- data/spec/support/models/shirt.rb +12 -0
- data/spec/support/models/shop.rb +1 -1
- data/spec/support/models/short_agent.rb +1 -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 -1
- data/spec/support/models/sound.rb +1 -1
- data/spec/support/models/spacer.rb +8 -0
- data/spec/support/models/square.rb +1 -1
- data/spec/support/models/staff.rb +1 -1
- data/spec/support/models/store_as_dup_test1.rb +1 -1
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +1 -1
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +1 -1
- data/spec/support/models/student.rb +15 -0
- data/spec/support/models/sub_item.rb +1 -1
- data/spec/support/models/subscription.rb +1 -1
- data/spec/support/models/survey.rb +1 -1
- data/spec/support/models/symptom.rb +1 -1
- data/spec/support/models/system_role.rb +1 -0
- data/spec/support/models/tag.rb +1 -1
- 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 +8 -0
- data/spec/support/models/title.rb +1 -1
- data/spec/support/models/tool.rb +1 -1
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +1 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +1 -1
- data/spec/support/models/truck.rb +1 -1
- data/spec/support/models/updatable.rb +1 -1
- data/spec/support/models/user.rb +1 -1
- data/spec/support/models/user_account.rb +1 -1
- data/spec/support/models/validation_callback.rb +1 -1
- data/spec/support/models/vehicle.rb +1 -1
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +1 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +1 -1
- data/spec/support/models/video_game.rb +1 -1
- data/spec/support/models/washer.rb +8 -0
- data/spec/support/models/weapon.rb +13 -1
- data/spec/support/models/wiki_page.rb +1 -1
- data/spec/support/models/word.rb +1 -1
- data/spec/support/models/word_origin.rb +1 -1
- data/spec/support/models/writer.rb +1 -1
- data/spec/support/rails_mock.rb +32 -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/shared/time.rb +3 -22
- data/spec/support/sinatra_mock.rb +7 -0
- data/spec/support/spec_config.rb +42 -7
- data.tar.gz.sig +0 -0
- metadata +883 -562
- metadata.gz.sig +0 -0
- data/lib/mongoid/association/referenced/eager.rb +0 -184
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -128
- data/lib/mongoid/contextual/geo_near.rb +0 -269
- data/lib/mongoid/errors/eager_load.rb +0 -26
- data/lib/mongoid/errors/invalid_session_use.rb +0 -26
- data/lib/mongoid/errors/invalid_storage_parent.rb +0 -28
- data/lib/mongoid/errors/invalid_value.rb +0 -18
- data/lib/mongoid/query_cache.rb +0 -333
- data/lib/support/ruby_version.rb +0 -29
- data/spec/mongoid/contextual/geo_near_spec.rb +0 -472
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -61
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -61
- data/spec/mongoid/extensions_spec.rb +0 -32
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -61
- data/spec/mongoid/query_cache_spec.rb +0 -978
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require 'mongoid/association/embedded/batchable'
|
|
5
4
|
|
|
@@ -7,10 +6,76 @@ module Mongoid
|
|
|
7
6
|
module Association
|
|
8
7
|
module Embedded
|
|
9
8
|
class EmbedsMany
|
|
10
|
-
|
|
9
|
+
# Transparent proxy for embeds_many associations.
|
|
10
|
+
# An instance of this class is returned when calling the
|
|
11
|
+
# association getter method on the parent document. This
|
|
12
|
+
# class inherits from Mongoid::Association::Proxy and forwards
|
|
13
|
+
# most of its methods to the target of the association, i.e.
|
|
14
|
+
# the array of child documents.
|
|
11
15
|
class Proxy < Association::Many
|
|
12
16
|
include Batchable
|
|
13
17
|
|
|
18
|
+
# Class-level methods for the Proxy class.
|
|
19
|
+
module ClassMethods
|
|
20
|
+
# Returns the eager loader for this association.
|
|
21
|
+
#
|
|
22
|
+
# @param [ Array<Mongoid::Association> ] associations The
|
|
23
|
+
# associations to be eager loaded
|
|
24
|
+
# @param [ Array<Mongoid::Document> ] docs The parent documents
|
|
25
|
+
# that possess the given associations, which ought to be
|
|
26
|
+
# populated by the eager-loaded documents.
|
|
27
|
+
#
|
|
28
|
+
# @return [ Mongoid::Association::Embedded::Eager ]
|
|
29
|
+
def eager_loader(associations, docs)
|
|
30
|
+
Eager.new(associations, docs)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Returns true if the association is an embedded one. In this case
|
|
34
|
+
# always true.
|
|
35
|
+
#
|
|
36
|
+
# @example Is the association embedded?
|
|
37
|
+
# Association::Embedded::EmbedsMany.embedded?
|
|
38
|
+
#
|
|
39
|
+
# @return [ true ] true.
|
|
40
|
+
def embedded?
|
|
41
|
+
true
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Returns the suffix of the foreign key field, either "_id" or "_ids".
|
|
45
|
+
#
|
|
46
|
+
# @example Get the suffix for the foreign key.
|
|
47
|
+
# Association::Embedded::EmbedsMany.foreign_key_suffix
|
|
48
|
+
#
|
|
49
|
+
# @return [ nil ] nil.
|
|
50
|
+
def foreign_key_suffix
|
|
51
|
+
nil
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
extend ClassMethods
|
|
56
|
+
|
|
57
|
+
# Instantiate a new embeds_many association.
|
|
58
|
+
#
|
|
59
|
+
# @example Create the new association.
|
|
60
|
+
# Many.new(person, addresses, association)
|
|
61
|
+
#
|
|
62
|
+
# @param [ Document ] base The document this association hangs off of.
|
|
63
|
+
# @param [ Array<Document> ] target The child documents of the association.
|
|
64
|
+
# @param [ Mongoid::Association::Relatable ] association The association metadata.
|
|
65
|
+
#
|
|
66
|
+
# @return [ Many ] The proxy.
|
|
67
|
+
def initialize(base, target, association)
|
|
68
|
+
super do
|
|
69
|
+
_target.each_with_index do |doc, index|
|
|
70
|
+
integrate(doc)
|
|
71
|
+
doc._index = index
|
|
72
|
+
end
|
|
73
|
+
update_attributes_hash
|
|
74
|
+
@_unscoped = _target.dup
|
|
75
|
+
@_target = scope(_target)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
14
79
|
# Appends a document or array of documents to the association. Will set
|
|
15
80
|
# the parent and update the index in the process.
|
|
16
81
|
#
|
|
@@ -20,18 +85,21 @@ module Mongoid
|
|
|
20
85
|
# @example Push a document.
|
|
21
86
|
# person.addresses.push(address)
|
|
22
87
|
#
|
|
23
|
-
# @param [ Document
|
|
88
|
+
# @param [ Document... ] *args Any number of documents.
|
|
24
89
|
def <<(*args)
|
|
25
90
|
docs = args.flatten
|
|
91
|
+
return unless docs.any?
|
|
26
92
|
return concat(docs) if docs.size > 1
|
|
27
|
-
|
|
93
|
+
|
|
94
|
+
docs.first.tap do |doc|
|
|
28
95
|
append(doc)
|
|
29
96
|
doc.save if persistable? && !_assigning?
|
|
30
97
|
end
|
|
98
|
+
|
|
31
99
|
self
|
|
32
100
|
end
|
|
33
101
|
|
|
34
|
-
alias
|
|
102
|
+
alias push <<
|
|
35
103
|
|
|
36
104
|
# Get this association as as its representation in the database.
|
|
37
105
|
#
|
|
@@ -39,8 +107,6 @@ module Mongoid
|
|
|
39
107
|
# person.addresses.as_document
|
|
40
108
|
#
|
|
41
109
|
# @return [ Array<Hash> ] The association as stored in the db.
|
|
42
|
-
#
|
|
43
|
-
# @since 2.0.0.rc.1
|
|
44
110
|
def as_document
|
|
45
111
|
as_attributes.collect { |attrs| BSON::Document.new(attrs) }
|
|
46
112
|
end
|
|
@@ -54,8 +120,6 @@ module Mongoid
|
|
|
54
120
|
# @param [ Array<Document> ] docs The docs to add.
|
|
55
121
|
#
|
|
56
122
|
# @return [ Array<Document> ] The documents.
|
|
57
|
-
#
|
|
58
|
-
# @since 2.4.0
|
|
59
123
|
def concat(docs)
|
|
60
124
|
batch_insert(docs) unless docs.empty?
|
|
61
125
|
self
|
|
@@ -72,19 +136,27 @@ module Mongoid
|
|
|
72
136
|
#
|
|
73
137
|
# @return [ Document ] The new document.
|
|
74
138
|
def build(attributes = {}, type = nil)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
139
|
+
Factory.execute_build(type || _association.klass, attributes, execute_callbacks: false).tap do |doc|
|
|
140
|
+
append(doc)
|
|
141
|
+
doc.apply_post_processed_defaults
|
|
142
|
+
yield doc if block_given?
|
|
143
|
+
doc.run_pending_callbacks
|
|
144
|
+
doc.run_callbacks(:build) { doc }
|
|
145
|
+
_base._reset_memoized_descendants!
|
|
146
|
+
end
|
|
82
147
|
end
|
|
83
148
|
|
|
84
|
-
alias
|
|
149
|
+
alias new build
|
|
85
150
|
|
|
86
|
-
# Clear the association. Will delete the documents from the db
|
|
87
|
-
# already persisted.
|
|
151
|
+
# Clear the association. Will delete the documents from the db
|
|
152
|
+
# if they are already persisted.
|
|
153
|
+
#
|
|
154
|
+
# If the host document is not persisted but its _id matches a
|
|
155
|
+
# persisted document, calling #clear on an association will remove
|
|
156
|
+
# the association's documents from the database even though the
|
|
157
|
+
# set of documents in the application (as loaded in the host)
|
|
158
|
+
# is different from what is in the database, and the host may
|
|
159
|
+
# not contain any persisted documents in the association either.
|
|
88
160
|
#
|
|
89
161
|
# @example Clear the association.
|
|
90
162
|
# person.addresses.clear
|
|
@@ -92,6 +164,7 @@ module Mongoid
|
|
|
92
164
|
# @return [ self ] The empty association.
|
|
93
165
|
def clear
|
|
94
166
|
batch_clear(_target.dup)
|
|
167
|
+
update_attributes_hash
|
|
95
168
|
self
|
|
96
169
|
end
|
|
97
170
|
|
|
@@ -100,13 +173,27 @@ module Mongoid
|
|
|
100
173
|
#
|
|
101
174
|
# Use #size if you want the total number of documents.
|
|
102
175
|
#
|
|
176
|
+
# If args or block are present, #count will delegate to the
|
|
177
|
+
# #count method on +target+ and will include both persisted
|
|
178
|
+
# and non-persisted documents.
|
|
179
|
+
#
|
|
103
180
|
# @example Get the count of persisted documents.
|
|
104
181
|
# person.addresses.count
|
|
105
182
|
#
|
|
183
|
+
# @example Get the count of all documents matching a block.
|
|
184
|
+
# person.addresses.count { |a| a.country == "FR" }
|
|
185
|
+
#
|
|
186
|
+
# @example Use #persisted? inside block to count persisted documents.
|
|
187
|
+
# person.addresses.count { |a| a.persisted? && a.country == "FR" }
|
|
188
|
+
#
|
|
189
|
+
# @param [ Object... ] *args Args to delegate to the target.
|
|
190
|
+
#
|
|
106
191
|
# @return [ Integer ] The total number of persisted embedded docs, as
|
|
107
192
|
# flagged by the #persisted? method.
|
|
108
|
-
def count
|
|
109
|
-
_target.
|
|
193
|
+
def count(*args, &block)
|
|
194
|
+
return _target.count(*args, &block) if args.any? || block
|
|
195
|
+
|
|
196
|
+
_target.count(&:persisted?)
|
|
110
197
|
end
|
|
111
198
|
|
|
112
199
|
# Delete the supplied document from the target. This method is proxied
|
|
@@ -117,24 +204,40 @@ module Mongoid
|
|
|
117
204
|
#
|
|
118
205
|
# @param [ Document ] document The document to be deleted.
|
|
119
206
|
#
|
|
120
|
-
# @return [ Document
|
|
121
|
-
#
|
|
122
|
-
# @since 2.0.0.rc.1
|
|
207
|
+
# @return [ Document | nil ] The deleted document or nil if nothing deleted.
|
|
123
208
|
def delete(document)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
209
|
+
execute_callbacks_around(:remove, document) do
|
|
210
|
+
_target.delete_one(document).tap do |doc|
|
|
211
|
+
if doc && !_binding?
|
|
212
|
+
_unscoped.delete_one(doc)
|
|
213
|
+
if _assigning?
|
|
214
|
+
_base.add_atomic_pull(doc)
|
|
215
|
+
else
|
|
216
|
+
doc.delete(suppress: true)
|
|
217
|
+
unbind_one(doc)
|
|
218
|
+
end
|
|
219
|
+
update_attributes_hash
|
|
220
|
+
end
|
|
221
|
+
reindex
|
|
133
222
|
end
|
|
134
223
|
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Mongoid::Extensions::Array defines Array#delete_one, so we need
|
|
227
|
+
# to make sure that method behaves reasonably on proxies, too.
|
|
228
|
+
alias delete_one delete
|
|
229
|
+
|
|
230
|
+
# Removes a single document from the collection *in memory only*.
|
|
231
|
+
# It will *not* persist the change.
|
|
232
|
+
#
|
|
233
|
+
# @param [ Document ] document The document to delete.
|
|
234
|
+
#
|
|
235
|
+
# @api private
|
|
236
|
+
def _remove(document)
|
|
237
|
+
_target.delete_one(document)
|
|
238
|
+
_unscoped.delete_one(document)
|
|
239
|
+
update_attributes_hash
|
|
135
240
|
reindex
|
|
136
|
-
execute_callback :after_remove, document
|
|
137
|
-
doc
|
|
138
241
|
end
|
|
139
242
|
|
|
140
243
|
# Delete all the documents in the association without running callbacks.
|
|
@@ -159,20 +262,14 @@ module Mongoid
|
|
|
159
262
|
# doc.state == "GA"
|
|
160
263
|
# end
|
|
161
264
|
#
|
|
162
|
-
# @return [
|
|
163
|
-
# block was provided.
|
|
164
|
-
#
|
|
165
|
-
# @since 3.1.0
|
|
265
|
+
# @return [ EmbedsMany::Proxy | Enumerator ] The proxy or an
|
|
266
|
+
# enumerator if no block was provided.
|
|
166
267
|
def delete_if
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
self
|
|
173
|
-
else
|
|
174
|
-
super
|
|
175
|
-
end
|
|
268
|
+
return super unless block_given?
|
|
269
|
+
|
|
270
|
+
_target.dup.each { |doc| delete(doc) if yield doc }
|
|
271
|
+
|
|
272
|
+
self
|
|
176
273
|
end
|
|
177
274
|
|
|
178
275
|
# Destroy all the documents in the association whilst running callbacks.
|
|
@@ -195,46 +292,53 @@ module Mongoid
|
|
|
195
292
|
# @example Are there persisted documents?
|
|
196
293
|
# person.posts.exists?
|
|
197
294
|
#
|
|
198
|
-
# @
|
|
199
|
-
|
|
200
|
-
|
|
295
|
+
# @param [ :none | nil | false | Hash | Object ] id_or_conditions
|
|
296
|
+
# When :none (the default), returns true if any persisted
|
|
297
|
+
# documents exist in the association. When nil or false, this
|
|
298
|
+
# will always return false. When a Hash is given, this queries
|
|
299
|
+
# the documents in the association for those that match the given
|
|
300
|
+
# conditions, and returns true if any match which have been
|
|
301
|
+
# persisted. Any other argument is interpreted as an id, and
|
|
302
|
+
# queries for the existence of persisted documents in the
|
|
303
|
+
# association with a matching _id.
|
|
304
|
+
#
|
|
305
|
+
# @return [ true | false ] True if persisted documents exist, false if not.
|
|
306
|
+
def exists?(id_or_conditions = :none)
|
|
307
|
+
case id_or_conditions
|
|
308
|
+
when :none then _target.any?(&:persisted?)
|
|
309
|
+
when nil, false then false
|
|
310
|
+
when Hash then where(id_or_conditions).any?(&:persisted?)
|
|
311
|
+
else where(_id: id_or_conditions).any?(&:persisted?)
|
|
312
|
+
end
|
|
201
313
|
end
|
|
202
314
|
|
|
203
315
|
# Finds a document in this association through several different
|
|
204
316
|
# methods.
|
|
205
317
|
#
|
|
318
|
+
# This method delegates to +Mongoid::Criteria#find+. If this method is
|
|
319
|
+
# not given a block, it returns one or many documents for the provided
|
|
320
|
+
# _id values.
|
|
321
|
+
#
|
|
322
|
+
# If this method is given a block, it returns the first document
|
|
323
|
+
# of those found by the current Criteria object for which the block
|
|
324
|
+
# returns a truthy value.
|
|
325
|
+
#
|
|
206
326
|
# @example Find a document by its id.
|
|
207
327
|
# person.addresses.find(BSON::ObjectId.new)
|
|
208
328
|
#
|
|
209
329
|
# @example Find documents for multiple ids.
|
|
210
330
|
# person.addresses.find([ BSON::ObjectId.new, BSON::ObjectId.new ])
|
|
211
331
|
#
|
|
212
|
-
# @
|
|
213
|
-
#
|
|
214
|
-
# @return [ Array<Document>, Document ] A single or multiple documents.
|
|
215
|
-
def find(*args)
|
|
216
|
-
criteria.find(*args)
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
# Instantiate a new embeds_many association.
|
|
220
|
-
#
|
|
221
|
-
# @example Create the new association.
|
|
222
|
-
# Many.new(person, addresses, association)
|
|
332
|
+
# @example Finds the first matching document using a block.
|
|
333
|
+
# person.addresses.find { |addr| addr.state == 'CA' }
|
|
223
334
|
#
|
|
224
|
-
# @param [
|
|
225
|
-
# @param
|
|
226
|
-
# @
|
|
335
|
+
# @param [ Object... ] *args Various arguments.
|
|
336
|
+
# @param &block Optional block to pass.
|
|
337
|
+
# @yield [ Object ] Yields each enumerable element to the block.
|
|
227
338
|
#
|
|
228
|
-
# @return [
|
|
229
|
-
def
|
|
230
|
-
|
|
231
|
-
_target.each_with_index do |doc, index|
|
|
232
|
-
integrate(doc)
|
|
233
|
-
doc._index = index
|
|
234
|
-
end
|
|
235
|
-
@_unscoped = _target.dup
|
|
236
|
-
@_target = scope(_target)
|
|
237
|
-
end
|
|
339
|
+
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
|
340
|
+
def find(...)
|
|
341
|
+
criteria.find(...)
|
|
238
342
|
end
|
|
239
343
|
|
|
240
344
|
# Get all the documents in the association that are loaded into memory.
|
|
@@ -243,11 +347,7 @@ module Mongoid
|
|
|
243
347
|
# relation.in_memory
|
|
244
348
|
#
|
|
245
349
|
# @return [ Array<Document> ] The documents in memory.
|
|
246
|
-
|
|
247
|
-
# @since 2.1.0
|
|
248
|
-
def in_memory
|
|
249
|
-
_target
|
|
250
|
-
end
|
|
350
|
+
alias in_memory _target
|
|
251
351
|
|
|
252
352
|
# Pop documents off the association. This can be a single document or
|
|
253
353
|
# multiples, and will automatically persist the changes.
|
|
@@ -261,17 +361,12 @@ module Mongoid
|
|
|
261
361
|
# @param [ Integer ] count The number of documents to pop, or 1 if not
|
|
262
362
|
# provided.
|
|
263
363
|
#
|
|
264
|
-
# @return [ Document
|
|
265
|
-
#
|
|
266
|
-
# @since 3.0.0
|
|
364
|
+
# @return [ Document | Array<Document> | nil ] The popped document(s).
|
|
267
365
|
def pop(count = nil)
|
|
268
|
-
if count
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
else
|
|
273
|
-
delete(_target[-1])
|
|
274
|
-
end
|
|
366
|
+
return [] if count&.zero?
|
|
367
|
+
|
|
368
|
+
docs = _target.last(count || 1).each { |doc| delete(doc) }
|
|
369
|
+
(count.nil? || docs.empty?) ? docs.first : docs
|
|
275
370
|
end
|
|
276
371
|
|
|
277
372
|
# Shift documents off the association. This can be a single document or
|
|
@@ -286,15 +381,12 @@ module Mongoid
|
|
|
286
381
|
# @param [ Integer ] count The number of documents to shift, or 1 if not
|
|
287
382
|
# provided.
|
|
288
383
|
#
|
|
289
|
-
# @return [ Document
|
|
384
|
+
# @return [ Document | Array<Document> | nil ] The shifted document(s).
|
|
290
385
|
def shift(count = nil)
|
|
291
|
-
if count
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
else
|
|
296
|
-
delete(_target[0])
|
|
297
|
-
end
|
|
386
|
+
return [] if count&.zero?
|
|
387
|
+
|
|
388
|
+
docs = _target.first(count || 1).each { |doc| delete(doc) }
|
|
389
|
+
(count.nil? || docs.empty?) ? docs.first : docs
|
|
298
390
|
end
|
|
299
391
|
|
|
300
392
|
# Substitutes the supplied target documents for the existing documents
|
|
@@ -303,13 +395,12 @@ module Mongoid
|
|
|
303
395
|
# @example Substitute the association's target.
|
|
304
396
|
# person.addresses.substitute([ address ])
|
|
305
397
|
#
|
|
306
|
-
# @param [ Array<Document> ] docs The replacement docs.
|
|
398
|
+
# @param [ Array<Document> | Array<Hash> ] docs The replacement docs.
|
|
307
399
|
#
|
|
308
400
|
# @return [ Many ] The proxied association.
|
|
309
|
-
#
|
|
310
|
-
# @since 2.0.0.rc.1
|
|
311
401
|
def substitute(docs)
|
|
312
402
|
batch_replace(docs)
|
|
403
|
+
update_attributes_hash
|
|
313
404
|
self
|
|
314
405
|
end
|
|
315
406
|
|
|
@@ -320,8 +411,6 @@ module Mongoid
|
|
|
320
411
|
# person.addresses.unscoped
|
|
321
412
|
#
|
|
322
413
|
# @return [ Criteria ] The unscoped association.
|
|
323
|
-
#
|
|
324
|
-
# @since 2.4.0
|
|
325
414
|
def unscoped
|
|
326
415
|
criterion = klass.unscoped
|
|
327
416
|
criterion.embedded = true
|
|
@@ -331,8 +420,10 @@ module Mongoid
|
|
|
331
420
|
|
|
332
421
|
private
|
|
333
422
|
|
|
423
|
+
attr_accessor :_unscoped
|
|
424
|
+
|
|
334
425
|
def object_already_related?(document)
|
|
335
|
-
_target.any? { |existing| existing.
|
|
426
|
+
_target.any? { |existing| existing._id && existing == document }
|
|
336
427
|
end
|
|
337
428
|
|
|
338
429
|
# Appends the document to the target array, updating the index on the
|
|
@@ -342,15 +433,12 @@ module Mongoid
|
|
|
342
433
|
# relation.append(document)
|
|
343
434
|
#
|
|
344
435
|
# @param [ Document ] document The document to append to the target.
|
|
345
|
-
#
|
|
346
|
-
# @since 2.0.0.rc.1
|
|
347
436
|
def append(document)
|
|
348
437
|
execute_callback :before_add, document
|
|
349
|
-
unless object_already_related?(document)
|
|
350
|
-
_target.push(*scope([document]))
|
|
351
|
-
end
|
|
438
|
+
_target.push(*scope([ document ])) unless object_already_related?(document)
|
|
352
439
|
_unscoped.push(document)
|
|
353
440
|
integrate(document)
|
|
441
|
+
update_attributes_hash
|
|
354
442
|
document._index = _unscoped.size - 1
|
|
355
443
|
execute_callback :after_add, document
|
|
356
444
|
end
|
|
@@ -361,8 +449,6 @@ module Mongoid
|
|
|
361
449
|
# relation.binding([ address ])
|
|
362
450
|
#
|
|
363
451
|
# @return [ Binding ] The many binding.
|
|
364
|
-
#
|
|
365
|
-
# @since 2.0.0.rc.1
|
|
366
452
|
def binding
|
|
367
453
|
Binding.new(_base, _target, _association)
|
|
368
454
|
end
|
|
@@ -375,22 +461,6 @@ module Mongoid
|
|
|
375
461
|
_association.criteria(_base, _target)
|
|
376
462
|
end
|
|
377
463
|
|
|
378
|
-
# Deletes one document from the target and unscoped.
|
|
379
|
-
#
|
|
380
|
-
# @api private
|
|
381
|
-
#
|
|
382
|
-
# @example Delete one document.
|
|
383
|
-
# relation.delete_one(doc)
|
|
384
|
-
#
|
|
385
|
-
# @param [ Document ] document The document to delete.
|
|
386
|
-
#
|
|
387
|
-
# @since 2.4.7
|
|
388
|
-
def delete_one(document)
|
|
389
|
-
_target.delete_one(document)
|
|
390
|
-
_unscoped.delete_one(document)
|
|
391
|
-
reindex
|
|
392
|
-
end
|
|
393
|
-
|
|
394
464
|
# Integrate the document into the association. will set its metadata and
|
|
395
465
|
# attempt to bind the inverse.
|
|
396
466
|
#
|
|
@@ -398,8 +468,6 @@ module Mongoid
|
|
|
398
468
|
# relation.integrate(document)
|
|
399
469
|
#
|
|
400
470
|
# @param [ Document ] document The document to integrate.
|
|
401
|
-
#
|
|
402
|
-
# @since 2.1.0
|
|
403
471
|
def integrate(document)
|
|
404
472
|
characterize_one(document)
|
|
405
473
|
bind_one(document)
|
|
@@ -410,26 +478,30 @@ module Mongoid
|
|
|
410
478
|
#
|
|
411
479
|
# If the method exists on the array, use the default proxy behavior.
|
|
412
480
|
#
|
|
413
|
-
# @param [ Symbol
|
|
414
|
-
# @param [
|
|
415
|
-
# @param
|
|
481
|
+
# @param [ Symbol | String ] name The name of the method.
|
|
482
|
+
# @param [ Object... ] *args The method args.
|
|
483
|
+
# @param &block Optional block to pass.
|
|
416
484
|
#
|
|
417
|
-
# @return [ Criteria
|
|
418
|
-
|
|
485
|
+
# @return [ Criteria | Object ] A Criteria or return value from the target.
|
|
486
|
+
#
|
|
487
|
+
# TODO: make sure we are consistingly using respond_to_missing
|
|
488
|
+
# anywhere we define method_missing.
|
|
489
|
+
# rubocop:disable Style/MissingRespondToMissing
|
|
490
|
+
ruby2_keywords def method_missing(name, *args, &block)
|
|
419
491
|
return super if _target.respond_to?(name)
|
|
492
|
+
|
|
420
493
|
klass.send(:with_scope, criteria) do
|
|
421
494
|
criteria.public_send(name, *args, &block)
|
|
422
495
|
end
|
|
423
496
|
end
|
|
497
|
+
# rubocop:enable Style/MissingRespondToMissing
|
|
424
498
|
|
|
425
499
|
# Are we able to persist this association?
|
|
426
500
|
#
|
|
427
501
|
# @example Can we persist the association?
|
|
428
502
|
# relation.persistable?
|
|
429
503
|
#
|
|
430
|
-
# @return [ true
|
|
431
|
-
#
|
|
432
|
-
# @since 2.1.0
|
|
504
|
+
# @return [ true | false ] If the association is persistable.
|
|
433
505
|
def persistable?
|
|
434
506
|
_base.persisted? && !_binding?
|
|
435
507
|
end
|
|
@@ -440,8 +512,6 @@ module Mongoid
|
|
|
440
512
|
#
|
|
441
513
|
# @example Reindex the association.
|
|
442
514
|
# person.addresses.reindex
|
|
443
|
-
#
|
|
444
|
-
# @since 2.0.0.rc.1
|
|
445
515
|
def reindex
|
|
446
516
|
_unscoped.each_with_index do |doc, index|
|
|
447
517
|
doc._index = index
|
|
@@ -457,12 +527,8 @@ module Mongoid
|
|
|
457
527
|
# @param [ Array<Document> ] docs The documents to scope.
|
|
458
528
|
#
|
|
459
529
|
# @return [ Array<Document> ] The scoped docs.
|
|
460
|
-
#
|
|
461
|
-
# @since 2.4.0
|
|
462
530
|
def scope(docs)
|
|
463
|
-
unless _association.order || _association.klass.default_scoping?
|
|
464
|
-
return docs
|
|
465
|
-
end
|
|
531
|
+
return docs unless _association.order || _association.klass.default_scoping?
|
|
466
532
|
|
|
467
533
|
crit = _association.klass.order_by(_association.order)
|
|
468
534
|
crit.embedded = true
|
|
@@ -477,75 +543,32 @@ module Mongoid
|
|
|
477
543
|
# relation.remove_all({ :num => 1 }, true)
|
|
478
544
|
#
|
|
479
545
|
# @param [ Hash ] conditions Conditions to filter by.
|
|
480
|
-
# @param [ true
|
|
546
|
+
# @param [ true | false ] method :delete or :destroy.
|
|
481
547
|
#
|
|
482
548
|
# @return [ Integer ] The number of documents removed.
|
|
483
549
|
def remove_all(conditions = {}, method = :delete)
|
|
484
550
|
criteria = where(conditions || {})
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
# Get the internal unscoped documents.
|
|
491
|
-
#
|
|
492
|
-
# @example Get the unscoped documents.
|
|
493
|
-
# relation._unscoped
|
|
494
|
-
#
|
|
495
|
-
# @return [ Array<Document> ] The unscoped documents.
|
|
496
|
-
#
|
|
497
|
-
# @since 2.4.0
|
|
498
|
-
def _unscoped
|
|
499
|
-
@_unscoped ||= []
|
|
551
|
+
criteria.size.tap do
|
|
552
|
+
batch_remove(criteria, method)
|
|
553
|
+
update_attributes_hash
|
|
554
|
+
end
|
|
500
555
|
end
|
|
501
556
|
|
|
502
|
-
#
|
|
557
|
+
# Returns a list of attributes hashes for each document.
|
|
503
558
|
#
|
|
504
|
-
# @
|
|
505
|
-
# relation._unscoped = docs
|
|
506
|
-
#
|
|
507
|
-
# @param [ Array<Document> ] docs The documents.
|
|
508
|
-
#
|
|
509
|
-
# @return [ Array<Document ] The unscoped docs.
|
|
510
|
-
#
|
|
511
|
-
# @since 2.4.0
|
|
512
|
-
def _unscoped=(docs)
|
|
513
|
-
@_unscoped = docs
|
|
514
|
-
end
|
|
515
|
-
|
|
559
|
+
# @return [ Array<Hash> ] The list of attributes hashes
|
|
516
560
|
def as_attributes
|
|
517
|
-
|
|
518
|
-
_unscoped.each do |doc|
|
|
519
|
-
attributes.push(doc.as_document)
|
|
520
|
-
end
|
|
521
|
-
attributes
|
|
561
|
+
_unscoped.map { |doc| doc.send(:as_attributes) }
|
|
522
562
|
end
|
|
523
563
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
# @return [ true ] true.
|
|
533
|
-
#
|
|
534
|
-
# @since 2.0.0.rc.1
|
|
535
|
-
def embedded?
|
|
536
|
-
true
|
|
537
|
-
end
|
|
538
|
-
|
|
539
|
-
# Returns the suffix of the foreign key field, either "_id" or "_ids".
|
|
540
|
-
#
|
|
541
|
-
# @example Get the suffix for the foreign key.
|
|
542
|
-
# Association::Embedded::EmbedsMany.foreign_key_suffix
|
|
543
|
-
#
|
|
544
|
-
# @return [ nil ] nil.
|
|
545
|
-
#
|
|
546
|
-
# @since 3.0.0
|
|
547
|
-
def foreign_key_suffix
|
|
548
|
-
nil
|
|
564
|
+
# Update the _base's attributes hash with the _target's attributes
|
|
565
|
+
#
|
|
566
|
+
# @api private
|
|
567
|
+
def update_attributes_hash
|
|
568
|
+
if _target.empty?
|
|
569
|
+
_base.attributes.delete(_association.store_as)
|
|
570
|
+
else
|
|
571
|
+
_base.attributes.merge!(_association.store_as => _target.map(&:attributes))
|
|
549
572
|
end
|
|
550
573
|
end
|
|
551
574
|
end
|