mongoid 7.1.1 → 8.1.0
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +20 -20
- data/README.md +15 -8
- data/Rakefile +61 -5
- data/lib/config/locales/en.yml +162 -56
- data/lib/mongoid/association/accessors.rb +89 -40
- data/lib/mongoid/association/bindable.rb +50 -23
- data/lib/mongoid/association/builders.rb +5 -12
- data/lib/mongoid/association/constrainable.rb +1 -5
- data/lib/mongoid/association/depending.rb +5 -17
- data/lib/mongoid/association/eager_loadable.rb +29 -10
- data/lib/mongoid/association/embedded/batchable.rb +64 -52
- data/lib/mongoid/association/embedded/cyclic.rb +3 -12
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -5
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -16
- data/lib/mongoid/association/embedded/embedded_in.rb +4 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -7
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +110 -92
- data/lib/mongoid/association/embedded/embeds_many.rb +4 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -8
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +50 -19
- data/lib/mongoid/association/embedded/embeds_one.rb +5 -31
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +27 -5
- data/lib/mongoid/association/many.rb +14 -27
- data/lib/mongoid/association/marshalable.rb +0 -5
- data/lib/mongoid/association/nested/many.rb +6 -16
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -13
- data/lib/mongoid/association/nested/one.rb +48 -23
- data/lib/mongoid/association/nested.rb +0 -3
- data/lib/mongoid/association/one.rb +2 -11
- data/lib/mongoid/association/options.rb +9 -42
- data/lib/mongoid/association/proxy.rb +22 -27
- data/lib/mongoid/association/referenced/auto_save.rb +6 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -8
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -19
- data/lib/mongoid/association/referenced/belongs_to.rb +11 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +12 -25
- data/lib/mongoid/association/referenced/eager.rb +5 -26
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +81 -51
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +17 -41
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +438 -461
- data/lib/mongoid/association/referenced/has_many/proxy.rb +58 -84
- data/lib/mongoid/association/referenced/has_many.rb +15 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +12 -5
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +7 -22
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -16
- data/lib/mongoid/association/referenced/has_one.rb +12 -35
- data/lib/mongoid/association/referenced/syncable.rb +4 -21
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +4 -5
- data/lib/mongoid/association/relatable.rb +46 -71
- data/lib/mongoid/association.rb +5 -22
- data/lib/mongoid/atomic/modifiers.rb +7 -54
- data/lib/mongoid/atomic/paths/embedded/many.rb +19 -5
- data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
- data/lib/mongoid/atomic/paths/embedded.rb +0 -3
- data/lib/mongoid/atomic/paths/root.rb +0 -5
- data/lib/mongoid/atomic/paths.rb +0 -1
- data/lib/mongoid/atomic.rb +40 -47
- data/lib/mongoid/attributes/dynamic.rb +5 -22
- data/lib/mongoid/attributes/nested.rb +6 -11
- data/lib/mongoid/attributes/processing.rb +11 -21
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -8
- data/lib/mongoid/attributes.rb +82 -88
- data/lib/mongoid/cacheable.rb +4 -9
- data/lib/mongoid/changeable.rb +148 -69
- data/lib/mongoid/clients/factory.rb +41 -17
- data/lib/mongoid/clients/options.rb +13 -14
- data/lib/mongoid/clients/sessions.rb +8 -11
- data/lib/mongoid/clients/storage_options.rb +7 -17
- data/lib/mongoid/clients/validators/storage.rb +3 -24
- data/lib/mongoid/clients/validators.rb +0 -1
- data/lib/mongoid/clients.rb +1 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +3 -7
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +28 -5
- data/lib/mongoid/config/options.rb +0 -11
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -23
- data/lib/mongoid/config/validators/option.rb +0 -3
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config.rb +183 -39
- data/lib/mongoid/contextual/aggregable/memory.rb +37 -26
- data/lib/mongoid/contextual/aggregable/mongo.rb +29 -32
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +7 -27
- data/lib/mongoid/contextual/command.rb +0 -5
- data/lib/mongoid/contextual/geo_near.rb +8 -41
- data/lib/mongoid/contextual/map_reduce.rb +2 -33
- data/lib/mongoid/contextual/memory.rb +383 -79
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +636 -283
- data/lib/mongoid/contextual/none.rb +262 -31
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +14 -7
- data/lib/mongoid/copyable.rb +39 -16
- data/lib/mongoid/criteria/findable.rb +9 -19
- data/lib/mongoid/criteria/includable.rb +27 -31
- data/lib/mongoid/criteria/inspectable.rb +0 -3
- data/lib/mongoid/criteria/marshalable.rb +10 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -20
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +1 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -25
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -40
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -7
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -6
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -40
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -20
- data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +46 -16
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -18
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -31
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +16 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -5
- data/lib/mongoid/criteria/queryable/key.rb +6 -19
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +123 -38
- data/lib/mongoid/criteria/queryable/optional.rb +11 -62
- data/lib/mongoid/criteria/queryable/options.rb +2 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -14
- data/lib/mongoid/criteria/queryable/selectable.rb +138 -125
- data/lib/mongoid/criteria/queryable/selector.rb +94 -30
- data/lib/mongoid/criteria/queryable/smash.rb +40 -18
- data/lib/mongoid/criteria/queryable/storable.rb +14 -10
- data/lib/mongoid/criteria/queryable.rb +11 -13
- data/lib/mongoid/criteria/scopable.rb +27 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +88 -108
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +149 -99
- data/lib/mongoid/equality.rb +32 -16
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/callback.rb +0 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
- data/lib/mongoid/errors/delete_restriction.rb +8 -12
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
- data/lib/mongoid/errors/document_not_found.rb +33 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +0 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +0 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +0 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_includes.rb +0 -3
- data/lib/mongoid/errors/invalid_index.rb +0 -3
- data/lib/mongoid/errors/invalid_options.rb +0 -3
- data/lib/mongoid/errors/invalid_path.rb +0 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -8
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -4
- data/lib/mongoid/errors/invalid_scope.rb +0 -3
- data/lib/mongoid/errors/invalid_session_use.rb +1 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +0 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
- data/lib/mongoid/errors/mixed_relations.rb +0 -3
- data/lib/mongoid/errors/mongoid_error.rb +4 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +2 -5
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +0 -3
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +0 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
- data/lib/mongoid/errors/no_metadata.rb +0 -3
- data/lib/mongoid/errors/no_parent.rb +0 -3
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -6
- data/lib/mongoid/errors/scope_overwrite.rb +0 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -2
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +0 -3
- data/lib/mongoid/errors/unsaved_document.rb +1 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
- data/lib/mongoid/errors/validations.rb +0 -1
- data/lib/mongoid/errors.rb +15 -4
- data/lib/mongoid/evolvable.rb +1 -4
- data/lib/mongoid/extensions/array.rb +12 -36
- data/lib/mongoid/extensions/big_decimal.rb +33 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -6
- data/lib/mongoid/extensions/date.rb +26 -29
- data/lib/mongoid/extensions/date_time.rb +1 -10
- data/lib/mongoid/extensions/decimal128.rb +0 -5
- data/lib/mongoid/extensions/false_class.rb +3 -8
- data/lib/mongoid/extensions/float.rb +7 -11
- data/lib/mongoid/extensions/hash.rb +19 -37
- data/lib/mongoid/extensions/integer.rb +7 -13
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -5
- data/lib/mongoid/extensions/object.rb +11 -48
- data/lib/mongoid/extensions/object_id.rb +0 -7
- data/lib/mongoid/extensions/range.rb +40 -20
- data/lib/mongoid/extensions/regexp.rb +12 -8
- data/lib/mongoid/extensions/set.rb +11 -11
- data/lib/mongoid/extensions/string.rb +12 -52
- data/lib/mongoid/extensions/symbol.rb +4 -22
- data/lib/mongoid/extensions/time.rb +28 -26
- data/lib/mongoid/extensions/time_with_zone.rb +14 -11
- data/lib/mongoid/extensions/true_class.rb +3 -8
- data/lib/mongoid/extensions.rb +17 -3
- data/lib/mongoid/factory.rb +80 -16
- data/lib/mongoid/fields/foreign_key.rb +11 -25
- data/lib/mongoid/fields/localized.rb +19 -15
- data/lib/mongoid/fields/standard.rb +17 -40
- data/lib/mongoid/fields/validators/macro.rb +25 -24
- data/lib/mongoid/fields/validators.rb +0 -1
- data/lib/mongoid/fields.rb +346 -75
- data/lib/mongoid/findable.rb +107 -31
- data/lib/mongoid/indexable/specification.rb +2 -17
- data/lib/mongoid/indexable/validators/options.rb +6 -9
- data/lib/mongoid/indexable.rb +3 -20
- data/lib/mongoid/inspectable.rb +2 -11
- data/lib/mongoid/interceptable.rb +79 -41
- data/lib/mongoid/loggable.rb +0 -9
- data/lib/mongoid/matchable.rb +2 -155
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +130 -0
- data/lib/mongoid/persistable/creatable.rb +20 -29
- data/lib/mongoid/persistable/deletable.rb +4 -22
- data/lib/mongoid/persistable/destroyable.rb +9 -10
- data/lib/mongoid/persistable/incrementable.rb +0 -5
- data/lib/mongoid/persistable/logical.rb +0 -5
- data/lib/mongoid/persistable/poppable.rb +0 -5
- data/lib/mongoid/persistable/pullable.rb +0 -7
- data/lib/mongoid/persistable/pushable.rb +4 -8
- data/lib/mongoid/persistable/renamable.rb +0 -5
- data/lib/mongoid/persistable/savable.rb +13 -8
- data/lib/mongoid/persistable/settable.rb +0 -5
- data/lib/mongoid/persistable/unsettable.rb +2 -7
- data/lib/mongoid/persistable/updatable.rb +96 -29
- data/lib/mongoid/persistable/upsertable.rb +20 -8
- data/lib/mongoid/persistable.rb +6 -26
- data/lib/mongoid/persistence_context.rb +71 -43
- data/lib/mongoid/positional.rb +0 -5
- data/lib/mongoid/query_cache.rb +16 -236
- data/lib/mongoid/railtie.rb +0 -15
- data/lib/mongoid/railties/controller_runtime.rb +1 -2
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +17 -20
- data/lib/mongoid/scopable.rb +32 -56
- data/lib/mongoid/selectable.rb +5 -17
- data/lib/mongoid/serializable.rb +11 -22
- data/lib/mongoid/shardable.rb +49 -16
- data/lib/mongoid/stateful.rb +57 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +59 -11
- data/lib/mongoid/threaded/lifecycle.rb +5 -26
- data/lib/mongoid/threaded.rb +42 -67
- data/lib/mongoid/timestamps/created/short.rb +0 -1
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +0 -7
- data/lib/mongoid/timestamps/updated/short.rb +0 -1
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +0 -1
- data/lib/mongoid/touchable.rb +34 -13
- data/lib/mongoid/traversable.rb +181 -59
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +1 -4
- data/lib/mongoid/validatable/format.rb +0 -1
- data/lib/mongoid/validatable/length.rb +0 -1
- data/lib/mongoid/validatable/localizable.rb +1 -4
- data/lib/mongoid/validatable/macros.rb +5 -14
- data/lib/mongoid/validatable/presence.rb +6 -13
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -40
- data/lib/mongoid/validatable.rb +9 -27
- data/lib/mongoid/version.rb +1 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +42 -18
- data/lib/rails/generators/mongoid/config/config_generator.rb +8 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -6
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +0 -1
- data/lib/rails/mongoid.rb +0 -3
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +16 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +18 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +163 -1
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +0 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +192 -0
- data/spec/integration/callbacks_spec.rb +584 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +51 -0
- data/spec/integration/criteria/logical_spec.rb +43 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -19
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +20 -5
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +25 -9
- data/spec/mongoid/association/accessors_spec.rb +282 -78
- data/spec/mongoid/association/auto_save_spec.rb +72 -34
- data/spec/mongoid/association/builders_spec.rb +1 -2
- data/spec/mongoid/association/constrainable_spec.rb +0 -1
- data/spec/mongoid/association/counter_cache_spec.rb +33 -34
- data/spec/mongoid/association/depending_spec.rb +429 -339
- data/spec/mongoid/association/eager_spec.rb +6 -6
- data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -2
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +150 -14
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +704 -198
- data/spec/mongoid/association/embedded/embeds_many_models.rb +194 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -1
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +78 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +36 -24
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +20 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -3
- data/spec/mongoid/association/macros_spec.rb +9 -10
- data/spec/mongoid/association/nested/many_spec.rb +0 -1
- data/spec/mongoid/association/nested/one_spec.rb +16 -13
- data/spec/mongoid/association/options_spec.rb +0 -1
- data/spec/mongoid/association/polymorphic_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +109 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +112 -59
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +20 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +26 -22
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +523 -372
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +56 -3
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +130 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +413 -130
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +857 -503
- data/spec/mongoid/association/referenced/has_many_models.rb +59 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +46 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -10
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +133 -28
- data/spec/mongoid/association/referenced/has_one_models.rb +63 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +22 -2
- data/spec/mongoid/association/reflections_spec.rb +0 -1
- data/spec/mongoid/association/syncable_spec.rb +46 -33
- data/spec/mongoid/association_spec.rb +0 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
- data/spec/mongoid/atomic/paths_spec.rb +91 -13
- data/spec/mongoid/atomic_spec.rb +51 -7
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +147 -79
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +22 -23
- data/spec/mongoid/attributes_spec.rb +888 -62
- data/spec/mongoid/cacheable_spec.rb +4 -5
- data/spec/mongoid/changeable_spec.rb +464 -73
- data/spec/mongoid/clients/factory_spec.rb +91 -9
- data/spec/mongoid/clients/options_spec.rb +27 -19
- data/spec/mongoid/clients/sessions_spec.rb +27 -67
- data/spec/mongoid/clients/transactions_spec.rb +69 -35
- data/spec/mongoid/clients_spec.rb +187 -24
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +0 -1
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +124 -9
- data/spec/mongoid/config/options_spec.rb +0 -1
- data/spec/mongoid/config_spec.rb +465 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +431 -154
- 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/aggregable/mongo_spec.rb +120 -21
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +148 -86
- data/spec/mongoid/contextual/geo_near_spec.rb +28 -20
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -20
- data/spec/mongoid/contextual/memory_spec.rb +1826 -304
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3501 -1272
- data/spec/mongoid/contextual/none_spec.rb +78 -68
- data/spec/mongoid/copyable_spec.rb +657 -37
- data/spec/mongoid/copyable_spec_models.rb +28 -1
- data/spec/mongoid/criteria/findable_spec.rb +109 -234
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +37 -38
- data/spec/mongoid/criteria/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -74
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -20
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -27
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -16
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -8
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +5 -71
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +30 -8
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +39 -2
- data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +143 -13
- data/spec/mongoid/criteria/queryable/optional_spec.rb +16 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1186 -195
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +307 -705
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -4
- data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
- data/spec/mongoid/criteria/scopable_spec.rb +127 -1
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1267 -1739
- data/spec/mongoid/document_fields_spec.rb +179 -5
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +51 -1
- data/spec/mongoid/document_spec.rb +151 -88
- data/spec/mongoid/equality_spec.rb +142 -42
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
- data/spec/mongoid/errors/callback_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +2 -3
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +5 -6
- data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -9
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -3
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -4
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -4
- data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -4
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
- data/spec/mongoid/errors/no_parent_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -3
- data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -2
- data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
- data/spec/mongoid/errors/validations_spec.rb +0 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -213
- data/spec/mongoid/extensions/binary_spec.rb +44 -10
- data/spec/mongoid/extensions/boolean_spec.rb +68 -83
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -4
- data/spec/mongoid/extensions/date_spec.rb +71 -2
- data/spec/mongoid/extensions/date_time_spec.rb +15 -10
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
- data/spec/mongoid/extensions/false_class_spec.rb +1 -2
- data/spec/mongoid/extensions/float_spec.rb +53 -75
- data/spec/mongoid/extensions/hash_spec.rb +30 -1
- data/spec/mongoid/extensions/integer_spec.rb +50 -65
- data/spec/mongoid/extensions/module_spec.rb +0 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/extensions/object_id_spec.rb +0 -1
- data/spec/mongoid/extensions/object_spec.rb +0 -1
- data/spec/mongoid/extensions/range_spec.rb +255 -55
- data/spec/mongoid/extensions/regexp_spec.rb +58 -34
- data/spec/mongoid/extensions/set_spec.rb +106 -1
- data/spec/mongoid/extensions/string_spec.rb +58 -31
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +18 -26
- data/spec/mongoid/extensions/time_spec.rb +639 -107
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -84
- data/spec/mongoid/extensions/true_class_spec.rb +1 -2
- data/spec/mongoid/extensions_spec.rb +14 -3
- data/spec/mongoid/factory_spec.rb +323 -30
- data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
- data/spec/mongoid/fields/localized_spec.rb +84 -42
- data/spec/mongoid/fields/standard_spec.rb +0 -1
- data/spec/mongoid/fields_spec.rb +855 -118
- data/spec/mongoid/findable_spec.rb +518 -65
- data/spec/mongoid/indexable/specification_spec.rb +2 -3
- data/spec/mongoid/indexable_spec.rb +85 -33
- data/spec/mongoid/inspectable_spec.rb +37 -3
- data/spec/mongoid/interceptable_spec.rb +702 -104
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/loggable_spec.rb +0 -1
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -30
- data/spec/mongoid/persistable/deletable_spec.rb +298 -19
- data/spec/mongoid/persistable/destroyable_spec.rb +226 -19
- data/spec/mongoid/persistable/incrementable_spec.rb +45 -9
- data/spec/mongoid/persistable/logical_spec.rb +41 -5
- data/spec/mongoid/persistable/poppable_spec.rb +40 -5
- data/spec/mongoid/persistable/pullable_spec.rb +80 -9
- data/spec/mongoid/persistable/pushable_spec.rb +80 -9
- data/spec/mongoid/persistable/renamable_spec.rb +39 -4
- data/spec/mongoid/persistable/savable_spec.rb +282 -26
- data/spec/mongoid/persistable/settable_spec.rb +76 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +40 -5
- data/spec/mongoid/persistable/updatable_spec.rb +61 -50
- data/spec/mongoid/persistable/upsertable_spec.rb +91 -4
- data/spec/mongoid/persistable_spec.rb +3 -4
- data/spec/mongoid/persistence_context_spec.rb +57 -59
- data/spec/mongoid/positional_spec.rb +0 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +7 -5
- data/spec/mongoid/query_cache_spec.rb +424 -68
- data/spec/mongoid/relations/proxy_spec.rb +7 -8
- data/spec/mongoid/reloadable_spec.rb +355 -27
- data/spec/mongoid/scopable_spec.rb +191 -39
- data/spec/mongoid/selectable_spec.rb +6 -7
- data/spec/mongoid/serializable_spec.rb +35 -39
- data/spec/mongoid/shardable_models.rb +15 -1
- data/spec/mongoid/shardable_spec.rb +181 -32
- data/spec/mongoid/stateful_spec.rb +151 -10
- data/spec/mongoid/tasks/database_rake_spec.rb +87 -14
- data/spec/mongoid/tasks/database_spec.rb +128 -2
- data/spec/mongoid/threaded_spec.rb +2 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
- data/spec/mongoid/timestamps/created_spec.rb +1 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
- data/spec/mongoid/timestamps/updated_spec.rb +3 -4
- data/spec/mongoid/timestamps_spec.rb +398 -11
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +525 -36
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1143 -2
- data/spec/mongoid/validatable/associated_spec.rb +0 -1
- data/spec/mongoid/validatable/format_spec.rb +0 -1
- data/spec/mongoid/validatable/length_spec.rb +0 -1
- data/spec/mongoid/validatable/numericality_spec.rb +0 -1
- data/spec/mongoid/validatable/presence_spec.rb +26 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +125 -99
- data/spec/mongoid/validatable_spec.rb +3 -4
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +35 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -3
- data/spec/rails/mongoid_spec.rb +4 -17
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +298 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +321 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +416 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +24 -54
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +34 -197
- data/spec/support/expectations.rb +0 -1
- data/spec/support/helpers.rb +1 -1
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +109 -1
- data/spec/{app → support}/models/account.rb +1 -2
- data/spec/{app → support}/models/acolyte.rb +0 -1
- data/spec/{app → support}/models/actor.rb +1 -2
- data/spec/{app → support}/models/actress.rb +0 -1
- data/spec/{app → support}/models/address.rb +4 -1
- data/spec/{app → support}/models/address_component.rb +0 -1
- data/spec/{app → support}/models/address_number.rb +0 -1
- data/spec/{app → support}/models/agency.rb +0 -1
- data/spec/{app → support}/models/agent.rb +0 -1
- data/spec/{app → support}/models/album.rb +0 -1
- data/spec/{app → support}/models/alert.rb +0 -1
- data/spec/{app → support}/models/animal.rb +0 -1
- data/spec/{app → support}/models/answer.rb +0 -1
- data/spec/{app → support}/models/appointment.rb +0 -1
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/array_field.rb +0 -1
- data/spec/{app → support}/models/article.rb +0 -1
- data/spec/{app → support}/models/artist.rb +2 -2
- data/spec/{app → support}/models/artwork.rb +0 -1
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +0 -1
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +0 -1
- data/spec/{app → support}/models/baby.rb +0 -1
- data/spec/{app → support}/models/band.rb +8 -1
- data/spec/{app → support}/models/bar.rb +0 -1
- data/spec/{app → support}/models/basic.rb +0 -1
- data/spec/{app → support}/models/bed.rb +0 -1
- data/spec/{app → support}/models/big_palette.rb +0 -1
- data/spec/{app → support}/models/birthday.rb +0 -1
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +0 -1
- data/spec/{app → support}/models/book.rb +1 -1
- data/spec/{app → support}/models/breed.rb +0 -1
- data/spec/{app → support}/models/browser.rb +1 -2
- data/spec/{app → support}/models/building.rb +2 -1
- data/spec/{app → support}/models/building_address.rb +0 -1
- data/spec/{app → support}/models/bus.rb +0 -1
- data/spec/{app → support}/models/business.rb +0 -1
- data/spec/{app → support}/models/callback_test.rb +0 -1
- data/spec/{app → support}/models/canvas.rb +1 -2
- data/spec/{app → support}/models/car.rb +0 -1
- data/spec/{app → support}/models/cat.rb +0 -1
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +0 -1
- data/spec/{app → support}/models/child.rb +0 -1
- data/spec/{app → support}/models/child_doc.rb +3 -4
- data/spec/{app → support}/models/church.rb +0 -1
- data/spec/{app → support}/models/circle.rb +0 -1
- data/spec/{app → support}/models/circuit.rb +0 -1
- data/spec/{app → support}/models/circus.rb +3 -1
- data/spec/{app → support}/models/code.rb +2 -1
- data/spec/{app → support}/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +0 -1
- data/spec/{app → support}/models/company.rb +0 -1
- data/spec/{app → support}/models/consumption_period.rb +0 -1
- data/spec/{app → support}/models/contextable_item.rb +0 -1
- data/spec/{app → support}/models/contractor.rb +0 -1
- data/spec/{app → support}/models/cookie.rb +0 -1
- data/spec/{app → support}/models/country_code.rb +2 -1
- data/spec/{app → support}/models/courier_job.rb +0 -1
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +0 -1
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +0 -1
- data/spec/{app → support}/models/dictionary.rb +6 -1
- data/spec/{app → support}/models/division.rb +0 -1
- data/spec/{app → support}/models/doctor.rb +0 -1
- data/spec/{app → support}/models/dog.rb +0 -1
- data/spec/{app → support}/models/dokument.rb +0 -1
- data/spec/{app → support}/models/draft.rb +0 -1
- data/spec/{app → support}/models/dragon.rb +0 -1
- data/spec/{app → support}/models/driver.rb +1 -2
- data/spec/{app → support}/models/drug.rb +0 -1
- data/spec/{app → support}/models/dungeon.rb +0 -1
- data/spec/{app → support}/models/edit.rb +0 -1
- data/spec/{app → support}/models/email.rb +0 -1
- data/spec/{app → support}/models/employer.rb +0 -1
- data/spec/{app → support}/models/entry.rb +0 -1
- data/spec/{app → support}/models/eraser.rb +0 -1
- data/spec/{app → support}/models/even.rb +0 -1
- data/spec/{app → support}/models/event.rb +0 -1
- data/spec/{app → support}/models/exhibition.rb +0 -1
- data/spec/{app → support}/models/exhibitor.rb +0 -1
- data/spec/{app → support}/models/explosion.rb +0 -1
- data/spec/{app → support}/models/eye.rb +0 -1
- data/spec/{app → support}/models/eye_bowl.rb +0 -1
- data/spec/{app → support}/models/face.rb +0 -1
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +0 -1
- data/spec/{app → support}/models/filesystem.rb +0 -1
- data/spec/{app → support}/models/fire_hydrant.rb +0 -1
- data/spec/{app → support}/models/firefox.rb +0 -1
- data/spec/{app → support}/models/fish.rb +0 -1
- data/spec/{app → support}/models/folder.rb +0 -1
- data/spec/{app → support}/models/folder_item.rb +0 -1
- data/spec/{app → support}/models/fruits.rb +0 -1
- data/spec/{app → support}/models/game.rb +0 -1
- data/spec/{app → support}/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +0 -1
- data/spec/{app → support}/models/house.rb +0 -1
- data/spec/{app → support}/models/html_writer.rb +0 -1
- data/spec/{app → support}/models/id_key.rb +0 -1
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +0 -1
- data/spec/{app → support}/models/implant.rb +9 -1
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +1 -2
- data/spec/{app → support}/models/jar.rb +0 -1
- data/spec/{app → support}/models/kaleidoscope.rb +0 -1
- data/spec/{app → support}/models/kangaroo.rb +0 -1
- data/spec/{app → support}/models/label.rb +4 -2
- data/spec/{app → support}/models/language.rb +0 -1
- data/spec/{app → support}/models/lat_lng.rb +0 -1
- data/spec/{app → support}/models/league.rb +0 -1
- data/spec/{app → support}/models/learner.rb +0 -1
- data/spec/{app → support}/models/line_item.rb +0 -1
- data/spec/{app → support}/models/location.rb +0 -1
- data/spec/{app → support}/models/login.rb +0 -1
- data/spec/{app → support}/models/manufacturer.rb +0 -1
- data/spec/{app → support}/models/meat.rb +0 -1
- data/spec/{app → support}/models/membership.rb +1 -1
- data/spec/{app → support}/models/message.rb +0 -1
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +0 -1
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +0 -1
- data/spec/{app → support}/models/my_hash.rb +0 -1
- data/spec/{app → support}/models/name.rb +0 -1
- data/spec/{app → support}/models/name_only.rb +0 -1
- data/spec/{app → support}/models/node.rb +0 -1
- data/spec/{app → support}/models/note.rb +0 -1
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +0 -1
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +1 -2
- data/spec/{app → support}/models/ordered_preference.rb +0 -1
- data/spec/{app → support}/models/oscar.rb +0 -1
- data/spec/{app → support}/models/other_owner_object.rb +0 -1
- data/spec/{app → support}/models/override.rb +0 -1
- data/spec/{app → support}/models/ownable.rb +0 -1
- data/spec/{app → support}/models/owner.rb +2 -1
- data/spec/{app → support}/models/pack.rb +0 -1
- data/spec/{app → support}/models/page.rb +0 -1
- data/spec/{app → support}/models/page_question.rb +0 -1
- data/spec/{app → support}/models/palette.rb +1 -2
- data/spec/{app → support}/models/parent.rb +0 -1
- data/spec/{app → support}/models/parent_doc.rb +0 -1
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +0 -1
- data/spec/{app → support}/models/pdf_writer.rb +0 -1
- data/spec/{app → support}/models/pencil.rb +0 -1
- data/spec/{app → support}/models/person.rb +20 -2
- data/spec/{app → support}/models/pet.rb +0 -1
- data/spec/{app → support}/models/pet_owner.rb +0 -1
- data/spec/{app → support}/models/phone.rb +3 -2
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +0 -1
- data/spec/{app → support}/models/player.rb +2 -1
- data/spec/{app → support}/models/post.rb +0 -1
- data/spec/{app → support}/models/post_genre.rb +0 -1
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +0 -1
- data/spec/{app → support}/models/princess.rb +0 -1
- data/spec/{app → support}/models/product.rb +1 -1
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -1
- data/spec/{app → support}/models/pub.rb +0 -1
- data/spec/{app → support}/models/publication/encyclopedia.rb +0 -1
- data/spec/{app → support}/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +0 -1
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +0 -1
- data/spec/{app → support}/models/quiz.rb +0 -1
- data/spec/{app → support}/models/rating.rb +0 -1
- data/spec/{app → support}/models/record.rb +0 -1
- data/spec/{app → support}/models/registry.rb +1 -1
- data/spec/{app → support}/models/role.rb +0 -1
- data/spec/{app → support}/models/root_category.rb +0 -1
- data/spec/{app → support}/models/sandwich.rb +0 -1
- data/spec/{app → support}/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +14 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -3
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +0 -1
- data/spec/{app → support}/models/series.rb +1 -1
- data/spec/{app → support}/models/server.rb +0 -1
- data/spec/{app → support}/models/service.rb +0 -1
- data/spec/{app → support}/models/shape.rb +2 -3
- data/spec/{app → support}/models/shelf.rb +0 -1
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -1
- data/spec/{app → support}/models/shipping_container.rb +0 -1
- data/spec/{app → support}/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +0 -1
- data/spec/{app → support}/models/short_agent.rb +0 -1
- data/spec/{app → support}/models/short_quiz.rb +0 -1
- data/spec/{app → support}/models/simple.rb +0 -1
- data/spec/{app → support}/models/slave.rb +0 -1
- data/spec/{app → support}/models/song.rb +0 -1
- data/spec/{app → support}/models/sound.rb +0 -1
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +0 -1
- data/spec/{app → support}/models/staff.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -1
- data/spec/{app → support}/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +0 -1
- data/spec/{app → support}/models/subscription.rb +0 -1
- data/spec/{app → support}/models/survey.rb +0 -1
- data/spec/{app → support}/models/symptom.rb +0 -1
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -1
- data/spec/{app → support}/models/target.rb +0 -1
- data/spec/{app → support}/models/template.rb +0 -1
- data/spec/{app → support}/models/thing.rb +0 -1
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +0 -1
- data/spec/{app → support}/models/tool.rb +2 -3
- data/spec/{app → support}/models/topping.rb +0 -1
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +0 -1
- data/spec/{app → support}/models/translation.rb +0 -1
- data/spec/{app → support}/models/tree.rb +0 -1
- data/spec/{app → support}/models/truck.rb +2 -1
- data/spec/{app → support}/models/updatable.rb +0 -1
- data/spec/{app → support}/models/user.rb +0 -1
- data/spec/{app → support}/models/user_account.rb +0 -1
- data/spec/{app → support}/models/validation_callback.rb +0 -1
- data/spec/{app → support}/models/vehicle.rb +7 -3
- data/spec/{app → support}/models/version.rb +0 -1
- data/spec/{app → support}/models/vertex.rb +0 -1
- data/spec/{app → support}/models/vet_visit.rb +0 -1
- data/spec/{app → support}/models/video.rb +0 -1
- data/spec/{app → support}/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +1 -1
- data/spec/{app → support}/models/word.rb +0 -1
- data/spec/{app → support}/models/word_origin.rb +0 -1
- data/spec/{app → support}/models/writer.rb +2 -3
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/spec_config.rb +28 -6
- data.tar.gz.sig +0 -0
- metadata +1216 -799
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -26
- data/lib/mongoid/errors/invalid_value.rb +0 -18
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/lib/support/ruby_version.rb +0 -29
- data/spec/app/models/augmentation.rb +0 -14
- data/spec/app/models/coding.rb +0 -4
- data/spec/app/models/passport.rb +0 -8
- data/spec/app/models/powerup.rb +0 -14
- data/spec/app/models/publication.rb +0 -5
- data/spec/app/models/weapon.rb +0 -14
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -61
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -61
- data/spec/mongoid/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/lite_constraints.rb +0 -22
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require "spec_helper"
|
|
5
4
|
require_relative './interceptable_spec_models'
|
|
6
5
|
|
|
7
6
|
describe Mongoid::Interceptable do
|
|
8
7
|
|
|
8
|
+
before do
|
|
9
|
+
# The find and initialize callbacks I added were causing failures
|
|
10
|
+
# because they were causing updates when we were asserting no updates
|
|
11
|
+
# happened.
|
|
12
|
+
Label.reset_callbacks(:initialize)
|
|
13
|
+
Label.reset_callbacks(:find)
|
|
14
|
+
end
|
|
15
|
+
|
|
9
16
|
class TestClass
|
|
10
17
|
include Mongoid::Interceptable
|
|
11
18
|
|
|
@@ -78,7 +85,7 @@ describe Mongoid::Interceptable do
|
|
|
78
85
|
describe ".after_find" do
|
|
79
86
|
|
|
80
87
|
let!(:player) do
|
|
81
|
-
Player.create
|
|
88
|
+
Player.create!
|
|
82
89
|
end
|
|
83
90
|
|
|
84
91
|
context "when the callback is on a root document" do
|
|
@@ -131,7 +138,7 @@ describe Mongoid::Interceptable do
|
|
|
131
138
|
context "when the callback is on an embedded document" do
|
|
132
139
|
|
|
133
140
|
let!(:implant) do
|
|
134
|
-
player.implants.create
|
|
141
|
+
player.implants.create!
|
|
135
142
|
end
|
|
136
143
|
|
|
137
144
|
context "when when the document is instantiated" do
|
|
@@ -201,7 +208,7 @@ describe Mongoid::Interceptable do
|
|
|
201
208
|
]
|
|
202
209
|
})
|
|
203
210
|
book.id = '123'
|
|
204
|
-
book.save
|
|
211
|
+
book.save!
|
|
205
212
|
book
|
|
206
213
|
end
|
|
207
214
|
|
|
@@ -213,7 +220,7 @@ describe Mongoid::Interceptable do
|
|
|
213
220
|
book.pages.each do | page |
|
|
214
221
|
page.notes.destroy_all
|
|
215
222
|
page.notes.new(message: new_message)
|
|
216
|
-
page.save
|
|
223
|
+
page.save!
|
|
217
224
|
end
|
|
218
225
|
end
|
|
219
226
|
|
|
@@ -276,7 +283,7 @@ describe Mongoid::Interceptable do
|
|
|
276
283
|
|
|
277
284
|
before do
|
|
278
285
|
expect(artist).to receive(:before_create_stub).once.and_return(true)
|
|
279
|
-
artist.save
|
|
286
|
+
artist.save!
|
|
280
287
|
end
|
|
281
288
|
|
|
282
289
|
it "gets saved" do
|
|
@@ -321,7 +328,7 @@ describe Mongoid::Interceptable do
|
|
|
321
328
|
end
|
|
322
329
|
|
|
323
330
|
it "the save returns true" do
|
|
324
|
-
expect(artist.save).to be true
|
|
331
|
+
expect(artist.save!).to be true
|
|
325
332
|
end
|
|
326
333
|
end
|
|
327
334
|
|
|
@@ -345,7 +352,7 @@ describe Mongoid::Interceptable do
|
|
|
345
352
|
context "when updating" do
|
|
346
353
|
|
|
347
354
|
let(:artist) do
|
|
348
|
-
Artist.create(name: "Depeche Mode").tap do |artist|
|
|
355
|
+
Artist.create!(name: "Depeche Mode").tap do |artist|
|
|
349
356
|
artist.name = "The Mountain Goats"
|
|
350
357
|
end
|
|
351
358
|
end
|
|
@@ -361,7 +368,7 @@ describe Mongoid::Interceptable do
|
|
|
361
368
|
end
|
|
362
369
|
|
|
363
370
|
it "the save returns true" do
|
|
364
|
-
expect(artist.save).to be true
|
|
371
|
+
expect(artist.save!).to be true
|
|
365
372
|
end
|
|
366
373
|
end
|
|
367
374
|
|
|
@@ -386,7 +393,7 @@ describe Mongoid::Interceptable do
|
|
|
386
393
|
describe ".before_destroy" do
|
|
387
394
|
|
|
388
395
|
let(:artist) do
|
|
389
|
-
Artist.create(name: "Depeche Mode")
|
|
396
|
+
Artist.create!(name: "Depeche Mode")
|
|
390
397
|
end
|
|
391
398
|
|
|
392
399
|
before do
|
|
@@ -431,7 +438,7 @@ describe Mongoid::Interceptable do
|
|
|
431
438
|
end
|
|
432
439
|
|
|
433
440
|
let!(:record) do
|
|
434
|
-
moderat.records.create(name: "Moderat")
|
|
441
|
+
moderat.records.create!(name: "Moderat")
|
|
435
442
|
end
|
|
436
443
|
|
|
437
444
|
before do
|
|
@@ -545,7 +552,7 @@ describe Mongoid::Interceptable do
|
|
|
545
552
|
|
|
546
553
|
it "does not cascade to the child" do
|
|
547
554
|
Band.accepts_nested_attributes_for :records, allow_destroy: true
|
|
548
|
-
expect(band.update_attributes(attributes)).to be true
|
|
555
|
+
expect(band.update_attributes!(attributes)).to be true
|
|
549
556
|
end
|
|
550
557
|
end
|
|
551
558
|
end
|
|
@@ -573,10 +580,22 @@ describe Mongoid::Interceptable do
|
|
|
573
580
|
end
|
|
574
581
|
|
|
575
582
|
context "when saving the root" do
|
|
583
|
+
context 'with prevent_multiple_calls_of_embedded_callbacks enabled' do
|
|
584
|
+
config_override :prevent_multiple_calls_of_embedded_callbacks, true
|
|
585
|
+
|
|
586
|
+
it "executes the callbacks only once for each document" do
|
|
587
|
+
expect(note).to receive(:update_saved).once
|
|
588
|
+
band.save!
|
|
589
|
+
end
|
|
590
|
+
end
|
|
576
591
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
592
|
+
context 'with prevent_multiple_calls_of_embedded_callbacks disabled' do
|
|
593
|
+
config_override :prevent_multiple_calls_of_embedded_callbacks, false
|
|
594
|
+
|
|
595
|
+
it "executes the callbacks once for each ember" do
|
|
596
|
+
expect(note).to receive(:update_saved).twice
|
|
597
|
+
band.save!
|
|
598
|
+
end
|
|
580
599
|
end
|
|
581
600
|
end
|
|
582
601
|
end
|
|
@@ -585,7 +604,7 @@ describe Mongoid::Interceptable do
|
|
|
585
604
|
context "when cascading after initialize" do
|
|
586
605
|
|
|
587
606
|
let!(:person) do
|
|
588
|
-
Person.create
|
|
607
|
+
Person.create!
|
|
589
608
|
end
|
|
590
609
|
|
|
591
610
|
before do
|
|
@@ -624,7 +643,7 @@ describe Mongoid::Interceptable do
|
|
|
624
643
|
end
|
|
625
644
|
|
|
626
645
|
before do
|
|
627
|
-
band.save
|
|
646
|
+
band.save!
|
|
628
647
|
end
|
|
629
648
|
|
|
630
649
|
it "executes the callback" do
|
|
@@ -635,7 +654,7 @@ describe Mongoid::Interceptable do
|
|
|
635
654
|
context "when the parent is persisted" do
|
|
636
655
|
|
|
637
656
|
let(:band) do
|
|
638
|
-
Band.create(name: "Moderat")
|
|
657
|
+
Band.create!(name: "Moderat")
|
|
639
658
|
end
|
|
640
659
|
|
|
641
660
|
let!(:label) do
|
|
@@ -643,7 +662,7 @@ describe Mongoid::Interceptable do
|
|
|
643
662
|
end
|
|
644
663
|
|
|
645
664
|
before do
|
|
646
|
-
band.save
|
|
665
|
+
band.save!
|
|
647
666
|
end
|
|
648
667
|
|
|
649
668
|
it "executes the callback" do
|
|
@@ -655,7 +674,7 @@ describe Mongoid::Interceptable do
|
|
|
655
674
|
context "when the child is persisted" do
|
|
656
675
|
|
|
657
676
|
let(:band) do
|
|
658
|
-
Band.create(name: "Moderat")
|
|
677
|
+
Band.create!(name: "Moderat")
|
|
659
678
|
end
|
|
660
679
|
|
|
661
680
|
let!(:label) do
|
|
@@ -664,7 +683,7 @@ describe Mongoid::Interceptable do
|
|
|
664
683
|
|
|
665
684
|
before do
|
|
666
685
|
label.after_create_called = false
|
|
667
|
-
band.save
|
|
686
|
+
band.save!
|
|
668
687
|
end
|
|
669
688
|
|
|
670
689
|
it "does not execute the callback" do
|
|
@@ -688,7 +707,7 @@ describe Mongoid::Interceptable do
|
|
|
688
707
|
end
|
|
689
708
|
|
|
690
709
|
before do
|
|
691
|
-
band.save
|
|
710
|
+
band.save!
|
|
692
711
|
end
|
|
693
712
|
|
|
694
713
|
it "executes the callback" do
|
|
@@ -699,7 +718,7 @@ describe Mongoid::Interceptable do
|
|
|
699
718
|
context "when the parent is persisted" do
|
|
700
719
|
|
|
701
720
|
let(:band) do
|
|
702
|
-
Band.create(name: "Moderat")
|
|
721
|
+
Band.create!(name: "Moderat")
|
|
703
722
|
end
|
|
704
723
|
|
|
705
724
|
let!(:label) do
|
|
@@ -707,7 +726,7 @@ describe Mongoid::Interceptable do
|
|
|
707
726
|
end
|
|
708
727
|
|
|
709
728
|
before do
|
|
710
|
-
band.save
|
|
729
|
+
band.save!
|
|
711
730
|
end
|
|
712
731
|
|
|
713
732
|
it "executes the callback" do
|
|
@@ -719,7 +738,7 @@ describe Mongoid::Interceptable do
|
|
|
719
738
|
context "when the child is persisted" do
|
|
720
739
|
|
|
721
740
|
let(:band) do
|
|
722
|
-
Band.create(name: "Moderat")
|
|
741
|
+
Band.create!(name: "Moderat")
|
|
723
742
|
end
|
|
724
743
|
|
|
725
744
|
let!(:label) do
|
|
@@ -727,7 +746,7 @@ describe Mongoid::Interceptable do
|
|
|
727
746
|
end
|
|
728
747
|
|
|
729
748
|
before do
|
|
730
|
-
band.save
|
|
749
|
+
band.save!
|
|
731
750
|
end
|
|
732
751
|
|
|
733
752
|
it "executes the callback" do
|
|
@@ -751,7 +770,7 @@ describe Mongoid::Interceptable do
|
|
|
751
770
|
end
|
|
752
771
|
|
|
753
772
|
before do
|
|
754
|
-
band.save
|
|
773
|
+
band.save!
|
|
755
774
|
end
|
|
756
775
|
|
|
757
776
|
it "does not execute the callback" do
|
|
@@ -762,7 +781,7 @@ describe Mongoid::Interceptable do
|
|
|
762
781
|
context "when the parent is persisted" do
|
|
763
782
|
|
|
764
783
|
let(:band) do
|
|
765
|
-
Band.create(name: "Moderat")
|
|
784
|
+
Band.create!(name: "Moderat")
|
|
766
785
|
end
|
|
767
786
|
|
|
768
787
|
let!(:label) do
|
|
@@ -770,7 +789,7 @@ describe Mongoid::Interceptable do
|
|
|
770
789
|
end
|
|
771
790
|
|
|
772
791
|
before do
|
|
773
|
-
band.save
|
|
792
|
+
band.save!
|
|
774
793
|
end
|
|
775
794
|
|
|
776
795
|
it "does not execute the callback" do
|
|
@@ -782,7 +801,7 @@ describe Mongoid::Interceptable do
|
|
|
782
801
|
context "when the child is persisted" do
|
|
783
802
|
|
|
784
803
|
let(:band) do
|
|
785
|
-
Band.create(name: "Moderat")
|
|
804
|
+
Band.create!(name: "Moderat")
|
|
786
805
|
end
|
|
787
806
|
|
|
788
807
|
context "when the child is dirty" do
|
|
@@ -793,7 +812,7 @@ describe Mongoid::Interceptable do
|
|
|
793
812
|
|
|
794
813
|
before do
|
|
795
814
|
label.name = "Nothing"
|
|
796
|
-
band.save
|
|
815
|
+
band.save!
|
|
797
816
|
end
|
|
798
817
|
|
|
799
818
|
it "executes the callback" do
|
|
@@ -808,7 +827,7 @@ describe Mongoid::Interceptable do
|
|
|
808
827
|
end
|
|
809
828
|
|
|
810
829
|
before do
|
|
811
|
-
band.save
|
|
830
|
+
band.save!
|
|
812
831
|
end
|
|
813
832
|
|
|
814
833
|
it "does not execute the callback" do
|
|
@@ -833,7 +852,7 @@ describe Mongoid::Interceptable do
|
|
|
833
852
|
end
|
|
834
853
|
|
|
835
854
|
before do
|
|
836
|
-
band.save
|
|
855
|
+
band.save!
|
|
837
856
|
end
|
|
838
857
|
|
|
839
858
|
it "executes the callback" do
|
|
@@ -844,7 +863,7 @@ describe Mongoid::Interceptable do
|
|
|
844
863
|
context "when the parent is persisted" do
|
|
845
864
|
|
|
846
865
|
let(:band) do
|
|
847
|
-
Band.create(name: "Moderat")
|
|
866
|
+
Band.create!(name: "Moderat")
|
|
848
867
|
end
|
|
849
868
|
|
|
850
869
|
let!(:label) do
|
|
@@ -852,7 +871,7 @@ describe Mongoid::Interceptable do
|
|
|
852
871
|
end
|
|
853
872
|
|
|
854
873
|
before do
|
|
855
|
-
band.save
|
|
874
|
+
band.save!
|
|
856
875
|
end
|
|
857
876
|
|
|
858
877
|
it "executes the callback" do
|
|
@@ -864,7 +883,7 @@ describe Mongoid::Interceptable do
|
|
|
864
883
|
context "when the child is persisted" do
|
|
865
884
|
|
|
866
885
|
let(:band) do
|
|
867
|
-
Band.create(name: "Moderat")
|
|
886
|
+
Band.create!(name: "Moderat")
|
|
868
887
|
end
|
|
869
888
|
|
|
870
889
|
let!(:label) do
|
|
@@ -872,7 +891,7 @@ describe Mongoid::Interceptable do
|
|
|
872
891
|
end
|
|
873
892
|
|
|
874
893
|
before do
|
|
875
|
-
band.save
|
|
894
|
+
band.save!
|
|
876
895
|
end
|
|
877
896
|
|
|
878
897
|
it "executes the callback" do
|
|
@@ -896,7 +915,7 @@ describe Mongoid::Interceptable do
|
|
|
896
915
|
end
|
|
897
916
|
|
|
898
917
|
before do
|
|
899
|
-
band.save
|
|
918
|
+
band.save!
|
|
900
919
|
end
|
|
901
920
|
|
|
902
921
|
it "executes the callback" do
|
|
@@ -907,7 +926,7 @@ describe Mongoid::Interceptable do
|
|
|
907
926
|
context "when the parent is persisted" do
|
|
908
927
|
|
|
909
928
|
let(:band) do
|
|
910
|
-
Band.create(name: "Moderat")
|
|
929
|
+
Band.create!(name: "Moderat")
|
|
911
930
|
end
|
|
912
931
|
|
|
913
932
|
let!(:record) do
|
|
@@ -915,7 +934,7 @@ describe Mongoid::Interceptable do
|
|
|
915
934
|
end
|
|
916
935
|
|
|
917
936
|
before do
|
|
918
|
-
band.save
|
|
937
|
+
band.save!
|
|
919
938
|
end
|
|
920
939
|
|
|
921
940
|
it "executes the callback" do
|
|
@@ -927,16 +946,16 @@ describe Mongoid::Interceptable do
|
|
|
927
946
|
context "when the child is persisted" do
|
|
928
947
|
|
|
929
948
|
let(:band) do
|
|
930
|
-
Band.create(name: "Moderat")
|
|
949
|
+
Band.create!(name: "Moderat")
|
|
931
950
|
end
|
|
932
951
|
|
|
933
952
|
let!(:record) do
|
|
934
|
-
band.records.create(name: "Moderat")
|
|
953
|
+
band.records.create!(name: "Moderat")
|
|
935
954
|
end
|
|
936
955
|
|
|
937
956
|
before do
|
|
938
957
|
record.before_create_called = false
|
|
939
|
-
band.save
|
|
958
|
+
band.save!
|
|
940
959
|
end
|
|
941
960
|
|
|
942
961
|
it "does not execute the callback" do
|
|
@@ -960,7 +979,7 @@ describe Mongoid::Interceptable do
|
|
|
960
979
|
end
|
|
961
980
|
|
|
962
981
|
before do
|
|
963
|
-
band.save
|
|
982
|
+
band.save!
|
|
964
983
|
end
|
|
965
984
|
|
|
966
985
|
it "executes the callback" do
|
|
@@ -975,7 +994,7 @@ describe Mongoid::Interceptable do
|
|
|
975
994
|
context "when the parent is persisted" do
|
|
976
995
|
|
|
977
996
|
let(:band) do
|
|
978
|
-
Band.create(name: "Moderat")
|
|
997
|
+
Band.create!(name: "Moderat")
|
|
979
998
|
end
|
|
980
999
|
|
|
981
1000
|
let!(:record) do
|
|
@@ -983,7 +1002,7 @@ describe Mongoid::Interceptable do
|
|
|
983
1002
|
end
|
|
984
1003
|
|
|
985
1004
|
before do
|
|
986
|
-
band.save
|
|
1005
|
+
band.save!
|
|
987
1006
|
end
|
|
988
1007
|
|
|
989
1008
|
it "executes the callback" do
|
|
@@ -999,15 +1018,15 @@ describe Mongoid::Interceptable do
|
|
|
999
1018
|
context "when the child is persisted" do
|
|
1000
1019
|
|
|
1001
1020
|
let(:band) do
|
|
1002
|
-
Band.create(name: "Moderat")
|
|
1021
|
+
Band.create!(name: "Moderat")
|
|
1003
1022
|
end
|
|
1004
1023
|
|
|
1005
1024
|
let!(:record) do
|
|
1006
|
-
band.records.create(name: "Moderat")
|
|
1025
|
+
band.records.create!(name: "Moderat")
|
|
1007
1026
|
end
|
|
1008
1027
|
|
|
1009
1028
|
before do
|
|
1010
|
-
band.save
|
|
1029
|
+
band.save!
|
|
1011
1030
|
end
|
|
1012
1031
|
|
|
1013
1032
|
it "executes the callback" do
|
|
@@ -1022,7 +1041,7 @@ describe Mongoid::Interceptable do
|
|
|
1022
1041
|
context "when the child is created" do
|
|
1023
1042
|
|
|
1024
1043
|
let!(:band) do
|
|
1025
|
-
Band.create
|
|
1044
|
+
Band.create!
|
|
1026
1045
|
end
|
|
1027
1046
|
|
|
1028
1047
|
let!(:label) do
|
|
@@ -1050,7 +1069,7 @@ describe Mongoid::Interceptable do
|
|
|
1050
1069
|
end
|
|
1051
1070
|
|
|
1052
1071
|
before do
|
|
1053
|
-
band.save
|
|
1072
|
+
band.save!
|
|
1054
1073
|
end
|
|
1055
1074
|
|
|
1056
1075
|
it "does not execute the callback" do
|
|
@@ -1061,7 +1080,7 @@ describe Mongoid::Interceptable do
|
|
|
1061
1080
|
context "when the parent is persisted" do
|
|
1062
1081
|
|
|
1063
1082
|
let(:band) do
|
|
1064
|
-
Band.create(name: "Moderat")
|
|
1083
|
+
Band.create!(name: "Moderat")
|
|
1065
1084
|
end
|
|
1066
1085
|
|
|
1067
1086
|
let!(:record) do
|
|
@@ -1069,7 +1088,7 @@ describe Mongoid::Interceptable do
|
|
|
1069
1088
|
end
|
|
1070
1089
|
|
|
1071
1090
|
before do
|
|
1072
|
-
band.save
|
|
1091
|
+
band.save!
|
|
1073
1092
|
end
|
|
1074
1093
|
|
|
1075
1094
|
it "does not execute the callback" do
|
|
@@ -1081,18 +1100,18 @@ describe Mongoid::Interceptable do
|
|
|
1081
1100
|
context "when the child is persisted" do
|
|
1082
1101
|
|
|
1083
1102
|
let(:band) do
|
|
1084
|
-
Band.create(name: "Moderat")
|
|
1103
|
+
Band.create!(name: "Moderat")
|
|
1085
1104
|
end
|
|
1086
1105
|
|
|
1087
1106
|
let!(:record) do
|
|
1088
|
-
band.records.create(name: "Moderat")
|
|
1107
|
+
band.records.create!(name: "Moderat")
|
|
1089
1108
|
end
|
|
1090
1109
|
|
|
1091
1110
|
context "when the child is dirty" do
|
|
1092
1111
|
|
|
1093
1112
|
before do
|
|
1094
1113
|
record.name = "Nothing"
|
|
1095
|
-
band.save
|
|
1114
|
+
band.save!
|
|
1096
1115
|
end
|
|
1097
1116
|
|
|
1098
1117
|
it "executes the callback" do
|
|
@@ -1107,7 +1126,7 @@ describe Mongoid::Interceptable do
|
|
|
1107
1126
|
context "when the child is not dirty" do
|
|
1108
1127
|
|
|
1109
1128
|
before do
|
|
1110
|
-
band.save
|
|
1129
|
+
band.save!
|
|
1111
1130
|
end
|
|
1112
1131
|
|
|
1113
1132
|
it "does not execute the callback" do
|
|
@@ -1132,7 +1151,7 @@ describe Mongoid::Interceptable do
|
|
|
1132
1151
|
end
|
|
1133
1152
|
|
|
1134
1153
|
before do
|
|
1135
|
-
band.save
|
|
1154
|
+
band.save!
|
|
1136
1155
|
end
|
|
1137
1156
|
|
|
1138
1157
|
it "executes the callback" do
|
|
@@ -1147,7 +1166,7 @@ describe Mongoid::Interceptable do
|
|
|
1147
1166
|
context "when the parent is persisted" do
|
|
1148
1167
|
|
|
1149
1168
|
let(:band) do
|
|
1150
|
-
Band.create(name: "Moderat")
|
|
1169
|
+
Band.create!(name: "Moderat")
|
|
1151
1170
|
end
|
|
1152
1171
|
|
|
1153
1172
|
let!(:record) do
|
|
@@ -1155,7 +1174,7 @@ describe Mongoid::Interceptable do
|
|
|
1155
1174
|
end
|
|
1156
1175
|
|
|
1157
1176
|
before do
|
|
1158
|
-
band.save
|
|
1177
|
+
band.save!
|
|
1159
1178
|
end
|
|
1160
1179
|
|
|
1161
1180
|
it "executes the callback" do
|
|
@@ -1170,7 +1189,7 @@ describe Mongoid::Interceptable do
|
|
|
1170
1189
|
context 'when the parent is updated' do
|
|
1171
1190
|
|
|
1172
1191
|
let(:band) do
|
|
1173
|
-
Band.create(name: "Moderat")
|
|
1192
|
+
Band.create!(name: "Moderat")
|
|
1174
1193
|
end
|
|
1175
1194
|
|
|
1176
1195
|
before do
|
|
@@ -1190,7 +1209,7 @@ describe Mongoid::Interceptable do
|
|
|
1190
1209
|
context 'when the parent is updated' do
|
|
1191
1210
|
|
|
1192
1211
|
let(:band) do
|
|
1193
|
-
Band.create(name: "Moderat")
|
|
1212
|
+
Band.create!(name: "Moderat")
|
|
1194
1213
|
end
|
|
1195
1214
|
|
|
1196
1215
|
before do
|
|
@@ -1209,15 +1228,15 @@ describe Mongoid::Interceptable do
|
|
|
1209
1228
|
context "when the child is persisted" do
|
|
1210
1229
|
|
|
1211
1230
|
let(:band) do
|
|
1212
|
-
Band.create(name: "Moderat")
|
|
1231
|
+
Band.create!(name: "Moderat")
|
|
1213
1232
|
end
|
|
1214
1233
|
|
|
1215
1234
|
let!(:record) do
|
|
1216
|
-
band.records.create(name: "Moderat")
|
|
1235
|
+
band.records.create!(name: "Moderat")
|
|
1217
1236
|
end
|
|
1218
1237
|
|
|
1219
1238
|
before do
|
|
1220
|
-
band.save
|
|
1239
|
+
band.save!
|
|
1221
1240
|
end
|
|
1222
1241
|
|
|
1223
1242
|
it "executes the callback" do
|
|
@@ -1252,7 +1271,7 @@ describe Mongoid::Interceptable do
|
|
|
1252
1271
|
end
|
|
1253
1272
|
|
|
1254
1273
|
before do
|
|
1255
|
-
band.save
|
|
1274
|
+
band.save!
|
|
1256
1275
|
end
|
|
1257
1276
|
|
|
1258
1277
|
it "executes the callback" do
|
|
@@ -1263,7 +1282,7 @@ describe Mongoid::Interceptable do
|
|
|
1263
1282
|
context "when the root is persisted" do
|
|
1264
1283
|
|
|
1265
1284
|
let(:band) do
|
|
1266
|
-
Band.create(name: "Moderat")
|
|
1285
|
+
Band.create!(name: "Moderat")
|
|
1267
1286
|
end
|
|
1268
1287
|
|
|
1269
1288
|
let!(:record) do
|
|
@@ -1275,7 +1294,7 @@ describe Mongoid::Interceptable do
|
|
|
1275
1294
|
end
|
|
1276
1295
|
|
|
1277
1296
|
before do
|
|
1278
|
-
band.save
|
|
1297
|
+
band.save!
|
|
1279
1298
|
end
|
|
1280
1299
|
|
|
1281
1300
|
it "executes the callback" do
|
|
@@ -1287,20 +1306,20 @@ describe Mongoid::Interceptable do
|
|
|
1287
1306
|
context "when the child is persisted" do
|
|
1288
1307
|
|
|
1289
1308
|
let(:band) do
|
|
1290
|
-
Band.create(name: "Moderat")
|
|
1309
|
+
Band.create!(name: "Moderat")
|
|
1291
1310
|
end
|
|
1292
1311
|
|
|
1293
1312
|
let!(:record) do
|
|
1294
|
-
band.records.create(name: "Moderat")
|
|
1313
|
+
band.records.create!(name: "Moderat")
|
|
1295
1314
|
end
|
|
1296
1315
|
|
|
1297
1316
|
let!(:track) do
|
|
1298
|
-
record.tracks.create(name: "Berlin")
|
|
1317
|
+
record.tracks.create!(name: "Berlin")
|
|
1299
1318
|
end
|
|
1300
1319
|
|
|
1301
1320
|
before do
|
|
1302
1321
|
track.before_create_called = false
|
|
1303
|
-
band.save
|
|
1322
|
+
band.save!
|
|
1304
1323
|
end
|
|
1305
1324
|
|
|
1306
1325
|
it "does not execute the callback" do
|
|
@@ -1328,7 +1347,7 @@ describe Mongoid::Interceptable do
|
|
|
1328
1347
|
end
|
|
1329
1348
|
|
|
1330
1349
|
before do
|
|
1331
|
-
band.save
|
|
1350
|
+
band.save!
|
|
1332
1351
|
end
|
|
1333
1352
|
|
|
1334
1353
|
let(:reloaded) do
|
|
@@ -1347,7 +1366,7 @@ describe Mongoid::Interceptable do
|
|
|
1347
1366
|
context "when the parent is persisted" do
|
|
1348
1367
|
|
|
1349
1368
|
let(:band) do
|
|
1350
|
-
Band.create(name: "Moderat")
|
|
1369
|
+
Band.create!(name: "Moderat")
|
|
1351
1370
|
end
|
|
1352
1371
|
|
|
1353
1372
|
let!(:record) do
|
|
@@ -1359,7 +1378,7 @@ describe Mongoid::Interceptable do
|
|
|
1359
1378
|
end
|
|
1360
1379
|
|
|
1361
1380
|
before do
|
|
1362
|
-
band.save
|
|
1381
|
+
band.save!
|
|
1363
1382
|
end
|
|
1364
1383
|
|
|
1365
1384
|
let(:reloaded) do
|
|
@@ -1379,19 +1398,19 @@ describe Mongoid::Interceptable do
|
|
|
1379
1398
|
context "when the child is persisted" do
|
|
1380
1399
|
|
|
1381
1400
|
let(:band) do
|
|
1382
|
-
Band.create(name: "Moderat")
|
|
1401
|
+
Band.create!(name: "Moderat")
|
|
1383
1402
|
end
|
|
1384
1403
|
|
|
1385
1404
|
let!(:record) do
|
|
1386
|
-
band.records.create(name: "Moderat")
|
|
1405
|
+
band.records.create!(name: "Moderat")
|
|
1387
1406
|
end
|
|
1388
1407
|
|
|
1389
1408
|
let!(:track) do
|
|
1390
|
-
record.tracks.create(name: "Berlin")
|
|
1409
|
+
record.tracks.create!(name: "Berlin")
|
|
1391
1410
|
end
|
|
1392
1411
|
|
|
1393
1412
|
before do
|
|
1394
|
-
band.save
|
|
1413
|
+
band.save!
|
|
1395
1414
|
end
|
|
1396
1415
|
|
|
1397
1416
|
let(:reloaded) do
|
|
@@ -1427,7 +1446,7 @@ describe Mongoid::Interceptable do
|
|
|
1427
1446
|
end
|
|
1428
1447
|
|
|
1429
1448
|
before do
|
|
1430
|
-
band.save
|
|
1449
|
+
band.save!
|
|
1431
1450
|
end
|
|
1432
1451
|
|
|
1433
1452
|
it "does not execute the callback" do
|
|
@@ -1438,7 +1457,7 @@ describe Mongoid::Interceptable do
|
|
|
1438
1457
|
context "when the parent is persisted" do
|
|
1439
1458
|
|
|
1440
1459
|
let(:band) do
|
|
1441
|
-
Band.create(name: "Moderat")
|
|
1460
|
+
Band.create!(name: "Moderat")
|
|
1442
1461
|
end
|
|
1443
1462
|
|
|
1444
1463
|
let!(:record) do
|
|
@@ -1450,7 +1469,7 @@ describe Mongoid::Interceptable do
|
|
|
1450
1469
|
end
|
|
1451
1470
|
|
|
1452
1471
|
before do
|
|
1453
|
-
band.save
|
|
1472
|
+
band.save!
|
|
1454
1473
|
end
|
|
1455
1474
|
|
|
1456
1475
|
it "does not execute the callback" do
|
|
@@ -1462,22 +1481,22 @@ describe Mongoid::Interceptable do
|
|
|
1462
1481
|
context "when the child is persisted" do
|
|
1463
1482
|
|
|
1464
1483
|
let(:band) do
|
|
1465
|
-
Band.create(name: "Moderat")
|
|
1484
|
+
Band.create!(name: "Moderat")
|
|
1466
1485
|
end
|
|
1467
1486
|
|
|
1468
1487
|
let!(:record) do
|
|
1469
|
-
band.records.create(name: "Moderat")
|
|
1488
|
+
band.records.create!(name: "Moderat")
|
|
1470
1489
|
end
|
|
1471
1490
|
|
|
1472
1491
|
let!(:track) do
|
|
1473
|
-
record.tracks.create(name: "Berlin")
|
|
1492
|
+
record.tracks.create!(name: "Berlin")
|
|
1474
1493
|
end
|
|
1475
1494
|
|
|
1476
1495
|
context "when the child is dirty" do
|
|
1477
1496
|
|
|
1478
1497
|
before do
|
|
1479
1498
|
track.name = "Rusty Nails"
|
|
1480
|
-
band.save
|
|
1499
|
+
band.save!
|
|
1481
1500
|
end
|
|
1482
1501
|
|
|
1483
1502
|
let(:reloaded) do
|
|
@@ -1496,7 +1515,7 @@ describe Mongoid::Interceptable do
|
|
|
1496
1515
|
context "when the child is not dirty" do
|
|
1497
1516
|
|
|
1498
1517
|
before do
|
|
1499
|
-
band.save
|
|
1518
|
+
band.save!
|
|
1500
1519
|
end
|
|
1501
1520
|
|
|
1502
1521
|
it "does not execute the callback" do
|
|
@@ -1544,7 +1563,7 @@ describe Mongoid::Interceptable do
|
|
|
1544
1563
|
end
|
|
1545
1564
|
|
|
1546
1565
|
before do
|
|
1547
|
-
band.save
|
|
1566
|
+
band.save!
|
|
1548
1567
|
end
|
|
1549
1568
|
|
|
1550
1569
|
it "executes the callback" do
|
|
@@ -1555,7 +1574,7 @@ describe Mongoid::Interceptable do
|
|
|
1555
1574
|
context "when the parent is persisted" do
|
|
1556
1575
|
|
|
1557
1576
|
let(:band) do
|
|
1558
|
-
Band.create(name: "Moderat")
|
|
1577
|
+
Band.create!(name: "Moderat")
|
|
1559
1578
|
end
|
|
1560
1579
|
|
|
1561
1580
|
let!(:record) do
|
|
@@ -1567,7 +1586,7 @@ describe Mongoid::Interceptable do
|
|
|
1567
1586
|
end
|
|
1568
1587
|
|
|
1569
1588
|
before do
|
|
1570
|
-
band.save
|
|
1589
|
+
band.save!
|
|
1571
1590
|
end
|
|
1572
1591
|
|
|
1573
1592
|
it "executes the callback" do
|
|
@@ -1579,19 +1598,19 @@ describe Mongoid::Interceptable do
|
|
|
1579
1598
|
context "when the child is persisted" do
|
|
1580
1599
|
|
|
1581
1600
|
let(:band) do
|
|
1582
|
-
Band.create(name: "Moderat")
|
|
1601
|
+
Band.create!(name: "Moderat")
|
|
1583
1602
|
end
|
|
1584
1603
|
|
|
1585
1604
|
let!(:record) do
|
|
1586
|
-
band.records.create(name: "Moderat")
|
|
1605
|
+
band.records.create!(name: "Moderat")
|
|
1587
1606
|
end
|
|
1588
1607
|
|
|
1589
1608
|
let!(:track) do
|
|
1590
|
-
record.tracks.create(name: "Berlin")
|
|
1609
|
+
record.tracks.create!(name: "Berlin")
|
|
1591
1610
|
end
|
|
1592
1611
|
|
|
1593
1612
|
before do
|
|
1594
|
-
band.save
|
|
1613
|
+
band.save!
|
|
1595
1614
|
end
|
|
1596
1615
|
|
|
1597
1616
|
it "executes the callback" do
|
|
@@ -1618,11 +1637,11 @@ describe Mongoid::Interceptable do
|
|
|
1618
1637
|
end
|
|
1619
1638
|
|
|
1620
1639
|
before do
|
|
1621
|
-
parent.save
|
|
1640
|
+
parent.save!
|
|
1622
1641
|
end
|
|
1623
1642
|
|
|
1624
1643
|
it "does not duplicate the child documents" do
|
|
1625
|
-
parent.children.create(position: 1)
|
|
1644
|
+
parent.children.create!(position: 1)
|
|
1626
1645
|
expect(ParentDoc.find(parent.id).children.size).to eq(1)
|
|
1627
1646
|
end
|
|
1628
1647
|
end
|
|
@@ -1673,7 +1692,7 @@ describe Mongoid::Interceptable do
|
|
|
1673
1692
|
context "when updating a document" do
|
|
1674
1693
|
|
|
1675
1694
|
let(:person) do
|
|
1676
|
-
Person.create
|
|
1695
|
+
Person.create!.tap do |person|
|
|
1677
1696
|
person.attributes = {
|
|
1678
1697
|
mode: :prevent_save,
|
|
1679
1698
|
title: "Associate",
|
|
@@ -1707,8 +1726,8 @@ describe Mongoid::Interceptable do
|
|
|
1707
1726
|
context "when loading a model multiple times" do
|
|
1708
1727
|
|
|
1709
1728
|
before do
|
|
1710
|
-
load "
|
|
1711
|
-
load "
|
|
1729
|
+
load File.join(MODELS, "callback_test.rb")
|
|
1730
|
+
load File.join(MODELS, "callback_test.rb")
|
|
1712
1731
|
end
|
|
1713
1732
|
|
|
1714
1733
|
let(:callback) do
|
|
@@ -1739,8 +1758,12 @@ describe Mongoid::Interceptable do
|
|
|
1739
1758
|
[InterceptableSpec::CbChild, :after_validation],
|
|
1740
1759
|
[InterceptableSpec::CbParent, :after_validation],
|
|
1741
1760
|
[InterceptableSpec::CbParent, :before_save],
|
|
1761
|
+
[InterceptableSpec::CbParent, :around_save_open],
|
|
1742
1762
|
[InterceptableSpec::CbParent, :before_create],
|
|
1763
|
+
[InterceptableSpec::CbParent, :around_create_open],
|
|
1764
|
+
[InterceptableSpec::CbParent, :around_create_close],
|
|
1743
1765
|
[InterceptableSpec::CbParent, :after_create],
|
|
1766
|
+
[InterceptableSpec::CbParent, :around_save_close],
|
|
1744
1767
|
[InterceptableSpec::CbParent, :after_save],
|
|
1745
1768
|
]
|
|
1746
1769
|
end
|
|
@@ -1762,26 +1785,601 @@ describe Mongoid::Interceptable do
|
|
|
1762
1785
|
|
|
1763
1786
|
let(:expected) do
|
|
1764
1787
|
[
|
|
1788
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1789
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1765
1790
|
[InterceptableSpec::CbParent, :before_validation],
|
|
1766
1791
|
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1767
1792
|
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1793
|
+
|
|
1768
1794
|
[InterceptableSpec::CbParent, :after_validation],
|
|
1769
1795
|
[InterceptableSpec::CbParent, :before_save],
|
|
1770
|
-
[InterceptableSpec::
|
|
1796
|
+
[InterceptableSpec::CbParent, :around_save_open],
|
|
1771
1797
|
[InterceptableSpec::CbParent, :before_create],
|
|
1798
|
+
[InterceptableSpec::CbParent, :around_create_open],
|
|
1799
|
+
|
|
1800
|
+
[InterceptableSpec::CbCascadedChild, :before_save],
|
|
1801
|
+
[InterceptableSpec::CbCascadedChild, :around_save_open],
|
|
1772
1802
|
[InterceptableSpec::CbCascadedChild, :before_create],
|
|
1773
|
-
[InterceptableSpec::
|
|
1803
|
+
[InterceptableSpec::CbCascadedChild, :around_create_open],
|
|
1804
|
+
|
|
1805
|
+
[InterceptableSpec::CbCascadedChild, :around_create_close],
|
|
1774
1806
|
[InterceptableSpec::CbCascadedChild, :after_create],
|
|
1775
|
-
[InterceptableSpec::
|
|
1807
|
+
[InterceptableSpec::CbCascadedChild, :around_save_close],
|
|
1776
1808
|
[InterceptableSpec::CbCascadedChild, :after_save],
|
|
1809
|
+
|
|
1810
|
+
[InterceptableSpec::CbParent, :around_create_close],
|
|
1811
|
+
[InterceptableSpec::CbParent, :after_create],
|
|
1812
|
+
[InterceptableSpec::CbParent, :around_save_close],
|
|
1813
|
+
[InterceptableSpec::CbParent, :after_save]
|
|
1777
1814
|
]
|
|
1778
1815
|
end
|
|
1779
1816
|
|
|
1780
1817
|
it 'calls callbacks in the right order' do
|
|
1781
|
-
pending 'MONGOID-3795'
|
|
1782
|
-
|
|
1783
1818
|
parent.save!
|
|
1784
1819
|
expect(registry.calls).to eq expected
|
|
1785
1820
|
end
|
|
1786
1821
|
end
|
|
1822
|
+
|
|
1823
|
+
context "with associations" do
|
|
1824
|
+
context "has_one" do
|
|
1825
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1826
|
+
|
|
1827
|
+
let(:parent) do
|
|
1828
|
+
InterceptableSpec::CbHasOneParent.new(registry).tap do |parent|
|
|
1829
|
+
parent.child = InterceptableSpec::CbHasOneChild.new(registry)
|
|
1830
|
+
end
|
|
1831
|
+
end
|
|
1832
|
+
|
|
1833
|
+
let(:expected) do
|
|
1834
|
+
[
|
|
1835
|
+
[InterceptableSpec::CbHasOneParent, :before_validation],
|
|
1836
|
+
[InterceptableSpec::CbHasOneChild, :before_validation],
|
|
1837
|
+
[InterceptableSpec::CbHasOneChild, :after_validation],
|
|
1838
|
+
[InterceptableSpec::CbHasOneParent, :after_validation],
|
|
1839
|
+
[InterceptableSpec::CbHasOneParent, :before_save],
|
|
1840
|
+
|
|
1841
|
+
[InterceptableSpec::CbHasOneParent, :around_save_open],
|
|
1842
|
+
[InterceptableSpec::CbHasOneParent, :before_create],
|
|
1843
|
+
[InterceptableSpec::CbHasOneParent, :around_create_open],
|
|
1844
|
+
|
|
1845
|
+
[InterceptableSpec::CbHasOneParent, :insert_into_database],
|
|
1846
|
+
|
|
1847
|
+
[InterceptableSpec::CbHasOneChild, :before_validation],
|
|
1848
|
+
[InterceptableSpec::CbHasOneChild, :after_validation],
|
|
1849
|
+
[InterceptableSpec::CbHasOneChild, :before_save],
|
|
1850
|
+
[InterceptableSpec::CbHasOneChild, :around_save_open],
|
|
1851
|
+
[InterceptableSpec::CbHasOneChild, :before_create],
|
|
1852
|
+
[InterceptableSpec::CbHasOneChild, :around_create_open],
|
|
1853
|
+
|
|
1854
|
+
[InterceptableSpec::CbHasOneChild, :around_create_close],
|
|
1855
|
+
[InterceptableSpec::CbHasOneChild, :after_create],
|
|
1856
|
+
[InterceptableSpec::CbHasOneChild, :around_save_close],
|
|
1857
|
+
[InterceptableSpec::CbHasOneChild, :after_save],
|
|
1858
|
+
|
|
1859
|
+
[InterceptableSpec::CbHasOneParent, :around_create_close],
|
|
1860
|
+
[InterceptableSpec::CbHasOneParent, :after_create],
|
|
1861
|
+
[InterceptableSpec::CbHasOneParent, :around_save_close],
|
|
1862
|
+
[InterceptableSpec::CbHasOneParent, :after_save],
|
|
1863
|
+
]
|
|
1864
|
+
end
|
|
1865
|
+
|
|
1866
|
+
it 'calls callbacks in the right order' do
|
|
1867
|
+
parent.save!
|
|
1868
|
+
expect(registry.calls).to eq expected
|
|
1869
|
+
end
|
|
1870
|
+
end
|
|
1871
|
+
|
|
1872
|
+
context "embeds_one" do
|
|
1873
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1874
|
+
|
|
1875
|
+
let(:parent) do
|
|
1876
|
+
InterceptableSpec::CbEmbedsOneParent.new(registry).tap do |parent|
|
|
1877
|
+
parent.child = InterceptableSpec::CbEmbedsOneChild.new(registry)
|
|
1878
|
+
end
|
|
1879
|
+
end
|
|
1880
|
+
|
|
1881
|
+
context "create" do
|
|
1882
|
+
let(:expected) do
|
|
1883
|
+
[
|
|
1884
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1885
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1886
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_validation],
|
|
1887
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1888
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1889
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_validation],
|
|
1890
|
+
|
|
1891
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_save],
|
|
1892
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_open],
|
|
1893
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_create],
|
|
1894
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_create_open],
|
|
1895
|
+
|
|
1896
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_save],
|
|
1897
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_open],
|
|
1898
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_create],
|
|
1899
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_create_open],
|
|
1900
|
+
|
|
1901
|
+
[InterceptableSpec::CbEmbedsOneParent, :insert_into_database],
|
|
1902
|
+
|
|
1903
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_create_close],
|
|
1904
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_create],
|
|
1905
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_close],
|
|
1906
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_save],
|
|
1907
|
+
|
|
1908
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_create_close],
|
|
1909
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_create],
|
|
1910
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_close],
|
|
1911
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_save]
|
|
1912
|
+
]
|
|
1913
|
+
end
|
|
1914
|
+
|
|
1915
|
+
it 'calls callbacks in the right order' do
|
|
1916
|
+
parent.save!
|
|
1917
|
+
expect(registry.calls).to eq expected
|
|
1918
|
+
end
|
|
1919
|
+
end
|
|
1920
|
+
|
|
1921
|
+
context "update" do
|
|
1922
|
+
let(:expected) do
|
|
1923
|
+
[
|
|
1924
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1925
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1926
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_validation],
|
|
1927
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1928
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1929
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_validation],
|
|
1930
|
+
|
|
1931
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_save],
|
|
1932
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_open],
|
|
1933
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_update],
|
|
1934
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_update_open],
|
|
1935
|
+
|
|
1936
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_save],
|
|
1937
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_open],
|
|
1938
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_update],
|
|
1939
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_update_open],
|
|
1940
|
+
|
|
1941
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_update_close],
|
|
1942
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_update],
|
|
1943
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_close],
|
|
1944
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_save],
|
|
1945
|
+
|
|
1946
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_update_close],
|
|
1947
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_update],
|
|
1948
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_close],
|
|
1949
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_save]
|
|
1950
|
+
]
|
|
1951
|
+
end
|
|
1952
|
+
|
|
1953
|
+
it 'calls callbacks in the right order' do
|
|
1954
|
+
parent.callback_registry = nil
|
|
1955
|
+
parent.child.callback_registry = nil
|
|
1956
|
+
parent.save!
|
|
1957
|
+
|
|
1958
|
+
parent.callback_registry = registry
|
|
1959
|
+
parent.child.callback_registry = registry
|
|
1960
|
+
parent.name = "name"
|
|
1961
|
+
parent.child.age = 10
|
|
1962
|
+
|
|
1963
|
+
parent.save!
|
|
1964
|
+
expect(registry.calls).to eq expected
|
|
1965
|
+
end
|
|
1966
|
+
end
|
|
1967
|
+
end
|
|
1968
|
+
|
|
1969
|
+
context "has_many" do
|
|
1970
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1971
|
+
|
|
1972
|
+
let(:parent) do
|
|
1973
|
+
InterceptableSpec::CbHasManyParent.new(registry).tap do |parent|
|
|
1974
|
+
parent.children = [
|
|
1975
|
+
InterceptableSpec::CbHasManyChild.new(registry),
|
|
1976
|
+
InterceptableSpec::CbHasManyChild.new(registry)
|
|
1977
|
+
]
|
|
1978
|
+
end
|
|
1979
|
+
end
|
|
1980
|
+
|
|
1981
|
+
let(:expected) do
|
|
1982
|
+
[
|
|
1983
|
+
[InterceptableSpec::CbHasManyParent, :before_validation],
|
|
1984
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
1985
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
1986
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
1987
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
1988
|
+
[InterceptableSpec::CbHasManyParent, :after_validation],
|
|
1989
|
+
|
|
1990
|
+
[InterceptableSpec::CbHasManyParent, :before_save],
|
|
1991
|
+
[InterceptableSpec::CbHasManyParent, :around_save_open],
|
|
1992
|
+
[InterceptableSpec::CbHasManyParent, :before_create],
|
|
1993
|
+
[InterceptableSpec::CbHasManyParent, :around_create_open],
|
|
1994
|
+
|
|
1995
|
+
[InterceptableSpec::CbHasManyParent, :insert_into_database],
|
|
1996
|
+
|
|
1997
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
1998
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
1999
|
+
[InterceptableSpec::CbHasManyChild, :before_save],
|
|
2000
|
+
[InterceptableSpec::CbHasManyChild, :around_save_open],
|
|
2001
|
+
[InterceptableSpec::CbHasManyChild, :before_create],
|
|
2002
|
+
[InterceptableSpec::CbHasManyChild, :around_create_open],
|
|
2003
|
+
[InterceptableSpec::CbHasManyChild, :around_create_close],
|
|
2004
|
+
[InterceptableSpec::CbHasManyChild, :after_create],
|
|
2005
|
+
[InterceptableSpec::CbHasManyChild, :around_save_close],
|
|
2006
|
+
[InterceptableSpec::CbHasManyChild, :after_save],
|
|
2007
|
+
|
|
2008
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
2009
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
2010
|
+
[InterceptableSpec::CbHasManyChild, :before_save],
|
|
2011
|
+
[InterceptableSpec::CbHasManyChild, :around_save_open],
|
|
2012
|
+
[InterceptableSpec::CbHasManyChild, :before_create],
|
|
2013
|
+
[InterceptableSpec::CbHasManyChild, :around_create_open],
|
|
2014
|
+
[InterceptableSpec::CbHasManyChild, :around_create_close],
|
|
2015
|
+
[InterceptableSpec::CbHasManyChild, :after_create],
|
|
2016
|
+
[InterceptableSpec::CbHasManyChild, :around_save_close],
|
|
2017
|
+
[InterceptableSpec::CbHasManyChild, :after_save],
|
|
2018
|
+
|
|
2019
|
+
[InterceptableSpec::CbHasManyParent, :around_create_close],
|
|
2020
|
+
[InterceptableSpec::CbHasManyParent, :after_create],
|
|
2021
|
+
[InterceptableSpec::CbHasManyParent, :around_save_close],
|
|
2022
|
+
[InterceptableSpec::CbHasManyParent, :after_save]
|
|
2023
|
+
]
|
|
2024
|
+
end
|
|
2025
|
+
|
|
2026
|
+
it 'calls callbacks in the right order' do
|
|
2027
|
+
parent.save!
|
|
2028
|
+
expect(registry.calls).to eq expected
|
|
2029
|
+
end
|
|
2030
|
+
end
|
|
2031
|
+
|
|
2032
|
+
context "embeds_many" do
|
|
2033
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
2034
|
+
|
|
2035
|
+
let(:parent) do
|
|
2036
|
+
InterceptableSpec::CbEmbedsManyParent.new(registry).tap do |parent|
|
|
2037
|
+
parent.children = [
|
|
2038
|
+
InterceptableSpec::CbEmbedsManyChild.new(registry),
|
|
2039
|
+
InterceptableSpec::CbEmbedsManyChild.new(registry),
|
|
2040
|
+
]
|
|
2041
|
+
end
|
|
2042
|
+
end
|
|
2043
|
+
|
|
2044
|
+
let(:expected) do
|
|
2045
|
+
[
|
|
2046
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2047
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2048
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2049
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2050
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_validation],
|
|
2051
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2052
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2053
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2054
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2055
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_validation],
|
|
2056
|
+
|
|
2057
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_save],
|
|
2058
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_save_open],
|
|
2059
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_create],
|
|
2060
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_create_open],
|
|
2061
|
+
|
|
2062
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_save],
|
|
2063
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_open],
|
|
2064
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_save],
|
|
2065
|
+
|
|
2066
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_open],
|
|
2067
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_create],
|
|
2068
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_open],
|
|
2069
|
+
|
|
2070
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_create],
|
|
2071
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_open],
|
|
2072
|
+
|
|
2073
|
+
[InterceptableSpec::CbEmbedsManyParent, :insert_into_database],
|
|
2074
|
+
|
|
2075
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_close],
|
|
2076
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_create],
|
|
2077
|
+
|
|
2078
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_close],
|
|
2079
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_create],
|
|
2080
|
+
|
|
2081
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_close],
|
|
2082
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_save],
|
|
2083
|
+
|
|
2084
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_close],
|
|
2085
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_save],
|
|
2086
|
+
|
|
2087
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_create_close],
|
|
2088
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_create],
|
|
2089
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_save_close],
|
|
2090
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_save]
|
|
2091
|
+
]
|
|
2092
|
+
end
|
|
2093
|
+
|
|
2094
|
+
it 'calls callbacks in the right order' do
|
|
2095
|
+
parent.save!
|
|
2096
|
+
expect(registry.calls).to eq expected
|
|
2097
|
+
end
|
|
2098
|
+
end
|
|
2099
|
+
end
|
|
2100
|
+
|
|
2101
|
+
context "when accessing parent document from callbacks" do
|
|
2102
|
+
shared_examples 'accesses the correct parent' do
|
|
2103
|
+
it "accesses the correct parent in after_find" do
|
|
2104
|
+
expect(from_db.after_find_player).to eq(player._id)
|
|
2105
|
+
end
|
|
2106
|
+
|
|
2107
|
+
it "accesses the correct parent in after_initialize" do
|
|
2108
|
+
expect(from_db.after_initialize_player).to eq(player._id)
|
|
2109
|
+
end
|
|
2110
|
+
|
|
2111
|
+
it "accesses the correct parent in default" do
|
|
2112
|
+
expect(from_db.after_default_player).to eq(player._id)
|
|
2113
|
+
end
|
|
2114
|
+
|
|
2115
|
+
it "accesses the correct parent in unpersisted after_initialize" do
|
|
2116
|
+
expect(unpersisted.after_initialize_player).to eq(player._id)
|
|
2117
|
+
end
|
|
2118
|
+
end
|
|
2119
|
+
|
|
2120
|
+
context "when using create methods" do
|
|
2121
|
+
|
|
2122
|
+
context "when the child is an embeds_many association" do
|
|
2123
|
+
let!(:player) do
|
|
2124
|
+
Player.create!.tap do |player|
|
|
2125
|
+
player.implants.create!
|
|
2126
|
+
end
|
|
2127
|
+
end
|
|
2128
|
+
|
|
2129
|
+
let(:unpersisted) { player.implants.first }
|
|
2130
|
+
|
|
2131
|
+
before do
|
|
2132
|
+
# The default is originally set when creating this document, and it is
|
|
2133
|
+
# subsequently persisted to the database. Therefore when we retrieve
|
|
2134
|
+
# this document from the database, this field is already set, and
|
|
2135
|
+
# the default Proc is not called. This unset is needed to allow the
|
|
2136
|
+
# default Proc to be called when the document is retrieved from the
|
|
2137
|
+
# database.
|
|
2138
|
+
Player.find(player.id).implants.first.unset(:after_default_player)
|
|
2139
|
+
end
|
|
2140
|
+
|
|
2141
|
+
let(:from_db) do
|
|
2142
|
+
Player.find(player.id).implants.first
|
|
2143
|
+
end
|
|
2144
|
+
|
|
2145
|
+
include_examples 'accesses the correct parent'
|
|
2146
|
+
end
|
|
2147
|
+
|
|
2148
|
+
context "when the child is an embeds_one association" do
|
|
2149
|
+
let!(:player) do
|
|
2150
|
+
Player.create!.tap do |player|
|
|
2151
|
+
player.create_augmentation
|
|
2152
|
+
end
|
|
2153
|
+
end
|
|
2154
|
+
|
|
2155
|
+
let(:unpersisted) { player.augmentation }
|
|
2156
|
+
|
|
2157
|
+
before do
|
|
2158
|
+
Player.find(player.id).augmentation.unset(:after_default_player)
|
|
2159
|
+
end
|
|
2160
|
+
|
|
2161
|
+
let(:from_db) do
|
|
2162
|
+
Player.find(player.id).augmentation
|
|
2163
|
+
end
|
|
2164
|
+
|
|
2165
|
+
include_examples 'accesses the correct parent'
|
|
2166
|
+
end
|
|
2167
|
+
|
|
2168
|
+
context "when the child is a has_many association" do
|
|
2169
|
+
let!(:player) do
|
|
2170
|
+
Player.create!.tap do |player|
|
|
2171
|
+
player.weapons.create!
|
|
2172
|
+
end
|
|
2173
|
+
end
|
|
2174
|
+
|
|
2175
|
+
let(:unpersisted) { player.weapons.first }
|
|
2176
|
+
|
|
2177
|
+
before do
|
|
2178
|
+
Player.find(player.id).weapons.first.unset(:after_default_player)
|
|
2179
|
+
end
|
|
2180
|
+
|
|
2181
|
+
let(:from_db) do
|
|
2182
|
+
Player.find(player.id).weapons.first
|
|
2183
|
+
end
|
|
2184
|
+
|
|
2185
|
+
include_examples 'accesses the correct parent'
|
|
2186
|
+
end
|
|
2187
|
+
|
|
2188
|
+
context "when the child is a has_one association" do
|
|
2189
|
+
let!(:player) do
|
|
2190
|
+
Player.create!.tap do |player|
|
|
2191
|
+
player.create_powerup
|
|
2192
|
+
player.save!
|
|
2193
|
+
end
|
|
2194
|
+
end
|
|
2195
|
+
|
|
2196
|
+
let(:unpersisted) { player.powerup }
|
|
2197
|
+
|
|
2198
|
+
before do
|
|
2199
|
+
Player.find(player.id).powerup.unset(:after_default_player)
|
|
2200
|
+
end
|
|
2201
|
+
|
|
2202
|
+
let(:from_db) do
|
|
2203
|
+
Player.find(player.id).powerup
|
|
2204
|
+
end
|
|
2205
|
+
|
|
2206
|
+
include_examples 'accesses the correct parent'
|
|
2207
|
+
end
|
|
2208
|
+
|
|
2209
|
+
context "when the child is a has_and_belongs_to_many association" do
|
|
2210
|
+
let!(:player) do
|
|
2211
|
+
Player.create!.tap do |player|
|
|
2212
|
+
player.shields.create!
|
|
2213
|
+
end
|
|
2214
|
+
end
|
|
2215
|
+
|
|
2216
|
+
let(:unpersisted) { player.shields.first }
|
|
2217
|
+
|
|
2218
|
+
before do
|
|
2219
|
+
Player.find(player.id).shields.unset(:after_default_player)
|
|
2220
|
+
end
|
|
2221
|
+
|
|
2222
|
+
let(:from_db) do
|
|
2223
|
+
Player.find(player.id).shields.first
|
|
2224
|
+
end
|
|
2225
|
+
|
|
2226
|
+
include_examples 'accesses the correct parent'
|
|
2227
|
+
end
|
|
2228
|
+
end
|
|
2229
|
+
|
|
2230
|
+
context "when using build methods" do
|
|
2231
|
+
|
|
2232
|
+
context "when the child is an embeds_many association" do
|
|
2233
|
+
let!(:player) do
|
|
2234
|
+
Player.create!.tap do |player|
|
|
2235
|
+
player.implants.build
|
|
2236
|
+
player.implants.first.save!
|
|
2237
|
+
end
|
|
2238
|
+
end
|
|
2239
|
+
|
|
2240
|
+
let(:unpersisted) { player.implants.first }
|
|
2241
|
+
|
|
2242
|
+
before do
|
|
2243
|
+
Player.find(player.id).implants.first.unset(:after_default_player)
|
|
2244
|
+
end
|
|
2245
|
+
|
|
2246
|
+
let(:from_db) do
|
|
2247
|
+
Player.find(player.id).implants.first
|
|
2248
|
+
end
|
|
2249
|
+
|
|
2250
|
+
include_examples 'accesses the correct parent'
|
|
2251
|
+
end
|
|
2252
|
+
|
|
2253
|
+
context "when the child is an embeds_one association" do
|
|
2254
|
+
let!(:player) do
|
|
2255
|
+
Player.create!.tap do |player|
|
|
2256
|
+
player.build_augmentation
|
|
2257
|
+
player.save!
|
|
2258
|
+
end
|
|
2259
|
+
end
|
|
2260
|
+
|
|
2261
|
+
let(:unpersisted) { player.augmentation }
|
|
2262
|
+
|
|
2263
|
+
before do
|
|
2264
|
+
Player.find(player.id).augmentation.unset(:after_default_player)
|
|
2265
|
+
end
|
|
2266
|
+
|
|
2267
|
+
let(:from_db) do
|
|
2268
|
+
Player.find(player.id).augmentation
|
|
2269
|
+
end
|
|
2270
|
+
|
|
2271
|
+
include_examples 'accesses the correct parent'
|
|
2272
|
+
end
|
|
2273
|
+
|
|
2274
|
+
context "when the child is a has_many association" do
|
|
2275
|
+
let!(:player) do
|
|
2276
|
+
Player.create!.tap do |player|
|
|
2277
|
+
player.weapons.build
|
|
2278
|
+
player.weapons.first.save!
|
|
2279
|
+
end
|
|
2280
|
+
end
|
|
2281
|
+
|
|
2282
|
+
let(:unpersisted) { player.weapons.first }
|
|
2283
|
+
|
|
2284
|
+
before do
|
|
2285
|
+
Player.find(player.id).weapons.first.unset(:after_default_player)
|
|
2286
|
+
end
|
|
2287
|
+
|
|
2288
|
+
let(:from_db) do
|
|
2289
|
+
Player.find(player.id).weapons.first
|
|
2290
|
+
end
|
|
2291
|
+
|
|
2292
|
+
include_examples 'accesses the correct parent'
|
|
2293
|
+
end
|
|
2294
|
+
|
|
2295
|
+
context "when the child is a has_one association" do
|
|
2296
|
+
let!(:player) do
|
|
2297
|
+
Player.create!.tap do |player|
|
|
2298
|
+
player.build_powerup
|
|
2299
|
+
player.powerup.save!
|
|
2300
|
+
end
|
|
2301
|
+
end
|
|
2302
|
+
|
|
2303
|
+
let(:unpersisted) { player.powerup }
|
|
2304
|
+
|
|
2305
|
+
before do
|
|
2306
|
+
Player.find(player.id).powerup.unset(:after_default_player)
|
|
2307
|
+
end
|
|
2308
|
+
|
|
2309
|
+
let(:from_db) do
|
|
2310
|
+
Player.find(player.id).powerup
|
|
2311
|
+
end
|
|
2312
|
+
|
|
2313
|
+
include_examples 'accesses the correct parent'
|
|
2314
|
+
end
|
|
2315
|
+
|
|
2316
|
+
context "when the child is a has_and_belongs_to_many association" do
|
|
2317
|
+
let!(:player) do
|
|
2318
|
+
Player.create!.tap do |player|
|
|
2319
|
+
player.shields.build
|
|
2320
|
+
player.shields.first.save!
|
|
2321
|
+
end
|
|
2322
|
+
end
|
|
2323
|
+
|
|
2324
|
+
let(:unpersisted) { player.shields.first }
|
|
2325
|
+
|
|
2326
|
+
before do
|
|
2327
|
+
Player.find(player.id).shields.unset(:after_default_player)
|
|
2328
|
+
end
|
|
2329
|
+
|
|
2330
|
+
let(:from_db) do
|
|
2331
|
+
Player.find(player.id).shields.first
|
|
2332
|
+
end
|
|
2333
|
+
|
|
2334
|
+
include_examples 'accesses the correct parent'
|
|
2335
|
+
end
|
|
2336
|
+
end
|
|
2337
|
+
end
|
|
2338
|
+
|
|
2339
|
+
context "when accessing associations in defaults" do
|
|
2340
|
+
context "when not using autobuilding" do
|
|
2341
|
+
let(:band) { InterceptableBand.create(name: "Molejo") }
|
|
2342
|
+
let(:song) { band.songs.create(name: "Cilada") }
|
|
2343
|
+
|
|
2344
|
+
it "assigns the default correctly" do
|
|
2345
|
+
expect(song.band_name).to eq("Molejo")
|
|
2346
|
+
end
|
|
2347
|
+
end
|
|
2348
|
+
|
|
2349
|
+
context "when using autobuilding" do
|
|
2350
|
+
before do
|
|
2351
|
+
InterceptablePlane.create!.tap do |plane|
|
|
2352
|
+
plane.wings.create!
|
|
2353
|
+
end
|
|
2354
|
+
end
|
|
2355
|
+
|
|
2356
|
+
let(:plane) { InterceptablePlane.first }
|
|
2357
|
+
let(:wing) { InterceptableWing.first }
|
|
2358
|
+
let(:engine) { wing.engine }
|
|
2359
|
+
|
|
2360
|
+
it "sets the defaults correctly" do
|
|
2361
|
+
expect(wing._id).to eq("hello-wing")
|
|
2362
|
+
expect(wing.p_id).to eq(plane._id.to_s)
|
|
2363
|
+
expect(wing.e_id).to eq(engine._id.to_s)
|
|
2364
|
+
expect(engine._id).to eq("hello-engine-#{wing.id}")
|
|
2365
|
+
end
|
|
2366
|
+
end
|
|
2367
|
+
end
|
|
2368
|
+
|
|
2369
|
+
# This case is rather niche. The _ids method used to use the `.only` method
|
|
2370
|
+
# to get only the _ids for an association, which was causing a
|
|
2371
|
+
# MissingAttributeError to be raised when accessing another association. This
|
|
2372
|
+
# was fixed by using `.pluck` over `.only`. Look at MONGOID-5306 for a more
|
|
2373
|
+
# detailed explanation.
|
|
2374
|
+
context "when accessing _ids in validate and access an association in after_initialize" do
|
|
2375
|
+
it "doesn't raise a MissingAttributeError" do
|
|
2376
|
+
company = InterceptableCompany.create!
|
|
2377
|
+
shop = InterceptableShop.create!(company: company)
|
|
2378
|
+
user = InterceptableUser.new
|
|
2379
|
+
user.company = company
|
|
2380
|
+
expect do
|
|
2381
|
+
user.save!
|
|
2382
|
+
end.to_not raise_error(ActiveModel::MissingAttributeError)
|
|
2383
|
+
end
|
|
2384
|
+
end
|
|
1787
2385
|
end
|