mongoid 7.0.2 → 8.1.1
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 +33 -33
- data/LICENSE +1 -0
- data/README.md +34 -20
- data/Rakefile +100 -5
- data/lib/config/locales/en.yml +220 -105
- data/lib/mongoid/association/accessors.rb +176 -84
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +9 -15
- data/lib/mongoid/association/constrainable.rb +5 -7
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +31 -10
- data/lib/mongoid/association/embedded/batchable.rb +68 -54
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +27 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +16 -25
- data/lib/mongoid/association/embedded/embedded_in.rb +9 -28
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +10 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +156 -135
- data/lib/mongoid/association/embedded/embeds_many.rb +10 -37
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +27 -10
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +64 -30
- data/lib/mongoid/association/embedded/embeds_one.rb +11 -34
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +65 -41
- data/lib/mongoid/association/many.rb +25 -35
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +22 -30
- data/lib/mongoid/association/nested/nested_buildable.rb +9 -15
- data/lib/mongoid/association/nested/one.rb +57 -30
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +5 -12
- data/lib/mongoid/association/options.rb +16 -46
- data/lib/mongoid/association/proxy.rb +52 -40
- data/lib/mongoid/association/referenced/auto_save.rb +9 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +5 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -31
- data/lib/mongoid/association/referenced/belongs_to.rb +16 -38
- data/lib/mongoid/association/referenced/counter_cache.rb +14 -25
- data/lib/mongoid/association/referenced/eager.rb +42 -38
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +106 -67
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +29 -46
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +440 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +104 -127
- data/lib/mongoid/association/referenced/has_many.rb +21 -45
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +16 -29
- data/lib/mongoid/association/referenced/has_one/proxy.rb +25 -30
- data/lib/mongoid/association/referenced/has_one.rb +16 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -26
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +149 -89
- data/lib/mongoid/association.rb +13 -27
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +23 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +49 -47
- data/lib/mongoid/attributes/dynamic.rb +22 -36
- data/lib/mongoid/attributes/nested.rb +12 -15
- data/lib/mongoid/attributes/processing.rb +19 -27
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +6 -9
- data/lib/mongoid/attributes.rb +103 -100
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +152 -73
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +21 -18
- data/lib/mongoid/clients/sessions.rb +10 -10
- data/lib/mongoid/clients/storage_options.rb +9 -17
- data/lib/mongoid/clients/validators/storage.rb +5 -24
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +7 -9
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +51 -13
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +3 -1
- data/lib/mongoid/config.rb +235 -48
- data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
- data/lib/mongoid/contextual/aggregable/mongo.rb +32 -33
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +13 -44
- data/lib/mongoid/contextual/map_reduce.rb +7 -35
- data/lib/mongoid/contextual/memory.rb +387 -81
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +641 -283
- data/lib/mongoid/contextual/none.rb +264 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +21 -11
- data/lib/mongoid/copyable.rb +46 -17
- data/lib/mongoid/criteria/findable.rb +20 -20
- data/lib/mongoid/criteria/includable.rb +32 -34
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +15 -21
- data/lib/mongoid/criteria/options.rb +4 -5
- data/lib/mongoid/criteria/permission.rb +3 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +4 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +28 -8
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +11 -12
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +6 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +49 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +12 -19
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +7 -32
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +7 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +10 -10
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +19 -7
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +105 -31
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +205 -44
- data/lib/mongoid/criteria/queryable/optional.rb +16 -65
- data/lib/mongoid/criteria/queryable/options.rb +4 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +471 -168
- data/lib/mongoid/criteria/queryable/selector.rb +133 -58
- data/lib/mongoid/criteria/queryable/smash.rb +42 -18
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +18 -15
- data/lib/mongoid/criteria/scopable.rb +29 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +106 -111
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +162 -103
- data/lib/mongoid/equality.rb +35 -18
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +35 -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 +2 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +3 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +3 -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 +8 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +5 -10
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +3 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +4 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +6 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +3 -4
- data/lib/mongoid/errors/no_client_hosts.rb +3 -4
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +3 -4
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -1
- data/lib/mongoid/errors/unknown_attribute.rb +3 -4
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +18 -4
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +37 -44
- data/lib/mongoid/extensions/big_decimal.rb +35 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +10 -6
- data/lib/mongoid/extensions/date.rb +32 -25
- data/lib/mongoid/extensions/date_time.rb +5 -13
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +5 -8
- data/lib/mongoid/extensions/float.rb +12 -14
- data/lib/mongoid/extensions/hash.rb +64 -42
- data/lib/mongoid/extensions/integer.rb +12 -16
- data/lib/mongoid/extensions/module.rb +3 -4
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +27 -52
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +14 -7
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +35 -64
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +38 -22
- data/lib/mongoid/extensions/time_with_zone.rb +26 -9
- data/lib/mongoid/extensions/true_class.rb +5 -8
- data/lib/mongoid/extensions.rb +19 -3
- data/lib/mongoid/factory.rb +104 -17
- data/lib/mongoid/fields/foreign_key.rb +14 -26
- data/lib/mongoid/fields/localized.rb +21 -15
- data/lib/mongoid/fields/standard.rb +23 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +349 -76
- data/lib/mongoid/findable.rb +115 -34
- data/lib/mongoid/indexable/specification.rb +5 -18
- data/lib/mongoid/indexable/validators/options.rb +8 -9
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +85 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +4 -154
- 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 +23 -30
- data/lib/mongoid/persistable/deletable.rb +7 -23
- data/lib/mongoid/persistable/destroyable.rb +12 -11
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +14 -10
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +16 -9
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +10 -10
- data/lib/mongoid/persistable/updatable.rb +99 -30
- data/lib/mongoid/persistable/upsertable.rb +23 -9
- data/lib/mongoid/persistable.rb +138 -40
- data/lib/mongoid/persistence_context.rb +107 -52
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +18 -234
- data/lib/mongoid/railtie.rb +20 -16
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +16 -2
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +37 -60
- data/lib/mongoid/selectable.rb +8 -18
- data/lib/mongoid/serializable.rb +33 -34
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +60 -20
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +24 -5
- data/lib/mongoid/tasks/database.rb +105 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +80 -67
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +4 -3
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +5 -6
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +54 -25
- data/lib/mongoid/traversable.rb +185 -61
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +3 -4
- data/lib/mongoid/validatable/macros.rb +8 -15
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +30 -42
- data/lib/mongoid/validatable.rb +16 -32
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +50 -17
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -32
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +29 -3
- 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 +33 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +283 -0
- 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 +107 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- 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 +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- 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 +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +74 -0
- data/spec/integration/matcher_examples_spec.rb +765 -0
- 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 +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +35 -33
- data/spec/mongoid/association/depending_spec.rb +431 -338
- data/spec/mongoid/association/eager_spec.rb +8 -5
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +4 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +152 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +61 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +114 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +706 -197
- data/spec/mongoid/association/embedded/embeds_many_models.rb +227 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +81 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +27 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +38 -23
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +73 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +77 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +4 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +111 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +266 -17
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +114 -58
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +96 -29
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +67 -4
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +559 -385
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +92 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +84 -7
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +132 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +415 -129
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +859 -502
- data/spec/mongoid/association/referenced/has_many_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +51 -3
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +55 -9
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +135 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +113 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +87 -7
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +48 -32
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +93 -12
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +149 -78
- 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 +24 -22
- data/spec/mongoid/attributes_spec.rb +895 -54
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +484 -67
- data/spec/mongoid/clients/factory_spec.rb +139 -33
- data/spec/mongoid/clients/options_spec.rb +76 -54
- data/spec/mongoid/clients/sessions_spec.rb +35 -63
- data/spec/mongoid/clients/transactions_spec.rb +87 -41
- data/spec/mongoid/clients_spec.rb +257 -31
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +126 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +507 -2
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- 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 +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +242 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +22 -19
- data/spec/mongoid/contextual/memory_spec.rb +1828 -303
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3505 -1268
- data/spec/mongoid/contextual/none_spec.rb +80 -67
- data/spec/mongoid/copyable_spec.rb +697 -40
- data/spec/mongoid/copyable_spec_models.rb +47 -0
- data/spec/mongoid/criteria/findable_spec.rb +161 -228
- 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 +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +20 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +100 -48
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +9 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +136 -26
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +46 -17
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -15
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +119 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +7 -70
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +53 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +41 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +18 -485
- data/spec/mongoid/criteria/queryable/options_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2538 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1193 -2934
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +56 -5
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +210 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1334 -1719
- data/spec/mongoid/document_fields_spec.rb +262 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +212 -67
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +78 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +7 -5
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +24 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +5 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +4 -2
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -1
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +41 -45
- data/spec/mongoid/extensions/big_decimal_spec.rb +715 -213
- data/spec/mongoid/extensions/binary_spec.rb +46 -9
- data/spec/mongoid/extensions/boolean_spec.rb +70 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +58 -140
- data/spec/mongoid/extensions/date_time_spec.rb +32 -69
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +66 -73
- data/spec/mongoid/extensions/hash_spec.rb +135 -0
- data/spec/mongoid/extensions/integer_spec.rb +61 -63
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +257 -54
- data/spec/mongoid/extensions/regexp_spec.rb +70 -20
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +146 -57
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +20 -25
- data/spec/mongoid/extensions/time_spec.rb +668 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +57 -83
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +347 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +86 -41
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +869 -114
- data/spec/mongoid/findable_spec.rb +521 -65
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +87 -32
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +761 -98
- data/spec/mongoid/interceptable_spec_models.rb +307 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- 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 +114 -29
- data/spec/mongoid/persistable/deletable_spec.rb +300 -18
- data/spec/mongoid/persistable/destroyable_spec.rb +228 -18
- data/spec/mongoid/persistable/incrementable_spec.rb +66 -13
- data/spec/mongoid/persistable/logical_spec.rb +56 -3
- data/spec/mongoid/persistable/poppable_spec.rb +55 -3
- data/spec/mongoid/persistable/pullable_spec.rb +108 -6
- data/spec/mongoid/persistable/pushable_spec.rb +163 -7
- data/spec/mongoid/persistable/renamable_spec.rb +54 -2
- data/spec/mongoid/persistable/savable_spec.rb +284 -25
- data/spec/mongoid/persistable/settable_spec.rb +91 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +55 -3
- data/spec/mongoid/persistable/updatable_spec.rb +63 -49
- data/spec/mongoid/persistable/upsertable_spec.rb +93 -3
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +60 -59
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
- data/spec/mongoid/query_cache_spec.rb +446 -78
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +381 -26
- data/spec/mongoid/scopable_spec.rb +206 -38
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +148 -38
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +153 -9
- data/spec/mongoid/tasks/database_rake_spec.rb +89 -13
- data/spec/mongoid/tasks/database_spec.rb +130 -1
- data/spec/mongoid/threaded_spec.rb +72 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +400 -10
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +568 -33
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1145 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +159 -103
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +36 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- data/spec/rails/mongoid_spec.rb +8 -18
- 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 +74 -88
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +77 -0
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +129 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -1
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +10 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +3 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +4 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/support/models/circus.rb +12 -0
- data/spec/{app → support}/models/code.rb +4 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- 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 +2 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +11 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +6 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +3 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +22 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +4 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +3 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +3 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- 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 +53 -0
- data/spec/support/spec_config.rb +64 -0
- data.tar.gz.sig +1 -2
- metadata +1158 -615
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/errors/eager_load.rb +0 -22
- data/lib/mongoid/errors/invalid_value.rb +0 -16
- data/lib/mongoid/matchable/all.rb +0 -27
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -72
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -58
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -58
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -130
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
|
@@ -1,7 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
4
|
+
require_relative './interceptable_spec_models'
|
|
2
5
|
|
|
3
6
|
describe Mongoid::Interceptable do
|
|
4
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
|
+
|
|
5
16
|
class TestClass
|
|
6
17
|
include Mongoid::Interceptable
|
|
7
18
|
|
|
@@ -74,7 +85,7 @@ describe Mongoid::Interceptable do
|
|
|
74
85
|
describe ".after_find" do
|
|
75
86
|
|
|
76
87
|
let!(:player) do
|
|
77
|
-
Player.create
|
|
88
|
+
Player.create!
|
|
78
89
|
end
|
|
79
90
|
|
|
80
91
|
context "when the callback is on a root document" do
|
|
@@ -127,7 +138,7 @@ describe Mongoid::Interceptable do
|
|
|
127
138
|
context "when the callback is on an embedded document" do
|
|
128
139
|
|
|
129
140
|
let!(:implant) do
|
|
130
|
-
player.implants.create
|
|
141
|
+
player.implants.create!
|
|
131
142
|
end
|
|
132
143
|
|
|
133
144
|
context "when when the document is instantiated" do
|
|
@@ -197,7 +208,7 @@ describe Mongoid::Interceptable do
|
|
|
197
208
|
]
|
|
198
209
|
})
|
|
199
210
|
book.id = '123'
|
|
200
|
-
book.save
|
|
211
|
+
book.save!
|
|
201
212
|
book
|
|
202
213
|
end
|
|
203
214
|
|
|
@@ -209,7 +220,7 @@ describe Mongoid::Interceptable do
|
|
|
209
220
|
book.pages.each do | page |
|
|
210
221
|
page.notes.destroy_all
|
|
211
222
|
page.notes.new(message: new_message)
|
|
212
|
-
page.save
|
|
223
|
+
page.save!
|
|
213
224
|
end
|
|
214
225
|
end
|
|
215
226
|
|
|
@@ -272,7 +283,7 @@ describe Mongoid::Interceptable do
|
|
|
272
283
|
|
|
273
284
|
before do
|
|
274
285
|
expect(artist).to receive(:before_create_stub).once.and_return(true)
|
|
275
|
-
artist.save
|
|
286
|
+
artist.save!
|
|
276
287
|
end
|
|
277
288
|
|
|
278
289
|
it "gets saved" do
|
|
@@ -317,7 +328,7 @@ describe Mongoid::Interceptable do
|
|
|
317
328
|
end
|
|
318
329
|
|
|
319
330
|
it "the save returns true" do
|
|
320
|
-
expect(artist.save).to be true
|
|
331
|
+
expect(artist.save!).to be true
|
|
321
332
|
end
|
|
322
333
|
end
|
|
323
334
|
|
|
@@ -341,7 +352,7 @@ describe Mongoid::Interceptable do
|
|
|
341
352
|
context "when updating" do
|
|
342
353
|
|
|
343
354
|
let(:artist) do
|
|
344
|
-
Artist.create(name: "Depeche Mode").tap do |artist|
|
|
355
|
+
Artist.create!(name: "Depeche Mode").tap do |artist|
|
|
345
356
|
artist.name = "The Mountain Goats"
|
|
346
357
|
end
|
|
347
358
|
end
|
|
@@ -357,7 +368,7 @@ describe Mongoid::Interceptable do
|
|
|
357
368
|
end
|
|
358
369
|
|
|
359
370
|
it "the save returns true" do
|
|
360
|
-
expect(artist.save).to be true
|
|
371
|
+
expect(artist.save!).to be true
|
|
361
372
|
end
|
|
362
373
|
end
|
|
363
374
|
|
|
@@ -382,7 +393,7 @@ describe Mongoid::Interceptable do
|
|
|
382
393
|
describe ".before_destroy" do
|
|
383
394
|
|
|
384
395
|
let(:artist) do
|
|
385
|
-
Artist.create(name: "Depeche Mode")
|
|
396
|
+
Artist.create!(name: "Depeche Mode")
|
|
386
397
|
end
|
|
387
398
|
|
|
388
399
|
before do
|
|
@@ -427,7 +438,7 @@ describe Mongoid::Interceptable do
|
|
|
427
438
|
end
|
|
428
439
|
|
|
429
440
|
let!(:record) do
|
|
430
|
-
moderat.records.create(name: "Moderat")
|
|
441
|
+
moderat.records.create!(name: "Moderat")
|
|
431
442
|
end
|
|
432
443
|
|
|
433
444
|
before do
|
|
@@ -541,7 +552,7 @@ describe Mongoid::Interceptable do
|
|
|
541
552
|
|
|
542
553
|
it "does not cascade to the child" do
|
|
543
554
|
Band.accepts_nested_attributes_for :records, allow_destroy: true
|
|
544
|
-
expect(band.update_attributes(attributes)).to be true
|
|
555
|
+
expect(band.update_attributes!(attributes)).to be true
|
|
545
556
|
end
|
|
546
557
|
end
|
|
547
558
|
end
|
|
@@ -569,10 +580,22 @@ describe Mongoid::Interceptable do
|
|
|
569
580
|
end
|
|
570
581
|
|
|
571
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
|
|
591
|
+
|
|
592
|
+
context 'with prevent_multiple_calls_of_embedded_callbacks disabled' do
|
|
593
|
+
config_override :prevent_multiple_calls_of_embedded_callbacks, false
|
|
572
594
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
595
|
+
it "executes the callbacks once for each ember" do
|
|
596
|
+
expect(note).to receive(:update_saved).twice
|
|
597
|
+
band.save!
|
|
598
|
+
end
|
|
576
599
|
end
|
|
577
600
|
end
|
|
578
601
|
end
|
|
@@ -581,7 +604,7 @@ describe Mongoid::Interceptable do
|
|
|
581
604
|
context "when cascading after initialize" do
|
|
582
605
|
|
|
583
606
|
let!(:person) do
|
|
584
|
-
Person.create
|
|
607
|
+
Person.create!
|
|
585
608
|
end
|
|
586
609
|
|
|
587
610
|
before do
|
|
@@ -620,7 +643,7 @@ describe Mongoid::Interceptable do
|
|
|
620
643
|
end
|
|
621
644
|
|
|
622
645
|
before do
|
|
623
|
-
band.save
|
|
646
|
+
band.save!
|
|
624
647
|
end
|
|
625
648
|
|
|
626
649
|
it "executes the callback" do
|
|
@@ -631,7 +654,7 @@ describe Mongoid::Interceptable do
|
|
|
631
654
|
context "when the parent is persisted" do
|
|
632
655
|
|
|
633
656
|
let(:band) do
|
|
634
|
-
Band.create(name: "Moderat")
|
|
657
|
+
Band.create!(name: "Moderat")
|
|
635
658
|
end
|
|
636
659
|
|
|
637
660
|
let!(:label) do
|
|
@@ -639,7 +662,7 @@ describe Mongoid::Interceptable do
|
|
|
639
662
|
end
|
|
640
663
|
|
|
641
664
|
before do
|
|
642
|
-
band.save
|
|
665
|
+
band.save!
|
|
643
666
|
end
|
|
644
667
|
|
|
645
668
|
it "executes the callback" do
|
|
@@ -651,7 +674,7 @@ describe Mongoid::Interceptable do
|
|
|
651
674
|
context "when the child is persisted" do
|
|
652
675
|
|
|
653
676
|
let(:band) do
|
|
654
|
-
Band.create(name: "Moderat")
|
|
677
|
+
Band.create!(name: "Moderat")
|
|
655
678
|
end
|
|
656
679
|
|
|
657
680
|
let!(:label) do
|
|
@@ -660,7 +683,7 @@ describe Mongoid::Interceptable do
|
|
|
660
683
|
|
|
661
684
|
before do
|
|
662
685
|
label.after_create_called = false
|
|
663
|
-
band.save
|
|
686
|
+
band.save!
|
|
664
687
|
end
|
|
665
688
|
|
|
666
689
|
it "does not execute the callback" do
|
|
@@ -684,7 +707,7 @@ describe Mongoid::Interceptable do
|
|
|
684
707
|
end
|
|
685
708
|
|
|
686
709
|
before do
|
|
687
|
-
band.save
|
|
710
|
+
band.save!
|
|
688
711
|
end
|
|
689
712
|
|
|
690
713
|
it "executes the callback" do
|
|
@@ -695,7 +718,7 @@ describe Mongoid::Interceptable do
|
|
|
695
718
|
context "when the parent is persisted" do
|
|
696
719
|
|
|
697
720
|
let(:band) do
|
|
698
|
-
Band.create(name: "Moderat")
|
|
721
|
+
Band.create!(name: "Moderat")
|
|
699
722
|
end
|
|
700
723
|
|
|
701
724
|
let!(:label) do
|
|
@@ -703,7 +726,7 @@ describe Mongoid::Interceptable do
|
|
|
703
726
|
end
|
|
704
727
|
|
|
705
728
|
before do
|
|
706
|
-
band.save
|
|
729
|
+
band.save!
|
|
707
730
|
end
|
|
708
731
|
|
|
709
732
|
it "executes the callback" do
|
|
@@ -715,7 +738,7 @@ describe Mongoid::Interceptable do
|
|
|
715
738
|
context "when the child is persisted" do
|
|
716
739
|
|
|
717
740
|
let(:band) do
|
|
718
|
-
Band.create(name: "Moderat")
|
|
741
|
+
Band.create!(name: "Moderat")
|
|
719
742
|
end
|
|
720
743
|
|
|
721
744
|
let!(:label) do
|
|
@@ -723,7 +746,7 @@ describe Mongoid::Interceptable do
|
|
|
723
746
|
end
|
|
724
747
|
|
|
725
748
|
before do
|
|
726
|
-
band.save
|
|
749
|
+
band.save!
|
|
727
750
|
end
|
|
728
751
|
|
|
729
752
|
it "executes the callback" do
|
|
@@ -747,7 +770,7 @@ describe Mongoid::Interceptable do
|
|
|
747
770
|
end
|
|
748
771
|
|
|
749
772
|
before do
|
|
750
|
-
band.save
|
|
773
|
+
band.save!
|
|
751
774
|
end
|
|
752
775
|
|
|
753
776
|
it "does not execute the callback" do
|
|
@@ -758,7 +781,7 @@ describe Mongoid::Interceptable do
|
|
|
758
781
|
context "when the parent is persisted" do
|
|
759
782
|
|
|
760
783
|
let(:band) do
|
|
761
|
-
Band.create(name: "Moderat")
|
|
784
|
+
Band.create!(name: "Moderat")
|
|
762
785
|
end
|
|
763
786
|
|
|
764
787
|
let!(:label) do
|
|
@@ -766,7 +789,7 @@ describe Mongoid::Interceptable do
|
|
|
766
789
|
end
|
|
767
790
|
|
|
768
791
|
before do
|
|
769
|
-
band.save
|
|
792
|
+
band.save!
|
|
770
793
|
end
|
|
771
794
|
|
|
772
795
|
it "does not execute the callback" do
|
|
@@ -778,7 +801,7 @@ describe Mongoid::Interceptable do
|
|
|
778
801
|
context "when the child is persisted" do
|
|
779
802
|
|
|
780
803
|
let(:band) do
|
|
781
|
-
Band.create(name: "Moderat")
|
|
804
|
+
Band.create!(name: "Moderat")
|
|
782
805
|
end
|
|
783
806
|
|
|
784
807
|
context "when the child is dirty" do
|
|
@@ -789,7 +812,7 @@ describe Mongoid::Interceptable do
|
|
|
789
812
|
|
|
790
813
|
before do
|
|
791
814
|
label.name = "Nothing"
|
|
792
|
-
band.save
|
|
815
|
+
band.save!
|
|
793
816
|
end
|
|
794
817
|
|
|
795
818
|
it "executes the callback" do
|
|
@@ -804,7 +827,7 @@ describe Mongoid::Interceptable do
|
|
|
804
827
|
end
|
|
805
828
|
|
|
806
829
|
before do
|
|
807
|
-
band.save
|
|
830
|
+
band.save!
|
|
808
831
|
end
|
|
809
832
|
|
|
810
833
|
it "does not execute the callback" do
|
|
@@ -829,7 +852,7 @@ describe Mongoid::Interceptable do
|
|
|
829
852
|
end
|
|
830
853
|
|
|
831
854
|
before do
|
|
832
|
-
band.save
|
|
855
|
+
band.save!
|
|
833
856
|
end
|
|
834
857
|
|
|
835
858
|
it "executes the callback" do
|
|
@@ -840,7 +863,7 @@ describe Mongoid::Interceptable do
|
|
|
840
863
|
context "when the parent is persisted" do
|
|
841
864
|
|
|
842
865
|
let(:band) do
|
|
843
|
-
Band.create(name: "Moderat")
|
|
866
|
+
Band.create!(name: "Moderat")
|
|
844
867
|
end
|
|
845
868
|
|
|
846
869
|
let!(:label) do
|
|
@@ -848,7 +871,7 @@ describe Mongoid::Interceptable do
|
|
|
848
871
|
end
|
|
849
872
|
|
|
850
873
|
before do
|
|
851
|
-
band.save
|
|
874
|
+
band.save!
|
|
852
875
|
end
|
|
853
876
|
|
|
854
877
|
it "executes the callback" do
|
|
@@ -860,7 +883,7 @@ describe Mongoid::Interceptable do
|
|
|
860
883
|
context "when the child is persisted" do
|
|
861
884
|
|
|
862
885
|
let(:band) do
|
|
863
|
-
Band.create(name: "Moderat")
|
|
886
|
+
Band.create!(name: "Moderat")
|
|
864
887
|
end
|
|
865
888
|
|
|
866
889
|
let!(:label) do
|
|
@@ -868,7 +891,7 @@ describe Mongoid::Interceptable do
|
|
|
868
891
|
end
|
|
869
892
|
|
|
870
893
|
before do
|
|
871
|
-
band.save
|
|
894
|
+
band.save!
|
|
872
895
|
end
|
|
873
896
|
|
|
874
897
|
it "executes the callback" do
|
|
@@ -892,7 +915,7 @@ describe Mongoid::Interceptable do
|
|
|
892
915
|
end
|
|
893
916
|
|
|
894
917
|
before do
|
|
895
|
-
band.save
|
|
918
|
+
band.save!
|
|
896
919
|
end
|
|
897
920
|
|
|
898
921
|
it "executes the callback" do
|
|
@@ -903,7 +926,7 @@ describe Mongoid::Interceptable do
|
|
|
903
926
|
context "when the parent is persisted" do
|
|
904
927
|
|
|
905
928
|
let(:band) do
|
|
906
|
-
Band.create(name: "Moderat")
|
|
929
|
+
Band.create!(name: "Moderat")
|
|
907
930
|
end
|
|
908
931
|
|
|
909
932
|
let!(:record) do
|
|
@@ -911,7 +934,7 @@ describe Mongoid::Interceptable do
|
|
|
911
934
|
end
|
|
912
935
|
|
|
913
936
|
before do
|
|
914
|
-
band.save
|
|
937
|
+
band.save!
|
|
915
938
|
end
|
|
916
939
|
|
|
917
940
|
it "executes the callback" do
|
|
@@ -923,16 +946,16 @@ describe Mongoid::Interceptable do
|
|
|
923
946
|
context "when the child is persisted" do
|
|
924
947
|
|
|
925
948
|
let(:band) do
|
|
926
|
-
Band.create(name: "Moderat")
|
|
949
|
+
Band.create!(name: "Moderat")
|
|
927
950
|
end
|
|
928
951
|
|
|
929
952
|
let!(:record) do
|
|
930
|
-
band.records.create(name: "Moderat")
|
|
953
|
+
band.records.create!(name: "Moderat")
|
|
931
954
|
end
|
|
932
955
|
|
|
933
956
|
before do
|
|
934
957
|
record.before_create_called = false
|
|
935
|
-
band.save
|
|
958
|
+
band.save!
|
|
936
959
|
end
|
|
937
960
|
|
|
938
961
|
it "does not execute the callback" do
|
|
@@ -956,7 +979,7 @@ describe Mongoid::Interceptable do
|
|
|
956
979
|
end
|
|
957
980
|
|
|
958
981
|
before do
|
|
959
|
-
band.save
|
|
982
|
+
band.save!
|
|
960
983
|
end
|
|
961
984
|
|
|
962
985
|
it "executes the callback" do
|
|
@@ -971,7 +994,7 @@ describe Mongoid::Interceptable do
|
|
|
971
994
|
context "when the parent is persisted" do
|
|
972
995
|
|
|
973
996
|
let(:band) do
|
|
974
|
-
Band.create(name: "Moderat")
|
|
997
|
+
Band.create!(name: "Moderat")
|
|
975
998
|
end
|
|
976
999
|
|
|
977
1000
|
let!(:record) do
|
|
@@ -979,7 +1002,7 @@ describe Mongoid::Interceptable do
|
|
|
979
1002
|
end
|
|
980
1003
|
|
|
981
1004
|
before do
|
|
982
|
-
band.save
|
|
1005
|
+
band.save!
|
|
983
1006
|
end
|
|
984
1007
|
|
|
985
1008
|
it "executes the callback" do
|
|
@@ -995,15 +1018,15 @@ describe Mongoid::Interceptable do
|
|
|
995
1018
|
context "when the child is persisted" do
|
|
996
1019
|
|
|
997
1020
|
let(:band) do
|
|
998
|
-
Band.create(name: "Moderat")
|
|
1021
|
+
Band.create!(name: "Moderat")
|
|
999
1022
|
end
|
|
1000
1023
|
|
|
1001
1024
|
let!(:record) do
|
|
1002
|
-
band.records.create(name: "Moderat")
|
|
1025
|
+
band.records.create!(name: "Moderat")
|
|
1003
1026
|
end
|
|
1004
1027
|
|
|
1005
1028
|
before do
|
|
1006
|
-
band.save
|
|
1029
|
+
band.save!
|
|
1007
1030
|
end
|
|
1008
1031
|
|
|
1009
1032
|
it "executes the callback" do
|
|
@@ -1018,7 +1041,7 @@ describe Mongoid::Interceptable do
|
|
|
1018
1041
|
context "when the child is created" do
|
|
1019
1042
|
|
|
1020
1043
|
let!(:band) do
|
|
1021
|
-
Band.create
|
|
1044
|
+
Band.create!
|
|
1022
1045
|
end
|
|
1023
1046
|
|
|
1024
1047
|
let!(:label) do
|
|
@@ -1046,7 +1069,7 @@ describe Mongoid::Interceptable do
|
|
|
1046
1069
|
end
|
|
1047
1070
|
|
|
1048
1071
|
before do
|
|
1049
|
-
band.save
|
|
1072
|
+
band.save!
|
|
1050
1073
|
end
|
|
1051
1074
|
|
|
1052
1075
|
it "does not execute the callback" do
|
|
@@ -1057,7 +1080,7 @@ describe Mongoid::Interceptable do
|
|
|
1057
1080
|
context "when the parent is persisted" do
|
|
1058
1081
|
|
|
1059
1082
|
let(:band) do
|
|
1060
|
-
Band.create(name: "Moderat")
|
|
1083
|
+
Band.create!(name: "Moderat")
|
|
1061
1084
|
end
|
|
1062
1085
|
|
|
1063
1086
|
let!(:record) do
|
|
@@ -1065,7 +1088,7 @@ describe Mongoid::Interceptable do
|
|
|
1065
1088
|
end
|
|
1066
1089
|
|
|
1067
1090
|
before do
|
|
1068
|
-
band.save
|
|
1091
|
+
band.save!
|
|
1069
1092
|
end
|
|
1070
1093
|
|
|
1071
1094
|
it "does not execute the callback" do
|
|
@@ -1077,18 +1100,18 @@ describe Mongoid::Interceptable do
|
|
|
1077
1100
|
context "when the child is persisted" do
|
|
1078
1101
|
|
|
1079
1102
|
let(:band) do
|
|
1080
|
-
Band.create(name: "Moderat")
|
|
1103
|
+
Band.create!(name: "Moderat")
|
|
1081
1104
|
end
|
|
1082
1105
|
|
|
1083
1106
|
let!(:record) do
|
|
1084
|
-
band.records.create(name: "Moderat")
|
|
1107
|
+
band.records.create!(name: "Moderat")
|
|
1085
1108
|
end
|
|
1086
1109
|
|
|
1087
1110
|
context "when the child is dirty" do
|
|
1088
1111
|
|
|
1089
1112
|
before do
|
|
1090
1113
|
record.name = "Nothing"
|
|
1091
|
-
band.save
|
|
1114
|
+
band.save!
|
|
1092
1115
|
end
|
|
1093
1116
|
|
|
1094
1117
|
it "executes the callback" do
|
|
@@ -1103,7 +1126,7 @@ describe Mongoid::Interceptable do
|
|
|
1103
1126
|
context "when the child is not dirty" do
|
|
1104
1127
|
|
|
1105
1128
|
before do
|
|
1106
|
-
band.save
|
|
1129
|
+
band.save!
|
|
1107
1130
|
end
|
|
1108
1131
|
|
|
1109
1132
|
it "does not execute the callback" do
|
|
@@ -1128,7 +1151,7 @@ describe Mongoid::Interceptable do
|
|
|
1128
1151
|
end
|
|
1129
1152
|
|
|
1130
1153
|
before do
|
|
1131
|
-
band.save
|
|
1154
|
+
band.save!
|
|
1132
1155
|
end
|
|
1133
1156
|
|
|
1134
1157
|
it "executes the callback" do
|
|
@@ -1143,7 +1166,7 @@ describe Mongoid::Interceptable do
|
|
|
1143
1166
|
context "when the parent is persisted" do
|
|
1144
1167
|
|
|
1145
1168
|
let(:band) do
|
|
1146
|
-
Band.create(name: "Moderat")
|
|
1169
|
+
Band.create!(name: "Moderat")
|
|
1147
1170
|
end
|
|
1148
1171
|
|
|
1149
1172
|
let!(:record) do
|
|
@@ -1151,7 +1174,7 @@ describe Mongoid::Interceptable do
|
|
|
1151
1174
|
end
|
|
1152
1175
|
|
|
1153
1176
|
before do
|
|
1154
|
-
band.save
|
|
1177
|
+
band.save!
|
|
1155
1178
|
end
|
|
1156
1179
|
|
|
1157
1180
|
it "executes the callback" do
|
|
@@ -1166,7 +1189,7 @@ describe Mongoid::Interceptable do
|
|
|
1166
1189
|
context 'when the parent is updated' do
|
|
1167
1190
|
|
|
1168
1191
|
let(:band) do
|
|
1169
|
-
Band.create(name: "Moderat")
|
|
1192
|
+
Band.create!(name: "Moderat")
|
|
1170
1193
|
end
|
|
1171
1194
|
|
|
1172
1195
|
before do
|
|
@@ -1186,7 +1209,7 @@ describe Mongoid::Interceptable do
|
|
|
1186
1209
|
context 'when the parent is updated' do
|
|
1187
1210
|
|
|
1188
1211
|
let(:band) do
|
|
1189
|
-
Band.create(name: "Moderat")
|
|
1212
|
+
Band.create!(name: "Moderat")
|
|
1190
1213
|
end
|
|
1191
1214
|
|
|
1192
1215
|
before do
|
|
@@ -1205,15 +1228,15 @@ describe Mongoid::Interceptable do
|
|
|
1205
1228
|
context "when the child is persisted" do
|
|
1206
1229
|
|
|
1207
1230
|
let(:band) do
|
|
1208
|
-
Band.create(name: "Moderat")
|
|
1231
|
+
Band.create!(name: "Moderat")
|
|
1209
1232
|
end
|
|
1210
1233
|
|
|
1211
1234
|
let!(:record) do
|
|
1212
|
-
band.records.create(name: "Moderat")
|
|
1235
|
+
band.records.create!(name: "Moderat")
|
|
1213
1236
|
end
|
|
1214
1237
|
|
|
1215
1238
|
before do
|
|
1216
|
-
band.save
|
|
1239
|
+
band.save!
|
|
1217
1240
|
end
|
|
1218
1241
|
|
|
1219
1242
|
it "executes the callback" do
|
|
@@ -1248,7 +1271,7 @@ describe Mongoid::Interceptable do
|
|
|
1248
1271
|
end
|
|
1249
1272
|
|
|
1250
1273
|
before do
|
|
1251
|
-
band.save
|
|
1274
|
+
band.save!
|
|
1252
1275
|
end
|
|
1253
1276
|
|
|
1254
1277
|
it "executes the callback" do
|
|
@@ -1259,7 +1282,7 @@ describe Mongoid::Interceptable do
|
|
|
1259
1282
|
context "when the root is persisted" do
|
|
1260
1283
|
|
|
1261
1284
|
let(:band) do
|
|
1262
|
-
Band.create(name: "Moderat")
|
|
1285
|
+
Band.create!(name: "Moderat")
|
|
1263
1286
|
end
|
|
1264
1287
|
|
|
1265
1288
|
let!(:record) do
|
|
@@ -1271,7 +1294,7 @@ describe Mongoid::Interceptable do
|
|
|
1271
1294
|
end
|
|
1272
1295
|
|
|
1273
1296
|
before do
|
|
1274
|
-
band.save
|
|
1297
|
+
band.save!
|
|
1275
1298
|
end
|
|
1276
1299
|
|
|
1277
1300
|
it "executes the callback" do
|
|
@@ -1283,20 +1306,20 @@ describe Mongoid::Interceptable do
|
|
|
1283
1306
|
context "when the child is persisted" do
|
|
1284
1307
|
|
|
1285
1308
|
let(:band) do
|
|
1286
|
-
Band.create(name: "Moderat")
|
|
1309
|
+
Band.create!(name: "Moderat")
|
|
1287
1310
|
end
|
|
1288
1311
|
|
|
1289
1312
|
let!(:record) do
|
|
1290
|
-
band.records.create(name: "Moderat")
|
|
1313
|
+
band.records.create!(name: "Moderat")
|
|
1291
1314
|
end
|
|
1292
1315
|
|
|
1293
1316
|
let!(:track) do
|
|
1294
|
-
record.tracks.create(name: "Berlin")
|
|
1317
|
+
record.tracks.create!(name: "Berlin")
|
|
1295
1318
|
end
|
|
1296
1319
|
|
|
1297
1320
|
before do
|
|
1298
1321
|
track.before_create_called = false
|
|
1299
|
-
band.save
|
|
1322
|
+
band.save!
|
|
1300
1323
|
end
|
|
1301
1324
|
|
|
1302
1325
|
it "does not execute the callback" do
|
|
@@ -1324,7 +1347,7 @@ describe Mongoid::Interceptable do
|
|
|
1324
1347
|
end
|
|
1325
1348
|
|
|
1326
1349
|
before do
|
|
1327
|
-
band.save
|
|
1350
|
+
band.save!
|
|
1328
1351
|
end
|
|
1329
1352
|
|
|
1330
1353
|
let(:reloaded) do
|
|
@@ -1343,7 +1366,7 @@ describe Mongoid::Interceptable do
|
|
|
1343
1366
|
context "when the parent is persisted" do
|
|
1344
1367
|
|
|
1345
1368
|
let(:band) do
|
|
1346
|
-
Band.create(name: "Moderat")
|
|
1369
|
+
Band.create!(name: "Moderat")
|
|
1347
1370
|
end
|
|
1348
1371
|
|
|
1349
1372
|
let!(:record) do
|
|
@@ -1355,7 +1378,7 @@ describe Mongoid::Interceptable do
|
|
|
1355
1378
|
end
|
|
1356
1379
|
|
|
1357
1380
|
before do
|
|
1358
|
-
band.save
|
|
1381
|
+
band.save!
|
|
1359
1382
|
end
|
|
1360
1383
|
|
|
1361
1384
|
let(:reloaded) do
|
|
@@ -1375,19 +1398,19 @@ describe Mongoid::Interceptable do
|
|
|
1375
1398
|
context "when the child is persisted" do
|
|
1376
1399
|
|
|
1377
1400
|
let(:band) do
|
|
1378
|
-
Band.create(name: "Moderat")
|
|
1401
|
+
Band.create!(name: "Moderat")
|
|
1379
1402
|
end
|
|
1380
1403
|
|
|
1381
1404
|
let!(:record) do
|
|
1382
|
-
band.records.create(name: "Moderat")
|
|
1405
|
+
band.records.create!(name: "Moderat")
|
|
1383
1406
|
end
|
|
1384
1407
|
|
|
1385
1408
|
let!(:track) do
|
|
1386
|
-
record.tracks.create(name: "Berlin")
|
|
1409
|
+
record.tracks.create!(name: "Berlin")
|
|
1387
1410
|
end
|
|
1388
1411
|
|
|
1389
1412
|
before do
|
|
1390
|
-
band.save
|
|
1413
|
+
band.save!
|
|
1391
1414
|
end
|
|
1392
1415
|
|
|
1393
1416
|
let(:reloaded) do
|
|
@@ -1423,7 +1446,7 @@ describe Mongoid::Interceptable do
|
|
|
1423
1446
|
end
|
|
1424
1447
|
|
|
1425
1448
|
before do
|
|
1426
|
-
band.save
|
|
1449
|
+
band.save!
|
|
1427
1450
|
end
|
|
1428
1451
|
|
|
1429
1452
|
it "does not execute the callback" do
|
|
@@ -1434,7 +1457,7 @@ describe Mongoid::Interceptable do
|
|
|
1434
1457
|
context "when the parent is persisted" do
|
|
1435
1458
|
|
|
1436
1459
|
let(:band) do
|
|
1437
|
-
Band.create(name: "Moderat")
|
|
1460
|
+
Band.create!(name: "Moderat")
|
|
1438
1461
|
end
|
|
1439
1462
|
|
|
1440
1463
|
let!(:record) do
|
|
@@ -1446,7 +1469,7 @@ describe Mongoid::Interceptable do
|
|
|
1446
1469
|
end
|
|
1447
1470
|
|
|
1448
1471
|
before do
|
|
1449
|
-
band.save
|
|
1472
|
+
band.save!
|
|
1450
1473
|
end
|
|
1451
1474
|
|
|
1452
1475
|
it "does not execute the callback" do
|
|
@@ -1458,22 +1481,22 @@ describe Mongoid::Interceptable do
|
|
|
1458
1481
|
context "when the child is persisted" do
|
|
1459
1482
|
|
|
1460
1483
|
let(:band) do
|
|
1461
|
-
Band.create(name: "Moderat")
|
|
1484
|
+
Band.create!(name: "Moderat")
|
|
1462
1485
|
end
|
|
1463
1486
|
|
|
1464
1487
|
let!(:record) do
|
|
1465
|
-
band.records.create(name: "Moderat")
|
|
1488
|
+
band.records.create!(name: "Moderat")
|
|
1466
1489
|
end
|
|
1467
1490
|
|
|
1468
1491
|
let!(:track) do
|
|
1469
|
-
record.tracks.create(name: "Berlin")
|
|
1492
|
+
record.tracks.create!(name: "Berlin")
|
|
1470
1493
|
end
|
|
1471
1494
|
|
|
1472
1495
|
context "when the child is dirty" do
|
|
1473
1496
|
|
|
1474
1497
|
before do
|
|
1475
1498
|
track.name = "Rusty Nails"
|
|
1476
|
-
band.save
|
|
1499
|
+
band.save!
|
|
1477
1500
|
end
|
|
1478
1501
|
|
|
1479
1502
|
let(:reloaded) do
|
|
@@ -1492,7 +1515,7 @@ describe Mongoid::Interceptable do
|
|
|
1492
1515
|
context "when the child is not dirty" do
|
|
1493
1516
|
|
|
1494
1517
|
before do
|
|
1495
|
-
band.save
|
|
1518
|
+
band.save!
|
|
1496
1519
|
end
|
|
1497
1520
|
|
|
1498
1521
|
it "does not execute the callback" do
|
|
@@ -1540,7 +1563,7 @@ describe Mongoid::Interceptable do
|
|
|
1540
1563
|
end
|
|
1541
1564
|
|
|
1542
1565
|
before do
|
|
1543
|
-
band.save
|
|
1566
|
+
band.save!
|
|
1544
1567
|
end
|
|
1545
1568
|
|
|
1546
1569
|
it "executes the callback" do
|
|
@@ -1551,7 +1574,7 @@ describe Mongoid::Interceptable do
|
|
|
1551
1574
|
context "when the parent is persisted" do
|
|
1552
1575
|
|
|
1553
1576
|
let(:band) do
|
|
1554
|
-
Band.create(name: "Moderat")
|
|
1577
|
+
Band.create!(name: "Moderat")
|
|
1555
1578
|
end
|
|
1556
1579
|
|
|
1557
1580
|
let!(:record) do
|
|
@@ -1563,7 +1586,7 @@ describe Mongoid::Interceptable do
|
|
|
1563
1586
|
end
|
|
1564
1587
|
|
|
1565
1588
|
before do
|
|
1566
|
-
band.save
|
|
1589
|
+
band.save!
|
|
1567
1590
|
end
|
|
1568
1591
|
|
|
1569
1592
|
it "executes the callback" do
|
|
@@ -1575,19 +1598,19 @@ describe Mongoid::Interceptable do
|
|
|
1575
1598
|
context "when the child is persisted" do
|
|
1576
1599
|
|
|
1577
1600
|
let(:band) do
|
|
1578
|
-
Band.create(name: "Moderat")
|
|
1601
|
+
Band.create!(name: "Moderat")
|
|
1579
1602
|
end
|
|
1580
1603
|
|
|
1581
1604
|
let!(:record) do
|
|
1582
|
-
band.records.create(name: "Moderat")
|
|
1605
|
+
band.records.create!(name: "Moderat")
|
|
1583
1606
|
end
|
|
1584
1607
|
|
|
1585
1608
|
let!(:track) do
|
|
1586
|
-
record.tracks.create(name: "Berlin")
|
|
1609
|
+
record.tracks.create!(name: "Berlin")
|
|
1587
1610
|
end
|
|
1588
1611
|
|
|
1589
1612
|
before do
|
|
1590
|
-
band.save
|
|
1613
|
+
band.save!
|
|
1591
1614
|
end
|
|
1592
1615
|
|
|
1593
1616
|
it "executes the callback" do
|
|
@@ -1614,11 +1637,11 @@ describe Mongoid::Interceptable do
|
|
|
1614
1637
|
end
|
|
1615
1638
|
|
|
1616
1639
|
before do
|
|
1617
|
-
parent.save
|
|
1640
|
+
parent.save!
|
|
1618
1641
|
end
|
|
1619
1642
|
|
|
1620
1643
|
it "does not duplicate the child documents" do
|
|
1621
|
-
parent.children.create(position: 1)
|
|
1644
|
+
parent.children.create!(position: 1)
|
|
1622
1645
|
expect(ParentDoc.find(parent.id).children.size).to eq(1)
|
|
1623
1646
|
end
|
|
1624
1647
|
end
|
|
@@ -1669,7 +1692,7 @@ describe Mongoid::Interceptable do
|
|
|
1669
1692
|
context "when updating a document" do
|
|
1670
1693
|
|
|
1671
1694
|
let(:person) do
|
|
1672
|
-
Person.create
|
|
1695
|
+
Person.create!.tap do |person|
|
|
1673
1696
|
person.attributes = {
|
|
1674
1697
|
mode: :prevent_save,
|
|
1675
1698
|
title: "Associate",
|
|
@@ -1703,8 +1726,8 @@ describe Mongoid::Interceptable do
|
|
|
1703
1726
|
context "when loading a model multiple times" do
|
|
1704
1727
|
|
|
1705
1728
|
before do
|
|
1706
|
-
load "
|
|
1707
|
-
load "
|
|
1729
|
+
load File.join(MODELS, "callback_test.rb")
|
|
1730
|
+
load File.join(MODELS, "callback_test.rb")
|
|
1708
1731
|
end
|
|
1709
1732
|
|
|
1710
1733
|
let(:callback) do
|
|
@@ -1719,4 +1742,644 @@ describe Mongoid::Interceptable do
|
|
|
1719
1742
|
end
|
|
1720
1743
|
end
|
|
1721
1744
|
end
|
|
1745
|
+
|
|
1746
|
+
context 'when creating a parent and embedded child' do
|
|
1747
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1748
|
+
let(:parent) do
|
|
1749
|
+
InterceptableSpec::CbParent.new(registry).tap do |parent|
|
|
1750
|
+
parent.cb_children << InterceptableSpec::CbChild.new(registry, cb_parent: parent)
|
|
1751
|
+
end
|
|
1752
|
+
end
|
|
1753
|
+
|
|
1754
|
+
let(:expected) do
|
|
1755
|
+
[
|
|
1756
|
+
[InterceptableSpec::CbParent, :before_validation],
|
|
1757
|
+
[InterceptableSpec::CbChild, :before_validation],
|
|
1758
|
+
[InterceptableSpec::CbChild, :after_validation],
|
|
1759
|
+
[InterceptableSpec::CbParent, :after_validation],
|
|
1760
|
+
[InterceptableSpec::CbParent, :before_save],
|
|
1761
|
+
[InterceptableSpec::CbParent, :around_save_open],
|
|
1762
|
+
[InterceptableSpec::CbParent, :before_create],
|
|
1763
|
+
[InterceptableSpec::CbParent, :around_create_open],
|
|
1764
|
+
[InterceptableSpec::CbParent, :around_create_close],
|
|
1765
|
+
[InterceptableSpec::CbParent, :after_create],
|
|
1766
|
+
[InterceptableSpec::CbParent, :around_save_close],
|
|
1767
|
+
[InterceptableSpec::CbParent, :after_save],
|
|
1768
|
+
]
|
|
1769
|
+
end
|
|
1770
|
+
|
|
1771
|
+
it 'calls callbacks in the right order' do
|
|
1772
|
+
parent.save!
|
|
1773
|
+
expect(registry.calls).to eq expected
|
|
1774
|
+
end
|
|
1775
|
+
end
|
|
1776
|
+
|
|
1777
|
+
context 'when creating a parent and embedded child with cascading callbacks' do
|
|
1778
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1779
|
+
let(:parent) do
|
|
1780
|
+
InterceptableSpec::CbParent.new(registry).tap do |parent|
|
|
1781
|
+
parent.cb_cascaded_children <<
|
|
1782
|
+
InterceptableSpec::CbCascadedChild.new(registry, cb_parent: parent)
|
|
1783
|
+
end
|
|
1784
|
+
end
|
|
1785
|
+
|
|
1786
|
+
let(:expected) do
|
|
1787
|
+
[
|
|
1788
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1789
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1790
|
+
[InterceptableSpec::CbParent, :before_validation],
|
|
1791
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1792
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1793
|
+
|
|
1794
|
+
[InterceptableSpec::CbParent, :after_validation],
|
|
1795
|
+
[InterceptableSpec::CbParent, :before_save],
|
|
1796
|
+
[InterceptableSpec::CbParent, :around_save_open],
|
|
1797
|
+
[InterceptableSpec::CbParent, :before_create],
|
|
1798
|
+
[InterceptableSpec::CbParent, :around_create_open],
|
|
1799
|
+
|
|
1800
|
+
[InterceptableSpec::CbCascadedChild, :before_save],
|
|
1801
|
+
[InterceptableSpec::CbCascadedChild, :around_save_open],
|
|
1802
|
+
[InterceptableSpec::CbCascadedChild, :before_create],
|
|
1803
|
+
[InterceptableSpec::CbCascadedChild, :around_create_open],
|
|
1804
|
+
|
|
1805
|
+
[InterceptableSpec::CbCascadedChild, :around_create_close],
|
|
1806
|
+
[InterceptableSpec::CbCascadedChild, :after_create],
|
|
1807
|
+
[InterceptableSpec::CbCascadedChild, :around_save_close],
|
|
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]
|
|
1814
|
+
]
|
|
1815
|
+
end
|
|
1816
|
+
|
|
1817
|
+
it 'calls callbacks in the right order' do
|
|
1818
|
+
parent.save!
|
|
1819
|
+
expect(registry.calls).to eq expected
|
|
1820
|
+
end
|
|
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
|
|
1722
2385
|
end
|