mongoid 7.1.1 → 8.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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +20 -20
- data/README.md +15 -8
- data/Rakefile +61 -5
- data/lib/config/locales/en.yml +162 -56
- data/lib/mongoid/association/accessors.rb +89 -40
- data/lib/mongoid/association/bindable.rb +50 -23
- data/lib/mongoid/association/builders.rb +5 -12
- data/lib/mongoid/association/constrainable.rb +1 -5
- data/lib/mongoid/association/depending.rb +5 -17
- data/lib/mongoid/association/eager_loadable.rb +29 -10
- data/lib/mongoid/association/embedded/batchable.rb +64 -52
- data/lib/mongoid/association/embedded/cyclic.rb +3 -12
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -5
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -16
- data/lib/mongoid/association/embedded/embedded_in.rb +4 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -7
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +110 -92
- data/lib/mongoid/association/embedded/embeds_many.rb +4 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -8
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +50 -19
- data/lib/mongoid/association/embedded/embeds_one.rb +5 -31
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +27 -5
- data/lib/mongoid/association/many.rb +14 -27
- data/lib/mongoid/association/marshalable.rb +0 -5
- data/lib/mongoid/association/nested/many.rb +6 -16
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -13
- data/lib/mongoid/association/nested/one.rb +48 -23
- data/lib/mongoid/association/nested.rb +0 -3
- data/lib/mongoid/association/one.rb +2 -11
- data/lib/mongoid/association/options.rb +9 -42
- data/lib/mongoid/association/proxy.rb +22 -27
- data/lib/mongoid/association/referenced/auto_save.rb +6 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -8
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -19
- data/lib/mongoid/association/referenced/belongs_to.rb +11 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +12 -25
- data/lib/mongoid/association/referenced/eager.rb +5 -26
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +81 -51
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +17 -41
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +438 -461
- data/lib/mongoid/association/referenced/has_many/proxy.rb +58 -84
- data/lib/mongoid/association/referenced/has_many.rb +15 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +12 -5
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +7 -22
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -16
- data/lib/mongoid/association/referenced/has_one.rb +12 -35
- data/lib/mongoid/association/referenced/syncable.rb +4 -21
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +4 -5
- data/lib/mongoid/association/relatable.rb +46 -71
- data/lib/mongoid/association.rb +5 -22
- data/lib/mongoid/atomic/modifiers.rb +7 -54
- data/lib/mongoid/atomic/paths/embedded/many.rb +19 -5
- data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
- data/lib/mongoid/atomic/paths/embedded.rb +0 -3
- data/lib/mongoid/atomic/paths/root.rb +0 -5
- data/lib/mongoid/atomic/paths.rb +0 -1
- data/lib/mongoid/atomic.rb +40 -47
- data/lib/mongoid/attributes/dynamic.rb +5 -22
- data/lib/mongoid/attributes/nested.rb +6 -11
- data/lib/mongoid/attributes/processing.rb +11 -21
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -8
- data/lib/mongoid/attributes.rb +82 -88
- data/lib/mongoid/cacheable.rb +4 -9
- data/lib/mongoid/changeable.rb +148 -69
- data/lib/mongoid/clients/factory.rb +41 -17
- data/lib/mongoid/clients/options.rb +13 -14
- data/lib/mongoid/clients/sessions.rb +8 -11
- data/lib/mongoid/clients/storage_options.rb +7 -17
- data/lib/mongoid/clients/validators/storage.rb +3 -24
- data/lib/mongoid/clients/validators.rb +0 -1
- data/lib/mongoid/clients.rb +1 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +3 -7
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +28 -5
- data/lib/mongoid/config/options.rb +0 -11
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -23
- data/lib/mongoid/config/validators/option.rb +0 -3
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config.rb +183 -39
- data/lib/mongoid/contextual/aggregable/memory.rb +37 -26
- data/lib/mongoid/contextual/aggregable/mongo.rb +29 -32
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +7 -27
- data/lib/mongoid/contextual/command.rb +0 -5
- data/lib/mongoid/contextual/geo_near.rb +8 -41
- data/lib/mongoid/contextual/map_reduce.rb +2 -33
- data/lib/mongoid/contextual/memory.rb +383 -79
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +636 -283
- data/lib/mongoid/contextual/none.rb +262 -31
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +14 -7
- data/lib/mongoid/copyable.rb +39 -16
- data/lib/mongoid/criteria/findable.rb +9 -19
- data/lib/mongoid/criteria/includable.rb +27 -31
- data/lib/mongoid/criteria/inspectable.rb +0 -3
- data/lib/mongoid/criteria/marshalable.rb +10 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -20
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +1 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -25
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -40
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -7
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -6
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -40
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -20
- data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +46 -16
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -18
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -31
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +16 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -5
- data/lib/mongoid/criteria/queryable/key.rb +6 -19
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +123 -38
- data/lib/mongoid/criteria/queryable/optional.rb +11 -62
- data/lib/mongoid/criteria/queryable/options.rb +2 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -14
- data/lib/mongoid/criteria/queryable/selectable.rb +138 -125
- data/lib/mongoid/criteria/queryable/selector.rb +94 -30
- data/lib/mongoid/criteria/queryable/smash.rb +40 -18
- data/lib/mongoid/criteria/queryable/storable.rb +14 -10
- data/lib/mongoid/criteria/queryable.rb +11 -13
- data/lib/mongoid/criteria/scopable.rb +27 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +88 -108
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +149 -99
- data/lib/mongoid/equality.rb +32 -16
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/callback.rb +0 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
- data/lib/mongoid/errors/delete_restriction.rb +8 -12
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
- data/lib/mongoid/errors/document_not_found.rb +33 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +0 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +0 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +0 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_includes.rb +0 -3
- data/lib/mongoid/errors/invalid_index.rb +0 -3
- data/lib/mongoid/errors/invalid_options.rb +0 -3
- data/lib/mongoid/errors/invalid_path.rb +0 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -8
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -4
- data/lib/mongoid/errors/invalid_scope.rb +0 -3
- data/lib/mongoid/errors/invalid_session_use.rb +1 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +0 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
- data/lib/mongoid/errors/mixed_relations.rb +0 -3
- data/lib/mongoid/errors/mongoid_error.rb +4 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +2 -5
- 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 +0 -3
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +0 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
- data/lib/mongoid/errors/no_metadata.rb +0 -3
- data/lib/mongoid/errors/no_parent.rb +0 -3
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -6
- data/lib/mongoid/errors/scope_overwrite.rb +0 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -2
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +0 -3
- data/lib/mongoid/errors/unsaved_document.rb +1 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
- data/lib/mongoid/errors/validations.rb +0 -1
- data/lib/mongoid/errors.rb +15 -4
- data/lib/mongoid/evolvable.rb +1 -4
- data/lib/mongoid/extensions/array.rb +12 -36
- data/lib/mongoid/extensions/big_decimal.rb +33 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -6
- data/lib/mongoid/extensions/date.rb +26 -29
- data/lib/mongoid/extensions/date_time.rb +1 -10
- data/lib/mongoid/extensions/decimal128.rb +0 -5
- data/lib/mongoid/extensions/false_class.rb +3 -8
- data/lib/mongoid/extensions/float.rb +7 -11
- data/lib/mongoid/extensions/hash.rb +19 -37
- data/lib/mongoid/extensions/integer.rb +7 -13
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -5
- data/lib/mongoid/extensions/object.rb +11 -48
- data/lib/mongoid/extensions/object_id.rb +0 -7
- data/lib/mongoid/extensions/range.rb +40 -20
- data/lib/mongoid/extensions/regexp.rb +12 -8
- data/lib/mongoid/extensions/set.rb +11 -11
- data/lib/mongoid/extensions/string.rb +12 -52
- data/lib/mongoid/extensions/symbol.rb +4 -22
- data/lib/mongoid/extensions/time.rb +28 -26
- data/lib/mongoid/extensions/time_with_zone.rb +14 -11
- data/lib/mongoid/extensions/true_class.rb +3 -8
- data/lib/mongoid/extensions.rb +17 -3
- data/lib/mongoid/factory.rb +80 -16
- data/lib/mongoid/fields/foreign_key.rb +11 -25
- data/lib/mongoid/fields/localized.rb +19 -15
- data/lib/mongoid/fields/standard.rb +17 -40
- data/lib/mongoid/fields/validators/macro.rb +25 -24
- data/lib/mongoid/fields/validators.rb +0 -1
- data/lib/mongoid/fields.rb +346 -75
- data/lib/mongoid/findable.rb +107 -31
- data/lib/mongoid/indexable/specification.rb +2 -17
- data/lib/mongoid/indexable/validators/options.rb +6 -9
- data/lib/mongoid/indexable.rb +3 -20
- data/lib/mongoid/inspectable.rb +2 -11
- data/lib/mongoid/interceptable.rb +79 -41
- data/lib/mongoid/loggable.rb +0 -9
- data/lib/mongoid/matchable.rb +2 -155
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +130 -0
- data/lib/mongoid/persistable/creatable.rb +20 -29
- data/lib/mongoid/persistable/deletable.rb +4 -22
- data/lib/mongoid/persistable/destroyable.rb +9 -10
- data/lib/mongoid/persistable/incrementable.rb +0 -5
- data/lib/mongoid/persistable/logical.rb +0 -5
- data/lib/mongoid/persistable/poppable.rb +0 -5
- data/lib/mongoid/persistable/pullable.rb +0 -7
- data/lib/mongoid/persistable/pushable.rb +4 -8
- data/lib/mongoid/persistable/renamable.rb +0 -5
- data/lib/mongoid/persistable/savable.rb +13 -8
- data/lib/mongoid/persistable/settable.rb +0 -5
- data/lib/mongoid/persistable/unsettable.rb +2 -7
- data/lib/mongoid/persistable/updatable.rb +96 -29
- data/lib/mongoid/persistable/upsertable.rb +20 -8
- data/lib/mongoid/persistable.rb +6 -26
- data/lib/mongoid/persistence_context.rb +71 -43
- data/lib/mongoid/positional.rb +0 -5
- data/lib/mongoid/query_cache.rb +16 -236
- data/lib/mongoid/railtie.rb +0 -15
- data/lib/mongoid/railties/controller_runtime.rb +1 -2
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +17 -20
- data/lib/mongoid/scopable.rb +32 -56
- data/lib/mongoid/selectable.rb +5 -17
- data/lib/mongoid/serializable.rb +11 -22
- data/lib/mongoid/shardable.rb +49 -16
- data/lib/mongoid/stateful.rb +57 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +59 -11
- data/lib/mongoid/threaded/lifecycle.rb +5 -26
- data/lib/mongoid/threaded.rb +42 -67
- data/lib/mongoid/timestamps/created/short.rb +0 -1
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +0 -7
- data/lib/mongoid/timestamps/updated/short.rb +0 -1
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +0 -1
- data/lib/mongoid/touchable.rb +34 -13
- data/lib/mongoid/traversable.rb +181 -59
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +1 -4
- data/lib/mongoid/validatable/format.rb +0 -1
- data/lib/mongoid/validatable/length.rb +0 -1
- data/lib/mongoid/validatable/localizable.rb +1 -4
- data/lib/mongoid/validatable/macros.rb +5 -14
- data/lib/mongoid/validatable/presence.rb +6 -13
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -40
- data/lib/mongoid/validatable.rb +9 -27
- data/lib/mongoid/version.rb +1 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +42 -18
- data/lib/rails/generators/mongoid/config/config_generator.rb +8 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -6
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +0 -1
- data/lib/rails/mongoid.rb +0 -3
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +16 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +18 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +163 -1
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +0 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +192 -0
- data/spec/integration/callbacks_spec.rb +584 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +51 -0
- data/spec/integration/criteria/logical_spec.rb +43 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -19
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -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 +41 -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 +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +20 -5
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +25 -9
- data/spec/mongoid/association/accessors_spec.rb +282 -78
- data/spec/mongoid/association/auto_save_spec.rb +72 -34
- data/spec/mongoid/association/builders_spec.rb +1 -2
- data/spec/mongoid/association/constrainable_spec.rb +0 -1
- data/spec/mongoid/association/counter_cache_spec.rb +33 -34
- data/spec/mongoid/association/depending_spec.rb +429 -339
- data/spec/mongoid/association/eager_spec.rb +6 -6
- data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -2
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +150 -14
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +704 -198
- data/spec/mongoid/association/embedded/embeds_many_models.rb +194 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -1
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +78 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +36 -24
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +20 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -3
- data/spec/mongoid/association/macros_spec.rb +9 -10
- data/spec/mongoid/association/nested/many_spec.rb +0 -1
- data/spec/mongoid/association/nested/one_spec.rb +16 -13
- data/spec/mongoid/association/options_spec.rb +0 -1
- data/spec/mongoid/association/polymorphic_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +109 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +112 -59
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +20 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +26 -22
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +523 -372
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +56 -3
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +130 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +413 -130
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +857 -503
- data/spec/mongoid/association/referenced/has_many_models.rb +59 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +46 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -10
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +133 -28
- data/spec/mongoid/association/referenced/has_one_models.rb +63 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +22 -2
- data/spec/mongoid/association/reflections_spec.rb +0 -1
- data/spec/mongoid/association/syncable_spec.rb +46 -33
- data/spec/mongoid/association_spec.rb +0 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
- data/spec/mongoid/atomic/paths_spec.rb +91 -13
- data/spec/mongoid/atomic_spec.rb +51 -7
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +147 -79
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -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 +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +22 -23
- data/spec/mongoid/attributes_spec.rb +888 -62
- data/spec/mongoid/cacheable_spec.rb +4 -5
- data/spec/mongoid/changeable_spec.rb +464 -73
- data/spec/mongoid/clients/factory_spec.rb +91 -9
- data/spec/mongoid/clients/options_spec.rb +27 -19
- data/spec/mongoid/clients/sessions_spec.rb +27 -67
- data/spec/mongoid/clients/transactions_spec.rb +69 -35
- data/spec/mongoid/clients_spec.rb +187 -24
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +0 -1
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +124 -9
- data/spec/mongoid/config/options_spec.rb +0 -1
- data/spec/mongoid/config_spec.rb +465 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +431 -154
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +148 -86
- data/spec/mongoid/contextual/geo_near_spec.rb +28 -20
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -20
- data/spec/mongoid/contextual/memory_spec.rb +1826 -304
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3501 -1272
- data/spec/mongoid/contextual/none_spec.rb +78 -68
- data/spec/mongoid/copyable_spec.rb +657 -37
- data/spec/mongoid/copyable_spec_models.rb +28 -1
- data/spec/mongoid/criteria/findable_spec.rb +109 -234
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +37 -38
- data/spec/mongoid/criteria/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -74
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -20
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -27
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -16
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -8
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +5 -71
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +30 -8
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +39 -2
- data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +143 -13
- data/spec/mongoid/criteria/queryable/optional_spec.rb +16 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1186 -195
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +307 -705
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -4
- data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
- data/spec/mongoid/criteria/scopable_spec.rb +127 -1
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1267 -1739
- data/spec/mongoid/document_fields_spec.rb +179 -5
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +51 -1
- data/spec/mongoid/document_spec.rb +151 -88
- data/spec/mongoid/equality_spec.rb +142 -42
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
- data/spec/mongoid/errors/callback_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +2 -3
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +5 -6
- data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -9
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -3
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -4
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -4
- data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -4
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
- data/spec/mongoid/errors/no_parent_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -3
- data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -2
- data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
- data/spec/mongoid/errors/validations_spec.rb +0 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -213
- data/spec/mongoid/extensions/binary_spec.rb +44 -10
- data/spec/mongoid/extensions/boolean_spec.rb +68 -83
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -4
- data/spec/mongoid/extensions/date_spec.rb +71 -2
- data/spec/mongoid/extensions/date_time_spec.rb +15 -10
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
- data/spec/mongoid/extensions/false_class_spec.rb +1 -2
- data/spec/mongoid/extensions/float_spec.rb +53 -75
- data/spec/mongoid/extensions/hash_spec.rb +30 -1
- data/spec/mongoid/extensions/integer_spec.rb +50 -65
- data/spec/mongoid/extensions/module_spec.rb +0 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/extensions/object_id_spec.rb +0 -1
- data/spec/mongoid/extensions/object_spec.rb +0 -1
- data/spec/mongoid/extensions/range_spec.rb +255 -55
- data/spec/mongoid/extensions/regexp_spec.rb +58 -34
- data/spec/mongoid/extensions/set_spec.rb +106 -1
- data/spec/mongoid/extensions/string_spec.rb +58 -31
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +18 -26
- data/spec/mongoid/extensions/time_spec.rb +639 -107
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -84
- data/spec/mongoid/extensions/true_class_spec.rb +1 -2
- data/spec/mongoid/extensions_spec.rb +14 -3
- data/spec/mongoid/factory_spec.rb +323 -30
- data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
- data/spec/mongoid/fields/localized_spec.rb +84 -42
- data/spec/mongoid/fields/standard_spec.rb +0 -1
- data/spec/mongoid/fields_spec.rb +855 -118
- data/spec/mongoid/findable_spec.rb +518 -65
- data/spec/mongoid/indexable/specification_spec.rb +2 -3
- data/spec/mongoid/indexable_spec.rb +85 -33
- data/spec/mongoid/inspectable_spec.rb +37 -3
- data/spec/mongoid/interceptable_spec.rb +702 -104
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/loggable_spec.rb +0 -1
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -30
- data/spec/mongoid/persistable/deletable_spec.rb +298 -19
- data/spec/mongoid/persistable/destroyable_spec.rb +226 -19
- data/spec/mongoid/persistable/incrementable_spec.rb +45 -9
- data/spec/mongoid/persistable/logical_spec.rb +41 -5
- data/spec/mongoid/persistable/poppable_spec.rb +40 -5
- data/spec/mongoid/persistable/pullable_spec.rb +80 -9
- data/spec/mongoid/persistable/pushable_spec.rb +80 -9
- data/spec/mongoid/persistable/renamable_spec.rb +39 -4
- data/spec/mongoid/persistable/savable_spec.rb +282 -26
- data/spec/mongoid/persistable/settable_spec.rb +76 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +40 -5
- data/spec/mongoid/persistable/updatable_spec.rb +61 -50
- data/spec/mongoid/persistable/upsertable_spec.rb +91 -4
- data/spec/mongoid/persistable_spec.rb +3 -4
- data/spec/mongoid/persistence_context_spec.rb +57 -59
- data/spec/mongoid/positional_spec.rb +0 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +7 -5
- data/spec/mongoid/query_cache_spec.rb +424 -68
- data/spec/mongoid/relations/proxy_spec.rb +7 -8
- data/spec/mongoid/reloadable_spec.rb +355 -27
- data/spec/mongoid/scopable_spec.rb +191 -39
- data/spec/mongoid/selectable_spec.rb +6 -7
- data/spec/mongoid/serializable_spec.rb +35 -39
- data/spec/mongoid/shardable_models.rb +15 -1
- data/spec/mongoid/shardable_spec.rb +181 -32
- data/spec/mongoid/stateful_spec.rb +151 -10
- data/spec/mongoid/tasks/database_rake_spec.rb +87 -14
- data/spec/mongoid/tasks/database_spec.rb +128 -2
- data/spec/mongoid/threaded_spec.rb +2 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
- data/spec/mongoid/timestamps/created_spec.rb +1 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
- data/spec/mongoid/timestamps/updated_spec.rb +3 -4
- data/spec/mongoid/timestamps_spec.rb +398 -11
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +525 -36
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1143 -2
- data/spec/mongoid/validatable/associated_spec.rb +0 -1
- data/spec/mongoid/validatable/format_spec.rb +0 -1
- data/spec/mongoid/validatable/length_spec.rb +0 -1
- data/spec/mongoid/validatable/numericality_spec.rb +0 -1
- data/spec/mongoid/validatable/presence_spec.rb +26 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +125 -99
- data/spec/mongoid/validatable_spec.rb +3 -4
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +35 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -3
- data/spec/rails/mongoid_spec.rb +4 -17
- data/spec/shared/LICENSE +20 -0
- 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/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +298 -0
- 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 +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
- 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 +179 -0
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +321 -0
- 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 +74 -0
- data/spec/shared/shlib/server.sh +416 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +24 -54
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +34 -197
- data/spec/support/expectations.rb +0 -1
- data/spec/support/helpers.rb +1 -1
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +109 -1
- data/spec/{app → support}/models/account.rb +1 -2
- data/spec/{app → support}/models/acolyte.rb +0 -1
- data/spec/{app → support}/models/actor.rb +1 -2
- data/spec/{app → support}/models/actress.rb +0 -1
- data/spec/{app → support}/models/address.rb +4 -1
- data/spec/{app → support}/models/address_component.rb +0 -1
- data/spec/{app → support}/models/address_number.rb +0 -1
- data/spec/{app → support}/models/agency.rb +0 -1
- data/spec/{app → support}/models/agent.rb +0 -1
- data/spec/{app → support}/models/album.rb +0 -1
- data/spec/{app → support}/models/alert.rb +0 -1
- data/spec/{app → support}/models/animal.rb +0 -1
- data/spec/{app → support}/models/answer.rb +0 -1
- data/spec/{app → support}/models/appointment.rb +0 -1
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/array_field.rb +0 -1
- data/spec/{app → support}/models/article.rb +0 -1
- data/spec/{app → support}/models/artist.rb +2 -2
- data/spec/{app → support}/models/artwork.rb +0 -1
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +0 -1
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +0 -1
- data/spec/{app → support}/models/baby.rb +0 -1
- data/spec/{app → support}/models/band.rb +8 -1
- data/spec/{app → support}/models/bar.rb +0 -1
- data/spec/{app → support}/models/basic.rb +0 -1
- data/spec/{app → support}/models/bed.rb +0 -1
- data/spec/{app → support}/models/big_palette.rb +0 -1
- data/spec/{app → support}/models/birthday.rb +0 -1
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +0 -1
- data/spec/{app → support}/models/book.rb +1 -1
- data/spec/{app → support}/models/breed.rb +0 -1
- data/spec/{app → support}/models/browser.rb +1 -2
- data/spec/{app → support}/models/building.rb +2 -1
- data/spec/{app → support}/models/building_address.rb +0 -1
- data/spec/{app → support}/models/bus.rb +0 -1
- data/spec/{app → support}/models/business.rb +0 -1
- data/spec/{app → support}/models/callback_test.rb +0 -1
- data/spec/{app → support}/models/canvas.rb +1 -2
- data/spec/{app → support}/models/car.rb +0 -1
- data/spec/{app → support}/models/cat.rb +0 -1
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +0 -1
- data/spec/{app → support}/models/child.rb +0 -1
- data/spec/{app → support}/models/child_doc.rb +3 -4
- data/spec/{app → support}/models/church.rb +0 -1
- data/spec/{app → support}/models/circle.rb +0 -1
- data/spec/{app → support}/models/circuit.rb +0 -1
- data/spec/{app → support}/models/circus.rb +3 -1
- data/spec/{app → support}/models/code.rb +2 -1
- data/spec/{app → support}/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +0 -1
- data/spec/{app → support}/models/company.rb +0 -1
- data/spec/{app → support}/models/consumption_period.rb +0 -1
- data/spec/{app → support}/models/contextable_item.rb +0 -1
- data/spec/{app → support}/models/contractor.rb +0 -1
- data/spec/{app → support}/models/cookie.rb +0 -1
- data/spec/{app → support}/models/country_code.rb +2 -1
- data/spec/{app → support}/models/courier_job.rb +0 -1
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +0 -1
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +0 -1
- data/spec/{app → support}/models/dictionary.rb +6 -1
- data/spec/{app → support}/models/division.rb +0 -1
- data/spec/{app → support}/models/doctor.rb +0 -1
- data/spec/{app → support}/models/dog.rb +0 -1
- data/spec/{app → support}/models/dokument.rb +0 -1
- data/spec/{app → support}/models/draft.rb +0 -1
- data/spec/{app → support}/models/dragon.rb +0 -1
- data/spec/{app → support}/models/driver.rb +1 -2
- data/spec/{app → support}/models/drug.rb +0 -1
- data/spec/{app → support}/models/dungeon.rb +0 -1
- data/spec/{app → support}/models/edit.rb +0 -1
- data/spec/{app → support}/models/email.rb +0 -1
- data/spec/{app → support}/models/employer.rb +0 -1
- data/spec/{app → support}/models/entry.rb +0 -1
- data/spec/{app → support}/models/eraser.rb +0 -1
- data/spec/{app → support}/models/even.rb +0 -1
- data/spec/{app → support}/models/event.rb +0 -1
- data/spec/{app → support}/models/exhibition.rb +0 -1
- data/spec/{app → support}/models/exhibitor.rb +0 -1
- data/spec/{app → support}/models/explosion.rb +0 -1
- data/spec/{app → support}/models/eye.rb +0 -1
- data/spec/{app → support}/models/eye_bowl.rb +0 -1
- data/spec/{app → support}/models/face.rb +0 -1
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +0 -1
- data/spec/{app → support}/models/filesystem.rb +0 -1
- data/spec/{app → support}/models/fire_hydrant.rb +0 -1
- data/spec/{app → support}/models/firefox.rb +0 -1
- data/spec/{app → support}/models/fish.rb +0 -1
- data/spec/{app → support}/models/folder.rb +0 -1
- data/spec/{app → support}/models/folder_item.rb +0 -1
- data/spec/{app → support}/models/fruits.rb +0 -1
- data/spec/{app → support}/models/game.rb +0 -1
- data/spec/{app → support}/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +0 -1
- data/spec/{app → support}/models/house.rb +0 -1
- data/spec/{app → support}/models/html_writer.rb +0 -1
- data/spec/{app → support}/models/id_key.rb +0 -1
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +0 -1
- data/spec/{app → support}/models/implant.rb +9 -1
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +1 -2
- data/spec/{app → support}/models/jar.rb +0 -1
- data/spec/{app → support}/models/kaleidoscope.rb +0 -1
- data/spec/{app → support}/models/kangaroo.rb +0 -1
- data/spec/{app → support}/models/label.rb +4 -2
- data/spec/{app → support}/models/language.rb +0 -1
- data/spec/{app → support}/models/lat_lng.rb +0 -1
- data/spec/{app → support}/models/league.rb +0 -1
- data/spec/{app → support}/models/learner.rb +0 -1
- data/spec/{app → support}/models/line_item.rb +0 -1
- data/spec/{app → support}/models/location.rb +0 -1
- data/spec/{app → support}/models/login.rb +0 -1
- data/spec/{app → support}/models/manufacturer.rb +0 -1
- data/spec/{app → support}/models/meat.rb +0 -1
- data/spec/{app → support}/models/membership.rb +1 -1
- data/spec/{app → support}/models/message.rb +0 -1
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +0 -1
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +0 -1
- data/spec/{app → support}/models/my_hash.rb +0 -1
- data/spec/{app → support}/models/name.rb +0 -1
- data/spec/{app → support}/models/name_only.rb +0 -1
- data/spec/{app → support}/models/node.rb +0 -1
- data/spec/{app → support}/models/note.rb +0 -1
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +0 -1
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +1 -2
- data/spec/{app → support}/models/ordered_preference.rb +0 -1
- data/spec/{app → support}/models/oscar.rb +0 -1
- data/spec/{app → support}/models/other_owner_object.rb +0 -1
- data/spec/{app → support}/models/override.rb +0 -1
- data/spec/{app → support}/models/ownable.rb +0 -1
- data/spec/{app → support}/models/owner.rb +2 -1
- data/spec/{app → support}/models/pack.rb +0 -1
- data/spec/{app → support}/models/page.rb +0 -1
- data/spec/{app → support}/models/page_question.rb +0 -1
- data/spec/{app → support}/models/palette.rb +1 -2
- data/spec/{app → support}/models/parent.rb +0 -1
- data/spec/{app → support}/models/parent_doc.rb +0 -1
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +0 -1
- data/spec/{app → support}/models/pdf_writer.rb +0 -1
- data/spec/{app → support}/models/pencil.rb +0 -1
- data/spec/{app → support}/models/person.rb +20 -2
- data/spec/{app → support}/models/pet.rb +0 -1
- data/spec/{app → support}/models/pet_owner.rb +0 -1
- data/spec/{app → support}/models/phone.rb +3 -2
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +0 -1
- data/spec/{app → support}/models/player.rb +2 -1
- data/spec/{app → support}/models/post.rb +0 -1
- data/spec/{app → support}/models/post_genre.rb +0 -1
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +0 -1
- data/spec/{app → support}/models/princess.rb +0 -1
- data/spec/{app → support}/models/product.rb +1 -1
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -1
- data/spec/{app → support}/models/pub.rb +0 -1
- data/spec/{app → support}/models/publication/encyclopedia.rb +0 -1
- data/spec/{app → support}/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +0 -1
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +0 -1
- data/spec/{app → support}/models/quiz.rb +0 -1
- data/spec/{app → support}/models/rating.rb +0 -1
- data/spec/{app → support}/models/record.rb +0 -1
- data/spec/{app → support}/models/registry.rb +1 -1
- data/spec/{app → support}/models/role.rb +0 -1
- data/spec/{app → support}/models/root_category.rb +0 -1
- data/spec/{app → support}/models/sandwich.rb +0 -1
- data/spec/{app → support}/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +14 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -3
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +0 -1
- data/spec/{app → support}/models/series.rb +1 -1
- data/spec/{app → support}/models/server.rb +0 -1
- data/spec/{app → support}/models/service.rb +0 -1
- data/spec/{app → support}/models/shape.rb +2 -3
- data/spec/{app → support}/models/shelf.rb +0 -1
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -1
- data/spec/{app → support}/models/shipping_container.rb +0 -1
- data/spec/{app → support}/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +0 -1
- data/spec/{app → support}/models/short_agent.rb +0 -1
- data/spec/{app → support}/models/short_quiz.rb +0 -1
- data/spec/{app → support}/models/simple.rb +0 -1
- data/spec/{app → support}/models/slave.rb +0 -1
- data/spec/{app → support}/models/song.rb +0 -1
- data/spec/{app → support}/models/sound.rb +0 -1
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +0 -1
- data/spec/{app → support}/models/staff.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -1
- data/spec/{app → support}/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +0 -1
- data/spec/{app → support}/models/subscription.rb +0 -1
- data/spec/{app → support}/models/survey.rb +0 -1
- data/spec/{app → support}/models/symptom.rb +0 -1
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -1
- data/spec/{app → support}/models/target.rb +0 -1
- data/spec/{app → support}/models/template.rb +0 -1
- data/spec/{app → support}/models/thing.rb +0 -1
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +0 -1
- data/spec/{app → support}/models/tool.rb +2 -3
- data/spec/{app → support}/models/topping.rb +0 -1
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +0 -1
- data/spec/{app → support}/models/translation.rb +0 -1
- data/spec/{app → support}/models/tree.rb +0 -1
- data/spec/{app → support}/models/truck.rb +2 -1
- data/spec/{app → support}/models/updatable.rb +0 -1
- data/spec/{app → support}/models/user.rb +0 -1
- data/spec/{app → support}/models/user_account.rb +0 -1
- data/spec/{app → support}/models/validation_callback.rb +0 -1
- data/spec/{app → support}/models/vehicle.rb +7 -3
- data/spec/{app → support}/models/version.rb +0 -1
- data/spec/{app → support}/models/vertex.rb +0 -1
- data/spec/{app → support}/models/vet_visit.rb +0 -1
- data/spec/{app → support}/models/video.rb +0 -1
- data/spec/{app → support}/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +1 -1
- data/spec/{app → support}/models/word.rb +0 -1
- data/spec/{app → support}/models/word_origin.rb +0 -1
- data/spec/{app → support}/models/writer.rb +2 -3
- 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 +0 -1
- data/spec/support/spec_config.rb +28 -6
- data.tar.gz.sig +0 -0
- metadata +1216 -799
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -26
- data/lib/mongoid/errors/invalid_value.rb +0 -18
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/lib/support/ruby_version.rb +0 -29
- data/spec/app/models/augmentation.rb +0 -14
- data/spec/app/models/coding.rb +0 -4
- data/spec/app/models/passport.rb +0 -8
- data/spec/app/models/powerup.rb +0 -14
- data/spec/app/models/publication.rb +0 -5
- data/spec/app/models/weapon.rb +0 -14
- 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/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/lite_constraints.rb +0 -22
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require "spec_helper"
|
|
4
|
+
require_relative './attributes/nested_spec_models'
|
|
5
5
|
|
|
6
6
|
describe Mongoid::Attributes do
|
|
7
7
|
|
|
@@ -21,7 +21,7 @@ describe Mongoid::Attributes do
|
|
|
21
21
|
context "when the attribute was excluded in a criteria" do
|
|
22
22
|
|
|
23
23
|
let!(:person) do
|
|
24
|
-
Person.create(title: "sir")
|
|
24
|
+
Person.create!(title: "sir")
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
context "when the attribute is localized" do
|
|
@@ -56,7 +56,7 @@ describe Mongoid::Attributes do
|
|
|
56
56
|
let!(:agent) do
|
|
57
57
|
agent = Agent.new(:title => title)
|
|
58
58
|
agent.build_address(:city => city)
|
|
59
|
-
agent.save()
|
|
59
|
+
agent.save!()
|
|
60
60
|
agent
|
|
61
61
|
end
|
|
62
62
|
let(:from_db) do
|
|
@@ -96,6 +96,49 @@ describe Mongoid::Attributes do
|
|
|
96
96
|
it "does not raise an error" do
|
|
97
97
|
expect(from_db.map).to eq(map)
|
|
98
98
|
end
|
|
99
|
+
|
|
100
|
+
context 'when only one of the hash fields is projected' do
|
|
101
|
+
|
|
102
|
+
let(:map) do
|
|
103
|
+
{ 'dates' => { 'y' => { '2016' => 'Berlin', '2017' => 'Munich' } } }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
let(:expected) do
|
|
107
|
+
{ 'dates' => { 'y' => {
|
|
108
|
+
'2016' => 'Berlin',
|
|
109
|
+
} } }
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it 'retrieves only the projected fields' do
|
|
113
|
+
expect(from_db.map).to eq(expected)
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
context 'when several of the hash fields is projected' do
|
|
118
|
+
|
|
119
|
+
let(:map) do
|
|
120
|
+
{ 'dates' => { 'y' => {
|
|
121
|
+
'2016' => 'Berlin',
|
|
122
|
+
'2017' => 'Munich',
|
|
123
|
+
'2018' => 'Krakow',
|
|
124
|
+
} } }
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
let(:expected) do
|
|
128
|
+
{ 'dates' => { 'y' => {
|
|
129
|
+
'2016' => 'Berlin',
|
|
130
|
+
'2018' => 'Krakow',
|
|
131
|
+
} } }
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
let(:from_db) do
|
|
135
|
+
Person.only('map.dates.y.2016', 'map.dates.y.2018').first
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it 'retrieves only the projected fields' do
|
|
139
|
+
expect(from_db.map).to eq(expected)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
99
142
|
end
|
|
100
143
|
end
|
|
101
144
|
|
|
@@ -156,7 +199,7 @@ describe Mongoid::Attributes do
|
|
|
156
199
|
context 'when the document has a custom attribute type' do
|
|
157
200
|
|
|
158
201
|
let(:bar) do
|
|
159
|
-
Bar.create(lat_lng: LatLng.new(52.30, 13.25))
|
|
202
|
+
Bar.create!(lat_lng: LatLng.new(52.30, 13.25))
|
|
160
203
|
end
|
|
161
204
|
|
|
162
205
|
it 'returns the demongoized version of the attribute' do
|
|
@@ -213,7 +256,7 @@ describe Mongoid::Attributes do
|
|
|
213
256
|
context "when the document is an existing record" do
|
|
214
257
|
|
|
215
258
|
let!(:person) do
|
|
216
|
-
Person.create(title: "sir")
|
|
259
|
+
Person.create!(title: "sir")
|
|
217
260
|
end
|
|
218
261
|
|
|
219
262
|
context "when the attribute was excluded in a criteria" do
|
|
@@ -245,6 +288,91 @@ describe Mongoid::Attributes do
|
|
|
245
288
|
end
|
|
246
289
|
end
|
|
247
290
|
|
|
291
|
+
context "when the field was not explicitly defined" do
|
|
292
|
+
|
|
293
|
+
context "when excluding with only and the field was not excluded" do
|
|
294
|
+
|
|
295
|
+
let(:from_db) do
|
|
296
|
+
Person.only(:_id).first
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
it "raises an error" do
|
|
300
|
+
expect {
|
|
301
|
+
from_db[:undefined_field]
|
|
302
|
+
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
context "when excluding with without and the field was excluded" do
|
|
307
|
+
|
|
308
|
+
let(:from_db) do
|
|
309
|
+
Person.without(:title).first
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
it "raises an error" do
|
|
313
|
+
expect {
|
|
314
|
+
from_db[:title]
|
|
315
|
+
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
context "when excluding with without and the field was not excluded" do
|
|
320
|
+
|
|
321
|
+
let(:from_db) do
|
|
322
|
+
Person.without(:title).first
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
it "returns nil" do
|
|
326
|
+
from_db[:undefined_field].should be nil
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
context 'when projecting with #only' do
|
|
332
|
+
let!(:person) do
|
|
333
|
+
Person.create!(title: 'sir', name: { first_name: 'Jose', language: { name: 'es' } })
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
context 'when projecting an embedded association' do
|
|
337
|
+
let(:from_db) do
|
|
338
|
+
Person.only(:name).first
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
context 'when retrieving a field of the association using the dot notation' do
|
|
342
|
+
|
|
343
|
+
it 'retrieves the field' do
|
|
344
|
+
expect(from_db['name.first_name']).to eq 'Jose'
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
context 'when retrieving a field of a nested association using the dot notation' do
|
|
349
|
+
it 'retrieves the field' do
|
|
350
|
+
expect(from_db['name.language.name']).to eq 'es'
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
context 'when projecting a sub-association of an embedded association' do
|
|
356
|
+
let(:from_db) do
|
|
357
|
+
Person.only('name.language').first
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
context 'when retrieving a field under the projected sub-association' do
|
|
361
|
+
it 'retrieves the field' do
|
|
362
|
+
expect(from_db['name.language.name']).to eq 'es'
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
context 'when retrieving a non-projected field' do
|
|
367
|
+
it 'raises MissingAttributeError' do
|
|
368
|
+
expect do
|
|
369
|
+
from_db['name.first_name']
|
|
370
|
+
end.to raise_error(ActiveModel::MissingAttributeError)
|
|
371
|
+
end
|
|
372
|
+
end
|
|
373
|
+
end
|
|
374
|
+
end
|
|
375
|
+
|
|
248
376
|
context "when the attribute does not exist" do
|
|
249
377
|
|
|
250
378
|
before do
|
|
@@ -265,11 +393,10 @@ describe Mongoid::Attributes do
|
|
|
265
393
|
end
|
|
266
394
|
|
|
267
395
|
context "when reloaded" do
|
|
396
|
+
config_override :raise_not_found_error, false
|
|
268
397
|
|
|
269
398
|
before do
|
|
270
|
-
Mongoid.raise_not_found_error = false
|
|
271
399
|
person.reload
|
|
272
|
-
Mongoid.raise_not_found_error = true
|
|
273
400
|
end
|
|
274
401
|
|
|
275
402
|
it "returns the default value" do
|
|
@@ -287,7 +414,7 @@ describe Mongoid::Attributes do
|
|
|
287
414
|
let(:bar) do
|
|
288
415
|
Bar.new.tap do |b|
|
|
289
416
|
b[:lat_lng] = LatLng.new(52.30, 13.25)
|
|
290
|
-
b.save
|
|
417
|
+
b.save!
|
|
291
418
|
end
|
|
292
419
|
end
|
|
293
420
|
|
|
@@ -329,6 +456,67 @@ describe Mongoid::Attributes do
|
|
|
329
456
|
expect(terms).to eq(true)
|
|
330
457
|
end
|
|
331
458
|
end
|
|
459
|
+
|
|
460
|
+
context 'when the field is not explicitly defined' do
|
|
461
|
+
let(:bar) { Bar.new }
|
|
462
|
+
|
|
463
|
+
before do
|
|
464
|
+
bar['missing_field'] = 42
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
it 'writes the value into attributes' do
|
|
468
|
+
bar.attributes.should == {'_id' => bar.id, 'missing_field' => 42}
|
|
469
|
+
end
|
|
470
|
+
|
|
471
|
+
it 'makes the attribute accessible via []' do
|
|
472
|
+
bar['missing_field'].should == 42
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
context 'when writing fields on a document with projection' do
|
|
476
|
+
|
|
477
|
+
let!(:person) do
|
|
478
|
+
Person.create!(title: "sir")
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
context "when excluding with only and the field was not excluded" do
|
|
482
|
+
|
|
483
|
+
let(:from_db) do
|
|
484
|
+
Person.only(:_id).first
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
it "raises an error" do
|
|
488
|
+
expect {
|
|
489
|
+
from_db[:undefined_field] = 'x'
|
|
490
|
+
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
491
|
+
end
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
context "when excluding with without and the field was excluded" do
|
|
495
|
+
|
|
496
|
+
let(:from_db) do
|
|
497
|
+
Person.without(:title).first
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
it "raises an error" do
|
|
501
|
+
expect {
|
|
502
|
+
from_db[:title] = 'x'
|
|
503
|
+
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
504
|
+
end
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
context "when excluding with without and the field was not excluded" do
|
|
508
|
+
|
|
509
|
+
let(:from_db) do
|
|
510
|
+
Person.without(:title).first
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
it "writes the value" do
|
|
514
|
+
from_db[:undefined_field] = 'x'
|
|
515
|
+
from_db[:undefined_field].should == 'x'
|
|
516
|
+
end
|
|
517
|
+
end
|
|
518
|
+
end
|
|
519
|
+
end
|
|
332
520
|
end
|
|
333
521
|
|
|
334
522
|
describe "#_id" do
|
|
@@ -799,7 +987,7 @@ describe Mongoid::Attributes do
|
|
|
799
987
|
context 'when the document has a custom attribute type' do
|
|
800
988
|
|
|
801
989
|
let(:bar) do
|
|
802
|
-
Bar.create(lat_lng: LatLng.new(52.30, 13.25))
|
|
990
|
+
Bar.create!(lat_lng: LatLng.new(52.30, 13.25))
|
|
803
991
|
end
|
|
804
992
|
|
|
805
993
|
it 'returns the demongoized version of the attribute' do
|
|
@@ -837,18 +1025,17 @@ describe Mongoid::Attributes do
|
|
|
837
1025
|
context "when the document is an existing record" do
|
|
838
1026
|
|
|
839
1027
|
let(:person) do
|
|
840
|
-
Person.create
|
|
1028
|
+
Person.create!
|
|
841
1029
|
end
|
|
842
1030
|
|
|
843
1031
|
context "when the attribute does not exist" do
|
|
1032
|
+
config_override :raise_not_found_error, false
|
|
844
1033
|
|
|
845
1034
|
before do
|
|
846
1035
|
person.collection
|
|
847
1036
|
.find({ _id: person.id })
|
|
848
1037
|
.update_one({ "$unset" => { age: 1 }})
|
|
849
|
-
Mongoid.raise_not_found_error = false
|
|
850
1038
|
person.reload
|
|
851
|
-
Mongoid.raise_not_found_error = true
|
|
852
1039
|
end
|
|
853
1040
|
|
|
854
1041
|
it "returns the default value" do
|
|
@@ -876,7 +1063,7 @@ describe Mongoid::Attributes do
|
|
|
876
1063
|
describe "#read_attribute_before_type_cast" do
|
|
877
1064
|
|
|
878
1065
|
let(:person) do
|
|
879
|
-
Person.create
|
|
1066
|
+
Person.create!
|
|
880
1067
|
end
|
|
881
1068
|
|
|
882
1069
|
context "when the attribute has not yet been assigned" do
|
|
@@ -889,8 +1076,52 @@ describe Mongoid::Attributes do
|
|
|
889
1076
|
context "after the attribute has been assigned" do
|
|
890
1077
|
|
|
891
1078
|
it "returns the default value" do
|
|
892
|
-
person.age = "
|
|
893
|
-
expect(person.age_before_type_cast).to eq("
|
|
1079
|
+
person.age = "42"
|
|
1080
|
+
expect(person.age_before_type_cast).to eq("42")
|
|
1081
|
+
end
|
|
1082
|
+
end
|
|
1083
|
+
|
|
1084
|
+
context 'when reading fields on a document with projection' do
|
|
1085
|
+
|
|
1086
|
+
let!(:person) do
|
|
1087
|
+
Person.create!(title: "sir")
|
|
1088
|
+
end
|
|
1089
|
+
|
|
1090
|
+
context "when excluding with only and the field was not excluded" do
|
|
1091
|
+
|
|
1092
|
+
let(:from_db) do
|
|
1093
|
+
Person.only(:_id).first
|
|
1094
|
+
end
|
|
1095
|
+
|
|
1096
|
+
it "raises an error" do
|
|
1097
|
+
expect {
|
|
1098
|
+
from_db.read_attribute(:undefined_field)
|
|
1099
|
+
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
1100
|
+
end
|
|
1101
|
+
end
|
|
1102
|
+
|
|
1103
|
+
context "when excluding with without and the field was excluded" do
|
|
1104
|
+
|
|
1105
|
+
let(:from_db) do
|
|
1106
|
+
Person.without(:title).first
|
|
1107
|
+
end
|
|
1108
|
+
|
|
1109
|
+
it "raises an error" do
|
|
1110
|
+
expect {
|
|
1111
|
+
from_db.read_attribute(:title)
|
|
1112
|
+
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
1113
|
+
end
|
|
1114
|
+
end
|
|
1115
|
+
|
|
1116
|
+
context "when excluding with without and the field was not excluded" do
|
|
1117
|
+
|
|
1118
|
+
let(:from_db) do
|
|
1119
|
+
Person.without(:title).first
|
|
1120
|
+
end
|
|
1121
|
+
|
|
1122
|
+
it "returns nil" do
|
|
1123
|
+
from_db.read_attribute(:undefined_field).should be nil
|
|
1124
|
+
end
|
|
894
1125
|
end
|
|
895
1126
|
end
|
|
896
1127
|
end
|
|
@@ -924,18 +1155,17 @@ describe Mongoid::Attributes do
|
|
|
924
1155
|
context "when the document is an existing record" do
|
|
925
1156
|
|
|
926
1157
|
let(:person) do
|
|
927
|
-
Person.create
|
|
1158
|
+
Person.create!
|
|
928
1159
|
end
|
|
929
1160
|
|
|
930
1161
|
context "when the attribute does not exist" do
|
|
1162
|
+
config_override :raise_not_found_error, false
|
|
931
1163
|
|
|
932
1164
|
before do
|
|
933
1165
|
person.collection
|
|
934
1166
|
.find({ _id: person.id })
|
|
935
1167
|
.update_one({ "$unset" => { age: 1 }})
|
|
936
|
-
Mongoid.raise_not_found_error = false
|
|
937
1168
|
person.reload
|
|
938
|
-
Mongoid.raise_not_found_error = true
|
|
939
1169
|
end
|
|
940
1170
|
|
|
941
1171
|
it "returns true" do
|
|
@@ -983,7 +1213,7 @@ describe Mongoid::Attributes do
|
|
|
983
1213
|
|
|
984
1214
|
context "when the attribute is not on only list" do
|
|
985
1215
|
|
|
986
|
-
before { Person.create }
|
|
1216
|
+
before { Person.create! }
|
|
987
1217
|
let(:person) do
|
|
988
1218
|
Person.only(:id).first
|
|
989
1219
|
end
|
|
@@ -1033,15 +1263,15 @@ describe Mongoid::Attributes do
|
|
|
1033
1263
|
|
|
1034
1264
|
context "before the attribute has been assigned" do
|
|
1035
1265
|
|
|
1036
|
-
it "returns
|
|
1037
|
-
expect(person.has_attribute_before_type_cast?(:age)).to be
|
|
1266
|
+
it "returns true" do
|
|
1267
|
+
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
|
1038
1268
|
end
|
|
1039
1269
|
end
|
|
1040
1270
|
|
|
1041
1271
|
context "after the attribute has been assigned" do
|
|
1042
1272
|
|
|
1043
1273
|
it "returns true" do
|
|
1044
|
-
person.age = '
|
|
1274
|
+
person.age = '42'
|
|
1045
1275
|
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
|
1046
1276
|
end
|
|
1047
1277
|
end
|
|
@@ -1052,7 +1282,7 @@ describe Mongoid::Attributes do
|
|
|
1052
1282
|
context "when the attribute exists" do
|
|
1053
1283
|
|
|
1054
1284
|
let(:person) do
|
|
1055
|
-
Person.create(title: "Sir")
|
|
1285
|
+
Person.create!(title: "Sir")
|
|
1056
1286
|
end
|
|
1057
1287
|
|
|
1058
1288
|
before do
|
|
@@ -1070,7 +1300,7 @@ describe Mongoid::Attributes do
|
|
|
1070
1300
|
context "when saving after the removal" do
|
|
1071
1301
|
|
|
1072
1302
|
before do
|
|
1073
|
-
person.save
|
|
1303
|
+
person.save!
|
|
1074
1304
|
end
|
|
1075
1305
|
|
|
1076
1306
|
it "persists the removal" do
|
|
@@ -1090,7 +1320,7 @@ describe Mongoid::Attributes do
|
|
|
1090
1320
|
end
|
|
1091
1321
|
|
|
1092
1322
|
before do
|
|
1093
|
-
person.save
|
|
1323
|
+
person.save!
|
|
1094
1324
|
person.pet.remove_attribute(:name)
|
|
1095
1325
|
end
|
|
1096
1326
|
|
|
@@ -1105,7 +1335,7 @@ describe Mongoid::Attributes do
|
|
|
1105
1335
|
context "when saving after the removal" do
|
|
1106
1336
|
|
|
1107
1337
|
before do
|
|
1108
|
-
person.save
|
|
1338
|
+
person.save!
|
|
1109
1339
|
end
|
|
1110
1340
|
|
|
1111
1341
|
it "persists the removal" do
|
|
@@ -1150,7 +1380,7 @@ describe Mongoid::Attributes do
|
|
|
1150
1380
|
context 'when the database name is used' do
|
|
1151
1381
|
|
|
1152
1382
|
let(:person) do
|
|
1153
|
-
Person.create(at: Time.now)
|
|
1383
|
+
Person.create!(at: Time.now)
|
|
1154
1384
|
end
|
|
1155
1385
|
|
|
1156
1386
|
before do
|
|
@@ -1168,7 +1398,7 @@ describe Mongoid::Attributes do
|
|
|
1168
1398
|
context "when saving after the removal" do
|
|
1169
1399
|
|
|
1170
1400
|
before do
|
|
1171
|
-
person.save
|
|
1401
|
+
person.save!
|
|
1172
1402
|
end
|
|
1173
1403
|
|
|
1174
1404
|
it "persists the removal" do
|
|
@@ -1180,7 +1410,7 @@ describe Mongoid::Attributes do
|
|
|
1180
1410
|
context 'when the alias is used' do
|
|
1181
1411
|
|
|
1182
1412
|
let(:person) do
|
|
1183
|
-
Person.create(aliased_timestamp: Time.now)
|
|
1413
|
+
Person.create!(aliased_timestamp: Time.now)
|
|
1184
1414
|
end
|
|
1185
1415
|
|
|
1186
1416
|
before do
|
|
@@ -1198,7 +1428,7 @@ describe Mongoid::Attributes do
|
|
|
1198
1428
|
context "when saving after the removal" do
|
|
1199
1429
|
|
|
1200
1430
|
before do
|
|
1201
|
-
person.save
|
|
1431
|
+
person.save!
|
|
1202
1432
|
end
|
|
1203
1433
|
|
|
1204
1434
|
it "persists the removal" do
|
|
@@ -1296,12 +1526,13 @@ describe Mongoid::Attributes do
|
|
|
1296
1526
|
end
|
|
1297
1527
|
|
|
1298
1528
|
context "when setting an attribute that needs type casting" do
|
|
1529
|
+
|
|
1299
1530
|
let(:person) do
|
|
1300
|
-
Person.new(age: "
|
|
1531
|
+
Person.new(age: "42")
|
|
1301
1532
|
end
|
|
1302
1533
|
|
|
1303
1534
|
it "should store the attribute before type cast" do
|
|
1304
|
-
expect(person.age_before_type_cast).to eq("
|
|
1535
|
+
expect(person.age_before_type_cast).to eq("42")
|
|
1305
1536
|
end
|
|
1306
1537
|
end
|
|
1307
1538
|
|
|
@@ -1341,7 +1572,7 @@ describe Mongoid::Attributes do
|
|
|
1341
1572
|
person.write_attribute(:test, "aliased field to test")
|
|
1342
1573
|
end
|
|
1343
1574
|
|
|
1344
|
-
it "allows the field name to be
|
|
1575
|
+
it "allows the field name to be updated" do
|
|
1345
1576
|
expect(person.t).to eq("aliased field to test")
|
|
1346
1577
|
end
|
|
1347
1578
|
end
|
|
@@ -1349,16 +1580,14 @@ describe Mongoid::Attributes do
|
|
|
1349
1580
|
context "when attribute is a Hash" do
|
|
1350
1581
|
let(:person) { Person.new map: { somekey: "somevalue" } }
|
|
1351
1582
|
|
|
1352
|
-
it "
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type Array cannot be written to a field of type Hash/)
|
|
1583
|
+
it "writes nil when trying to set a value of invalid type - array" do
|
|
1584
|
+
person.map = []
|
|
1585
|
+
expect(person.map).to be_nil
|
|
1356
1586
|
end
|
|
1357
1587
|
|
|
1358
|
-
it "
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type FalseClass cannot be written to a field of type Hash/)
|
|
1588
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
|
1589
|
+
person.map = false
|
|
1590
|
+
expect(person.map).to be_nil
|
|
1362
1591
|
end
|
|
1363
1592
|
|
|
1364
1593
|
it "can set a Hash value" do
|
|
@@ -1373,16 +1602,14 @@ describe Mongoid::Attributes do
|
|
|
1373
1602
|
expect(person.aliases).to eq([ :alias_1 ])
|
|
1374
1603
|
end
|
|
1375
1604
|
|
|
1376
|
-
it "
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type Hash cannot be written to a field of type Array/)
|
|
1605
|
+
it "writes nil when trying to set a value of invalid type - hash" do
|
|
1606
|
+
person.aliases = {}
|
|
1607
|
+
expect(person.aliases).to be_nil
|
|
1380
1608
|
end
|
|
1381
1609
|
|
|
1382
|
-
it "
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type FalseClass cannot be written to a field of type Array/)
|
|
1610
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
|
1611
|
+
person.aliases = false
|
|
1612
|
+
expect(person.aliases).to be_nil
|
|
1386
1613
|
end
|
|
1387
1614
|
end
|
|
1388
1615
|
|
|
@@ -1398,6 +1625,95 @@ describe Mongoid::Attributes do
|
|
|
1398
1625
|
expect(dictionary.description).to eq('foo')
|
|
1399
1626
|
end
|
|
1400
1627
|
end
|
|
1628
|
+
|
|
1629
|
+
context 'when writing fields on a document with projection' do
|
|
1630
|
+
|
|
1631
|
+
let!(:person) do
|
|
1632
|
+
Person.create!(title: "sir")
|
|
1633
|
+
end
|
|
1634
|
+
|
|
1635
|
+
context "when excluding with only and the field was not excluded" do
|
|
1636
|
+
|
|
1637
|
+
let(:from_db) do
|
|
1638
|
+
Person.only(:_id).first
|
|
1639
|
+
end
|
|
1640
|
+
|
|
1641
|
+
it "raises an error" do
|
|
1642
|
+
expect {
|
|
1643
|
+
from_db.write_attribute(:undefined_field, 'x')
|
|
1644
|
+
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
1645
|
+
end
|
|
1646
|
+
end
|
|
1647
|
+
|
|
1648
|
+
context "when excluding with without and the field was excluded" do
|
|
1649
|
+
|
|
1650
|
+
let(:from_db) do
|
|
1651
|
+
Person.without(:title).first
|
|
1652
|
+
end
|
|
1653
|
+
|
|
1654
|
+
it "raises an error" do
|
|
1655
|
+
expect {
|
|
1656
|
+
from_db.write_attribute(:title, 'x')
|
|
1657
|
+
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
1658
|
+
end
|
|
1659
|
+
end
|
|
1660
|
+
|
|
1661
|
+
context "when excluding with without and the field was not excluded" do
|
|
1662
|
+
|
|
1663
|
+
let(:from_db) do
|
|
1664
|
+
Person.without(:title).first
|
|
1665
|
+
end
|
|
1666
|
+
|
|
1667
|
+
it "writes the value" do
|
|
1668
|
+
from_db.write_attribute(:undefined_field, 'x')
|
|
1669
|
+
from_db.read_attribute(:undefined_field).should == 'x'
|
|
1670
|
+
end
|
|
1671
|
+
end
|
|
1672
|
+
end
|
|
1673
|
+
|
|
1674
|
+
context "when comparing the object_ids of the written value" do
|
|
1675
|
+
config_override :legacy_attributes, false
|
|
1676
|
+
|
|
1677
|
+
before do
|
|
1678
|
+
Person.create!
|
|
1679
|
+
end
|
|
1680
|
+
|
|
1681
|
+
let(:person) do
|
|
1682
|
+
Person.first
|
|
1683
|
+
end
|
|
1684
|
+
|
|
1685
|
+
context "when the field is not resizable" do
|
|
1686
|
+
let(:test) do
|
|
1687
|
+
person.write_attribute(:test, "aliased field to test")
|
|
1688
|
+
end
|
|
1689
|
+
|
|
1690
|
+
it "has the same object_id as the attributes hash value" do
|
|
1691
|
+
expect(test.object_id).to eq(person.test.object_id)
|
|
1692
|
+
end
|
|
1693
|
+
end
|
|
1694
|
+
|
|
1695
|
+
context "when the field is resizable" do
|
|
1696
|
+
|
|
1697
|
+
let(:arrays) do
|
|
1698
|
+
person.write_attribute(:arrays, [])
|
|
1699
|
+
end
|
|
1700
|
+
|
|
1701
|
+
it "has the same object_id as the attributes hash value" do
|
|
1702
|
+
expect(arrays.object_id).to eq(person.arrays.object_id)
|
|
1703
|
+
end
|
|
1704
|
+
end
|
|
1705
|
+
|
|
1706
|
+
context "when the field is a HABTM foreign key array" do
|
|
1707
|
+
|
|
1708
|
+
let(:preference_ids) do
|
|
1709
|
+
person.write_attribute(:preference_ids, [])
|
|
1710
|
+
end
|
|
1711
|
+
|
|
1712
|
+
it "has the same object_id as the attributes hash value" do
|
|
1713
|
+
expect(preference_ids.object_id).to eq(person.preference_ids.object_id)
|
|
1714
|
+
end
|
|
1715
|
+
end
|
|
1716
|
+
end
|
|
1401
1717
|
end
|
|
1402
1718
|
|
|
1403
1719
|
describe "#typed_value_for" do
|
|
@@ -1578,11 +1894,11 @@ describe Mongoid::Attributes do
|
|
|
1578
1894
|
end
|
|
1579
1895
|
|
|
1580
1896
|
it "has 3 new entries" do
|
|
1581
|
-
expect(pet.vet_visits.count).to eq
|
|
1897
|
+
expect(pet.vet_visits.count).to eq 3
|
|
1582
1898
|
end
|
|
1583
1899
|
|
|
1584
1900
|
it "persists the changes" do
|
|
1585
|
-
expect(pet.reload.vet_visits.count).to eq
|
|
1901
|
+
expect(pet.reload.vet_visits.count).to eq 3
|
|
1586
1902
|
end
|
|
1587
1903
|
end
|
|
1588
1904
|
|
|
@@ -1651,6 +1967,61 @@ describe Mongoid::Attributes do
|
|
|
1651
1967
|
end
|
|
1652
1968
|
end
|
|
1653
1969
|
|
|
1970
|
+
describe '#unalias_attribute' do
|
|
1971
|
+
let(:shirt) { Shirt.new }
|
|
1972
|
+
let(:id) { '1234' }
|
|
1973
|
+
|
|
1974
|
+
context 'when creating object' do
|
|
1975
|
+
let(:shirt) { Shirt.new(id: id) }
|
|
1976
|
+
|
|
1977
|
+
it 'id and _id are not the same' do
|
|
1978
|
+
expect(shirt.id).to eq(id)
|
|
1979
|
+
expect(shirt._id).not_to eq(id)
|
|
1980
|
+
end
|
|
1981
|
+
end
|
|
1982
|
+
|
|
1983
|
+
context 'update' do
|
|
1984
|
+
before do
|
|
1985
|
+
shirt.update(id: id)
|
|
1986
|
+
end
|
|
1987
|
+
|
|
1988
|
+
it 'updates id but not_id' do
|
|
1989
|
+
expect(shirt.id).to eq(id)
|
|
1990
|
+
expect(shirt._id).not_to eq(id)
|
|
1991
|
+
end
|
|
1992
|
+
end
|
|
1993
|
+
|
|
1994
|
+
context 'id=' do
|
|
1995
|
+
before do
|
|
1996
|
+
shirt.id = id
|
|
1997
|
+
end
|
|
1998
|
+
|
|
1999
|
+
it 'sets id and not _id' do
|
|
2000
|
+
expect(shirt.id).to eq(id)
|
|
2001
|
+
expect(shirt._id).not_to eq(id)
|
|
2002
|
+
end
|
|
2003
|
+
end
|
|
2004
|
+
|
|
2005
|
+
context 'id?' do
|
|
2006
|
+
context 'with null id' do
|
|
2007
|
+
it 'returns false' do
|
|
2008
|
+
expect(shirt.id?).to be false
|
|
2009
|
+
expect(shirt._id?).to be true
|
|
2010
|
+
end
|
|
2011
|
+
end
|
|
2012
|
+
|
|
2013
|
+
context 'with id' do
|
|
2014
|
+
before do
|
|
2015
|
+
shirt.id = id
|
|
2016
|
+
end
|
|
2017
|
+
|
|
2018
|
+
it 'returns true' do
|
|
2019
|
+
expect(shirt.id?).to be true
|
|
2020
|
+
end
|
|
2021
|
+
end
|
|
2022
|
+
end
|
|
2023
|
+
end
|
|
2024
|
+
|
|
1654
2025
|
describe "#alias_attribute" do
|
|
1655
2026
|
|
|
1656
2027
|
let(:product) do
|
|
@@ -1697,8 +2068,8 @@ describe Mongoid::Attributes do
|
|
|
1697
2068
|
end
|
|
1698
2069
|
|
|
1699
2070
|
it "aliases *_before_type_cast" do
|
|
1700
|
-
product.cost = "
|
|
1701
|
-
expect(product.cost_before_type_cast).to eq("
|
|
2071
|
+
product.cost = "42"
|
|
2072
|
+
expect(product.cost_before_type_cast).to eq("42")
|
|
1702
2073
|
end
|
|
1703
2074
|
end
|
|
1704
2075
|
|
|
@@ -1742,7 +2113,7 @@ describe Mongoid::Attributes do
|
|
|
1742
2113
|
context "when persisting nil attributes" do
|
|
1743
2114
|
|
|
1744
2115
|
let!(:person) do
|
|
1745
|
-
Person.create(score: nil)
|
|
2116
|
+
Person.create!(score: nil)
|
|
1746
2117
|
end
|
|
1747
2118
|
|
|
1748
2119
|
it "has an entry in the attributes" do
|
|
@@ -1757,7 +2128,7 @@ describe Mongoid::Attributes do
|
|
|
1757
2128
|
end
|
|
1758
2129
|
|
|
1759
2130
|
it "saves the default" do
|
|
1760
|
-
expect { person.save }.to_not raise_error
|
|
2131
|
+
expect { person.save! }.to_not raise_error
|
|
1761
2132
|
expect(person.last_drink_taken_at).to eq(1.day.ago.in_time_zone("Alaska").to_date)
|
|
1762
2133
|
end
|
|
1763
2134
|
end
|
|
@@ -1767,7 +2138,7 @@ describe Mongoid::Attributes do
|
|
|
1767
2138
|
context "when no value exists in the database" do
|
|
1768
2139
|
|
|
1769
2140
|
let(:person) do
|
|
1770
|
-
Person.create
|
|
2141
|
+
Person.create!
|
|
1771
2142
|
end
|
|
1772
2143
|
|
|
1773
2144
|
it "applies the default value" do
|
|
@@ -1780,7 +2151,7 @@ describe Mongoid::Attributes do
|
|
|
1780
2151
|
context "when the value is not nil" do
|
|
1781
2152
|
|
|
1782
2153
|
let!(:person) do
|
|
1783
|
-
Person.create(age: 50)
|
|
2154
|
+
Person.create!(age: 50)
|
|
1784
2155
|
end
|
|
1785
2156
|
|
|
1786
2157
|
let(:from_db) do
|
|
@@ -1795,7 +2166,7 @@ describe Mongoid::Attributes do
|
|
|
1795
2166
|
context "when the value is explicitly nil" do
|
|
1796
2167
|
|
|
1797
2168
|
let!(:person) do
|
|
1798
|
-
Person.create(age: nil)
|
|
2169
|
+
Person.create!(age: nil)
|
|
1799
2170
|
end
|
|
1800
2171
|
|
|
1801
2172
|
let(:from_db) do
|
|
@@ -1810,7 +2181,7 @@ describe Mongoid::Attributes do
|
|
|
1810
2181
|
context "when the default is a proc" do
|
|
1811
2182
|
|
|
1812
2183
|
let!(:account) do
|
|
1813
|
-
Account.create(name: "savings", balance:
|
|
2184
|
+
Account.create!(name: "savings", balance: 100)
|
|
1814
2185
|
end
|
|
1815
2186
|
|
|
1816
2187
|
let(:from_db) do
|
|
@@ -1828,7 +2199,7 @@ describe Mongoid::Attributes do
|
|
|
1828
2199
|
|
|
1829
2200
|
context 'when the attribute is blank' do
|
|
1830
2201
|
let(:person) do
|
|
1831
|
-
Person.create(title: '')
|
|
2202
|
+
Person.create!(title: '')
|
|
1832
2203
|
end
|
|
1833
2204
|
|
|
1834
2205
|
it 'returns false' do
|
|
@@ -1838,7 +2209,7 @@ describe Mongoid::Attributes do
|
|
|
1838
2209
|
|
|
1839
2210
|
context 'when the attribute is localized' do
|
|
1840
2211
|
let(:person) do
|
|
1841
|
-
Person.create
|
|
2212
|
+
Person.create!
|
|
1842
2213
|
end
|
|
1843
2214
|
|
|
1844
2215
|
context 'after initialization when the field is nil' do
|
|
@@ -1870,7 +2241,7 @@ describe Mongoid::Attributes do
|
|
|
1870
2241
|
|
|
1871
2242
|
context 'when the attribute is not localized' do
|
|
1872
2243
|
let(:person) do
|
|
1873
|
-
Person.create(username: 'localized')
|
|
2244
|
+
Person.create!(username: 'localized')
|
|
1874
2245
|
end
|
|
1875
2246
|
|
|
1876
2247
|
before do
|
|
@@ -1882,4 +2253,459 @@ describe Mongoid::Attributes do
|
|
|
1882
2253
|
end
|
|
1883
2254
|
end
|
|
1884
2255
|
end
|
|
2256
|
+
|
|
2257
|
+
context "when an attribute is removed then set" do
|
|
2258
|
+
let(:cat) { Cat.create!(name: "Neil") }
|
|
2259
|
+
|
|
2260
|
+
before do
|
|
2261
|
+
cat.remove_attribute("name")
|
|
2262
|
+
cat.name = "Nissim"
|
|
2263
|
+
cat.save!
|
|
2264
|
+
cat.reload
|
|
2265
|
+
end
|
|
2266
|
+
|
|
2267
|
+
it "correctly sets the attribute" do
|
|
2268
|
+
expect(cat.name).to eq("Nissim")
|
|
2269
|
+
end
|
|
2270
|
+
end
|
|
2271
|
+
|
|
2272
|
+
describe "attributes after setting an association without reloading" do
|
|
2273
|
+
|
|
2274
|
+
context "on embeds_many" do
|
|
2275
|
+
|
|
2276
|
+
context "when not setting anything" do
|
|
2277
|
+
let(:doc) { NestedBook.create! }
|
|
2278
|
+
|
|
2279
|
+
it "doesn't add attributes" do
|
|
2280
|
+
expect(doc.attributes).to_not have_key("pages")
|
|
2281
|
+
end
|
|
2282
|
+
|
|
2283
|
+
it "has the same attributes after reloading" do
|
|
2284
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2285
|
+
end
|
|
2286
|
+
end
|
|
2287
|
+
|
|
2288
|
+
context "when using nested attributes" do
|
|
2289
|
+
let(:doc) { NestedBook.create! }
|
|
2290
|
+
|
|
2291
|
+
before do
|
|
2292
|
+
doc.update_attributes({ pages_attributes: [ {} ] })
|
|
2293
|
+
end
|
|
2294
|
+
|
|
2295
|
+
it "updates the attributes" do
|
|
2296
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2297
|
+
end
|
|
2298
|
+
|
|
2299
|
+
it "has the same attributes after reloading" do
|
|
2300
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2301
|
+
end
|
|
2302
|
+
end
|
|
2303
|
+
|
|
2304
|
+
context "when doing assignments" do
|
|
2305
|
+
let(:doc) { NestedBook.create! }
|
|
2306
|
+
before do
|
|
2307
|
+
doc.pages = [NestedPage.new]
|
|
2308
|
+
end
|
|
2309
|
+
|
|
2310
|
+
it "updates the attributes" do
|
|
2311
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2312
|
+
end
|
|
2313
|
+
|
|
2314
|
+
it "has the same attributes after reloading" do
|
|
2315
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2316
|
+
end
|
|
2317
|
+
end
|
|
2318
|
+
|
|
2319
|
+
context "when replacing assignments" do
|
|
2320
|
+
let(:doc) { NestedBook.create! }
|
|
2321
|
+
before do
|
|
2322
|
+
doc.pages = [NestedPage.new(number: 1)]
|
|
2323
|
+
doc.pages = [NestedPage.new(number: 2)]
|
|
2324
|
+
end
|
|
2325
|
+
|
|
2326
|
+
it "updates the attributes" do
|
|
2327
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id, "number" => 2 }])
|
|
2328
|
+
end
|
|
2329
|
+
|
|
2330
|
+
it "has the same attributes after reloading" do
|
|
2331
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2332
|
+
end
|
|
2333
|
+
end
|
|
2334
|
+
|
|
2335
|
+
context "when setting to nil" do
|
|
2336
|
+
let(:doc) { NestedBook.create! }
|
|
2337
|
+
before do
|
|
2338
|
+
doc.pages = [NestedPage.new(number: 1)]
|
|
2339
|
+
doc.pages = nil
|
|
2340
|
+
end
|
|
2341
|
+
|
|
2342
|
+
it "updates the attributes" do
|
|
2343
|
+
expect(doc.attributes).to_not have_key("pages")
|
|
2344
|
+
end
|
|
2345
|
+
|
|
2346
|
+
it "has the same attributes after reloading" do
|
|
2347
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
|
2348
|
+
end
|
|
2349
|
+
end
|
|
2350
|
+
|
|
2351
|
+
context "when setting to nil and back" do
|
|
2352
|
+
let(:doc) { NestedBook.create! }
|
|
2353
|
+
let(:page) { NestedPage.new }
|
|
2354
|
+
before do
|
|
2355
|
+
doc.pages = [page]
|
|
2356
|
+
doc.pages = nil
|
|
2357
|
+
doc.pages = [page]
|
|
2358
|
+
end
|
|
2359
|
+
|
|
2360
|
+
it "updates the attributes" do
|
|
2361
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2362
|
+
end
|
|
2363
|
+
|
|
2364
|
+
it "has the same attributes after reloading" do
|
|
2365
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2366
|
+
end
|
|
2367
|
+
end
|
|
2368
|
+
|
|
2369
|
+
context "when pushing" do
|
|
2370
|
+
let(:doc) { NestedBook.create! }
|
|
2371
|
+
before do
|
|
2372
|
+
doc.pages << NestedPage.new
|
|
2373
|
+
end
|
|
2374
|
+
|
|
2375
|
+
it "updates the attributes" do
|
|
2376
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2377
|
+
end
|
|
2378
|
+
|
|
2379
|
+
it "has the same attributes after reloading" do
|
|
2380
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2381
|
+
end
|
|
2382
|
+
end
|
|
2383
|
+
|
|
2384
|
+
[:shift, :pop].each do |meth|
|
|
2385
|
+
context "when performing #{meth}" do
|
|
2386
|
+
let(:doc) { NestedBook.create! }
|
|
2387
|
+
before do
|
|
2388
|
+
doc.pages << NestedPage.new
|
|
2389
|
+
doc.pages << NestedPage.new
|
|
2390
|
+
doc.pages << NestedPage.new
|
|
2391
|
+
|
|
2392
|
+
doc.pages.send(meth, 2)
|
|
2393
|
+
end
|
|
2394
|
+
|
|
2395
|
+
it "updates the attributes" do
|
|
2396
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2397
|
+
end
|
|
2398
|
+
|
|
2399
|
+
it "has the same attributes after reloading" do
|
|
2400
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2401
|
+
end
|
|
2402
|
+
end
|
|
2403
|
+
end
|
|
2404
|
+
|
|
2405
|
+
context "when concatting" do
|
|
2406
|
+
let(:doc) { NestedBook.create! }
|
|
2407
|
+
before do
|
|
2408
|
+
doc.pages << NestedPage.new
|
|
2409
|
+
doc.pages.concat([NestedPage.new, NestedPage.new])
|
|
2410
|
+
end
|
|
2411
|
+
|
|
2412
|
+
it "updates the attributes" do
|
|
2413
|
+
expect(doc.attributes["pages"].count).to eq 3
|
|
2414
|
+
end
|
|
2415
|
+
|
|
2416
|
+
it "has the same attributes after reloading" do
|
|
2417
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2418
|
+
end
|
|
2419
|
+
end
|
|
2420
|
+
|
|
2421
|
+
[:build, :create].each do |meth|
|
|
2422
|
+
context "when preforming #{meth}" do
|
|
2423
|
+
let(:doc) { NestedBook.create! }
|
|
2424
|
+
before do
|
|
2425
|
+
doc.pages.send(meth)
|
|
2426
|
+
end
|
|
2427
|
+
|
|
2428
|
+
it "updates the attributes" do
|
|
2429
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2430
|
+
end
|
|
2431
|
+
|
|
2432
|
+
it "has the same attributes after reloading" do
|
|
2433
|
+
doc.pages.first.save
|
|
2434
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2435
|
+
end
|
|
2436
|
+
end
|
|
2437
|
+
end
|
|
2438
|
+
|
|
2439
|
+
context "when clearing" do
|
|
2440
|
+
let(:doc) { NestedBook.create! }
|
|
2441
|
+
before do
|
|
2442
|
+
doc.pages << NestedPage.new
|
|
2443
|
+
doc.pages << NestedPage.new
|
|
2444
|
+
doc.pages << NestedPage.new
|
|
2445
|
+
|
|
2446
|
+
doc.pages.clear
|
|
2447
|
+
end
|
|
2448
|
+
|
|
2449
|
+
it "updates the attributes" do
|
|
2450
|
+
expect(doc.attributes).to_not have_key("pages")
|
|
2451
|
+
end
|
|
2452
|
+
|
|
2453
|
+
it "has the same attributes after reloading" do
|
|
2454
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2455
|
+
end
|
|
2456
|
+
end
|
|
2457
|
+
|
|
2458
|
+
[:delete_all, :destroy_all, :remove_all].each do |meth|
|
|
2459
|
+
context "when performing: #{meth}" do
|
|
2460
|
+
let(:doc) { NestedBook.create! }
|
|
2461
|
+
before do
|
|
2462
|
+
doc.pages << NestedPage.new
|
|
2463
|
+
doc.pages << NestedPage.new
|
|
2464
|
+
doc.pages << NestedPage.new
|
|
2465
|
+
|
|
2466
|
+
doc.pages.send(meth)
|
|
2467
|
+
end
|
|
2468
|
+
|
|
2469
|
+
it "updates the attributes" do
|
|
2470
|
+
expect(doc.attributes).to_not have_key("pages")
|
|
2471
|
+
end
|
|
2472
|
+
|
|
2473
|
+
it "has the same attributes after reloading" do
|
|
2474
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
|
2475
|
+
end
|
|
2476
|
+
end
|
|
2477
|
+
end
|
|
2478
|
+
|
|
2479
|
+
context "when deleting" do
|
|
2480
|
+
let(:doc) { NestedBook.create! }
|
|
2481
|
+
let(:page) { NestedPage.new }
|
|
2482
|
+
before do
|
|
2483
|
+
doc.pages << page
|
|
2484
|
+
doc.pages << NestedPage.new
|
|
2485
|
+
doc.pages << NestedPage.new
|
|
2486
|
+
|
|
2487
|
+
doc.pages.delete(page)
|
|
2488
|
+
end
|
|
2489
|
+
|
|
2490
|
+
it "updates the attributes" do
|
|
2491
|
+
expect(doc.attributes["pages"].count).to eq 2
|
|
2492
|
+
end
|
|
2493
|
+
|
|
2494
|
+
it "has the same attributes after reloading" do
|
|
2495
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2496
|
+
end
|
|
2497
|
+
end
|
|
2498
|
+
|
|
2499
|
+
context "when doing _remove" do
|
|
2500
|
+
let(:doc) { NestedBook.create! }
|
|
2501
|
+
let(:page) { NestedPage.new }
|
|
2502
|
+
before do
|
|
2503
|
+
doc.pages << page
|
|
2504
|
+
doc.pages << NestedPage.new
|
|
2505
|
+
doc.pages << NestedPage.new
|
|
2506
|
+
|
|
2507
|
+
doc.pages._remove(page)
|
|
2508
|
+
end
|
|
2509
|
+
|
|
2510
|
+
it "updates the attributes" do
|
|
2511
|
+
expect(doc.attributes["pages"].count).to eq 2
|
|
2512
|
+
end
|
|
2513
|
+
end
|
|
2514
|
+
|
|
2515
|
+
context "when assigning an array of hashes" do
|
|
2516
|
+
let(:doc) { NestedBook.create! }
|
|
2517
|
+
before do
|
|
2518
|
+
doc.pages = [{}]
|
|
2519
|
+
end
|
|
2520
|
+
|
|
2521
|
+
it "updates the attributes" do
|
|
2522
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2523
|
+
end
|
|
2524
|
+
|
|
2525
|
+
it "has the same attributes after reloading" do
|
|
2526
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2527
|
+
end
|
|
2528
|
+
end
|
|
2529
|
+
|
|
2530
|
+
context "when assigning twice" do
|
|
2531
|
+
let(:doc) { NestedBook.create! }
|
|
2532
|
+
before do
|
|
2533
|
+
doc.pages = [{ number: 1 }]
|
|
2534
|
+
doc.pages = [{}]
|
|
2535
|
+
end
|
|
2536
|
+
|
|
2537
|
+
it "updates the attributes" do
|
|
2538
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2539
|
+
end
|
|
2540
|
+
|
|
2541
|
+
it "has the same attributes after reloading" do
|
|
2542
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2543
|
+
end
|
|
2544
|
+
end
|
|
2545
|
+
end
|
|
2546
|
+
|
|
2547
|
+
context "on embeds_one" do
|
|
2548
|
+
|
|
2549
|
+
let(:attrs) { { "title" => "Title" } }
|
|
2550
|
+
|
|
2551
|
+
context "when using nested attributes" do
|
|
2552
|
+
let(:doc) { NestedBook.create! }
|
|
2553
|
+
|
|
2554
|
+
before do
|
|
2555
|
+
doc.update_attributes({ cover_attributes: attrs })
|
|
2556
|
+
end
|
|
2557
|
+
|
|
2558
|
+
it "updates the attributes" do
|
|
2559
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2560
|
+
end
|
|
2561
|
+
|
|
2562
|
+
it "has the same attributes after reloading" do
|
|
2563
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2564
|
+
end
|
|
2565
|
+
end
|
|
2566
|
+
|
|
2567
|
+
context "when doing assignments" do
|
|
2568
|
+
let(:doc) { NestedBook.create! }
|
|
2569
|
+
before do
|
|
2570
|
+
doc.cover = NestedCover.new(attrs)
|
|
2571
|
+
end
|
|
2572
|
+
|
|
2573
|
+
it "updates the attributes" do
|
|
2574
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2575
|
+
end
|
|
2576
|
+
|
|
2577
|
+
it "has the same attributes after reloading" do
|
|
2578
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2579
|
+
end
|
|
2580
|
+
end
|
|
2581
|
+
|
|
2582
|
+
context "when replacing assignments" do
|
|
2583
|
+
let(:doc) { NestedBook.create! }
|
|
2584
|
+
before do
|
|
2585
|
+
doc.cover = NestedCover.new("title" => "Title1")
|
|
2586
|
+
doc.cover = NestedCover.new(attrs)
|
|
2587
|
+
end
|
|
2588
|
+
|
|
2589
|
+
it "updates the attributes" do
|
|
2590
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2591
|
+
end
|
|
2592
|
+
|
|
2593
|
+
it "has the same attributes after reloading" do
|
|
2594
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2595
|
+
end
|
|
2596
|
+
end
|
|
2597
|
+
|
|
2598
|
+
context "when setting to nil" do
|
|
2599
|
+
let(:doc) { NestedBook.create! }
|
|
2600
|
+
before do
|
|
2601
|
+
doc.cover = NestedCover.new(attrs)
|
|
2602
|
+
doc.cover = nil
|
|
2603
|
+
end
|
|
2604
|
+
|
|
2605
|
+
it "updates the attributes" do
|
|
2606
|
+
expect(doc.attributes.key?("cover")).to be false
|
|
2607
|
+
end
|
|
2608
|
+
|
|
2609
|
+
it "has the same attributes after reloading" do
|
|
2610
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2611
|
+
end
|
|
2612
|
+
end
|
|
2613
|
+
|
|
2614
|
+
context "when setting to nil and back" do
|
|
2615
|
+
let(:doc) { NestedBook.create! }
|
|
2616
|
+
before do
|
|
2617
|
+
doc.cover = NestedCover.new(attrs)
|
|
2618
|
+
doc.cover = nil
|
|
2619
|
+
doc.cover = NestedCover.new(attrs)
|
|
2620
|
+
end
|
|
2621
|
+
|
|
2622
|
+
it "updates the attributes" do
|
|
2623
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2624
|
+
end
|
|
2625
|
+
|
|
2626
|
+
|
|
2627
|
+
it "has the same attributes after reloading" do
|
|
2628
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2629
|
+
end
|
|
2630
|
+
end
|
|
2631
|
+
|
|
2632
|
+
[:build, :create].each do |meth|
|
|
2633
|
+
context "when preforming #{meth}" do
|
|
2634
|
+
let(:doc) { NestedBook.create! }
|
|
2635
|
+
before do
|
|
2636
|
+
doc.send("#{meth}_cover", attrs)
|
|
2637
|
+
end
|
|
2638
|
+
|
|
2639
|
+
it "updates the attributes" do
|
|
2640
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2641
|
+
end
|
|
2642
|
+
|
|
2643
|
+
it "has the same attributes after reloading" do
|
|
2644
|
+
doc.cover.save
|
|
2645
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2646
|
+
end
|
|
2647
|
+
end
|
|
2648
|
+
end
|
|
2649
|
+
|
|
2650
|
+
context "when assigning a hash" do
|
|
2651
|
+
let(:doc) { NestedBook.create! }
|
|
2652
|
+
before do
|
|
2653
|
+
doc.cover = attrs
|
|
2654
|
+
end
|
|
2655
|
+
|
|
2656
|
+
it "updates the attributes" do
|
|
2657
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2658
|
+
end
|
|
2659
|
+
|
|
2660
|
+
it "has the same attributes after reloading" do
|
|
2661
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2662
|
+
end
|
|
2663
|
+
end
|
|
2664
|
+
|
|
2665
|
+
context "when assigning twice" do
|
|
2666
|
+
let(:doc) { NestedBook.create! }
|
|
2667
|
+
before do
|
|
2668
|
+
doc.cover = { "title" => "1984" }
|
|
2669
|
+
doc.cover = attrs
|
|
2670
|
+
end
|
|
2671
|
+
|
|
2672
|
+
it "updates the attributes" do
|
|
2673
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2674
|
+
end
|
|
2675
|
+
|
|
2676
|
+
it "has the same attributes after reloading" do
|
|
2677
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2678
|
+
end
|
|
2679
|
+
end
|
|
2680
|
+
end
|
|
2681
|
+
end
|
|
2682
|
+
|
|
2683
|
+
context "when modifiying a hash referenced with the [] notation" do
|
|
2684
|
+
let(:church) { Church.create!(location: { x: 1 }) }
|
|
2685
|
+
|
|
2686
|
+
before do
|
|
2687
|
+
church[:location].merge!(y: 2)
|
|
2688
|
+
church.save!
|
|
2689
|
+
church.reload
|
|
2690
|
+
end
|
|
2691
|
+
|
|
2692
|
+
it "persists the updated hash" do
|
|
2693
|
+
church.location.should == { "x" => 1, "y" => 2 }
|
|
2694
|
+
end
|
|
2695
|
+
end
|
|
2696
|
+
|
|
2697
|
+
context "when modifiying a set referenced with the [] notation" do
|
|
2698
|
+
let(:catalog) { Catalog.create!(set_field: [ 1 ].to_set) }
|
|
2699
|
+
|
|
2700
|
+
before do
|
|
2701
|
+
catalog[:set_field] << 2
|
|
2702
|
+
catalog.save!
|
|
2703
|
+
catalog.reload
|
|
2704
|
+
end
|
|
2705
|
+
|
|
2706
|
+
it "persists the updated hash" do
|
|
2707
|
+
pending "MONGOID-2951"
|
|
2708
|
+
catalog.set_field.should == Set.new([ 1, 2 ])
|
|
2709
|
+
end
|
|
2710
|
+
end
|
|
1885
2711
|
end
|