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
@@ -21,13 +21,165 @@ module InterceptableSpec
|
|
21
21
|
%i(before after).each do |whn|
|
22
22
|
send("#{whn}_#{what}", "#{whn}_#{what}_stub".to_sym)
|
23
23
|
define_method("#{whn}_#{what}_stub") do
|
24
|
-
callback_registry
|
24
|
+
callback_registry&.record_call(self.class, "#{whn}_#{what}".to_sym)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
unless what == :validation
|
28
|
+
send("around_#{what}", "around_#{what}_stub".to_sym)
|
29
|
+
define_method("around_#{what}_stub") do |&block|
|
30
|
+
callback_registry&.record_call(self.class, "around_#{what}_open".to_sym)
|
31
|
+
block.call
|
32
|
+
callback_registry&.record_call(self.class, "around_#{what}_close".to_sym)
|
25
33
|
end
|
26
34
|
end
|
27
35
|
end
|
28
36
|
end
|
29
37
|
end
|
30
38
|
|
39
|
+
class CbHasOneParent
|
40
|
+
include Mongoid::Document
|
41
|
+
|
42
|
+
has_one :child, autosave: true, class_name: "CbHasOneChild", inverse_of: :parent
|
43
|
+
|
44
|
+
def initialize(callback_registry)
|
45
|
+
@callback_registry = callback_registry
|
46
|
+
super()
|
47
|
+
end
|
48
|
+
|
49
|
+
attr_accessor :callback_registry
|
50
|
+
|
51
|
+
def insert_as_root
|
52
|
+
@callback_registry&.record_call(self.class, :insert_into_database)
|
53
|
+
super
|
54
|
+
end
|
55
|
+
|
56
|
+
include CallbackTracking
|
57
|
+
end
|
58
|
+
|
59
|
+
class CbHasOneChild
|
60
|
+
include Mongoid::Document
|
61
|
+
|
62
|
+
belongs_to :parent, class_name: "CbHasOneParent", inverse_of: :child
|
63
|
+
|
64
|
+
def initialize(callback_registry)
|
65
|
+
@callback_registry = callback_registry
|
66
|
+
super()
|
67
|
+
end
|
68
|
+
|
69
|
+
attr_accessor :callback_registry
|
70
|
+
|
71
|
+
include CallbackTracking
|
72
|
+
end
|
73
|
+
|
74
|
+
class CbHasManyParent
|
75
|
+
include Mongoid::Document
|
76
|
+
|
77
|
+
has_many :children, autosave: true, class_name: "CbHasManyChild", inverse_of: :parent
|
78
|
+
|
79
|
+
def initialize(callback_registry)
|
80
|
+
@callback_registry = callback_registry
|
81
|
+
super()
|
82
|
+
end
|
83
|
+
|
84
|
+
attr_accessor :callback_registry
|
85
|
+
|
86
|
+
def insert_as_root
|
87
|
+
@callback_registry&.record_call(self.class, :insert_into_database)
|
88
|
+
super
|
89
|
+
end
|
90
|
+
|
91
|
+
include CallbackTracking
|
92
|
+
end
|
93
|
+
|
94
|
+
class CbHasManyChild
|
95
|
+
include Mongoid::Document
|
96
|
+
|
97
|
+
belongs_to :parent, class_name: "CbHasManyParent", inverse_of: :children
|
98
|
+
|
99
|
+
def initialize(callback_registry)
|
100
|
+
@callback_registry = callback_registry
|
101
|
+
super()
|
102
|
+
end
|
103
|
+
|
104
|
+
attr_accessor :callback_registry
|
105
|
+
|
106
|
+
include CallbackTracking
|
107
|
+
end
|
108
|
+
|
109
|
+
class CbEmbedsOneParent
|
110
|
+
include Mongoid::Document
|
111
|
+
|
112
|
+
field :name
|
113
|
+
|
114
|
+
embeds_one :child, cascade_callbacks: true, class_name: "CbEmbedsOneChild", inverse_of: :parent
|
115
|
+
|
116
|
+
def initialize(callback_registry)
|
117
|
+
@callback_registry = callback_registry
|
118
|
+
super()
|
119
|
+
end
|
120
|
+
|
121
|
+
attr_accessor :callback_registry
|
122
|
+
|
123
|
+
def insert_as_root
|
124
|
+
@callback_registry&.record_call(self.class, :insert_into_database)
|
125
|
+
super
|
126
|
+
end
|
127
|
+
|
128
|
+
include CallbackTracking
|
129
|
+
end
|
130
|
+
|
131
|
+
class CbEmbedsOneChild
|
132
|
+
include Mongoid::Document
|
133
|
+
|
134
|
+
field :age
|
135
|
+
|
136
|
+
embedded_in :parent, class_name: "CbEmbedsOneParent", inverse_of: :child
|
137
|
+
|
138
|
+
def initialize(callback_registry)
|
139
|
+
@callback_registry = callback_registry
|
140
|
+
super()
|
141
|
+
end
|
142
|
+
|
143
|
+
attr_accessor :callback_registry
|
144
|
+
|
145
|
+
include CallbackTracking
|
146
|
+
end
|
147
|
+
|
148
|
+
class CbEmbedsManyParent
|
149
|
+
include Mongoid::Document
|
150
|
+
|
151
|
+
embeds_many :children, cascade_callbacks: true, class_name: "CbEmbedsManyChild", inverse_of: :parent
|
152
|
+
|
153
|
+
def initialize(callback_registry)
|
154
|
+
@callback_registry = callback_registry
|
155
|
+
super()
|
156
|
+
end
|
157
|
+
|
158
|
+
attr_accessor :callback_registry
|
159
|
+
|
160
|
+
def insert_as_root
|
161
|
+
@callback_registry&.record_call(self.class, :insert_into_database)
|
162
|
+
super
|
163
|
+
end
|
164
|
+
|
165
|
+
include CallbackTracking
|
166
|
+
end
|
167
|
+
|
168
|
+
class CbEmbedsManyChild
|
169
|
+
include Mongoid::Document
|
170
|
+
|
171
|
+
embedded_in :parent, class_name: "CbEmbedsManyParent", inverse_of: :children
|
172
|
+
|
173
|
+
def initialize(callback_registry)
|
174
|
+
@callback_registry = callback_registry
|
175
|
+
super()
|
176
|
+
end
|
177
|
+
|
178
|
+
attr_accessor :callback_registry
|
179
|
+
|
180
|
+
include CallbackTracking
|
181
|
+
end
|
182
|
+
|
31
183
|
class CbParent
|
32
184
|
include Mongoid::Document
|
33
185
|
|
@@ -36,7 +188,7 @@ module InterceptableSpec
|
|
36
188
|
super()
|
37
189
|
end
|
38
190
|
|
39
|
-
|
191
|
+
attr_accessor :callback_registry
|
40
192
|
|
41
193
|
embeds_many :cb_children
|
42
194
|
embeds_many :cb_cascaded_children, cascade_callbacks: true
|
@@ -54,7 +206,7 @@ module InterceptableSpec
|
|
54
206
|
super(options)
|
55
207
|
end
|
56
208
|
|
57
|
-
|
209
|
+
attr_accessor :callback_registry
|
58
210
|
|
59
211
|
include CallbackTracking
|
60
212
|
end
|
@@ -69,8 +221,87 @@ module InterceptableSpec
|
|
69
221
|
super(options)
|
70
222
|
end
|
71
223
|
|
72
|
-
|
224
|
+
attr_accessor :callback_registry
|
73
225
|
|
74
226
|
include CallbackTracking
|
75
227
|
end
|
76
228
|
end
|
229
|
+
|
230
|
+
class InterceptableBand
|
231
|
+
include Mongoid::Document
|
232
|
+
|
233
|
+
has_many :songs, class_name: "InterceptableSong"
|
234
|
+
field :name
|
235
|
+
end
|
236
|
+
|
237
|
+
class InterceptableSong
|
238
|
+
include Mongoid::Document
|
239
|
+
|
240
|
+
belongs_to :band, class_name: "InterceptableBand"
|
241
|
+
field :band_name, default: -> { band.name }
|
242
|
+
field :name
|
243
|
+
end
|
244
|
+
|
245
|
+
class InterceptablePlane
|
246
|
+
include Mongoid::Document
|
247
|
+
|
248
|
+
has_many :wings, class_name: "InterceptableWing"
|
249
|
+
end
|
250
|
+
|
251
|
+
class InterceptableWing
|
252
|
+
include Mongoid::Document
|
253
|
+
|
254
|
+
belongs_to :plane, class_name: "InterceptablePlane"
|
255
|
+
has_one :engine, autobuild: true, class_name: "InterceptableEngine"
|
256
|
+
|
257
|
+
field :_id, type: String, default: -> { 'hello-wing' }
|
258
|
+
|
259
|
+
field :p_id, type: String, default: -> { plane&.id }
|
260
|
+
field :e_id, type: String, default: -> { engine&.id }
|
261
|
+
end
|
262
|
+
|
263
|
+
class InterceptableEngine
|
264
|
+
include Mongoid::Document
|
265
|
+
|
266
|
+
belongs_to :wing, class_name: "InterceptableWing"
|
267
|
+
|
268
|
+
field :_id, type: String, default: -> { "hello-engine-#{wing&.id}" }
|
269
|
+
end
|
270
|
+
|
271
|
+
class InterceptableCompany
|
272
|
+
include Mongoid::Document
|
273
|
+
|
274
|
+
has_many :users, class_name: "InterceptableUser"
|
275
|
+
has_many :shops, class_name: "InterceptableShop"
|
276
|
+
end
|
277
|
+
|
278
|
+
class InterceptableShop
|
279
|
+
include Mongoid::Document
|
280
|
+
|
281
|
+
embeds_one :address, class_name: "InterceptableAddress"
|
282
|
+
belongs_to :company, class_name: "InterceptableCompany"
|
283
|
+
|
284
|
+
after_initialize :build_address1
|
285
|
+
|
286
|
+
def build_address1
|
287
|
+
self.address ||= Address.new
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
class InterceptableAddress
|
292
|
+
include Mongoid::Document
|
293
|
+
embedded_in :shop, class_name: "InterceptableShop"
|
294
|
+
end
|
295
|
+
|
296
|
+
class InterceptableUser
|
297
|
+
include Mongoid::Document
|
298
|
+
|
299
|
+
belongs_to :company, class_name: "InterceptableCompany"
|
300
|
+
|
301
|
+
validate :break_mongoid
|
302
|
+
|
303
|
+
def break_mongoid
|
304
|
+
company.shop_ids
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
@@ -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
|