mongoid 7.0.2 → 8.1.1
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 +33 -33
- data/LICENSE +1 -0
- data/README.md +34 -20
- data/Rakefile +100 -5
- data/lib/config/locales/en.yml +220 -105
- data/lib/mongoid/association/accessors.rb +176 -84
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +9 -15
- data/lib/mongoid/association/constrainable.rb +5 -7
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +31 -10
- data/lib/mongoid/association/embedded/batchable.rb +68 -54
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +27 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +16 -25
- data/lib/mongoid/association/embedded/embedded_in.rb +9 -28
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +10 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +156 -135
- data/lib/mongoid/association/embedded/embeds_many.rb +10 -37
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +27 -10
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +64 -30
- data/lib/mongoid/association/embedded/embeds_one.rb +11 -34
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +65 -41
- data/lib/mongoid/association/many.rb +25 -35
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +22 -30
- data/lib/mongoid/association/nested/nested_buildable.rb +9 -15
- data/lib/mongoid/association/nested/one.rb +57 -30
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +5 -12
- data/lib/mongoid/association/options.rb +16 -46
- data/lib/mongoid/association/proxy.rb +52 -40
- data/lib/mongoid/association/referenced/auto_save.rb +9 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +5 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -31
- data/lib/mongoid/association/referenced/belongs_to.rb +16 -38
- data/lib/mongoid/association/referenced/counter_cache.rb +14 -25
- data/lib/mongoid/association/referenced/eager.rb +42 -38
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +106 -67
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +29 -46
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +440 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +104 -127
- data/lib/mongoid/association/referenced/has_many.rb +21 -45
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +16 -29
- data/lib/mongoid/association/referenced/has_one/proxy.rb +25 -30
- data/lib/mongoid/association/referenced/has_one.rb +16 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -26
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +149 -89
- data/lib/mongoid/association.rb +13 -27
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +23 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +49 -47
- data/lib/mongoid/attributes/dynamic.rb +22 -36
- data/lib/mongoid/attributes/nested.rb +12 -15
- data/lib/mongoid/attributes/processing.rb +19 -27
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +6 -9
- data/lib/mongoid/attributes.rb +103 -100
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +152 -73
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +21 -18
- data/lib/mongoid/clients/sessions.rb +10 -10
- data/lib/mongoid/clients/storage_options.rb +9 -17
- data/lib/mongoid/clients/validators/storage.rb +5 -24
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +7 -9
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +51 -13
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +3 -1
- data/lib/mongoid/config.rb +235 -48
- data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
- data/lib/mongoid/contextual/aggregable/mongo.rb +32 -33
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +13 -44
- data/lib/mongoid/contextual/map_reduce.rb +7 -35
- data/lib/mongoid/contextual/memory.rb +387 -81
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +641 -283
- data/lib/mongoid/contextual/none.rb +264 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +21 -11
- data/lib/mongoid/copyable.rb +46 -17
- data/lib/mongoid/criteria/findable.rb +20 -20
- data/lib/mongoid/criteria/includable.rb +32 -34
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +15 -21
- data/lib/mongoid/criteria/options.rb +4 -5
- data/lib/mongoid/criteria/permission.rb +3 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +4 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +28 -8
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +11 -12
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +6 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +49 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +12 -19
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +7 -32
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +7 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +10 -10
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +19 -7
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +105 -31
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +205 -44
- data/lib/mongoid/criteria/queryable/optional.rb +16 -65
- data/lib/mongoid/criteria/queryable/options.rb +4 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +471 -168
- data/lib/mongoid/criteria/queryable/selector.rb +133 -58
- data/lib/mongoid/criteria/queryable/smash.rb +42 -18
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +18 -15
- data/lib/mongoid/criteria/scopable.rb +29 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +106 -111
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +162 -103
- data/lib/mongoid/equality.rb +35 -18
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +35 -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 +2 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +3 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +3 -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 +8 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +5 -10
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +3 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +4 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +6 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +3 -4
- data/lib/mongoid/errors/no_client_hosts.rb +3 -4
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +3 -4
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -1
- data/lib/mongoid/errors/unknown_attribute.rb +3 -4
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +18 -4
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +37 -44
- data/lib/mongoid/extensions/big_decimal.rb +35 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +10 -6
- data/lib/mongoid/extensions/date.rb +32 -25
- data/lib/mongoid/extensions/date_time.rb +5 -13
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +5 -8
- data/lib/mongoid/extensions/float.rb +12 -14
- data/lib/mongoid/extensions/hash.rb +64 -42
- data/lib/mongoid/extensions/integer.rb +12 -16
- data/lib/mongoid/extensions/module.rb +3 -4
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +27 -52
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +14 -7
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +35 -64
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +38 -22
- data/lib/mongoid/extensions/time_with_zone.rb +26 -9
- data/lib/mongoid/extensions/true_class.rb +5 -8
- data/lib/mongoid/extensions.rb +19 -3
- data/lib/mongoid/factory.rb +104 -17
- data/lib/mongoid/fields/foreign_key.rb +14 -26
- data/lib/mongoid/fields/localized.rb +21 -15
- data/lib/mongoid/fields/standard.rb +23 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +349 -76
- data/lib/mongoid/findable.rb +115 -34
- data/lib/mongoid/indexable/specification.rb +5 -18
- data/lib/mongoid/indexable/validators/options.rb +8 -9
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +85 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +4 -154
- 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 +23 -30
- data/lib/mongoid/persistable/deletable.rb +7 -23
- data/lib/mongoid/persistable/destroyable.rb +12 -11
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +14 -10
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +16 -9
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +10 -10
- data/lib/mongoid/persistable/updatable.rb +99 -30
- data/lib/mongoid/persistable/upsertable.rb +23 -9
- data/lib/mongoid/persistable.rb +138 -40
- data/lib/mongoid/persistence_context.rb +107 -52
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +18 -234
- data/lib/mongoid/railtie.rb +20 -16
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +16 -2
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +37 -60
- data/lib/mongoid/selectable.rb +8 -18
- data/lib/mongoid/serializable.rb +33 -34
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +60 -20
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +24 -5
- data/lib/mongoid/tasks/database.rb +105 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +80 -67
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +4 -3
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +5 -6
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +54 -25
- data/lib/mongoid/traversable.rb +185 -61
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +3 -4
- data/lib/mongoid/validatable/macros.rb +8 -15
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +30 -42
- data/lib/mongoid/validatable.rb +16 -32
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +50 -17
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -32
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +29 -3
- 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 +33 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +283 -0
- 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 +107 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- 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 +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- 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 +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +74 -0
- data/spec/integration/matcher_examples_spec.rb +765 -0
- 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 +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +35 -33
- data/spec/mongoid/association/depending_spec.rb +431 -338
- data/spec/mongoid/association/eager_spec.rb +8 -5
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +4 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +152 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +61 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +114 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +706 -197
- data/spec/mongoid/association/embedded/embeds_many_models.rb +227 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +81 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +27 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +38 -23
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +73 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +77 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +4 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +111 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +266 -17
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +114 -58
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +96 -29
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +67 -4
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +559 -385
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +92 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +84 -7
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +132 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +415 -129
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +859 -502
- data/spec/mongoid/association/referenced/has_many_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +51 -3
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +55 -9
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +135 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +113 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +87 -7
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +48 -32
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +93 -12
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +149 -78
- 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 +24 -22
- data/spec/mongoid/attributes_spec.rb +895 -54
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +484 -67
- data/spec/mongoid/clients/factory_spec.rb +139 -33
- data/spec/mongoid/clients/options_spec.rb +76 -54
- data/spec/mongoid/clients/sessions_spec.rb +35 -63
- data/spec/mongoid/clients/transactions_spec.rb +87 -41
- data/spec/mongoid/clients_spec.rb +257 -31
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +126 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +507 -2
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- 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 +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +242 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +22 -19
- data/spec/mongoid/contextual/memory_spec.rb +1828 -303
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3505 -1268
- data/spec/mongoid/contextual/none_spec.rb +80 -67
- data/spec/mongoid/copyable_spec.rb +697 -40
- data/spec/mongoid/copyable_spec_models.rb +47 -0
- data/spec/mongoid/criteria/findable_spec.rb +161 -228
- 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 +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +20 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +100 -48
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +9 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +136 -26
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +46 -17
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -15
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +119 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +7 -70
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +53 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +41 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +18 -485
- data/spec/mongoid/criteria/queryable/options_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2538 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1193 -2934
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +56 -5
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +210 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1334 -1719
- data/spec/mongoid/document_fields_spec.rb +262 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +212 -67
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +78 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +7 -5
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +24 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +5 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +4 -2
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -1
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +41 -45
- data/spec/mongoid/extensions/big_decimal_spec.rb +715 -213
- data/spec/mongoid/extensions/binary_spec.rb +46 -9
- data/spec/mongoid/extensions/boolean_spec.rb +70 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +58 -140
- data/spec/mongoid/extensions/date_time_spec.rb +32 -69
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +66 -73
- data/spec/mongoid/extensions/hash_spec.rb +135 -0
- data/spec/mongoid/extensions/integer_spec.rb +61 -63
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +257 -54
- data/spec/mongoid/extensions/regexp_spec.rb +70 -20
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +146 -57
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +20 -25
- data/spec/mongoid/extensions/time_spec.rb +668 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +57 -83
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +347 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +86 -41
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +869 -114
- data/spec/mongoid/findable_spec.rb +521 -65
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +87 -32
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +761 -98
- data/spec/mongoid/interceptable_spec_models.rb +307 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- 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 +114 -29
- data/spec/mongoid/persistable/deletable_spec.rb +300 -18
- data/spec/mongoid/persistable/destroyable_spec.rb +228 -18
- data/spec/mongoid/persistable/incrementable_spec.rb +66 -13
- data/spec/mongoid/persistable/logical_spec.rb +56 -3
- data/spec/mongoid/persistable/poppable_spec.rb +55 -3
- data/spec/mongoid/persistable/pullable_spec.rb +108 -6
- data/spec/mongoid/persistable/pushable_spec.rb +163 -7
- data/spec/mongoid/persistable/renamable_spec.rb +54 -2
- data/spec/mongoid/persistable/savable_spec.rb +284 -25
- data/spec/mongoid/persistable/settable_spec.rb +91 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +55 -3
- data/spec/mongoid/persistable/updatable_spec.rb +63 -49
- data/spec/mongoid/persistable/upsertable_spec.rb +93 -3
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +60 -59
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
- data/spec/mongoid/query_cache_spec.rb +446 -78
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +381 -26
- data/spec/mongoid/scopable_spec.rb +206 -38
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +148 -38
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +153 -9
- data/spec/mongoid/tasks/database_rake_spec.rb +89 -13
- data/spec/mongoid/tasks/database_spec.rb +130 -1
- data/spec/mongoid/threaded_spec.rb +72 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +400 -10
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +568 -33
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1145 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +159 -103
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +36 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- data/spec/rails/mongoid_spec.rb +8 -18
- 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 +74 -88
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +77 -0
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +129 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -1
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +10 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +3 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +4 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/support/models/circus.rb +12 -0
- data/spec/{app → support}/models/code.rb +4 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- 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 +2 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +11 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +6 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +3 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +22 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +4 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +3 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +3 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- 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 +53 -0
- data/spec/support/spec_config.rb +64 -0
- data.tar.gz.sig +1 -2
- metadata +1158 -615
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/errors/eager_load.rb +0 -22
- data/lib/mongoid/errors/invalid_value.rb +0 -16
- data/lib/mongoid/matchable/all.rb +0 -27
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -72
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -58
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -58
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -130
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
4
|
+
require_relative './attributes/nested_spec_models'
|
|
2
5
|
|
|
3
6
|
describe Mongoid::Attributes do
|
|
4
7
|
|
|
@@ -18,7 +21,7 @@ describe Mongoid::Attributes do
|
|
|
18
21
|
context "when the attribute was excluded in a criteria" do
|
|
19
22
|
|
|
20
23
|
let!(:person) do
|
|
21
|
-
Person.create(title: "sir")
|
|
24
|
+
Person.create!(title: "sir")
|
|
22
25
|
end
|
|
23
26
|
|
|
24
27
|
context "when the attribute is localized" do
|
|
@@ -53,7 +56,7 @@ describe Mongoid::Attributes do
|
|
|
53
56
|
let!(:agent) do
|
|
54
57
|
agent = Agent.new(:title => title)
|
|
55
58
|
agent.build_address(:city => city)
|
|
56
|
-
agent.save()
|
|
59
|
+
agent.save!()
|
|
57
60
|
agent
|
|
58
61
|
end
|
|
59
62
|
let(:from_db) do
|
|
@@ -93,6 +96,49 @@ describe Mongoid::Attributes do
|
|
|
93
96
|
it "does not raise an error" do
|
|
94
97
|
expect(from_db.map).to eq(map)
|
|
95
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
|
|
96
142
|
end
|
|
97
143
|
end
|
|
98
144
|
|
|
@@ -153,7 +199,7 @@ describe Mongoid::Attributes do
|
|
|
153
199
|
context 'when the document has a custom attribute type' do
|
|
154
200
|
|
|
155
201
|
let(:bar) do
|
|
156
|
-
Bar.create(lat_lng: LatLng.new(52.30, 13.25))
|
|
202
|
+
Bar.create!(lat_lng: LatLng.new(52.30, 13.25))
|
|
157
203
|
end
|
|
158
204
|
|
|
159
205
|
it 'returns the demongoized version of the attribute' do
|
|
@@ -210,7 +256,7 @@ describe Mongoid::Attributes do
|
|
|
210
256
|
context "when the document is an existing record" do
|
|
211
257
|
|
|
212
258
|
let!(:person) do
|
|
213
|
-
Person.create(title: "sir")
|
|
259
|
+
Person.create!(title: "sir")
|
|
214
260
|
end
|
|
215
261
|
|
|
216
262
|
context "when the attribute was excluded in a criteria" do
|
|
@@ -242,6 +288,91 @@ describe Mongoid::Attributes do
|
|
|
242
288
|
end
|
|
243
289
|
end
|
|
244
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
|
+
|
|
245
376
|
context "when the attribute does not exist" do
|
|
246
377
|
|
|
247
378
|
before do
|
|
@@ -262,11 +393,10 @@ describe Mongoid::Attributes do
|
|
|
262
393
|
end
|
|
263
394
|
|
|
264
395
|
context "when reloaded" do
|
|
396
|
+
config_override :raise_not_found_error, false
|
|
265
397
|
|
|
266
398
|
before do
|
|
267
|
-
Mongoid.raise_not_found_error = false
|
|
268
399
|
person.reload
|
|
269
|
-
Mongoid.raise_not_found_error = true
|
|
270
400
|
end
|
|
271
401
|
|
|
272
402
|
it "returns the default value" do
|
|
@@ -284,7 +414,7 @@ describe Mongoid::Attributes do
|
|
|
284
414
|
let(:bar) do
|
|
285
415
|
Bar.new.tap do |b|
|
|
286
416
|
b[:lat_lng] = LatLng.new(52.30, 13.25)
|
|
287
|
-
b.save
|
|
417
|
+
b.save!
|
|
288
418
|
end
|
|
289
419
|
end
|
|
290
420
|
|
|
@@ -326,6 +456,67 @@ describe Mongoid::Attributes do
|
|
|
326
456
|
expect(terms).to eq(true)
|
|
327
457
|
end
|
|
328
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
|
|
329
520
|
end
|
|
330
521
|
|
|
331
522
|
describe "#_id" do
|
|
@@ -796,7 +987,7 @@ describe Mongoid::Attributes do
|
|
|
796
987
|
context 'when the document has a custom attribute type' do
|
|
797
988
|
|
|
798
989
|
let(:bar) do
|
|
799
|
-
Bar.create(lat_lng: LatLng.new(52.30, 13.25))
|
|
990
|
+
Bar.create!(lat_lng: LatLng.new(52.30, 13.25))
|
|
800
991
|
end
|
|
801
992
|
|
|
802
993
|
it 'returns the demongoized version of the attribute' do
|
|
@@ -834,18 +1025,17 @@ describe Mongoid::Attributes do
|
|
|
834
1025
|
context "when the document is an existing record" do
|
|
835
1026
|
|
|
836
1027
|
let(:person) do
|
|
837
|
-
Person.create
|
|
1028
|
+
Person.create!
|
|
838
1029
|
end
|
|
839
1030
|
|
|
840
1031
|
context "when the attribute does not exist" do
|
|
1032
|
+
config_override :raise_not_found_error, false
|
|
841
1033
|
|
|
842
1034
|
before do
|
|
843
1035
|
person.collection
|
|
844
1036
|
.find({ _id: person.id })
|
|
845
1037
|
.update_one({ "$unset" => { age: 1 }})
|
|
846
|
-
Mongoid.raise_not_found_error = false
|
|
847
1038
|
person.reload
|
|
848
|
-
Mongoid.raise_not_found_error = true
|
|
849
1039
|
end
|
|
850
1040
|
|
|
851
1041
|
it "returns the default value" do
|
|
@@ -873,7 +1063,7 @@ describe Mongoid::Attributes do
|
|
|
873
1063
|
describe "#read_attribute_before_type_cast" do
|
|
874
1064
|
|
|
875
1065
|
let(:person) do
|
|
876
|
-
Person.create
|
|
1066
|
+
Person.create!
|
|
877
1067
|
end
|
|
878
1068
|
|
|
879
1069
|
context "when the attribute has not yet been assigned" do
|
|
@@ -886,8 +1076,52 @@ describe Mongoid::Attributes do
|
|
|
886
1076
|
context "after the attribute has been assigned" do
|
|
887
1077
|
|
|
888
1078
|
it "returns the default value" do
|
|
889
|
-
person.age = "
|
|
890
|
-
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
|
|
891
1125
|
end
|
|
892
1126
|
end
|
|
893
1127
|
end
|
|
@@ -921,18 +1155,17 @@ describe Mongoid::Attributes do
|
|
|
921
1155
|
context "when the document is an existing record" do
|
|
922
1156
|
|
|
923
1157
|
let(:person) do
|
|
924
|
-
Person.create
|
|
1158
|
+
Person.create!
|
|
925
1159
|
end
|
|
926
1160
|
|
|
927
1161
|
context "when the attribute does not exist" do
|
|
1162
|
+
config_override :raise_not_found_error, false
|
|
928
1163
|
|
|
929
1164
|
before do
|
|
930
1165
|
person.collection
|
|
931
1166
|
.find({ _id: person.id })
|
|
932
1167
|
.update_one({ "$unset" => { age: 1 }})
|
|
933
|
-
Mongoid.raise_not_found_error = false
|
|
934
1168
|
person.reload
|
|
935
|
-
Mongoid.raise_not_found_error = true
|
|
936
1169
|
end
|
|
937
1170
|
|
|
938
1171
|
it "returns true" do
|
|
@@ -980,7 +1213,7 @@ describe Mongoid::Attributes do
|
|
|
980
1213
|
|
|
981
1214
|
context "when the attribute is not on only list" do
|
|
982
1215
|
|
|
983
|
-
before { Person.create }
|
|
1216
|
+
before { Person.create! }
|
|
984
1217
|
let(:person) do
|
|
985
1218
|
Person.only(:id).first
|
|
986
1219
|
end
|
|
@@ -1030,15 +1263,15 @@ describe Mongoid::Attributes do
|
|
|
1030
1263
|
|
|
1031
1264
|
context "before the attribute has been assigned" do
|
|
1032
1265
|
|
|
1033
|
-
it "returns
|
|
1034
|
-
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
|
|
1035
1268
|
end
|
|
1036
1269
|
end
|
|
1037
1270
|
|
|
1038
1271
|
context "after the attribute has been assigned" do
|
|
1039
1272
|
|
|
1040
1273
|
it "returns true" do
|
|
1041
|
-
person.age = '
|
|
1274
|
+
person.age = '42'
|
|
1042
1275
|
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
|
1043
1276
|
end
|
|
1044
1277
|
end
|
|
@@ -1049,7 +1282,7 @@ describe Mongoid::Attributes do
|
|
|
1049
1282
|
context "when the attribute exists" do
|
|
1050
1283
|
|
|
1051
1284
|
let(:person) do
|
|
1052
|
-
Person.create(title: "Sir")
|
|
1285
|
+
Person.create!(title: "Sir")
|
|
1053
1286
|
end
|
|
1054
1287
|
|
|
1055
1288
|
before do
|
|
@@ -1067,7 +1300,7 @@ describe Mongoid::Attributes do
|
|
|
1067
1300
|
context "when saving after the removal" do
|
|
1068
1301
|
|
|
1069
1302
|
before do
|
|
1070
|
-
person.save
|
|
1303
|
+
person.save!
|
|
1071
1304
|
end
|
|
1072
1305
|
|
|
1073
1306
|
it "persists the removal" do
|
|
@@ -1087,7 +1320,7 @@ describe Mongoid::Attributes do
|
|
|
1087
1320
|
end
|
|
1088
1321
|
|
|
1089
1322
|
before do
|
|
1090
|
-
person.save
|
|
1323
|
+
person.save!
|
|
1091
1324
|
person.pet.remove_attribute(:name)
|
|
1092
1325
|
end
|
|
1093
1326
|
|
|
@@ -1102,7 +1335,7 @@ describe Mongoid::Attributes do
|
|
|
1102
1335
|
context "when saving after the removal" do
|
|
1103
1336
|
|
|
1104
1337
|
before do
|
|
1105
|
-
person.save
|
|
1338
|
+
person.save!
|
|
1106
1339
|
end
|
|
1107
1340
|
|
|
1108
1341
|
it "persists the removal" do
|
|
@@ -1147,7 +1380,7 @@ describe Mongoid::Attributes do
|
|
|
1147
1380
|
context 'when the database name is used' do
|
|
1148
1381
|
|
|
1149
1382
|
let(:person) do
|
|
1150
|
-
Person.create(at: Time.now)
|
|
1383
|
+
Person.create!(at: Time.now)
|
|
1151
1384
|
end
|
|
1152
1385
|
|
|
1153
1386
|
before do
|
|
@@ -1165,7 +1398,7 @@ describe Mongoid::Attributes do
|
|
|
1165
1398
|
context "when saving after the removal" do
|
|
1166
1399
|
|
|
1167
1400
|
before do
|
|
1168
|
-
person.save
|
|
1401
|
+
person.save!
|
|
1169
1402
|
end
|
|
1170
1403
|
|
|
1171
1404
|
it "persists the removal" do
|
|
@@ -1177,7 +1410,7 @@ describe Mongoid::Attributes do
|
|
|
1177
1410
|
context 'when the alias is used' do
|
|
1178
1411
|
|
|
1179
1412
|
let(:person) do
|
|
1180
|
-
Person.create(aliased_timestamp: Time.now)
|
|
1413
|
+
Person.create!(aliased_timestamp: Time.now)
|
|
1181
1414
|
end
|
|
1182
1415
|
|
|
1183
1416
|
before do
|
|
@@ -1195,7 +1428,7 @@ describe Mongoid::Attributes do
|
|
|
1195
1428
|
context "when saving after the removal" do
|
|
1196
1429
|
|
|
1197
1430
|
before do
|
|
1198
|
-
person.save
|
|
1431
|
+
person.save!
|
|
1199
1432
|
end
|
|
1200
1433
|
|
|
1201
1434
|
it "persists the removal" do
|
|
@@ -1293,12 +1526,13 @@ describe Mongoid::Attributes do
|
|
|
1293
1526
|
end
|
|
1294
1527
|
|
|
1295
1528
|
context "when setting an attribute that needs type casting" do
|
|
1529
|
+
|
|
1296
1530
|
let(:person) do
|
|
1297
|
-
Person.new(age: "
|
|
1531
|
+
Person.new(age: "42")
|
|
1298
1532
|
end
|
|
1299
1533
|
|
|
1300
1534
|
it "should store the attribute before type cast" do
|
|
1301
|
-
expect(person.age_before_type_cast).to eq("
|
|
1535
|
+
expect(person.age_before_type_cast).to eq("42")
|
|
1302
1536
|
end
|
|
1303
1537
|
end
|
|
1304
1538
|
|
|
@@ -1338,7 +1572,7 @@ describe Mongoid::Attributes do
|
|
|
1338
1572
|
person.write_attribute(:test, "aliased field to test")
|
|
1339
1573
|
end
|
|
1340
1574
|
|
|
1341
|
-
it "allows the field name to be
|
|
1575
|
+
it "allows the field name to be updated" do
|
|
1342
1576
|
expect(person.t).to eq("aliased field to test")
|
|
1343
1577
|
end
|
|
1344
1578
|
end
|
|
@@ -1346,10 +1580,14 @@ describe Mongoid::Attributes do
|
|
|
1346
1580
|
context "when attribute is a Hash" do
|
|
1347
1581
|
let(:person) { Person.new map: { somekey: "somevalue" } }
|
|
1348
1582
|
|
|
1349
|
-
it "
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
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
|
|
1586
|
+
end
|
|
1587
|
+
|
|
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
|
|
1353
1591
|
end
|
|
1354
1592
|
|
|
1355
1593
|
it "can set a Hash value" do
|
|
@@ -1364,10 +1602,14 @@ describe Mongoid::Attributes do
|
|
|
1364
1602
|
expect(person.aliases).to eq([ :alias_1 ])
|
|
1365
1603
|
end
|
|
1366
1604
|
|
|
1367
|
-
it "
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
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
|
|
1608
|
+
end
|
|
1609
|
+
|
|
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
|
|
1371
1613
|
end
|
|
1372
1614
|
end
|
|
1373
1615
|
|
|
@@ -1383,6 +1625,95 @@ describe Mongoid::Attributes do
|
|
|
1383
1625
|
expect(dictionary.description).to eq('foo')
|
|
1384
1626
|
end
|
|
1385
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
|
|
1386
1717
|
end
|
|
1387
1718
|
|
|
1388
1719
|
describe "#typed_value_for" do
|
|
@@ -1422,7 +1753,7 @@ describe Mongoid::Attributes do
|
|
|
1422
1753
|
end
|
|
1423
1754
|
|
|
1424
1755
|
describe "#typed_attributes" do
|
|
1425
|
-
|
|
1756
|
+
|
|
1426
1757
|
let(:date_time) do
|
|
1427
1758
|
DateTime.current
|
|
1428
1759
|
end
|
|
@@ -1563,11 +1894,11 @@ describe Mongoid::Attributes do
|
|
|
1563
1894
|
end
|
|
1564
1895
|
|
|
1565
1896
|
it "has 3 new entries" do
|
|
1566
|
-
expect(pet.vet_visits.count).to eq
|
|
1897
|
+
expect(pet.vet_visits.count).to eq 3
|
|
1567
1898
|
end
|
|
1568
1899
|
|
|
1569
1900
|
it "persists the changes" do
|
|
1570
|
-
expect(pet.reload.vet_visits.count).to eq
|
|
1901
|
+
expect(pet.reload.vet_visits.count).to eq 3
|
|
1571
1902
|
end
|
|
1572
1903
|
end
|
|
1573
1904
|
|
|
@@ -1636,6 +1967,61 @@ describe Mongoid::Attributes do
|
|
|
1636
1967
|
end
|
|
1637
1968
|
end
|
|
1638
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
|
+
|
|
1639
2025
|
describe "#alias_attribute" do
|
|
1640
2026
|
|
|
1641
2027
|
let(:product) do
|
|
@@ -1682,8 +2068,8 @@ describe Mongoid::Attributes do
|
|
|
1682
2068
|
end
|
|
1683
2069
|
|
|
1684
2070
|
it "aliases *_before_type_cast" do
|
|
1685
|
-
product.cost = "
|
|
1686
|
-
expect(product.cost_before_type_cast).to eq("
|
|
2071
|
+
product.cost = "42"
|
|
2072
|
+
expect(product.cost_before_type_cast).to eq("42")
|
|
1687
2073
|
end
|
|
1688
2074
|
end
|
|
1689
2075
|
|
|
@@ -1727,7 +2113,7 @@ describe Mongoid::Attributes do
|
|
|
1727
2113
|
context "when persisting nil attributes" do
|
|
1728
2114
|
|
|
1729
2115
|
let!(:person) do
|
|
1730
|
-
Person.create(score: nil)
|
|
2116
|
+
Person.create!(score: nil)
|
|
1731
2117
|
end
|
|
1732
2118
|
|
|
1733
2119
|
it "has an entry in the attributes" do
|
|
@@ -1742,7 +2128,7 @@ describe Mongoid::Attributes do
|
|
|
1742
2128
|
end
|
|
1743
2129
|
|
|
1744
2130
|
it "saves the default" do
|
|
1745
|
-
expect { person.save }.to_not raise_error
|
|
2131
|
+
expect { person.save! }.to_not raise_error
|
|
1746
2132
|
expect(person.last_drink_taken_at).to eq(1.day.ago.in_time_zone("Alaska").to_date)
|
|
1747
2133
|
end
|
|
1748
2134
|
end
|
|
@@ -1752,7 +2138,7 @@ describe Mongoid::Attributes do
|
|
|
1752
2138
|
context "when no value exists in the database" do
|
|
1753
2139
|
|
|
1754
2140
|
let(:person) do
|
|
1755
|
-
Person.create
|
|
2141
|
+
Person.create!
|
|
1756
2142
|
end
|
|
1757
2143
|
|
|
1758
2144
|
it "applies the default value" do
|
|
@@ -1765,7 +2151,7 @@ describe Mongoid::Attributes do
|
|
|
1765
2151
|
context "when the value is not nil" do
|
|
1766
2152
|
|
|
1767
2153
|
let!(:person) do
|
|
1768
|
-
Person.create(age: 50)
|
|
2154
|
+
Person.create!(age: 50)
|
|
1769
2155
|
end
|
|
1770
2156
|
|
|
1771
2157
|
let(:from_db) do
|
|
@@ -1780,7 +2166,7 @@ describe Mongoid::Attributes do
|
|
|
1780
2166
|
context "when the value is explicitly nil" do
|
|
1781
2167
|
|
|
1782
2168
|
let!(:person) do
|
|
1783
|
-
Person.create(age: nil)
|
|
2169
|
+
Person.create!(age: nil)
|
|
1784
2170
|
end
|
|
1785
2171
|
|
|
1786
2172
|
let(:from_db) do
|
|
@@ -1795,7 +2181,7 @@ describe Mongoid::Attributes do
|
|
|
1795
2181
|
context "when the default is a proc" do
|
|
1796
2182
|
|
|
1797
2183
|
let!(:account) do
|
|
1798
|
-
Account.create(name: "savings", balance:
|
|
2184
|
+
Account.create!(name: "savings", balance: 100)
|
|
1799
2185
|
end
|
|
1800
2186
|
|
|
1801
2187
|
let(:from_db) do
|
|
@@ -1813,7 +2199,7 @@ describe Mongoid::Attributes do
|
|
|
1813
2199
|
|
|
1814
2200
|
context 'when the attribute is blank' do
|
|
1815
2201
|
let(:person) do
|
|
1816
|
-
Person.create(title: '')
|
|
2202
|
+
Person.create!(title: '')
|
|
1817
2203
|
end
|
|
1818
2204
|
|
|
1819
2205
|
it 'returns false' do
|
|
@@ -1823,7 +2209,7 @@ describe Mongoid::Attributes do
|
|
|
1823
2209
|
|
|
1824
2210
|
context 'when the attribute is localized' do
|
|
1825
2211
|
let(:person) do
|
|
1826
|
-
Person.create
|
|
2212
|
+
Person.create!
|
|
1827
2213
|
end
|
|
1828
2214
|
|
|
1829
2215
|
context 'after initialization when the field is nil' do
|
|
@@ -1855,7 +2241,7 @@ describe Mongoid::Attributes do
|
|
|
1855
2241
|
|
|
1856
2242
|
context 'when the attribute is not localized' do
|
|
1857
2243
|
let(:person) do
|
|
1858
|
-
Person.create(username: 'localized')
|
|
2244
|
+
Person.create!(username: 'localized')
|
|
1859
2245
|
end
|
|
1860
2246
|
|
|
1861
2247
|
before do
|
|
@@ -1867,4 +2253,459 @@ describe Mongoid::Attributes do
|
|
|
1867
2253
|
end
|
|
1868
2254
|
end
|
|
1869
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
|
|
1870
2711
|
end
|