mongoid 7.5.4 → 8.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -3
- data/README.md +6 -6
- data/Rakefile +44 -46
- data/lib/config/locales/en.yml +92 -43
- data/lib/mongoid/association/accessors.rb +44 -11
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +5 -3
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +32 -7
- data/lib/mongoid/association/embedded/batchable.rb +34 -11
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +85 -46
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +8 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +45 -7
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +15 -4
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
- data/lib/mongoid/association/referenced/has_many/proxy.rb +40 -21
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +4 -4
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic.rb +16 -7
- data/lib/mongoid/attributes/dynamic.rb +4 -4
- data/lib/mongoid/attributes/nested.rb +6 -6
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +11 -6
- data/lib/mongoid/attributes.rb +51 -42
- data/lib/mongoid/changeable.rb +147 -14
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/storage_options.rb +2 -5
- data/lib/mongoid/clients/validators/storage.rb +3 -15
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +2 -0
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config/validators.rb +1 -0
- data/lib/mongoid/config.rb +153 -18
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +285 -58
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +540 -346
- data/lib/mongoid/contextual/none.rb +193 -20
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +14 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +8 -5
- data/lib/mongoid/criteria/includable.rb +27 -22
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +4 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
- data/lib/mongoid/criteria/queryable/optional.rb +11 -17
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +48 -39
- data/lib/mongoid/criteria/queryable/selector.rb +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +20 -40
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +135 -36
- data/lib/mongoid/equality.rb +9 -8
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +6 -3
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +38 -9
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +10 -8
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +29 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +19 -4
- data/lib/mongoid/fields/standard.rb +17 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +142 -28
- data/lib/mongoid/findable.rb +54 -24
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +187 -16
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher/eq_impl.rb +1 -1
- data/lib/mongoid/matcher/type.rb +1 -1
- data/lib/mongoid/matcher.rb +48 -14
- data/lib/mongoid/persistable/creatable.rb +19 -9
- data/lib/mongoid/persistable/deletable.rb +2 -2
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +14 -2
- data/lib/mongoid/persistable/unsettable.rb +2 -2
- data/lib/mongoid/persistable/updatable.rb +69 -12
- data/lib/mongoid/persistable/upsertable.rb +21 -2
- data/lib/mongoid/persistable.rb +6 -3
- data/lib/mongoid/persistence_context.rb +6 -4
- data/lib/mongoid/query_cache.rb +13 -261
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +15 -13
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +17 -13
- data/lib/mongoid/stateful.rb +57 -10
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +20 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +9 -2
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +3 -4
- data/lib/mongoid/traversable.rb +41 -5
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +98 -17
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +5 -7
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +17 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +19 -4
- data/lib/mongoid.rb +17 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +24 -19
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +132 -1
- data/spec/integration/callbacks_spec.rb +381 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +118 -80
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -32
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +26 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +290 -65
- data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +19 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +215 -177
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +15 -1
- data/spec/mongoid/association_spec.rb +60 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes/readonly_spec.rb +19 -0
- data/spec/mongoid/attributes_spec.rb +526 -33
- data/spec/mongoid/changeable_spec.rb +429 -37
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +149 -15
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config_spec.rb +214 -31
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- 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/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +850 -88
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
- data/spec/mongoid/contextual/none_spec.rb +60 -21
- data/spec/mongoid/copyable_spec.rb +453 -11
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +107 -86
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +1 -5
- data/spec/mongoid/criteria_spec.rb +469 -1205
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +59 -41
- data/spec/mongoid/equality_spec.rb +6 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +639 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +80 -37
- data/spec/mongoid/fields_spec.rb +503 -87
- data/spec/mongoid/findable_spec.rb +450 -58
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +55 -30
- data/spec/mongoid/interceptable_spec.rb +904 -22
- data/spec/mongoid/interceptable_spec_models.rb +189 -22
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +28 -8
- data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
- data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
- data/spec/mongoid/persistable/logical_spec.rb +37 -0
- data/spec/mongoid/persistable/poppable_spec.rb +36 -0
- data/spec/mongoid/persistable/pullable_spec.rb +72 -0
- data/spec/mongoid/persistable/pushable_spec.rb +72 -0
- data/spec/mongoid/persistable/renamable_spec.rb +36 -0
- data/spec/mongoid/persistable/savable_spec.rb +96 -0
- data/spec/mongoid/persistable/settable_spec.rb +37 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
- data/spec/mongoid/persistable/updatable_spec.rb +20 -28
- data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
- data/spec/mongoid/persistence_context_spec.rb +31 -57
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +56 -215
- data/spec/mongoid/reloadable_spec.rb +83 -6
- data/spec/mongoid/scopable_spec.rb +91 -1
- data/spec/mongoid/serializable_spec.rb +25 -39
- data/spec/mongoid/shardable_spec.rb +4 -4
- data/spec/mongoid/stateful_spec.rb +150 -8
- data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
- data/spec/mongoid/tasks/database_spec.rb +127 -0
- data/spec/mongoid/timestamps/created_spec.rb +23 -0
- data/spec/mongoid/timestamps_spec.rb +392 -4
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +390 -2
- data/spec/mongoid/touchable_spec_models.rb +14 -8
- data/spec/mongoid/traversable_spec.rb +13 -35
- data/spec/mongoid/validatable/associated_spec.rb +27 -34
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +34 -16
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/spec_helper.rb +5 -0
- data/spec/support/constraints.rb +24 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +78 -0
- data/spec/support/models/artist.rb +0 -1
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +5 -0
- data/spec/support/models/book.rb +1 -0
- data/spec/support/models/building.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/lat_lng.rb +6 -0
- data/spec/support/models/name.rb +10 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/product.rb +1 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- metadata +98 -96
- checksums.yaml.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -378
- data/spec/shared/lib/mrss/docker_runner.rb +0 -291
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
- data/spec/shared/lib/mrss/session_registry.rb +0 -69
- data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -15
- data/spec/shared/share/Dockerfile.erb +0 -325
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/config.sh +0 -27
- data/spec/shared/shlib/distro.sh +0 -74
- data/spec/shared/shlib/server.sh +0 -392
- data/spec/shared/shlib/set_env.sh +0 -169
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -3
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe "#discriminator_key" do
|
5
|
+
describe "#discriminator_key" do
|
6
6
|
|
7
7
|
context "when the discriminator key is not set on a class" do
|
8
|
-
let(:piano) do
|
8
|
+
let(:piano) do
|
9
9
|
Piano.new
|
10
10
|
end
|
11
11
|
|
12
|
-
let(:guitar) do
|
12
|
+
let(:guitar) do
|
13
13
|
Guitar.new
|
14
|
-
end
|
15
|
-
|
14
|
+
end
|
15
|
+
|
16
16
|
it "sets the child discriminator key to _type: Piano" do
|
17
17
|
expect(piano._type).to eq("Piano")
|
18
18
|
end
|
@@ -21,7 +21,7 @@ describe "#discriminator_key" do
|
|
21
21
|
expect(guitar._type).to eq("Guitar")
|
22
22
|
end
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
context "when the discriminator key is changed in the parent" do
|
26
26
|
before do
|
27
27
|
Instrument.discriminator_key = "hello2"
|
@@ -31,11 +31,11 @@ describe "#discriminator_key" do
|
|
31
31
|
Instrument.discriminator_key = nil
|
32
32
|
end
|
33
33
|
|
34
|
-
let(:piano) do
|
34
|
+
let(:piano) do
|
35
35
|
Piano.new
|
36
36
|
end
|
37
37
|
|
38
|
-
let(:guitar) do
|
38
|
+
let(:guitar) do
|
39
39
|
Guitar.new
|
40
40
|
end
|
41
41
|
|
@@ -54,22 +54,24 @@ describe "#discriminator_key" do
|
|
54
54
|
class GlobalIntDiscriminatorParent
|
55
55
|
include Mongoid::Document
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
class GlobalIntDiscriminatorChild < GlobalIntDiscriminatorParent
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
Mongoid.discriminator_key = "test"
|
62
62
|
end
|
63
63
|
|
64
64
|
after do
|
65
65
|
Mongoid.discriminator_key = "_type"
|
66
|
+
Object.send(:remove_const, :GlobalIntDiscriminatorParent)
|
67
|
+
Object.send(:remove_const, :GlobalIntDiscriminatorChild)
|
66
68
|
end
|
67
69
|
|
68
|
-
let(:child) do
|
70
|
+
let(:child) do
|
69
71
|
GlobalIntDiscriminatorChild.new
|
70
72
|
end
|
71
73
|
|
72
|
-
it "has a discriminator key _type" do
|
74
|
+
it "has a discriminator key _type" do
|
73
75
|
expect(child._type).to eq("GlobalIntDiscriminatorChild")
|
74
76
|
end
|
75
77
|
|
@@ -79,36 +81,38 @@ describe "#discriminator_key" do
|
|
79
81
|
end
|
80
82
|
|
81
83
|
context "before class creation" do
|
84
|
+
config_override :discriminator_key, "test"
|
85
|
+
|
82
86
|
before do
|
83
|
-
Mongoid.discriminator_key = "test"
|
84
87
|
|
85
88
|
class PreGlobalIntDiscriminatorParent
|
86
89
|
include Mongoid::Document
|
87
90
|
end
|
88
|
-
|
91
|
+
|
89
92
|
class PreGlobalIntDiscriminatorChild < PreGlobalIntDiscriminatorParent
|
90
93
|
end
|
91
94
|
end
|
92
95
|
|
93
96
|
after do
|
94
|
-
|
97
|
+
Object.send(:remove_const, :PreGlobalIntDiscriminatorParent)
|
98
|
+
Object.send(:remove_const, :PreGlobalIntDiscriminatorChild)
|
95
99
|
end
|
96
100
|
|
97
|
-
let(:child) do
|
101
|
+
let(:child) do
|
98
102
|
PreGlobalIntDiscriminatorChild.new
|
99
103
|
end
|
100
104
|
|
101
|
-
it "creates a field with new discriminator key" do
|
105
|
+
it "creates a field with new discriminator key" do
|
102
106
|
expect(child.test).to eq("PreGlobalIntDiscriminatorChild")
|
103
107
|
end
|
104
|
-
|
108
|
+
|
105
109
|
it "does not have the default value as a field" do
|
106
110
|
expect(defined?(child._type)).to be nil
|
107
111
|
end
|
108
112
|
end
|
109
113
|
end
|
110
114
|
|
111
|
-
context "when the discriminator key is changed in the parent" do
|
115
|
+
context "when the discriminator key is changed in the parent" do
|
112
116
|
context "after child class creation" do
|
113
117
|
before do
|
114
118
|
class LocalIntDiscriminatorParent
|
@@ -121,15 +125,20 @@ describe "#discriminator_key" do
|
|
121
125
|
LocalIntDiscriminatorParent.discriminator_key = "test2"
|
122
126
|
end
|
123
127
|
|
124
|
-
|
128
|
+
after do
|
129
|
+
Object.send(:remove_const, :LocalIntDiscriminatorParent)
|
130
|
+
Object.send(:remove_const, :LocalIntDiscriminatorChild)
|
131
|
+
end
|
132
|
+
|
133
|
+
let(:child) do
|
125
134
|
LocalIntDiscriminatorChild.new
|
126
135
|
end
|
127
136
|
|
128
|
-
it "still has _type field in the child" do
|
137
|
+
it "still has _type field in the child" do
|
129
138
|
expect(child._type).to include("LocalIntDiscriminatorChild")
|
130
139
|
end
|
131
140
|
|
132
|
-
it "has the new field in the child" do
|
141
|
+
it "has the new field in the child" do
|
133
142
|
expect(child.test2).to include("LocalIntDiscriminatorChild")
|
134
143
|
end
|
135
144
|
end
|
@@ -145,11 +154,16 @@ describe "#discriminator_key" do
|
|
145
154
|
end
|
146
155
|
end
|
147
156
|
|
148
|
-
|
157
|
+
after do
|
158
|
+
Object.send(:remove_const, :PreLocalIntDiscriminatorParent)
|
159
|
+
Object.send(:remove_const, :PreLocalIntDiscriminatorChild)
|
160
|
+
end
|
161
|
+
|
162
|
+
let(:child) do
|
149
163
|
PreLocalIntDiscriminatorChild.new
|
150
164
|
end
|
151
165
|
|
152
|
-
it "creates a new field in the child" do
|
166
|
+
it "creates a new field in the child" do
|
153
167
|
expect(child.test2).to include("PreLocalIntDiscriminatorChild")
|
154
168
|
end
|
155
169
|
|
@@ -159,9 +173,9 @@ describe "#discriminator_key" do
|
|
159
173
|
end
|
160
174
|
end
|
161
175
|
|
162
|
-
context "when adding to the db" do
|
176
|
+
context "when adding to the db" do
|
163
177
|
context "when changing the discriminator_key" do
|
164
|
-
before do
|
178
|
+
before do
|
165
179
|
class DBDiscriminatorParent
|
166
180
|
include Mongoid::Document
|
167
181
|
self.discriminator_key = "dkey"
|
@@ -171,34 +185,44 @@ describe "#discriminator_key" do
|
|
171
185
|
end
|
172
186
|
DBDiscriminatorChild.create!
|
173
187
|
end
|
174
|
-
|
175
|
-
|
188
|
+
|
189
|
+
after do
|
190
|
+
Object.send(:remove_const, :DBDiscriminatorParent)
|
191
|
+
Object.send(:remove_const, :DBDiscriminatorChild)
|
192
|
+
end
|
193
|
+
|
194
|
+
it "has the correct count" do
|
176
195
|
expect(DBDiscriminatorChild.count).to eq(1)
|
177
196
|
end
|
178
197
|
|
179
|
-
it "has the correct count in the parent" do
|
198
|
+
it "has the correct count in the parent" do
|
180
199
|
expect(DBDiscriminatorParent.count).to eq(1)
|
181
200
|
end
|
182
201
|
end
|
183
202
|
|
184
203
|
context "when changing the discriminator_key after saving to the db" do
|
185
|
-
before do
|
204
|
+
before do
|
186
205
|
class DBDiscriminatorParent
|
187
206
|
include Mongoid::Document
|
188
207
|
end
|
189
|
-
|
208
|
+
|
190
209
|
class DBDiscriminatorChild < DBDiscriminatorParent
|
191
210
|
end
|
192
211
|
DBDiscriminatorChild.create!
|
193
212
|
DBDiscriminatorParent.discriminator_key = "dkey2"
|
194
213
|
DBDiscriminatorChild.create!
|
195
214
|
end
|
196
|
-
|
197
|
-
|
215
|
+
|
216
|
+
after do
|
217
|
+
Object.send(:remove_const, :DBDiscriminatorParent)
|
218
|
+
Object.send(:remove_const, :DBDiscriminatorChild)
|
219
|
+
end
|
220
|
+
|
221
|
+
it "only finds the documents with the new discriminator key" do
|
198
222
|
expect(DBDiscriminatorChild.count).to eq(1)
|
199
223
|
end
|
200
224
|
|
201
|
-
it "has the correct count in the parent" do
|
225
|
+
it "has the correct count in the parent" do
|
202
226
|
expect(DBDiscriminatorParent.count).to eq(2)
|
203
227
|
end
|
204
228
|
end
|
@@ -213,45 +237,51 @@ describe "#discriminator_key" do
|
|
213
237
|
field :x, type: Integer
|
214
238
|
field :y, type: Integer
|
215
239
|
embedded_in :canvas
|
216
|
-
|
240
|
+
|
217
241
|
self.discriminator_key = "shape_type"
|
218
242
|
end
|
219
|
-
|
243
|
+
|
220
244
|
class Example1Circle < Example1Shape
|
221
245
|
field :radius, type: Float
|
222
246
|
end
|
223
|
-
|
247
|
+
|
224
248
|
class Example1Rectangle < Example1Shape
|
225
249
|
field :width, type: Float
|
226
250
|
field :height, type: Float
|
227
251
|
end
|
228
252
|
end
|
229
|
-
|
230
|
-
|
253
|
+
|
254
|
+
after do
|
255
|
+
Object.send(:remove_const, :Example1Shape)
|
256
|
+
Object.send(:remove_const, :Example1Circle)
|
257
|
+
Object.send(:remove_const, :Example1Rectangle)
|
258
|
+
end
|
259
|
+
|
260
|
+
let(:rectangle) do
|
231
261
|
Example1Rectangle.new
|
232
262
|
end
|
233
|
-
|
234
|
-
let(:circle) do
|
263
|
+
|
264
|
+
let(:circle) do
|
235
265
|
Example1Circle.new
|
236
266
|
end
|
237
|
-
|
238
|
-
it "has the new discriminator key: Rectangle" do
|
267
|
+
|
268
|
+
it "has the new discriminator key: Rectangle" do
|
239
269
|
expect(rectangle.shape_type).to eq("Example1Rectangle")
|
240
270
|
end
|
241
|
-
|
271
|
+
|
242
272
|
it "does not have the default discriminator key: Rectangle" do
|
243
273
|
expect(defined?(rectangle._type)).to be nil
|
244
274
|
end
|
245
|
-
|
246
|
-
it "has the new discriminator key: Circle" do
|
275
|
+
|
276
|
+
it "has the new discriminator key: Circle" do
|
247
277
|
expect(circle.shape_type).to eq("Example1Circle")
|
248
278
|
end
|
249
|
-
|
279
|
+
|
250
280
|
it "does not have the default discriminator key: Circle" do
|
251
281
|
expect(defined?(circle._type)).to be nil
|
252
282
|
end
|
253
283
|
end
|
254
|
-
|
284
|
+
|
255
285
|
context "Example 2" do
|
256
286
|
before do
|
257
287
|
class Example2Shape
|
@@ -260,91 +290,99 @@ describe "#discriminator_key" do
|
|
260
290
|
field :y, type: Integer
|
261
291
|
embedded_in :canvas
|
262
292
|
end
|
263
|
-
|
293
|
+
|
264
294
|
class Example2Circle < Example2Shape
|
265
295
|
field :radius, type: Float
|
266
296
|
end
|
267
|
-
|
297
|
+
|
268
298
|
class Example2Rectangle < Example2Shape
|
269
299
|
field :width, type: Float
|
270
300
|
field :height, type: Float
|
271
301
|
end
|
272
|
-
|
302
|
+
|
273
303
|
Example2Shape.discriminator_key = "shape_type"
|
274
304
|
end
|
275
|
-
|
276
|
-
|
305
|
+
|
306
|
+
after do
|
307
|
+
Example2Shape.discriminator_key = "_type"
|
308
|
+
Object.send(:remove_const, :Example2Shape)
|
309
|
+
Object.send(:remove_const, :Example2Circle)
|
310
|
+
Object.send(:remove_const, :Example2Rectangle)
|
311
|
+
end
|
312
|
+
|
313
|
+
let(:rectangle) do
|
277
314
|
Example2Rectangle.new
|
278
315
|
end
|
279
|
-
|
280
|
-
let(:circle) do
|
316
|
+
|
317
|
+
let(:circle) do
|
281
318
|
Example2Circle.new
|
282
319
|
end
|
283
|
-
|
284
|
-
it "has the new discriminator key: Rectangle" do
|
320
|
+
|
321
|
+
it "has the new discriminator key: Rectangle" do
|
285
322
|
expect(rectangle.shape_type).to eq("Example2Rectangle")
|
286
323
|
end
|
287
|
-
|
324
|
+
|
288
325
|
it "has default discriminator key: Rectangle" do
|
289
326
|
expect(rectangle._type).to eq("Example2Rectangle")
|
290
327
|
end
|
291
|
-
|
292
|
-
it "has the new discriminator key: Circle" do
|
328
|
+
|
329
|
+
it "has the new discriminator key: Circle" do
|
293
330
|
expect(circle.shape_type).to eq("Example2Circle")
|
294
331
|
end
|
295
|
-
|
332
|
+
|
296
333
|
it "has default discriminator key: Circle" do
|
297
334
|
expect(circle._type).to eq("Example2Circle")
|
298
335
|
end
|
299
336
|
end
|
300
|
-
|
337
|
+
|
301
338
|
context "Example 3" do
|
339
|
+
config_override :discriminator_key, "shape_type"
|
340
|
+
|
302
341
|
before do
|
303
|
-
|
304
|
-
Mongoid.discriminator_key = "shape_type"
|
305
|
-
|
306
342
|
class Example3Shape
|
307
343
|
include Mongoid::Document
|
308
344
|
field :x, type: Integer
|
309
345
|
field :y, type: Integer
|
310
346
|
embedded_in :canvas
|
311
347
|
end
|
312
|
-
|
348
|
+
|
313
349
|
class Example3Circle < Example3Shape
|
314
350
|
field :radius, type: Float
|
315
351
|
end
|
316
|
-
|
352
|
+
|
317
353
|
class Example3Rectangle < Example3Shape
|
318
354
|
field :width, type: Float
|
319
355
|
field :height, type: Float
|
320
356
|
end
|
321
|
-
|
357
|
+
|
322
358
|
end
|
323
359
|
|
324
|
-
after do
|
325
|
-
|
360
|
+
after do
|
361
|
+
Object.send(:remove_const, :Example3Shape)
|
362
|
+
Object.send(:remove_const, :Example3Circle)
|
363
|
+
Object.send(:remove_const, :Example3Rectangle)
|
326
364
|
end
|
327
|
-
|
328
|
-
let(:rectangle) do
|
365
|
+
|
366
|
+
let(:rectangle) do
|
329
367
|
Example3Rectangle.new
|
330
368
|
end
|
331
|
-
|
332
|
-
let(:circle) do
|
369
|
+
|
370
|
+
let(:circle) do
|
333
371
|
Example3Circle.new
|
334
372
|
end
|
335
|
-
|
336
|
-
it "has the new discriminator key: Rectangle" do
|
373
|
+
|
374
|
+
it "has the new discriminator key: Rectangle" do
|
337
375
|
expect(rectangle.shape_type).to eq("Example3Rectangle")
|
338
376
|
end
|
339
|
-
|
377
|
+
|
340
378
|
it "does not have the default discriminator key: Rectangle" do
|
341
379
|
expect(defined?(rectangle._type)).to be nil
|
342
380
|
end
|
343
|
-
|
344
|
-
it "has the new discriminator key: Circle" do
|
381
|
+
|
382
|
+
it "has the new discriminator key: Circle" do
|
345
383
|
expect(circle.shape_type).to eq("Example3Circle")
|
346
384
|
end
|
347
|
-
|
385
|
+
|
348
386
|
it "does not have the default discriminator key: Circle" do
|
349
387
|
expect(defined?(circle._type)).to be nil
|
350
388
|
end
|
@@ -0,0 +1,277 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
describe "Dots and Dollars" do
|
6
|
+
min_server_version '5.0'
|
7
|
+
|
8
|
+
before(:all) do
|
9
|
+
class DADMUser
|
10
|
+
include Mongoid::Document
|
11
|
+
field :"first.last", type: String, default: "Neil.Shweky"
|
12
|
+
field :"$_amount", type: Integer, default: 0
|
13
|
+
field :"$a.b", type: Boolean, default: true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
let!(:user) { DADMUser.create! }
|
18
|
+
|
19
|
+
describe "accessing the fields" do
|
20
|
+
|
21
|
+
context "when using the field getters" do
|
22
|
+
|
23
|
+
context "on dotted fields" do
|
24
|
+
it "gets the right value" do
|
25
|
+
expect(user.send(:"first.last")).to eq("Neil.Shweky")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "on dollared fields" do
|
30
|
+
it "gets the right value" do
|
31
|
+
expect(user.send(:"$_amount")).to eq(0)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "on dotted and dollared fields" do
|
36
|
+
it "gets the right value" do
|
37
|
+
expect(user.send(:"$a.b")).to be true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "when using the read_attribute" do
|
43
|
+
|
44
|
+
context "on dotted fields" do
|
45
|
+
it "gets the right value" do
|
46
|
+
expect(user.read_attribute("first.last")).to eq("Neil.Shweky")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "on dollared fields" do
|
51
|
+
it "gets the right value" do
|
52
|
+
expect(user.read_attribute("$_amount")).to eq(0)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "on dotted and dollared fields" do
|
57
|
+
it "gets the right value" do
|
58
|
+
expect(user.read_attribute("$a.b")).to be true
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "when using the field setters" do
|
64
|
+
|
65
|
+
context "on dotted fields" do
|
66
|
+
it "raises an error" do
|
67
|
+
expect do
|
68
|
+
user.send(:"first.last=", "Nissim.Shweky")
|
69
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "on dollared fields" do
|
74
|
+
it "raises an error" do
|
75
|
+
expect do
|
76
|
+
user.send(:"$_amount=", 1)
|
77
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "on dotted and dollared fields" do
|
82
|
+
it "raises an error" do
|
83
|
+
expect do
|
84
|
+
user.send(:"$a.b=", false)
|
85
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "when updating via write_attribute" do
|
91
|
+
|
92
|
+
context "on dotted fields" do
|
93
|
+
it "raises an error" do
|
94
|
+
expect do
|
95
|
+
user.write_attribute("first.last", "Nissim.Shweky")
|
96
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "on dollared fields" do
|
101
|
+
it "raises an error" do
|
102
|
+
expect do
|
103
|
+
user.write_attribute("$_amount", 1)
|
104
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context "on dotted and dollared fields" do
|
109
|
+
it "raises an error" do
|
110
|
+
expect do
|
111
|
+
user.write_attribute("$a.b", false)
|
112
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context "when updating via update_attribute" do
|
118
|
+
|
119
|
+
context "on dotted fields" do
|
120
|
+
it "raises an error" do
|
121
|
+
expect do
|
122
|
+
user.update_attribute("first.last", "Nissim.Shweky")
|
123
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context "on dollared fields" do
|
128
|
+
it "raises an error" do
|
129
|
+
expect do
|
130
|
+
user.update_attribute("$_amount", 1)
|
131
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context "on dotted and dollared fields" do
|
136
|
+
it "raises an error" do
|
137
|
+
expect do
|
138
|
+
user.update_attribute("$a.b", false)
|
139
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context "when updating via update_attributes!" do
|
145
|
+
|
146
|
+
context "on dotted fields" do
|
147
|
+
it "raises an error" do
|
148
|
+
expect do
|
149
|
+
user.update_attributes!("first.last": "Nissim.Shweky")
|
150
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
context "on dollared fields" do
|
155
|
+
it "raises an error" do
|
156
|
+
expect do
|
157
|
+
user.update_attributes!("$_amount": 1)
|
158
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context "on dotted and dollared fields" do
|
163
|
+
it "raises an error" do
|
164
|
+
expect do
|
165
|
+
user.update_attributes!("$a.b": false)
|
166
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
context "when updating via []=" do
|
172
|
+
|
173
|
+
context "on dotted fields" do
|
174
|
+
it "raises an error" do
|
175
|
+
expect do
|
176
|
+
user[:"first.last"] = "Nissim.Shweky"
|
177
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
context "on dollared fields" do
|
182
|
+
it "raises an error" do
|
183
|
+
expect do
|
184
|
+
user[:"$_amount"] = 1
|
185
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
context "on dotted and dollared fields" do
|
190
|
+
it "raises an error" do
|
191
|
+
expect do
|
192
|
+
user[:"$a.b"] = false
|
193
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
context "when updating via remove_attribute" do
|
199
|
+
|
200
|
+
context "on dotted fields" do
|
201
|
+
it "raises an error" do
|
202
|
+
expect do
|
203
|
+
user.remove_attribute("first.last")
|
204
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
context "on dollared fields" do
|
209
|
+
it "raises an error" do
|
210
|
+
expect do
|
211
|
+
user.remove_attribute("$_amount")
|
212
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
context "on dotted and dollared fields" do
|
217
|
+
it "raises an error" do
|
218
|
+
expect do
|
219
|
+
user.remove_attribute("$a.b")
|
220
|
+
end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
describe "persisting to the db" do
|
227
|
+
|
228
|
+
context "when saving to the db" do
|
229
|
+
|
230
|
+
let(:user) { DADMUser.new }
|
231
|
+
|
232
|
+
it "the save succeeds" do
|
233
|
+
expect do
|
234
|
+
user.save!
|
235
|
+
end.to_not raise_error
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
context "when retrieving it from the db" do
|
240
|
+
|
241
|
+
let(:from_db) { DADMUser.first }
|
242
|
+
|
243
|
+
it "has the fields populated correctly" do
|
244
|
+
expect(from_db.attributes["first.last"]).to eq("Neil.Shweky")
|
245
|
+
expect(from_db.attributes["$_amount"]).to eq(0)
|
246
|
+
expect(from_db.attributes["$a.b"]).to eq(true)
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
describe "querying that field" do
|
252
|
+
|
253
|
+
context "when attempting to query a dotted field" do
|
254
|
+
|
255
|
+
let(:queried) do
|
256
|
+
DADMUser.where("first.last": "Neil.Shweky").first
|
257
|
+
end
|
258
|
+
|
259
|
+
it "does not work" do
|
260
|
+
expect(queried).to be nil
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
context "when attempting to query a dollared field" do
|
265
|
+
|
266
|
+
let(:queried) do
|
267
|
+
DADMUser.where("$_amount": 0).first
|
268
|
+
end
|
269
|
+
|
270
|
+
it "raise an error" do
|
271
|
+
expect do
|
272
|
+
queried
|
273
|
+
end.to raise_error(Mongo::Error::OperationFailure)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|