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
@@ -476,6 +476,188 @@ describe Mongoid::Changeable do
|
|
476
476
|
end
|
477
477
|
end
|
478
478
|
end
|
479
|
+
|
480
|
+
context "when including key word args" do
|
481
|
+
|
482
|
+
let(:person) { Person.new }
|
483
|
+
|
484
|
+
context "when only including from" do
|
485
|
+
|
486
|
+
context "when the object has not changed" do
|
487
|
+
|
488
|
+
it "returns false" do
|
489
|
+
expect(person.send(:attribute_changed?, :score, from: nil)).to be false
|
490
|
+
end
|
491
|
+
|
492
|
+
it "returns false using (attribute)_changed?" do
|
493
|
+
expect(person.score_changed?(from: nil)).to be false
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
497
|
+
context "when the object has changed from the wrong item" do
|
498
|
+
|
499
|
+
before do
|
500
|
+
person.score = 2
|
501
|
+
end
|
502
|
+
|
503
|
+
it "returns false" do
|
504
|
+
expect(person.send(:attribute_changed?, :score, from: 1)).to be false
|
505
|
+
end
|
506
|
+
|
507
|
+
it "returns false using (attribute)_changed?" do
|
508
|
+
expect(person.score_changed?(from: 1)).to be false
|
509
|
+
end
|
510
|
+
end
|
511
|
+
|
512
|
+
context "when the object has changed from the correct item" do
|
513
|
+
|
514
|
+
before do
|
515
|
+
person.score = 2
|
516
|
+
end
|
517
|
+
|
518
|
+
it "returns true" do
|
519
|
+
expect(person.send(:attribute_changed?, :score, from: nil)).to be true
|
520
|
+
end
|
521
|
+
|
522
|
+
it "returns true using (attribute)_changed?" do
|
523
|
+
expect(person.score_changed?(from: nil)).to be true
|
524
|
+
end
|
525
|
+
end
|
526
|
+
end
|
527
|
+
|
528
|
+
context "when only including to" do
|
529
|
+
|
530
|
+
context "when the object has not changed" do
|
531
|
+
|
532
|
+
it "returns false" do
|
533
|
+
expect(person.send(:attribute_changed?, :score, to: nil)).to be false
|
534
|
+
end
|
535
|
+
|
536
|
+
it "returns false using (attribute)_changed?" do
|
537
|
+
expect(person.score_changed?(to: nil)).to be false
|
538
|
+
end
|
539
|
+
end
|
540
|
+
|
541
|
+
context "when the object has changed to the wrong item" do
|
542
|
+
|
543
|
+
before do
|
544
|
+
person.score = 2
|
545
|
+
end
|
546
|
+
|
547
|
+
it "returns false" do
|
548
|
+
expect(person.send(:attribute_changed?, :score, to: 1)).to be false
|
549
|
+
end
|
550
|
+
|
551
|
+
it "returns false using (attribute)_changed?" do
|
552
|
+
expect(person.score_changed?(to: 1)).to be false
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
context "when the object has changed to the correct item" do
|
557
|
+
|
558
|
+
before do
|
559
|
+
person.score = 2
|
560
|
+
end
|
561
|
+
|
562
|
+
it "returns true" do
|
563
|
+
expect(person.send(:attribute_changed?, :score, to: 2)).to be true
|
564
|
+
end
|
565
|
+
|
566
|
+
it "returns true using (attribute)_changed?" do
|
567
|
+
expect(person.score_changed?(to: 2)).to be true
|
568
|
+
end
|
569
|
+
end
|
570
|
+
end
|
571
|
+
|
572
|
+
context "when including from and to" do
|
573
|
+
|
574
|
+
context "when the object has not changed" do
|
575
|
+
|
576
|
+
it "returns false" do
|
577
|
+
expect(person.send(:attribute_changed?, :score, from: nil, to: nil)).to be false
|
578
|
+
end
|
579
|
+
|
580
|
+
it "returns false using (attribute)_changed?" do
|
581
|
+
expect(person.score_changed?(from: nil, to: nil)).to be false
|
582
|
+
end
|
583
|
+
end
|
584
|
+
|
585
|
+
context "when only the from is correct" do
|
586
|
+
|
587
|
+
before do
|
588
|
+
person.score = 2
|
589
|
+
end
|
590
|
+
|
591
|
+
it "returns false" do
|
592
|
+
expect(person.send(:attribute_changed?, :score, from: nil, to: 3)).to be false
|
593
|
+
end
|
594
|
+
|
595
|
+
it "returns false using (attribute)_changed?" do
|
596
|
+
expect(person.score_changed?(from: nil, to: 3)).to be false
|
597
|
+
end
|
598
|
+
end
|
599
|
+
|
600
|
+
context "when only the to is correct" do
|
601
|
+
|
602
|
+
before do
|
603
|
+
person.score = 2
|
604
|
+
end
|
605
|
+
|
606
|
+
it "returns false" do
|
607
|
+
expect(person.send(:attribute_changed?, :score, from: 1, to: 2)).to be false
|
608
|
+
end
|
609
|
+
|
610
|
+
it "returns false using (attribute)_changed?" do
|
611
|
+
expect(person.score_changed?(from: 1, to: 2)).to be false
|
612
|
+
end
|
613
|
+
end
|
614
|
+
|
615
|
+
context "when the from and to are correct" do
|
616
|
+
|
617
|
+
before do
|
618
|
+
person.score = 2
|
619
|
+
end
|
620
|
+
|
621
|
+
it "returns true" do
|
622
|
+
expect(person.send(:attribute_changed?, :score, from: nil, to: 2)).to be true
|
623
|
+
end
|
624
|
+
|
625
|
+
it "returns true using (attribute)_changed?" do
|
626
|
+
expect(person.score_changed?(from: nil, to: 2)).to be true
|
627
|
+
end
|
628
|
+
end
|
629
|
+
|
630
|
+
context "when value is mongoized" do
|
631
|
+
|
632
|
+
before do
|
633
|
+
person.score = "2"
|
634
|
+
end
|
635
|
+
|
636
|
+
it "returns true with mongoized value" do
|
637
|
+
expect(person.send(:attribute_changed?, :score, from: nil, to: 2)).to be true
|
638
|
+
end
|
639
|
+
|
640
|
+
it "returns true with mongoized value using (attribute)_changed?" do
|
641
|
+
expect(person.score_changed?(from: nil, to: 2)).to be true
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
645
|
+
context "when value is mongoized" do
|
646
|
+
|
647
|
+
before do
|
648
|
+
person.score = "2"
|
649
|
+
end
|
650
|
+
|
651
|
+
it "returns false with unmongoized value" do
|
652
|
+
expect(person.send(:attribute_changed?, :score, from: nil, to: "2")).to be false
|
653
|
+
end
|
654
|
+
|
655
|
+
it "returns false with unmongoized value using (attribute)_changed?" do
|
656
|
+
expect(person.score_changed?(from: nil, to: "2")).to be false
|
657
|
+
end
|
658
|
+
end
|
659
|
+
end
|
660
|
+
end
|
479
661
|
end
|
480
662
|
|
481
663
|
describe "#attribute_changed_from_default?" do
|
@@ -555,6 +737,56 @@ describe Mongoid::Changeable do
|
|
555
737
|
end
|
556
738
|
end
|
557
739
|
|
740
|
+
describe '#attribute_previously_was' do
|
741
|
+
let(:previous_title) do
|
742
|
+
"Grand Poobah"
|
743
|
+
end
|
744
|
+
|
745
|
+
let(:age) do
|
746
|
+
10
|
747
|
+
end
|
748
|
+
|
749
|
+
let(:person) do
|
750
|
+
Person.create!(title: previous_title, age: age)
|
751
|
+
end
|
752
|
+
|
753
|
+
let(:updated_title) do
|
754
|
+
"Captain Obvious"
|
755
|
+
end
|
756
|
+
|
757
|
+
before do
|
758
|
+
person.title = updated_title
|
759
|
+
person.save!
|
760
|
+
end
|
761
|
+
|
762
|
+
context 'when attribute changed' do
|
763
|
+
it "returns the old value" do
|
764
|
+
expect(person.send(:attribute_previously_was, "title")).to eq(previous_title)
|
765
|
+
end
|
766
|
+
|
767
|
+
it "allows access via (attribute)_was" do
|
768
|
+
expect(person.title_previously_was).to eq(previous_title)
|
769
|
+
end
|
770
|
+
end
|
771
|
+
|
772
|
+
context 'when attribute did not change' do
|
773
|
+
it "returns the same value" do
|
774
|
+
expect(person.send(:attribute_previously_was, "age")).to eq(age)
|
775
|
+
end
|
776
|
+
|
777
|
+
it "allows access via (attribute)_was" do
|
778
|
+
expect(person.age_previously_was).to eq(age)
|
779
|
+
end
|
780
|
+
end
|
781
|
+
|
782
|
+
it 'clears after reload' do
|
783
|
+
person.reload
|
784
|
+
expect(person.title_previously_was).to be_nil
|
785
|
+
expect(person.age_previously_was).to be_nil
|
786
|
+
end
|
787
|
+
|
788
|
+
end
|
789
|
+
|
558
790
|
describe "#attribute_will_change!" do
|
559
791
|
|
560
792
|
let(:aliases) do
|
@@ -962,12 +1194,69 @@ describe Mongoid::Changeable do
|
|
962
1194
|
person.user_accounts << user_account
|
963
1195
|
end
|
964
1196
|
|
965
|
-
it '
|
966
|
-
|
1197
|
+
it 'should not add to the changes or changed_attributes hash' do
|
1198
|
+
person.changes.should == {}
|
1199
|
+
person.changed_attributes.should == {}
|
1200
|
+
end
|
1201
|
+
end
|
1202
|
+
|
1203
|
+
context 'when habtm association _ids changes' do
|
1204
|
+
|
1205
|
+
let(:person) do
|
1206
|
+
Person.create!(title: "Grand Poobah")
|
1207
|
+
end
|
1208
|
+
|
1209
|
+
let(:user_account) do
|
1210
|
+
UserAccount.create!
|
1211
|
+
end
|
1212
|
+
|
1213
|
+
before do
|
1214
|
+
person.user_account_ids << user_account._id
|
1215
|
+
end
|
1216
|
+
|
1217
|
+
it 'should add to the changes or changed_attributes hash' do
|
1218
|
+
person.changes.should == { "user_account_ids" => [ nil, [ user_account._id ] ] }
|
1219
|
+
person.changed_attributes.should == { "user_account_ids" => nil }
|
1220
|
+
end
|
1221
|
+
end
|
1222
|
+
|
1223
|
+
context 'when assigning empty list to habtm association' do
|
1224
|
+
|
1225
|
+
let(:person) do
|
1226
|
+
Person.create!(title: "Grand Poobah", user_accounts: [user_account])
|
1227
|
+
end
|
1228
|
+
|
1229
|
+
let(:user_account) do
|
1230
|
+
UserAccount.create!
|
1231
|
+
end
|
1232
|
+
|
1233
|
+
before do
|
1234
|
+
person.user_accounts = []
|
1235
|
+
end
|
967
1236
|
|
968
|
-
|
969
|
-
|
970
|
-
}
|
1237
|
+
it 'should not add to the changes or changed_attributes hash' do
|
1238
|
+
person.changes.should == {}
|
1239
|
+
person.changed_attributes.should == {}
|
1240
|
+
end
|
1241
|
+
end
|
1242
|
+
|
1243
|
+
context 'when assigning empty list to habtm association _ids' do
|
1244
|
+
|
1245
|
+
let(:person) do
|
1246
|
+
Person.create!(title: "Grand Poobah", user_accounts: [user_account])
|
1247
|
+
end
|
1248
|
+
|
1249
|
+
let(:user_account) do
|
1250
|
+
UserAccount.create!
|
1251
|
+
end
|
1252
|
+
|
1253
|
+
before do
|
1254
|
+
person.user_account_ids = []
|
1255
|
+
end
|
1256
|
+
|
1257
|
+
it 'should not add to the changes or changed_attributes hash' do
|
1258
|
+
person.changes.should == { "user_account_ids" => [ [ user_account._id ], [] ] }
|
1259
|
+
person.changed_attributes.should == { "user_account_ids" => [ user_account._id ] }
|
971
1260
|
end
|
972
1261
|
end
|
973
1262
|
|
@@ -1060,20 +1349,10 @@ describe Mongoid::Changeable do
|
|
1060
1349
|
|
1061
1350
|
context "when the document is embedded" do
|
1062
1351
|
|
1063
|
-
let(:person)
|
1064
|
-
|
1065
|
-
end
|
1352
|
+
let(:person) { Person.create(title: "Grand Poobah") }
|
1353
|
+
let(:address) { person.addresses.create(street: "Oxford St") }
|
1066
1354
|
|
1067
|
-
|
1068
|
-
Address.instantiate(street: "Oxford St")
|
1069
|
-
end
|
1070
|
-
|
1071
|
-
before do
|
1072
|
-
person.addresses << address
|
1073
|
-
person.instance_variable_set(:@new_record, false)
|
1074
|
-
address.instance_variable_set(:@new_record, false)
|
1075
|
-
address.street = "Bond St"
|
1076
|
-
end
|
1355
|
+
before { address.street = "Bond St" }
|
1077
1356
|
|
1078
1357
|
it "returns a hash of field names and new values" do
|
1079
1358
|
expect(address.setters).to eq(
|
@@ -1082,17 +1361,9 @@ describe Mongoid::Changeable do
|
|
1082
1361
|
end
|
1083
1362
|
|
1084
1363
|
context "when the document is embedded multiple levels" do
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
end
|
1089
|
-
|
1090
|
-
before do
|
1091
|
-
location.instance_variable_set(:@new_record, false)
|
1092
|
-
address.locations << location
|
1093
|
-
location.name = "Work"
|
1094
|
-
end
|
1095
|
-
|
1364
|
+
let(:location) { address.locations.create(name: "Home") }
|
1365
|
+
before { location.name = "Work" }
|
1366
|
+
|
1096
1367
|
it "returns the proper hash with locations" do
|
1097
1368
|
expect(location.setters).to eq(
|
1098
1369
|
{ "addresses.0.locations.0.name" => "Work" }
|
@@ -1372,6 +1643,117 @@ describe Mongoid::Changeable do
|
|
1372
1643
|
end
|
1373
1644
|
end
|
1374
1645
|
|
1646
|
+
describe '#attribute_before_last_save' do
|
1647
|
+
let(:person) do
|
1648
|
+
Person.create!(title: "Grand Poobah")
|
1649
|
+
end
|
1650
|
+
|
1651
|
+
before do
|
1652
|
+
person.title = "Captain Obvious"
|
1653
|
+
end
|
1654
|
+
|
1655
|
+
context "when the document has been saved" do
|
1656
|
+
before do
|
1657
|
+
person.save!
|
1658
|
+
end
|
1659
|
+
|
1660
|
+
it "returns the changes" do
|
1661
|
+
expect(person.attribute_before_last_save(:title)).to eq("Grand Poobah")
|
1662
|
+
expect(person.title_before_last_save).to eq("Grand Poobah")
|
1663
|
+
end
|
1664
|
+
end
|
1665
|
+
|
1666
|
+
context "when the document has not been saved" do
|
1667
|
+
it "returns no changes" do
|
1668
|
+
expect(person.attribute_before_last_save(:title)).to be_nil
|
1669
|
+
expect(person.title_before_last_save).to be_nil
|
1670
|
+
end
|
1671
|
+
end
|
1672
|
+
end
|
1673
|
+
|
1674
|
+
describe '#saved_change_to_attribute' do
|
1675
|
+
let(:person) do
|
1676
|
+
Person.create!(title: "Grand Poobah")
|
1677
|
+
end
|
1678
|
+
|
1679
|
+
before do
|
1680
|
+
person.title = "Captain Obvious"
|
1681
|
+
end
|
1682
|
+
|
1683
|
+
context "when the document has been saved" do
|
1684
|
+
before do
|
1685
|
+
person.save!
|
1686
|
+
end
|
1687
|
+
|
1688
|
+
it "returns the changes" do
|
1689
|
+
expect(person.saved_change_to_attribute(:title)).to eq(["Grand Poobah", "Captain Obvious"])
|
1690
|
+
expect(person.saved_change_to_title).to eq(["Grand Poobah", "Captain Obvious"])
|
1691
|
+
end
|
1692
|
+
end
|
1693
|
+
|
1694
|
+
context "when the document has not been saved" do
|
1695
|
+
it "returns changes for the previous save" do
|
1696
|
+
expect(person.saved_change_to_attribute(:title)).to eq([nil, "Grand Poobah"])
|
1697
|
+
expect(person.saved_change_to_title).to eq([nil, "Grand Poobah"])
|
1698
|
+
end
|
1699
|
+
end
|
1700
|
+
end
|
1701
|
+
|
1702
|
+
describe '#saved_change_to_attribute?' do
|
1703
|
+
context "when the document has been saved" do
|
1704
|
+
let(:person) do
|
1705
|
+
Person.create!(title: "Grand Poobah")
|
1706
|
+
end
|
1707
|
+
|
1708
|
+
before do
|
1709
|
+
person.title = "Captain Obvious"
|
1710
|
+
end
|
1711
|
+
|
1712
|
+
before do
|
1713
|
+
person.save!
|
1714
|
+
end
|
1715
|
+
|
1716
|
+
it "detects the changes" do
|
1717
|
+
expect(person.saved_change_to_attribute?(:title)).to be_truthy
|
1718
|
+
expect(person.saved_change_to_attribute?(:title, from: "Grand Poobah")).to be_truthy
|
1719
|
+
expect(person.saved_change_to_attribute?(:title, to: "Captain Obvious")).to be_truthy
|
1720
|
+
expect(person.saved_change_to_attribute?(:title, from: "Grand Poobah", to: "Captain Obvious")).to be_truthy
|
1721
|
+
expect(person.saved_change_to_title?(from: "Grand Poobah", to: "Captain Obvious")).to be_truthy
|
1722
|
+
expect(person.saved_change_to_attribute?(:age)).to be_falsey
|
1723
|
+
expect(person.saved_change_to_age?).to be_falsey
|
1724
|
+
end
|
1725
|
+
end
|
1726
|
+
|
1727
|
+
context "when the document has not been saved" do
|
1728
|
+
let(:person) do
|
1729
|
+
Person.new(title: "Grand Poobah")
|
1730
|
+
end
|
1731
|
+
|
1732
|
+
it "returns changes for the previous save" do
|
1733
|
+
expect(person.saved_change_to_attribute?(:title)).to be_falsey
|
1734
|
+
expect(person.saved_change_to_title?).to be_falsey
|
1735
|
+
end
|
1736
|
+
end
|
1737
|
+
end
|
1738
|
+
|
1739
|
+
describe '#will_save_change_to_attribute?' do
|
1740
|
+
let(:person) do
|
1741
|
+
Person.create!(title: "Grand Poobah")
|
1742
|
+
end
|
1743
|
+
|
1744
|
+
before do
|
1745
|
+
person.title = "Captain Obvious"
|
1746
|
+
end
|
1747
|
+
|
1748
|
+
it 'correctly detects changes' do
|
1749
|
+
expect(person.will_save_change_to_attribute?(:title)).to eq(true)
|
1750
|
+
expect(person.will_save_change_to_title?).to eq(true)
|
1751
|
+
expect(person.will_save_change_to_attribute?(:score)).to eq(false)
|
1752
|
+
expect(person.will_save_change_to_score?).to eq(false)
|
1753
|
+
end
|
1754
|
+
|
1755
|
+
end
|
1756
|
+
|
1375
1757
|
context "when fields have been defined pre-dirty inclusion" do
|
1376
1758
|
|
1377
1759
|
let(:document) do
|
@@ -1649,21 +2031,26 @@ describe Mongoid::Changeable do
|
|
1649
2031
|
|
1650
2032
|
before do
|
1651
2033
|
Acolyte.set_callback(:save, :after, if: :callback_test?) do |doc|
|
1652
|
-
doc[:
|
2034
|
+
doc[:changed_in_after_callback] = doc.changes.dup
|
2035
|
+
end
|
2036
|
+
|
2037
|
+
Acolyte.set_callback(:save, :before, if: :callback_test?) do |doc|
|
2038
|
+
doc[:changed_in_before_callback] = doc.changes.dup
|
1653
2039
|
end
|
1654
2040
|
end
|
1655
2041
|
|
1656
2042
|
after do
|
1657
2043
|
Acolyte._save_callbacks.select do |callback|
|
1658
|
-
callback.kind
|
2044
|
+
[:before, :after].include?(callback.kind)
|
1659
2045
|
end.each do |callback|
|
1660
2046
|
Acolyte._save_callbacks.delete(callback)
|
1661
2047
|
end
|
1662
2048
|
end
|
1663
2049
|
|
1664
|
-
it "
|
2050
|
+
it "does not retain the changes until after all callbacks" do
|
1665
2051
|
acolyte.update_attribute(:status, "testing")
|
1666
|
-
expect(acolyte.
|
2052
|
+
expect(acolyte.changed_in_before_callback).to eq({"status"=>[nil, "testing"]})
|
2053
|
+
expect(acolyte.changed_in_after_callback).to eq({ })
|
1667
2054
|
end
|
1668
2055
|
end
|
1669
2056
|
|
@@ -1675,21 +2062,26 @@ describe Mongoid::Changeable do
|
|
1675
2062
|
|
1676
2063
|
before do
|
1677
2064
|
Acolyte.set_callback(:save, :after, if: :callback_test?) do |doc|
|
1678
|
-
doc[:
|
2065
|
+
doc[:changed_after_in_callback] = doc.changes.dup
|
2066
|
+
end
|
2067
|
+
|
2068
|
+
Acolyte.set_callback(:save, :before, if: :callback_test?) do |doc|
|
2069
|
+
doc[:changed_before_in_callback] = doc.changes.dup
|
1679
2070
|
end
|
1680
2071
|
end
|
1681
2072
|
|
1682
2073
|
after do
|
1683
2074
|
Acolyte._save_callbacks.select do |callback|
|
1684
|
-
callback.kind
|
2075
|
+
[:before, :after].include?(callback.kind)
|
1685
2076
|
end.each do |callback|
|
1686
2077
|
Acolyte._save_callbacks.delete(callback)
|
1687
2078
|
end
|
1688
2079
|
end
|
1689
2080
|
|
1690
|
-
it "
|
2081
|
+
it "does not retain the changes until after all callbacks" do
|
1691
2082
|
acolyte.save!
|
1692
|
-
expect(acolyte.
|
2083
|
+
expect(acolyte.changed_before_in_callback["name"]).to eq([ nil, "callback-test" ])
|
2084
|
+
expect(acolyte.changed_after_in_callback["name"]).to be_nil
|
1693
2085
|
end
|
1694
2086
|
end
|
1695
2087
|
end
|
@@ -65,10 +65,7 @@ describe Mongoid::Clients::Factory do
|
|
65
65
|
expect(client).to be_a(Mongo::Client)
|
66
66
|
end
|
67
67
|
|
68
|
-
context 'not
|
69
|
-
# Run this test on JRuby when driver 2.16.0 is released -
|
70
|
-
# see RUBY-2771.
|
71
|
-
fails_on_jruby
|
68
|
+
context 'on driver versions that do not report spurious EOF errors' do
|
72
69
|
|
73
70
|
it 'does not produce driver warnings' do
|
74
71
|
Mongo::Logger.logger.should_not receive(:warn)
|
@@ -86,35 +83,31 @@ describe Mongoid::Clients::Factory do
|
|
86
83
|
expect(client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
|
87
84
|
end
|
88
85
|
|
89
|
-
|
90
|
-
|
86
|
+
it 'sets Mongoid as a wrapping library' do
|
87
|
+
client.options[:wrapping_libraries].should == [BSON::Document.new(
|
88
|
+
Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY)]
|
89
|
+
end
|
91
90
|
|
92
|
-
|
93
|
-
client.options[:wrapping_libraries].should == [BSON::Document.new(
|
94
|
-
Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY)]
|
95
|
-
end
|
91
|
+
context 'when configuration specifies a wrapping library' do
|
96
92
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
{
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
wrapping_libraries: [{name: 'Foo'}],
|
107
|
-
},
|
108
|
-
}
|
93
|
+
let(:config) do
|
94
|
+
{
|
95
|
+
default: { hosts: SpecConfig.instance.addresses, database: database_id },
|
96
|
+
analytics: {
|
97
|
+
hosts: SpecConfig.instance.addresses,
|
98
|
+
database: database_id,
|
99
|
+
options: {
|
100
|
+
wrapping_libraries: [{name: 'Foo'}],
|
101
|
+
},
|
109
102
|
}
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
103
|
+
}
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'adds Mongoid as another wrapping library' do
|
107
|
+
client.options[:wrapping_libraries].should == [
|
108
|
+
BSON::Document.new(Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY),
|
109
|
+
{'name' => 'Foo'},
|
110
|
+
]
|
118
111
|
end
|
119
112
|
end
|
120
113
|
end
|
@@ -166,25 +166,6 @@ describe Mongoid::Clients::Sessions do
|
|
166
166
|
end
|
167
167
|
end
|
168
168
|
end
|
169
|
-
|
170
|
-
context 'when sessions are not supported' do
|
171
|
-
max_server_version '3.4'
|
172
|
-
|
173
|
-
let!(:error) do
|
174
|
-
e = nil
|
175
|
-
begin
|
176
|
-
Person.with_session {}
|
177
|
-
rescue => ex
|
178
|
-
e = ex
|
179
|
-
end
|
180
|
-
e
|
181
|
-
end
|
182
|
-
|
183
|
-
it 'raises a sessions not supported error' do
|
184
|
-
expect(error).to be_a(Mongoid::Errors::InvalidSessionUse)
|
185
|
-
expect(error.message).to include('not supported')
|
186
|
-
end
|
187
|
-
end
|
188
169
|
end
|
189
170
|
|
190
171
|
context 'when a session is used on a model instance' do
|
@@ -312,24 +293,5 @@ describe Mongoid::Clients::Sessions do
|
|
312
293
|
end
|
313
294
|
end
|
314
295
|
end
|
315
|
-
|
316
|
-
context 'when sessions are not supported' do
|
317
|
-
max_server_version '3.4'
|
318
|
-
|
319
|
-
let!(:error) do
|
320
|
-
e = nil
|
321
|
-
begin
|
322
|
-
person.with_session {}
|
323
|
-
rescue => ex
|
324
|
-
e = ex
|
325
|
-
end
|
326
|
-
e
|
327
|
-
end
|
328
|
-
|
329
|
-
it 'raises a sessions not supported error' do
|
330
|
-
expect(error).to be_a(Mongoid::Errors::InvalidSessionUse)
|
331
|
-
expect(error.message).to include('not supported')
|
332
|
-
end
|
333
|
-
end
|
334
296
|
end
|
335
297
|
end
|