mongoid 7.5.4 → 8.1.7
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 +29 -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 +3 -3
- 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 +47 -38
- 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 +127 -35
- data/lib/mongoid/equality.rb +8 -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 +186 -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 +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +3 -4
- data/lib/mongoid/traversable.rb +10 -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 +2 -1
- 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/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_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 +78 -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 +32 -41
- 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 +824 -22
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- 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_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 +101 -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
@@ -8,401 +8,901 @@ describe Mongoid::Extensions::BigDecimal do
|
|
8
8
|
BigDecimal("123456.789")
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
context 'when map_big_decimal_to_decimal128 is false' do
|
12
|
+
config_override :map_big_decimal_to_decimal128, false
|
12
13
|
|
13
|
-
|
14
|
+
describe ".demongoize" do
|
14
15
|
|
15
|
-
let(:
|
16
|
-
|
16
|
+
let(:demongoized) do
|
17
|
+
BigDecimal.demongoize(value)
|
17
18
|
end
|
18
19
|
|
19
|
-
|
20
|
-
|
20
|
+
context "when the value is an empty String" do
|
21
|
+
|
22
|
+
let(:value) do
|
23
|
+
""
|
24
|
+
end
|
25
|
+
|
26
|
+
it "raises an error" do
|
27
|
+
expect(demongoized).to be_nil
|
28
|
+
end
|
21
29
|
end
|
22
|
-
end
|
23
30
|
|
24
|
-
|
31
|
+
context "when the value is a numeric String" do
|
32
|
+
|
33
|
+
let(:value) do
|
34
|
+
"123456.789"
|
35
|
+
end
|
25
36
|
|
26
|
-
|
27
|
-
|
37
|
+
it "returns a BigDecimal" do
|
38
|
+
expect(demongoized).to eq(BigDecimal(value))
|
39
|
+
end
|
28
40
|
end
|
29
41
|
|
30
|
-
|
31
|
-
|
42
|
+
context "when the value is the numeric String zero" do
|
43
|
+
|
44
|
+
let(:value) do
|
45
|
+
"0.0"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns a BigDecimal" do
|
49
|
+
expect(demongoized).to eq(BigDecimal(value))
|
50
|
+
end
|
32
51
|
end
|
33
|
-
end
|
34
52
|
|
35
|
-
|
53
|
+
context "when the value is the numeric String negative zero" do
|
54
|
+
|
55
|
+
let(:value) do
|
56
|
+
"-0.0"
|
57
|
+
end
|
36
58
|
|
37
|
-
|
38
|
-
|
59
|
+
it "returns a BigDecimal" do
|
60
|
+
expect(demongoized).to eq(BigDecimal(value))
|
61
|
+
end
|
39
62
|
end
|
40
63
|
|
41
|
-
|
42
|
-
|
64
|
+
context "when the value is a non-numeric String" do
|
65
|
+
|
66
|
+
let(:value) do
|
67
|
+
"1a2"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns nil" do
|
71
|
+
expect(demongoized).to be_nil
|
72
|
+
end
|
43
73
|
end
|
44
|
-
end
|
45
74
|
|
46
|
-
|
75
|
+
context "when the value is nil" do
|
47
76
|
|
48
|
-
|
49
|
-
|
77
|
+
let(:value) do
|
78
|
+
nil
|
79
|
+
end
|
80
|
+
|
81
|
+
it "returns nil" do
|
82
|
+
expect(demongoized).to be_nil
|
83
|
+
end
|
50
84
|
end
|
51
85
|
|
52
|
-
|
53
|
-
|
86
|
+
context "when the value is true" do
|
87
|
+
|
88
|
+
let(:value) do
|
89
|
+
true
|
90
|
+
end
|
91
|
+
|
92
|
+
it "returns nil" do
|
93
|
+
expect(demongoized).to be_nil
|
94
|
+
end
|
54
95
|
end
|
55
|
-
end
|
56
96
|
|
57
|
-
|
97
|
+
context "when the value is false" do
|
98
|
+
|
99
|
+
let(:value) do
|
100
|
+
false
|
101
|
+
end
|
58
102
|
|
59
|
-
|
60
|
-
|
103
|
+
it "returns nil" do
|
104
|
+
expect(demongoized).to be_nil
|
105
|
+
end
|
61
106
|
end
|
62
107
|
|
63
|
-
|
64
|
-
|
108
|
+
context "when the value is an Integer" do
|
109
|
+
|
110
|
+
let(:value) do
|
111
|
+
123456
|
112
|
+
end
|
113
|
+
|
114
|
+
it "returns an integer" do
|
115
|
+
expect(demongoized).to eq(value)
|
116
|
+
end
|
65
117
|
end
|
66
|
-
end
|
67
118
|
|
68
|
-
|
119
|
+
context "when the value is a Float" do
|
120
|
+
|
121
|
+
let(:value) do
|
122
|
+
123456.789
|
123
|
+
end
|
69
124
|
|
70
|
-
|
71
|
-
|
125
|
+
it "returns a float" do
|
126
|
+
expect(demongoized).to eq(value)
|
127
|
+
end
|
72
128
|
end
|
73
|
-
end
|
74
129
|
|
75
|
-
|
130
|
+
context "when the value is the String 'NaN'" do
|
131
|
+
|
132
|
+
let(:value) do
|
133
|
+
"NaN"
|
134
|
+
end
|
135
|
+
|
136
|
+
it "returns a BigDecimal" do
|
137
|
+
expect(demongoized).to be_a(BigDecimal)
|
138
|
+
end
|
76
139
|
|
77
|
-
|
78
|
-
|
140
|
+
it "is a NaN BigDecimal" do
|
141
|
+
expect(demongoized).to be_nan
|
142
|
+
end
|
79
143
|
end
|
80
144
|
|
81
|
-
|
82
|
-
|
145
|
+
context "when the value is the String 'Infinity'" do
|
146
|
+
|
147
|
+
let(:value) do
|
148
|
+
"Infinity"
|
149
|
+
end
|
150
|
+
|
151
|
+
it "returns a BigDecimal" do
|
152
|
+
expect(demongoized).to be_a(BigDecimal)
|
153
|
+
end
|
154
|
+
|
155
|
+
it "is a infinity BigDecimal" do
|
156
|
+
expect(demongoized.infinite?).to eq 1
|
157
|
+
end
|
83
158
|
end
|
84
|
-
end
|
85
159
|
|
86
|
-
|
160
|
+
context "when the value is the String '-Infinity'" do
|
161
|
+
|
162
|
+
let(:value) do
|
163
|
+
"-Infinity"
|
164
|
+
end
|
165
|
+
|
166
|
+
it "returns a BigDecimal" do
|
167
|
+
expect(demongoized).to be_a(BigDecimal)
|
168
|
+
end
|
87
169
|
|
88
|
-
|
89
|
-
|
170
|
+
it "is a negative infinity BigDecimal" do
|
171
|
+
expect(demongoized.infinite?).to eq -1
|
172
|
+
end
|
90
173
|
end
|
91
174
|
|
92
|
-
|
93
|
-
|
175
|
+
context "when the value is a BSON::Decimal128" do
|
176
|
+
|
177
|
+
let(:value) do
|
178
|
+
BSON::Decimal128.new("1.2")
|
179
|
+
end
|
180
|
+
|
181
|
+
it "does not raise an error" do
|
182
|
+
expect do
|
183
|
+
demongoized
|
184
|
+
end.to_not raise_error
|
185
|
+
end
|
186
|
+
|
187
|
+
it "returns a big decimal" do
|
188
|
+
expect(demongoized).to eq(value.to_big_decimal)
|
189
|
+
end
|
94
190
|
end
|
95
191
|
end
|
96
192
|
|
97
|
-
|
193
|
+
describe ".mongoize" do
|
98
194
|
|
99
|
-
let(:
|
100
|
-
|
195
|
+
let(:mongoized) do
|
196
|
+
BigDecimal.mongoize(value)
|
101
197
|
end
|
102
198
|
|
103
|
-
|
104
|
-
|
199
|
+
context "when the value is a BigDecimal" do
|
200
|
+
|
201
|
+
let(:value) do
|
202
|
+
big_decimal
|
203
|
+
end
|
204
|
+
|
205
|
+
it "returns a string" do
|
206
|
+
expect(mongoized).to eq(value.to_s)
|
207
|
+
end
|
105
208
|
end
|
106
|
-
end
|
107
209
|
|
108
|
-
|
210
|
+
context "when the value is the BigDecimal zero" do
|
109
211
|
|
110
|
-
|
111
|
-
|
212
|
+
let(:value) do
|
213
|
+
BigDecimal("0.0")
|
214
|
+
end
|
215
|
+
|
216
|
+
it "returns a string" do
|
217
|
+
expect(mongoized).to eq(value.to_s)
|
218
|
+
end
|
112
219
|
end
|
113
220
|
|
114
|
-
|
115
|
-
|
221
|
+
context "when the value is the BigDecimal negative zero" do
|
222
|
+
|
223
|
+
let(:value) do
|
224
|
+
BigDecimal("-0.0")
|
225
|
+
end
|
226
|
+
|
227
|
+
it "returns a string" do
|
228
|
+
expect(mongoized).to eq(value.to_s)
|
229
|
+
end
|
116
230
|
end
|
117
|
-
end
|
118
231
|
|
119
|
-
|
232
|
+
context "when the value is an empty String" do
|
233
|
+
|
234
|
+
let(:value) do
|
235
|
+
""
|
236
|
+
end
|
120
237
|
|
121
|
-
|
122
|
-
|
238
|
+
it "returns nil" do
|
239
|
+
expect(mongoized).to be_nil
|
240
|
+
end
|
123
241
|
end
|
124
242
|
|
125
|
-
|
126
|
-
|
243
|
+
context "when the value is an integer numeric String" do
|
244
|
+
|
245
|
+
let(:value) do
|
246
|
+
"123456"
|
247
|
+
end
|
248
|
+
|
249
|
+
it "returns the String" do
|
250
|
+
expect(mongoized).to eq(value)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
context "when the value is a float numeric String" do
|
255
|
+
|
256
|
+
let(:value) do
|
257
|
+
"123456.789"
|
258
|
+
end
|
259
|
+
|
260
|
+
it "returns the String" do
|
261
|
+
expect(mongoized).to eq(value)
|
262
|
+
end
|
127
263
|
end
|
128
264
|
|
129
|
-
|
130
|
-
|
265
|
+
context "when the value is a non-numeric String" do
|
266
|
+
|
267
|
+
let(:value) do
|
268
|
+
"1a2"
|
269
|
+
end
|
270
|
+
|
271
|
+
it "returns nil" do
|
272
|
+
expect(mongoized).to be_nil
|
273
|
+
end
|
131
274
|
end
|
132
275
|
|
133
|
-
|
134
|
-
|
276
|
+
context "when the value is castable" do
|
277
|
+
|
278
|
+
let(:value) do
|
279
|
+
2.hours
|
280
|
+
end
|
281
|
+
|
282
|
+
before do
|
283
|
+
expect(value).to be_a(ActiveSupport::Duration)
|
284
|
+
end
|
285
|
+
|
286
|
+
it "returns nil" do
|
287
|
+
expect(mongoized).to eq(7200)
|
288
|
+
end
|
135
289
|
end
|
136
|
-
end
|
137
290
|
|
138
|
-
|
291
|
+
context "when the value is nil" do
|
292
|
+
|
293
|
+
let(:value) do
|
294
|
+
nil
|
295
|
+
end
|
139
296
|
|
140
|
-
|
141
|
-
|
297
|
+
it "returns nil" do
|
298
|
+
expect(mongoized).to be_nil
|
299
|
+
end
|
142
300
|
end
|
143
301
|
|
144
|
-
|
145
|
-
|
302
|
+
context "when the value is true" do
|
303
|
+
|
304
|
+
let(:value) do
|
305
|
+
true
|
306
|
+
end
|
307
|
+
|
308
|
+
it "returns nil" do
|
309
|
+
expect(mongoized).to be_nil
|
310
|
+
end
|
146
311
|
end
|
147
312
|
|
148
|
-
|
149
|
-
|
313
|
+
context "when the value is false" do
|
314
|
+
|
315
|
+
let(:value) do
|
316
|
+
false
|
317
|
+
end
|
318
|
+
|
319
|
+
it "returns nil" do
|
320
|
+
expect(mongoized).to be_nil
|
321
|
+
end
|
150
322
|
end
|
151
323
|
|
152
|
-
|
153
|
-
|
324
|
+
context "when the value is an Integer" do
|
325
|
+
let(:value) do
|
326
|
+
123456
|
327
|
+
end
|
328
|
+
|
329
|
+
it "returns a string" do
|
330
|
+
expect(mongoized).to eq(value.to_s)
|
331
|
+
end
|
154
332
|
end
|
155
|
-
end
|
156
333
|
|
157
|
-
|
334
|
+
context "when the value is a Float" do
|
158
335
|
|
159
|
-
|
160
|
-
|
336
|
+
let(:value) do
|
337
|
+
123456.789
|
338
|
+
end
|
339
|
+
|
340
|
+
it "returns a string" do
|
341
|
+
expect(mongoized).to eq(value.to_s)
|
342
|
+
end
|
161
343
|
end
|
162
344
|
|
163
|
-
|
164
|
-
|
345
|
+
context "when the value is String NaN" do
|
346
|
+
|
347
|
+
let(:value) do
|
348
|
+
"NaN"
|
349
|
+
end
|
350
|
+
|
351
|
+
it "returns a String" do
|
352
|
+
expect(mongoized).to eq("NaN")
|
353
|
+
end
|
165
354
|
end
|
166
355
|
|
167
|
-
|
168
|
-
|
356
|
+
context "when the value is String Infinity" do
|
357
|
+
|
358
|
+
let(:value) do
|
359
|
+
"Infinity"
|
360
|
+
end
|
361
|
+
|
362
|
+
it "returns a String" do
|
363
|
+
expect(mongoized).to eq("Infinity")
|
364
|
+
end
|
169
365
|
end
|
170
366
|
|
171
|
-
|
172
|
-
|
367
|
+
context "when the value is String negative Infinity" do
|
368
|
+
|
369
|
+
let(:value) do
|
370
|
+
"-Infinity"
|
371
|
+
end
|
372
|
+
|
373
|
+
it "returns a String" do
|
374
|
+
expect(mongoized).to eq("-Infinity")
|
375
|
+
end
|
173
376
|
end
|
174
|
-
end
|
175
|
-
end
|
176
377
|
|
177
|
-
|
378
|
+
context "when the value is BigDecimal NaN" do
|
178
379
|
|
179
|
-
|
380
|
+
let(:value) do
|
381
|
+
BigDecimal("NaN")
|
382
|
+
end
|
180
383
|
|
181
|
-
|
182
|
-
|
384
|
+
it "returns a String" do
|
385
|
+
expect(mongoized).to eq("NaN")
|
386
|
+
end
|
183
387
|
end
|
184
|
-
end
|
185
388
|
|
186
|
-
|
389
|
+
context "when the value is BigDecimal Infinity" do
|
187
390
|
|
188
|
-
|
189
|
-
|
391
|
+
let(:value) do
|
392
|
+
BigDecimal("Infinity")
|
393
|
+
end
|
394
|
+
|
395
|
+
it "returns a String" do
|
396
|
+
expect(mongoized).to eq("Infinity")
|
397
|
+
end
|
190
398
|
end
|
191
399
|
|
192
|
-
|
193
|
-
|
400
|
+
context "when the value is BigDecimal negative Infinity" do
|
401
|
+
|
402
|
+
let(:value) do
|
403
|
+
BigDecimal("-Infinity")
|
404
|
+
end
|
405
|
+
|
406
|
+
it "returns a String" do
|
407
|
+
expect(mongoized).to eq("-Infinity")
|
408
|
+
end
|
194
409
|
end
|
195
|
-
end
|
196
410
|
|
197
|
-
|
411
|
+
context "when the value is the constant Float::NAN" do
|
412
|
+
|
413
|
+
let(:value) do
|
414
|
+
Float::NAN
|
415
|
+
end
|
198
416
|
|
199
|
-
|
200
|
-
|
417
|
+
it "returns a String" do
|
418
|
+
expect(mongoized).to eq("NaN")
|
419
|
+
end
|
201
420
|
end
|
202
421
|
|
203
|
-
|
204
|
-
|
422
|
+
context "when the value is constant Float::INFINITY" do
|
423
|
+
|
424
|
+
let(:value) do
|
425
|
+
Float::INFINITY
|
426
|
+
end
|
427
|
+
|
428
|
+
it "returns a String" do
|
429
|
+
expect(mongoized).to eq("Infinity")
|
430
|
+
end
|
205
431
|
end
|
206
|
-
end
|
207
432
|
|
208
|
-
|
433
|
+
context "when the value is constant Float::INFINITY * -1" do
|
434
|
+
|
435
|
+
let(:value) do
|
436
|
+
Float::INFINITY * -1
|
437
|
+
end
|
209
438
|
|
210
|
-
|
211
|
-
|
439
|
+
it "returns a String" do
|
440
|
+
expect(mongoized).to eq("-Infinity")
|
441
|
+
end
|
212
442
|
end
|
213
443
|
|
214
|
-
|
215
|
-
|
444
|
+
context "when the value is a decimal128" do
|
445
|
+
let(:value) do
|
446
|
+
BSON::Decimal128.new("42")
|
447
|
+
end
|
448
|
+
|
449
|
+
it "returns a String" do
|
450
|
+
expect(mongoized).to eq("42")
|
451
|
+
end
|
216
452
|
end
|
217
453
|
end
|
218
454
|
|
219
|
-
|
455
|
+
describe "#mongoize" do
|
220
456
|
|
221
|
-
|
222
|
-
|
457
|
+
it "returns a string" do
|
458
|
+
expect(big_decimal.mongoize).to eq(big_decimal.to_s)
|
223
459
|
end
|
460
|
+
end
|
224
461
|
|
225
|
-
|
226
|
-
|
462
|
+
describe "#numeric?" do
|
463
|
+
|
464
|
+
it "returns true" do
|
465
|
+
expect(big_decimal.numeric?).to eq(true)
|
227
466
|
end
|
228
467
|
end
|
468
|
+
end
|
469
|
+
|
470
|
+
context 'when map_big_decimal_to_decimal128 is true' do
|
471
|
+
config_override :map_big_decimal_to_decimal128, true
|
229
472
|
|
230
|
-
|
473
|
+
describe ".demongoize" do
|
231
474
|
|
232
|
-
let(:
|
233
|
-
|
475
|
+
let(:demongoized) do
|
476
|
+
BigDecimal.demongoize(value)
|
234
477
|
end
|
235
478
|
|
236
|
-
|
237
|
-
|
479
|
+
context "when the value is an empty String" do
|
480
|
+
|
481
|
+
let(:value) do
|
482
|
+
""
|
483
|
+
end
|
484
|
+
|
485
|
+
it "raises an error" do
|
486
|
+
expect(demongoized).to eq(nil)
|
487
|
+
end
|
238
488
|
end
|
239
|
-
end
|
240
489
|
|
241
|
-
|
490
|
+
context "when the value is a numeric String" do
|
491
|
+
|
492
|
+
let(:value) do
|
493
|
+
"123456.789"
|
494
|
+
end
|
242
495
|
|
243
|
-
|
244
|
-
|
496
|
+
it "returns a BigDecimal" do
|
497
|
+
expect(demongoized).to eq(BigDecimal(value))
|
498
|
+
end
|
245
499
|
end
|
246
500
|
|
247
|
-
|
248
|
-
|
501
|
+
context "when the value is the numeric String zero" do
|
502
|
+
|
503
|
+
let(:value) do
|
504
|
+
"0.0"
|
505
|
+
end
|
506
|
+
|
507
|
+
it "returns a BigDecimal" do
|
508
|
+
expect(demongoized).to eq(BigDecimal(value))
|
509
|
+
end
|
249
510
|
end
|
250
|
-
end
|
251
511
|
|
252
|
-
|
512
|
+
context "when the value is the numeric String negative zero" do
|
253
513
|
|
254
|
-
|
255
|
-
|
514
|
+
let(:value) do
|
515
|
+
"-0.0"
|
516
|
+
end
|
517
|
+
|
518
|
+
it "returns a BigDecimal" do
|
519
|
+
expect(demongoized).to eq(BigDecimal(value))
|
520
|
+
end
|
256
521
|
end
|
257
|
-
end
|
258
522
|
|
259
|
-
|
523
|
+
context "when the value is a non-numeric String" do
|
524
|
+
|
525
|
+
let(:value) do
|
526
|
+
"1a2"
|
527
|
+
end
|
260
528
|
|
261
|
-
|
262
|
-
|
529
|
+
it "returns nil" do
|
530
|
+
expect(demongoized).to be_nil
|
531
|
+
end
|
263
532
|
end
|
264
533
|
|
265
|
-
|
266
|
-
|
534
|
+
context "when the value is nil" do
|
535
|
+
|
536
|
+
let(:value) do
|
537
|
+
nil
|
538
|
+
end
|
539
|
+
|
540
|
+
it "returns nil" do
|
541
|
+
expect(demongoized).to be_nil
|
542
|
+
end
|
267
543
|
end
|
268
|
-
end
|
269
544
|
|
270
|
-
|
545
|
+
context "when the value is an Integer" do
|
271
546
|
|
272
|
-
|
273
|
-
|
547
|
+
let(:value) do
|
548
|
+
123456
|
549
|
+
end
|
550
|
+
|
551
|
+
it "returns an integer" do
|
552
|
+
expect(demongoized).to eq(value)
|
553
|
+
end
|
274
554
|
end
|
275
555
|
|
276
|
-
|
277
|
-
|
556
|
+
context "when the value is a BSON::Decimal128 object" do
|
557
|
+
|
558
|
+
let(:value) do
|
559
|
+
BSON::Decimal128.new("123456")
|
560
|
+
end
|
561
|
+
|
562
|
+
it "returns a BigDecimal" do
|
563
|
+
expect(demongoized).to eq(value.to_big_decimal)
|
564
|
+
end
|
278
565
|
end
|
279
|
-
end
|
280
566
|
|
281
|
-
|
567
|
+
context "when the value is a Float" do
|
282
568
|
|
283
|
-
|
284
|
-
|
569
|
+
let(:value) do
|
570
|
+
123456.789
|
571
|
+
end
|
572
|
+
|
573
|
+
it "returns a float" do
|
574
|
+
expect(demongoized).to eq(value)
|
575
|
+
end
|
285
576
|
end
|
286
|
-
end
|
287
577
|
|
288
|
-
|
578
|
+
context "when the value is the String 'NaN'" do
|
289
579
|
|
290
|
-
|
291
|
-
|
580
|
+
let(:value) do
|
581
|
+
"NaN"
|
582
|
+
end
|
583
|
+
|
584
|
+
it "returns a BigDecimal" do
|
585
|
+
expect(demongoized).to be_a(BigDecimal)
|
586
|
+
end
|
587
|
+
|
588
|
+
it "is a NaN BigDecimal" do
|
589
|
+
expect(demongoized).to be_nan
|
590
|
+
end
|
292
591
|
end
|
293
|
-
end
|
294
592
|
|
295
|
-
|
593
|
+
context "when the value is the String 'Infinity'" do
|
594
|
+
|
595
|
+
let(:value) do
|
596
|
+
"Infinity"
|
597
|
+
end
|
296
598
|
|
297
|
-
|
298
|
-
|
599
|
+
it "returns a BigDecimal" do
|
600
|
+
expect(demongoized).to be_a(BigDecimal)
|
601
|
+
end
|
602
|
+
|
603
|
+
it "is a infinity BigDecimal" do
|
604
|
+
expect(demongoized.infinite?).to eq 1
|
605
|
+
end
|
299
606
|
end
|
300
607
|
|
301
|
-
|
302
|
-
|
608
|
+
context "when the value is the String '-Infinity'" do
|
609
|
+
|
610
|
+
let(:value) do
|
611
|
+
"-Infinity"
|
612
|
+
end
|
613
|
+
|
614
|
+
it "returns a BigDecimal" do
|
615
|
+
expect(demongoized).to be_a(BigDecimal)
|
616
|
+
end
|
617
|
+
|
618
|
+
it "is a negative infinity BigDecimal" do
|
619
|
+
expect(demongoized.infinite?).to eq -1
|
620
|
+
end
|
303
621
|
end
|
304
|
-
end
|
305
622
|
|
306
|
-
|
623
|
+
context "when the value is true" do
|
624
|
+
|
625
|
+
let(:value) do
|
626
|
+
true
|
627
|
+
end
|
307
628
|
|
308
|
-
|
309
|
-
|
629
|
+
it "returns nil" do
|
630
|
+
expect(demongoized).to be_nil
|
631
|
+
end
|
310
632
|
end
|
311
633
|
|
312
|
-
|
313
|
-
|
634
|
+
context "when the value is false" do
|
635
|
+
|
636
|
+
let(:value) do
|
637
|
+
false
|
638
|
+
end
|
639
|
+
|
640
|
+
it "returns nil" do
|
641
|
+
expect(demongoized).to be_nil
|
642
|
+
end
|
314
643
|
end
|
315
644
|
end
|
316
645
|
|
317
|
-
|
646
|
+
describe ".mongoize" do
|
318
647
|
|
319
|
-
let(:
|
320
|
-
|
648
|
+
let(:mongoized) do
|
649
|
+
BigDecimal.mongoize(value)
|
321
650
|
end
|
322
651
|
|
323
|
-
|
324
|
-
|
652
|
+
context "when the value is a BigDecimal" do
|
653
|
+
|
654
|
+
let(:value) do
|
655
|
+
big_decimal
|
656
|
+
end
|
657
|
+
|
658
|
+
it "returns a BSON::Decimal128" do
|
659
|
+
expect(mongoized).to eq(BSON::Decimal128.new(value))
|
660
|
+
end
|
325
661
|
end
|
326
|
-
end
|
327
662
|
|
328
|
-
|
663
|
+
context "when the value is the BigDecimal zero" do
|
664
|
+
|
665
|
+
let(:value) do
|
666
|
+
BigDecimal("0.0")
|
667
|
+
end
|
329
668
|
|
330
|
-
|
331
|
-
|
669
|
+
it "returns a BSON::Decimal128" do
|
670
|
+
expect(mongoized).to eq(BSON::Decimal128.new(value))
|
671
|
+
end
|
332
672
|
end
|
333
673
|
|
334
|
-
|
335
|
-
|
674
|
+
context "when the value is the BigDecimal negative zero" do
|
675
|
+
|
676
|
+
let(:value) do
|
677
|
+
BigDecimal("-0.0")
|
678
|
+
end
|
679
|
+
|
680
|
+
it "returns a BSON::Decimal128" do
|
681
|
+
expect(mongoized).to eq(BSON::Decimal128.new(value))
|
682
|
+
end
|
336
683
|
end
|
337
|
-
end
|
338
684
|
|
339
|
-
|
685
|
+
context "when the value is an empty String" do
|
340
686
|
|
341
|
-
|
342
|
-
|
687
|
+
let(:value) do
|
688
|
+
""
|
689
|
+
end
|
690
|
+
|
691
|
+
it "returns nil" do
|
692
|
+
expect(mongoized).to be_nil
|
693
|
+
end
|
343
694
|
end
|
344
695
|
|
345
|
-
|
346
|
-
|
696
|
+
context "when the value is an integer numeric String" do
|
697
|
+
|
698
|
+
let(:value) do
|
699
|
+
"123456"
|
700
|
+
end
|
701
|
+
|
702
|
+
it "returns the BSON::Decimal128" do
|
703
|
+
expect(mongoized).to eq(BSON::Decimal128.new(value))
|
704
|
+
end
|
347
705
|
end
|
348
|
-
end
|
349
706
|
|
350
|
-
|
707
|
+
context "when the value is a float numeric String" do
|
708
|
+
|
709
|
+
let(:value) do
|
710
|
+
"123456.789"
|
711
|
+
end
|
351
712
|
|
352
|
-
|
353
|
-
|
713
|
+
it "returns the BSON::Decimal128" do
|
714
|
+
expect(mongoized).to eq(BSON::Decimal128.new(value))
|
715
|
+
end
|
354
716
|
end
|
355
717
|
|
356
|
-
|
357
|
-
|
718
|
+
context "when the value is a non-numeric String" do
|
719
|
+
|
720
|
+
let(:value) do
|
721
|
+
"1a2"
|
722
|
+
end
|
723
|
+
|
724
|
+
it "returns nil" do
|
725
|
+
expect(mongoized).to be_nil
|
726
|
+
end
|
358
727
|
end
|
359
|
-
end
|
360
728
|
|
361
|
-
|
729
|
+
context "when the value is nil" do
|
730
|
+
|
731
|
+
let(:value) do
|
732
|
+
nil
|
733
|
+
end
|
734
|
+
|
735
|
+
it "returns nil" do
|
736
|
+
expect(mongoized).to be_nil
|
737
|
+
end
|
738
|
+
end
|
739
|
+
|
740
|
+
context "when the value is true" do
|
741
|
+
|
742
|
+
let(:value) do
|
743
|
+
true
|
744
|
+
end
|
362
745
|
|
363
|
-
|
364
|
-
|
746
|
+
it "returns nil" do
|
747
|
+
expect(mongoized).to be_nil
|
748
|
+
end
|
365
749
|
end
|
366
750
|
|
367
|
-
|
368
|
-
|
751
|
+
context "when the value is false" do
|
752
|
+
|
753
|
+
let(:value) do
|
754
|
+
false
|
755
|
+
end
|
756
|
+
|
757
|
+
it "returns nil" do
|
758
|
+
expect(mongoized).to be_nil
|
759
|
+
end
|
369
760
|
end
|
370
|
-
end
|
371
761
|
|
372
|
-
|
762
|
+
context "when the value is an Integer" do
|
763
|
+
|
764
|
+
let(:value) do
|
765
|
+
123456
|
766
|
+
end
|
373
767
|
|
374
|
-
|
375
|
-
|
768
|
+
it "returns a BSON::Decimal128" do
|
769
|
+
expect(mongoized).to eq(BSON::Decimal128.new(value.to_s))
|
770
|
+
end
|
376
771
|
end
|
377
772
|
|
378
|
-
|
379
|
-
|
773
|
+
context "when the value is a Float" do
|
774
|
+
|
775
|
+
let(:value) do
|
776
|
+
123456.789
|
777
|
+
end
|
778
|
+
|
779
|
+
it "returns a BSON::Decimal128" do
|
780
|
+
expect(mongoized).to eq(BSON::Decimal128.new(value.to_s))
|
781
|
+
end
|
380
782
|
end
|
381
|
-
end
|
382
783
|
|
383
|
-
|
784
|
+
context "when the value is String NaN" do
|
785
|
+
|
786
|
+
let(:value) do
|
787
|
+
"NaN"
|
788
|
+
end
|
789
|
+
|
790
|
+
it "returns a BSON::Decimal128 representation of NaN" do
|
791
|
+
expect(mongoized).to eq(BSON::Decimal128.new(value))
|
792
|
+
end
|
793
|
+
end
|
794
|
+
|
795
|
+
context "when the value is String Infinity" do
|
796
|
+
|
797
|
+
let(:value) do
|
798
|
+
"Infinity"
|
799
|
+
end
|
800
|
+
|
801
|
+
it "returns a BSON::Decimal128 representation of Infinity" do
|
802
|
+
expect(mongoized).to eq(BSON::Decimal128.new(value))
|
803
|
+
end
|
804
|
+
end
|
805
|
+
|
806
|
+
context "when the value is String negative Infinity" do
|
807
|
+
|
808
|
+
let(:value) do
|
809
|
+
"-Infinity"
|
810
|
+
end
|
384
811
|
|
385
|
-
|
386
|
-
|
812
|
+
it "returns a BSON::Decimal128 representation of -Infinity" do
|
813
|
+
expect(mongoized).to eq(BSON::Decimal128.new(value))
|
814
|
+
end
|
387
815
|
end
|
388
816
|
|
389
|
-
|
390
|
-
|
817
|
+
context "when the value is BigDecimal NaN" do
|
818
|
+
|
819
|
+
let(:value) do
|
820
|
+
BigDecimal("NaN")
|
821
|
+
end
|
822
|
+
|
823
|
+
it "returns a BSON::Decimal128 representation of BigDecimal NaN" do
|
824
|
+
expect(mongoized).to eq(BSON::Decimal128.new("NaN"))
|
825
|
+
end
|
826
|
+
end
|
827
|
+
|
828
|
+
context "when the value is BigDecimal Infinity" do
|
829
|
+
|
830
|
+
let(:value) do
|
831
|
+
BigDecimal("Infinity")
|
832
|
+
end
|
833
|
+
|
834
|
+
it "returns a BSON::Decimal128 representation of BigDecimal Infinity" do
|
835
|
+
expect(mongoized).to eq(BSON::Decimal128.new("Infinity"))
|
836
|
+
end
|
837
|
+
end
|
838
|
+
|
839
|
+
context "when the value is BigDecimal negative Infinity" do
|
840
|
+
|
841
|
+
let(:value) do
|
842
|
+
BigDecimal("-Infinity")
|
843
|
+
end
|
844
|
+
|
845
|
+
it "returns a BSON::Decimal128 representation of BigDecimal negative Infinity" do
|
846
|
+
expect(mongoized).to eq(BSON::Decimal128.new("-Infinity"))
|
847
|
+
end
|
848
|
+
end
|
849
|
+
|
850
|
+
context "when the value is the constant Float::NAN" do
|
851
|
+
|
852
|
+
let(:value) do
|
853
|
+
Float::NAN
|
854
|
+
end
|
855
|
+
|
856
|
+
it "returns a BSON::Decimal128 representation of NaN" do
|
857
|
+
expect(mongoized).to eq(BSON::Decimal128.new("NaN"))
|
858
|
+
end
|
859
|
+
end
|
860
|
+
|
861
|
+
context "when the value is constant Float::INFINITY" do
|
862
|
+
|
863
|
+
let(:value) do
|
864
|
+
Float::INFINITY
|
865
|
+
end
|
866
|
+
|
867
|
+
it "returns a BSON::Decimal128 representation of Infinity" do
|
868
|
+
expect(mongoized).to eq(BSON::Decimal128.new("Infinity"))
|
869
|
+
end
|
870
|
+
end
|
871
|
+
|
872
|
+
context "when the value is constant Float::INFINITY * -1" do
|
873
|
+
|
874
|
+
let(:value) do
|
875
|
+
Float::INFINITY * -1
|
876
|
+
end
|
877
|
+
|
878
|
+
it "returns a BSON::Decimal128 representation of negative Infinity" do
|
879
|
+
expect(mongoized).to eq(BSON::Decimal128.new("-Infinity"))
|
880
|
+
end
|
881
|
+
end
|
882
|
+
|
883
|
+
context "when the value is a decimal128" do
|
884
|
+
let(:value) do
|
885
|
+
BSON::Decimal128.new("42")
|
886
|
+
end
|
887
|
+
|
888
|
+
it "returns a String" do
|
889
|
+
expect(mongoized).to eq(value)
|
890
|
+
end
|
391
891
|
end
|
392
892
|
end
|
393
|
-
end
|
394
893
|
|
395
|
-
|
894
|
+
describe "#mongoize" do
|
396
895
|
|
397
|
-
|
398
|
-
|
896
|
+
it "returns a BSON::Decimal128 representation of the BigDecimal" do
|
897
|
+
expect(big_decimal.mongoize).to eq(BSON::Decimal128.new(big_decimal))
|
898
|
+
end
|
399
899
|
end
|
400
|
-
end
|
401
900
|
|
402
|
-
|
901
|
+
describe "#numeric?" do
|
403
902
|
|
404
|
-
|
405
|
-
|
903
|
+
it "returns true" do
|
904
|
+
expect(big_decimal.numeric?).to eq(true)
|
905
|
+
end
|
406
906
|
end
|
407
907
|
end
|
408
908
|
end
|