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,20 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
require "spec_helper"
|
|
5
5
|
|
|
6
|
-
describe Mongoid::Association::Referenced::HasMany::
|
|
6
|
+
describe Mongoid::Association::Referenced::HasMany::Enumerable do
|
|
7
7
|
|
|
8
8
|
describe "#==" do
|
|
9
9
|
|
|
10
10
|
context "when comparing with an enumerable" do
|
|
11
11
|
|
|
12
12
|
let(:person) do
|
|
13
|
-
Person.create
|
|
13
|
+
Person.create!
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
let!(:post) do
|
|
17
|
-
Post.create(person_id: person.id)
|
|
17
|
+
Post.create!(person_id: person.id)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
context "when only a criteria target exists" do
|
|
@@ -88,7 +88,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
88
88
|
context "when the loaded has no docs and added is persisted" do
|
|
89
89
|
|
|
90
90
|
before do
|
|
91
|
-
post.save
|
|
91
|
+
post.save!
|
|
92
92
|
enumerable._added[post.id] = post
|
|
93
93
|
end
|
|
94
94
|
|
|
@@ -114,72 +114,103 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
114
114
|
|
|
115
115
|
describe "#===" do
|
|
116
116
|
|
|
117
|
-
let(:
|
|
118
|
-
described_class.new([])
|
|
119
|
-
end
|
|
117
|
+
let(:data) { [] }
|
|
120
118
|
|
|
121
|
-
|
|
119
|
+
shared_examples 'standard library-compatible enumerable' do
|
|
120
|
+
context "when compared to an array class" do
|
|
122
121
|
|
|
123
|
-
|
|
124
|
-
|
|
122
|
+
it "returns false" do
|
|
123
|
+
expect(enumerable === Array).to be false
|
|
124
|
+
end
|
|
125
125
|
end
|
|
126
|
-
end
|
|
127
126
|
|
|
128
|
-
|
|
127
|
+
context "when compared to an enumerable class" do
|
|
129
128
|
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
it "returns false" do
|
|
130
|
+
expect(enumerable === described_class).to be false
|
|
131
|
+
end
|
|
132
132
|
end
|
|
133
|
-
end
|
|
134
133
|
|
|
135
|
-
|
|
134
|
+
context "when compared to a different class" do
|
|
136
135
|
|
|
137
|
-
|
|
138
|
-
|
|
136
|
+
it "returns false" do
|
|
137
|
+
expect(enumerable === Mongoid::Document).to be false
|
|
138
|
+
end
|
|
139
139
|
end
|
|
140
|
-
end
|
|
141
140
|
|
|
142
|
-
|
|
141
|
+
context "when compared to an array instance" do
|
|
143
142
|
|
|
144
|
-
|
|
143
|
+
context "when the entries are equal" do
|
|
145
144
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
145
|
+
let(:data) do
|
|
146
|
+
[Post.new(id: 2)]
|
|
147
|
+
end
|
|
149
148
|
|
|
150
|
-
|
|
151
|
-
|
|
149
|
+
let(:other) do
|
|
150
|
+
described_class.new([Post.new(id: 2)])
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it "returns true" do
|
|
154
|
+
expect(enumerable === other).to be true
|
|
155
|
+
end
|
|
152
156
|
end
|
|
153
|
-
end
|
|
154
157
|
|
|
155
|
-
|
|
158
|
+
context "when the entries are both empty" do
|
|
156
159
|
|
|
157
|
-
|
|
158
|
-
|
|
160
|
+
let(:other) do
|
|
161
|
+
described_class.new([])
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "returns true" do
|
|
165
|
+
expect(enumerable === other).to be true
|
|
166
|
+
end
|
|
159
167
|
end
|
|
160
168
|
|
|
161
|
-
|
|
162
|
-
|
|
169
|
+
context "when the entries are not equal" do
|
|
170
|
+
|
|
171
|
+
let(:other) do
|
|
172
|
+
described_class.new([ Band.new ])
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it "returns false" do
|
|
176
|
+
expect(enumerable === other).to be false
|
|
177
|
+
end
|
|
163
178
|
end
|
|
164
179
|
end
|
|
165
180
|
end
|
|
181
|
+
|
|
182
|
+
context 'enumerable' do
|
|
183
|
+
let(:enumerable) do
|
|
184
|
+
described_class.new(data)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
include_examples 'standard library-compatible enumerable'
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
context 'Array instance' do
|
|
191
|
+
let(:enumerable) do
|
|
192
|
+
data
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
include_examples 'standard library-compatible enumerable'
|
|
196
|
+
end
|
|
166
197
|
end
|
|
167
198
|
|
|
168
199
|
describe "#<<" do
|
|
169
200
|
|
|
170
201
|
let(:person) do
|
|
171
|
-
Person.create
|
|
202
|
+
Person.create!
|
|
172
203
|
end
|
|
173
204
|
|
|
174
205
|
let!(:post) do
|
|
175
|
-
Post.create(person_id: person.id)
|
|
206
|
+
Post.create!(person_id: person.id)
|
|
176
207
|
end
|
|
177
208
|
|
|
178
209
|
let!(:enumerable) do
|
|
179
210
|
described_class.new([])
|
|
180
211
|
end
|
|
181
212
|
|
|
182
|
-
context "when the
|
|
213
|
+
context "when the association is empty" do
|
|
183
214
|
|
|
184
215
|
let!(:added) do
|
|
185
216
|
enumerable << post
|
|
@@ -201,18 +232,18 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
201
232
|
end
|
|
202
233
|
end
|
|
203
234
|
|
|
204
|
-
describe "#
|
|
235
|
+
describe "#empty?" do
|
|
205
236
|
|
|
206
237
|
let(:person) do
|
|
207
|
-
Person.create
|
|
238
|
+
Person.create!
|
|
208
239
|
end
|
|
209
240
|
|
|
210
241
|
let!(:post_one) do
|
|
211
|
-
Post.create(person_id: person.id)
|
|
242
|
+
Post.create!(person_id: person.id)
|
|
212
243
|
end
|
|
213
244
|
|
|
214
245
|
let!(:post_two) do
|
|
215
|
-
Post.create(person_id: person.id)
|
|
246
|
+
Post.create!(person_id: person.id)
|
|
216
247
|
end
|
|
217
248
|
|
|
218
249
|
context "when only a criteria target exists" do
|
|
@@ -225,27 +256,138 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
225
256
|
described_class.new(criteria)
|
|
226
257
|
end
|
|
227
258
|
|
|
228
|
-
let
|
|
229
|
-
enumerable.
|
|
259
|
+
let(:empty) do
|
|
260
|
+
enumerable.empty?
|
|
230
261
|
end
|
|
231
262
|
|
|
232
|
-
it "returns
|
|
233
|
-
expect(
|
|
263
|
+
it "returns false" do
|
|
264
|
+
expect(empty).to be false
|
|
234
265
|
end
|
|
235
266
|
|
|
236
|
-
|
|
237
|
-
|
|
267
|
+
context 'when #empty? is called' do
|
|
268
|
+
|
|
269
|
+
before { empty }
|
|
270
|
+
|
|
271
|
+
it "retains the correct length" do
|
|
272
|
+
expect(enumerable.length).to eq(2)
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
it "retains the correct length when calling to_a" do
|
|
276
|
+
expect(enumerable.to_a.length).to eq(2)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
context "when iterating over the association a second time" do
|
|
280
|
+
|
|
281
|
+
before do
|
|
282
|
+
enumerable.each { |post| post }
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
it "retains the correct length" do
|
|
286
|
+
expect(enumerable.length).to eq(2)
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
it "retains the correct length when calling to_a" do
|
|
290
|
+
expect(enumerable.to_a.length).to eq(2)
|
|
291
|
+
end
|
|
292
|
+
end
|
|
238
293
|
end
|
|
294
|
+
end
|
|
239
295
|
|
|
240
|
-
|
|
241
|
-
|
|
296
|
+
context "when the documents have been loaded" do
|
|
297
|
+
let(:criteria) do
|
|
298
|
+
Post.where(person_id: person.id)
|
|
242
299
|
end
|
|
243
300
|
|
|
244
|
-
|
|
301
|
+
let!(:enumerable) do
|
|
302
|
+
described_class.new(criteria)
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
before do
|
|
306
|
+
enumerable.load_all!
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
it "is _loaded" do
|
|
310
|
+
expect(enumerable._loaded?).to be true
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
it "it does not call #exists? on the unloaded scope" do
|
|
314
|
+
expect(enumerable._unloaded).to_not receive(:exists?)
|
|
315
|
+
expect(enumerable.empty?).to be false
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
context "when the documents are not loaded" do
|
|
320
|
+
|
|
321
|
+
let(:criteria) do
|
|
322
|
+
Post.where(person_id: person.id)
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
let!(:enumerable) do
|
|
326
|
+
described_class.new(criteria)
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
it "is not _loaded" do
|
|
330
|
+
expect(enumerable._loaded?).to be false
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
it "it calls #exists? on the unloaded scope" do
|
|
334
|
+
expect(enumerable._unloaded).to receive(:exists?)
|
|
335
|
+
expect(enumerable.empty?).to be true
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
context "when documents are added" do
|
|
245
339
|
|
|
246
340
|
before do
|
|
247
|
-
enumerable
|
|
341
|
+
enumerable << post_one
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
it "is not _loaded" do
|
|
345
|
+
expect(enumerable._loaded?).to be false
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
it "it does not call #exists? on the unloaded scope" do
|
|
349
|
+
expect(enumerable._unloaded).to_not receive(:exists?)
|
|
350
|
+
expect(enumerable.empty?).to be false
|
|
248
351
|
end
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
describe "#any?" do
|
|
357
|
+
|
|
358
|
+
let(:person) do
|
|
359
|
+
Person.create!
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
let!(:post_one) do
|
|
363
|
+
Post.create!(person_id: person.id)
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
let!(:post_two) do
|
|
367
|
+
Post.create!(person_id: person.id)
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
context "when only a criteria target exists" do
|
|
371
|
+
|
|
372
|
+
let(:criteria) do
|
|
373
|
+
Post.where(person_id: person.id)
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
let!(:enumerable) do
|
|
377
|
+
described_class.new(criteria)
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
let(:any) do
|
|
381
|
+
enumerable.any?
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
it "returns true" do
|
|
385
|
+
expect(any).to be true
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
context 'when #any? is called' do
|
|
389
|
+
|
|
390
|
+
before { any }
|
|
249
391
|
|
|
250
392
|
it "retains the correct length" do
|
|
251
393
|
expect(enumerable.length).to eq(2)
|
|
@@ -254,6 +396,21 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
254
396
|
it "retains the correct length when calling to_a" do
|
|
255
397
|
expect(enumerable.to_a.length).to eq(2)
|
|
256
398
|
end
|
|
399
|
+
|
|
400
|
+
context "when iterating over the association a second time" do
|
|
401
|
+
|
|
402
|
+
before do
|
|
403
|
+
enumerable.each { |post| post }
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
it "retains the correct length" do
|
|
407
|
+
expect(enumerable.length).to eq(2)
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
it "retains the correct length when calling to_a" do
|
|
411
|
+
expect(enumerable.to_a.length).to eq(2)
|
|
412
|
+
end
|
|
413
|
+
end
|
|
257
414
|
end
|
|
258
415
|
end
|
|
259
416
|
|
|
@@ -274,6 +431,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
274
431
|
expect(enumerable._loaded?).to be true
|
|
275
432
|
end
|
|
276
433
|
|
|
434
|
+
it "it does not call #exists? on the unloaded scope" do
|
|
435
|
+
expect(enumerable._unloaded).to_not receive(:exists?)
|
|
436
|
+
expect(enumerable.any?).to be true
|
|
437
|
+
end
|
|
438
|
+
|
|
277
439
|
context "when a block is given" do
|
|
278
440
|
it "returns true when the predicate is true" do
|
|
279
441
|
expect(
|
|
@@ -289,7 +451,6 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
289
451
|
end
|
|
290
452
|
|
|
291
453
|
context "when an argument is given" do
|
|
292
|
-
ruby_version_gte '2.5'
|
|
293
454
|
|
|
294
455
|
it "returns true when the argument is true" do
|
|
295
456
|
expect(enumerable.any?(Post)).to be true
|
|
@@ -301,7 +462,6 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
301
462
|
end
|
|
302
463
|
|
|
303
464
|
context "when both an argument and a block are given" do
|
|
304
|
-
ruby_version_gte '2.5'
|
|
305
465
|
|
|
306
466
|
it "gives precedence to the pattern" do
|
|
307
467
|
expect(
|
|
@@ -325,6 +485,27 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
325
485
|
expect(enumerable._loaded?).to be false
|
|
326
486
|
end
|
|
327
487
|
|
|
488
|
+
it "it calls #exists? on the unloaded scope" do
|
|
489
|
+
expect(enumerable._unloaded).to receive(:exists?)
|
|
490
|
+
expect(enumerable.any?).to be false
|
|
491
|
+
end
|
|
492
|
+
|
|
493
|
+
context "when documents are added" do
|
|
494
|
+
|
|
495
|
+
before do
|
|
496
|
+
enumerable << post_one
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
it "is not _loaded" do
|
|
500
|
+
expect(enumerable._loaded?).to be false
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
it "it does not call #exists? on the unloaded scope" do
|
|
504
|
+
expect(enumerable._unloaded).to_not receive(:exists?)
|
|
505
|
+
expect(enumerable.any?).to be true
|
|
506
|
+
end
|
|
507
|
+
end
|
|
508
|
+
|
|
328
509
|
context "when a block is given" do
|
|
329
510
|
it "returns true when the predicate is true" do
|
|
330
511
|
expect(
|
|
@@ -340,7 +521,6 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
340
521
|
end
|
|
341
522
|
|
|
342
523
|
context "when an argument is given" do
|
|
343
|
-
ruby_version_gte '2.5'
|
|
344
524
|
|
|
345
525
|
it "returns true when the argument is true" do
|
|
346
526
|
expect(enumerable.any?(Post)).to be true
|
|
@@ -352,7 +532,6 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
352
532
|
end
|
|
353
533
|
|
|
354
534
|
context "when both an argument and a block are given" do
|
|
355
|
-
ruby_version_gte '2.5'
|
|
356
535
|
|
|
357
536
|
it "gives precedence to the pattern" do
|
|
358
537
|
expect(
|
|
@@ -366,15 +545,15 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
366
545
|
describe "#clear" do
|
|
367
546
|
|
|
368
547
|
let(:person) do
|
|
369
|
-
Person.create
|
|
548
|
+
Person.create!
|
|
370
549
|
end
|
|
371
550
|
|
|
372
551
|
let!(:post) do
|
|
373
|
-
Post.create(person_id: person.id)
|
|
552
|
+
Post.create!(person_id: person.id)
|
|
374
553
|
end
|
|
375
554
|
|
|
376
555
|
let!(:post_two) do
|
|
377
|
-
Post.create(person_id: person.id)
|
|
556
|
+
Post.create!(person_id: person.id)
|
|
378
557
|
end
|
|
379
558
|
|
|
380
559
|
let(:criteria) do
|
|
@@ -412,15 +591,15 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
412
591
|
describe "#clone" do
|
|
413
592
|
|
|
414
593
|
let(:person) do
|
|
415
|
-
Person.create
|
|
594
|
+
Person.create!
|
|
416
595
|
end
|
|
417
596
|
|
|
418
597
|
let!(:post) do
|
|
419
|
-
Post.create(title: "one", person_id: person.id)
|
|
598
|
+
Post.create!(title: "one", person_id: person.id)
|
|
420
599
|
end
|
|
421
600
|
|
|
422
601
|
let!(:post_two) do
|
|
423
|
-
Post.create(title: "two", person_id: person.id)
|
|
602
|
+
Post.create!(title: "two", person_id: person.id)
|
|
424
603
|
end
|
|
425
604
|
|
|
426
605
|
let(:criteria) do
|
|
@@ -452,13 +631,13 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
452
631
|
describe "#delete" do
|
|
453
632
|
|
|
454
633
|
let(:person) do
|
|
455
|
-
Person.create
|
|
634
|
+
Person.create!
|
|
456
635
|
end
|
|
457
636
|
|
|
458
637
|
context "when the document is loaded" do
|
|
459
638
|
|
|
460
639
|
let!(:post) do
|
|
461
|
-
Post.create(person_id: person.id)
|
|
640
|
+
Post.create!(person_id: person.id)
|
|
462
641
|
end
|
|
463
642
|
|
|
464
643
|
let!(:enumerable) do
|
|
@@ -512,7 +691,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
512
691
|
context "when the document is unloaded" do
|
|
513
692
|
|
|
514
693
|
let!(:post) do
|
|
515
|
-
Post.create(person_id: person.id)
|
|
694
|
+
Post.create!(person_id: person.id)
|
|
516
695
|
end
|
|
517
696
|
|
|
518
697
|
let(:criteria) do
|
|
@@ -539,7 +718,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
539
718
|
context "when the document is not found" do
|
|
540
719
|
|
|
541
720
|
let!(:post) do
|
|
542
|
-
Post.create(person_id: person.id)
|
|
721
|
+
Post.create!(person_id: person.id)
|
|
543
722
|
end
|
|
544
723
|
|
|
545
724
|
let(:criteria) do
|
|
@@ -565,13 +744,13 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
565
744
|
describe "#delete_if" do
|
|
566
745
|
|
|
567
746
|
let(:person) do
|
|
568
|
-
Person.create
|
|
747
|
+
Person.create!
|
|
569
748
|
end
|
|
570
749
|
|
|
571
750
|
context "when the document is loaded" do
|
|
572
751
|
|
|
573
752
|
let!(:post) do
|
|
574
|
-
Post.create(person_id: person.id)
|
|
753
|
+
Post.create!(person_id: person.id)
|
|
575
754
|
end
|
|
576
755
|
|
|
577
756
|
let!(:enumerable) do
|
|
@@ -625,7 +804,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
625
804
|
context "when the document is unloaded" do
|
|
626
805
|
|
|
627
806
|
let!(:post) do
|
|
628
|
-
Post.create(person_id: person.id)
|
|
807
|
+
Post.create!(person_id: person.id)
|
|
629
808
|
end
|
|
630
809
|
|
|
631
810
|
let(:criteria) do
|
|
@@ -652,7 +831,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
652
831
|
context "when the block doesn't match" do
|
|
653
832
|
|
|
654
833
|
let!(:post) do
|
|
655
|
-
Post.create(person_id: person.id)
|
|
834
|
+
Post.create!(person_id: person.id)
|
|
656
835
|
end
|
|
657
836
|
|
|
658
837
|
let(:criteria) do
|
|
@@ -676,11 +855,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
676
855
|
describe "#detect" do
|
|
677
856
|
|
|
678
857
|
let(:person) do
|
|
679
|
-
Person.create
|
|
858
|
+
Person.create!
|
|
680
859
|
end
|
|
681
860
|
|
|
682
861
|
let!(:post) do
|
|
683
|
-
Post.create(person: person, title: "test")
|
|
862
|
+
Post.create!(person: person, title: "test")
|
|
684
863
|
end
|
|
685
864
|
|
|
686
865
|
let(:criteria) do
|
|
@@ -706,11 +885,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
706
885
|
describe "#each" do
|
|
707
886
|
|
|
708
887
|
let(:person) do
|
|
709
|
-
Person.create
|
|
888
|
+
Person.create!
|
|
710
889
|
end
|
|
711
890
|
|
|
712
891
|
let!(:post) do
|
|
713
|
-
Post.create(person_id: person.id)
|
|
892
|
+
Post.create!(person_id: person.id)
|
|
714
893
|
end
|
|
715
894
|
|
|
716
895
|
context "when only a criteria target exists" do
|
|
@@ -737,18 +916,18 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
737
916
|
expect(enumerable).to be__loaded
|
|
738
917
|
end
|
|
739
918
|
|
|
740
|
-
context 'when the base
|
|
919
|
+
context 'when the base association is accessed from each document' do
|
|
741
920
|
|
|
742
921
|
let(:persons) do
|
|
743
922
|
described_class.new(criteria).collect(&:person)
|
|
744
923
|
end
|
|
745
924
|
|
|
746
925
|
before do
|
|
747
|
-
Post.create(person_id: person.id)
|
|
748
|
-
Post.create(person_id: person.id)
|
|
926
|
+
Post.create!(person_id: person.id)
|
|
927
|
+
Post.create!(person_id: person.id)
|
|
749
928
|
end
|
|
750
929
|
|
|
751
|
-
it 'sets the base
|
|
930
|
+
it 'sets the base association from the criteria' do
|
|
752
931
|
expect(persons.uniq.size).to eq(1)
|
|
753
932
|
end
|
|
754
933
|
end
|
|
@@ -856,7 +1035,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
856
1035
|
describe "#entries" do
|
|
857
1036
|
|
|
858
1037
|
let(:person) do
|
|
859
|
-
Person.create
|
|
1038
|
+
Person.create!
|
|
860
1039
|
end
|
|
861
1040
|
|
|
862
1041
|
let(:criteria) do
|
|
@@ -870,7 +1049,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
870
1049
|
context "when the added contains a persisted document" do
|
|
871
1050
|
|
|
872
1051
|
let!(:post) do
|
|
873
|
-
Post.create(person_id: person.id)
|
|
1052
|
+
Post.create!(person_id: person.id)
|
|
874
1053
|
end
|
|
875
1054
|
|
|
876
1055
|
before do
|
|
@@ -890,7 +1069,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
890
1069
|
describe "#first" do
|
|
891
1070
|
|
|
892
1071
|
let(:person) do
|
|
893
|
-
Person.create
|
|
1072
|
+
Person.create!
|
|
894
1073
|
end
|
|
895
1074
|
|
|
896
1075
|
context "when the enumerable is not loaded" do
|
|
@@ -908,7 +1087,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
908
1087
|
context "when added is empty" do
|
|
909
1088
|
|
|
910
1089
|
let!(:post) do
|
|
911
|
-
Post.create(person_id: person.id)
|
|
1090
|
+
Post.create!(person_id: person.id)
|
|
912
1091
|
end
|
|
913
1092
|
|
|
914
1093
|
let(:first) do
|
|
@@ -932,7 +1111,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
932
1111
|
context "when added is not empty" do
|
|
933
1112
|
|
|
934
1113
|
let!(:post) do
|
|
935
|
-
Post.create(person_id: person.id)
|
|
1114
|
+
Post.create!(person_id: person.id)
|
|
936
1115
|
end
|
|
937
1116
|
|
|
938
1117
|
let(:post_two) do
|
|
@@ -1004,7 +1183,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1004
1183
|
context "when loaded is not empty" do
|
|
1005
1184
|
|
|
1006
1185
|
let!(:post) do
|
|
1007
|
-
Post.create(person_id: person.id)
|
|
1186
|
+
Post.create!(person_id: person.id)
|
|
1008
1187
|
end
|
|
1009
1188
|
|
|
1010
1189
|
let(:enumerable) do
|
|
@@ -1023,7 +1202,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1023
1202
|
context "when loaded is empty" do
|
|
1024
1203
|
|
|
1025
1204
|
let!(:post) do
|
|
1026
|
-
Post.create(person_id: person.id)
|
|
1205
|
+
Post.create!(person_id: person.id)
|
|
1027
1206
|
end
|
|
1028
1207
|
|
|
1029
1208
|
let(:enumerable) do
|
|
@@ -1059,10 +1238,10 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1059
1238
|
end
|
|
1060
1239
|
end
|
|
1061
1240
|
|
|
1062
|
-
context 'when
|
|
1241
|
+
context 'when including a limit' do
|
|
1063
1242
|
|
|
1064
1243
|
let(:person) do
|
|
1065
|
-
Person.create
|
|
1244
|
+
Person.create!
|
|
1066
1245
|
end
|
|
1067
1246
|
|
|
1068
1247
|
let(:criteria) do
|
|
@@ -1074,22 +1253,22 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1074
1253
|
end
|
|
1075
1254
|
|
|
1076
1255
|
let!(:first_post) do
|
|
1077
|
-
person.posts.create(title: "One")
|
|
1256
|
+
person.posts.create!(title: "One")
|
|
1078
1257
|
end
|
|
1079
1258
|
|
|
1080
1259
|
let!(:second_post) do
|
|
1081
|
-
person.posts.create(title: "Two")
|
|
1260
|
+
person.posts.create!(title: "Two")
|
|
1082
1261
|
end
|
|
1083
1262
|
|
|
1084
|
-
it '
|
|
1085
|
-
expect(enumerable.first(
|
|
1263
|
+
it 'returns the matching document' do
|
|
1264
|
+
expect(enumerable.first(1)).to eq([first_post])
|
|
1086
1265
|
end
|
|
1087
1266
|
end
|
|
1088
1267
|
|
|
1089
|
-
context 'when
|
|
1268
|
+
context 'when no parameters are provided' do
|
|
1090
1269
|
|
|
1091
1270
|
let(:person) do
|
|
1092
|
-
Person.create
|
|
1271
|
+
Person.create!
|
|
1093
1272
|
end
|
|
1094
1273
|
|
|
1095
1274
|
let(:criteria) do
|
|
@@ -1101,11 +1280,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1101
1280
|
end
|
|
1102
1281
|
|
|
1103
1282
|
let!(:first_post) do
|
|
1104
|
-
person.posts.create(title: "One")
|
|
1283
|
+
person.posts.create!(title: "One")
|
|
1105
1284
|
end
|
|
1106
1285
|
|
|
1107
1286
|
let!(:second_post) do
|
|
1108
|
-
person.posts.create(title: "Two")
|
|
1287
|
+
person.posts.create!(title: "Two")
|
|
1109
1288
|
end
|
|
1110
1289
|
|
|
1111
1290
|
it 'uses the sort on id' do
|
|
@@ -1117,15 +1296,15 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1117
1296
|
describe "#include?" do
|
|
1118
1297
|
|
|
1119
1298
|
let(:person) do
|
|
1120
|
-
Person.create
|
|
1299
|
+
Person.create!
|
|
1121
1300
|
end
|
|
1122
1301
|
|
|
1123
1302
|
let!(:post_one) do
|
|
1124
|
-
Post.create(person_id: person.id)
|
|
1303
|
+
Post.create!(person_id: person.id)
|
|
1125
1304
|
end
|
|
1126
1305
|
|
|
1127
1306
|
let!(:post_two) do
|
|
1128
|
-
Post.create(person_id: person.id)
|
|
1307
|
+
Post.create!(person_id: person.id)
|
|
1129
1308
|
end
|
|
1130
1309
|
|
|
1131
1310
|
context "when no criteria exists" do
|
|
@@ -1187,7 +1366,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1187
1366
|
described_class.new(criteria)
|
|
1188
1367
|
end
|
|
1189
1368
|
|
|
1190
|
-
let
|
|
1369
|
+
let(:included) do
|
|
1191
1370
|
enumerable.include?(post_two)
|
|
1192
1371
|
end
|
|
1193
1372
|
|
|
@@ -1203,7 +1382,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1203
1382
|
expect(enumerable.to_a.length).to eq(2)
|
|
1204
1383
|
end
|
|
1205
1384
|
|
|
1206
|
-
context "when iterating over the
|
|
1385
|
+
context "when iterating over the association a second time" do
|
|
1207
1386
|
|
|
1208
1387
|
before do
|
|
1209
1388
|
enumerable.each { |post| post }
|
|
@@ -1371,7 +1550,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1371
1550
|
describe "#last" do
|
|
1372
1551
|
|
|
1373
1552
|
let(:person) do
|
|
1374
|
-
Person.create
|
|
1553
|
+
Person.create!
|
|
1375
1554
|
end
|
|
1376
1555
|
|
|
1377
1556
|
context "when the enumerable is not loaded" do
|
|
@@ -1387,7 +1566,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1387
1566
|
context "when unloaded is not empty" do
|
|
1388
1567
|
|
|
1389
1568
|
let!(:post) do
|
|
1390
|
-
Post.create(person_id: person.id)
|
|
1569
|
+
Post.create!(person_id: person.id)
|
|
1391
1570
|
end
|
|
1392
1571
|
|
|
1393
1572
|
let(:last) do
|
|
@@ -1449,11 +1628,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1449
1628
|
context "when added is not empty" do
|
|
1450
1629
|
|
|
1451
1630
|
let!(:post_one) do
|
|
1452
|
-
person.posts.create
|
|
1631
|
+
person.posts.create!
|
|
1453
1632
|
end
|
|
1454
1633
|
|
|
1455
1634
|
let!(:post_two) do
|
|
1456
|
-
person.posts.create
|
|
1635
|
+
person.posts.create!
|
|
1457
1636
|
end
|
|
1458
1637
|
|
|
1459
1638
|
let(:last) do
|
|
@@ -1474,7 +1653,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1474
1653
|
context "when loaded is not empty" do
|
|
1475
1654
|
|
|
1476
1655
|
let!(:post) do
|
|
1477
|
-
Post.create(person_id: person.id)
|
|
1656
|
+
Post.create!(person_id: person.id)
|
|
1478
1657
|
end
|
|
1479
1658
|
|
|
1480
1659
|
let(:enumerable) do
|
|
@@ -1493,7 +1672,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1493
1672
|
context "when loaded is empty" do
|
|
1494
1673
|
|
|
1495
1674
|
let!(:post) do
|
|
1496
|
-
Post.create(person_id: person.id)
|
|
1675
|
+
Post.create!(person_id: person.id)
|
|
1497
1676
|
end
|
|
1498
1677
|
|
|
1499
1678
|
let(:enumerable) do
|
|
@@ -1529,10 +1708,10 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1529
1708
|
end
|
|
1530
1709
|
end
|
|
1531
1710
|
|
|
1532
|
-
context 'when
|
|
1711
|
+
context 'when including a limit' do
|
|
1533
1712
|
|
|
1534
1713
|
let(:person) do
|
|
1535
|
-
Person.create
|
|
1714
|
+
Person.create!
|
|
1536
1715
|
end
|
|
1537
1716
|
|
|
1538
1717
|
let(:criteria) do
|
|
@@ -1544,22 +1723,22 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1544
1723
|
end
|
|
1545
1724
|
|
|
1546
1725
|
let!(:first_post) do
|
|
1547
|
-
person.posts.create(title: "One")
|
|
1726
|
+
person.posts.create!(title: "One")
|
|
1548
1727
|
end
|
|
1549
1728
|
|
|
1550
1729
|
let!(:second_post) do
|
|
1551
|
-
person.posts.create(title: "Two")
|
|
1730
|
+
person.posts.create!(title: "Two")
|
|
1552
1731
|
end
|
|
1553
1732
|
|
|
1554
|
-
it '
|
|
1555
|
-
expect(enumerable.last(
|
|
1733
|
+
it 'returns the matching document' do
|
|
1734
|
+
expect(enumerable.last(1)).to eq([second_post])
|
|
1556
1735
|
end
|
|
1557
1736
|
end
|
|
1558
1737
|
|
|
1559
|
-
context 'when
|
|
1738
|
+
context 'when no parameters are provided' do
|
|
1560
1739
|
|
|
1561
1740
|
let(:person) do
|
|
1562
|
-
Person.create
|
|
1741
|
+
Person.create!
|
|
1563
1742
|
end
|
|
1564
1743
|
|
|
1565
1744
|
let(:criteria) do
|
|
@@ -1571,11 +1750,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1571
1750
|
end
|
|
1572
1751
|
|
|
1573
1752
|
let!(:first_post) do
|
|
1574
|
-
person.posts.create(title: "One")
|
|
1753
|
+
person.posts.create!(title: "One")
|
|
1575
1754
|
end
|
|
1576
1755
|
|
|
1577
1756
|
let!(:second_post) do
|
|
1578
|
-
person.posts.create(title: "Two")
|
|
1757
|
+
person.posts.create!(title: "Two")
|
|
1579
1758
|
end
|
|
1580
1759
|
|
|
1581
1760
|
it 'uses the sort on id' do
|
|
@@ -1608,11 +1787,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1608
1787
|
describe "#load_all!" do
|
|
1609
1788
|
|
|
1610
1789
|
let(:person) do
|
|
1611
|
-
Person.create
|
|
1790
|
+
Person.create!
|
|
1612
1791
|
end
|
|
1613
1792
|
|
|
1614
1793
|
let!(:post) do
|
|
1615
|
-
Post.create(person_id: person.id)
|
|
1794
|
+
Post.create!(person_id: person.id)
|
|
1616
1795
|
end
|
|
1617
1796
|
|
|
1618
1797
|
let(:criteria) do
|
|
@@ -1643,15 +1822,15 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1643
1822
|
describe "#reset" do
|
|
1644
1823
|
|
|
1645
1824
|
let(:person) do
|
|
1646
|
-
Person.create
|
|
1825
|
+
Person.create!
|
|
1647
1826
|
end
|
|
1648
1827
|
|
|
1649
1828
|
let(:post) do
|
|
1650
|
-
Post.create(person_id: person.id)
|
|
1829
|
+
Post.create!(person_id: person.id)
|
|
1651
1830
|
end
|
|
1652
1831
|
|
|
1653
1832
|
let(:post_two) do
|
|
1654
|
-
Post.create(person_id: person.id)
|
|
1833
|
+
Post.create!(person_id: person.id)
|
|
1655
1834
|
end
|
|
1656
1835
|
|
|
1657
1836
|
let(:enumerable) do
|
|
@@ -1699,11 +1878,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1699
1878
|
describe "#size" do
|
|
1700
1879
|
|
|
1701
1880
|
let(:person) do
|
|
1702
|
-
Person.create
|
|
1881
|
+
Person.create!
|
|
1703
1882
|
end
|
|
1704
1883
|
|
|
1705
1884
|
let!(:post) do
|
|
1706
|
-
Post.create(person_id: person.id)
|
|
1885
|
+
Post.create!(person_id: person.id)
|
|
1707
1886
|
end
|
|
1708
1887
|
|
|
1709
1888
|
context "when the base is new" do
|
|
@@ -1715,7 +1894,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1715
1894
|
context "when the added contains a persisted document" do
|
|
1716
1895
|
|
|
1717
1896
|
let!(:post) do
|
|
1718
|
-
Post.create(person_id: person.id)
|
|
1897
|
+
Post.create!(person_id: person.id)
|
|
1719
1898
|
end
|
|
1720
1899
|
|
|
1721
1900
|
context "when the enumerable is not loaded" do
|
|
@@ -1786,7 +1965,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1786
1965
|
context "when the added contains persisted documents" do
|
|
1787
1966
|
|
|
1788
1967
|
let(:post_two) do
|
|
1789
|
-
Post.create(person_id: person.id)
|
|
1968
|
+
Post.create!(person_id: person.id)
|
|
1790
1969
|
end
|
|
1791
1970
|
|
|
1792
1971
|
before do
|
|
@@ -1807,11 +1986,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1807
1986
|
describe "#to_json" do
|
|
1808
1987
|
|
|
1809
1988
|
let(:person) do
|
|
1810
|
-
Person.create
|
|
1989
|
+
Person.create!
|
|
1811
1990
|
end
|
|
1812
1991
|
|
|
1813
1992
|
let!(:post) do
|
|
1814
|
-
Post.create(title: "test", person_id: person.id)
|
|
1993
|
+
Post.create!(title: "test", person_id: person.id)
|
|
1815
1994
|
end
|
|
1816
1995
|
|
|
1817
1996
|
let(:criteria) do
|
|
@@ -1838,11 +2017,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1838
2017
|
describe "#to_json(parameters)" do
|
|
1839
2018
|
|
|
1840
2019
|
let(:person) do
|
|
1841
|
-
Person.create
|
|
2020
|
+
Person.create!
|
|
1842
2021
|
end
|
|
1843
2022
|
|
|
1844
2023
|
let!(:post) do
|
|
1845
|
-
Post.create(title: "test", person_id: person.id)
|
|
2024
|
+
Post.create!(title: "test", person_id: person.id)
|
|
1846
2025
|
end
|
|
1847
2026
|
|
|
1848
2027
|
let(:criteria) do
|
|
@@ -1861,11 +2040,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1861
2040
|
describe "#as_json" do
|
|
1862
2041
|
|
|
1863
2042
|
let(:person) do
|
|
1864
|
-
Person.create
|
|
2043
|
+
Person.create!
|
|
1865
2044
|
end
|
|
1866
2045
|
|
|
1867
2046
|
let!(:post) do
|
|
1868
|
-
Post.create(title: "test", person_id: person.id)
|
|
2047
|
+
Post.create!(title: "test", person_id: person.id)
|
|
1869
2048
|
end
|
|
1870
2049
|
|
|
1871
2050
|
let(:criteria) do
|
|
@@ -1893,11 +2072,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1893
2072
|
describe "#as_json(parameters)" do
|
|
1894
2073
|
|
|
1895
2074
|
let(:person) do
|
|
1896
|
-
Person.create
|
|
2075
|
+
Person.create!
|
|
1897
2076
|
end
|
|
1898
2077
|
|
|
1899
2078
|
let!(:post) do
|
|
1900
|
-
Post.create(title: "test", person_id: person.id)
|
|
2079
|
+
Post.create!(title: "test", person_id: person.id)
|
|
1901
2080
|
end
|
|
1902
2081
|
|
|
1903
2082
|
let(:criteria) do
|
|
@@ -1920,11 +2099,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1920
2099
|
describe "#uniq" do
|
|
1921
2100
|
|
|
1922
2101
|
let(:person) do
|
|
1923
|
-
Person.create
|
|
2102
|
+
Person.create!
|
|
1924
2103
|
end
|
|
1925
2104
|
|
|
1926
2105
|
let!(:post) do
|
|
1927
|
-
Post.create(person_id: person.id)
|
|
2106
|
+
Post.create!(person_id: person.id)
|
|
1928
2107
|
end
|
|
1929
2108
|
|
|
1930
2109
|
let(:criteria) do
|
|
@@ -1956,7 +2135,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
|
1956
2135
|
describe 'setting the same parent object on enumerated children objects' do
|
|
1957
2136
|
|
|
1958
2137
|
let(:person) do
|
|
1959
|
-
Person.create
|
|
2138
|
+
Person.create!
|
|
1960
2139
|
end
|
|
1961
2140
|
|
|
1962
2141
|
context 'when a single child is fetched' do
|