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
data/spec/mongoid/fields_spec.rb
CHANGED
@@ -14,18 +14,15 @@ describe Mongoid::Fields do
|
|
14
14
|
context "when the field is localized" do
|
15
15
|
|
16
16
|
context "when translations exist" do
|
17
|
+
with_default_i18n_configs
|
17
18
|
|
18
19
|
before do
|
20
|
+
I18n.locale = :en
|
19
21
|
product.description = "test"
|
20
|
-
I18n.
|
21
|
-
::I18n.locale = :de
|
22
|
+
I18n.locale = :de
|
22
23
|
product.description = "The best"
|
23
24
|
end
|
24
25
|
|
25
|
-
after do
|
26
|
-
::I18n.locale = :en
|
27
|
-
end
|
28
|
-
|
29
26
|
let(:translations) do
|
30
27
|
product.description_translations
|
31
28
|
end
|
@@ -393,6 +390,22 @@ describe Mongoid::Fields do
|
|
393
390
|
it "converts :time to Time" do
|
394
391
|
expect(klass.field(:test, type: :time).type).to be(Time)
|
395
392
|
end
|
393
|
+
|
394
|
+
context 'when using an unknown symbol' do
|
395
|
+
it 'raises InvalidFieldType' do
|
396
|
+
lambda do
|
397
|
+
klass.field(:test, type: :bogus)
|
398
|
+
end.should raise_error(Mongoid::Errors::InvalidFieldType, /defines a field 'test' with an unknown type value :bogus/)
|
399
|
+
end
|
400
|
+
end
|
401
|
+
|
402
|
+
context 'when using an unknown string' do
|
403
|
+
it 'raises InvalidFieldType' do
|
404
|
+
lambda do
|
405
|
+
klass.field(:test, type: 'bogus')
|
406
|
+
end.should raise_error(Mongoid::Errors::InvalidFieldType, /defines a field 'test' with an unknown type value "bogus"/)
|
407
|
+
end
|
408
|
+
end
|
396
409
|
end
|
397
410
|
|
398
411
|
context "when the options are valid" do
|
@@ -427,25 +440,25 @@ describe Mongoid::Fields do
|
|
427
440
|
context "when the Symbol type is used" do
|
428
441
|
|
429
442
|
before do
|
430
|
-
Mongoid::
|
431
|
-
@
|
443
|
+
Mongoid::Warnings.class_eval do
|
444
|
+
@symbol_type_deprecated = false
|
432
445
|
end
|
433
446
|
end
|
434
447
|
|
435
448
|
after do
|
436
|
-
|
449
|
+
Label.fields.delete("should_warn")
|
437
450
|
end
|
438
451
|
|
439
452
|
it "warns that the BSON symbol type is deprecated" do
|
440
453
|
expect(Mongoid.logger).to receive(:warn)
|
441
454
|
|
442
|
-
|
455
|
+
Label.field :should_warn, type: Symbol
|
443
456
|
end
|
444
457
|
|
445
458
|
it "warns on first use of Symbol type only" do
|
446
459
|
expect(Mongoid.logger).to receive(:warn).once
|
447
460
|
|
448
|
-
|
461
|
+
Label.field :should_warn, type: Symbol
|
449
462
|
end
|
450
463
|
|
451
464
|
context 'when using Symbol field type in multiple classes' do
|
@@ -456,7 +469,7 @@ describe Mongoid::Fields do
|
|
456
469
|
it "warns on first use of Symbol type only" do
|
457
470
|
expect(Mongoid.logger).to receive(:warn).once
|
458
471
|
|
459
|
-
|
472
|
+
Label.field :should_warn, type: Symbol
|
460
473
|
Truck.field :should_warn, type: Symbol
|
461
474
|
end
|
462
475
|
end
|
@@ -466,7 +479,7 @@ describe Mongoid::Fields do
|
|
466
479
|
|
467
480
|
it "raises an error" do
|
468
481
|
expect {
|
469
|
-
|
482
|
+
Label.field :unacceptable, bad: true
|
470
483
|
}.to raise_error(Mongoid::Errors::InvalidFieldOption)
|
471
484
|
end
|
472
485
|
end
|
@@ -511,16 +524,13 @@ describe Mongoid::Fields do
|
|
511
524
|
end
|
512
525
|
|
513
526
|
context "when a single locale is set" do
|
527
|
+
with_default_i18n_configs
|
514
528
|
|
515
529
|
before do
|
516
|
-
|
530
|
+
I18n.locale = :de
|
517
531
|
product.description = "The best"
|
518
532
|
end
|
519
533
|
|
520
|
-
after do
|
521
|
-
::I18n.locale = :en
|
522
|
-
end
|
523
|
-
|
524
534
|
let(:description) do
|
525
535
|
product.description
|
526
536
|
end
|
@@ -531,17 +541,15 @@ describe Mongoid::Fields do
|
|
531
541
|
end
|
532
542
|
|
533
543
|
context "when multiple locales are set" do
|
544
|
+
with_default_i18n_configs
|
534
545
|
|
535
546
|
before do
|
547
|
+
I18n.locale = :end
|
536
548
|
product.description = "Cheap drinks"
|
537
|
-
|
549
|
+
I18n.locale = :de
|
538
550
|
product.description = "Cheaper drinks"
|
539
551
|
end
|
540
552
|
|
541
|
-
after do
|
542
|
-
::I18n.locale = :en
|
543
|
-
end
|
544
|
-
|
545
553
|
let(:description) do
|
546
554
|
product.description
|
547
555
|
end
|
@@ -551,6 +559,49 @@ describe Mongoid::Fields do
|
|
551
559
|
end
|
552
560
|
end
|
553
561
|
end
|
562
|
+
|
563
|
+
context 'when the field is declared as BSON::Decimal128' do
|
564
|
+
let(:document) { Mop.create!(decimal128_field: BSON::Decimal128.new(Math::PI.to_s)).reload }
|
565
|
+
|
566
|
+
shared_context 'BSON::Decimal128 is BigDecimal' do
|
567
|
+
it 'should return a BigDecimal' do
|
568
|
+
expect(document.decimal128_field).to be_a BigDecimal
|
569
|
+
end
|
570
|
+
end
|
571
|
+
|
572
|
+
shared_context 'BSON::Decimal128 is BSON::Decimal128' do
|
573
|
+
it 'should return a BSON::Decimal128' do
|
574
|
+
expect(document.decimal128_field).to be_a BSON::Decimal128
|
575
|
+
end
|
576
|
+
end
|
577
|
+
|
578
|
+
it 'is declared as BSON::Decimal128' do
|
579
|
+
expect(Mop.fields['decimal128_field'].type).to be == BSON::Decimal128
|
580
|
+
end
|
581
|
+
|
582
|
+
context 'when BSON version <= 4' do
|
583
|
+
max_bson_version '4.99.99'
|
584
|
+
it_behaves_like 'BSON::Decimal128 is BSON::Decimal128'
|
585
|
+
end
|
586
|
+
|
587
|
+
context 'when BSON version >= 5' do
|
588
|
+
min_bson_version '5.0.0'
|
589
|
+
|
590
|
+
context 'when allow_bson5_decimal128 is false' do
|
591
|
+
config_override :allow_bson5_decimal128, false
|
592
|
+
it_behaves_like 'BSON::Decimal128 is BigDecimal'
|
593
|
+
end
|
594
|
+
|
595
|
+
context 'when allow_bson5_decimal128 is true' do
|
596
|
+
config_override :allow_bson5_decimal128, true
|
597
|
+
it_behaves_like 'BSON::Decimal128 is BSON::Decimal128'
|
598
|
+
end
|
599
|
+
|
600
|
+
context 'when allow_bson5_decimal128 is default' do
|
601
|
+
it_behaves_like 'BSON::Decimal128 is BigDecimal'
|
602
|
+
end
|
603
|
+
end
|
604
|
+
end
|
554
605
|
end
|
555
606
|
|
556
607
|
describe "#getter_before_type_cast" do
|
@@ -568,8 +619,144 @@ describe Mongoid::Fields do
|
|
568
619
|
context "when the attribute has been assigned" do
|
569
620
|
|
570
621
|
it "returns the attribute before type cast" do
|
571
|
-
person.age = "
|
572
|
-
expect(person.age_before_type_cast).to eq("
|
622
|
+
person.age = "42"
|
623
|
+
expect(person.age_before_type_cast).to eq("42")
|
624
|
+
end
|
625
|
+
end
|
626
|
+
|
627
|
+
context "when reloading" do
|
628
|
+
|
629
|
+
let(:product) do
|
630
|
+
Product.create!(price: '1')
|
631
|
+
end
|
632
|
+
|
633
|
+
before do
|
634
|
+
product.reload
|
635
|
+
end
|
636
|
+
|
637
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
638
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
639
|
+
end
|
640
|
+
|
641
|
+
it "the *_before_type_cast method returns the demongoized value" do
|
642
|
+
expect(product.price_before_type_cast).to eq(1)
|
643
|
+
end
|
644
|
+
end
|
645
|
+
|
646
|
+
context "when reloading and writing a demongoizable value" do
|
647
|
+
|
648
|
+
let(:product) do
|
649
|
+
Product.create!.tap do |product|
|
650
|
+
Product.collection.update_one({ _id: product.id }, { :$set => { price: '1' }})
|
651
|
+
end
|
652
|
+
end
|
653
|
+
|
654
|
+
before do
|
655
|
+
product.reload
|
656
|
+
end
|
657
|
+
|
658
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
659
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
660
|
+
end
|
661
|
+
|
662
|
+
it "the *_before_type_cast method returns the mongoized value" do
|
663
|
+
expect(product.price_before_type_cast).to eq('1')
|
664
|
+
end
|
665
|
+
end
|
666
|
+
|
667
|
+
context "when reading from the db" do
|
668
|
+
|
669
|
+
let(:product) do
|
670
|
+
Product.create!(price: '1')
|
671
|
+
end
|
672
|
+
|
673
|
+
let(:from_db) do
|
674
|
+
Product.find(product.id)
|
675
|
+
end
|
676
|
+
|
677
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
678
|
+
expect(from_db.attributes_before_type_cast).to eq(from_db.attributes)
|
679
|
+
end
|
680
|
+
|
681
|
+
it "the *_before_type_cast method returns the demongoized value" do
|
682
|
+
expect(from_db.price_before_type_cast).to eq(1)
|
683
|
+
end
|
684
|
+
end
|
685
|
+
|
686
|
+
context "when reading from the db after writing a demongoizable value" do
|
687
|
+
|
688
|
+
let(:product) do
|
689
|
+
Product.create!.tap do |product|
|
690
|
+
Product.collection.update_one({ _id: product.id }, { :$set => { price: '1' }})
|
691
|
+
end
|
692
|
+
end
|
693
|
+
|
694
|
+
let(:from_db) do
|
695
|
+
Product.find(product.id)
|
696
|
+
end
|
697
|
+
|
698
|
+
it "resets the attributes_before_type_cast to the attributes hash" do
|
699
|
+
expect(from_db.attributes_before_type_cast).to eq(from_db.attributes)
|
700
|
+
end
|
701
|
+
|
702
|
+
it "the *_before_type_cast method returns the mongoized value" do
|
703
|
+
expect(from_db.price_before_type_cast).to eq('1')
|
704
|
+
end
|
705
|
+
end
|
706
|
+
|
707
|
+
context "when making a new model" do
|
708
|
+
|
709
|
+
context "when using new with no options" do
|
710
|
+
let(:product) { Product.new }
|
711
|
+
|
712
|
+
it "sets the attributes_before_type_cast to the attributes hash" do
|
713
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
714
|
+
end
|
715
|
+
end
|
716
|
+
|
717
|
+
context "when using new with options" do
|
718
|
+
let(:product) { Product.new(price: '1') }
|
719
|
+
|
720
|
+
let(:abtc) do
|
721
|
+
product.attributes.merge('price' => '1')
|
722
|
+
end
|
723
|
+
|
724
|
+
it "has the attributes before type cast" do
|
725
|
+
expect(product.attributes_before_type_cast).to eq(abtc)
|
726
|
+
end
|
727
|
+
end
|
728
|
+
|
729
|
+
context "when persisting the model" do
|
730
|
+
let(:product) { Product.new(price: '1') }
|
731
|
+
|
732
|
+
let(:abtc) do
|
733
|
+
product.attributes.merge('price' => '1')
|
734
|
+
end
|
735
|
+
|
736
|
+
before do
|
737
|
+
expect(product.attributes_before_type_cast).to eq(abtc)
|
738
|
+
product.save!
|
739
|
+
end
|
740
|
+
|
741
|
+
it "resets the attributes_before_type_cast to the attributes" do
|
742
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
743
|
+
end
|
744
|
+
end
|
745
|
+
|
746
|
+
context "when using create! without options" do
|
747
|
+
let(:product) { Product.create! }
|
748
|
+
|
749
|
+
it "resets the attributes_before_type_cast to the attributes" do
|
750
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
751
|
+
end
|
752
|
+
end
|
753
|
+
|
754
|
+
context "when using create! with options" do
|
755
|
+
let(:product) { Product.create!(price: '1') }
|
756
|
+
|
757
|
+
it "resets the attributes_before_type_cast to the attributes" do
|
758
|
+
expect(product.attributes_before_type_cast).to eq(product.attributes)
|
759
|
+
end
|
573
760
|
end
|
574
761
|
end
|
575
762
|
end
|
@@ -683,16 +870,13 @@ describe Mongoid::Fields do
|
|
683
870
|
end
|
684
871
|
|
685
872
|
context "when a locale is set" do
|
873
|
+
with_default_i18n_configs
|
686
874
|
|
687
875
|
before do
|
688
|
-
|
876
|
+
I18n.locale = :de
|
689
877
|
product.description = "Cheaper drinks"
|
690
878
|
end
|
691
879
|
|
692
|
-
after do
|
693
|
-
::I18n.locale = :en
|
694
|
-
end
|
695
|
-
|
696
880
|
let(:description) do
|
697
881
|
product.attributes["description"]
|
698
882
|
end
|
@@ -703,17 +887,15 @@ describe Mongoid::Fields do
|
|
703
887
|
end
|
704
888
|
|
705
889
|
context "when having multiple locales" do
|
890
|
+
with_default_i18n_configs
|
706
891
|
|
707
892
|
before do
|
893
|
+
I18n.locale = :en
|
708
894
|
product.description = "Cheap drinks"
|
709
|
-
|
895
|
+
I18n.locale = :de
|
710
896
|
product.description = "Cheaper drinks"
|
711
897
|
end
|
712
898
|
|
713
|
-
after do
|
714
|
-
::I18n.locale = :en
|
715
|
-
end
|
716
|
-
|
717
899
|
let(:description) do
|
718
900
|
product.attributes["description"]
|
719
901
|
end
|
@@ -725,6 +907,22 @@ describe Mongoid::Fields do
|
|
725
907
|
end
|
726
908
|
end
|
727
909
|
end
|
910
|
+
|
911
|
+
context "when the field needs to be mongoized" do
|
912
|
+
|
913
|
+
before do
|
914
|
+
product.price = "1"
|
915
|
+
product.save!
|
916
|
+
end
|
917
|
+
|
918
|
+
it "mongoizes the value" do
|
919
|
+
expect(product.price).to eq(1)
|
920
|
+
end
|
921
|
+
|
922
|
+
it "stores the value in the mongoized form" do
|
923
|
+
expect(product.attributes_before_type_cast["price"]).to eq(1)
|
924
|
+
end
|
925
|
+
end
|
728
926
|
end
|
729
927
|
|
730
928
|
describe "#defaults" do
|
@@ -861,7 +1059,7 @@ describe Mongoid::Fields do
|
|
861
1059
|
it "raises an error" do
|
862
1060
|
expect {
|
863
1061
|
Person.field(meth)
|
864
|
-
}.to raise_error(Mongoid::Errors::InvalidField)
|
1062
|
+
}.to raise_error(Mongoid::Errors::InvalidField, /Defining a field named '#{meth}' is not allowed/)
|
865
1063
|
end
|
866
1064
|
end
|
867
1065
|
end
|
@@ -899,14 +1097,7 @@ describe Mongoid::Fields do
|
|
899
1097
|
end
|
900
1098
|
|
901
1099
|
context "when reading the field" do
|
902
|
-
|
903
|
-
before do
|
904
|
-
Time.zone = "Berlin"
|
905
|
-
end
|
906
|
-
|
907
|
-
after do
|
908
|
-
Time.zone = nil
|
909
|
-
end
|
1100
|
+
time_zone_override "Berlin"
|
910
1101
|
|
911
1102
|
it "performs the necessary time conversions" do
|
912
1103
|
expect(person.lunch_time.to_s).to eq(time.getlocal.to_s)
|
@@ -988,7 +1179,7 @@ describe Mongoid::Fields do
|
|
988
1179
|
end
|
989
1180
|
|
990
1181
|
it "uses the alias to write the attribute" do
|
991
|
-
(person.alias =
|
1182
|
+
expect(person.alias = true).to be true
|
992
1183
|
end
|
993
1184
|
|
994
1185
|
it "uses the alias to read the attribute" do
|
@@ -1000,7 +1191,7 @@ describe Mongoid::Fields do
|
|
1000
1191
|
end
|
1001
1192
|
|
1002
1193
|
it "uses the name to write the attribute" do
|
1003
|
-
(person.aliased =
|
1194
|
+
expect(person.aliased = true).to be true
|
1004
1195
|
end
|
1005
1196
|
|
1006
1197
|
it "uses the name to read the attribute" do
|
@@ -1229,71 +1420,147 @@ describe Mongoid::Fields do
|
|
1229
1420
|
|
1230
1421
|
context "when a field is defined as a big decimal" do
|
1231
1422
|
|
1232
|
-
|
1233
|
-
|
1234
|
-
end
|
1235
|
-
|
1236
|
-
let(:decimal) do
|
1237
|
-
BigDecimal("1000000.00")
|
1238
|
-
end
|
1239
|
-
|
1240
|
-
context "when setting to a big decimal" do
|
1423
|
+
context 'when Mongoid.map_big_decimal_to_decimal128 is false' do
|
1424
|
+
config_override :map_big_decimal_to_decimal128, false
|
1241
1425
|
|
1242
|
-
|
1243
|
-
|
1426
|
+
let(:band) do
|
1427
|
+
Band.new(name: "Tool")
|
1244
1428
|
end
|
1245
1429
|
|
1246
|
-
|
1247
|
-
|
1430
|
+
let(:decimal) do
|
1431
|
+
BigDecimal("1000000.00")
|
1248
1432
|
end
|
1249
1433
|
|
1250
|
-
|
1251
|
-
|
1434
|
+
context "when setting to a big decimal" do
|
1435
|
+
|
1436
|
+
before do
|
1437
|
+
band.sales = decimal
|
1438
|
+
end
|
1439
|
+
|
1440
|
+
it "properly persists as a string" do
|
1441
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
1442
|
+
end
|
1443
|
+
|
1444
|
+
it "returns the proper big decimal" do
|
1445
|
+
expect(band.sales).to eq(decimal)
|
1446
|
+
end
|
1252
1447
|
end
|
1253
|
-
end
|
1254
1448
|
|
1255
|
-
|
1449
|
+
context "when setting to a string" do
|
1256
1450
|
|
1257
|
-
|
1258
|
-
|
1451
|
+
before do
|
1452
|
+
band.sales = decimal.to_s
|
1453
|
+
end
|
1454
|
+
|
1455
|
+
it "properly persists as a string" do
|
1456
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
1457
|
+
end
|
1458
|
+
|
1459
|
+
it "returns the proper big decimal" do
|
1460
|
+
expect(band.sales).to eq(decimal)
|
1461
|
+
end
|
1259
1462
|
end
|
1260
1463
|
|
1261
|
-
|
1262
|
-
|
1464
|
+
context "when setting to an integer" do
|
1465
|
+
|
1466
|
+
before do
|
1467
|
+
band.sales = decimal.to_i
|
1468
|
+
end
|
1469
|
+
|
1470
|
+
it "properly persists as a string" do
|
1471
|
+
expect(band.attributes["sales"]).to eq("1000000")
|
1472
|
+
end
|
1473
|
+
|
1474
|
+
it "returns the proper big decimal" do
|
1475
|
+
expect(band.sales).to eq(decimal)
|
1476
|
+
end
|
1263
1477
|
end
|
1264
1478
|
|
1265
|
-
|
1266
|
-
|
1479
|
+
context "when setting to a float" do
|
1480
|
+
|
1481
|
+
before do
|
1482
|
+
band.sales = decimal.to_f
|
1483
|
+
end
|
1484
|
+
|
1485
|
+
it "properly persists as a string" do
|
1486
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
1487
|
+
end
|
1488
|
+
|
1489
|
+
it "returns the proper big decimal" do
|
1490
|
+
expect(band.sales).to eq(decimal)
|
1491
|
+
end
|
1267
1492
|
end
|
1268
1493
|
end
|
1269
1494
|
|
1270
|
-
context
|
1495
|
+
context 'when Mongoid.map_big_decimal_to_decimal128 is true' do
|
1496
|
+
config_override :map_big_decimal_to_decimal128, true
|
1271
1497
|
|
1272
|
-
|
1273
|
-
|
1498
|
+
let(:band) do
|
1499
|
+
Band.new(name: "Tool")
|
1274
1500
|
end
|
1275
1501
|
|
1276
|
-
|
1277
|
-
|
1502
|
+
let(:decimal) do
|
1503
|
+
BigDecimal("1000000.00")
|
1278
1504
|
end
|
1279
1505
|
|
1280
|
-
|
1281
|
-
|
1506
|
+
context "when setting to a big decimal" do
|
1507
|
+
|
1508
|
+
before do
|
1509
|
+
band.sales = decimal
|
1510
|
+
end
|
1511
|
+
|
1512
|
+
it "properly persists as a BSON::Decimal128" do
|
1513
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal))
|
1514
|
+
end
|
1515
|
+
|
1516
|
+
it "returns the proper big decimal" do
|
1517
|
+
expect(band.sales).to eq(decimal)
|
1518
|
+
end
|
1282
1519
|
end
|
1283
|
-
end
|
1284
1520
|
|
1285
|
-
|
1521
|
+
context "when setting to a string" do
|
1286
1522
|
|
1287
|
-
|
1288
|
-
|
1523
|
+
before do
|
1524
|
+
band.sales = decimal.to_s
|
1525
|
+
end
|
1526
|
+
|
1527
|
+
it "persists as a BSON::Decimal128" do
|
1528
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal.to_s))
|
1529
|
+
end
|
1530
|
+
|
1531
|
+
it "returns the proper big decimal" do
|
1532
|
+
expect(band.sales).to eq(decimal)
|
1533
|
+
end
|
1289
1534
|
end
|
1290
1535
|
|
1291
|
-
|
1292
|
-
|
1536
|
+
context "when setting to an integer" do
|
1537
|
+
|
1538
|
+
before do
|
1539
|
+
band.sales = decimal.to_i
|
1540
|
+
end
|
1541
|
+
|
1542
|
+
it "persists as a BSON::Decimal128" do
|
1543
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal.to_i.to_s))
|
1544
|
+
end
|
1545
|
+
|
1546
|
+
it "returns the proper big decimal" do
|
1547
|
+
expect(band.sales).to eq(decimal)
|
1548
|
+
end
|
1293
1549
|
end
|
1294
1550
|
|
1295
|
-
|
1296
|
-
|
1551
|
+
context "when setting to a float" do
|
1552
|
+
|
1553
|
+
before do
|
1554
|
+
band.sales = decimal.to_f
|
1555
|
+
end
|
1556
|
+
|
1557
|
+
it "properly persists as a BSON::Decimal128" do
|
1558
|
+
expect(band.attributes["sales"]).to eq(BSON::Decimal128.new(decimal.to_f.to_s))
|
1559
|
+
end
|
1560
|
+
|
1561
|
+
it "returns the proper big decimal" do
|
1562
|
+
expect(band.sales).to eq(decimal)
|
1563
|
+
end
|
1297
1564
|
end
|
1298
1565
|
end
|
1299
1566
|
end
|
@@ -1578,12 +1845,12 @@ describe Mongoid::Fields do
|
|
1578
1845
|
|
1579
1846
|
context 'given nil' do
|
1580
1847
|
subject { Person.database_field_name(nil) }
|
1581
|
-
it { is_expected.to eq
|
1848
|
+
it { is_expected.to eq '' }
|
1582
1849
|
end
|
1583
1850
|
|
1584
1851
|
context 'given an empty String' do
|
1585
1852
|
subject { Person.database_field_name('') }
|
1586
|
-
it { is_expected.to eq
|
1853
|
+
it { is_expected.to eq '' }
|
1587
1854
|
end
|
1588
1855
|
|
1589
1856
|
context 'given a String' do
|
@@ -1602,7 +1869,7 @@ describe Mongoid::Fields do
|
|
1602
1869
|
|
1603
1870
|
context 'given nil' do
|
1604
1871
|
subject { Person.database_field_name(nil) }
|
1605
|
-
it { is_expected.to eq
|
1872
|
+
it { is_expected.to eq '' }
|
1606
1873
|
end
|
1607
1874
|
|
1608
1875
|
context 'given an empty String' do
|
@@ -1620,6 +1887,33 @@ describe Mongoid::Fields do
|
|
1620
1887
|
it_behaves_like 'pre-fix database_field_name'
|
1621
1888
|
end
|
1622
1889
|
end
|
1890
|
+
|
1891
|
+
context 'when getting the database field name of a belongs_to associations' do
|
1892
|
+
# These tests only apply when the flag is not set
|
1893
|
+
config_override :broken_alias_handling, false
|
1894
|
+
|
1895
|
+
context "when the broken_alias_handling is not set" do
|
1896
|
+
context "when the association is the last item" do
|
1897
|
+
let(:name) do
|
1898
|
+
Game.database_field_name("person")
|
1899
|
+
end
|
1900
|
+
|
1901
|
+
it "gets the alias" do
|
1902
|
+
expect(name).to eq("person_id")
|
1903
|
+
end
|
1904
|
+
end
|
1905
|
+
|
1906
|
+
context "when the association is not the last item" do
|
1907
|
+
let(:name) do
|
1908
|
+
Game.database_field_name("person.name")
|
1909
|
+
end
|
1910
|
+
|
1911
|
+
it "gets the alias" do
|
1912
|
+
expect(name).to eq("person.name")
|
1913
|
+
end
|
1914
|
+
end
|
1915
|
+
end
|
1916
|
+
end
|
1623
1917
|
end
|
1624
1918
|
|
1625
1919
|
describe "#get_field" do
|
@@ -1693,4 +1987,126 @@ describe Mongoid::Fields do
|
|
1693
1987
|
end
|
1694
1988
|
end
|
1695
1989
|
end
|
1990
|
+
|
1991
|
+
describe "localize: :present" do
|
1992
|
+
|
1993
|
+
let(:product) do
|
1994
|
+
Product.new
|
1995
|
+
end
|
1996
|
+
|
1997
|
+
context "when assigning a non blank value" do
|
1998
|
+
|
1999
|
+
before do
|
2000
|
+
product.title = "hello"
|
2001
|
+
end
|
2002
|
+
|
2003
|
+
it "assigns the value" do
|
2004
|
+
expect(product.title).to eq("hello")
|
2005
|
+
end
|
2006
|
+
|
2007
|
+
it "populates the translations hash" do
|
2008
|
+
expect(product.title_translations).to eq({ "en" => "hello" })
|
2009
|
+
end
|
2010
|
+
end
|
2011
|
+
|
2012
|
+
context "when assigning an empty string" do
|
2013
|
+
with_default_i18n_configs
|
2014
|
+
|
2015
|
+
before do
|
2016
|
+
I18n.locale = :en
|
2017
|
+
product.title = "hello"
|
2018
|
+
I18n.locale = :de
|
2019
|
+
product.title = "hello there!"
|
2020
|
+
product.title = ""
|
2021
|
+
end
|
2022
|
+
|
2023
|
+
it "assigns the value" do
|
2024
|
+
expect(product.title).to eq(nil)
|
2025
|
+
end
|
2026
|
+
|
2027
|
+
it "populates the translations hash" do
|
2028
|
+
expect(product.title_translations).to eq({ "en" => "hello" })
|
2029
|
+
end
|
2030
|
+
end
|
2031
|
+
|
2032
|
+
context "when assigning nil" do
|
2033
|
+
with_default_i18n_configs
|
2034
|
+
|
2035
|
+
before do
|
2036
|
+
I18n.locale = :en
|
2037
|
+
product.title = "hello"
|
2038
|
+
I18n.locale = :de
|
2039
|
+
product.title = "hello there!"
|
2040
|
+
product.title = nil
|
2041
|
+
end
|
2042
|
+
|
2043
|
+
it "assigns the value" do
|
2044
|
+
expect(product.title).to eq(nil)
|
2045
|
+
end
|
2046
|
+
|
2047
|
+
it "populates the translations hash" do
|
2048
|
+
expect(product.title_translations).to eq({ "en" => "hello" })
|
2049
|
+
end
|
2050
|
+
end
|
2051
|
+
|
2052
|
+
context "when assigning an empty array" do
|
2053
|
+
with_default_i18n_configs
|
2054
|
+
|
2055
|
+
before do
|
2056
|
+
I18n.locale = :en
|
2057
|
+
product.title = "hello"
|
2058
|
+
I18n.locale = :de
|
2059
|
+
product.title = "hello there!"
|
2060
|
+
product.title = []
|
2061
|
+
end
|
2062
|
+
|
2063
|
+
it "assigns the value" do
|
2064
|
+
expect(product.title).to eq(nil)
|
2065
|
+
end
|
2066
|
+
|
2067
|
+
it "populates the translations hash" do
|
2068
|
+
expect(product.title_translations).to eq({ "en" => "hello" })
|
2069
|
+
end
|
2070
|
+
end
|
2071
|
+
|
2072
|
+
context "when assigning an empty string first" do
|
2073
|
+
with_default_i18n_configs
|
2074
|
+
|
2075
|
+
before do
|
2076
|
+
product.title = ""
|
2077
|
+
end
|
2078
|
+
|
2079
|
+
it "assigns the value" do
|
2080
|
+
expect(product.title).to eq(nil)
|
2081
|
+
end
|
2082
|
+
|
2083
|
+
it "populates the translations hash" do
|
2084
|
+
expect(product.title_translations).to eq({})
|
2085
|
+
end
|
2086
|
+
end
|
2087
|
+
|
2088
|
+
context "when assigning an empty string with only one translation" do
|
2089
|
+
with_default_i18n_configs
|
2090
|
+
|
2091
|
+
before do
|
2092
|
+
product.title = "Hello"
|
2093
|
+
product.title = ""
|
2094
|
+
product.save!
|
2095
|
+
end
|
2096
|
+
|
2097
|
+
let(:from_db) { Product.first }
|
2098
|
+
|
2099
|
+
it "assigns the value" do
|
2100
|
+
expect(product.title).to eq(nil)
|
2101
|
+
end
|
2102
|
+
|
2103
|
+
it "populates the translations hash" do
|
2104
|
+
expect(product.title_translations).to eq({})
|
2105
|
+
end
|
2106
|
+
|
2107
|
+
it "round trips an empty hash" do
|
2108
|
+
expect(from_db.title_translations).to eq({})
|
2109
|
+
end
|
2110
|
+
end
|
2111
|
+
end
|
1696
2112
|
end
|