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
@@ -1,10 +1,12 @@
|
|
1
1
|
module InterceptableSpec
|
2
2
|
class CallbackRegistry
|
3
|
-
def initialize
|
3
|
+
def initialize(only: [])
|
4
4
|
@calls = []
|
5
|
+
@only = only
|
5
6
|
end
|
6
7
|
|
7
8
|
def record_call(cls, cb)
|
9
|
+
return unless @only.empty? || @only.any? { |pat| pat == cb }
|
8
10
|
@calls << [cls, cb]
|
9
11
|
end
|
10
12
|
|
@@ -15,62 +17,227 @@ module InterceptableSpec
|
|
15
17
|
extend ActiveSupport::Concern
|
16
18
|
|
17
19
|
included do
|
20
|
+
field :name, type: String
|
21
|
+
|
18
22
|
%i(
|
19
23
|
validation save create update
|
20
24
|
).each do |what|
|
21
25
|
%i(before after).each do |whn|
|
22
26
|
send("#{whn}_#{what}", "#{whn}_#{what}_stub".to_sym)
|
23
27
|
define_method("#{whn}_#{what}_stub") do
|
24
|
-
callback_registry
|
28
|
+
callback_registry&.record_call(self.class, "#{whn}_#{what}".to_sym)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
unless what == :validation
|
32
|
+
send("around_#{what}", "around_#{what}_stub".to_sym)
|
33
|
+
define_method("around_#{what}_stub") do |&block|
|
34
|
+
callback_registry&.record_call(self.class, "around_#{what}_open".to_sym)
|
35
|
+
block.call
|
36
|
+
callback_registry&.record_call(self.class, "around_#{what}_close".to_sym)
|
25
37
|
end
|
26
38
|
end
|
27
39
|
end
|
28
40
|
end
|
29
|
-
end
|
30
41
|
|
31
|
-
|
32
|
-
include Mongoid::Document
|
42
|
+
attr_accessor :callback_registry
|
33
43
|
|
34
|
-
def initialize(callback_registry)
|
44
|
+
def initialize(callback_registry, *args, **kwargs)
|
35
45
|
@callback_registry = callback_registry
|
36
|
-
super()
|
46
|
+
super(*args, **kwargs)
|
37
47
|
end
|
48
|
+
end
|
38
49
|
|
39
|
-
|
50
|
+
module RootInsertable
|
51
|
+
def insert_as_root
|
52
|
+
@callback_registry&.record_call(self.class, :insert_into_database)
|
53
|
+
super
|
54
|
+
end
|
55
|
+
end
|
40
56
|
|
41
|
-
|
42
|
-
|
57
|
+
class CbHasOneParent
|
58
|
+
include Mongoid::Document
|
59
|
+
include CallbackTracking
|
60
|
+
include RootInsertable
|
43
61
|
|
62
|
+
has_one :child, autosave: true, class_name: "CbHasOneChild", inverse_of: :parent
|
63
|
+
end
|
64
|
+
|
65
|
+
class CbHasOneChild
|
66
|
+
include Mongoid::Document
|
44
67
|
include CallbackTracking
|
68
|
+
|
69
|
+
belongs_to :parent, class_name: "CbHasOneParent", inverse_of: :child
|
45
70
|
end
|
46
71
|
|
47
|
-
class
|
72
|
+
class CbHasManyParent
|
48
73
|
include Mongoid::Document
|
74
|
+
include CallbackTracking
|
75
|
+
include RootInsertable
|
49
76
|
|
50
|
-
|
77
|
+
has_many :children, autosave: true, class_name: "CbHasManyChild", inverse_of: :parent
|
78
|
+
end
|
51
79
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
80
|
+
class CbHasManyChild
|
81
|
+
include Mongoid::Document
|
82
|
+
include CallbackTracking
|
56
83
|
|
57
|
-
|
84
|
+
belongs_to :parent, class_name: "CbHasManyParent", inverse_of: :children
|
85
|
+
end
|
58
86
|
|
87
|
+
class CbEmbedsOneParent
|
88
|
+
include Mongoid::Document
|
59
89
|
include CallbackTracking
|
90
|
+
include RootInsertable
|
91
|
+
|
92
|
+
field :name
|
93
|
+
|
94
|
+
embeds_one :child, cascade_callbacks: true, class_name: "CbEmbedsOneChild", inverse_of: :parent
|
95
|
+
end
|
96
|
+
|
97
|
+
class CbEmbedsOneChild
|
98
|
+
include Mongoid::Document
|
99
|
+
include CallbackTracking
|
100
|
+
|
101
|
+
field :age
|
102
|
+
|
103
|
+
embedded_in :parent, class_name: "CbEmbedsOneParent", inverse_of: :child
|
104
|
+
end
|
105
|
+
|
106
|
+
class CbEmbedsManyParent
|
107
|
+
include Mongoid::Document
|
108
|
+
include CallbackTracking
|
109
|
+
include RootInsertable
|
110
|
+
|
111
|
+
embeds_many :children, cascade_callbacks: true, class_name: "CbEmbedsManyChild", inverse_of: :parent
|
112
|
+
end
|
113
|
+
|
114
|
+
class CbEmbedsManyChild
|
115
|
+
include Mongoid::Document
|
116
|
+
include CallbackTracking
|
117
|
+
|
118
|
+
embedded_in :parent, class_name: "CbEmbedsManyParent", inverse_of: :children
|
119
|
+
end
|
120
|
+
|
121
|
+
class CbParent
|
122
|
+
include Mongoid::Document
|
123
|
+
include CallbackTracking
|
124
|
+
|
125
|
+
embeds_many :cb_children
|
126
|
+
embeds_many :cb_cascaded_children, cascade_callbacks: true
|
127
|
+
embeds_many :cb_cascaded_nodes, cascade_callbacks: true, as: :parent
|
128
|
+
end
|
129
|
+
|
130
|
+
class CbChild
|
131
|
+
include Mongoid::Document
|
132
|
+
include CallbackTracking
|
133
|
+
|
134
|
+
embedded_in :cb_parent
|
60
135
|
end
|
61
136
|
|
62
137
|
class CbCascadedChild
|
63
138
|
include Mongoid::Document
|
139
|
+
include CallbackTracking
|
64
140
|
|
65
141
|
embedded_in :cb_parent
|
66
142
|
|
67
|
-
|
68
|
-
@callback_registry = callback_registry
|
69
|
-
super(options)
|
70
|
-
end
|
143
|
+
before_save :test_mongoid_state
|
71
144
|
|
72
|
-
|
145
|
+
private
|
146
|
+
|
147
|
+
# Helps test that cascading child callbacks have access to the Mongoid
|
148
|
+
# state objects; if the implementation uses fiber-local (instead of truly
|
149
|
+
# thread-local) variables, the related tests will fail because the
|
150
|
+
# cascading child callbacks use fibers to linearize the recursion.
|
151
|
+
def test_mongoid_state
|
152
|
+
Mongoid::Threaded.stack('interceptable').push(self)
|
153
|
+
end
|
154
|
+
end
|
73
155
|
|
156
|
+
class CbCascadedNode
|
157
|
+
include Mongoid::Document
|
74
158
|
include CallbackTracking
|
159
|
+
|
160
|
+
embedded_in :parent, polymorphic: true
|
161
|
+
|
162
|
+
embeds_many :cb_cascaded_nodes, cascade_callbacks: true, as: :parent
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
class InterceptableBand
|
167
|
+
include Mongoid::Document
|
168
|
+
|
169
|
+
has_many :songs, class_name: "InterceptableSong"
|
170
|
+
field :name
|
171
|
+
end
|
172
|
+
|
173
|
+
class InterceptableSong
|
174
|
+
include Mongoid::Document
|
175
|
+
|
176
|
+
belongs_to :band, class_name: "InterceptableBand"
|
177
|
+
field :band_name, default: -> { band.name }
|
178
|
+
field :name
|
179
|
+
end
|
180
|
+
|
181
|
+
class InterceptablePlane
|
182
|
+
include Mongoid::Document
|
183
|
+
|
184
|
+
has_many :wings, class_name: "InterceptableWing"
|
185
|
+
end
|
186
|
+
|
187
|
+
class InterceptableWing
|
188
|
+
include Mongoid::Document
|
189
|
+
|
190
|
+
belongs_to :plane, class_name: "InterceptablePlane"
|
191
|
+
has_one :engine, autobuild: true, class_name: "InterceptableEngine"
|
192
|
+
|
193
|
+
field :_id, type: String, default: -> { 'hello-wing' }
|
194
|
+
|
195
|
+
field :p_id, type: String, default: -> { plane&.id }
|
196
|
+
field :e_id, type: String, default: -> { engine&.id }
|
197
|
+
end
|
198
|
+
|
199
|
+
class InterceptableEngine
|
200
|
+
include Mongoid::Document
|
201
|
+
|
202
|
+
belongs_to :wing, class_name: "InterceptableWing"
|
203
|
+
|
204
|
+
field :_id, type: String, default: -> { "hello-engine-#{wing&.id}" }
|
205
|
+
end
|
206
|
+
|
207
|
+
class InterceptableCompany
|
208
|
+
include Mongoid::Document
|
209
|
+
|
210
|
+
has_many :users, class_name: "InterceptableUser"
|
211
|
+
has_many :shops, class_name: "InterceptableShop"
|
212
|
+
end
|
213
|
+
|
214
|
+
class InterceptableShop
|
215
|
+
include Mongoid::Document
|
216
|
+
|
217
|
+
embeds_one :address, class_name: "InterceptableAddress"
|
218
|
+
belongs_to :company, class_name: "InterceptableCompany"
|
219
|
+
|
220
|
+
after_initialize :build_address1
|
221
|
+
|
222
|
+
def build_address1
|
223
|
+
self.address ||= Address.new
|
75
224
|
end
|
76
225
|
end
|
226
|
+
|
227
|
+
class InterceptableAddress
|
228
|
+
include Mongoid::Document
|
229
|
+
embedded_in :shop, class_name: "InterceptableShop"
|
230
|
+
end
|
231
|
+
|
232
|
+
class InterceptableUser
|
233
|
+
include Mongoid::Document
|
234
|
+
|
235
|
+
belongs_to :company, class_name: "InterceptableCompany"
|
236
|
+
|
237
|
+
validate :break_mongoid
|
238
|
+
|
239
|
+
def break_mongoid
|
240
|
+
company.shop_ids
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
@@ -5,11 +5,7 @@ require 'spec_helper'
|
|
5
5
|
describe 'Matcher.extract_attribute' do
|
6
6
|
Dir[File.join(File.dirname(__FILE__), 'extract_attribute_data', '*.yml')].sort.each do |path|
|
7
7
|
context File.basename(path) do
|
8
|
-
specs =
|
9
|
-
YAML.safe_load(File.read(path), [], [], true)
|
10
|
-
else
|
11
|
-
YAML.safe_load(File.read(path), aliases: true)
|
12
|
-
end
|
8
|
+
specs = YAML.safe_load(File.read(path), aliases: true)
|
13
9
|
|
14
10
|
specs.each do |spec|
|
15
11
|
context spec['name'] do
|
@@ -0,0 +1,285 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
|
5
|
+
# This file is for testing the functionality of uncastable values for all
|
6
|
+
# mongoizable classes.
|
7
|
+
describe "mongoize/demongoize/evolve methods" do
|
8
|
+
|
9
|
+
shared_examples "handles unmongoizable values" do
|
10
|
+
|
11
|
+
context "when passing an invalid value" do
|
12
|
+
context "to mongoize" do
|
13
|
+
it "returns nil" do
|
14
|
+
expect(klass.mongoize(invalid_value)).to be_nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when assigning an invalid value to a field" do
|
19
|
+
let(:catalog) { Catalog.create!(field_name => invalid_value) }
|
20
|
+
|
21
|
+
it "returns nil" do
|
22
|
+
catalog.attributes[field_name].should be_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
it "persists nil" do
|
26
|
+
Catalog.find(catalog._id).attributes[field_name].should be_nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
shared_examples "handles undemongoizable values" do
|
33
|
+
|
34
|
+
context "when passing an invalid value" do
|
35
|
+
context "to demongoize" do
|
36
|
+
it "returns nil" do
|
37
|
+
expect(klass.demongoize(invalid_value)).to be_nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when retrieving an invalid value from the db" do
|
42
|
+
|
43
|
+
before do
|
44
|
+
Catalog.collection.insert_one(field_name => invalid_value)
|
45
|
+
end
|
46
|
+
|
47
|
+
let(:catalog) { Catalog.first }
|
48
|
+
|
49
|
+
it "returns nil" do
|
50
|
+
catalog.send(field_name).should be_nil
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
shared_examples "pushes through unmongoizable values" do
|
57
|
+
|
58
|
+
context "when passing an invalid value" do
|
59
|
+
context "to mongoize" do
|
60
|
+
it "returns that value" do
|
61
|
+
expect(klass.mongoize(invalid_value)).to eq(mongoized_value)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when assigning an invalid value to a field" do
|
67
|
+
let!(:catalog) { Catalog.create!(field_name => invalid_value) }
|
68
|
+
let(:from_db) { Catalog.find(catalog._id) }
|
69
|
+
|
70
|
+
it "returns the inputted value" do
|
71
|
+
catalog.attributes[field_name].should be_nil
|
72
|
+
end
|
73
|
+
|
74
|
+
it "persists the inputted value" do
|
75
|
+
from_db.attributes[field_name].should be_nil
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
shared_examples "pushes through undemongoizable values" do
|
81
|
+
|
82
|
+
context "when reading an invalid value from the db" do
|
83
|
+
before do
|
84
|
+
Catalog.collection.insert_one(field_name => invalid_value)
|
85
|
+
end
|
86
|
+
|
87
|
+
let(:from_db) { Catalog.first }
|
88
|
+
|
89
|
+
it "reads the inputted value" do
|
90
|
+
from_db.send(field_name).should eq(demongoized_value)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
shared_examples "pushes through unevolvable values" do
|
96
|
+
|
97
|
+
context "when passing an uncastable value to evolve" do
|
98
|
+
|
99
|
+
it "pushes the value through" do
|
100
|
+
expect(klass.evolve(invalid_value)).to eq(mongoized_value)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
shared_examples "pushes through uncastable values" do
|
106
|
+
include_examples "pushes through unmongoizable values"
|
107
|
+
include_examples "pushes through undemongoizable values"
|
108
|
+
end
|
109
|
+
|
110
|
+
shared_examples "handles uncastable values" do
|
111
|
+
include_examples "handles unmongoizable values"
|
112
|
+
include_examples "handles undemongoizable values"
|
113
|
+
end
|
114
|
+
|
115
|
+
let(:mongoized_value) { invalid_value }
|
116
|
+
let(:demongoized_value) { invalid_value }
|
117
|
+
|
118
|
+
describe Array do
|
119
|
+
let(:invalid_value) { 1 }
|
120
|
+
let(:klass) { Array }
|
121
|
+
let(:field_name) { :array_field }
|
122
|
+
|
123
|
+
include_examples "handles unmongoizable values"
|
124
|
+
include_examples "pushes through undemongoizable values"
|
125
|
+
include_examples "pushes through unevolvable values"
|
126
|
+
end
|
127
|
+
|
128
|
+
describe BigDecimal do
|
129
|
+
let(:invalid_value) { "bogus" }
|
130
|
+
let(:klass) { described_class }
|
131
|
+
let(:field_name) { :big_decimal_field }
|
132
|
+
|
133
|
+
include_examples "handles uncastable values"
|
134
|
+
include_examples "pushes through unevolvable values"
|
135
|
+
end
|
136
|
+
|
137
|
+
describe Mongoid::Boolean do
|
138
|
+
let(:invalid_value) { "invalid_value" }
|
139
|
+
let(:klass) { described_class }
|
140
|
+
let(:field_name) { :boolean_field }
|
141
|
+
|
142
|
+
include_examples "handles uncastable values"
|
143
|
+
include_examples "pushes through unevolvable values"
|
144
|
+
end
|
145
|
+
|
146
|
+
describe Date do
|
147
|
+
let(:invalid_value) { :hello }
|
148
|
+
let(:klass) { described_class }
|
149
|
+
let(:field_name) { :date_field }
|
150
|
+
|
151
|
+
include_examples "handles uncastable values"
|
152
|
+
include_examples "pushes through unevolvable values"
|
153
|
+
end
|
154
|
+
|
155
|
+
describe DateTime do
|
156
|
+
let(:invalid_value) { :hello }
|
157
|
+
let(:klass) { described_class }
|
158
|
+
let(:field_name) { :date_time_field }
|
159
|
+
|
160
|
+
include_examples "handles uncastable values"
|
161
|
+
include_examples "pushes through unevolvable values"
|
162
|
+
end
|
163
|
+
|
164
|
+
describe Float do
|
165
|
+
let(:invalid_value) { [] }
|
166
|
+
let(:klass) { described_class }
|
167
|
+
let(:field_name) { :float_field }
|
168
|
+
|
169
|
+
include_examples "handles uncastable values"
|
170
|
+
include_examples "pushes through unevolvable values"
|
171
|
+
end
|
172
|
+
|
173
|
+
describe Hash do
|
174
|
+
let(:invalid_value) { 1 }
|
175
|
+
let(:klass) { described_class }
|
176
|
+
let(:field_name) { :hash_field }
|
177
|
+
|
178
|
+
include_examples "handles unmongoizable values"
|
179
|
+
include_examples "pushes through undemongoizable values"
|
180
|
+
include_examples "pushes through unevolvable values"
|
181
|
+
end
|
182
|
+
|
183
|
+
describe Integer do
|
184
|
+
let(:invalid_value) { [] }
|
185
|
+
let(:klass) { described_class }
|
186
|
+
let(:field_name) { :integer_field }
|
187
|
+
|
188
|
+
include_examples "handles uncastable values"
|
189
|
+
include_examples "pushes through unevolvable values"
|
190
|
+
end
|
191
|
+
|
192
|
+
describe BSON::ObjectId do
|
193
|
+
let(:invalid_value) { "invalid value" }
|
194
|
+
let(:klass) { described_class }
|
195
|
+
let(:field_name) { :object_id_field }
|
196
|
+
|
197
|
+
include_examples "pushes through uncastable values"
|
198
|
+
include_examples "pushes through unevolvable values"
|
199
|
+
end
|
200
|
+
|
201
|
+
describe BSON::Binary do
|
202
|
+
let(:invalid_value) { true }
|
203
|
+
let(:klass) { described_class }
|
204
|
+
let(:field_name) { :binary_field }
|
205
|
+
|
206
|
+
include_examples "handles uncastable values"
|
207
|
+
include_examples "pushes through unevolvable values"
|
208
|
+
end
|
209
|
+
|
210
|
+
describe Range do
|
211
|
+
let(:invalid_value) { "invalid value" }
|
212
|
+
let(:klass) { described_class }
|
213
|
+
let(:field_name) { :range_field }
|
214
|
+
|
215
|
+
include_examples "handles uncastable values"
|
216
|
+
include_examples "pushes through unevolvable values"
|
217
|
+
end
|
218
|
+
|
219
|
+
describe Regexp do
|
220
|
+
let(:invalid_value) { 1 }
|
221
|
+
let(:klass) { described_class }
|
222
|
+
let(:field_name) { :regexp_field }
|
223
|
+
|
224
|
+
include_examples "handles uncastable values"
|
225
|
+
include_examples "pushes through unevolvable values"
|
226
|
+
end
|
227
|
+
|
228
|
+
describe Set do
|
229
|
+
let(:invalid_value) { 1 }
|
230
|
+
let(:klass) { described_class }
|
231
|
+
let(:field_name) { :set_field }
|
232
|
+
|
233
|
+
include_examples "handles uncastable values"
|
234
|
+
include_examples "pushes through unevolvable values"
|
235
|
+
end
|
236
|
+
|
237
|
+
describe String do
|
238
|
+
let(:invalid_value) { 1 }
|
239
|
+
let(:mongoized_value) { "1" }
|
240
|
+
let(:demongoized_value) { "1" }
|
241
|
+
let(:klass) { described_class }
|
242
|
+
let(:field_name) { :string_field }
|
243
|
+
|
244
|
+
include_examples "pushes through uncastable values"
|
245
|
+
include_examples "pushes through unevolvable values"
|
246
|
+
end
|
247
|
+
|
248
|
+
describe Mongoid::StringifiedSymbol do
|
249
|
+
let(:invalid_value) { [] }
|
250
|
+
let(:mongoized_value) { "[]" }
|
251
|
+
let(:demongoized_value) { :[] }
|
252
|
+
let(:klass) { described_class }
|
253
|
+
let(:field_name) { :stringified_symbol_field }
|
254
|
+
|
255
|
+
include_examples "pushes through uncastable values"
|
256
|
+
include_examples "pushes through unevolvable values"
|
257
|
+
end
|
258
|
+
|
259
|
+
describe Symbol do
|
260
|
+
let(:invalid_value) { Time.new }
|
261
|
+
let(:klass) { described_class }
|
262
|
+
let(:field_name) { :symbol_field }
|
263
|
+
|
264
|
+
include_examples "handles uncastable values"
|
265
|
+
include_examples "pushes through unevolvable values"
|
266
|
+
end
|
267
|
+
|
268
|
+
describe Time do
|
269
|
+
let(:invalid_value) { "invalid value" }
|
270
|
+
let(:klass) { described_class }
|
271
|
+
let(:field_name) { :time_field }
|
272
|
+
|
273
|
+
include_examples "handles uncastable values"
|
274
|
+
include_examples "pushes through unevolvable values"
|
275
|
+
end
|
276
|
+
|
277
|
+
describe ActiveSupport::TimeWithZone do
|
278
|
+
let(:invalid_value) { "invalid value" }
|
279
|
+
let(:klass) { described_class }
|
280
|
+
let(:field_name) { :time_with_zone_field }
|
281
|
+
|
282
|
+
include_examples "handles uncastable values"
|
283
|
+
include_examples "pushes through unevolvable values"
|
284
|
+
end
|
285
|
+
end
|
@@ -234,11 +234,11 @@ describe Mongoid::Persistable::Creatable do
|
|
234
234
|
end
|
235
235
|
|
236
236
|
let(:attributes) do
|
237
|
-
collection.find({ name: "Testy"}).first
|
237
|
+
collection.find({ name: "Testy" }).first
|
238
238
|
end
|
239
239
|
|
240
240
|
before do
|
241
|
-
Browser.create(name: 'Safari', version:
|
241
|
+
Browser.create(name: 'Safari', version: 4.0)
|
242
242
|
end
|
243
243
|
|
244
244
|
it "persists the versions" do
|
@@ -12,14 +12,34 @@ describe Mongoid::Persistable::Deletable do
|
|
12
12
|
|
13
13
|
context "when deleting a readonly document" do
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
context "when legacy_attributes is true" do
|
16
|
+
config_override :legacy_readonly, true
|
17
|
+
|
18
|
+
let(:from_db) do
|
19
|
+
Person.only(:_id).first
|
20
|
+
end
|
21
|
+
|
22
|
+
it "raises an error" do
|
23
|
+
expect(from_db.readonly?).to be true
|
24
|
+
expect {
|
25
|
+
from_db.delete
|
26
|
+
}.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
27
|
+
end
|
17
28
|
end
|
18
29
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
30
|
+
context "when legacy_attributes is false" do
|
31
|
+
config_override :legacy_readonly, false
|
32
|
+
|
33
|
+
let(:from_db) do
|
34
|
+
Person.first.tap(&:readonly!)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "raises an error" do
|
38
|
+
expect(from_db.readonly?).to be true
|
39
|
+
expect {
|
40
|
+
from_db.delete
|
41
|
+
}.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
42
|
+
end
|
23
43
|
end
|
24
44
|
end
|
25
45
|
|
@@ -33,7 +53,7 @@ describe Mongoid::Persistable::Deletable do
|
|
33
53
|
it 'deletes the matching document from the database' do
|
34
54
|
lambda do
|
35
55
|
person.reload
|
36
|
-
end.should raise_error(Mongoid::Errors::DocumentNotFound)
|
56
|
+
end.should raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Person with id\(s\)/)
|
37
57
|
end
|
38
58
|
end
|
39
59
|
|
@@ -46,7 +66,7 @@ describe Mongoid::Persistable::Deletable do
|
|
46
66
|
it "deletes the document from the collection" do
|
47
67
|
expect {
|
48
68
|
Person.find(person.id)
|
49
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
69
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Person with id\(s\)/)
|
50
70
|
end
|
51
71
|
|
52
72
|
it "returns true" do
|
@@ -12,14 +12,34 @@ describe Mongoid::Persistable::Destroyable do
|
|
12
12
|
|
13
13
|
context "when destroying a readonly document" do
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
context "when legacy_attributes is true" do
|
16
|
+
config_override :legacy_readonly, true
|
17
|
+
|
18
|
+
let(:from_db) do
|
19
|
+
Person.only(:_id).first
|
20
|
+
end
|
21
|
+
|
22
|
+
it "raises an error" do
|
23
|
+
expect(from_db.readonly?).to be true
|
24
|
+
expect {
|
25
|
+
from_db.destroy
|
26
|
+
}.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
27
|
+
end
|
17
28
|
end
|
18
29
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
30
|
+
context "when legacy_attributes is false" do
|
31
|
+
config_override :legacy_readonly, false
|
32
|
+
|
33
|
+
let(:from_db) do
|
34
|
+
Person.first.tap(&:readonly!)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "raises an error" do
|
38
|
+
expect(from_db.readonly?).to be true
|
39
|
+
expect {
|
40
|
+
from_db.destroy
|
41
|
+
}.to raise_error(Mongoid::Errors::ReadonlyDocument)
|
42
|
+
end
|
23
43
|
end
|
24
44
|
end
|
25
45
|
|
@@ -33,7 +53,7 @@ describe Mongoid::Persistable::Destroyable do
|
|
33
53
|
it 'deletes the matching document from the database' do
|
34
54
|
lambda do
|
35
55
|
person.reload
|
36
|
-
end.should raise_error(Mongoid::Errors::DocumentNotFound)
|
56
|
+
end.should raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Person with id\(s\)/)
|
37
57
|
end
|
38
58
|
end
|
39
59
|
|
@@ -46,7 +66,7 @@ describe Mongoid::Persistable::Destroyable do
|
|
46
66
|
it "destroys the document from the collection" do
|
47
67
|
expect {
|
48
68
|
Person.find(person.id)
|
49
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
69
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Person with id\(s\)/)
|
50
70
|
end
|
51
71
|
|
52
72
|
it "returns true" do
|