mongoid 7.0.13 → 8.0.8
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 +30 -30
- data/README.md +32 -19
- data/Rakefile +43 -0
- data/lib/config/locales/en.yml +178 -95
- data/lib/mongoid/association/accessors.rb +175 -83
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +8 -14
- 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 +67 -53
- 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 +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- 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 +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +143 -122
- data/lib/mongoid/association/embedded/embeds_many.rb +8 -36
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +26 -9
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +63 -29
- data/lib/mongoid/association/embedded/embeds_one.rb +9 -33
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +71 -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 +19 -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 +37 -38
- 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 +41 -40
- 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 +105 -68
- 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 +101 -124
- 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 +62 -84
- 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 +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +45 -51
- data/lib/mongoid/attributes/dynamic.rb +6 -21
- data/lib/mongoid/attributes/nested.rb +11 -14
- data/lib/mongoid/attributes/processing.rb +46 -30
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +5 -8
- data/lib/mongoid/attributes.rb +80 -98
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +49 -70
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +15 -14
- data/lib/mongoid/clients/sessions.rb +4 -20
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +5 -12
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- data/lib/mongoid/config/environment.rb +30 -5
- data/lib/mongoid/config/options.rb +23 -23
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +164 -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 +187 -81
- data/lib/mongoid/contextual/mongo.rb +360 -239
- data/lib/mongoid/contextual/none.rb +109 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +9 -11
- data/lib/mongoid/copyable.rb +42 -17
- data/lib/mongoid/criteria/findable.rb +19 -19
- data/lib/mongoid/criteria/includable.rb +30 -33
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -19
- data/lib/mongoid/criteria/options.rb +2 -3
- 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 +9 -16
- 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 +9 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +39 -24
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +200 -40
- data/lib/mongoid/criteria/queryable/optional.rb +10 -59
- 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 +417 -171
- data/lib/mongoid/criteria/queryable/selector.rb +127 -30
- 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 +95 -107
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +148 -97
- 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/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/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- 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_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 +2 -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 +14 -3
- 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 +87 -45
- 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 +25 -50
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +13 -7
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +30 -61
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +37 -23
- 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 +11 -15
- data/lib/mongoid/fields/standard.rb +13 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +328 -85
- data/lib/mongoid/findable.rb +90 -33
- 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 +191 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +3 -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 +22 -30
- data/lib/mongoid/persistable/deletable.rb +6 -22
- 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 +3 -8
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +5 -10
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +9 -9
- data/lib/mongoid/persistable/updatable.rb +50 -31
- data/lib/mongoid/persistable/upsertable.rb +5 -10
- data/lib/mongoid/persistable.rb +135 -40
- data/lib/mongoid/persistence_context.rb +85 -45
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +13 -280
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +4 -2
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +34 -57
- 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 +38 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +44 -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/validatable/associated.rb +99 -22
- 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 +2 -9
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +29 -41
- data/lib/mongoid/validatable.rb +22 -33
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +34 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -1
- 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_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +17 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +31 -27
- data/spec/integration/associations/belongs_to_spec.rb +20 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +162 -55
- 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 +61 -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 +107 -1
- data/spec/integration/callbacks_spec.rb +262 -8
- 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 +1 -2
- 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 +125 -15
- data/spec/integration/discriminator_key_spec.rb +392 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +73 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +18 -6
- 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 +84 -22
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -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 +687 -173
- data/spec/mongoid/association/embedded/embeds_many_models.rb +174 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +71 -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 +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +22 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +31 -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 +242 -12
- 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 +26 -3
- 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 +46 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +418 -361
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +68 -2
- 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 +81 -4
- 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 +314 -133
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +848 -451
- data/spec/mongoid/association/referenced/has_many_models.rb +61 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +48 -0
- 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 +65 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +47 -31
- 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 +66 -26
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- 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 +683 -65
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +185 -43
- data/spec/mongoid/clients/factory_spec.rb +128 -28
- data/spec/mongoid/clients/options_spec.rb +45 -26
- data/spec/mongoid/clients/sessions_spec.rb +25 -66
- data/spec/mongoid/clients/transactions_spec.rb +54 -29
- data/spec/mongoid/clients_spec.rb +65 -8
- data/spec/mongoid/composable_spec.rb +2 -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 +377 -1
- 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 +205 -67
- data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +6 -18
- data/spec/mongoid/contextual/memory_spec.rb +1360 -91
- data/spec/mongoid/contextual/mongo_spec.rb +1871 -544
- data/spec/mongoid/contextual/none_spec.rb +39 -73
- data/spec/mongoid/copyable_spec.rb +657 -26
- data/spec/mongoid/copyable_spec_models.rb +30 -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 +43 -40
- 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/bignum_spec.rb +2 -0
- 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/fixnum_spec.rb +2 -0
- 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 +73 -8
- 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 +2 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +34 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +2 -0
- 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 +2 -0
- 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 +1643 -286
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1191 -2752
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +91 -4
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +298 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +409 -0
- data/spec/mongoid/criteria_spec.rb +1322 -1723
- data/spec/mongoid/document_fields_spec.rb +179 -5
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +153 -87
- 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 +2 -0
- 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 +714 -212
- 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 +138 -3
- 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 +60 -33
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +111 -50
- 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 +663 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +50 -31
- 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 +43 -16
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +776 -80
- data/spec/mongoid/findable_spec.rb +133 -34
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +65 -18
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +955 -103
- 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 +274 -12
- data/spec/mongoid/persistable/destroyable_spec.rb +202 -12
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +36 -6
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +24 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +18 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +52 -1
- 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 +339 -87
- data/spec/mongoid/relations/proxy_spec.rb +8 -6
- data/spec/mongoid/reloadable_spec.rb +357 -22
- data/spec/mongoid/scopable_spec.rb +121 -37
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +31 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +2 -0
- data/spec/mongoid/tasks/database_spec.rb +2 -0
- data/spec/mongoid/threaded_spec.rb +4 -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 +398 -6
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +296 -33
- data/spec/mongoid/touchable_spec_models.rb +57 -0
- data/spec/mongoid/traversable_spec.rb +1160 -1
- data/spec/mongoid/validatable/associated_spec.rb +15 -30
- 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 +128 -98
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +3 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +5 -3
- data/spec/rails/mongoid_spec.rb +8 -18
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/cluster_config.rb +14 -4
- data/spec/shared/lib/mrss/constraints.rb +51 -27
- data/spec/shared/lib/mrss/docker_runner.rb +37 -4
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +48 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -18
- 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 +18 -1
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +156 -66
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +171 -45
- data/spec/shared/shlib/set_env.sh +47 -6
- data/spec/spec_helper.rb +38 -36
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +39 -8
- data/spec/support/expectations.rb +5 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +77 -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 -0
- 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 +9 -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 +2 -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 +2 -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/crate.rb +12 -0
- data/spec/{app → support}/models/customer.rb +0 -1
- data/spec/{app → support}/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- 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/{app → support}/models/minim.rb +0 -1
- 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 +12 -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 +23 -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 +2 -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/support/models/purse.rb +9 -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/{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 +12 -3
- data.tar.gz.sig +0 -0
- metadata +1162 -764
- 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 -28
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -119
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/eq.rb +0 -22
- 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/other_owner_object.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/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 -137
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/eq_spec.rb +0 -48
- 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/support/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test4.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
|
|
@@ -284,7 +330,7 @@ describe Mongoid::Attributes do
|
|
|
284
330
|
|
|
285
331
|
context 'when projecting with #only' do
|
|
286
332
|
let!(:person) do
|
|
287
|
-
Person.create(title: 'sir', name: { first_name: 'Jose', language: { name: 'es' } })
|
|
333
|
+
Person.create!(title: 'sir', name: { first_name: 'Jose', language: { name: 'es' } })
|
|
288
334
|
end
|
|
289
335
|
|
|
290
336
|
context 'when projecting an embedded association' do
|
|
@@ -295,16 +341,12 @@ describe Mongoid::Attributes do
|
|
|
295
341
|
context 'when retrieving a field of the association using the dot notation' do
|
|
296
342
|
|
|
297
343
|
it 'retrieves the field' do
|
|
298
|
-
pending 'MONGOID-5032, fixed in 7.3'
|
|
299
|
-
|
|
300
344
|
expect(from_db['name.first_name']).to eq 'Jose'
|
|
301
345
|
end
|
|
302
346
|
end
|
|
303
347
|
|
|
304
348
|
context 'when retrieving a field of a nested association using the dot notation' do
|
|
305
349
|
it 'retrieves the field' do
|
|
306
|
-
pending 'MONGOID-5032, fixed in 7.3'
|
|
307
|
-
|
|
308
350
|
expect(from_db['name.language.name']).to eq 'es'
|
|
309
351
|
end
|
|
310
352
|
end
|
|
@@ -317,8 +359,6 @@ describe Mongoid::Attributes do
|
|
|
317
359
|
|
|
318
360
|
context 'when retrieving a field under the projected sub-association' do
|
|
319
361
|
it 'retrieves the field' do
|
|
320
|
-
pending 'MONGOID-5032, fixed in 7.3'
|
|
321
|
-
|
|
322
362
|
expect(from_db['name.language.name']).to eq 'es'
|
|
323
363
|
end
|
|
324
364
|
end
|
|
@@ -375,7 +415,7 @@ describe Mongoid::Attributes do
|
|
|
375
415
|
let(:bar) do
|
|
376
416
|
Bar.new.tap do |b|
|
|
377
417
|
b[:lat_lng] = LatLng.new(52.30, 13.25)
|
|
378
|
-
b.save
|
|
418
|
+
b.save!
|
|
379
419
|
end
|
|
380
420
|
end
|
|
381
421
|
|
|
@@ -436,7 +476,7 @@ describe Mongoid::Attributes do
|
|
|
436
476
|
context 'when writing fields on a document with projection' do
|
|
437
477
|
|
|
438
478
|
let!(:person) do
|
|
439
|
-
Person.create(title: "sir")
|
|
479
|
+
Person.create!(title: "sir")
|
|
440
480
|
end
|
|
441
481
|
|
|
442
482
|
context "when excluding with only and the field was not excluded" do
|
|
@@ -948,7 +988,7 @@ describe Mongoid::Attributes do
|
|
|
948
988
|
context 'when the document has a custom attribute type' do
|
|
949
989
|
|
|
950
990
|
let(:bar) do
|
|
951
|
-
Bar.create(lat_lng: LatLng.new(52.30, 13.25))
|
|
991
|
+
Bar.create!(lat_lng: LatLng.new(52.30, 13.25))
|
|
952
992
|
end
|
|
953
993
|
|
|
954
994
|
it 'returns the demongoized version of the attribute' do
|
|
@@ -986,7 +1026,7 @@ describe Mongoid::Attributes do
|
|
|
986
1026
|
context "when the document is an existing record" do
|
|
987
1027
|
|
|
988
1028
|
let(:person) do
|
|
989
|
-
Person.create
|
|
1029
|
+
Person.create!
|
|
990
1030
|
end
|
|
991
1031
|
|
|
992
1032
|
context "when the attribute does not exist" do
|
|
@@ -1025,7 +1065,7 @@ describe Mongoid::Attributes do
|
|
|
1025
1065
|
describe "#read_attribute_before_type_cast" do
|
|
1026
1066
|
|
|
1027
1067
|
let(:person) do
|
|
1028
|
-
Person.create
|
|
1068
|
+
Person.create!
|
|
1029
1069
|
end
|
|
1030
1070
|
|
|
1031
1071
|
context "when the attribute has not yet been assigned" do
|
|
@@ -1038,15 +1078,15 @@ describe Mongoid::Attributes do
|
|
|
1038
1078
|
context "after the attribute has been assigned" do
|
|
1039
1079
|
|
|
1040
1080
|
it "returns the default value" do
|
|
1041
|
-
person.age = "
|
|
1042
|
-
expect(person.age_before_type_cast).to eq("
|
|
1081
|
+
person.age = "42"
|
|
1082
|
+
expect(person.age_before_type_cast).to eq("42")
|
|
1043
1083
|
end
|
|
1044
1084
|
end
|
|
1045
1085
|
|
|
1046
1086
|
context 'when reading fields on a document with projection' do
|
|
1047
1087
|
|
|
1048
1088
|
let!(:person) do
|
|
1049
|
-
Person.create(title: "sir")
|
|
1089
|
+
Person.create!(title: "sir")
|
|
1050
1090
|
end
|
|
1051
1091
|
|
|
1052
1092
|
context "when excluding with only and the field was not excluded" do
|
|
@@ -1117,7 +1157,7 @@ describe Mongoid::Attributes do
|
|
|
1117
1157
|
context "when the document is an existing record" do
|
|
1118
1158
|
|
|
1119
1159
|
let(:person) do
|
|
1120
|
-
Person.create
|
|
1160
|
+
Person.create!
|
|
1121
1161
|
end
|
|
1122
1162
|
|
|
1123
1163
|
context "when the attribute does not exist" do
|
|
@@ -1176,7 +1216,7 @@ describe Mongoid::Attributes do
|
|
|
1176
1216
|
|
|
1177
1217
|
context "when the attribute is not on only list" do
|
|
1178
1218
|
|
|
1179
|
-
before { Person.create }
|
|
1219
|
+
before { Person.create! }
|
|
1180
1220
|
let(:person) do
|
|
1181
1221
|
Person.only(:id).first
|
|
1182
1222
|
end
|
|
@@ -1226,15 +1266,15 @@ describe Mongoid::Attributes do
|
|
|
1226
1266
|
|
|
1227
1267
|
context "before the attribute has been assigned" do
|
|
1228
1268
|
|
|
1229
|
-
it "returns
|
|
1230
|
-
expect(person.has_attribute_before_type_cast?(:age)).to be
|
|
1269
|
+
it "returns true" do
|
|
1270
|
+
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
|
1231
1271
|
end
|
|
1232
1272
|
end
|
|
1233
1273
|
|
|
1234
1274
|
context "after the attribute has been assigned" do
|
|
1235
1275
|
|
|
1236
1276
|
it "returns true" do
|
|
1237
|
-
person.age = '
|
|
1277
|
+
person.age = '42'
|
|
1238
1278
|
expect(person.has_attribute_before_type_cast?(:age)).to be true
|
|
1239
1279
|
end
|
|
1240
1280
|
end
|
|
@@ -1245,7 +1285,7 @@ describe Mongoid::Attributes do
|
|
|
1245
1285
|
context "when the attribute exists" do
|
|
1246
1286
|
|
|
1247
1287
|
let(:person) do
|
|
1248
|
-
Person.create(title: "Sir")
|
|
1288
|
+
Person.create!(title: "Sir")
|
|
1249
1289
|
end
|
|
1250
1290
|
|
|
1251
1291
|
before do
|
|
@@ -1263,7 +1303,7 @@ describe Mongoid::Attributes do
|
|
|
1263
1303
|
context "when saving after the removal" do
|
|
1264
1304
|
|
|
1265
1305
|
before do
|
|
1266
|
-
person.save
|
|
1306
|
+
person.save!
|
|
1267
1307
|
end
|
|
1268
1308
|
|
|
1269
1309
|
it "persists the removal" do
|
|
@@ -1283,7 +1323,7 @@ describe Mongoid::Attributes do
|
|
|
1283
1323
|
end
|
|
1284
1324
|
|
|
1285
1325
|
before do
|
|
1286
|
-
person.save
|
|
1326
|
+
person.save!
|
|
1287
1327
|
person.pet.remove_attribute(:name)
|
|
1288
1328
|
end
|
|
1289
1329
|
|
|
@@ -1298,7 +1338,7 @@ describe Mongoid::Attributes do
|
|
|
1298
1338
|
context "when saving after the removal" do
|
|
1299
1339
|
|
|
1300
1340
|
before do
|
|
1301
|
-
person.save
|
|
1341
|
+
person.save!
|
|
1302
1342
|
end
|
|
1303
1343
|
|
|
1304
1344
|
it "persists the removal" do
|
|
@@ -1343,7 +1383,7 @@ describe Mongoid::Attributes do
|
|
|
1343
1383
|
context 'when the database name is used' do
|
|
1344
1384
|
|
|
1345
1385
|
let(:person) do
|
|
1346
|
-
Person.create(at: Time.now)
|
|
1386
|
+
Person.create!(at: Time.now)
|
|
1347
1387
|
end
|
|
1348
1388
|
|
|
1349
1389
|
before do
|
|
@@ -1361,7 +1401,7 @@ describe Mongoid::Attributes do
|
|
|
1361
1401
|
context "when saving after the removal" do
|
|
1362
1402
|
|
|
1363
1403
|
before do
|
|
1364
|
-
person.save
|
|
1404
|
+
person.save!
|
|
1365
1405
|
end
|
|
1366
1406
|
|
|
1367
1407
|
it "persists the removal" do
|
|
@@ -1373,7 +1413,7 @@ describe Mongoid::Attributes do
|
|
|
1373
1413
|
context 'when the alias is used' do
|
|
1374
1414
|
|
|
1375
1415
|
let(:person) do
|
|
1376
|
-
Person.create(aliased_timestamp: Time.now)
|
|
1416
|
+
Person.create!(aliased_timestamp: Time.now)
|
|
1377
1417
|
end
|
|
1378
1418
|
|
|
1379
1419
|
before do
|
|
@@ -1391,7 +1431,7 @@ describe Mongoid::Attributes do
|
|
|
1391
1431
|
context "when saving after the removal" do
|
|
1392
1432
|
|
|
1393
1433
|
before do
|
|
1394
|
-
person.save
|
|
1434
|
+
person.save!
|
|
1395
1435
|
end
|
|
1396
1436
|
|
|
1397
1437
|
it "persists the removal" do
|
|
@@ -1489,12 +1529,13 @@ describe Mongoid::Attributes do
|
|
|
1489
1529
|
end
|
|
1490
1530
|
|
|
1491
1531
|
context "when setting an attribute that needs type casting" do
|
|
1532
|
+
|
|
1492
1533
|
let(:person) do
|
|
1493
|
-
Person.new(age: "
|
|
1534
|
+
Person.new(age: "42")
|
|
1494
1535
|
end
|
|
1495
1536
|
|
|
1496
1537
|
it "should store the attribute before type cast" do
|
|
1497
|
-
expect(person.age_before_type_cast).to eq("
|
|
1538
|
+
expect(person.age_before_type_cast).to eq("42")
|
|
1498
1539
|
end
|
|
1499
1540
|
end
|
|
1500
1541
|
|
|
@@ -1534,7 +1575,7 @@ describe Mongoid::Attributes do
|
|
|
1534
1575
|
person.write_attribute(:test, "aliased field to test")
|
|
1535
1576
|
end
|
|
1536
1577
|
|
|
1537
|
-
it "allows the field name to be
|
|
1578
|
+
it "allows the field name to be updated" do
|
|
1538
1579
|
expect(person.t).to eq("aliased field to test")
|
|
1539
1580
|
end
|
|
1540
1581
|
end
|
|
@@ -1542,16 +1583,14 @@ describe Mongoid::Attributes do
|
|
|
1542
1583
|
context "when attribute is a Hash" do
|
|
1543
1584
|
let(:person) { Person.new map: { somekey: "somevalue" } }
|
|
1544
1585
|
|
|
1545
|
-
it "
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type Array cannot be written to a field of type Hash/)
|
|
1586
|
+
it "writes nil when trying to set a value of invalid type - array" do
|
|
1587
|
+
person.map = []
|
|
1588
|
+
expect(person.map).to be_nil
|
|
1549
1589
|
end
|
|
1550
1590
|
|
|
1551
|
-
it "
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type FalseClass cannot be written to a field of type Hash/)
|
|
1591
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
|
1592
|
+
person.map = false
|
|
1593
|
+
expect(person.map).to be_nil
|
|
1555
1594
|
end
|
|
1556
1595
|
|
|
1557
1596
|
it "can set a Hash value" do
|
|
@@ -1566,16 +1605,14 @@ describe Mongoid::Attributes do
|
|
|
1566
1605
|
expect(person.aliases).to eq([ :alias_1 ])
|
|
1567
1606
|
end
|
|
1568
1607
|
|
|
1569
|
-
it "
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type Hash cannot be written to a field of type Array/)
|
|
1608
|
+
it "writes nil when trying to set a value of invalid type - hash" do
|
|
1609
|
+
person.aliases = {}
|
|
1610
|
+
expect(person.aliases).to be_nil
|
|
1573
1611
|
end
|
|
1574
1612
|
|
|
1575
|
-
it "
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
end.to raise_error(Mongoid::Errors::InvalidValue, /Value of type FalseClass cannot be written to a field of type Array/)
|
|
1613
|
+
it "writes nil when trying to set a value of invalid type - boolean" do
|
|
1614
|
+
person.aliases = false
|
|
1615
|
+
expect(person.aliases).to be_nil
|
|
1579
1616
|
end
|
|
1580
1617
|
end
|
|
1581
1618
|
|
|
@@ -1595,7 +1632,7 @@ describe Mongoid::Attributes do
|
|
|
1595
1632
|
context 'when writing fields on a document with projection' do
|
|
1596
1633
|
|
|
1597
1634
|
let!(:person) do
|
|
1598
|
-
Person.create(title: "sir")
|
|
1635
|
+
Person.create!(title: "sir")
|
|
1599
1636
|
end
|
|
1600
1637
|
|
|
1601
1638
|
context "when excluding with only and the field was not excluded" do
|
|
@@ -1636,6 +1673,50 @@ describe Mongoid::Attributes do
|
|
|
1636
1673
|
end
|
|
1637
1674
|
end
|
|
1638
1675
|
end
|
|
1676
|
+
|
|
1677
|
+
context "when comparing the object_ids of the written value" do
|
|
1678
|
+
config_override :legacy_attributes, false
|
|
1679
|
+
|
|
1680
|
+
before do
|
|
1681
|
+
Person.create!
|
|
1682
|
+
end
|
|
1683
|
+
|
|
1684
|
+
let(:person) do
|
|
1685
|
+
Person.first
|
|
1686
|
+
end
|
|
1687
|
+
|
|
1688
|
+
context "when the field is not resizable" do
|
|
1689
|
+
let(:test) do
|
|
1690
|
+
person.write_attribute(:test, "aliased field to test")
|
|
1691
|
+
end
|
|
1692
|
+
|
|
1693
|
+
it "has the same object_id as the attributes hash value" do
|
|
1694
|
+
expect(test.object_id).to eq(person.test.object_id)
|
|
1695
|
+
end
|
|
1696
|
+
end
|
|
1697
|
+
|
|
1698
|
+
context "when the field is resizable" do
|
|
1699
|
+
|
|
1700
|
+
let(:arrays) do
|
|
1701
|
+
person.write_attribute(:arrays, [])
|
|
1702
|
+
end
|
|
1703
|
+
|
|
1704
|
+
it "has the same object_id as the attributes hash value" do
|
|
1705
|
+
expect(arrays.object_id).to eq(person.arrays.object_id)
|
|
1706
|
+
end
|
|
1707
|
+
end
|
|
1708
|
+
|
|
1709
|
+
context "when the field is a HABTM foreign key array" do
|
|
1710
|
+
|
|
1711
|
+
let(:preference_ids) do
|
|
1712
|
+
person.write_attribute(:preference_ids, [])
|
|
1713
|
+
end
|
|
1714
|
+
|
|
1715
|
+
it "has the same object_id as the attributes hash value" do
|
|
1716
|
+
expect(preference_ids.object_id).to eq(person.preference_ids.object_id)
|
|
1717
|
+
end
|
|
1718
|
+
end
|
|
1719
|
+
end
|
|
1639
1720
|
end
|
|
1640
1721
|
|
|
1641
1722
|
describe "#typed_value_for" do
|
|
@@ -1816,11 +1897,11 @@ describe Mongoid::Attributes do
|
|
|
1816
1897
|
end
|
|
1817
1898
|
|
|
1818
1899
|
it "has 3 new entries" do
|
|
1819
|
-
expect(pet.vet_visits.count).to eq
|
|
1900
|
+
expect(pet.vet_visits.count).to eq 3
|
|
1820
1901
|
end
|
|
1821
1902
|
|
|
1822
1903
|
it "persists the changes" do
|
|
1823
|
-
expect(pet.reload.vet_visits.count).to eq
|
|
1904
|
+
expect(pet.reload.vet_visits.count).to eq 3
|
|
1824
1905
|
end
|
|
1825
1906
|
end
|
|
1826
1907
|
|
|
@@ -1889,6 +1970,61 @@ describe Mongoid::Attributes do
|
|
|
1889
1970
|
end
|
|
1890
1971
|
end
|
|
1891
1972
|
|
|
1973
|
+
describe '#unalias_attribute' do
|
|
1974
|
+
let(:shirt) { Shirt.new }
|
|
1975
|
+
let(:id) { '1234' }
|
|
1976
|
+
|
|
1977
|
+
context 'when creating object' do
|
|
1978
|
+
let(:shirt) { Shirt.new(id: id) }
|
|
1979
|
+
|
|
1980
|
+
it 'id and _id are not the same' do
|
|
1981
|
+
expect(shirt.id).to eq(id)
|
|
1982
|
+
expect(shirt._id).not_to eq(id)
|
|
1983
|
+
end
|
|
1984
|
+
end
|
|
1985
|
+
|
|
1986
|
+
context 'update' do
|
|
1987
|
+
before do
|
|
1988
|
+
shirt.update(id: id)
|
|
1989
|
+
end
|
|
1990
|
+
|
|
1991
|
+
it 'updates id but not_id' do
|
|
1992
|
+
expect(shirt.id).to eq(id)
|
|
1993
|
+
expect(shirt._id).not_to eq(id)
|
|
1994
|
+
end
|
|
1995
|
+
end
|
|
1996
|
+
|
|
1997
|
+
context 'id=' do
|
|
1998
|
+
before do
|
|
1999
|
+
shirt.id = id
|
|
2000
|
+
end
|
|
2001
|
+
|
|
2002
|
+
it 'sets id and not _id' do
|
|
2003
|
+
expect(shirt.id).to eq(id)
|
|
2004
|
+
expect(shirt._id).not_to eq(id)
|
|
2005
|
+
end
|
|
2006
|
+
end
|
|
2007
|
+
|
|
2008
|
+
context 'id?' do
|
|
2009
|
+
context 'with null id' do
|
|
2010
|
+
it 'returns false' do
|
|
2011
|
+
expect(shirt.id?).to be false
|
|
2012
|
+
expect(shirt._id?).to be true
|
|
2013
|
+
end
|
|
2014
|
+
end
|
|
2015
|
+
|
|
2016
|
+
context 'with id' do
|
|
2017
|
+
before do
|
|
2018
|
+
shirt.id = id
|
|
2019
|
+
end
|
|
2020
|
+
|
|
2021
|
+
it 'returns true' do
|
|
2022
|
+
expect(shirt.id?).to be true
|
|
2023
|
+
end
|
|
2024
|
+
end
|
|
2025
|
+
end
|
|
2026
|
+
end
|
|
2027
|
+
|
|
1892
2028
|
describe "#alias_attribute" do
|
|
1893
2029
|
|
|
1894
2030
|
let(:product) do
|
|
@@ -1935,8 +2071,8 @@ describe Mongoid::Attributes do
|
|
|
1935
2071
|
end
|
|
1936
2072
|
|
|
1937
2073
|
it "aliases *_before_type_cast" do
|
|
1938
|
-
product.cost = "
|
|
1939
|
-
expect(product.cost_before_type_cast).to eq("
|
|
2074
|
+
product.cost = "42"
|
|
2075
|
+
expect(product.cost_before_type_cast).to eq("42")
|
|
1940
2076
|
end
|
|
1941
2077
|
end
|
|
1942
2078
|
|
|
@@ -1980,7 +2116,7 @@ describe Mongoid::Attributes do
|
|
|
1980
2116
|
context "when persisting nil attributes" do
|
|
1981
2117
|
|
|
1982
2118
|
let!(:person) do
|
|
1983
|
-
Person.create(score: nil)
|
|
2119
|
+
Person.create!(score: nil)
|
|
1984
2120
|
end
|
|
1985
2121
|
|
|
1986
2122
|
it "has an entry in the attributes" do
|
|
@@ -1995,7 +2131,7 @@ describe Mongoid::Attributes do
|
|
|
1995
2131
|
end
|
|
1996
2132
|
|
|
1997
2133
|
it "saves the default" do
|
|
1998
|
-
expect { person.save }.to_not raise_error
|
|
2134
|
+
expect { person.save! }.to_not raise_error
|
|
1999
2135
|
expect(person.last_drink_taken_at).to eq(1.day.ago.in_time_zone("Alaska").to_date)
|
|
2000
2136
|
end
|
|
2001
2137
|
end
|
|
@@ -2005,7 +2141,7 @@ describe Mongoid::Attributes do
|
|
|
2005
2141
|
context "when no value exists in the database" do
|
|
2006
2142
|
|
|
2007
2143
|
let(:person) do
|
|
2008
|
-
Person.create
|
|
2144
|
+
Person.create!
|
|
2009
2145
|
end
|
|
2010
2146
|
|
|
2011
2147
|
it "applies the default value" do
|
|
@@ -2018,7 +2154,7 @@ describe Mongoid::Attributes do
|
|
|
2018
2154
|
context "when the value is not nil" do
|
|
2019
2155
|
|
|
2020
2156
|
let!(:person) do
|
|
2021
|
-
Person.create(age: 50)
|
|
2157
|
+
Person.create!(age: 50)
|
|
2022
2158
|
end
|
|
2023
2159
|
|
|
2024
2160
|
let(:from_db) do
|
|
@@ -2033,7 +2169,7 @@ describe Mongoid::Attributes do
|
|
|
2033
2169
|
context "when the value is explicitly nil" do
|
|
2034
2170
|
|
|
2035
2171
|
let!(:person) do
|
|
2036
|
-
Person.create(age: nil)
|
|
2172
|
+
Person.create!(age: nil)
|
|
2037
2173
|
end
|
|
2038
2174
|
|
|
2039
2175
|
let(:from_db) do
|
|
@@ -2048,7 +2184,7 @@ describe Mongoid::Attributes do
|
|
|
2048
2184
|
context "when the default is a proc" do
|
|
2049
2185
|
|
|
2050
2186
|
let!(:account) do
|
|
2051
|
-
Account.create(name: "savings", balance:
|
|
2187
|
+
Account.create!(name: "savings", balance: 100)
|
|
2052
2188
|
end
|
|
2053
2189
|
|
|
2054
2190
|
let(:from_db) do
|
|
@@ -2066,7 +2202,7 @@ describe Mongoid::Attributes do
|
|
|
2066
2202
|
|
|
2067
2203
|
context 'when the attribute is blank' do
|
|
2068
2204
|
let(:person) do
|
|
2069
|
-
Person.create(title: '')
|
|
2205
|
+
Person.create!(title: '')
|
|
2070
2206
|
end
|
|
2071
2207
|
|
|
2072
2208
|
it 'returns false' do
|
|
@@ -2076,7 +2212,7 @@ describe Mongoid::Attributes do
|
|
|
2076
2212
|
|
|
2077
2213
|
context 'when the attribute is localized' do
|
|
2078
2214
|
let(:person) do
|
|
2079
|
-
Person.create
|
|
2215
|
+
Person.create!
|
|
2080
2216
|
end
|
|
2081
2217
|
|
|
2082
2218
|
context 'after initialization when the field is nil' do
|
|
@@ -2108,7 +2244,7 @@ describe Mongoid::Attributes do
|
|
|
2108
2244
|
|
|
2109
2245
|
context 'when the attribute is not localized' do
|
|
2110
2246
|
let(:person) do
|
|
2111
|
-
Person.create(username: 'localized')
|
|
2247
|
+
Person.create!(username: 'localized')
|
|
2112
2248
|
end
|
|
2113
2249
|
|
|
2114
2250
|
before do
|
|
@@ -2120,4 +2256,486 @@ describe Mongoid::Attributes do
|
|
|
2120
2256
|
end
|
|
2121
2257
|
end
|
|
2122
2258
|
end
|
|
2259
|
+
|
|
2260
|
+
context "when an attribute is removed then set" do
|
|
2261
|
+
let(:cat) { Cat.create!(name: "Neil") }
|
|
2262
|
+
|
|
2263
|
+
before do
|
|
2264
|
+
cat.remove_attribute("name")
|
|
2265
|
+
cat.name = "Nissim"
|
|
2266
|
+
cat.save!
|
|
2267
|
+
cat.reload
|
|
2268
|
+
end
|
|
2269
|
+
|
|
2270
|
+
it "correctly sets the attribute" do
|
|
2271
|
+
expect(cat.name).to eq("Nissim")
|
|
2272
|
+
end
|
|
2273
|
+
end
|
|
2274
|
+
|
|
2275
|
+
describe "attributes after setting an association without reloading" do
|
|
2276
|
+
|
|
2277
|
+
context "on embeds_many" do
|
|
2278
|
+
|
|
2279
|
+
context "when not setting anything" do
|
|
2280
|
+
let(:doc) { NestedBook.create! }
|
|
2281
|
+
|
|
2282
|
+
it "doesn't add attributes" do
|
|
2283
|
+
expect(doc.attributes).to_not have_key("pages")
|
|
2284
|
+
end
|
|
2285
|
+
|
|
2286
|
+
it "has the same attributes after reloading" do
|
|
2287
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2288
|
+
end
|
|
2289
|
+
end
|
|
2290
|
+
|
|
2291
|
+
context "when using nested attributes" do
|
|
2292
|
+
let(:doc) { NestedBook.create! }
|
|
2293
|
+
|
|
2294
|
+
before do
|
|
2295
|
+
doc.update_attributes({ pages_attributes: [ {} ] })
|
|
2296
|
+
end
|
|
2297
|
+
|
|
2298
|
+
it "updates the attributes" do
|
|
2299
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2300
|
+
end
|
|
2301
|
+
|
|
2302
|
+
it "has the same attributes after reloading" do
|
|
2303
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2304
|
+
end
|
|
2305
|
+
end
|
|
2306
|
+
|
|
2307
|
+
context "when doing assignments" do
|
|
2308
|
+
let(:doc) { NestedBook.create! }
|
|
2309
|
+
before do
|
|
2310
|
+
doc.pages = [NestedPage.new]
|
|
2311
|
+
end
|
|
2312
|
+
|
|
2313
|
+
it "updates the attributes" do
|
|
2314
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2315
|
+
end
|
|
2316
|
+
|
|
2317
|
+
it "has the same attributes after reloading" do
|
|
2318
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2319
|
+
end
|
|
2320
|
+
end
|
|
2321
|
+
|
|
2322
|
+
context "when replacing assignments" do
|
|
2323
|
+
let(:doc) { NestedBook.create! }
|
|
2324
|
+
before do
|
|
2325
|
+
doc.pages = [NestedPage.new(number: 1)]
|
|
2326
|
+
doc.pages = [NestedPage.new(number: 2)]
|
|
2327
|
+
end
|
|
2328
|
+
|
|
2329
|
+
it "updates the attributes" do
|
|
2330
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id, "number" => 2 }])
|
|
2331
|
+
end
|
|
2332
|
+
|
|
2333
|
+
it "has the same attributes after reloading" do
|
|
2334
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2335
|
+
end
|
|
2336
|
+
end
|
|
2337
|
+
|
|
2338
|
+
context "when setting to nil" do
|
|
2339
|
+
let(:doc) { NestedBook.create! }
|
|
2340
|
+
before do
|
|
2341
|
+
doc.pages = [NestedPage.new(number: 1)]
|
|
2342
|
+
doc.pages = nil
|
|
2343
|
+
end
|
|
2344
|
+
|
|
2345
|
+
it "updates the attributes" do
|
|
2346
|
+
expect(doc.attributes).to_not have_key("pages")
|
|
2347
|
+
end
|
|
2348
|
+
|
|
2349
|
+
it "has the same attributes after reloading" do
|
|
2350
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
|
2351
|
+
end
|
|
2352
|
+
end
|
|
2353
|
+
|
|
2354
|
+
context "when setting to nil and back" do
|
|
2355
|
+
let(:doc) { NestedBook.create! }
|
|
2356
|
+
let(:page) { NestedPage.new }
|
|
2357
|
+
before do
|
|
2358
|
+
doc.pages = [page]
|
|
2359
|
+
doc.pages = nil
|
|
2360
|
+
doc.pages = [page]
|
|
2361
|
+
end
|
|
2362
|
+
|
|
2363
|
+
it "updates the attributes" do
|
|
2364
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2365
|
+
end
|
|
2366
|
+
|
|
2367
|
+
it "has the same attributes after reloading" do
|
|
2368
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2369
|
+
end
|
|
2370
|
+
end
|
|
2371
|
+
|
|
2372
|
+
context "when pushing" do
|
|
2373
|
+
let(:doc) { NestedBook.create! }
|
|
2374
|
+
before do
|
|
2375
|
+
doc.pages << NestedPage.new
|
|
2376
|
+
end
|
|
2377
|
+
|
|
2378
|
+
it "updates the attributes" do
|
|
2379
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2380
|
+
end
|
|
2381
|
+
|
|
2382
|
+
it "has the same attributes after reloading" do
|
|
2383
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2384
|
+
end
|
|
2385
|
+
end
|
|
2386
|
+
|
|
2387
|
+
[:shift, :pop].each do |meth|
|
|
2388
|
+
context "when performing #{meth}" do
|
|
2389
|
+
let(:doc) { NestedBook.create! }
|
|
2390
|
+
before do
|
|
2391
|
+
doc.pages << NestedPage.new
|
|
2392
|
+
doc.pages << NestedPage.new
|
|
2393
|
+
doc.pages << NestedPage.new
|
|
2394
|
+
|
|
2395
|
+
doc.pages.send(meth, 2)
|
|
2396
|
+
end
|
|
2397
|
+
|
|
2398
|
+
it "updates the attributes" do
|
|
2399
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2400
|
+
end
|
|
2401
|
+
|
|
2402
|
+
it "has the same attributes after reloading" do
|
|
2403
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2404
|
+
end
|
|
2405
|
+
end
|
|
2406
|
+
end
|
|
2407
|
+
|
|
2408
|
+
context "when concatting" do
|
|
2409
|
+
let(:doc) { NestedBook.create! }
|
|
2410
|
+
before do
|
|
2411
|
+
doc.pages << NestedPage.new
|
|
2412
|
+
doc.pages.concat([NestedPage.new, NestedPage.new])
|
|
2413
|
+
end
|
|
2414
|
+
|
|
2415
|
+
it "updates the attributes" do
|
|
2416
|
+
expect(doc.attributes["pages"].count).to eq 3
|
|
2417
|
+
end
|
|
2418
|
+
|
|
2419
|
+
it "has the same attributes after reloading" do
|
|
2420
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2421
|
+
end
|
|
2422
|
+
end
|
|
2423
|
+
|
|
2424
|
+
[:build, :create].each do |meth|
|
|
2425
|
+
context "when preforming #{meth}" do
|
|
2426
|
+
let(:doc) { NestedBook.create! }
|
|
2427
|
+
before do
|
|
2428
|
+
doc.pages.send(meth)
|
|
2429
|
+
end
|
|
2430
|
+
|
|
2431
|
+
it "updates the attributes" do
|
|
2432
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2433
|
+
end
|
|
2434
|
+
|
|
2435
|
+
it "has the same attributes after reloading" do
|
|
2436
|
+
doc.pages.first.save
|
|
2437
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2438
|
+
end
|
|
2439
|
+
end
|
|
2440
|
+
end
|
|
2441
|
+
|
|
2442
|
+
context "when clearing" do
|
|
2443
|
+
let(:doc) { NestedBook.create! }
|
|
2444
|
+
before do
|
|
2445
|
+
doc.pages << NestedPage.new
|
|
2446
|
+
doc.pages << NestedPage.new
|
|
2447
|
+
doc.pages << NestedPage.new
|
|
2448
|
+
|
|
2449
|
+
doc.pages.clear
|
|
2450
|
+
end
|
|
2451
|
+
|
|
2452
|
+
it "updates the attributes" do
|
|
2453
|
+
expect(doc.attributes).to_not have_key("pages")
|
|
2454
|
+
end
|
|
2455
|
+
|
|
2456
|
+
it "has the same attributes after reloading" do
|
|
2457
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2458
|
+
end
|
|
2459
|
+
end
|
|
2460
|
+
|
|
2461
|
+
[:delete_all, :destroy_all, :remove_all].each do |meth|
|
|
2462
|
+
context "when performing: #{meth}" do
|
|
2463
|
+
let(:doc) { NestedBook.create! }
|
|
2464
|
+
before do
|
|
2465
|
+
doc.pages << NestedPage.new
|
|
2466
|
+
doc.pages << NestedPage.new
|
|
2467
|
+
doc.pages << NestedPage.new
|
|
2468
|
+
|
|
2469
|
+
doc.pages.send(meth)
|
|
2470
|
+
end
|
|
2471
|
+
|
|
2472
|
+
it "updates the attributes" do
|
|
2473
|
+
expect(doc.attributes).to_not have_key("pages")
|
|
2474
|
+
end
|
|
2475
|
+
|
|
2476
|
+
it "has the same attributes after reloading" do
|
|
2477
|
+
expect({ "pages" => [] }.merge(doc.attributes)).to eq(doc.reload.attributes)
|
|
2478
|
+
end
|
|
2479
|
+
end
|
|
2480
|
+
end
|
|
2481
|
+
|
|
2482
|
+
context "when deleting" do
|
|
2483
|
+
let(:doc) { NestedBook.create! }
|
|
2484
|
+
let(:page) { NestedPage.new }
|
|
2485
|
+
before do
|
|
2486
|
+
doc.pages << page
|
|
2487
|
+
doc.pages << NestedPage.new
|
|
2488
|
+
doc.pages << NestedPage.new
|
|
2489
|
+
|
|
2490
|
+
doc.pages.delete(page)
|
|
2491
|
+
end
|
|
2492
|
+
|
|
2493
|
+
it "updates the attributes" do
|
|
2494
|
+
expect(doc.attributes["pages"].count).to eq 2
|
|
2495
|
+
end
|
|
2496
|
+
|
|
2497
|
+
it "has the same attributes after reloading" do
|
|
2498
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2499
|
+
end
|
|
2500
|
+
end
|
|
2501
|
+
|
|
2502
|
+
context "when doing _remove" do
|
|
2503
|
+
let(:doc) { NestedBook.create! }
|
|
2504
|
+
let(:page) { NestedPage.new }
|
|
2505
|
+
before do
|
|
2506
|
+
doc.pages << page
|
|
2507
|
+
doc.pages << NestedPage.new
|
|
2508
|
+
doc.pages << NestedPage.new
|
|
2509
|
+
|
|
2510
|
+
doc.pages._remove(page)
|
|
2511
|
+
end
|
|
2512
|
+
|
|
2513
|
+
it "updates the attributes" do
|
|
2514
|
+
expect(doc.attributes["pages"].count).to eq 2
|
|
2515
|
+
end
|
|
2516
|
+
end
|
|
2517
|
+
|
|
2518
|
+
context "when assigning an array of hashes" do
|
|
2519
|
+
let(:doc) { NestedBook.create! }
|
|
2520
|
+
before do
|
|
2521
|
+
doc.pages = [{}]
|
|
2522
|
+
end
|
|
2523
|
+
|
|
2524
|
+
it "updates the attributes" do
|
|
2525
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2526
|
+
end
|
|
2527
|
+
|
|
2528
|
+
it "has the same attributes after reloading" do
|
|
2529
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2530
|
+
end
|
|
2531
|
+
end
|
|
2532
|
+
|
|
2533
|
+
context "when assigning twice" do
|
|
2534
|
+
let(:doc) { NestedBook.create! }
|
|
2535
|
+
before do
|
|
2536
|
+
doc.pages = [{ number: 1 }]
|
|
2537
|
+
doc.pages = [{}]
|
|
2538
|
+
end
|
|
2539
|
+
|
|
2540
|
+
it "updates the attributes" do
|
|
2541
|
+
expect(doc.attributes["pages"]).to eq([{ "_id" => doc.pages.first.id }])
|
|
2542
|
+
end
|
|
2543
|
+
|
|
2544
|
+
it "has the same attributes after reloading" do
|
|
2545
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2546
|
+
end
|
|
2547
|
+
end
|
|
2548
|
+
end
|
|
2549
|
+
|
|
2550
|
+
context "on embeds_one" do
|
|
2551
|
+
|
|
2552
|
+
let(:attrs) { { "title" => "Title" } }
|
|
2553
|
+
|
|
2554
|
+
context "when using nested attributes" do
|
|
2555
|
+
let(:doc) { NestedBook.create! }
|
|
2556
|
+
|
|
2557
|
+
before do
|
|
2558
|
+
doc.update_attributes({ cover_attributes: attrs })
|
|
2559
|
+
end
|
|
2560
|
+
|
|
2561
|
+
it "updates the attributes" do
|
|
2562
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2563
|
+
end
|
|
2564
|
+
|
|
2565
|
+
it "has the same attributes after reloading" do
|
|
2566
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2567
|
+
end
|
|
2568
|
+
end
|
|
2569
|
+
|
|
2570
|
+
context "when doing assignments" do
|
|
2571
|
+
let(:doc) { NestedBook.create! }
|
|
2572
|
+
before do
|
|
2573
|
+
doc.cover = NestedCover.new(attrs)
|
|
2574
|
+
end
|
|
2575
|
+
|
|
2576
|
+
it "updates the attributes" do
|
|
2577
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2578
|
+
end
|
|
2579
|
+
|
|
2580
|
+
it "has the same attributes after reloading" do
|
|
2581
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2582
|
+
end
|
|
2583
|
+
end
|
|
2584
|
+
|
|
2585
|
+
context "when replacing assignments" do
|
|
2586
|
+
let(:doc) { NestedBook.create! }
|
|
2587
|
+
before do
|
|
2588
|
+
doc.cover = NestedCover.new("title" => "Title1")
|
|
2589
|
+
doc.cover = NestedCover.new(attrs)
|
|
2590
|
+
end
|
|
2591
|
+
|
|
2592
|
+
it "updates the attributes" do
|
|
2593
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2594
|
+
end
|
|
2595
|
+
|
|
2596
|
+
it "has the same attributes after reloading" do
|
|
2597
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2598
|
+
end
|
|
2599
|
+
end
|
|
2600
|
+
|
|
2601
|
+
context "when setting to nil" do
|
|
2602
|
+
let(:doc) { NestedBook.create! }
|
|
2603
|
+
before do
|
|
2604
|
+
doc.cover = NestedCover.new(attrs)
|
|
2605
|
+
doc.cover = nil
|
|
2606
|
+
end
|
|
2607
|
+
|
|
2608
|
+
it "updates the attributes" do
|
|
2609
|
+
expect(doc.attributes.key?("cover")).to be false
|
|
2610
|
+
end
|
|
2611
|
+
|
|
2612
|
+
it "has the same attributes after reloading" do
|
|
2613
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2614
|
+
end
|
|
2615
|
+
end
|
|
2616
|
+
|
|
2617
|
+
context "when setting to nil and back" do
|
|
2618
|
+
let(:doc) { NestedBook.create! }
|
|
2619
|
+
before do
|
|
2620
|
+
doc.cover = NestedCover.new(attrs)
|
|
2621
|
+
doc.cover = nil
|
|
2622
|
+
doc.cover = NestedCover.new(attrs)
|
|
2623
|
+
end
|
|
2624
|
+
|
|
2625
|
+
it "updates the attributes" do
|
|
2626
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2627
|
+
end
|
|
2628
|
+
|
|
2629
|
+
|
|
2630
|
+
it "has the same attributes after reloading" do
|
|
2631
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2632
|
+
end
|
|
2633
|
+
end
|
|
2634
|
+
|
|
2635
|
+
[:build, :create].each do |meth|
|
|
2636
|
+
context "when preforming #{meth}" do
|
|
2637
|
+
let(:doc) { NestedBook.create! }
|
|
2638
|
+
before do
|
|
2639
|
+
doc.send("#{meth}_cover", attrs)
|
|
2640
|
+
end
|
|
2641
|
+
|
|
2642
|
+
it "updates the attributes" do
|
|
2643
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2644
|
+
end
|
|
2645
|
+
|
|
2646
|
+
it "has the same attributes after reloading" do
|
|
2647
|
+
doc.cover.save
|
|
2648
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2649
|
+
end
|
|
2650
|
+
end
|
|
2651
|
+
end
|
|
2652
|
+
|
|
2653
|
+
context "when assigning a hash" do
|
|
2654
|
+
let(:doc) { NestedBook.create! }
|
|
2655
|
+
before do
|
|
2656
|
+
doc.cover = attrs
|
|
2657
|
+
end
|
|
2658
|
+
|
|
2659
|
+
it "updates the attributes" do
|
|
2660
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2661
|
+
end
|
|
2662
|
+
|
|
2663
|
+
it "has the same attributes after reloading" do
|
|
2664
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2665
|
+
end
|
|
2666
|
+
end
|
|
2667
|
+
|
|
2668
|
+
context "when assigning twice" do
|
|
2669
|
+
let(:doc) { NestedBook.create! }
|
|
2670
|
+
before do
|
|
2671
|
+
doc.cover = { "title" => "1984" }
|
|
2672
|
+
doc.cover = attrs
|
|
2673
|
+
end
|
|
2674
|
+
|
|
2675
|
+
it "updates the attributes" do
|
|
2676
|
+
expect(doc.attributes["cover"]).to eq(attrs.merge("_id" => doc.cover.id))
|
|
2677
|
+
end
|
|
2678
|
+
|
|
2679
|
+
it "has the same attributes after reloading" do
|
|
2680
|
+
expect(doc.attributes).to eq(doc.reload.attributes)
|
|
2681
|
+
end
|
|
2682
|
+
end
|
|
2683
|
+
end
|
|
2684
|
+
end
|
|
2685
|
+
|
|
2686
|
+
context "when modifiying a hash referenced with the [] notation" do
|
|
2687
|
+
let(:church) { Church.create!(location: { x: 1 }) }
|
|
2688
|
+
|
|
2689
|
+
before do
|
|
2690
|
+
church[:location].merge!(y: 2)
|
|
2691
|
+
church.save!
|
|
2692
|
+
church.reload
|
|
2693
|
+
end
|
|
2694
|
+
|
|
2695
|
+
it "persists the updated hash" do
|
|
2696
|
+
church.location.should == { "x" => 1, "y" => 2 }
|
|
2697
|
+
end
|
|
2698
|
+
end
|
|
2699
|
+
|
|
2700
|
+
context "when modifiying a set referenced with the [] notation" do
|
|
2701
|
+
let(:catalog) { Catalog.create!(set_field: [ 1 ].to_set) }
|
|
2702
|
+
|
|
2703
|
+
before do
|
|
2704
|
+
catalog[:set_field] << 2
|
|
2705
|
+
catalog.save!
|
|
2706
|
+
catalog.reload
|
|
2707
|
+
end
|
|
2708
|
+
|
|
2709
|
+
it "persists the updated hash" do
|
|
2710
|
+
pending "MONGOID-2951"
|
|
2711
|
+
catalog.set_field.should == Set.new([ 1, 2 ])
|
|
2712
|
+
end
|
|
2713
|
+
end
|
|
2714
|
+
|
|
2715
|
+
context 'when an embedded field has a capitalized store_as name' do
|
|
2716
|
+
let(:person) { Person.new(Purse: { brand: 'Gucci' }) }
|
|
2717
|
+
|
|
2718
|
+
it 'sets the value' do
|
|
2719
|
+
expect(person.purse.brand).to eq('Gucci')
|
|
2720
|
+
end
|
|
2721
|
+
|
|
2722
|
+
it 'saves successfully' do
|
|
2723
|
+
expect(person.save!).to eq(true)
|
|
2724
|
+
end
|
|
2725
|
+
|
|
2726
|
+
context 'when persisted' do
|
|
2727
|
+
before do
|
|
2728
|
+
person.save!
|
|
2729
|
+
person.reload
|
|
2730
|
+
end
|
|
2731
|
+
|
|
2732
|
+
it 'persists the value' do
|
|
2733
|
+
expect(person.reload.purse.brand).to eq('Gucci')
|
|
2734
|
+
end
|
|
2735
|
+
|
|
2736
|
+
it 'uses the correct key in the database' do
|
|
2737
|
+
expect(person.collection.find(_id: person.id).first['Purse']['_id']).to eq(person.purse.id)
|
|
2738
|
+
end
|
|
2739
|
+
end
|
|
2740
|
+
end
|
|
2123
2741
|
end
|