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,7 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
#
|
|
2
|
+
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
require "spec_helper"
|
|
5
|
+
require_relative '../embeds_many_models.rb'
|
|
5
6
|
|
|
6
7
|
describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
7
8
|
|
|
@@ -115,7 +116,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
115
116
|
context "when the parent is not a new record" do
|
|
116
117
|
|
|
117
118
|
let(:person) do
|
|
118
|
-
Person.create
|
|
119
|
+
Person.create!
|
|
119
120
|
end
|
|
120
121
|
|
|
121
122
|
let(:address) do
|
|
@@ -134,7 +135,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
134
135
|
context "when appending more than one document at once" do
|
|
135
136
|
|
|
136
137
|
let(:person) do
|
|
137
|
-
Person.create
|
|
138
|
+
Person.create!
|
|
138
139
|
end
|
|
139
140
|
|
|
140
141
|
let(:address_one) do
|
|
@@ -210,7 +211,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
210
211
|
context "when the parent is not a new record" do
|
|
211
212
|
|
|
212
213
|
let(:parent_role) do
|
|
213
|
-
Role.create(name: "CEO")
|
|
214
|
+
Role.create!(name: "CEO")
|
|
214
215
|
end
|
|
215
216
|
|
|
216
217
|
let(:child_role) do
|
|
@@ -229,7 +230,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
229
230
|
|
|
230
231
|
context "when the child has one sided many to many relation" do
|
|
231
232
|
let(:person) do
|
|
232
|
-
Person.create
|
|
233
|
+
Person.create!
|
|
233
234
|
end
|
|
234
235
|
|
|
235
236
|
let(:message) do
|
|
@@ -312,7 +313,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
312
313
|
context "when the parent is not a new record" do
|
|
313
314
|
|
|
314
315
|
let(:person) do
|
|
315
|
-
Person.create
|
|
316
|
+
Person.create!
|
|
316
317
|
end
|
|
317
318
|
|
|
318
319
|
let(:address) do
|
|
@@ -333,11 +334,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
333
334
|
context "when setting via an overridden method from the parent" do
|
|
334
335
|
|
|
335
336
|
let!(:person) do
|
|
336
|
-
Person.create
|
|
337
|
+
Person.create!
|
|
337
338
|
end
|
|
338
339
|
|
|
339
340
|
let!(:address) do
|
|
340
|
-
person.addresses.create(street: "Alt Treptow")
|
|
341
|
+
person.addresses.create!(street: "Alt Treptow")
|
|
341
342
|
end
|
|
342
343
|
|
|
343
344
|
let!(:new_address) do
|
|
@@ -345,7 +346,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
345
346
|
end
|
|
346
347
|
|
|
347
348
|
before do
|
|
348
|
-
person.update_attributes(set_addresses: [ new_address ])
|
|
349
|
+
person.update_attributes!(set_addresses: [ new_address ])
|
|
349
350
|
end
|
|
350
351
|
|
|
351
352
|
it "overwrites the existing addresses" do
|
|
@@ -375,7 +376,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
375
376
|
|
|
376
377
|
before do
|
|
377
378
|
person.addresses = [ address_two ]
|
|
378
|
-
person.save
|
|
379
|
+
person.save!
|
|
379
380
|
end
|
|
380
381
|
|
|
381
382
|
it "sets the new documents" do
|
|
@@ -409,7 +410,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
409
410
|
|
|
410
411
|
before do
|
|
411
412
|
doctor.addresses = [ address_one ]
|
|
412
|
-
doctor.save
|
|
413
|
+
doctor.save!
|
|
413
414
|
end
|
|
414
415
|
|
|
415
416
|
it "sets the documents" do
|
|
@@ -428,7 +429,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
428
429
|
|
|
429
430
|
before do
|
|
430
431
|
doctor.addresses = [ address_two ]
|
|
431
|
-
doctor.save
|
|
432
|
+
doctor.save!
|
|
432
433
|
end
|
|
433
434
|
|
|
434
435
|
it "sets the new documents" do
|
|
@@ -446,7 +447,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
446
447
|
context "when replacing an existing relation" do
|
|
447
448
|
|
|
448
449
|
let(:person) do
|
|
449
|
-
Person.create(addresses: addresses)
|
|
450
|
+
Person.create!(addresses: addresses)
|
|
450
451
|
end
|
|
451
452
|
|
|
452
453
|
let(:addresses) do
|
|
@@ -507,7 +508,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
507
508
|
end
|
|
508
509
|
|
|
509
510
|
let(:tracking_id) do
|
|
510
|
-
MyCompany::Model::TrackingId.create
|
|
511
|
+
MyCompany::Model::TrackingId.create!
|
|
511
512
|
end
|
|
512
513
|
|
|
513
514
|
let(:history) do
|
|
@@ -542,7 +543,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
542
543
|
inflect.singular("address_numbers", "address_number")
|
|
543
544
|
end
|
|
544
545
|
slave.address_numbers << AddressNumber.new(country_code: 1)
|
|
545
|
-
slave.save
|
|
546
|
+
slave.save!
|
|
546
547
|
end
|
|
547
548
|
|
|
548
549
|
it "requires an inflection to determine the class" do
|
|
@@ -553,15 +554,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
553
554
|
context "when setting the entire tree via a hash" do
|
|
554
555
|
|
|
555
556
|
let(:person) do
|
|
556
|
-
Person.create
|
|
557
|
+
Person.create!
|
|
557
558
|
end
|
|
558
559
|
|
|
559
560
|
let!(:address_one) do
|
|
560
|
-
person.addresses.create(street: "Tauentzienstr")
|
|
561
|
+
person.addresses.create!(street: "Tauentzienstr")
|
|
561
562
|
end
|
|
562
563
|
|
|
563
564
|
let!(:address_two) do
|
|
564
|
-
person.addresses.create(street: "Kudamm")
|
|
565
|
+
person.addresses.create!(street: "Kudamm")
|
|
565
566
|
end
|
|
566
567
|
|
|
567
568
|
let(:attributes) do
|
|
@@ -572,7 +573,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
572
573
|
|
|
573
574
|
before do
|
|
574
575
|
attributes["addresses"][0]["city"] = "Berlin"
|
|
575
|
-
person.update_attributes(attributes)
|
|
576
|
+
person.update_attributes!(attributes)
|
|
576
577
|
end
|
|
577
578
|
|
|
578
579
|
it "sets the new attributes" do
|
|
@@ -588,15 +589,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
588
589
|
context "when setting an embedded sub-document tree via a hash" do
|
|
589
590
|
|
|
590
591
|
let(:person) do
|
|
591
|
-
Person.create
|
|
592
|
+
Person.create!
|
|
592
593
|
end
|
|
593
594
|
|
|
594
595
|
let!(:address_one) do
|
|
595
|
-
person.addresses.create(street: "Tauentzienstr")
|
|
596
|
+
person.addresses.create!(street: "Tauentzienstr")
|
|
596
597
|
end
|
|
597
598
|
|
|
598
599
|
let!(:location_one) do
|
|
599
|
-
person.addresses.first.locations.create(name: "Work")
|
|
600
|
+
person.addresses.first.locations.create!(name: "Work")
|
|
600
601
|
end
|
|
601
602
|
|
|
602
603
|
let(:attributes) do
|
|
@@ -608,7 +609,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
608
609
|
before do
|
|
609
610
|
attributes["city"] = "Berlin"
|
|
610
611
|
attributes["locations"][0]["name"] = "Home"
|
|
611
|
-
person.addresses.first.update_attributes(attributes)
|
|
612
|
+
person.addresses.first.update_attributes!(attributes)
|
|
612
613
|
end
|
|
613
614
|
|
|
614
615
|
it "sets the new attributes on the address" do
|
|
@@ -681,7 +682,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
681
682
|
context "when the parent is not a new record" do
|
|
682
683
|
|
|
683
684
|
let(:parent_role) do
|
|
684
|
-
Role.create(name: "CTO")
|
|
685
|
+
Role.create!(name: "CTO")
|
|
685
686
|
end
|
|
686
687
|
|
|
687
688
|
let(:child_role) do
|
|
@@ -749,7 +750,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
749
750
|
context "when the parent is persisted" do
|
|
750
751
|
|
|
751
752
|
let(:person) do
|
|
752
|
-
Person.create
|
|
753
|
+
Person.create!
|
|
753
754
|
end
|
|
754
755
|
|
|
755
756
|
let(:address) do
|
|
@@ -798,7 +799,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
798
799
|
context "when saving the parent" do
|
|
799
800
|
|
|
800
801
|
before do
|
|
801
|
-
person.save
|
|
802
|
+
person.save!
|
|
802
803
|
person.reload
|
|
803
804
|
end
|
|
804
805
|
|
|
@@ -812,7 +813,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
812
813
|
context "when setting on a reload" do
|
|
813
814
|
|
|
814
815
|
let(:person) do
|
|
815
|
-
Person.create
|
|
816
|
+
Person.create!
|
|
816
817
|
end
|
|
817
818
|
|
|
818
819
|
let(:address) do
|
|
@@ -882,7 +883,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
882
883
|
context "when the documents are not new records" do
|
|
883
884
|
|
|
884
885
|
let(:parent_role) do
|
|
885
|
-
Role.create
|
|
886
|
+
Role.create!
|
|
886
887
|
end
|
|
887
888
|
|
|
888
889
|
let(:child_role) do
|
|
@@ -912,13 +913,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
912
913
|
describe "#as_document" do
|
|
913
914
|
|
|
914
915
|
let!(:person) do
|
|
915
|
-
Person.create
|
|
916
|
+
Person.create!
|
|
916
917
|
end
|
|
917
918
|
|
|
918
919
|
context 'when a string is used to access an attribute' do
|
|
919
920
|
|
|
920
921
|
let!(:address) do
|
|
921
|
-
person.addresses.create(street: "one")
|
|
922
|
+
person.addresses.create!(street: "one")
|
|
922
923
|
end
|
|
923
924
|
|
|
924
925
|
let(:document) do
|
|
@@ -933,7 +934,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
933
934
|
context 'when a symbol is used to access an attribute' do
|
|
934
935
|
|
|
935
936
|
let!(:address) do
|
|
936
|
-
person.addresses.create(street: "one")
|
|
937
|
+
person.addresses.create!(street: "one")
|
|
937
938
|
end
|
|
938
939
|
|
|
939
940
|
let(:document) do
|
|
@@ -948,7 +949,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
948
949
|
context "when the relation has no default scope" do
|
|
949
950
|
|
|
950
951
|
let!(:address) do
|
|
951
|
-
person.addresses.create(street: "one")
|
|
952
|
+
person.addresses.create!(street: "one")
|
|
952
953
|
end
|
|
953
954
|
|
|
954
955
|
let(:document) do
|
|
@@ -1105,7 +1106,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1105
1106
|
context "when providing nested attributes" do
|
|
1106
1107
|
|
|
1107
1108
|
let(:person) do
|
|
1108
|
-
Person.create
|
|
1109
|
+
Person.create!
|
|
1109
1110
|
end
|
|
1110
1111
|
|
|
1111
1112
|
let(:address) do
|
|
@@ -1119,7 +1120,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1119
1120
|
context "when followed by a save" do
|
|
1120
1121
|
|
|
1121
1122
|
before do
|
|
1122
|
-
address.save
|
|
1123
|
+
address.save!
|
|
1123
1124
|
end
|
|
1124
1125
|
|
|
1125
1126
|
let(:location) do
|
|
@@ -1139,13 +1140,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1139
1140
|
context "when the parent has been persisted" do
|
|
1140
1141
|
|
|
1141
1142
|
let(:person) do
|
|
1142
|
-
Person.create
|
|
1143
|
+
Person.create!
|
|
1143
1144
|
end
|
|
1144
1145
|
|
|
1145
1146
|
context "when the children are persisted" do
|
|
1146
1147
|
|
|
1147
1148
|
let!(:address) do
|
|
1148
|
-
person.addresses.create(street: "High St")
|
|
1149
|
+
person.addresses.create!(street: "High St")
|
|
1149
1150
|
end
|
|
1150
1151
|
|
|
1151
1152
|
let!(:relation) do
|
|
@@ -1261,7 +1262,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1261
1262
|
context "when the parent is not a new record" do
|
|
1262
1263
|
|
|
1263
1264
|
let(:person) do
|
|
1264
|
-
Person.create
|
|
1265
|
+
Person.create!
|
|
1265
1266
|
end
|
|
1266
1267
|
|
|
1267
1268
|
let(:address) do
|
|
@@ -1280,7 +1281,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1280
1281
|
context "when concatenating an empty array" do
|
|
1281
1282
|
|
|
1282
1283
|
let(:person) do
|
|
1283
|
-
Person.create
|
|
1284
|
+
Person.create!
|
|
1284
1285
|
end
|
|
1285
1286
|
|
|
1286
1287
|
before do
|
|
@@ -1296,7 +1297,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1296
1297
|
context "when appending more than one document at once" do
|
|
1297
1298
|
|
|
1298
1299
|
let(:person) do
|
|
1299
|
-
Person.create
|
|
1300
|
+
Person.create!
|
|
1300
1301
|
end
|
|
1301
1302
|
|
|
1302
1303
|
let(:address_one) do
|
|
@@ -1368,7 +1369,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1368
1369
|
context "when the parent is not a new record" do
|
|
1369
1370
|
|
|
1370
1371
|
let(:parent_role) do
|
|
1371
|
-
Role.create(name: "CEO")
|
|
1372
|
+
Role.create!(name: "CEO")
|
|
1372
1373
|
end
|
|
1373
1374
|
|
|
1374
1375
|
let(:child_role) do
|
|
@@ -1389,49 +1390,261 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1389
1390
|
describe "#count" do
|
|
1390
1391
|
|
|
1391
1392
|
let(:person) do
|
|
1392
|
-
Person.create
|
|
1393
|
+
Person.create!
|
|
1393
1394
|
end
|
|
1394
1395
|
|
|
1395
1396
|
before do
|
|
1396
|
-
person.addresses.create(street: "Upper")
|
|
1397
|
+
person.addresses.create!(street: "Upper")
|
|
1397
1398
|
person.addresses.build(street: "Bond")
|
|
1399
|
+
person.addresses.build(street: "Lower")
|
|
1398
1400
|
end
|
|
1399
1401
|
|
|
1400
1402
|
it "returns the number of persisted documents" do
|
|
1401
1403
|
expect(person.addresses.count).to eq(1)
|
|
1402
1404
|
end
|
|
1405
|
+
|
|
1406
|
+
context 'block form' do
|
|
1407
|
+
it "iterates across all documents" do
|
|
1408
|
+
expect(person.addresses.count {|a| a.persisted? }).to eq(1)
|
|
1409
|
+
expect(person.addresses.count {|a| !a.persisted? }).to eq(2)
|
|
1410
|
+
expect(person.addresses.count {|a| a.street.include?('on') }).to eq(1)
|
|
1411
|
+
expect(person.addresses.count {|a| a.street.ends_with?('er') }).to eq(2)
|
|
1412
|
+
end
|
|
1413
|
+
end
|
|
1414
|
+
|
|
1415
|
+
context 'argument form' do
|
|
1416
|
+
it "behaves correctly when given a model instance" do
|
|
1417
|
+
expect(person.addresses.count(person.addresses.first)).to eq(1)
|
|
1418
|
+
end
|
|
1419
|
+
|
|
1420
|
+
it "behaves correctly when given a non-model instance" do
|
|
1421
|
+
expect(person.addresses.count(1)).to eq(0)
|
|
1422
|
+
end
|
|
1423
|
+
end
|
|
1403
1424
|
end
|
|
1404
1425
|
|
|
1405
1426
|
describe "#any?" do
|
|
1406
1427
|
|
|
1407
1428
|
let(:person) do
|
|
1408
|
-
Person.create
|
|
1429
|
+
Person.create!
|
|
1409
1430
|
end
|
|
1410
1431
|
|
|
1411
1432
|
context "when documents are persisted" do
|
|
1412
1433
|
before do
|
|
1413
|
-
person.addresses.create(street: "Upper")
|
|
1434
|
+
person.addresses.create!(street: "Upper")
|
|
1414
1435
|
end
|
|
1415
1436
|
|
|
1416
1437
|
it "returns true" do
|
|
1417
1438
|
expect(person.addresses.any?).to be true
|
|
1418
1439
|
end
|
|
1440
|
+
|
|
1441
|
+
it "block form iterates across all documents" do
|
|
1442
|
+
expect(person.addresses.any? {|a| a.street == "Upper" }).to be true
|
|
1443
|
+
expect(person.addresses.any? {|a| a.street == "Bond" }).to be false
|
|
1444
|
+
end
|
|
1445
|
+
|
|
1446
|
+
context 'argument form' do
|
|
1447
|
+
it "behaves correctly when given a model instance" do
|
|
1448
|
+
expect(person.addresses.any?(person.addresses.first)).to be true
|
|
1449
|
+
end
|
|
1450
|
+
|
|
1451
|
+
it "behaves correctly when given a non-model instance" do
|
|
1452
|
+
expect(person.addresses.any?(1)).to be false
|
|
1453
|
+
end
|
|
1454
|
+
end
|
|
1419
1455
|
end
|
|
1420
|
-
|
|
1456
|
+
|
|
1421
1457
|
context "when documents are not persisted" do
|
|
1422
1458
|
before do
|
|
1423
1459
|
person.addresses.build(street: "Bond")
|
|
1424
1460
|
end
|
|
1425
|
-
|
|
1461
|
+
|
|
1426
1462
|
it "returns true" do
|
|
1427
1463
|
expect(person.addresses.any?).to be true
|
|
1428
1464
|
end
|
|
1465
|
+
|
|
1466
|
+
it "block form iterates across all documents" do
|
|
1467
|
+
expect(person.addresses.any? {|a| a.street == "Upper" }).to be false
|
|
1468
|
+
expect(person.addresses.any? {|a| a.street == "Bond" }).to be true
|
|
1469
|
+
end
|
|
1470
|
+
|
|
1471
|
+
context 'argument form' do
|
|
1472
|
+
it "behaves correctly when given a model instance" do
|
|
1473
|
+
expect(person.addresses.any?(person.addresses.first)).to be true
|
|
1474
|
+
end
|
|
1475
|
+
|
|
1476
|
+
it "behaves correctly when given a non-model instance" do
|
|
1477
|
+
expect(person.addresses.any?(1)).to be false
|
|
1478
|
+
end
|
|
1479
|
+
end
|
|
1429
1480
|
end
|
|
1430
1481
|
|
|
1431
|
-
context "when documents are not
|
|
1482
|
+
context "when documents are not present" do
|
|
1432
1483
|
it "returns false" do
|
|
1433
1484
|
expect(person.addresses.any?).to be false
|
|
1434
1485
|
end
|
|
1486
|
+
|
|
1487
|
+
it "block form iterates across all documents" do
|
|
1488
|
+
expect(person.addresses.any?(&:a)).to be false
|
|
1489
|
+
end
|
|
1490
|
+
|
|
1491
|
+
it "argument form is supported" do
|
|
1492
|
+
expect(person.addresses.any?(1)).to be false
|
|
1493
|
+
end
|
|
1494
|
+
end
|
|
1495
|
+
end
|
|
1496
|
+
|
|
1497
|
+
describe "#all?" do
|
|
1498
|
+
|
|
1499
|
+
let(:person) do
|
|
1500
|
+
Person.create!
|
|
1501
|
+
end
|
|
1502
|
+
|
|
1503
|
+
context "when documents are persisted" do
|
|
1504
|
+
before do
|
|
1505
|
+
person.addresses.create!(street: "Upper")
|
|
1506
|
+
end
|
|
1507
|
+
|
|
1508
|
+
it "returns true" do
|
|
1509
|
+
expect(person.addresses.all?).to be true
|
|
1510
|
+
end
|
|
1511
|
+
|
|
1512
|
+
it "block form iterates across all documents" do
|
|
1513
|
+
expect(person.addresses.all? {|a| a.street == "Upper" }).to be true
|
|
1514
|
+
expect(person.addresses.all? {|a| a.street == "Bond" }).to be false
|
|
1515
|
+
end
|
|
1516
|
+
|
|
1517
|
+
context 'argument form' do
|
|
1518
|
+
it "behaves correctly when given a model instance" do
|
|
1519
|
+
expect(person.addresses.all?(person.addresses.first)).to be true
|
|
1520
|
+
end
|
|
1521
|
+
|
|
1522
|
+
it "behaves correctly when given a non-model instance" do
|
|
1523
|
+
expect(person.addresses.all?(1)).to be false
|
|
1524
|
+
end
|
|
1525
|
+
end
|
|
1526
|
+
end
|
|
1527
|
+
|
|
1528
|
+
context "when documents are not persisted" do
|
|
1529
|
+
before do
|
|
1530
|
+
person.addresses.build(street: "Bond")
|
|
1531
|
+
end
|
|
1532
|
+
|
|
1533
|
+
it "returns true" do
|
|
1534
|
+
expect(person.addresses.all?).to be true
|
|
1535
|
+
end
|
|
1536
|
+
|
|
1537
|
+
it "block form iterates across all documents" do
|
|
1538
|
+
expect(person.addresses.all? {|a| a.street == "Upper" }).to be false
|
|
1539
|
+
expect(person.addresses.all? {|a| a.street == "Bond" }).to be true
|
|
1540
|
+
end
|
|
1541
|
+
|
|
1542
|
+
context 'argument form' do
|
|
1543
|
+
it "behaves correctly when given a model instance" do
|
|
1544
|
+
expect(person.addresses.all?(person.addresses.first)).to be true
|
|
1545
|
+
end
|
|
1546
|
+
|
|
1547
|
+
it "behaves correctly when given a non-model instance" do
|
|
1548
|
+
expect(person.addresses.all?(1)).to be false
|
|
1549
|
+
end
|
|
1550
|
+
end
|
|
1551
|
+
end
|
|
1552
|
+
|
|
1553
|
+
context "when documents are not present" do
|
|
1554
|
+
it "returns false" do
|
|
1555
|
+
expect(person.addresses.all?).to be true
|
|
1556
|
+
end
|
|
1557
|
+
|
|
1558
|
+
it "block form iterates across all documents" do
|
|
1559
|
+
expect(person.addresses.all?(&:foo)).to be true
|
|
1560
|
+
end
|
|
1561
|
+
|
|
1562
|
+
context 'argument form' do
|
|
1563
|
+
it "behaves correctly when given nil" do
|
|
1564
|
+
expect(person.addresses.all?(nil)).to be true
|
|
1565
|
+
end
|
|
1566
|
+
|
|
1567
|
+
it "behaves correctly when given a non-model instance" do
|
|
1568
|
+
expect(person.addresses.all?(1)).to be true
|
|
1569
|
+
end
|
|
1570
|
+
end
|
|
1571
|
+
end
|
|
1572
|
+
end
|
|
1573
|
+
|
|
1574
|
+
describe "#none?" do
|
|
1575
|
+
|
|
1576
|
+
let(:person) do
|
|
1577
|
+
Person.create!
|
|
1578
|
+
end
|
|
1579
|
+
|
|
1580
|
+
context "when documents are persisted" do
|
|
1581
|
+
before do
|
|
1582
|
+
person.addresses.create!(street: "Upper")
|
|
1583
|
+
end
|
|
1584
|
+
|
|
1585
|
+
it "returns true" do
|
|
1586
|
+
expect(person.addresses.none?).to be false
|
|
1587
|
+
end
|
|
1588
|
+
|
|
1589
|
+
it "block form iterates across all documents" do
|
|
1590
|
+
expect(person.addresses.none? {|a| a.street == "Upper" }).to be false
|
|
1591
|
+
expect(person.addresses.none? {|a| a.street == "Bond" }).to be true
|
|
1592
|
+
end
|
|
1593
|
+
|
|
1594
|
+
context 'argument form' do
|
|
1595
|
+
it "behaves correctly when given a model instance" do
|
|
1596
|
+
expect(person.addresses.none?(person.addresses.first)).to be false
|
|
1597
|
+
end
|
|
1598
|
+
|
|
1599
|
+
it "behaves correctly when given a non-model instance" do
|
|
1600
|
+
expect(person.addresses.none?(1)).to be true
|
|
1601
|
+
end
|
|
1602
|
+
end
|
|
1603
|
+
end
|
|
1604
|
+
|
|
1605
|
+
context "when documents are not persisted" do
|
|
1606
|
+
before do
|
|
1607
|
+
person.addresses.build(street: "Bond")
|
|
1608
|
+
end
|
|
1609
|
+
|
|
1610
|
+
it "returns true" do
|
|
1611
|
+
expect(person.addresses.none?).to be false
|
|
1612
|
+
end
|
|
1613
|
+
|
|
1614
|
+
it "block form iterates across all documents" do
|
|
1615
|
+
expect(person.addresses.none? {|a| a.street == "Upper" }).to be true
|
|
1616
|
+
expect(person.addresses.none? {|a| a.street == "Bond" }).to be false
|
|
1617
|
+
end
|
|
1618
|
+
|
|
1619
|
+
context 'argument form' do
|
|
1620
|
+
it "behaves correctly when given a model instance" do
|
|
1621
|
+
expect(person.addresses.none?(person.addresses.first)).to be false
|
|
1622
|
+
end
|
|
1623
|
+
|
|
1624
|
+
it "behaves correctly when given a non-model instance" do
|
|
1625
|
+
expect(person.addresses.none?(1)).to be true
|
|
1626
|
+
end
|
|
1627
|
+
end
|
|
1628
|
+
end
|
|
1629
|
+
|
|
1630
|
+
context "when documents are not present" do
|
|
1631
|
+
it "returns false" do
|
|
1632
|
+
expect(person.addresses.none?).to be true
|
|
1633
|
+
end
|
|
1634
|
+
|
|
1635
|
+
it "block form iterates across all documents" do
|
|
1636
|
+
expect(person.addresses.none?(&:a)).to be true
|
|
1637
|
+
end
|
|
1638
|
+
|
|
1639
|
+
context 'argument form' do
|
|
1640
|
+
it "behaves correctly when given nil" do
|
|
1641
|
+
expect(person.addresses.none?(nil)).to be true
|
|
1642
|
+
end
|
|
1643
|
+
|
|
1644
|
+
it "behaves correctly when given a non-model instance" do
|
|
1645
|
+
expect(person.addresses.none?(1)).to be true
|
|
1646
|
+
end
|
|
1647
|
+
end
|
|
1435
1648
|
end
|
|
1436
1649
|
end
|
|
1437
1650
|
|
|
@@ -1440,11 +1653,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1440
1653
|
context "when providing multiple attributes" do
|
|
1441
1654
|
|
|
1442
1655
|
let(:person) do
|
|
1443
|
-
Person.create
|
|
1656
|
+
Person.create!
|
|
1444
1657
|
end
|
|
1445
1658
|
|
|
1446
1659
|
let!(:addresses) do
|
|
1447
|
-
person.addresses.create([{ street: "Bond" }, { street: "Upper" }])
|
|
1660
|
+
person.addresses.create!([{ street: "Bond" }, { street: "Upper" }])
|
|
1448
1661
|
end
|
|
1449
1662
|
|
|
1450
1663
|
it "creates multiple documents" do
|
|
@@ -1467,11 +1680,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1467
1680
|
context "when the relation is not cyclic" do
|
|
1468
1681
|
|
|
1469
1682
|
let(:person) do
|
|
1470
|
-
Person.create
|
|
1683
|
+
Person.create!
|
|
1471
1684
|
end
|
|
1472
1685
|
|
|
1473
1686
|
let!(:address) do
|
|
1474
|
-
person.addresses.create(street: "Bond") do |address|
|
|
1687
|
+
person.addresses.create!(street: "Bond") do |address|
|
|
1475
1688
|
address.state = "CA"
|
|
1476
1689
|
end
|
|
1477
1690
|
end
|
|
@@ -1515,7 +1728,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1515
1728
|
context "when embedding a multi word named document" do
|
|
1516
1729
|
|
|
1517
1730
|
let!(:component) do
|
|
1518
|
-
person.address_components.create(street: "Test")
|
|
1731
|
+
person.address_components.create!(street: "Test")
|
|
1519
1732
|
end
|
|
1520
1733
|
|
|
1521
1734
|
it "saves the embedded document" do
|
|
@@ -1527,11 +1740,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1527
1740
|
context "when the relation is cyclic" do
|
|
1528
1741
|
|
|
1529
1742
|
let!(:entry) do
|
|
1530
|
-
Entry.create(title: "hi")
|
|
1743
|
+
Entry.create!(title: "hi")
|
|
1531
1744
|
end
|
|
1532
1745
|
|
|
1533
1746
|
let!(:child_entry) do
|
|
1534
|
-
entry.child_entries.create(title: "hello")
|
|
1747
|
+
entry.child_entries.create!(title: "hello")
|
|
1535
1748
|
end
|
|
1536
1749
|
|
|
1537
1750
|
it "creates a new child" do
|
|
@@ -1543,7 +1756,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1543
1756
|
describe "#create!" do
|
|
1544
1757
|
|
|
1545
1758
|
let(:person) do
|
|
1546
|
-
Person.create
|
|
1759
|
+
Person.create!
|
|
1547
1760
|
end
|
|
1548
1761
|
|
|
1549
1762
|
context "when providing multiple attributes" do
|
|
@@ -1650,51 +1863,56 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1650
1863
|
end
|
|
1651
1864
|
end
|
|
1652
1865
|
|
|
1653
|
-
|
|
1866
|
+
%i[ delete delete_one ].each do |method|
|
|
1867
|
+
describe "\##{method}" do
|
|
1868
|
+
let(:address_one) { Address.new(street: "first") }
|
|
1869
|
+
let(:address_two) { Address.new(street: "second") }
|
|
1654
1870
|
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
let(:address_one) do
|
|
1660
|
-
Address.new(street: "first")
|
|
1661
|
-
end
|
|
1871
|
+
before do
|
|
1872
|
+
person.addresses << [ address_one, address_two ]
|
|
1873
|
+
end
|
|
1662
1874
|
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1875
|
+
shared_examples_for 'deleting from the collection' do
|
|
1876
|
+
context 'when the document exists in the relation' do
|
|
1877
|
+
let!(:deleted) do
|
|
1878
|
+
person.addresses.send(method, address_one)
|
|
1879
|
+
end
|
|
1666
1880
|
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1881
|
+
it 'deletes the document' do
|
|
1882
|
+
expect(person.addresses).to eq([ address_two ])
|
|
1883
|
+
expect(person.reload.addresses).to eq([ address_two ]) if person.persisted?
|
|
1884
|
+
end
|
|
1670
1885
|
|
|
1671
|
-
|
|
1886
|
+
it 'deletes the document from the unscoped' do
|
|
1887
|
+
expect(person.addresses.send(:_unscoped)).to eq([ address_two ])
|
|
1888
|
+
end
|
|
1672
1889
|
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1890
|
+
it 'reindexes the relation' do
|
|
1891
|
+
expect(address_two._index).to eq(0)
|
|
1892
|
+
end
|
|
1676
1893
|
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1894
|
+
it 'returns the document' do
|
|
1895
|
+
expect(deleted).to eq(address_one)
|
|
1896
|
+
end
|
|
1897
|
+
end
|
|
1680
1898
|
|
|
1681
|
-
|
|
1682
|
-
|
|
1899
|
+
context 'when the document does not exist' do
|
|
1900
|
+
it 'returns nil' do
|
|
1901
|
+
expect(person.addresses.send(method, Address.new)).to be_nil
|
|
1902
|
+
end
|
|
1903
|
+
end
|
|
1683
1904
|
end
|
|
1684
1905
|
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
end
|
|
1906
|
+
context 'when the root document is unpersisted' do
|
|
1907
|
+
let(:person) { Person.new }
|
|
1688
1908
|
|
|
1689
|
-
|
|
1690
|
-
expect(deleted).to eq(address_one)
|
|
1909
|
+
it_behaves_like 'deleting from the collection'
|
|
1691
1910
|
end
|
|
1692
|
-
end
|
|
1693
1911
|
|
|
1694
|
-
|
|
1912
|
+
context 'when the root document is persisted' do
|
|
1913
|
+
let(:person) { Person.create }
|
|
1695
1914
|
|
|
1696
|
-
|
|
1697
|
-
expect(person.addresses.delete(Address.new)).to be_nil
|
|
1915
|
+
it_behaves_like 'deleting from the collection'
|
|
1698
1916
|
end
|
|
1699
1917
|
end
|
|
1700
1918
|
end
|
|
@@ -1702,7 +1920,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1702
1920
|
describe "#delete_if" do
|
|
1703
1921
|
|
|
1704
1922
|
let(:person) do
|
|
1705
|
-
Person.create
|
|
1923
|
+
Person.create!
|
|
1706
1924
|
end
|
|
1707
1925
|
|
|
1708
1926
|
context "when the documents are new" do
|
|
@@ -1751,11 +1969,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1751
1969
|
context "when the documents persisted" do
|
|
1752
1970
|
|
|
1753
1971
|
let!(:address_one) do
|
|
1754
|
-
person.addresses.create(street: "Bond")
|
|
1972
|
+
person.addresses.create!(street: "Bond")
|
|
1755
1973
|
end
|
|
1756
1974
|
|
|
1757
1975
|
let!(:address_two) do
|
|
1758
|
-
person.addresses.create(street: "Upper")
|
|
1976
|
+
person.addresses.create!(street: "Upper")
|
|
1759
1977
|
end
|
|
1760
1978
|
|
|
1761
1979
|
context "when a block is provided" do
|
|
@@ -1810,7 +2028,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1810
2028
|
describe "##{method}" do
|
|
1811
2029
|
|
|
1812
2030
|
let(:person) do
|
|
1813
|
-
Person.create
|
|
2031
|
+
Person.create!
|
|
1814
2032
|
end
|
|
1815
2033
|
|
|
1816
2034
|
context "when the documents are new" do
|
|
@@ -1864,11 +2082,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1864
2082
|
context "when the documents persisted" do
|
|
1865
2083
|
|
|
1866
2084
|
let!(:address_one) do
|
|
1867
|
-
person.addresses.create(street: "Bond")
|
|
2085
|
+
person.addresses.create!(street: "Bond")
|
|
1868
2086
|
end
|
|
1869
2087
|
|
|
1870
2088
|
let!(:address_two) do
|
|
1871
|
-
person.addresses.create(street: "Upper")
|
|
2089
|
+
person.addresses.create!(street: "Upper")
|
|
1872
2090
|
end
|
|
1873
2091
|
|
|
1874
2092
|
context "when conditions are provided" do
|
|
@@ -1915,7 +2133,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1915
2133
|
context "when removing and resaving" do
|
|
1916
2134
|
|
|
1917
2135
|
let(:owner) do
|
|
1918
|
-
PetOwner.create(title: "AKC")
|
|
2136
|
+
PetOwner.create!(title: "AKC")
|
|
1919
2137
|
end
|
|
1920
2138
|
|
|
1921
2139
|
before do
|
|
@@ -1998,6 +2216,79 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1998
2216
|
end
|
|
1999
2217
|
end
|
|
2000
2218
|
end
|
|
2219
|
+
|
|
2220
|
+
context "when modifying the document beforehand" do
|
|
2221
|
+
let(:parent) { EmmParent.new }
|
|
2222
|
+
|
|
2223
|
+
before do
|
|
2224
|
+
|
|
2225
|
+
parent.blocks << EmmBlock.new(name: 'test', children: [size: 1, order: 1])
|
|
2226
|
+
parent.save!
|
|
2227
|
+
|
|
2228
|
+
parent.blocks[0].children[0].assign_attributes(size: 2)
|
|
2229
|
+
|
|
2230
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2231
|
+
end
|
|
2232
|
+
|
|
2233
|
+
it "deletes the correct document in the database" do
|
|
2234
|
+
expect(parent.reload.blocks.length).to eq(0)
|
|
2235
|
+
end
|
|
2236
|
+
end
|
|
2237
|
+
|
|
2238
|
+
context "when nil _id" do
|
|
2239
|
+
let(:parent) { EmmParent.new }
|
|
2240
|
+
|
|
2241
|
+
before do
|
|
2242
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test', children: [size: 1, order: 1])
|
|
2243
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test2', children: [size: 1, order: 1])
|
|
2244
|
+
parent.save!
|
|
2245
|
+
|
|
2246
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2247
|
+
end
|
|
2248
|
+
|
|
2249
|
+
it "deletes only the matching documents in the database" do
|
|
2250
|
+
expect(parent.reload.blocks.length).to eq(1)
|
|
2251
|
+
end
|
|
2252
|
+
end
|
|
2253
|
+
|
|
2254
|
+
# Since without an _id field we must us a $pullAll with the attributes of
|
|
2255
|
+
# the embedded document, if you modify it beforehand, the query will not
|
|
2256
|
+
# be able to find the correct document to pull.
|
|
2257
|
+
context "when modifying the document with nil _id" do
|
|
2258
|
+
let(:parent) { EmmParent.new }
|
|
2259
|
+
|
|
2260
|
+
before do
|
|
2261
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test', children: [size: 1, order: 1])
|
|
2262
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test2', children: [size: 1, order: 1])
|
|
2263
|
+
parent.save!
|
|
2264
|
+
|
|
2265
|
+
parent.blocks[0].children[0].assign_attributes(size: 2)
|
|
2266
|
+
|
|
2267
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2268
|
+
end
|
|
2269
|
+
|
|
2270
|
+
it "does not delete the correct documents" do
|
|
2271
|
+
expect(parent.reload.blocks.length).to eq(2)
|
|
2272
|
+
end
|
|
2273
|
+
end
|
|
2274
|
+
|
|
2275
|
+
context "when documents with and without _id" do
|
|
2276
|
+
let(:parent) { EmmParent.new }
|
|
2277
|
+
|
|
2278
|
+
before do
|
|
2279
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test', children: [size: 1, order: 1])
|
|
2280
|
+
parent.blocks << EmmBlock.new(name: 'test', children: [size: 1, order: 1])
|
|
2281
|
+
parent.save!
|
|
2282
|
+
|
|
2283
|
+
parent.blocks[1].children[0].assign_attributes(size: 2)
|
|
2284
|
+
|
|
2285
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2286
|
+
end
|
|
2287
|
+
|
|
2288
|
+
it "does not delete the correct documents" do
|
|
2289
|
+
expect(parent.reload.blocks.length).to eq(0)
|
|
2290
|
+
end
|
|
2291
|
+
end
|
|
2001
2292
|
end
|
|
2002
2293
|
end
|
|
2003
2294
|
|
|
@@ -2011,18 +2302,46 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2011
2302
|
describe "#exists?" do
|
|
2012
2303
|
|
|
2013
2304
|
let!(:person) do
|
|
2014
|
-
Person.create
|
|
2305
|
+
Person.create!
|
|
2015
2306
|
end
|
|
2016
2307
|
|
|
2017
2308
|
context "when documents exist in the database" do
|
|
2018
2309
|
|
|
2019
2310
|
before do
|
|
2020
|
-
person.addresses.create(street: "Bond St")
|
|
2311
|
+
person.addresses.create!(street: "Bond St")
|
|
2021
2312
|
end
|
|
2022
2313
|
|
|
2314
|
+
let(:address) { person.addresses.first }
|
|
2315
|
+
|
|
2023
2316
|
it "returns true" do
|
|
2024
2317
|
expect(person.addresses.exists?).to be true
|
|
2025
2318
|
end
|
|
2319
|
+
|
|
2320
|
+
context 'when given specifying conditions' do
|
|
2321
|
+
context 'when the record exists in the association' do
|
|
2322
|
+
it 'returns true by condition' do
|
|
2323
|
+
expect(person.addresses.exists?(street: 'Bond St')).to be true
|
|
2324
|
+
end
|
|
2325
|
+
|
|
2326
|
+
it 'returns true by id' do
|
|
2327
|
+
expect(person.addresses.exists?(address._id)).to be true
|
|
2328
|
+
end
|
|
2329
|
+
|
|
2330
|
+
it 'returns false when given false' do
|
|
2331
|
+
expect(person.addresses.exists?(false)).to be false
|
|
2332
|
+
end
|
|
2333
|
+
|
|
2334
|
+
it 'returns false when given nil' do
|
|
2335
|
+
expect(person.addresses.exists?(nil)).to be false
|
|
2336
|
+
end
|
|
2337
|
+
end
|
|
2338
|
+
|
|
2339
|
+
context 'when the record does not exist in the association' do
|
|
2340
|
+
it 'returns false' do
|
|
2341
|
+
expect(person.addresses.exists?(street: 'Garfield Ave')).to be false
|
|
2342
|
+
end
|
|
2343
|
+
end
|
|
2344
|
+
end
|
|
2026
2345
|
end
|
|
2027
2346
|
|
|
2028
2347
|
context "when no documents exist in the database" do
|
|
@@ -2034,6 +2353,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2034
2353
|
it "returns false" do
|
|
2035
2354
|
expect(person.addresses.exists?).to be false
|
|
2036
2355
|
end
|
|
2356
|
+
|
|
2357
|
+
context 'when given specifying conditions' do
|
|
2358
|
+
it 'returns false' do
|
|
2359
|
+
expect(person.addresses.exists?(street: 'Hyde Park Dr')).to be false
|
|
2360
|
+
expect(person.addresses.exists?(street: 'Garfield Ave')).to be false
|
|
2361
|
+
end
|
|
2362
|
+
end
|
|
2037
2363
|
end
|
|
2038
2364
|
end
|
|
2039
2365
|
|
|
@@ -2067,32 +2393,22 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2067
2393
|
context "when the id does not match" do
|
|
2068
2394
|
|
|
2069
2395
|
context "when config set to raise error" do
|
|
2070
|
-
|
|
2071
|
-
before do
|
|
2072
|
-
Mongoid.raise_not_found_error = true
|
|
2073
|
-
end
|
|
2396
|
+
config_override :raise_not_found_error, true
|
|
2074
2397
|
|
|
2075
2398
|
it "raises an error" do
|
|
2076
2399
|
expect {
|
|
2077
2400
|
person.addresses.find(BSON::ObjectId.new)
|
|
2078
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2401
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
2079
2402
|
end
|
|
2080
2403
|
end
|
|
2081
2404
|
|
|
2082
2405
|
context "when config set not to raise error" do
|
|
2406
|
+
config_override :raise_not_found_error, false
|
|
2083
2407
|
|
|
2084
2408
|
let(:address) do
|
|
2085
2409
|
person.addresses.find(BSON::ObjectId.new)
|
|
2086
2410
|
end
|
|
2087
2411
|
|
|
2088
|
-
before do
|
|
2089
|
-
Mongoid.raise_not_found_error = false
|
|
2090
|
-
end
|
|
2091
|
-
|
|
2092
|
-
after do
|
|
2093
|
-
Mongoid.raise_not_found_error = true
|
|
2094
|
-
end
|
|
2095
|
-
|
|
2096
2412
|
it "returns nil" do
|
|
2097
2413
|
expect(address).to be_nil
|
|
2098
2414
|
end
|
|
@@ -2116,36 +2432,64 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2116
2432
|
context "when the ids do not match" do
|
|
2117
2433
|
|
|
2118
2434
|
context "when config set to raise error" do
|
|
2119
|
-
|
|
2120
|
-
before do
|
|
2121
|
-
Mongoid.raise_not_found_error = true
|
|
2122
|
-
end
|
|
2435
|
+
config_override :raise_not_found_error, true
|
|
2123
2436
|
|
|
2124
2437
|
it "raises an error" do
|
|
2125
2438
|
expect {
|
|
2126
2439
|
person.addresses.find([ BSON::ObjectId.new ])
|
|
2127
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2440
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
2128
2441
|
end
|
|
2129
2442
|
end
|
|
2130
2443
|
|
|
2131
2444
|
context "when config set not to raise error" do
|
|
2445
|
+
config_override :raise_not_found_error, false
|
|
2132
2446
|
|
|
2133
2447
|
let(:addresses) do
|
|
2134
2448
|
person.addresses.find([ BSON::ObjectId.new ])
|
|
2135
2449
|
end
|
|
2136
2450
|
|
|
2137
|
-
|
|
2138
|
-
|
|
2451
|
+
it "returns an empty array" do
|
|
2452
|
+
expect(addresses).to be_empty
|
|
2139
2453
|
end
|
|
2454
|
+
end
|
|
2455
|
+
end
|
|
2456
|
+
end
|
|
2140
2457
|
|
|
2141
|
-
|
|
2142
|
-
|
|
2458
|
+
context "with block" do
|
|
2459
|
+
let!(:author) do
|
|
2460
|
+
Person.create!(title: 'Person')
|
|
2461
|
+
end
|
|
2462
|
+
|
|
2463
|
+
let!(:video_one) do
|
|
2464
|
+
author.videos.create!(title: 'video one')
|
|
2465
|
+
end
|
|
2466
|
+
|
|
2467
|
+
let!(:video_two) do
|
|
2468
|
+
author.videos.create!(title: 'video two')
|
|
2469
|
+
end
|
|
2470
|
+
|
|
2471
|
+
it "finds one" do
|
|
2472
|
+
expect(
|
|
2473
|
+
author.videos.find do |video|
|
|
2474
|
+
video.title == 'video one'
|
|
2143
2475
|
end
|
|
2476
|
+
).to eq(video_one)
|
|
2477
|
+
end
|
|
2144
2478
|
|
|
2145
|
-
|
|
2146
|
-
|
|
2479
|
+
it "returns first match of multiple" do
|
|
2480
|
+
expect(
|
|
2481
|
+
author.videos.find do |video|
|
|
2482
|
+
['video one', 'video two'].include?(video.title)
|
|
2147
2483
|
end
|
|
2148
|
-
|
|
2484
|
+
).to be_a(Video)
|
|
2485
|
+
end
|
|
2486
|
+
|
|
2487
|
+
it "returns nil when not found" do
|
|
2488
|
+
expect(
|
|
2489
|
+
author.videos.find do |video|
|
|
2490
|
+
video.title == 'non exiting one'
|
|
2491
|
+
end
|
|
2492
|
+
).to be_nil
|
|
2149
2493
|
end
|
|
2150
2494
|
end
|
|
2151
2495
|
end
|
|
@@ -2153,7 +2497,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2153
2497
|
describe "#find_or_create_by" do
|
|
2154
2498
|
|
|
2155
2499
|
let(:person) do
|
|
2156
|
-
Person.create
|
|
2500
|
+
Person.create!
|
|
2157
2501
|
end
|
|
2158
2502
|
|
|
2159
2503
|
let!(:address) do
|
|
@@ -2196,11 +2540,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2196
2540
|
# context "when the child belongs to another document" do
|
|
2197
2541
|
#
|
|
2198
2542
|
# let(:product) do
|
|
2199
|
-
# Product.create
|
|
2543
|
+
# Product.create!
|
|
2200
2544
|
# end
|
|
2201
2545
|
#
|
|
2202
2546
|
# let(:purchase) do
|
|
2203
|
-
# Purchase.create
|
|
2547
|
+
# Purchase.create!
|
|
2204
2548
|
# end
|
|
2205
2549
|
#
|
|
2206
2550
|
# let(:line_item) do
|
|
@@ -2219,7 +2563,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2219
2563
|
describe "#find_or_create_by!" do
|
|
2220
2564
|
|
|
2221
2565
|
let(:person) do
|
|
2222
|
-
Person.create
|
|
2566
|
+
Person.create!
|
|
2223
2567
|
end
|
|
2224
2568
|
|
|
2225
2569
|
let!(:address) do
|
|
@@ -2271,11 +2615,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2271
2615
|
# context "when the child belongs to another document" do
|
|
2272
2616
|
#
|
|
2273
2617
|
# let(:product) do
|
|
2274
|
-
# Product.create
|
|
2618
|
+
# Product.create!
|
|
2275
2619
|
# end
|
|
2276
2620
|
#
|
|
2277
2621
|
# let(:purchase) do
|
|
2278
|
-
# Purchase.create
|
|
2622
|
+
# Purchase.create!
|
|
2279
2623
|
# end
|
|
2280
2624
|
#
|
|
2281
2625
|
# let(:line_item) do
|
|
@@ -2393,11 +2737,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2393
2737
|
describe "#method_missing" do
|
|
2394
2738
|
|
|
2395
2739
|
let!(:person) do
|
|
2396
|
-
Person.create
|
|
2740
|
+
Person.create!
|
|
2397
2741
|
end
|
|
2398
2742
|
|
|
2399
2743
|
let!(:address_one) do
|
|
2400
|
-
person.addresses.create(
|
|
2744
|
+
person.addresses.create!(
|
|
2401
2745
|
street: "Market",
|
|
2402
2746
|
state: "CA",
|
|
2403
2747
|
services: [ "1", "2" ]
|
|
@@ -2405,7 +2749,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2405
2749
|
end
|
|
2406
2750
|
|
|
2407
2751
|
let!(:address_two) do
|
|
2408
|
-
person.addresses.create(
|
|
2752
|
+
person.addresses.create!(
|
|
2409
2753
|
street: "Madison",
|
|
2410
2754
|
state: "NY",
|
|
2411
2755
|
services: [ "1", "2" ]
|
|
@@ -2449,13 +2793,26 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2449
2793
|
end
|
|
2450
2794
|
|
|
2451
2795
|
context "when providing a criteria class method" do
|
|
2796
|
+
context "without keyword arguments" do
|
|
2452
2797
|
|
|
2453
|
-
|
|
2454
|
-
|
|
2798
|
+
let(:addresses) do
|
|
2799
|
+
person.addresses.california
|
|
2800
|
+
end
|
|
2801
|
+
|
|
2802
|
+
it "applies the criteria to the documents" do
|
|
2803
|
+
expect(addresses).to eq([ address_one ])
|
|
2804
|
+
end
|
|
2455
2805
|
end
|
|
2456
2806
|
|
|
2457
|
-
|
|
2458
|
-
|
|
2807
|
+
context "with keyword arguments" do
|
|
2808
|
+
|
|
2809
|
+
let(:addresses) do
|
|
2810
|
+
person.addresses.city_and_state(city: "Sacramento", state: "CA")
|
|
2811
|
+
end
|
|
2812
|
+
|
|
2813
|
+
it "applies the criteria to the documents" do
|
|
2814
|
+
expect(addresses).to eq([])
|
|
2815
|
+
end
|
|
2459
2816
|
end
|
|
2460
2817
|
end
|
|
2461
2818
|
|
|
@@ -2540,17 +2897,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2540
2897
|
describe "#pop" do
|
|
2541
2898
|
|
|
2542
2899
|
let(:person) do
|
|
2543
|
-
Person.create
|
|
2900
|
+
Person.create!
|
|
2544
2901
|
end
|
|
2545
2902
|
|
|
2546
2903
|
context "when no argument is provided" do
|
|
2547
2904
|
|
|
2548
2905
|
let!(:address_one) do
|
|
2549
|
-
person.addresses.create(street: "sonnenallee")
|
|
2906
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2550
2907
|
end
|
|
2551
2908
|
|
|
2552
2909
|
let!(:address_two) do
|
|
2553
|
-
person.addresses.create(street: "hermannstr")
|
|
2910
|
+
person.addresses.create!(street: "hermannstr")
|
|
2554
2911
|
end
|
|
2555
2912
|
|
|
2556
2913
|
let!(:popped) do
|
|
@@ -2573,11 +2930,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2573
2930
|
context "when an integer is provided" do
|
|
2574
2931
|
|
|
2575
2932
|
let!(:address_one) do
|
|
2576
|
-
person.addresses.create(street: "sonnenallee")
|
|
2933
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2577
2934
|
end
|
|
2578
2935
|
|
|
2579
2936
|
let!(:address_two) do
|
|
2580
|
-
person.addresses.create(street: "hermannstr")
|
|
2937
|
+
person.addresses.create!(street: "hermannstr")
|
|
2581
2938
|
end
|
|
2582
2939
|
|
|
2583
2940
|
context "when the number is zero" do
|
|
@@ -2659,17 +3016,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2659
3016
|
describe "#shift" do
|
|
2660
3017
|
|
|
2661
3018
|
let(:person) do
|
|
2662
|
-
Person.create
|
|
3019
|
+
Person.create!
|
|
2663
3020
|
end
|
|
2664
3021
|
|
|
2665
3022
|
context "when no argument is provided" do
|
|
2666
3023
|
|
|
2667
3024
|
let!(:address_one) do
|
|
2668
|
-
person.addresses.create(street: "sonnenallee")
|
|
3025
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2669
3026
|
end
|
|
2670
3027
|
|
|
2671
3028
|
let!(:address_two) do
|
|
2672
|
-
person.addresses.create(street: "hermannstr")
|
|
3029
|
+
person.addresses.create!(street: "hermannstr")
|
|
2673
3030
|
end
|
|
2674
3031
|
|
|
2675
3032
|
let!(:shifted) do
|
|
@@ -2692,11 +3049,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2692
3049
|
context "when an integer is provided" do
|
|
2693
3050
|
|
|
2694
3051
|
let!(:address_one) do
|
|
2695
|
-
person.addresses.create(street: "sonnenallee")
|
|
3052
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2696
3053
|
end
|
|
2697
3054
|
|
|
2698
3055
|
let!(:address_two) do
|
|
2699
|
-
person.addresses.create(street: "hermannstr")
|
|
3056
|
+
person.addresses.create!(street: "hermannstr")
|
|
2700
3057
|
end
|
|
2701
3058
|
|
|
2702
3059
|
context "when the number is zero" do
|
|
@@ -2844,11 +3201,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2844
3201
|
describe "##{method}" do
|
|
2845
3202
|
|
|
2846
3203
|
let(:person) do
|
|
2847
|
-
Person.create
|
|
3204
|
+
Person.create!
|
|
2848
3205
|
end
|
|
2849
3206
|
|
|
2850
3207
|
before do
|
|
2851
|
-
person.addresses.create(street: "Upper")
|
|
3208
|
+
person.addresses.create!(street: "Upper")
|
|
2852
3209
|
person.addresses.build(street: "Bond")
|
|
2853
3210
|
end
|
|
2854
3211
|
|
|
@@ -2886,7 +3243,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2886
3243
|
context "when there are no documents present" do
|
|
2887
3244
|
|
|
2888
3245
|
let(:person) do
|
|
2889
|
-
Person.create
|
|
3246
|
+
Person.create!
|
|
2890
3247
|
end
|
|
2891
3248
|
|
|
2892
3249
|
it "updates nothing" do
|
|
@@ -2897,11 +3254,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2897
3254
|
context "when documents are present" do
|
|
2898
3255
|
|
|
2899
3256
|
let(:person) do
|
|
2900
|
-
Person.create
|
|
3257
|
+
Person.create!
|
|
2901
3258
|
end
|
|
2902
3259
|
|
|
2903
3260
|
let!(:address) do
|
|
2904
|
-
person.addresses.create(street: "Hobrecht", number: 27)
|
|
3261
|
+
person.addresses.create!(street: "Hobrecht", number: 27)
|
|
2905
3262
|
end
|
|
2906
3263
|
|
|
2907
3264
|
context "when updating with a where clause" do
|
|
@@ -2936,16 +3293,16 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2936
3293
|
context "when updating the bottom level" do
|
|
2937
3294
|
|
|
2938
3295
|
let!(:person) do
|
|
2939
|
-
Person.create
|
|
3296
|
+
Person.create!
|
|
2940
3297
|
end
|
|
2941
3298
|
|
|
2942
3299
|
let!(:address) do
|
|
2943
|
-
person.addresses.create(street: "Joachimstr")
|
|
3300
|
+
person.addresses.create!(street: "Joachimstr")
|
|
2944
3301
|
end
|
|
2945
3302
|
|
|
2946
3303
|
let!(:location) do
|
|
2947
|
-
address.locations.create(name: "vacation", number: 0)
|
|
2948
|
-
address.locations.create(name: "work", number: 3)
|
|
3304
|
+
address.locations.create!(name: "vacation", number: 0)
|
|
3305
|
+
address.locations.create!(name: "work", number: 3)
|
|
2949
3306
|
end
|
|
2950
3307
|
|
|
2951
3308
|
context "when updating with replacement of embedded array" do
|
|
@@ -2953,7 +3310,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2953
3310
|
context "when updating with a hash" do
|
|
2954
3311
|
|
|
2955
3312
|
before do
|
|
2956
|
-
address.update_attributes(locations: [{ name: "home" }])
|
|
3313
|
+
address.update_attributes!(locations: [{ name: "home" }])
|
|
2957
3314
|
end
|
|
2958
3315
|
|
|
2959
3316
|
it "updates the attributes" do
|
|
@@ -2974,7 +3331,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2974
3331
|
|
|
2975
3332
|
before do
|
|
2976
3333
|
location.number = 7
|
|
2977
|
-
location.save
|
|
3334
|
+
location.save!
|
|
2978
3335
|
end
|
|
2979
3336
|
|
|
2980
3337
|
let(:updated_location_number) do
|
|
@@ -3107,7 +3464,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3107
3464
|
context "when creating a persisted tree" do
|
|
3108
3465
|
|
|
3109
3466
|
let(:quiz) do
|
|
3110
|
-
Quiz.create
|
|
3467
|
+
Quiz.create!
|
|
3111
3468
|
end
|
|
3112
3469
|
|
|
3113
3470
|
let(:page) do
|
|
@@ -3172,7 +3529,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3172
3529
|
context "when saving the root" do
|
|
3173
3530
|
|
|
3174
3531
|
before do
|
|
3175
|
-
person.save
|
|
3532
|
+
person.save!
|
|
3176
3533
|
end
|
|
3177
3534
|
|
|
3178
3535
|
it "persists the first level document" do
|
|
@@ -3198,7 +3555,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3198
3555
|
|
|
3199
3556
|
describe "replacing the entire embedded list" do
|
|
3200
3557
|
|
|
3201
|
-
context "when an embeds many relationship contains
|
|
3558
|
+
context "when an embeds many relationship contains nil as the first item" do
|
|
3202
3559
|
|
|
3203
3560
|
let(:person) do
|
|
3204
3561
|
Person.create!
|
|
@@ -3219,7 +3576,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3219
3576
|
end
|
|
3220
3577
|
end
|
|
3221
3578
|
|
|
3222
|
-
context "when an embeds many relationship contains
|
|
3579
|
+
context "when an embeds many relationship contains nil in the middle of the list" do
|
|
3223
3580
|
|
|
3224
3581
|
let(:person) do
|
|
3225
3582
|
Person.create!
|
|
@@ -3240,7 +3597,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3240
3597
|
end
|
|
3241
3598
|
end
|
|
3242
3599
|
|
|
3243
|
-
context "when an embeds many relationship contains
|
|
3600
|
+
context "when an embeds many relationship contains nil at the end of the list" do
|
|
3244
3601
|
|
|
3245
3602
|
let(:person) do
|
|
3246
3603
|
Person.create!
|
|
@@ -3264,7 +3621,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3264
3621
|
|
|
3265
3622
|
describe "appending to the embedded list" do
|
|
3266
3623
|
|
|
3267
|
-
context "when appending
|
|
3624
|
+
context "when appending nil to the first position in an embedded list" do
|
|
3268
3625
|
|
|
3269
3626
|
let(:person) do
|
|
3270
3627
|
Person.create! phone_numbers: []
|
|
@@ -3283,7 +3640,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3283
3640
|
end
|
|
3284
3641
|
end
|
|
3285
3642
|
|
|
3286
|
-
context "when appending
|
|
3643
|
+
context "when appending nil into the middle of an embedded list" do
|
|
3287
3644
|
|
|
3288
3645
|
let(:person) do
|
|
3289
3646
|
Person.create! phone_numbers: []
|
|
@@ -3302,7 +3659,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3302
3659
|
end
|
|
3303
3660
|
end
|
|
3304
3661
|
|
|
3305
|
-
context "when appending
|
|
3662
|
+
context "when appending nil to the end of an embedded list" do
|
|
3306
3663
|
|
|
3307
3664
|
let(:person) do
|
|
3308
3665
|
Person.create! phone_numbers: []
|
|
@@ -3326,11 +3683,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3326
3683
|
context "when accessing the parent in a destroy callback" do
|
|
3327
3684
|
|
|
3328
3685
|
let!(:league) do
|
|
3329
|
-
League.create
|
|
3686
|
+
League.create!
|
|
3330
3687
|
end
|
|
3331
3688
|
|
|
3332
3689
|
let!(:division) do
|
|
3333
|
-
league.divisions.create
|
|
3690
|
+
league.divisions.create!
|
|
3334
3691
|
end
|
|
3335
3692
|
|
|
3336
3693
|
before do
|
|
@@ -3345,15 +3702,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3345
3702
|
context "when updating the parent with all attributes" do
|
|
3346
3703
|
|
|
3347
3704
|
let!(:person) do
|
|
3348
|
-
Person.create
|
|
3705
|
+
Person.create!
|
|
3349
3706
|
end
|
|
3350
3707
|
|
|
3351
3708
|
let!(:address) do
|
|
3352
|
-
person.addresses.create
|
|
3709
|
+
person.addresses.create!
|
|
3353
3710
|
end
|
|
3354
3711
|
|
|
3355
3712
|
before do
|
|
3356
|
-
person.update_attributes(person.attributes)
|
|
3713
|
+
person.update_attributes!(person.attributes)
|
|
3357
3714
|
end
|
|
3358
3715
|
|
|
3359
3716
|
it "does not duplicate the embedded documents" do
|
|
@@ -3368,13 +3725,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3368
3725
|
context "when embedding children named versions" do
|
|
3369
3726
|
|
|
3370
3727
|
let(:acolyte) do
|
|
3371
|
-
Acolyte.create(name: "test")
|
|
3728
|
+
Acolyte.create!(name: "test")
|
|
3372
3729
|
end
|
|
3373
3730
|
|
|
3374
3731
|
context "when creating a child" do
|
|
3375
3732
|
|
|
3376
3733
|
let(:version) do
|
|
3377
|
-
acolyte.versions.create(number: 1)
|
|
3734
|
+
acolyte.versions.create!(number: 1)
|
|
3378
3735
|
end
|
|
3379
3736
|
|
|
3380
3737
|
it "allows the operation" do
|
|
@@ -3399,7 +3756,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3399
3756
|
let!(:account) do
|
|
3400
3757
|
Account.new(name: "Testing").tap do |acct|
|
|
3401
3758
|
acct.memberships.build
|
|
3402
|
-
acct.save
|
|
3759
|
+
acct.save!
|
|
3403
3760
|
end
|
|
3404
3761
|
end
|
|
3405
3762
|
|
|
@@ -3411,10 +3768,10 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3411
3768
|
|
|
3412
3769
|
before do
|
|
3413
3770
|
account.name = ""
|
|
3414
|
-
account.save
|
|
3415
3771
|
end
|
|
3416
3772
|
|
|
3417
3773
|
it "does not lose the parent reference" do
|
|
3774
|
+
expect(account.save).to eq false
|
|
3418
3775
|
expect(from_db.memberships.first.account).to eq(account)
|
|
3419
3776
|
end
|
|
3420
3777
|
end
|
|
@@ -3434,15 +3791,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3434
3791
|
context "when moving an embedded document from one parent to another" do
|
|
3435
3792
|
|
|
3436
3793
|
let!(:person_one) do
|
|
3437
|
-
Person.create
|
|
3794
|
+
Person.create!
|
|
3438
3795
|
end
|
|
3439
3796
|
|
|
3440
3797
|
let!(:person_two) do
|
|
3441
|
-
Person.create
|
|
3798
|
+
Person.create!
|
|
3442
3799
|
end
|
|
3443
3800
|
|
|
3444
3801
|
let!(:address) do
|
|
3445
|
-
person_one.addresses.create(street: "Kudamm")
|
|
3802
|
+
person_one.addresses.create!(street: "Kudamm")
|
|
3446
3803
|
end
|
|
3447
3804
|
|
|
3448
3805
|
before do
|
|
@@ -3477,7 +3834,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3477
3834
|
context "when the relation has a default scope" do
|
|
3478
3835
|
|
|
3479
3836
|
let!(:person) do
|
|
3480
|
-
Person.create
|
|
3837
|
+
Person.create!
|
|
3481
3838
|
end
|
|
3482
3839
|
|
|
3483
3840
|
context "when the default scope is a sort" do
|
|
@@ -3547,7 +3904,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3547
3904
|
context "when indexing the documents" do
|
|
3548
3905
|
|
|
3549
3906
|
let!(:person) do
|
|
3550
|
-
Person.create
|
|
3907
|
+
Person.create!
|
|
3551
3908
|
end
|
|
3552
3909
|
|
|
3553
3910
|
context "when the documents have a limiting default scope" do
|
|
@@ -3596,18 +3953,18 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3596
3953
|
context "when the embedded document has an array field" do
|
|
3597
3954
|
|
|
3598
3955
|
let!(:person) do
|
|
3599
|
-
Person.create
|
|
3956
|
+
Person.create!
|
|
3600
3957
|
end
|
|
3601
3958
|
|
|
3602
3959
|
let!(:video) do
|
|
3603
|
-
person.videos.create
|
|
3960
|
+
person.videos.create!
|
|
3604
3961
|
end
|
|
3605
3962
|
|
|
3606
3963
|
context "when saving the array on a persisted document" do
|
|
3607
3964
|
|
|
3608
3965
|
before do
|
|
3609
3966
|
video.genres = [ "horror", "scifi" ]
|
|
3610
|
-
video.save
|
|
3967
|
+
video.save!
|
|
3611
3968
|
end
|
|
3612
3969
|
|
|
3613
3970
|
it "sets the value" do
|
|
@@ -3632,7 +3989,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3632
3989
|
|
|
3633
3990
|
before do
|
|
3634
3991
|
loaded_video.genres = [ "comedy" ]
|
|
3635
|
-
loaded_video.save
|
|
3992
|
+
loaded_video.save!
|
|
3636
3993
|
end
|
|
3637
3994
|
|
|
3638
3995
|
it "sets the new value" do
|
|
@@ -3650,15 +4007,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3650
4007
|
context "when destroying an embedded document" do
|
|
3651
4008
|
|
|
3652
4009
|
let(:person) do
|
|
3653
|
-
Person.create
|
|
4010
|
+
Person.create!
|
|
3654
4011
|
end
|
|
3655
4012
|
|
|
3656
4013
|
let!(:address_one) do
|
|
3657
|
-
person.addresses.create(street: "hobrecht")
|
|
4014
|
+
person.addresses.create!(street: "hobrecht")
|
|
3658
4015
|
end
|
|
3659
4016
|
|
|
3660
4017
|
let!(:address_two) do
|
|
3661
|
-
person.addresses.create(street: "maybachufer")
|
|
4018
|
+
person.addresses.create!(street: "maybachufer")
|
|
3662
4019
|
end
|
|
3663
4020
|
|
|
3664
4021
|
before do
|
|
@@ -3697,6 +4054,28 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3697
4054
|
end
|
|
3698
4055
|
end
|
|
3699
4056
|
|
|
4057
|
+
context "when destroying a document with multiple nil _ids" do
|
|
4058
|
+
let(:congress) { EmmCongress.create! }
|
|
4059
|
+
|
|
4060
|
+
before do
|
|
4061
|
+
congress.legislators << EmmLegislator.new(_id: nil, a: 1)
|
|
4062
|
+
congress.legislators << EmmLegislator.new(_id: nil, a: 2)
|
|
4063
|
+
|
|
4064
|
+
congress.legislators[0].destroy
|
|
4065
|
+
end
|
|
4066
|
+
|
|
4067
|
+
it "deletes the correct document locally" do
|
|
4068
|
+
pending "MONGOID-5394"
|
|
4069
|
+
expect(congress.legislators.length).to eq(1)
|
|
4070
|
+
expect(congress.legislators.first.a).to eq(1)
|
|
4071
|
+
end
|
|
4072
|
+
|
|
4073
|
+
it "only deletes the one document" do
|
|
4074
|
+
pending "MONGOID-5394"
|
|
4075
|
+
expect(congress.reload.legislators.length).to eq(1)
|
|
4076
|
+
end
|
|
4077
|
+
end
|
|
4078
|
+
|
|
3700
4079
|
context "when adding a document" do
|
|
3701
4080
|
|
|
3702
4081
|
let(:person) do
|
|
@@ -3730,7 +4109,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3730
4109
|
context "when the association has an order defined" do
|
|
3731
4110
|
|
|
3732
4111
|
let(:person) do
|
|
3733
|
-
Person.create
|
|
4112
|
+
Person.create!
|
|
3734
4113
|
end
|
|
3735
4114
|
|
|
3736
4115
|
let(:message_one) do
|
|
@@ -3761,11 +4140,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3761
4140
|
|
|
3762
4141
|
before do
|
|
3763
4142
|
person.aliases = [ { name: "A", priority: 3 }, { name: "B", priority: 4 }]
|
|
3764
|
-
person.save
|
|
4143
|
+
person.save!
|
|
3765
4144
|
end
|
|
3766
4145
|
|
|
3767
4146
|
let!(:person2) do
|
|
3768
|
-
Person.create( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
|
|
4147
|
+
Person.create!( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
|
|
3769
4148
|
end
|
|
3770
4149
|
|
|
3771
4150
|
it "allows ordering on a key of an embedded document" do
|
|
@@ -3800,7 +4179,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3800
4179
|
context "when updating multiple levels in one update" do
|
|
3801
4180
|
|
|
3802
4181
|
let!(:person) do
|
|
3803
|
-
Person.create(
|
|
4182
|
+
Person.create!(
|
|
3804
4183
|
addresses: [
|
|
3805
4184
|
{ locations: [{ name: "home" }]}
|
|
3806
4185
|
]
|
|
@@ -3814,7 +4193,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3814
4193
|
end
|
|
3815
4194
|
|
|
3816
4195
|
before do
|
|
3817
|
-
from_db.update_attributes(
|
|
4196
|
+
from_db.update_attributes!(
|
|
3818
4197
|
addresses: [
|
|
3819
4198
|
{ locations: [{ name: "work" }]}
|
|
3820
4199
|
]
|
|
@@ -3834,15 +4213,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3834
4213
|
context "when the embedded relation sorts on a boolean" do
|
|
3835
4214
|
|
|
3836
4215
|
let(:circuit) do
|
|
3837
|
-
Circuit.create
|
|
4216
|
+
Circuit.create!
|
|
3838
4217
|
end
|
|
3839
4218
|
|
|
3840
4219
|
let!(:bus_one) do
|
|
3841
|
-
circuit.buses.create(saturday: true)
|
|
4220
|
+
circuit.buses.create!(saturday: true)
|
|
3842
4221
|
end
|
|
3843
4222
|
|
|
3844
4223
|
let!(:bus_two) do
|
|
3845
|
-
circuit.buses.create(saturday: false)
|
|
4224
|
+
circuit.buses.create!(saturday: false)
|
|
3846
4225
|
end
|
|
3847
4226
|
|
|
3848
4227
|
it "orders properly with the boolean" do
|
|
@@ -3853,7 +4232,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3853
4232
|
context "when batch replacing multiple relations in a single update" do
|
|
3854
4233
|
|
|
3855
4234
|
let(:document) do
|
|
3856
|
-
Person.create
|
|
4235
|
+
Person.create!
|
|
3857
4236
|
end
|
|
3858
4237
|
|
|
3859
4238
|
let(:person) do
|
|
@@ -3861,23 +4240,23 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3861
4240
|
end
|
|
3862
4241
|
|
|
3863
4242
|
let!(:symptom_one) do
|
|
3864
|
-
person.symptoms.create
|
|
4243
|
+
person.symptoms.create!
|
|
3865
4244
|
end
|
|
3866
4245
|
|
|
3867
4246
|
let!(:symptom_two) do
|
|
3868
|
-
person.symptoms.create
|
|
4247
|
+
person.symptoms.create!
|
|
3869
4248
|
end
|
|
3870
4249
|
|
|
3871
4250
|
let!(:appointment_one) do
|
|
3872
|
-
person.appointments.create
|
|
4251
|
+
person.appointments.create!
|
|
3873
4252
|
end
|
|
3874
4253
|
|
|
3875
4254
|
let!(:appointment_two) do
|
|
3876
|
-
person.appointments.create
|
|
4255
|
+
person.appointments.create!
|
|
3877
4256
|
end
|
|
3878
4257
|
|
|
3879
4258
|
before do
|
|
3880
|
-
person.update_attributes(
|
|
4259
|
+
person.update_attributes!(
|
|
3881
4260
|
appointments: [ appointment_one.as_document, appointment_two.as_document ],
|
|
3882
4261
|
symptoms: [ symptom_one.as_document, symptom_two.as_document ]
|
|
3883
4262
|
)
|
|
@@ -4210,7 +4589,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4210
4589
|
context "when the parent has an after create callback" do
|
|
4211
4590
|
|
|
4212
4591
|
before do
|
|
4213
|
-
server.save
|
|
4592
|
+
server.save!
|
|
4214
4593
|
end
|
|
4215
4594
|
|
|
4216
4595
|
it "does not push the embedded documents twice" do
|
|
@@ -4222,13 +4601,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4222
4601
|
context "when embedded documents are stored without ids" do
|
|
4223
4602
|
|
|
4224
4603
|
let!(:band) do
|
|
4225
|
-
Band.create(name: "Moderat")
|
|
4604
|
+
Band.create!(name: "Moderat")
|
|
4226
4605
|
end
|
|
4227
4606
|
|
|
4228
4607
|
before do
|
|
4229
4608
|
band.collection.
|
|
4230
4609
|
find(_id: band.id).
|
|
4231
|
-
update_one("$set" => { records: [{ name: "Moderat" }]})
|
|
4610
|
+
update_one("$set" => { records: [{ _id: BSON::ObjectId.new, name: "Moderat" }]})
|
|
4232
4611
|
end
|
|
4233
4612
|
|
|
4234
4613
|
context "when loading the documents" do
|
|
@@ -4272,7 +4651,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4272
4651
|
company = Company.new
|
|
4273
4652
|
4.times { |i| company.staffs << Staff.new(age: 50 + i)}
|
|
4274
4653
|
2.times { |i| company.staffs << Staff.new(age: 40)}
|
|
4275
|
-
company.save
|
|
4654
|
+
company.save!
|
|
4276
4655
|
company.staffs.delete_if {|x| x.age >= 50}
|
|
4277
4656
|
expect(company.staffs.count).to eq(2)
|
|
4278
4657
|
end
|
|
@@ -4349,7 +4728,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4349
4728
|
context "when the parent is persisted" do
|
|
4350
4729
|
|
|
4351
4730
|
let(:zone) do
|
|
4352
|
-
DNS::Zone.create
|
|
4731
|
+
DNS::Zone.create!
|
|
4353
4732
|
end
|
|
4354
4733
|
|
|
4355
4734
|
let(:soa_1) do
|
|
@@ -4387,4 +4766,134 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4387
4766
|
end
|
|
4388
4767
|
end
|
|
4389
4768
|
end
|
|
4769
|
+
|
|
4770
|
+
context "when trying to persist the empty list" do
|
|
4771
|
+
|
|
4772
|
+
context "in an embeds_many relation" do
|
|
4773
|
+
|
|
4774
|
+
let(:band) { Band.create! }
|
|
4775
|
+
|
|
4776
|
+
before do
|
|
4777
|
+
band.labels = []
|
|
4778
|
+
band.save!
|
|
4779
|
+
end
|
|
4780
|
+
|
|
4781
|
+
let(:reloaded_band) { Band.collection.find(_id: band._id).first }
|
|
4782
|
+
|
|
4783
|
+
it "persists the empty list" do
|
|
4784
|
+
expect(reloaded_band).to have_key(:labels)
|
|
4785
|
+
expect(reloaded_band[:labels]).to eq []
|
|
4786
|
+
end
|
|
4787
|
+
end
|
|
4788
|
+
|
|
4789
|
+
context "in a nested embeds_many relation" do
|
|
4790
|
+
|
|
4791
|
+
let(:survey) { Survey.create!(questions: [Question.new]) }
|
|
4792
|
+
|
|
4793
|
+
before do
|
|
4794
|
+
survey.questions.first.answers = []
|
|
4795
|
+
survey.save!
|
|
4796
|
+
end
|
|
4797
|
+
|
|
4798
|
+
let(:reloaded_survey) { Survey.collection.find(_id: survey._id).first }
|
|
4799
|
+
|
|
4800
|
+
it "persists the empty list" do
|
|
4801
|
+
expect(reloaded_survey).to have_key(:questions)
|
|
4802
|
+
expect(reloaded_survey[:questions][0]).to have_key(:answers)
|
|
4803
|
+
expect(reloaded_survey[:questions][0][:answers]).to eq []
|
|
4804
|
+
end
|
|
4805
|
+
end
|
|
4806
|
+
|
|
4807
|
+
context "when not setting the embeds_many field" do
|
|
4808
|
+
|
|
4809
|
+
let(:band) { Band.create! }
|
|
4810
|
+
|
|
4811
|
+
let(:reloaded_band) { Band.collection.find(_id: band._id).first }
|
|
4812
|
+
|
|
4813
|
+
it "does not persist the empty list" do
|
|
4814
|
+
expect(reloaded_band).to_not have_key(:labels)
|
|
4815
|
+
end
|
|
4816
|
+
end
|
|
4817
|
+
end
|
|
4818
|
+
|
|
4819
|
+
context "when using assign_attributes with an already populated array" do
|
|
4820
|
+
let(:post) { EmmPost.create! }
|
|
4821
|
+
|
|
4822
|
+
before do
|
|
4823
|
+
post.assign_attributes(company_tags: [{id: BSON::ObjectId.new, title: 'a'}],
|
|
4824
|
+
user_tags: [{id: BSON::ObjectId.new, title: 'b'}])
|
|
4825
|
+
post.save!
|
|
4826
|
+
post.reload
|
|
4827
|
+
post.assign_attributes(company_tags: [{id: BSON::ObjectId.new, title: 'c'}],
|
|
4828
|
+
user_tags: [])
|
|
4829
|
+
post.save!
|
|
4830
|
+
post.reload
|
|
4831
|
+
end
|
|
4832
|
+
|
|
4833
|
+
it "has the correct embedded documents" do
|
|
4834
|
+
expect(post.company_tags.length).to eq(1)
|
|
4835
|
+
expect(post.company_tags.first.title).to eq("c")
|
|
4836
|
+
end
|
|
4837
|
+
end
|
|
4838
|
+
|
|
4839
|
+
context "when the parent fails validation" do
|
|
4840
|
+
let(:school) { EmmSchool.new }
|
|
4841
|
+
let(:student) { school.students.new }
|
|
4842
|
+
|
|
4843
|
+
before do
|
|
4844
|
+
student.save
|
|
4845
|
+
end
|
|
4846
|
+
|
|
4847
|
+
it "does not mark the parent as persisted" do
|
|
4848
|
+
expect(school.persisted?).to be false
|
|
4849
|
+
end
|
|
4850
|
+
|
|
4851
|
+
it "does not mark the child as persisted" do
|
|
4852
|
+
expect(student.persisted?).to be false
|
|
4853
|
+
end
|
|
4854
|
+
|
|
4855
|
+
it "does not persist the parent" do
|
|
4856
|
+
expect(School.count).to eq(0)
|
|
4857
|
+
end
|
|
4858
|
+
end
|
|
4859
|
+
|
|
4860
|
+
context "when doing assign_attributes then assignment" do
|
|
4861
|
+
|
|
4862
|
+
let(:post) do
|
|
4863
|
+
EmmPost.create!(
|
|
4864
|
+
company_tags: [ EmmCompanyTag.new(title: "1"), EmmCompanyTag.new(title: "1") ],
|
|
4865
|
+
user_tags: [ EmmUserTag.new(title: "1"), EmmUserTag.new(title: "1") ]
|
|
4866
|
+
)
|
|
4867
|
+
end
|
|
4868
|
+
|
|
4869
|
+
let(:from_db) { EmmPost.find(post.id) }
|
|
4870
|
+
|
|
4871
|
+
before do
|
|
4872
|
+
post.assign_attributes(
|
|
4873
|
+
company_tags: [ EmmCompanyTag.new(title: '3'), EmmCompanyTag.new(title: '4') ]
|
|
4874
|
+
)
|
|
4875
|
+
post.user_tags = [ EmmUserTag.new(title: '3'), EmmUserTag.new(title: '4') ]
|
|
4876
|
+
post.save!
|
|
4877
|
+
end
|
|
4878
|
+
|
|
4879
|
+
it "persists the associations correctly" do
|
|
4880
|
+
expect(from_db.user_tags.size).to eq(2)
|
|
4881
|
+
expect(from_db.company_tags.size).to eq(2)
|
|
4882
|
+
end
|
|
4883
|
+
end
|
|
4884
|
+
|
|
4885
|
+
context "when assigning hashes" do
|
|
4886
|
+
let(:user) { EmmUser.create! }
|
|
4887
|
+
|
|
4888
|
+
before do
|
|
4889
|
+
user.orders = [ { sku: 1 }, { sku: 2 } ]
|
|
4890
|
+
end
|
|
4891
|
+
|
|
4892
|
+
it "creates the objects correctly" do
|
|
4893
|
+
expect(user.orders.first).to be_a(EmmOrder)
|
|
4894
|
+
expect(user.orders.last).to be_a(EmmOrder)
|
|
4895
|
+
|
|
4896
|
+
expect(user.orders.map(&:sku).sort).to eq([ 1, 2 ])
|
|
4897
|
+
end
|
|
4898
|
+
end
|
|
4390
4899
|
end
|