mongoid 9.0.11 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -8
- data/README.md +5 -11
- data/Rakefile +35 -38
- data/lib/config/locales/en.yml +11 -0
- data/lib/mongoid/association/accessors.rb +19 -26
- data/lib/mongoid/association/bindable.rb +43 -45
- data/lib/mongoid/association/builders.rb +18 -15
- data/lib/mongoid/association/constrainable.rb +3 -5
- data/lib/mongoid/association/depending.rb +34 -38
- data/lib/mongoid/association/eager.rb +47 -13
- data/lib/mongoid/association/eager_loadable.rb +152 -24
- data/lib/mongoid/association/embedded/batchable.rb +28 -30
- data/lib/mongoid/association/embedded/cyclic.rb +8 -11
- data/lib/mongoid/association/embedded/eager.rb +1 -6
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +6 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +25 -22
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many.rb +24 -21
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +2 -6
- data/lib/mongoid/association/embedded/embeds_one.rb +20 -18
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +3 -7
- data/lib/mongoid/association/many.rb +75 -3
- data/lib/mongoid/association/marshalable.rb +0 -3
- data/lib/mongoid/association/nested/many.rb +18 -13
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -9
- data/lib/mongoid/association/nested/one.rb +4 -7
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +0 -3
- data/lib/mongoid/association/options.rb +8 -7
- data/lib/mongoid/association/referenced/auto_save.rb +0 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
- data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
- data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
- data/lib/mongoid/association/referenced/has_many/proxy.rb +10 -6
- data/lib/mongoid/association/referenced/has_many.rb +30 -24
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_one.rb +26 -21
- data/lib/mongoid/association/referenced/syncable.rb +30 -34
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +0 -3
- data/lib/mongoid/association/relatable.rb +69 -66
- data/lib/mongoid/association.rb +12 -15
- data/lib/mongoid/atomic/modifiers.rb +65 -25
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +2 -4
- data/lib/mongoid/atomic/paths/embedded.rb +3 -6
- data/lib/mongoid/atomic/paths/root.rb +1 -4
- data/lib/mongoid/atomic/paths.rb +2 -3
- data/lib/mongoid/atomic.rb +0 -3
- data/lib/mongoid/attributes/dynamic.rb +6 -7
- data/lib/mongoid/attributes/nested.rb +8 -10
- data/lib/mongoid/attributes/projector.rb +7 -20
- data/lib/mongoid/attributes/readonly.rb +6 -11
- data/lib/mongoid/attributes.rb +18 -34
- data/lib/mongoid/cacheable.rb +24 -6
- data/lib/mongoid/clients/factory.rb +12 -15
- data/lib/mongoid/clients/options.rb +2 -5
- data/lib/mongoid/clients/sessions.rb +50 -60
- data/lib/mongoid/clients/storage_options.rb +1 -4
- data/lib/mongoid/clients/validators/storage.rb +2 -3
- data/lib/mongoid/clients/validators.rb +1 -2
- data/lib/mongoid/clients.rb +8 -11
- data/lib/mongoid/collection_configurable.rb +10 -14
- data/lib/mongoid/composable.rb +30 -34
- data/lib/mongoid/config/defaults.rb +7 -4
- data/lib/mongoid/config/encryption.rb +1 -3
- data/lib/mongoid/config/environment.rb +7 -16
- data/lib/mongoid/config/introspection.rb +14 -16
- data/lib/mongoid/config/options.rb +16 -10
- data/lib/mongoid/config/validators/async_query_executor.rb +3 -6
- data/lib/mongoid/config/validators/client.rb +12 -15
- data/lib/mongoid/config/validators/option.rb +3 -5
- data/lib/mongoid/config/validators.rb +3 -4
- data/lib/mongoid/config.rb +132 -42
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -4
- data/lib/mongoid/contextual/aggregable/mongo.rb +20 -22
- data/lib/mongoid/contextual/aggregable/none.rb +2 -4
- data/lib/mongoid/contextual/aggregable.rb +5 -7
- data/lib/mongoid/contextual/atomic.rb +20 -24
- data/lib/mongoid/contextual/command.rb +0 -3
- data/lib/mongoid/contextual/map_reduce.rb +12 -16
- data/lib/mongoid/contextual/memory.rb +72 -65
- data/lib/mongoid/contextual/mongo/documents_loader.rb +2 -3
- data/lib/mongoid/contextual/mongo.rb +169 -85
- data/lib/mongoid/contextual/none.rb +9 -9
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +7 -9
- data/lib/mongoid/criteria/findable.rb +5 -7
- data/lib/mongoid/criteria/includable.rb +37 -8
- data/lib/mongoid/criteria/inspectable.rb +2 -5
- data/lib/mongoid/criteria/marshalable.rb +4 -8
- data/lib/mongoid/criteria/modifiable.rb +3 -11
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +34 -37
- data/lib/mongoid/criteria/queryable/aggregable.rb +9 -10
- data/lib/mongoid/criteria/queryable/expandable.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -10
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +20 -11
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -11
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -8
- data/lib/mongoid/criteria/queryable/extensions/range.rb +6 -9
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -12
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -6
- data/lib/mongoid/criteria/queryable/extensions/string.rb +5 -9
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +2 -12
- data/lib/mongoid/criteria/queryable/extensions.rb +18 -21
- data/lib/mongoid/criteria/queryable/key.rb +12 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +31 -39
- data/lib/mongoid/criteria/queryable/optional.rb +17 -18
- data/lib/mongoid/criteria/queryable/options.rb +20 -9
- data/lib/mongoid/criteria/queryable/pipeline.rb +6 -9
- data/lib/mongoid/criteria/queryable/selectable.rb +131 -193
- data/lib/mongoid/criteria/queryable/selector.rb +20 -29
- data/lib/mongoid/criteria/queryable/smash.rb +1 -6
- data/lib/mongoid/criteria/queryable/storable.rb +20 -39
- data/lib/mongoid/criteria/queryable.rb +25 -15
- data/lib/mongoid/criteria/scopable.rb +5 -11
- data/lib/mongoid/criteria/translator.rb +5 -8
- data/lib/mongoid/criteria.rb +109 -54
- data/lib/mongoid/deprecable.rb +1 -4
- data/lib/mongoid/deprecation.rb +2 -6
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/encryptable.rb +1 -2
- data/lib/mongoid/equality.rb +4 -5
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +1 -4
- data/lib/mongoid/errors/callback.rb +1 -4
- data/lib/mongoid/errors/create_collection_failure.rb +8 -11
- data/lib/mongoid/errors/criteria_argument_required.rb +2 -5
- data/lib/mongoid/errors/delete_restriction.rb +1 -4
- data/lib/mongoid/errors/document_not_destroyed.rb +1 -4
- data/lib/mongoid/errors/document_not_found.rb +16 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +7 -10
- data/lib/mongoid/errors/empty_config_file.rb +1 -4
- data/lib/mongoid/errors/immutable_attribute.rb +1 -4
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -4
- data/lib/mongoid/errors/invalid_async_query_executor.rb +2 -5
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +2 -5
- data/lib/mongoid/errors/invalid_collection.rb +1 -3
- data/lib/mongoid/errors/invalid_config_file.rb +1 -4
- data/lib/mongoid/errors/invalid_config_option.rb +2 -5
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +6 -10
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +2 -4
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -4
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +1 -4
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +1 -4
- data/lib/mongoid/errors/invalid_expression_operator.rb +3 -7
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_field_option.rb +2 -5
- data/lib/mongoid/errors/invalid_field_type.rb +1 -4
- data/lib/mongoid/errors/invalid_find.rb +1 -4
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -4
- data/lib/mongoid/errors/invalid_includes.rb +3 -6
- data/lib/mongoid/errors/invalid_index.rb +1 -4
- data/lib/mongoid/errors/invalid_options.rb +1 -4
- data/lib/mongoid/errors/invalid_path.rb +1 -4
- data/lib/mongoid/errors/invalid_persistence_option.rb +4 -7
- data/lib/mongoid/errors/invalid_query.rb +6 -11
- data/lib/mongoid/errors/invalid_relation.rb +10 -13
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -7
- data/lib/mongoid/errors/invalid_scope.rb +1 -4
- data/lib/mongoid/errors/invalid_session_nesting.rb +0 -3
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +2 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -4
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +1 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -4
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +7 -11
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -4
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -4
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +1 -4
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -4
- data/lib/mongoid/errors/no_metadata.rb +1 -4
- data/lib/mongoid/errors/no_parent.rb +1 -4
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -4
- data/lib/mongoid/errors/rollback.rb +0 -2
- data/lib/mongoid/errors/scope_overwrite.rb +2 -4
- data/lib/mongoid/errors/sessions_not_supported.rb +0 -3
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -3
- data/lib/mongoid/errors/transaction_error.rb +0 -3
- data/lib/mongoid/errors/transactions_not_supported.rb +0 -3
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -4
- data/lib/mongoid/errors/unregistered_class.rb +1 -1
- data/lib/mongoid/errors/unsaved_document.rb +1 -3
- data/lib/mongoid/errors/unsupported_isolation_level.rb +22 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -4
- data/lib/mongoid/errors/validations.rb +3 -5
- data/lib/mongoid/errors.rb +72 -72
- data/lib/mongoid/evolvable.rb +0 -3
- data/lib/mongoid/extensions/array.rb +5 -7
- data/lib/mongoid/extensions/big_decimal.rb +6 -7
- data/lib/mongoid/extensions/binary.rb +3 -6
- data/lib/mongoid/extensions/boolean.rb +4 -7
- data/lib/mongoid/extensions/bson_document.rb +28 -0
- data/lib/mongoid/extensions/date.rb +10 -14
- data/lib/mongoid/extensions/date_time.rb +2 -6
- data/lib/mongoid/extensions/decimal128.rb +1 -5
- data/lib/mongoid/extensions/false_class.rb +3 -5
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +5 -10
- data/lib/mongoid/extensions/integer.rb +5 -10
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -1
- data/lib/mongoid/extensions/object.rb +9 -14
- data/lib/mongoid/extensions/object_id.rb +2 -6
- data/lib/mongoid/extensions/range.rb +14 -15
- data/lib/mongoid/extensions/raw_value.rb +0 -3
- data/lib/mongoid/extensions/regexp.rb +3 -6
- data/lib/mongoid/extensions/set.rb +3 -4
- data/lib/mongoid/extensions/string.rb +8 -12
- data/lib/mongoid/extensions/symbol.rb +3 -7
- data/lib/mongoid/extensions/time.rb +24 -26
- data/lib/mongoid/extensions/time_with_zone.rb +4 -7
- data/lib/mongoid/extensions/true_class.rb +3 -5
- data/lib/mongoid/extensions.rb +26 -26
- data/lib/mongoid/factory.rb +5 -9
- data/lib/mongoid/fields/encrypted.rb +0 -1
- data/lib/mongoid/fields/foreign_key.rb +9 -10
- data/lib/mongoid/fields/localized.rb +12 -12
- data/lib/mongoid/fields/standard.rb +5 -7
- data/lib/mongoid/fields/validators/macro.rb +23 -34
- data/lib/mongoid/fields/validators.rb +1 -2
- data/lib/mongoid/fields.rb +151 -58
- data/lib/mongoid/findable.rb +82 -53
- data/lib/mongoid/indexable/specification.rb +20 -6
- data/lib/mongoid/indexable/validators/options.rb +33 -40
- data/lib/mongoid/indexable.rb +26 -25
- data/lib/mongoid/inspectable.rb +4 -7
- data/lib/mongoid/interceptable.rb +41 -40
- data/lib/mongoid/loadable.rb +17 -18
- data/lib/mongoid/loggable.rb +4 -8
- data/lib/mongoid/matchable.rb +0 -2
- data/lib/mongoid/matcher/all.rb +2 -5
- data/lib/mongoid/matcher/and.rb +0 -3
- data/lib/mongoid/matcher/bits.rb +13 -8
- data/lib/mongoid/matcher/bits_all_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_all_set.rb +1 -3
- data/lib/mongoid/matcher/bits_any_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_any_set.rb +1 -3
- data/lib/mongoid/matcher/elem_match.rb +13 -15
- data/lib/mongoid/matcher/elem_match_expression.rb +0 -3
- data/lib/mongoid/matcher/eq.rb +0 -3
- data/lib/mongoid/matcher/eq_impl.rb +12 -17
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +4 -7
- data/lib/mongoid/matcher/exists.rb +1 -4
- data/lib/mongoid/matcher/expression.rb +5 -10
- data/lib/mongoid/matcher/expression_operator.rb +1 -3
- data/lib/mongoid/matcher/field_expression.rb +10 -13
- data/lib/mongoid/matcher/field_operator.rb +4 -6
- data/lib/mongoid/matcher/gt.rb +0 -3
- data/lib/mongoid/matcher/gte.rb +0 -3
- data/lib/mongoid/matcher/in.rb +9 -12
- data/lib/mongoid/matcher/lt.rb +0 -3
- data/lib/mongoid/matcher/lte.rb +0 -3
- data/lib/mongoid/matcher/mod.rb +4 -8
- data/lib/mongoid/matcher/ne.rb +0 -3
- data/lib/mongoid/matcher/nin.rb +0 -3
- data/lib/mongoid/matcher/nor.rb +1 -6
- data/lib/mongoid/matcher/not.rb +0 -3
- data/lib/mongoid/matcher/or.rb +0 -3
- data/lib/mongoid/matcher/regex.rb +11 -14
- data/lib/mongoid/matcher/size.rb +2 -5
- data/lib/mongoid/matcher/type.rb +32 -37
- data/lib/mongoid/matcher.rb +7 -15
- data/lib/mongoid/model_resolver.rb +1 -0
- data/lib/mongoid/persistable/creatable.rb +23 -7
- data/lib/mongoid/persistable/deletable.rb +6 -7
- data/lib/mongoid/persistable/destroyable.rb +2 -6
- data/lib/mongoid/persistable/incrementable.rb +1 -3
- data/lib/mongoid/persistable/logical.rb +3 -5
- data/lib/mongoid/persistable/maxable.rb +2 -4
- data/lib/mongoid/persistable/minable.rb +2 -4
- data/lib/mongoid/persistable/multipliable.rb +1 -3
- data/lib/mongoid/persistable/poppable.rb +2 -4
- data/lib/mongoid/persistable/pullable.rb +3 -5
- data/lib/mongoid/persistable/pushable.rb +5 -7
- data/lib/mongoid/persistable/renamable.rb +1 -3
- data/lib/mongoid/persistable/savable.rb +0 -3
- data/lib/mongoid/persistable/settable.rb +4 -13
- data/lib/mongoid/persistable/unsettable.rb +1 -3
- data/lib/mongoid/persistable/updatable.rb +16 -24
- data/lib/mongoid/persistable/upsertable.rb +8 -10
- data/lib/mongoid/persistable.rb +28 -27
- data/lib/mongoid/persistence_context.rb +34 -41
- data/lib/mongoid/pluckable.rb +0 -2
- data/lib/mongoid/positional.rb +5 -11
- data/lib/mongoid/railtie.rb +16 -22
- data/lib/mongoid/railties/console_sandbox.rb +6 -8
- data/lib/mongoid/railties/controller_runtime.rb +7 -11
- data/lib/mongoid/railties/database.rake +42 -44
- data/lib/mongoid/scopable.rb +23 -31
- data/lib/mongoid/search_indexable.rb +330 -0
- data/lib/mongoid/selectable.rb +1 -3
- data/lib/mongoid/serializable.rb +6 -8
- data/lib/mongoid/shardable.rb +8 -17
- data/lib/mongoid/stateful.rb +5 -10
- data/lib/mongoid/stringified_symbol.rb +5 -9
- data/lib/mongoid/tasks/database.rake +31 -32
- data/lib/mongoid/tasks/database.rb +28 -30
- data/lib/mongoid/tasks/encryption.rb +10 -15
- data/lib/mongoid/threaded/lifecycle.rb +6 -9
- data/lib/mongoid/threaded.rb +132 -32
- data/lib/mongoid/timestamps/created/short.rb +2 -3
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +8 -13
- data/lib/mongoid/timestamps/updated/short.rb +2 -3
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +4 -6
- data/lib/mongoid/touchable.rb +19 -11
- data/lib/mongoid/traversable.rb +3 -2
- data/lib/mongoid/validatable/associated.rb +1 -5
- data/lib/mongoid/validatable/format.rb +0 -2
- data/lib/mongoid/validatable/length.rb +0 -2
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/numericality.rb +24 -3
- data/lib/mongoid/validatable/presence.rb +8 -10
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +12 -14
- data/lib/mongoid/validatable.rb +15 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +10 -11
- data/lib/mongoid.rb +30 -34
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
- data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
- data/lib/rails/generators/mongoid_generator.rb +6 -10
- data/lib/rails/mongoid.rb +1 -3
- data/spec/integration/active_job_spec.rb +1 -2
- data/spec/integration/app_spec.rb +142 -178
- data/spec/integration/associations/belongs_to_spec.rb +30 -28
- data/spec/integration/associations/embedded_dirty_spec.rb +0 -1
- data/spec/integration/associations/embedded_spec.rb +41 -43
- data/spec/integration/associations/embeds_many_spec.rb +46 -29
- data/spec/integration/associations/embeds_one_spec.rb +2 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -11
- data/spec/integration/associations/foreign_key_spec_models.rb +8 -9
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +16 -13
- data/spec/integration/associations/has_many_spec.rb +17 -18
- data/spec/integration/associations/has_one_spec.rb +42 -45
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +36 -39
- data/spec/integration/associations/reverse_population_spec.rb +4 -5
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +18 -20
- data/spec/integration/atomic/modifiers_spec.rb +72 -52
- data/spec/integration/bson_regexp_raw_spec.rb +2 -3
- data/spec/integration/caching_spec.rb +68 -0
- data/spec/integration/callbacks_models.rb +11 -9
- data/spec/integration/callbacks_spec.rb +78 -80
- data/spec/integration/contextual/empty_spec.rb +19 -20
- data/spec/integration/criteria/alias_query_spec.rb +12 -19
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +23 -18
- data/spec/integration/criteria/logical_spec.rb +18 -19
- data/spec/integration/criteria/range_spec.rb +77 -86
- data/spec/integration/criteria/raw_value_spec.rb +122 -109
- data/spec/integration/criteria/time_with_zone_spec.rb +33 -24
- data/spec/integration/discriminator_key_spec.rb +85 -85
- data/spec/integration/discriminator_value_spec.rb +70 -73
- data/spec/integration/document_spec.rb +9 -10
- data/spec/integration/dots_and_dollars_spec.rb +104 -119
- data/spec/integration/encryption_spec.rb +8 -11
- data/spec/integration/i18n_fallbacks_spec.rb +7 -8
- data/spec/integration/isolation_state_spec.rb +241 -0
- data/spec/integration/matcher_examples_spec.rb +145 -168
- data/spec/integration/matcher_operator_data/in.yml +6 -6
- data/spec/integration/matcher_operator_spec.rb +16 -26
- data/spec/integration/matcher_spec.rb +31 -32
- data/spec/integration/persistence/collection_options_spec.rb +0 -2
- data/spec/integration/persistence/range_field_spec.rb +24 -2
- data/spec/integration/server_query_spec.rb +43 -37
- data/spec/integration/shardable_spec.rb +10 -11
- data/spec/integration/stringified_symbol_field_spec.rb +28 -43
- data/spec/lite_spec_helper.rb +11 -12
- data/spec/mongoid/association/accessors_spec.rb +197 -285
- data/spec/mongoid/association/auto_save_spec.rb +62 -93
- data/spec/mongoid/association/builders_spec.rb +121 -74
- data/spec/mongoid/association/constrainable_spec.rb +9 -22
- data/spec/mongoid/association/counter_cache_spec.rb +71 -104
- data/spec/mongoid/association/depending_spec.rb +166 -208
- data/spec/mongoid/association/eager_spec.rb +416 -80
- data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
- data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
- data/spec/mongoid/association/macros_spec.rb +213 -300
- data/spec/mongoid/association/nested/many_spec.rb +51 -73
- data/spec/mongoid/association/nested/one_spec.rb +56 -80
- data/spec/mongoid/association/options_spec.rb +187 -310
- data/spec/mongoid/association/polymorphic_spec.rb +35 -53
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
- data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -975
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +9 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +5 -6
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +59 -177
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +29 -43
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +53 -53
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +104 -67
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +431 -675
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -11
- data/spec/mongoid/association/referenced/has_many_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_many_spec.rb +44 -188
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +26 -38
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +28 -29
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +29 -42
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +270 -332
- data/spec/mongoid/association/referenced/has_one_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_one_spec.rb +40 -188
- data/spec/mongoid/association/reflections_spec.rb +14 -24
- data/spec/mongoid/association/syncable_spec.rb +102 -125
- data/spec/mongoid/association_spec.rb +47 -70
- data/spec/mongoid/atomic/modifiers_spec.rb +184 -197
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +39 -52
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +35 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +9 -15
- data/spec/mongoid/atomic/paths_spec.rb +81 -117
- data/spec/mongoid/atomic_spec.rb +156 -171
- data/spec/mongoid/attributes/dynamic_spec.rb +5 -6
- data/spec/mongoid/attributes/nested_spec.rb +1219 -1692
- data/spec/mongoid/attributes/nested_spec_models.rb +8 -9
- data/spec/mongoid/attributes/projector_spec.rb +2 -6
- data/spec/mongoid/attributes/readonly_spec.rb +73 -97
- data/spec/mongoid/attributes_spec.rb +669 -826
- data/spec/mongoid/cacheable_spec.rb +74 -44
- data/spec/mongoid/changeable_spec.rb +591 -733
- data/spec/mongoid/clients/factory_spec.rb +122 -154
- data/spec/mongoid/clients/options_spec.rb +40 -59
- data/spec/mongoid/clients/sessions_spec.rb +25 -44
- data/spec/mongoid/clients/transactions_spec.rb +33 -50
- data/spec/mongoid/clients/transactions_spec_models.rb +3 -4
- data/spec/mongoid/clients_spec.rb +265 -355
- data/spec/mongoid/collection_configurable_spec.rb +9 -12
- data/spec/mongoid/composable_spec.rb +2 -9
- data/spec/mongoid/config/defaults_spec.rb +24 -31
- data/spec/mongoid/config/encryption_spec.rb +54 -57
- data/spec/mongoid/config/environment_spec.rb +30 -40
- data/spec/mongoid/config/introspection_spec.rb +42 -37
- data/spec/mongoid/config/options_spec.rb +14 -21
- data/spec/mongoid/config_spec.rb +145 -195
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +98 -135
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +4 -7
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +149 -187
- data/spec/mongoid/contextual/aggregable/none_spec.rb +14 -16
- data/spec/mongoid/contextual/atomic_spec.rb +223 -271
- data/spec/mongoid/contextual/map_reduce_spec.rb +110 -138
- data/spec/mongoid/contextual/memory_spec.rb +706 -854
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +12 -13
- data/spec/mongoid/contextual/mongo_spec.rb +1008 -1213
- data/spec/mongoid/contextual/none_spec.rb +54 -59
- data/spec/mongoid/contextual/short_circuit_spec.rb +139 -0
- data/spec/mongoid/copyable_spec.rb +254 -300
- data/spec/mongoid/copyable_spec_models.rb +0 -1
- data/spec/mongoid/criteria/findable_spec.rb +322 -387
- data/spec/mongoid/criteria/includable_spec.rb +421 -372
- data/spec/mongoid/criteria/includable_spec_models.rb +16 -7
- data/spec/mongoid/criteria/inspectable_spec.rb +11 -14
- data/spec/mongoid/criteria/marshalable_spec.rb +11 -14
- data/spec/mongoid/criteria/modifiable_spec.rb +366 -512
- data/spec/mongoid/criteria/options_spec.rb +2 -7
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +112 -141
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +8 -11
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +127 -184
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +123 -60
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +84 -117
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +44 -65
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +86 -108
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +94 -33
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +103 -138
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +95 -34
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +25 -38
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +26 -28
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +32 -54
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +136 -130
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +16 -24
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +15 -24
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +12 -19
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -63
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +28 -42
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +73 -96
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +71 -92
- data/spec/mongoid/criteria/queryable/key_spec.rb +32 -36
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +44 -49
- data/spec/mongoid/criteria/queryable/optional_spec.rb +373 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +172 -123
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +65 -87
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +41 -53
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +576 -680
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +7 -11
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +807 -998
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +154 -191
- data/spec/mongoid/criteria/queryable/selector_spec.rb +294 -390
- data/spec/mongoid/criteria/queryable/smash_spec.rb +6 -11
- data/spec/mongoid/criteria/queryable/storable_spec.rb +54 -81
- data/spec/mongoid/criteria/queryable_mql_spec.rb +92 -0
- data/spec/mongoid/criteria/scopable_spec.rb +102 -138
- data/spec/mongoid/criteria/translator_spec.rb +59 -60
- data/spec/mongoid/criteria_projection_spec.rb +81 -99
- data/spec/mongoid/criteria_spec.rb +935 -950
- data/spec/mongoid/document_fields_spec.rb +28 -30
- data/spec/mongoid/document_persistence_context_spec.rb +13 -15
- data/spec/mongoid/document_query_spec.rb +9 -12
- data/spec/mongoid/document_spec.rb +317 -409
- data/spec/mongoid/equality_spec.rb +69 -102
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
- data/spec/mongoid/errors/callback_spec.rb +8 -11
- data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
- data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
- data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
- data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
- data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
- data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
- data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
- data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
- data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
- data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
- data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_environment_spec.rb +8 -11
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
- data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
- data/spec/mongoid/errors/no_parent_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
- data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
- data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
- data/spec/mongoid/errors/validations_spec.rb +11 -14
- data/spec/mongoid/extensions/array_spec.rb +70 -92
- data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
- data/spec/mongoid/extensions/binary_spec.rb +21 -32
- data/spec/mongoid/extensions/boolean_spec.rb +52 -75
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
- data/spec/mongoid/extensions/date_spec.rb +26 -38
- data/spec/mongoid/extensions/date_time_spec.rb +22 -32
- data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
- data/spec/mongoid/extensions/false_class_spec.rb +10 -17
- data/spec/mongoid/extensions/float_spec.rb +40 -61
- data/spec/mongoid/extensions/hash_spec.rb +46 -64
- data/spec/mongoid/extensions/integer_spec.rb +40 -61
- data/spec/mongoid/extensions/module_spec.rb +13 -18
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
- data/spec/mongoid/extensions/object_id_spec.rb +159 -247
- data/spec/mongoid/extensions/object_spec.rb +31 -47
- data/spec/mongoid/extensions/range_spec.rb +112 -115
- data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
- data/spec/mongoid/extensions/regexp_spec.rb +23 -36
- data/spec/mongoid/extensions/set_spec.rb +38 -49
- data/spec/mongoid/extensions/string_spec.rb +118 -167
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
- data/spec/mongoid/extensions/symbol_spec.rb +12 -20
- data/spec/mongoid/extensions/time_spec.rb +160 -202
- data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
- data/spec/mongoid/extensions/true_class_spec.rb +10 -17
- data/spec/mongoid/factory_spec.rb +125 -148
- data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
- data/spec/mongoid/fields/localized_spec.rb +140 -185
- data/spec/mongoid/fields/standard_spec.rb +43 -59
- data/spec/mongoid/fields_spec.rb +751 -620
- data/spec/mongoid/findable_spec.rb +260 -228
- data/spec/mongoid/indexable/specification_spec.rb +42 -58
- data/spec/mongoid/indexable_spec.rb +260 -264
- data/spec/mongoid/inspectable_spec.rb +45 -55
- data/spec/mongoid/interceptable_spec.rb +784 -922
- data/spec/mongoid/interceptable_spec_models.rb +35 -35
- data/spec/mongoid/loading_spec.rb +47 -43
- data/spec/mongoid/loggable_spec.rb +3 -6
- data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
- data/spec/mongoid/mongoizable_spec.rb +81 -90
- data/spec/mongoid/monkey_patches_spec.rb +4 -0
- data/spec/mongoid/persistable/creatable_spec.rb +181 -220
- data/spec/mongoid/persistable/deletable_spec.rb +139 -179
- data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
- data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
- data/spec/mongoid/persistable/logical_spec.rb +48 -61
- data/spec/mongoid/persistable/maxable_spec.rb +45 -44
- data/spec/mongoid/persistable/minable_spec.rb +45 -44
- data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
- data/spec/mongoid/persistable/poppable_spec.rb +47 -60
- data/spec/mongoid/persistable/pullable_spec.rb +79 -103
- data/spec/mongoid/persistable/pushable_spec.rb +106 -131
- data/spec/mongoid/persistable/renamable_spec.rb +52 -65
- data/spec/mongoid/persistable/savable_spec.rb +152 -189
- data/spec/mongoid/persistable/settable_spec.rb +121 -145
- data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
- data/spec/mongoid/persistable/updatable_spec.rb +185 -232
- data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
- data/spec/mongoid/persistable_spec.rb +132 -139
- data/spec/mongoid/persistence_context_spec.rb +31 -89
- data/spec/mongoid/positional_spec.rb +67 -79
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
- data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
- data/spec/mongoid/relations/proxy_spec.rb +0 -1
- data/spec/mongoid/reloadable_spec.rb +250 -145
- data/spec/mongoid/scopable_spec.rb +319 -398
- data/spec/mongoid/search_indexable_spec.rb +446 -41
- data/spec/mongoid/selectable_spec.rb +36 -51
- data/spec/mongoid/serializable_spec.rb +269 -312
- data/spec/mongoid/shardable_models.rb +5 -5
- data/spec/mongoid/shardable_spec.rb +44 -46
- data/spec/mongoid/stateful_spec.rb +55 -75
- data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
- data/spec/mongoid/tasks/database_spec.rb +80 -80
- data/spec/mongoid/tasks/encryption_spec.rb +22 -20
- data/spec/mongoid/threaded_spec.rb +57 -83
- data/spec/mongoid/timestamps/created/short_spec.rb +12 -16
- data/spec/mongoid/timestamps/created_spec.rb +16 -20
- data/spec/mongoid/timestamps/timeless_spec.rb +31 -43
- data/spec/mongoid/timestamps/updated/short_spec.rb +21 -28
- data/spec/mongoid/timestamps/updated_spec.rb +18 -25
- data/spec/mongoid/timestamps_spec.rb +171 -188
- data/spec/mongoid/timestamps_spec_models.rb +12 -13
- data/spec/mongoid/touchable_spec.rb +330 -294
- data/spec/mongoid/touchable_spec_models.rb +35 -37
- data/spec/mongoid/traversable_spec.rb +435 -471
- data/spec/mongoid/validatable/associated_spec.rb +42 -60
- data/spec/mongoid/validatable/format_spec.rb +24 -34
- data/spec/mongoid/validatable/length_spec.rb +62 -86
- data/spec/mongoid/validatable/numericality_spec.rb +114 -23
- data/spec/mongoid/validatable/presence_spec.rb +149 -203
- data/spec/mongoid/validatable/uniqueness_spec.rb +632 -830
- data/spec/mongoid/validatable_spec.rb +71 -103
- data/spec/mongoid/warnings_spec.rb +5 -9
- data/spec/mongoid_spec.rb +25 -41
- data/spec/rails/controller_extension/controller_runtime_spec.rb +45 -49
- data/spec/rails/mongoid_spec.rb +15 -15
- data/spec/shared/lib/mrss/cluster_config.rb +5 -40
- data/spec/shared/lib/mrss/constraints.rb +7 -46
- data/spec/shared/lib/mrss/docker_runner.rb +10 -21
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -31
- data/spec/shared/lib/mrss/release/candidate.rb +18 -12
- data/spec/shared/lib/mrss/server_version_registry.rb +1 -5
- data/spec/shared/share/Dockerfile.erb +6 -8
- data/spec/shared/shlib/server.sh +0 -50
- data/spec/shared/shlib/set_env.sh +4 -10
- data/spec/spec_helper.rb +54 -31
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +1 -2
- data/spec/support/constraints.rb +8 -25
- data/spec/support/crypt/models.rb +7 -8
- data/spec/support/crypt.rb +6 -9
- data/spec/support/expectations.rb +21 -7
- data/spec/support/feature_sandbox.rb +1 -4
- data/spec/support/helpers.rb +0 -1
- data/spec/support/immutable_ids.rb +20 -21
- data/spec/support/macros.rb +1 -3
- data/spec/support/models/account.rb +4 -5
- data/spec/support/models/acolyte.rb +5 -5
- data/spec/support/models/actor.rb +3 -3
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +11 -11
- data/spec/support/models/address_component.rb +1 -1
- data/spec/support/models/address_number.rb +1 -1
- data/spec/support/models/agency.rb +1 -1
- data/spec/support/models/agent.rb +1 -1
- data/spec/support/models/album.rb +1 -2
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +4 -5
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +2 -2
- data/spec/support/models/armrest.rb +0 -1
- data/spec/support/models/array_field.rb +0 -1
- data/spec/support/models/article.rb +0 -1
- data/spec/support/models/artist.rb +16 -12
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +0 -1
- data/spec/support/models/audio.rb +2 -2
- data/spec/support/models/augmentation.rb +1 -2
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +0 -1
- data/spec/support/models/bar.rb +2 -2
- data/spec/support/models/basic.rb +0 -1
- data/spec/support/models/bed.rb +0 -1
- data/spec/support/models/big_palette.rb +0 -1
- data/spec/support/models/birthday.rb +3 -5
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +1 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -2
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +2 -2
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +5 -6
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -2
- data/spec/support/models/catalog.rb +0 -1
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +5 -6
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +2 -2
- data/spec/support/models/circus.rb +0 -1
- data/spec/support/models/code.rb +2 -1
- data/spec/support/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +0 -1
- data/spec/support/models/comment.rb +0 -1
- data/spec/support/models/company.rb +0 -1
- data/spec/support/models/consumption_period.rb +0 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -3
- data/spec/support/models/courier_job.rb +2 -2
- data/spec/support/models/cover.rb +0 -1
- data/spec/support/models/crate.rb +0 -1
- data/spec/support/models/customer.rb +0 -1
- data/spec/support/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +2 -2
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +2 -2
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +2 -2
- data/spec/support/models/drug.rb +1 -1
- data/spec/support/models/dungeon.rb +1 -1
- data/spec/support/models/edit.rb +1 -1
- data/spec/support/models/email.rb +1 -1
- data/spec/support/models/employer.rb +1 -2
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +3 -4
- data/spec/support/models/exhibition.rb +1 -1
- data/spec/support/models/exhibitor.rb +1 -1
- data/spec/support/models/explosion.rb +1 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +2 -3
- data/spec/support/models/face.rb +2 -3
- data/spec/support/models/fanatic.rb +1 -1
- data/spec/support/models/favorite.rb +1 -1
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -2
- data/spec/support/models/folder_item.rb +1 -3
- data/spec/support/models/fruits.rb +9 -5
- data/spec/support/models/game.rb +3 -4
- data/spec/support/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +0 -1
- data/spec/support/models/hole.rb +0 -1
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +2 -2
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +3 -3
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +1 -2
- data/spec/support/models/instrument.rb +2 -3
- data/spec/support/models/item.rb +2 -2
- data/spec/support/models/jar.rb +1 -2
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +1 -1
- data/spec/support/models/location.rb +1 -1
- data/spec/support/models/login.rb +1 -2
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +1 -2
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/modifier_models.rb +25 -0
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -2
- data/spec/support/models/name.rb +4 -5
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +3 -3
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +1 -1
- data/spec/support/models/ordered_post.rb +1 -1
- data/spec/support/models/ordered_preference.rb +1 -1
- data/spec/support/models/oscar.rb +1 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +3 -11
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +3 -3
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +2 -2
- data/spec/support/models/parent.rb +2 -2
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +0 -1
- data/spec/support/models/patient.rb +2 -2
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +32 -28
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +1 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +5 -5
- data/spec/support/models/post.rb +12 -12
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +1 -2
- data/spec/support/models/preference.rb +2 -2
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +3 -3
- data/spec/support/models/profile.rb +2 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +2 -2
- data/spec/support/models/publication/encyclopedia.rb +0 -1
- data/spec/support/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +0 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +1 -1
- data/spec/support/models/question.rb +2 -2
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +2 -3
- data/spec/support/models/registry.rb +1 -1
- data/spec/support/models/role.rb +1 -1
- data/spec/support/models/root_category.rb +1 -1
- data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_user.rb +0 -1
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +0 -1
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +1 -1
- data/spec/support/models/series.rb +1 -1
- data/spec/support/models/server.rb +1 -1
- data/spec/support/models/service.rb +2 -2
- data/spec/support/models/shape.rb +3 -3
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +2 -2
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +2 -2
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +1 -1
- data/spec/support/models/simple.rb +1 -1
- data/spec/support/models/slave.rb +1 -1
- data/spec/support/models/song.rb +1 -2
- data/spec/support/models/sound.rb +2 -2
- data/spec/support/models/spacer.rb +0 -1
- data/spec/support/models/square.rb +0 -1
- data/spec/support/models/staff.rb +0 -1
- data/spec/support/models/store_as_dup_test1.rb +2 -2
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +2 -2
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +1 -2
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +2 -2
- data/spec/support/models/survey.rb +2 -2
- data/spec/support/models/symptom.rb +2 -2
- data/spec/support/models/system_role.rb +2 -3
- data/spec/support/models/tag.rb +2 -2
- data/spec/support/models/target.rb +1 -1
- data/spec/support/models/template.rb +1 -1
- data/spec/support/models/thing.rb +1 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +3 -3
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +2 -3
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +3 -4
- data/spec/support/models/user_account.rb +3 -3
- data/spec/support/models/validation_callback.rb +4 -4
- data/spec/support/models/vehicle.rb +2 -3
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +2 -2
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +1 -2
- data/spec/support/models/wiki_page.rb +2 -3
- data/spec/support/models/word.rb +2 -2
- data/spec/support/models/word_origin.rb +1 -2
- data/spec/support/models/writer.rb +3 -3
- data/spec/support/rails_mock.rb +7 -12
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/sinatra_mock.rb +4 -2
- data/spec/support/spec_config.rb +19 -18
- metadata +14 -2
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
5
4
|
|
|
6
5
|
describe Mongoid::Serializable do
|
|
7
|
-
|
|
8
|
-
describe "#field_names" do
|
|
9
|
-
|
|
6
|
+
describe '#field_names' do
|
|
10
7
|
let(:guitar) do
|
|
11
8
|
Guitar.new
|
|
12
9
|
end
|
|
13
10
|
|
|
14
|
-
it
|
|
15
|
-
expect(guitar.send(:field_names, {})).to eq(guitar.fields.except(
|
|
11
|
+
it 'does not duplicate fields' do
|
|
12
|
+
expect(guitar.send(:field_names, {})).to eq(guitar.fields.except('_type').keys.sort)
|
|
16
13
|
end
|
|
17
14
|
|
|
18
|
-
context
|
|
15
|
+
context 'when using a custom discriminator_key' do
|
|
19
16
|
before do
|
|
20
|
-
Instrument.discriminator_key =
|
|
17
|
+
Instrument.discriminator_key = 'dkey'
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
after do
|
|
@@ -28,15 +25,14 @@ describe Mongoid::Serializable do
|
|
|
28
25
|
Guitar.new
|
|
29
26
|
end
|
|
30
27
|
|
|
31
|
-
it
|
|
32
|
-
expect(guitar.send(:field_names, {})).to eq(guitar.fields.except(
|
|
28
|
+
it 'includes _type but does not include the new discriminator key' do
|
|
29
|
+
expect(guitar.send(:field_names, {})).to eq(guitar.fields.except('dkey').keys.sort)
|
|
33
30
|
end
|
|
34
31
|
end
|
|
35
32
|
end
|
|
36
33
|
|
|
37
|
-
%i
|
|
34
|
+
%i[include_root_in_json include_root_in_json?].each do |meth|
|
|
38
35
|
describe ".#{meth}" do
|
|
39
|
-
|
|
40
36
|
before do
|
|
41
37
|
reload_model(:Minim)
|
|
42
38
|
end
|
|
@@ -45,10 +41,10 @@ describe Mongoid::Serializable do
|
|
|
45
41
|
reload_model(:Minim)
|
|
46
42
|
end
|
|
47
43
|
|
|
48
|
-
context
|
|
44
|
+
context 'when global config is set to true' do
|
|
49
45
|
config_override :include_root_in_json, true
|
|
50
46
|
|
|
51
|
-
it
|
|
47
|
+
it 'returns true' do
|
|
52
48
|
expect(Minim.public_send(meth)).to be true
|
|
53
49
|
end
|
|
54
50
|
|
|
@@ -63,10 +59,10 @@ describe Mongoid::Serializable do
|
|
|
63
59
|
end
|
|
64
60
|
end
|
|
65
61
|
|
|
66
|
-
context
|
|
62
|
+
context 'when global config set to false' do
|
|
67
63
|
config_override :include_root_in_json, false
|
|
68
64
|
|
|
69
|
-
it
|
|
65
|
+
it 'returns false' do
|
|
70
66
|
expect(Minim.public_send(meth)).to be false
|
|
71
67
|
end
|
|
72
68
|
|
|
@@ -82,7 +78,7 @@ describe Mongoid::Serializable do
|
|
|
82
78
|
end
|
|
83
79
|
end
|
|
84
80
|
|
|
85
|
-
describe
|
|
81
|
+
describe '#include_root_in_json' do
|
|
86
82
|
config_override :include_root_in_json, false
|
|
87
83
|
|
|
88
84
|
before do
|
|
@@ -97,14 +93,13 @@ describe Mongoid::Serializable do
|
|
|
97
93
|
Minim.new
|
|
98
94
|
end
|
|
99
95
|
|
|
100
|
-
context
|
|
101
|
-
|
|
96
|
+
context 'when global config is set to true' do
|
|
102
97
|
before do
|
|
103
98
|
Minim.include_root_in_json.should be false
|
|
104
99
|
Mongoid.include_root_in_json = true
|
|
105
100
|
end
|
|
106
101
|
|
|
107
|
-
it
|
|
102
|
+
it 'returns true' do
|
|
108
103
|
expect(minim.public_send(meth)).to be true
|
|
109
104
|
end
|
|
110
105
|
|
|
@@ -119,9 +114,8 @@ describe Mongoid::Serializable do
|
|
|
119
114
|
end
|
|
120
115
|
end
|
|
121
116
|
|
|
122
|
-
context
|
|
123
|
-
|
|
124
|
-
it "returns false" do
|
|
117
|
+
context 'when global config set to false' do
|
|
118
|
+
it 'returns false' do
|
|
125
119
|
expect(minim.public_send(meth)).to be false
|
|
126
120
|
end
|
|
127
121
|
|
|
@@ -138,29 +132,26 @@ describe Mongoid::Serializable do
|
|
|
138
132
|
end
|
|
139
133
|
end
|
|
140
134
|
|
|
141
|
-
describe
|
|
142
|
-
|
|
135
|
+
describe '#serializable_hash' do
|
|
143
136
|
let(:person) do
|
|
144
137
|
Person.new
|
|
145
138
|
end
|
|
146
139
|
|
|
147
|
-
context
|
|
148
|
-
|
|
140
|
+
context 'when a dynamic attribute has the same name as a ruby method' do
|
|
149
141
|
before do
|
|
150
|
-
person[:loop] =
|
|
142
|
+
person[:loop] = 'testing'
|
|
151
143
|
end
|
|
152
144
|
|
|
153
145
|
let(:attributes) do
|
|
154
146
|
person.serializable_hash
|
|
155
147
|
end
|
|
156
148
|
|
|
157
|
-
it
|
|
158
|
-
expect(attributes[
|
|
149
|
+
it 'grabs the attribute direct from the hash' do
|
|
150
|
+
expect(attributes['loop']).to eq('testing')
|
|
159
151
|
end
|
|
160
152
|
end
|
|
161
153
|
|
|
162
|
-
context
|
|
163
|
-
|
|
154
|
+
context 'when the method for a declared field is overridden' do
|
|
164
155
|
before do
|
|
165
156
|
person.override_me = 1
|
|
166
157
|
end
|
|
@@ -169,110 +160,101 @@ describe Mongoid::Serializable do
|
|
|
169
160
|
person.serializable_hash
|
|
170
161
|
end
|
|
171
162
|
|
|
172
|
-
it
|
|
173
|
-
expect(attributes[
|
|
163
|
+
it 'uses the overridden method' do
|
|
164
|
+
expect(attributes['override_me']).to eq('1')
|
|
174
165
|
end
|
|
175
166
|
end
|
|
176
167
|
|
|
177
|
-
context
|
|
178
|
-
|
|
168
|
+
context 'when the model has embedded documents' do
|
|
179
169
|
let!(:address) do
|
|
180
|
-
person.addresses.build(street:
|
|
170
|
+
person.addresses.build(street: 'test')
|
|
181
171
|
end
|
|
182
172
|
|
|
183
|
-
context
|
|
184
|
-
|
|
173
|
+
context 'when providing no custom options' do
|
|
185
174
|
let(:attributes) do
|
|
186
175
|
person.serializable_hash
|
|
187
176
|
end
|
|
188
177
|
|
|
189
|
-
it
|
|
190
|
-
expect(attributes[
|
|
178
|
+
it 'includes the embedded documents' do
|
|
179
|
+
expect(attributes['addresses'].first).to eq(address.serializable_hash)
|
|
191
180
|
end
|
|
192
181
|
end
|
|
193
182
|
|
|
194
|
-
context
|
|
195
|
-
|
|
183
|
+
context 'when providing options' do
|
|
196
184
|
let(:attributes) do
|
|
197
185
|
person.serializable_hash(methods: :id, except: :_id)
|
|
198
186
|
end
|
|
199
187
|
|
|
200
188
|
let(:address_attributes) do
|
|
201
|
-
attributes[
|
|
189
|
+
attributes['addresses'].first
|
|
202
190
|
end
|
|
203
191
|
|
|
204
|
-
it
|
|
205
|
-
expect(attributes[
|
|
192
|
+
it 'uses the options' do
|
|
193
|
+
expect(attributes['id']).to eq(person.id)
|
|
206
194
|
end
|
|
207
195
|
|
|
208
|
-
it
|
|
209
|
-
expect(address_attributes[
|
|
196
|
+
it 'uses the options on embedded documents' do
|
|
197
|
+
expect(address_attributes['id']).to eq(address.id)
|
|
210
198
|
end
|
|
211
199
|
end
|
|
212
200
|
|
|
213
|
-
context
|
|
214
|
-
|
|
201
|
+
context 'when nested multiple levels' do
|
|
215
202
|
let!(:location) do
|
|
216
|
-
address.locations.build(name:
|
|
203
|
+
address.locations.build(name: 'home')
|
|
217
204
|
end
|
|
218
205
|
|
|
219
206
|
let(:attributes) do
|
|
220
207
|
person.serializable_hash
|
|
221
208
|
end
|
|
222
209
|
|
|
223
|
-
it
|
|
224
|
-
expect(attributes[
|
|
210
|
+
it 'includes the deeply nested document' do
|
|
211
|
+
expect(attributes['addresses'][0]['locations']).not_to be_empty
|
|
225
212
|
end
|
|
226
213
|
end
|
|
227
214
|
end
|
|
228
215
|
|
|
229
|
-
context
|
|
230
|
-
|
|
216
|
+
context 'when the model has attributes that need conversion' do
|
|
231
217
|
let(:date) do
|
|
232
218
|
Date.new(1970, 1, 1)
|
|
233
219
|
end
|
|
220
|
+
let(:attributes) do
|
|
221
|
+
person.serializable_hash
|
|
222
|
+
end
|
|
234
223
|
|
|
235
224
|
before do
|
|
236
225
|
person.dob = date
|
|
237
226
|
end
|
|
238
227
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
end
|
|
242
|
-
|
|
243
|
-
it "converts the objects to the defined type" do
|
|
244
|
-
expect(attributes["dob"]).to eq(date)
|
|
228
|
+
it 'converts the objects to the defined type' do
|
|
229
|
+
expect(attributes['dob']).to eq(date)
|
|
245
230
|
end
|
|
246
231
|
end
|
|
247
232
|
|
|
248
|
-
context
|
|
249
|
-
|
|
233
|
+
context 'when a model has defined fields' do
|
|
250
234
|
let(:attributes) do
|
|
251
|
-
{
|
|
235
|
+
{ 'title' => 'President', 'security_code' => '1234' }
|
|
236
|
+
end
|
|
237
|
+
let(:field_names) do
|
|
238
|
+
person.fields.keys.map(&:to_s) - [ '_type' ]
|
|
252
239
|
end
|
|
253
240
|
|
|
254
241
|
before do
|
|
255
242
|
person.write_attributes(attributes)
|
|
256
243
|
end
|
|
257
244
|
|
|
258
|
-
|
|
259
|
-
person.fields.keys.map(&:to_s) - ["_type"]
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
it "serializes assigned attributes" do
|
|
245
|
+
it 'serializes assigned attributes' do
|
|
263
246
|
expect(person.serializable_hash).to include attributes
|
|
264
247
|
end
|
|
265
248
|
|
|
266
|
-
it
|
|
249
|
+
it 'includes all defined fields except _type' do
|
|
267
250
|
expect(person.serializable_hash.keys).to include(*field_names)
|
|
268
251
|
end
|
|
269
252
|
|
|
270
|
-
it
|
|
271
|
-
expect(person.serializable_hash.keys).
|
|
253
|
+
it 'does not include _type' do
|
|
254
|
+
expect(person.serializable_hash.keys).not_to include '_type'
|
|
272
255
|
end
|
|
273
256
|
|
|
274
|
-
context
|
|
275
|
-
|
|
257
|
+
context 'when providing options' do
|
|
276
258
|
let(:options) do
|
|
277
259
|
{ only: :name }
|
|
278
260
|
end
|
|
@@ -281,549 +263,530 @@ describe Mongoid::Serializable do
|
|
|
281
263
|
person.serializable_hash(options)
|
|
282
264
|
end
|
|
283
265
|
|
|
284
|
-
it
|
|
266
|
+
it 'does not modify the options in the argument' do
|
|
285
267
|
expect(options[:except]).to be_nil
|
|
286
268
|
end
|
|
287
269
|
end
|
|
288
270
|
|
|
289
|
-
context
|
|
271
|
+
context 'when include_type_for_serialization is true' do
|
|
290
272
|
config_override :include_type_for_serialization, true
|
|
291
273
|
|
|
292
|
-
it
|
|
274
|
+
it 'includes _type field' do
|
|
293
275
|
expect(person.serializable_hash.keys).to include '_type'
|
|
294
276
|
end
|
|
295
277
|
end
|
|
296
278
|
|
|
297
|
-
context
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
{ "title" => attributes["title"] }
|
|
279
|
+
context 'when specifying which fields to only include' do
|
|
280
|
+
it 'only includes the specified fields' do
|
|
281
|
+
expect(person.serializable_hash(only: [ :title ])).to eq(
|
|
282
|
+
{ 'title' => attributes['title'] }
|
|
302
283
|
)
|
|
303
284
|
end
|
|
304
|
-
end
|
|
305
285
|
|
|
306
|
-
|
|
286
|
+
context 'when serializable_hash_with_legacy_only == true' do # default for <= 9
|
|
287
|
+
config_override :serializable_hash_with_legacy_only, true
|
|
288
|
+
|
|
289
|
+
it 'includes all fields when passed an empty array' do
|
|
290
|
+
expect(person.serializable_hash(only: [])).to include attributes
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
context 'when serializable_hash_with_legacy_only == false' do # default for >= 10
|
|
295
|
+
config_override :serializable_hash_with_legacy_only, false
|
|
307
296
|
|
|
308
|
-
|
|
297
|
+
it "doesn't include any fields when passed an empty array" do
|
|
298
|
+
expect(person.serializable_hash(only: [])).to be_empty
|
|
299
|
+
end
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
context 'when specifying extra inclusions' do
|
|
304
|
+
it 'includes the extra fields' do
|
|
309
305
|
expect(person.serializable_hash(
|
|
310
306
|
methods: [ :_type ]
|
|
311
|
-
).has_key?(
|
|
307
|
+
).has_key?('_type')).to be true
|
|
312
308
|
end
|
|
313
309
|
end
|
|
314
310
|
|
|
315
|
-
context
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
"title" => attributes["title"]
|
|
311
|
+
context 'when specifying which fields to exclude' do
|
|
312
|
+
it 'excludes the specified fields' do
|
|
313
|
+
expect(person.serializable_hash(except: [ :title ])).not_to include(
|
|
314
|
+
'title' => attributes['title']
|
|
320
315
|
)
|
|
321
316
|
end
|
|
322
317
|
end
|
|
323
318
|
|
|
324
|
-
context
|
|
319
|
+
context 'when only two attributes are loaded' do
|
|
325
320
|
before do
|
|
326
321
|
person.save!
|
|
327
322
|
end
|
|
328
323
|
|
|
329
324
|
let(:from_db) do
|
|
330
|
-
Person.only(
|
|
325
|
+
Person.only('_id', 'username').first
|
|
331
326
|
end
|
|
332
327
|
|
|
333
328
|
let(:hash) do
|
|
334
329
|
from_db.serializable_hash
|
|
335
330
|
end
|
|
336
331
|
|
|
337
|
-
it
|
|
338
|
-
expect(hash.keys).to eq([
|
|
332
|
+
it 'returns those two attributes only' do
|
|
333
|
+
expect(hash.keys).to eq(%w[_id username])
|
|
339
334
|
end
|
|
340
335
|
end
|
|
341
336
|
end
|
|
342
337
|
|
|
343
|
-
context
|
|
344
|
-
|
|
338
|
+
context 'when a model has dynamic fields' do
|
|
345
339
|
let(:dynamic_field_name) do
|
|
346
|
-
|
|
340
|
+
'dynamic_field_name'
|
|
347
341
|
end
|
|
348
342
|
|
|
349
343
|
let(:dynamic_value) do
|
|
350
|
-
|
|
344
|
+
'dynamic_value'
|
|
351
345
|
end
|
|
352
346
|
|
|
353
347
|
before do
|
|
354
348
|
person.write_attribute(dynamic_field_name, dynamic_value)
|
|
355
349
|
end
|
|
356
350
|
|
|
357
|
-
it
|
|
351
|
+
it 'includes dynamic fields' do
|
|
358
352
|
expect(person.serializable_hash[dynamic_field_name]).to eq(dynamic_value)
|
|
359
353
|
end
|
|
360
354
|
|
|
361
|
-
context
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
expect(person.serializable_hash(only: [dynamic_field_name])).to eq(
|
|
355
|
+
context 'when specifying which dynamic fields to only include' do
|
|
356
|
+
it 'only includes the specified dynamic fields' do
|
|
357
|
+
expect(person.serializable_hash(only: [ dynamic_field_name ])).to eq(
|
|
365
358
|
{ dynamic_field_name => dynamic_value }
|
|
366
359
|
)
|
|
367
360
|
end
|
|
368
361
|
end
|
|
369
362
|
|
|
370
|
-
context
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
expect(person.serializable_hash(except: [dynamic_field_name])).to_not include(
|
|
363
|
+
context 'when specified which dynamic fields to exclude' do
|
|
364
|
+
it 'excludes the specified fields' do
|
|
365
|
+
expect(person.serializable_hash(except: [ dynamic_field_name ])).not_to include(
|
|
374
366
|
dynamic_field_name => dynamic_value
|
|
375
367
|
)
|
|
376
368
|
end
|
|
377
369
|
end
|
|
378
370
|
end
|
|
379
371
|
|
|
380
|
-
context
|
|
381
|
-
|
|
372
|
+
context 'when a model has relations' do
|
|
382
373
|
let(:attributes) do
|
|
383
|
-
{
|
|
374
|
+
{ 'title' => 'President', 'security_code' => '1234' }
|
|
384
375
|
end
|
|
385
376
|
|
|
386
377
|
before do
|
|
387
378
|
person.write_attributes(attributes)
|
|
388
379
|
end
|
|
389
380
|
|
|
390
|
-
context
|
|
391
|
-
|
|
381
|
+
context 'when the model is saved before the relation is added' do
|
|
392
382
|
before do
|
|
393
383
|
person.save!
|
|
394
384
|
end
|
|
395
385
|
|
|
396
|
-
context
|
|
397
|
-
|
|
386
|
+
context 'when a model has an embeds many' do
|
|
398
387
|
let!(:address_one) do
|
|
399
|
-
person.addresses.build(street:
|
|
388
|
+
person.addresses.build(street: 'Kudamm')
|
|
400
389
|
end
|
|
401
390
|
|
|
402
391
|
before do
|
|
403
392
|
person.save!
|
|
404
393
|
end
|
|
405
394
|
|
|
406
|
-
it
|
|
395
|
+
it 'includes the relation' do
|
|
407
396
|
expect(person.serializable_hash.keys).to include('addresses')
|
|
408
397
|
end
|
|
409
398
|
end
|
|
410
399
|
|
|
411
|
-
context
|
|
400
|
+
context 'when a model has an embeds one' do
|
|
412
401
|
let!(:name) do
|
|
413
|
-
person.build_name(first_name:
|
|
402
|
+
person.build_name(first_name: 'Leo', last_name: 'Marvin')
|
|
414
403
|
end
|
|
415
404
|
|
|
416
405
|
before do
|
|
417
406
|
person.save!
|
|
418
407
|
end
|
|
419
408
|
|
|
420
|
-
it
|
|
409
|
+
it 'includes the relation' do
|
|
421
410
|
expect(person.serializable_hash.keys).to include('name')
|
|
422
411
|
end
|
|
423
412
|
end
|
|
424
413
|
end
|
|
425
414
|
|
|
426
|
-
context
|
|
427
|
-
|
|
428
|
-
context "when a model has an embeds many" do
|
|
429
|
-
|
|
415
|
+
context 'when the model is saved after the relation is added' do
|
|
416
|
+
context 'when a model has an embeds many' do
|
|
430
417
|
let!(:address_one) do
|
|
431
|
-
person.addresses.build(street:
|
|
418
|
+
person.addresses.build(street: 'Kudamm')
|
|
432
419
|
end
|
|
433
420
|
|
|
434
421
|
before do
|
|
435
422
|
person.save!
|
|
436
423
|
end
|
|
437
424
|
|
|
438
|
-
it
|
|
425
|
+
it 'includes the relation' do
|
|
439
426
|
expect(person.serializable_hash.keys).to include('addresses')
|
|
440
427
|
end
|
|
441
428
|
end
|
|
442
429
|
|
|
443
|
-
context
|
|
430
|
+
context 'when a model has an embeds one' do
|
|
444
431
|
let!(:name) do
|
|
445
|
-
person.build_name(first_name:
|
|
432
|
+
person.build_name(first_name: 'Leo', last_name: 'Marvin')
|
|
446
433
|
end
|
|
447
434
|
|
|
448
435
|
before do
|
|
449
436
|
person.save!
|
|
450
437
|
end
|
|
451
438
|
|
|
452
|
-
it
|
|
439
|
+
it 'includes the relation' do
|
|
453
440
|
expect(person.serializable_hash.keys).to include('name')
|
|
454
441
|
end
|
|
455
442
|
end
|
|
456
443
|
end
|
|
457
444
|
end
|
|
458
445
|
|
|
459
|
-
context
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
"foo" => person.foo
|
|
446
|
+
context 'when including methods' do
|
|
447
|
+
it 'includes the method result' do
|
|
448
|
+
expect(person.serializable_hash(methods: [ :foo ])).to include(
|
|
449
|
+
'foo' => person.foo
|
|
464
450
|
)
|
|
465
451
|
end
|
|
466
452
|
end
|
|
467
453
|
|
|
468
|
-
context
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
context "when including an embeds many" do
|
|
473
|
-
|
|
454
|
+
context 'when including relations' do
|
|
455
|
+
context 'when including a single relation' do
|
|
456
|
+
context 'when including an embeds many' do
|
|
474
457
|
let!(:address_one) do
|
|
475
|
-
person.addresses.build(street:
|
|
458
|
+
person.addresses.build(street: 'Kudamm')
|
|
476
459
|
end
|
|
477
460
|
|
|
478
461
|
let!(:address_two) do
|
|
479
|
-
person.addresses.build(street:
|
|
462
|
+
person.addresses.build(street: 'Tauentzienstr')
|
|
480
463
|
end
|
|
481
464
|
|
|
482
465
|
let(:relation_hash) do
|
|
483
|
-
hash[
|
|
466
|
+
hash['addresses']
|
|
484
467
|
end
|
|
485
468
|
|
|
486
|
-
context
|
|
487
|
-
|
|
469
|
+
context 'when the ids were not loaded' do
|
|
488
470
|
before do
|
|
489
471
|
person.save!
|
|
490
472
|
end
|
|
491
473
|
|
|
492
474
|
let(:from_db) do
|
|
493
|
-
Person.only(
|
|
475
|
+
Person.only('addresses.street').first
|
|
494
476
|
end
|
|
495
477
|
|
|
496
478
|
let(:hash) do
|
|
497
479
|
from_db.serializable_hash
|
|
498
480
|
end
|
|
499
481
|
|
|
500
|
-
it
|
|
482
|
+
it 'does not generate new ids' do
|
|
501
483
|
pending
|
|
502
|
-
|
|
503
|
-
expect(hash[
|
|
484
|
+
raise
|
|
485
|
+
expect(hash['addresses'].first['_id']).to be_nil
|
|
504
486
|
end
|
|
505
487
|
end
|
|
506
488
|
|
|
507
|
-
context
|
|
508
|
-
|
|
489
|
+
context 'when providing the include as a symbol' do
|
|
509
490
|
let(:hash) do
|
|
510
491
|
person.serializable_hash(include: :addresses)
|
|
511
492
|
end
|
|
512
493
|
|
|
513
|
-
it
|
|
494
|
+
it 'includes the first relation' do
|
|
514
495
|
expect(relation_hash[0]).to include(
|
|
515
|
-
{
|
|
496
|
+
{ '_id' => 'kudamm', 'street' => 'Kudamm' }
|
|
516
497
|
)
|
|
517
498
|
end
|
|
518
499
|
|
|
519
|
-
it
|
|
500
|
+
it 'includes the second relation' do
|
|
520
501
|
expect(relation_hash[1]).to include(
|
|
521
|
-
{
|
|
502
|
+
{ '_id' => 'tauentzienstr', 'street' => 'Tauentzienstr' }
|
|
522
503
|
)
|
|
523
504
|
end
|
|
524
505
|
end
|
|
525
506
|
|
|
526
|
-
context
|
|
527
|
-
|
|
507
|
+
context 'when providing the include as an array' do
|
|
528
508
|
let(:hash) do
|
|
529
509
|
person.serializable_hash(include: [ :addresses ])
|
|
530
510
|
end
|
|
531
511
|
|
|
532
|
-
it
|
|
512
|
+
it 'includes the first relation' do
|
|
533
513
|
expect(relation_hash[0]).to include(
|
|
534
|
-
{
|
|
514
|
+
{ '_id' => 'kudamm', 'street' => 'Kudamm' }
|
|
535
515
|
)
|
|
536
516
|
end
|
|
537
517
|
|
|
538
|
-
it
|
|
518
|
+
it 'includes the second relation' do
|
|
539
519
|
expect(relation_hash[1]).to include(
|
|
540
|
-
{
|
|
520
|
+
{ '_id' => 'tauentzienstr', 'street' => 'Tauentzienstr' }
|
|
541
521
|
)
|
|
542
522
|
end
|
|
543
523
|
end
|
|
544
524
|
|
|
545
|
-
context
|
|
546
|
-
|
|
547
|
-
context "when including one level deep" do
|
|
548
|
-
|
|
525
|
+
context 'when providing the include as a hash' do
|
|
526
|
+
context 'when including one level deep' do
|
|
549
527
|
let(:hash) do
|
|
550
528
|
person.serializable_hash(include: { addresses: { except: :_id } })
|
|
551
529
|
end
|
|
552
530
|
|
|
553
|
-
it
|
|
554
|
-
expect(relation_hash[0]).to include({
|
|
531
|
+
it 'includes the first relation sans exceptions' do
|
|
532
|
+
expect(relation_hash[0]).to include({ 'street' => 'Kudamm' })
|
|
555
533
|
end
|
|
556
534
|
|
|
557
|
-
it
|
|
558
|
-
expect(relation_hash[1]).to include({
|
|
535
|
+
it 'includes the second relation sans exceptions' do
|
|
536
|
+
expect(relation_hash[1]).to include({ 'street' => 'Tauentzienstr' })
|
|
559
537
|
end
|
|
560
538
|
end
|
|
561
539
|
|
|
562
|
-
context
|
|
563
|
-
|
|
540
|
+
context 'when including multiple levels deep' do
|
|
564
541
|
let!(:location) do
|
|
565
|
-
address_one.locations.build(name:
|
|
542
|
+
address_one.locations.build(name: 'Home')
|
|
566
543
|
end
|
|
567
544
|
|
|
568
545
|
let(:hash) do
|
|
569
546
|
person.serializable_hash(
|
|
570
547
|
include: { addresses: {
|
|
571
548
|
except: :_id, include: { locations: { except: :_id } }
|
|
572
|
-
}
|
|
573
|
-
|
|
549
|
+
} }
|
|
550
|
+
)
|
|
574
551
|
end
|
|
575
552
|
|
|
576
|
-
it
|
|
577
|
-
expect(relation_hash[0][
|
|
578
|
-
location[
|
|
553
|
+
it 'includes the first relation' do
|
|
554
|
+
expect(relation_hash[0]['locations'].any? do |location|
|
|
555
|
+
location['name'] == 'Home'
|
|
579
556
|
end).to be true
|
|
580
557
|
end
|
|
581
558
|
|
|
582
|
-
context
|
|
583
|
-
|
|
559
|
+
context 'after retrieved from database' do
|
|
584
560
|
let(:db_person) do
|
|
585
561
|
Person.all.last
|
|
586
562
|
end
|
|
587
563
|
|
|
588
564
|
let!(:second_location) do
|
|
589
|
-
address_two.locations.build(name:
|
|
565
|
+
address_two.locations.build(name: 'Hotel')
|
|
590
566
|
end
|
|
591
567
|
|
|
592
568
|
let(:hash) do
|
|
593
569
|
db_person.serializable_hash(
|
|
594
570
|
include: { addresses: {
|
|
595
571
|
except: :_id, include: { locations: { except: :_id } }
|
|
596
|
-
}
|
|
597
|
-
|
|
572
|
+
} }
|
|
573
|
+
)
|
|
598
574
|
end
|
|
599
575
|
|
|
600
576
|
before do
|
|
601
577
|
person.save!
|
|
602
578
|
end
|
|
603
579
|
|
|
604
|
-
it
|
|
605
|
-
expect(relation_hash[0][
|
|
606
|
-
location[
|
|
607
|
-
end).to include
|
|
608
|
-
expect(relation_hash[1][
|
|
609
|
-
location[
|
|
610
|
-
end).to include
|
|
580
|
+
it 'includes the specific relations' do
|
|
581
|
+
expect(relation_hash[0]['locations'].map do |location|
|
|
582
|
+
location['name']
|
|
583
|
+
end).to include 'Home'
|
|
584
|
+
expect(relation_hash[1]['locations'].map do |location|
|
|
585
|
+
location['name']
|
|
586
|
+
end).to include 'Hotel'
|
|
611
587
|
end
|
|
612
588
|
end
|
|
613
589
|
end
|
|
614
590
|
|
|
615
|
-
context
|
|
616
|
-
|
|
591
|
+
context 'when defining a default exclusion' do
|
|
617
592
|
let!(:name) do
|
|
618
|
-
person.build_name(first_name:
|
|
593
|
+
person.build_name(first_name: 'Sebastien')
|
|
619
594
|
end
|
|
620
595
|
|
|
621
596
|
let(:hash) do
|
|
622
597
|
person.serializable_hash(
|
|
623
598
|
except: :_id,
|
|
624
|
-
include: [
|
|
599
|
+
include: %i[addresses name]
|
|
625
600
|
)
|
|
626
601
|
end
|
|
627
602
|
|
|
628
|
-
it
|
|
629
|
-
expect(hash[
|
|
603
|
+
it 'does not contain the root exclusion' do
|
|
604
|
+
expect(hash['_id']).to be_nil
|
|
630
605
|
end
|
|
631
606
|
|
|
632
|
-
it
|
|
633
|
-
expect(relation_hash[0][
|
|
607
|
+
it 'does not include the embedded many exclusion' do
|
|
608
|
+
expect(relation_hash[0]['_id']).to be_nil
|
|
634
609
|
end
|
|
635
610
|
|
|
636
|
-
it
|
|
637
|
-
expect(hash[
|
|
611
|
+
it 'does not include the embedded one exclusion' do
|
|
612
|
+
expect(hash['name']['_id']).to be_nil
|
|
638
613
|
end
|
|
639
614
|
end
|
|
640
615
|
end
|
|
641
616
|
end
|
|
642
617
|
|
|
643
|
-
context
|
|
644
|
-
|
|
618
|
+
context 'when including an embeds one' do
|
|
645
619
|
let!(:name) do
|
|
646
|
-
person.build_name(first_name:
|
|
620
|
+
person.build_name(first_name: 'Leo', last_name: 'Marvin')
|
|
647
621
|
end
|
|
648
622
|
|
|
649
623
|
let(:relation_hash) do
|
|
650
|
-
hash[
|
|
624
|
+
hash['name']
|
|
651
625
|
end
|
|
652
626
|
|
|
653
|
-
context
|
|
654
|
-
|
|
627
|
+
context 'when providing the include as a symbol' do
|
|
655
628
|
let(:hash) do
|
|
656
629
|
person.serializable_hash(include: :name)
|
|
657
630
|
end
|
|
658
631
|
|
|
659
|
-
it
|
|
632
|
+
it 'includes the specified relation' do
|
|
660
633
|
expect(relation_hash).to include(
|
|
661
|
-
{
|
|
634
|
+
{ '_id' => 'Leo-Marvin', 'first_name' => 'Leo', 'last_name' => 'Marvin' }
|
|
662
635
|
)
|
|
663
636
|
end
|
|
664
637
|
end
|
|
665
638
|
|
|
666
|
-
context
|
|
667
|
-
|
|
639
|
+
context 'when providing the include as an array' do
|
|
668
640
|
let(:hash) do
|
|
669
641
|
person.serializable_hash(include: [ :name ])
|
|
670
642
|
end
|
|
671
643
|
|
|
672
|
-
it
|
|
644
|
+
it 'includes the specified relation' do
|
|
673
645
|
expect(relation_hash).to include(
|
|
674
|
-
{
|
|
646
|
+
{ '_id' => 'Leo-Marvin', 'first_name' => 'Leo', 'last_name' => 'Marvin' }
|
|
675
647
|
)
|
|
676
648
|
end
|
|
677
649
|
end
|
|
678
650
|
|
|
679
|
-
context
|
|
680
|
-
|
|
651
|
+
context 'when providing the include as a hash' do
|
|
681
652
|
let(:hash) do
|
|
682
|
-
person.serializable_hash(include: { name: { except: :_id }})
|
|
653
|
+
person.serializable_hash(include: { name: { except: :_id } })
|
|
683
654
|
end
|
|
684
655
|
|
|
685
|
-
it
|
|
656
|
+
it 'includes the specified relation sans exceptions' do
|
|
686
657
|
expect(relation_hash).to include(
|
|
687
|
-
{
|
|
658
|
+
{ 'first_name' => 'Leo', 'last_name' => 'Marvin' }
|
|
688
659
|
)
|
|
689
660
|
end
|
|
690
661
|
end
|
|
691
662
|
end
|
|
692
663
|
|
|
693
|
-
context
|
|
694
|
-
|
|
664
|
+
context 'when including a references many' do
|
|
695
665
|
let!(:post_one) do
|
|
696
|
-
person.posts.build(title:
|
|
666
|
+
person.posts.build(title: 'First')
|
|
697
667
|
end
|
|
698
668
|
|
|
699
669
|
let!(:post_two) do
|
|
700
|
-
person.posts.build(title:
|
|
670
|
+
person.posts.build(title: 'Second')
|
|
701
671
|
end
|
|
702
672
|
|
|
703
673
|
let(:relation_hash) do
|
|
704
|
-
hash[
|
|
674
|
+
hash['posts']
|
|
705
675
|
end
|
|
706
676
|
|
|
707
|
-
context
|
|
708
|
-
|
|
677
|
+
context 'when providing the include as a symbol' do
|
|
709
678
|
let(:hash) do
|
|
710
679
|
person.serializable_hash(include: :posts)
|
|
711
680
|
end
|
|
712
681
|
|
|
713
|
-
it
|
|
714
|
-
expect(relation_hash).
|
|
682
|
+
it 'includes the specified relation' do
|
|
683
|
+
expect(relation_hash).not_to be_nil
|
|
715
684
|
end
|
|
716
685
|
|
|
717
|
-
it
|
|
718
|
-
expect(relation_hash[0][
|
|
686
|
+
it 'includes the first document related fields' do
|
|
687
|
+
expect(relation_hash[0]['title']).to eq('First')
|
|
719
688
|
end
|
|
720
689
|
|
|
721
|
-
it
|
|
722
|
-
expect(relation_hash[1][
|
|
690
|
+
it 'includes the second document related fields' do
|
|
691
|
+
expect(relation_hash[1]['title']).to eq('Second')
|
|
723
692
|
end
|
|
724
693
|
end
|
|
725
694
|
|
|
726
|
-
context
|
|
727
|
-
|
|
695
|
+
context 'when providing the include as an array' do
|
|
728
696
|
let(:hash) do
|
|
729
697
|
person.serializable_hash(include: [ :posts ])
|
|
730
698
|
end
|
|
731
699
|
|
|
732
|
-
it
|
|
733
|
-
expect(relation_hash).
|
|
700
|
+
it 'includes the specified relation' do
|
|
701
|
+
expect(relation_hash).not_to be_nil
|
|
734
702
|
end
|
|
735
703
|
|
|
736
|
-
it
|
|
737
|
-
expect(relation_hash[0][
|
|
704
|
+
it 'includes the first document related fields' do
|
|
705
|
+
expect(relation_hash[0]['title']).to eq('First')
|
|
738
706
|
end
|
|
739
707
|
|
|
740
|
-
it
|
|
741
|
-
expect(relation_hash[1][
|
|
708
|
+
it 'includes the second document related fields' do
|
|
709
|
+
expect(relation_hash[1]['title']).to eq('Second')
|
|
742
710
|
end
|
|
743
711
|
end
|
|
744
712
|
|
|
745
|
-
context
|
|
746
|
-
|
|
713
|
+
context 'when providing the include as a hash' do
|
|
747
714
|
let(:hash) do
|
|
748
715
|
person.serializable_hash(include: { posts: { except: :_id } })
|
|
749
716
|
end
|
|
750
717
|
|
|
751
|
-
it
|
|
752
|
-
expect(relation_hash).
|
|
718
|
+
it 'includes the specified relation' do
|
|
719
|
+
expect(relation_hash).not_to be_nil
|
|
753
720
|
end
|
|
754
721
|
|
|
755
|
-
it
|
|
756
|
-
expect(relation_hash[0][
|
|
722
|
+
it 'includes the first document related fields' do
|
|
723
|
+
expect(relation_hash[0]['title']).to eq('First')
|
|
757
724
|
end
|
|
758
725
|
|
|
759
|
-
it
|
|
760
|
-
expect(relation_hash[1][
|
|
726
|
+
it 'includes the second document related fields' do
|
|
727
|
+
expect(relation_hash[1]['title']).to eq('Second')
|
|
761
728
|
end
|
|
762
729
|
|
|
763
|
-
it
|
|
764
|
-
expect(relation_hash[0][
|
|
730
|
+
it 'does not include the first document exceptions' do
|
|
731
|
+
expect(relation_hash[0]['_id']).to be_nil
|
|
765
732
|
end
|
|
766
733
|
|
|
767
|
-
it
|
|
768
|
-
expect(relation_hash[1][
|
|
734
|
+
it 'does not include the second document exceptions' do
|
|
735
|
+
expect(relation_hash[1]['_id']).to be_nil
|
|
769
736
|
end
|
|
770
737
|
end
|
|
771
738
|
end
|
|
772
739
|
|
|
773
|
-
context
|
|
774
|
-
|
|
740
|
+
context 'when including a references many to many' do
|
|
775
741
|
let!(:preference_one) do
|
|
776
|
-
person.preferences.build(name:
|
|
742
|
+
person.preferences.build(name: 'First')
|
|
777
743
|
end
|
|
778
744
|
|
|
779
745
|
let!(:preference_two) do
|
|
780
|
-
person.preferences.build(name:
|
|
746
|
+
person.preferences.build(name: 'Second')
|
|
781
747
|
end
|
|
782
748
|
|
|
783
749
|
let(:relation_hash) do
|
|
784
|
-
hash[
|
|
750
|
+
hash['preferences']
|
|
785
751
|
end
|
|
786
752
|
|
|
787
|
-
context
|
|
788
|
-
|
|
753
|
+
context 'when providing the include as a symbol' do
|
|
789
754
|
let(:hash) do
|
|
790
755
|
person.serializable_hash(include: :preferences)
|
|
791
756
|
end
|
|
792
757
|
|
|
793
|
-
it
|
|
794
|
-
expect(relation_hash).
|
|
758
|
+
it 'includes the specified relation' do
|
|
759
|
+
expect(relation_hash).not_to be_nil
|
|
795
760
|
end
|
|
796
761
|
|
|
797
|
-
it
|
|
798
|
-
expect(relation_hash[0][
|
|
762
|
+
it 'includes the first document related fields' do
|
|
763
|
+
expect(relation_hash[0]['name']).to eq('First')
|
|
799
764
|
end
|
|
800
765
|
|
|
801
|
-
it
|
|
802
|
-
expect(relation_hash[1][
|
|
766
|
+
it 'includes the second document related fields' do
|
|
767
|
+
expect(relation_hash[1]['name']).to eq('Second')
|
|
803
768
|
end
|
|
804
769
|
end
|
|
805
770
|
|
|
806
|
-
context
|
|
807
|
-
|
|
771
|
+
context 'when providing the include as an array' do
|
|
808
772
|
let(:hash) do
|
|
809
773
|
person.serializable_hash(include: [ :preferences ])
|
|
810
774
|
end
|
|
811
775
|
|
|
812
|
-
it
|
|
813
|
-
expect(relation_hash).
|
|
776
|
+
it 'includes the specified relation' do
|
|
777
|
+
expect(relation_hash).not_to be_nil
|
|
814
778
|
end
|
|
815
779
|
|
|
816
|
-
it
|
|
817
|
-
expect(relation_hash[0][
|
|
780
|
+
it 'includes the first document related fields' do
|
|
781
|
+
expect(relation_hash[0]['name']).to eq('First')
|
|
818
782
|
end
|
|
819
783
|
|
|
820
|
-
it
|
|
821
|
-
expect(relation_hash[1][
|
|
784
|
+
it 'includes the second document related fields' do
|
|
785
|
+
expect(relation_hash[1]['name']).to eq('Second')
|
|
822
786
|
end
|
|
823
787
|
end
|
|
824
788
|
|
|
825
|
-
context
|
|
826
|
-
|
|
789
|
+
context 'when providing the include as a hash' do
|
|
827
790
|
let(:hash) do
|
|
828
791
|
person.serializable_hash(
|
|
829
792
|
include: {
|
|
@@ -835,28 +798,28 @@ describe Mongoid::Serializable do
|
|
|
835
798
|
)
|
|
836
799
|
end
|
|
837
800
|
|
|
838
|
-
it
|
|
839
|
-
expect(relation_hash).
|
|
801
|
+
it 'includes the specified relation' do
|
|
802
|
+
expect(relation_hash).not_to be_nil
|
|
840
803
|
end
|
|
841
804
|
|
|
842
|
-
it
|
|
843
|
-
expect(relation_hash[0][
|
|
805
|
+
it 'includes the first document related fields' do
|
|
806
|
+
expect(relation_hash[0]['name']).to eq('First')
|
|
844
807
|
end
|
|
845
808
|
|
|
846
|
-
it
|
|
847
|
-
expect(relation_hash[1][
|
|
809
|
+
it 'includes the second document related fields' do
|
|
810
|
+
expect(relation_hash[1]['name']).to eq('Second')
|
|
848
811
|
end
|
|
849
812
|
|
|
850
|
-
it
|
|
851
|
-
expect(relation_hash[0][
|
|
813
|
+
it 'does not include the first document exceptions' do
|
|
814
|
+
expect(relation_hash[0]['_id']).to be_nil
|
|
852
815
|
end
|
|
853
816
|
|
|
854
|
-
it
|
|
855
|
-
expect(relation_hash[1][
|
|
817
|
+
it 'does not include the second document exceptions' do
|
|
818
|
+
expect(relation_hash[1]['_id']).to be_nil
|
|
856
819
|
end
|
|
857
820
|
|
|
858
|
-
it
|
|
859
|
-
expect(hash[
|
|
821
|
+
it 'does not include the root exceptions' do
|
|
822
|
+
expect(hash['preference_ids']).to be_nil
|
|
860
823
|
end
|
|
861
824
|
end
|
|
862
825
|
end
|
|
@@ -864,13 +827,16 @@ describe Mongoid::Serializable do
|
|
|
864
827
|
end
|
|
865
828
|
end
|
|
866
829
|
|
|
867
|
-
describe
|
|
868
|
-
|
|
830
|
+
describe '#to_json' do
|
|
869
831
|
let(:account) do
|
|
870
832
|
Account.new
|
|
871
833
|
end
|
|
872
834
|
|
|
873
|
-
|
|
835
|
+
let(:person) do
|
|
836
|
+
Person.new
|
|
837
|
+
end
|
|
838
|
+
|
|
839
|
+
context 'when including root in json via Mongoid' do
|
|
874
840
|
config_override :include_root_in_json, false
|
|
875
841
|
|
|
876
842
|
before do
|
|
@@ -878,13 +844,12 @@ describe Mongoid::Serializable do
|
|
|
878
844
|
Mongoid.include_root_in_json = true
|
|
879
845
|
end
|
|
880
846
|
|
|
881
|
-
it
|
|
882
|
-
expect(JSON.parse(account.to_json)).to have_key(
|
|
847
|
+
it 'uses the mongoid configuration' do
|
|
848
|
+
expect(JSON.parse(account.to_json)).to have_key('account')
|
|
883
849
|
end
|
|
884
850
|
end
|
|
885
851
|
|
|
886
|
-
context
|
|
887
|
-
|
|
852
|
+
context 'when including root in json via class' do
|
|
888
853
|
before do
|
|
889
854
|
account.include_root_in_json.should be false
|
|
890
855
|
Account.include_root_in_json = true
|
|
@@ -894,54 +859,46 @@ describe Mongoid::Serializable do
|
|
|
894
859
|
Account.include_root_in_json = false
|
|
895
860
|
end
|
|
896
861
|
|
|
897
|
-
it
|
|
898
|
-
expect(JSON.parse(account.to_json)).to have_key(
|
|
862
|
+
it 'uses the class configuration' do
|
|
863
|
+
expect(JSON.parse(account.to_json)).to have_key('account')
|
|
899
864
|
end
|
|
900
865
|
end
|
|
901
866
|
|
|
902
|
-
context
|
|
903
|
-
|
|
867
|
+
context 'when not including root in json' do
|
|
904
868
|
before do
|
|
905
869
|
account.include_root_in_json.should be false
|
|
906
870
|
end
|
|
907
871
|
|
|
908
|
-
it
|
|
909
|
-
expect(JSON.parse(account.to_json)).not_to have_key(
|
|
872
|
+
it 'uses the mongoid configuration' do
|
|
873
|
+
expect(JSON.parse(account.to_json)).not_to have_key('account')
|
|
910
874
|
end
|
|
911
875
|
end
|
|
912
876
|
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
end
|
|
916
|
-
|
|
917
|
-
context "when serializing a relation directly" do
|
|
918
|
-
|
|
919
|
-
context "when serializing an embeds many" do
|
|
920
|
-
|
|
877
|
+
context 'when serializing a relation directly' do
|
|
878
|
+
context 'when serializing an embeds many' do
|
|
921
879
|
let!(:address) do
|
|
922
|
-
person.addresses.build(street:
|
|
880
|
+
person.addresses.build(street: 'Kudamm')
|
|
923
881
|
end
|
|
924
882
|
|
|
925
883
|
let(:json) do
|
|
926
884
|
person.addresses.to_json
|
|
927
885
|
end
|
|
928
886
|
|
|
929
|
-
it
|
|
887
|
+
it 'serializes only the relation' do
|
|
930
888
|
expect(json).to include(address.street)
|
|
931
889
|
end
|
|
932
890
|
end
|
|
933
891
|
|
|
934
|
-
context
|
|
935
|
-
|
|
892
|
+
context 'when serializing a references many' do
|
|
936
893
|
let!(:post) do
|
|
937
|
-
person.posts.build(title:
|
|
894
|
+
person.posts.build(title: 'testing')
|
|
938
895
|
end
|
|
939
896
|
|
|
940
897
|
let(:json) do
|
|
941
898
|
person.posts.to_json
|
|
942
899
|
end
|
|
943
900
|
|
|
944
|
-
it
|
|
901
|
+
it 'serializes only the relation' do
|
|
945
902
|
expect(json).to include(post.title)
|
|
946
903
|
end
|
|
947
904
|
end
|