mongoid 7.0.13 → 8.0.8
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 +30 -30
- data/README.md +32 -19
- data/Rakefile +43 -0
- data/lib/config/locales/en.yml +178 -95
- data/lib/mongoid/association/accessors.rb +175 -83
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +8 -14
- 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 +67 -53
- 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 +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- 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 +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +143 -122
- data/lib/mongoid/association/embedded/embeds_many.rb +8 -36
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +26 -9
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +63 -29
- data/lib/mongoid/association/embedded/embeds_one.rb +9 -33
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +71 -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 +19 -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 +37 -38
- 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 +41 -40
- 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 +105 -68
- 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 +101 -124
- 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 +62 -84
- 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 +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +45 -51
- data/lib/mongoid/attributes/dynamic.rb +6 -21
- data/lib/mongoid/attributes/nested.rb +11 -14
- data/lib/mongoid/attributes/processing.rb +46 -30
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +5 -8
- data/lib/mongoid/attributes.rb +80 -98
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +49 -70
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +15 -14
- data/lib/mongoid/clients/sessions.rb +4 -20
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +5 -12
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- data/lib/mongoid/config/environment.rb +30 -5
- data/lib/mongoid/config/options.rb +23 -23
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +164 -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 +187 -81
- data/lib/mongoid/contextual/mongo.rb +360 -239
- data/lib/mongoid/contextual/none.rb +109 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +9 -11
- data/lib/mongoid/copyable.rb +42 -17
- data/lib/mongoid/criteria/findable.rb +19 -19
- data/lib/mongoid/criteria/includable.rb +30 -33
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -19
- data/lib/mongoid/criteria/options.rb +2 -3
- 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 +9 -16
- 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 +9 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +39 -24
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +200 -40
- data/lib/mongoid/criteria/queryable/optional.rb +10 -59
- 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 +417 -171
- data/lib/mongoid/criteria/queryable/selector.rb +127 -30
- 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 +95 -107
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +148 -97
- 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/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/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- 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_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 +2 -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 +14 -3
- 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 +87 -45
- 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 +25 -50
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +13 -7
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +30 -61
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +37 -23
- 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 +11 -15
- data/lib/mongoid/fields/standard.rb +13 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +328 -85
- data/lib/mongoid/findable.rb +90 -33
- 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 +191 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +3 -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 +22 -30
- data/lib/mongoid/persistable/deletable.rb +6 -22
- 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 +3 -8
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +5 -10
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +9 -9
- data/lib/mongoid/persistable/updatable.rb +50 -31
- data/lib/mongoid/persistable/upsertable.rb +5 -10
- data/lib/mongoid/persistable.rb +135 -40
- data/lib/mongoid/persistence_context.rb +85 -45
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +13 -280
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +4 -2
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +34 -57
- 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 +38 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +44 -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/validatable/associated.rb +99 -22
- 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 +2 -9
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +29 -41
- data/lib/mongoid/validatable.rb +22 -33
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +34 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -1
- 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_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +17 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +31 -27
- data/spec/integration/associations/belongs_to_spec.rb +20 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +162 -55
- 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 +61 -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 +107 -1
- data/spec/integration/callbacks_spec.rb +262 -8
- 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 +1 -2
- 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 +125 -15
- data/spec/integration/discriminator_key_spec.rb +392 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +73 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +18 -6
- 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 +84 -22
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -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 +687 -173
- data/spec/mongoid/association/embedded/embeds_many_models.rb +174 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +71 -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 +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +22 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +31 -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 +242 -12
- 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 +26 -3
- 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 +46 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +418 -361
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +68 -2
- 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 +81 -4
- 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 +314 -133
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +848 -451
- data/spec/mongoid/association/referenced/has_many_models.rb +61 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +48 -0
- 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 +65 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +47 -31
- 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 +66 -26
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- 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 +683 -65
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +185 -43
- data/spec/mongoid/clients/factory_spec.rb +128 -28
- data/spec/mongoid/clients/options_spec.rb +45 -26
- data/spec/mongoid/clients/sessions_spec.rb +25 -66
- data/spec/mongoid/clients/transactions_spec.rb +54 -29
- data/spec/mongoid/clients_spec.rb +65 -8
- data/spec/mongoid/composable_spec.rb +2 -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 +377 -1
- 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 +205 -67
- data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +6 -18
- data/spec/mongoid/contextual/memory_spec.rb +1360 -91
- data/spec/mongoid/contextual/mongo_spec.rb +1871 -544
- data/spec/mongoid/contextual/none_spec.rb +39 -73
- data/spec/mongoid/copyable_spec.rb +657 -26
- data/spec/mongoid/copyable_spec_models.rb +30 -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 +43 -40
- 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/bignum_spec.rb +2 -0
- 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/fixnum_spec.rb +2 -0
- 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 +73 -8
- 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 +2 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +34 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +2 -0
- 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 +2 -0
- 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 +1643 -286
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1191 -2752
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +91 -4
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +298 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +409 -0
- data/spec/mongoid/criteria_spec.rb +1322 -1723
- data/spec/mongoid/document_fields_spec.rb +179 -5
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +153 -87
- 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 +2 -0
- 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 +714 -212
- 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 +138 -3
- 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 +60 -33
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +111 -50
- 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 +663 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +50 -31
- 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 +43 -16
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +776 -80
- data/spec/mongoid/findable_spec.rb +133 -34
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +65 -18
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +955 -103
- 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 +274 -12
- data/spec/mongoid/persistable/destroyable_spec.rb +202 -12
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +36 -6
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +24 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +18 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +52 -1
- 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 +339 -87
- data/spec/mongoid/relations/proxy_spec.rb +8 -6
- data/spec/mongoid/reloadable_spec.rb +357 -22
- data/spec/mongoid/scopable_spec.rb +121 -37
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +31 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +2 -0
- data/spec/mongoid/tasks/database_spec.rb +2 -0
- data/spec/mongoid/threaded_spec.rb +4 -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 +398 -6
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +296 -33
- data/spec/mongoid/touchable_spec_models.rb +57 -0
- data/spec/mongoid/traversable_spec.rb +1160 -1
- data/spec/mongoid/validatable/associated_spec.rb +15 -30
- 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 +128 -98
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +3 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +5 -3
- data/spec/rails/mongoid_spec.rb +8 -18
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/cluster_config.rb +14 -4
- data/spec/shared/lib/mrss/constraints.rb +51 -27
- data/spec/shared/lib/mrss/docker_runner.rb +37 -4
- 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 +48 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -18
- 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 +18 -1
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +156 -66
- 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 +2 -1
- data/spec/shared/shlib/server.sh +171 -45
- data/spec/shared/shlib/set_env.sh +47 -6
- data/spec/spec_helper.rb +38 -36
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +39 -8
- data/spec/support/expectations.rb +5 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +77 -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 -0
- 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 +9 -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 +2 -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 +2 -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/crate.rb +12 -0
- data/spec/{app → support}/models/customer.rb +0 -1
- data/spec/{app → support}/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- 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/{app → support}/models/minim.rb +0 -1
- 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 +12 -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 +23 -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 +2 -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/support/models/purse.rb +9 -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/{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 +12 -3
- data.tar.gz.sig +0 -0
- metadata +1162 -764
- 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 -28
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -119
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/eq.rb +0 -22
- 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/other_owner_object.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/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 -137
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/eq_spec.rb +0 -48
- 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/support/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test4.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
|
|
@@ -567,21 +578,13 @@ describe Mongoid::Interceptable do
|
|
|
567
578
|
band.notes.push(note)
|
|
568
579
|
record.notes.push(note)
|
|
569
580
|
end
|
|
570
|
-
|
|
571
|
-
context "when saving the root" do
|
|
572
|
-
|
|
573
|
-
it "only executes the callbacks once for each embed" do
|
|
574
|
-
expect(note).to receive(:update_saved).twice
|
|
575
|
-
band.save
|
|
576
|
-
end
|
|
577
|
-
end
|
|
578
581
|
end
|
|
579
582
|
end
|
|
580
583
|
|
|
581
584
|
context "when cascading after initialize" do
|
|
582
585
|
|
|
583
586
|
let!(:person) do
|
|
584
|
-
Person.create
|
|
587
|
+
Person.create!
|
|
585
588
|
end
|
|
586
589
|
|
|
587
590
|
before do
|
|
@@ -620,7 +623,7 @@ describe Mongoid::Interceptable do
|
|
|
620
623
|
end
|
|
621
624
|
|
|
622
625
|
before do
|
|
623
|
-
band.save
|
|
626
|
+
band.save!
|
|
624
627
|
end
|
|
625
628
|
|
|
626
629
|
it "executes the callback" do
|
|
@@ -631,7 +634,7 @@ describe Mongoid::Interceptable do
|
|
|
631
634
|
context "when the parent is persisted" do
|
|
632
635
|
|
|
633
636
|
let(:band) do
|
|
634
|
-
Band.create(name: "Moderat")
|
|
637
|
+
Band.create!(name: "Moderat")
|
|
635
638
|
end
|
|
636
639
|
|
|
637
640
|
let!(:label) do
|
|
@@ -639,7 +642,7 @@ describe Mongoid::Interceptable do
|
|
|
639
642
|
end
|
|
640
643
|
|
|
641
644
|
before do
|
|
642
|
-
band.save
|
|
645
|
+
band.save!
|
|
643
646
|
end
|
|
644
647
|
|
|
645
648
|
it "executes the callback" do
|
|
@@ -651,7 +654,7 @@ describe Mongoid::Interceptable do
|
|
|
651
654
|
context "when the child is persisted" do
|
|
652
655
|
|
|
653
656
|
let(:band) do
|
|
654
|
-
Band.create(name: "Moderat")
|
|
657
|
+
Band.create!(name: "Moderat")
|
|
655
658
|
end
|
|
656
659
|
|
|
657
660
|
let!(:label) do
|
|
@@ -660,7 +663,7 @@ describe Mongoid::Interceptable do
|
|
|
660
663
|
|
|
661
664
|
before do
|
|
662
665
|
label.after_create_called = false
|
|
663
|
-
band.save
|
|
666
|
+
band.save!
|
|
664
667
|
end
|
|
665
668
|
|
|
666
669
|
it "does not execute the callback" do
|
|
@@ -684,7 +687,7 @@ describe Mongoid::Interceptable do
|
|
|
684
687
|
end
|
|
685
688
|
|
|
686
689
|
before do
|
|
687
|
-
band.save
|
|
690
|
+
band.save!
|
|
688
691
|
end
|
|
689
692
|
|
|
690
693
|
it "executes the callback" do
|
|
@@ -695,7 +698,7 @@ describe Mongoid::Interceptable do
|
|
|
695
698
|
context "when the parent is persisted" do
|
|
696
699
|
|
|
697
700
|
let(:band) do
|
|
698
|
-
Band.create(name: "Moderat")
|
|
701
|
+
Band.create!(name: "Moderat")
|
|
699
702
|
end
|
|
700
703
|
|
|
701
704
|
let!(:label) do
|
|
@@ -703,7 +706,7 @@ describe Mongoid::Interceptable do
|
|
|
703
706
|
end
|
|
704
707
|
|
|
705
708
|
before do
|
|
706
|
-
band.save
|
|
709
|
+
band.save!
|
|
707
710
|
end
|
|
708
711
|
|
|
709
712
|
it "executes the callback" do
|
|
@@ -715,7 +718,7 @@ describe Mongoid::Interceptable do
|
|
|
715
718
|
context "when the child is persisted" do
|
|
716
719
|
|
|
717
720
|
let(:band) do
|
|
718
|
-
Band.create(name: "Moderat")
|
|
721
|
+
Band.create!(name: "Moderat")
|
|
719
722
|
end
|
|
720
723
|
|
|
721
724
|
let!(:label) do
|
|
@@ -723,7 +726,7 @@ describe Mongoid::Interceptable do
|
|
|
723
726
|
end
|
|
724
727
|
|
|
725
728
|
before do
|
|
726
|
-
band.save
|
|
729
|
+
band.save!
|
|
727
730
|
end
|
|
728
731
|
|
|
729
732
|
it "executes the callback" do
|
|
@@ -747,7 +750,7 @@ describe Mongoid::Interceptable do
|
|
|
747
750
|
end
|
|
748
751
|
|
|
749
752
|
before do
|
|
750
|
-
band.save
|
|
753
|
+
band.save!
|
|
751
754
|
end
|
|
752
755
|
|
|
753
756
|
it "does not execute the callback" do
|
|
@@ -758,7 +761,7 @@ describe Mongoid::Interceptable do
|
|
|
758
761
|
context "when the parent is persisted" do
|
|
759
762
|
|
|
760
763
|
let(:band) do
|
|
761
|
-
Band.create(name: "Moderat")
|
|
764
|
+
Band.create!(name: "Moderat")
|
|
762
765
|
end
|
|
763
766
|
|
|
764
767
|
let!(:label) do
|
|
@@ -766,7 +769,7 @@ describe Mongoid::Interceptable do
|
|
|
766
769
|
end
|
|
767
770
|
|
|
768
771
|
before do
|
|
769
|
-
band.save
|
|
772
|
+
band.save!
|
|
770
773
|
end
|
|
771
774
|
|
|
772
775
|
it "does not execute the callback" do
|
|
@@ -778,7 +781,7 @@ describe Mongoid::Interceptable do
|
|
|
778
781
|
context "when the child is persisted" do
|
|
779
782
|
|
|
780
783
|
let(:band) do
|
|
781
|
-
Band.create(name: "Moderat")
|
|
784
|
+
Band.create!(name: "Moderat")
|
|
782
785
|
end
|
|
783
786
|
|
|
784
787
|
context "when the child is dirty" do
|
|
@@ -789,7 +792,7 @@ describe Mongoid::Interceptable do
|
|
|
789
792
|
|
|
790
793
|
before do
|
|
791
794
|
label.name = "Nothing"
|
|
792
|
-
band.save
|
|
795
|
+
band.save!
|
|
793
796
|
end
|
|
794
797
|
|
|
795
798
|
it "executes the callback" do
|
|
@@ -804,7 +807,7 @@ describe Mongoid::Interceptable do
|
|
|
804
807
|
end
|
|
805
808
|
|
|
806
809
|
before do
|
|
807
|
-
band.save
|
|
810
|
+
band.save!
|
|
808
811
|
end
|
|
809
812
|
|
|
810
813
|
it "does not execute the callback" do
|
|
@@ -829,7 +832,7 @@ describe Mongoid::Interceptable do
|
|
|
829
832
|
end
|
|
830
833
|
|
|
831
834
|
before do
|
|
832
|
-
band.save
|
|
835
|
+
band.save!
|
|
833
836
|
end
|
|
834
837
|
|
|
835
838
|
it "executes the callback" do
|
|
@@ -840,7 +843,7 @@ describe Mongoid::Interceptable do
|
|
|
840
843
|
context "when the parent is persisted" do
|
|
841
844
|
|
|
842
845
|
let(:band) do
|
|
843
|
-
Band.create(name: "Moderat")
|
|
846
|
+
Band.create!(name: "Moderat")
|
|
844
847
|
end
|
|
845
848
|
|
|
846
849
|
let!(:label) do
|
|
@@ -848,7 +851,7 @@ describe Mongoid::Interceptable do
|
|
|
848
851
|
end
|
|
849
852
|
|
|
850
853
|
before do
|
|
851
|
-
band.save
|
|
854
|
+
band.save!
|
|
852
855
|
end
|
|
853
856
|
|
|
854
857
|
it "executes the callback" do
|
|
@@ -860,7 +863,7 @@ describe Mongoid::Interceptable do
|
|
|
860
863
|
context "when the child is persisted" do
|
|
861
864
|
|
|
862
865
|
let(:band) do
|
|
863
|
-
Band.create(name: "Moderat")
|
|
866
|
+
Band.create!(name: "Moderat")
|
|
864
867
|
end
|
|
865
868
|
|
|
866
869
|
let!(:label) do
|
|
@@ -868,7 +871,7 @@ describe Mongoid::Interceptable do
|
|
|
868
871
|
end
|
|
869
872
|
|
|
870
873
|
before do
|
|
871
|
-
band.save
|
|
874
|
+
band.save!
|
|
872
875
|
end
|
|
873
876
|
|
|
874
877
|
it "executes the callback" do
|
|
@@ -892,7 +895,7 @@ describe Mongoid::Interceptable do
|
|
|
892
895
|
end
|
|
893
896
|
|
|
894
897
|
before do
|
|
895
|
-
band.save
|
|
898
|
+
band.save!
|
|
896
899
|
end
|
|
897
900
|
|
|
898
901
|
it "executes the callback" do
|
|
@@ -903,7 +906,7 @@ describe Mongoid::Interceptable do
|
|
|
903
906
|
context "when the parent is persisted" do
|
|
904
907
|
|
|
905
908
|
let(:band) do
|
|
906
|
-
Band.create(name: "Moderat")
|
|
909
|
+
Band.create!(name: "Moderat")
|
|
907
910
|
end
|
|
908
911
|
|
|
909
912
|
let!(:record) do
|
|
@@ -911,7 +914,7 @@ describe Mongoid::Interceptable do
|
|
|
911
914
|
end
|
|
912
915
|
|
|
913
916
|
before do
|
|
914
|
-
band.save
|
|
917
|
+
band.save!
|
|
915
918
|
end
|
|
916
919
|
|
|
917
920
|
it "executes the callback" do
|
|
@@ -923,16 +926,16 @@ describe Mongoid::Interceptable do
|
|
|
923
926
|
context "when the child is persisted" do
|
|
924
927
|
|
|
925
928
|
let(:band) do
|
|
926
|
-
Band.create(name: "Moderat")
|
|
929
|
+
Band.create!(name: "Moderat")
|
|
927
930
|
end
|
|
928
931
|
|
|
929
932
|
let!(:record) do
|
|
930
|
-
band.records.create(name: "Moderat")
|
|
933
|
+
band.records.create!(name: "Moderat")
|
|
931
934
|
end
|
|
932
935
|
|
|
933
936
|
before do
|
|
934
937
|
record.before_create_called = false
|
|
935
|
-
band.save
|
|
938
|
+
band.save!
|
|
936
939
|
end
|
|
937
940
|
|
|
938
941
|
it "does not execute the callback" do
|
|
@@ -956,7 +959,7 @@ describe Mongoid::Interceptable do
|
|
|
956
959
|
end
|
|
957
960
|
|
|
958
961
|
before do
|
|
959
|
-
band.save
|
|
962
|
+
band.save!
|
|
960
963
|
end
|
|
961
964
|
|
|
962
965
|
it "executes the callback" do
|
|
@@ -971,7 +974,7 @@ describe Mongoid::Interceptable do
|
|
|
971
974
|
context "when the parent is persisted" do
|
|
972
975
|
|
|
973
976
|
let(:band) do
|
|
974
|
-
Band.create(name: "Moderat")
|
|
977
|
+
Band.create!(name: "Moderat")
|
|
975
978
|
end
|
|
976
979
|
|
|
977
980
|
let!(:record) do
|
|
@@ -979,7 +982,7 @@ describe Mongoid::Interceptable do
|
|
|
979
982
|
end
|
|
980
983
|
|
|
981
984
|
before do
|
|
982
|
-
band.save
|
|
985
|
+
band.save!
|
|
983
986
|
end
|
|
984
987
|
|
|
985
988
|
it "executes the callback" do
|
|
@@ -995,15 +998,15 @@ describe Mongoid::Interceptable do
|
|
|
995
998
|
context "when the child is persisted" do
|
|
996
999
|
|
|
997
1000
|
let(:band) do
|
|
998
|
-
Band.create(name: "Moderat")
|
|
1001
|
+
Band.create!(name: "Moderat")
|
|
999
1002
|
end
|
|
1000
1003
|
|
|
1001
1004
|
let!(:record) do
|
|
1002
|
-
band.records.create(name: "Moderat")
|
|
1005
|
+
band.records.create!(name: "Moderat")
|
|
1003
1006
|
end
|
|
1004
1007
|
|
|
1005
1008
|
before do
|
|
1006
|
-
band.save
|
|
1009
|
+
band.save!
|
|
1007
1010
|
end
|
|
1008
1011
|
|
|
1009
1012
|
it "executes the callback" do
|
|
@@ -1018,7 +1021,7 @@ describe Mongoid::Interceptable do
|
|
|
1018
1021
|
context "when the child is created" do
|
|
1019
1022
|
|
|
1020
1023
|
let!(:band) do
|
|
1021
|
-
Band.create
|
|
1024
|
+
Band.create!
|
|
1022
1025
|
end
|
|
1023
1026
|
|
|
1024
1027
|
let!(:label) do
|
|
@@ -1046,7 +1049,7 @@ describe Mongoid::Interceptable do
|
|
|
1046
1049
|
end
|
|
1047
1050
|
|
|
1048
1051
|
before do
|
|
1049
|
-
band.save
|
|
1052
|
+
band.save!
|
|
1050
1053
|
end
|
|
1051
1054
|
|
|
1052
1055
|
it "does not execute the callback" do
|
|
@@ -1057,7 +1060,7 @@ describe Mongoid::Interceptable do
|
|
|
1057
1060
|
context "when the parent is persisted" do
|
|
1058
1061
|
|
|
1059
1062
|
let(:band) do
|
|
1060
|
-
Band.create(name: "Moderat")
|
|
1063
|
+
Band.create!(name: "Moderat")
|
|
1061
1064
|
end
|
|
1062
1065
|
|
|
1063
1066
|
let!(:record) do
|
|
@@ -1065,7 +1068,7 @@ describe Mongoid::Interceptable do
|
|
|
1065
1068
|
end
|
|
1066
1069
|
|
|
1067
1070
|
before do
|
|
1068
|
-
band.save
|
|
1071
|
+
band.save!
|
|
1069
1072
|
end
|
|
1070
1073
|
|
|
1071
1074
|
it "does not execute the callback" do
|
|
@@ -1077,18 +1080,18 @@ describe Mongoid::Interceptable do
|
|
|
1077
1080
|
context "when the child is persisted" do
|
|
1078
1081
|
|
|
1079
1082
|
let(:band) do
|
|
1080
|
-
Band.create(name: "Moderat")
|
|
1083
|
+
Band.create!(name: "Moderat")
|
|
1081
1084
|
end
|
|
1082
1085
|
|
|
1083
1086
|
let!(:record) do
|
|
1084
|
-
band.records.create(name: "Moderat")
|
|
1087
|
+
band.records.create!(name: "Moderat")
|
|
1085
1088
|
end
|
|
1086
1089
|
|
|
1087
1090
|
context "when the child is dirty" do
|
|
1088
1091
|
|
|
1089
1092
|
before do
|
|
1090
1093
|
record.name = "Nothing"
|
|
1091
|
-
band.save
|
|
1094
|
+
band.save!
|
|
1092
1095
|
end
|
|
1093
1096
|
|
|
1094
1097
|
it "executes the callback" do
|
|
@@ -1103,7 +1106,7 @@ describe Mongoid::Interceptable do
|
|
|
1103
1106
|
context "when the child is not dirty" do
|
|
1104
1107
|
|
|
1105
1108
|
before do
|
|
1106
|
-
band.save
|
|
1109
|
+
band.save!
|
|
1107
1110
|
end
|
|
1108
1111
|
|
|
1109
1112
|
it "does not execute the callback" do
|
|
@@ -1128,7 +1131,7 @@ describe Mongoid::Interceptable do
|
|
|
1128
1131
|
end
|
|
1129
1132
|
|
|
1130
1133
|
before do
|
|
1131
|
-
band.save
|
|
1134
|
+
band.save!
|
|
1132
1135
|
end
|
|
1133
1136
|
|
|
1134
1137
|
it "executes the callback" do
|
|
@@ -1143,7 +1146,7 @@ describe Mongoid::Interceptable do
|
|
|
1143
1146
|
context "when the parent is persisted" do
|
|
1144
1147
|
|
|
1145
1148
|
let(:band) do
|
|
1146
|
-
Band.create(name: "Moderat")
|
|
1149
|
+
Band.create!(name: "Moderat")
|
|
1147
1150
|
end
|
|
1148
1151
|
|
|
1149
1152
|
let!(:record) do
|
|
@@ -1151,7 +1154,7 @@ describe Mongoid::Interceptable do
|
|
|
1151
1154
|
end
|
|
1152
1155
|
|
|
1153
1156
|
before do
|
|
1154
|
-
band.save
|
|
1157
|
+
band.save!
|
|
1155
1158
|
end
|
|
1156
1159
|
|
|
1157
1160
|
it "executes the callback" do
|
|
@@ -1166,7 +1169,7 @@ describe Mongoid::Interceptable do
|
|
|
1166
1169
|
context 'when the parent is updated' do
|
|
1167
1170
|
|
|
1168
1171
|
let(:band) do
|
|
1169
|
-
Band.create(name: "Moderat")
|
|
1172
|
+
Band.create!(name: "Moderat")
|
|
1170
1173
|
end
|
|
1171
1174
|
|
|
1172
1175
|
before do
|
|
@@ -1186,7 +1189,7 @@ describe Mongoid::Interceptable do
|
|
|
1186
1189
|
context 'when the parent is updated' do
|
|
1187
1190
|
|
|
1188
1191
|
let(:band) do
|
|
1189
|
-
Band.create(name: "Moderat")
|
|
1192
|
+
Band.create!(name: "Moderat")
|
|
1190
1193
|
end
|
|
1191
1194
|
|
|
1192
1195
|
before do
|
|
@@ -1205,15 +1208,15 @@ describe Mongoid::Interceptable do
|
|
|
1205
1208
|
context "when the child is persisted" do
|
|
1206
1209
|
|
|
1207
1210
|
let(:band) do
|
|
1208
|
-
Band.create(name: "Moderat")
|
|
1211
|
+
Band.create!(name: "Moderat")
|
|
1209
1212
|
end
|
|
1210
1213
|
|
|
1211
1214
|
let!(:record) do
|
|
1212
|
-
band.records.create(name: "Moderat")
|
|
1215
|
+
band.records.create!(name: "Moderat")
|
|
1213
1216
|
end
|
|
1214
1217
|
|
|
1215
1218
|
before do
|
|
1216
|
-
band.save
|
|
1219
|
+
band.save!
|
|
1217
1220
|
end
|
|
1218
1221
|
|
|
1219
1222
|
it "executes the callback" do
|
|
@@ -1248,7 +1251,7 @@ describe Mongoid::Interceptable do
|
|
|
1248
1251
|
end
|
|
1249
1252
|
|
|
1250
1253
|
before do
|
|
1251
|
-
band.save
|
|
1254
|
+
band.save!
|
|
1252
1255
|
end
|
|
1253
1256
|
|
|
1254
1257
|
it "executes the callback" do
|
|
@@ -1259,7 +1262,7 @@ describe Mongoid::Interceptable do
|
|
|
1259
1262
|
context "when the root is persisted" do
|
|
1260
1263
|
|
|
1261
1264
|
let(:band) do
|
|
1262
|
-
Band.create(name: "Moderat")
|
|
1265
|
+
Band.create!(name: "Moderat")
|
|
1263
1266
|
end
|
|
1264
1267
|
|
|
1265
1268
|
let!(:record) do
|
|
@@ -1271,7 +1274,7 @@ describe Mongoid::Interceptable do
|
|
|
1271
1274
|
end
|
|
1272
1275
|
|
|
1273
1276
|
before do
|
|
1274
|
-
band.save
|
|
1277
|
+
band.save!
|
|
1275
1278
|
end
|
|
1276
1279
|
|
|
1277
1280
|
it "executes the callback" do
|
|
@@ -1283,20 +1286,20 @@ describe Mongoid::Interceptable do
|
|
|
1283
1286
|
context "when the child is persisted" do
|
|
1284
1287
|
|
|
1285
1288
|
let(:band) do
|
|
1286
|
-
Band.create(name: "Moderat")
|
|
1289
|
+
Band.create!(name: "Moderat")
|
|
1287
1290
|
end
|
|
1288
1291
|
|
|
1289
1292
|
let!(:record) do
|
|
1290
|
-
band.records.create(name: "Moderat")
|
|
1293
|
+
band.records.create!(name: "Moderat")
|
|
1291
1294
|
end
|
|
1292
1295
|
|
|
1293
1296
|
let!(:track) do
|
|
1294
|
-
record.tracks.create(name: "Berlin")
|
|
1297
|
+
record.tracks.create!(name: "Berlin")
|
|
1295
1298
|
end
|
|
1296
1299
|
|
|
1297
1300
|
before do
|
|
1298
1301
|
track.before_create_called = false
|
|
1299
|
-
band.save
|
|
1302
|
+
band.save!
|
|
1300
1303
|
end
|
|
1301
1304
|
|
|
1302
1305
|
it "does not execute the callback" do
|
|
@@ -1324,7 +1327,7 @@ describe Mongoid::Interceptable do
|
|
|
1324
1327
|
end
|
|
1325
1328
|
|
|
1326
1329
|
before do
|
|
1327
|
-
band.save
|
|
1330
|
+
band.save!
|
|
1328
1331
|
end
|
|
1329
1332
|
|
|
1330
1333
|
let(:reloaded) do
|
|
@@ -1343,7 +1346,7 @@ describe Mongoid::Interceptable do
|
|
|
1343
1346
|
context "when the parent is persisted" do
|
|
1344
1347
|
|
|
1345
1348
|
let(:band) do
|
|
1346
|
-
Band.create(name: "Moderat")
|
|
1349
|
+
Band.create!(name: "Moderat")
|
|
1347
1350
|
end
|
|
1348
1351
|
|
|
1349
1352
|
let!(:record) do
|
|
@@ -1355,7 +1358,7 @@ describe Mongoid::Interceptable do
|
|
|
1355
1358
|
end
|
|
1356
1359
|
|
|
1357
1360
|
before do
|
|
1358
|
-
band.save
|
|
1361
|
+
band.save!
|
|
1359
1362
|
end
|
|
1360
1363
|
|
|
1361
1364
|
let(:reloaded) do
|
|
@@ -1375,19 +1378,19 @@ describe Mongoid::Interceptable do
|
|
|
1375
1378
|
context "when the child is persisted" do
|
|
1376
1379
|
|
|
1377
1380
|
let(:band) do
|
|
1378
|
-
Band.create(name: "Moderat")
|
|
1381
|
+
Band.create!(name: "Moderat")
|
|
1379
1382
|
end
|
|
1380
1383
|
|
|
1381
1384
|
let!(:record) do
|
|
1382
|
-
band.records.create(name: "Moderat")
|
|
1385
|
+
band.records.create!(name: "Moderat")
|
|
1383
1386
|
end
|
|
1384
1387
|
|
|
1385
1388
|
let!(:track) do
|
|
1386
|
-
record.tracks.create(name: "Berlin")
|
|
1389
|
+
record.tracks.create!(name: "Berlin")
|
|
1387
1390
|
end
|
|
1388
1391
|
|
|
1389
1392
|
before do
|
|
1390
|
-
band.save
|
|
1393
|
+
band.save!
|
|
1391
1394
|
end
|
|
1392
1395
|
|
|
1393
1396
|
let(:reloaded) do
|
|
@@ -1423,7 +1426,7 @@ describe Mongoid::Interceptable do
|
|
|
1423
1426
|
end
|
|
1424
1427
|
|
|
1425
1428
|
before do
|
|
1426
|
-
band.save
|
|
1429
|
+
band.save!
|
|
1427
1430
|
end
|
|
1428
1431
|
|
|
1429
1432
|
it "does not execute the callback" do
|
|
@@ -1434,7 +1437,7 @@ describe Mongoid::Interceptable do
|
|
|
1434
1437
|
context "when the parent is persisted" do
|
|
1435
1438
|
|
|
1436
1439
|
let(:band) do
|
|
1437
|
-
Band.create(name: "Moderat")
|
|
1440
|
+
Band.create!(name: "Moderat")
|
|
1438
1441
|
end
|
|
1439
1442
|
|
|
1440
1443
|
let!(:record) do
|
|
@@ -1446,7 +1449,7 @@ describe Mongoid::Interceptable do
|
|
|
1446
1449
|
end
|
|
1447
1450
|
|
|
1448
1451
|
before do
|
|
1449
|
-
band.save
|
|
1452
|
+
band.save!
|
|
1450
1453
|
end
|
|
1451
1454
|
|
|
1452
1455
|
it "does not execute the callback" do
|
|
@@ -1458,22 +1461,22 @@ describe Mongoid::Interceptable do
|
|
|
1458
1461
|
context "when the child is persisted" do
|
|
1459
1462
|
|
|
1460
1463
|
let(:band) do
|
|
1461
|
-
Band.create(name: "Moderat")
|
|
1464
|
+
Band.create!(name: "Moderat")
|
|
1462
1465
|
end
|
|
1463
1466
|
|
|
1464
1467
|
let!(:record) do
|
|
1465
|
-
band.records.create(name: "Moderat")
|
|
1468
|
+
band.records.create!(name: "Moderat")
|
|
1466
1469
|
end
|
|
1467
1470
|
|
|
1468
1471
|
let!(:track) do
|
|
1469
|
-
record.tracks.create(name: "Berlin")
|
|
1472
|
+
record.tracks.create!(name: "Berlin")
|
|
1470
1473
|
end
|
|
1471
1474
|
|
|
1472
1475
|
context "when the child is dirty" do
|
|
1473
1476
|
|
|
1474
1477
|
before do
|
|
1475
1478
|
track.name = "Rusty Nails"
|
|
1476
|
-
band.save
|
|
1479
|
+
band.save!
|
|
1477
1480
|
end
|
|
1478
1481
|
|
|
1479
1482
|
let(:reloaded) do
|
|
@@ -1492,7 +1495,7 @@ describe Mongoid::Interceptable do
|
|
|
1492
1495
|
context "when the child is not dirty" do
|
|
1493
1496
|
|
|
1494
1497
|
before do
|
|
1495
|
-
band.save
|
|
1498
|
+
band.save!
|
|
1496
1499
|
end
|
|
1497
1500
|
|
|
1498
1501
|
it "does not execute the callback" do
|
|
@@ -1540,7 +1543,7 @@ describe Mongoid::Interceptable do
|
|
|
1540
1543
|
end
|
|
1541
1544
|
|
|
1542
1545
|
before do
|
|
1543
|
-
band.save
|
|
1546
|
+
band.save!
|
|
1544
1547
|
end
|
|
1545
1548
|
|
|
1546
1549
|
it "executes the callback" do
|
|
@@ -1551,7 +1554,7 @@ describe Mongoid::Interceptable do
|
|
|
1551
1554
|
context "when the parent is persisted" do
|
|
1552
1555
|
|
|
1553
1556
|
let(:band) do
|
|
1554
|
-
Band.create(name: "Moderat")
|
|
1557
|
+
Band.create!(name: "Moderat")
|
|
1555
1558
|
end
|
|
1556
1559
|
|
|
1557
1560
|
let!(:record) do
|
|
@@ -1563,7 +1566,7 @@ describe Mongoid::Interceptable do
|
|
|
1563
1566
|
end
|
|
1564
1567
|
|
|
1565
1568
|
before do
|
|
1566
|
-
band.save
|
|
1569
|
+
band.save!
|
|
1567
1570
|
end
|
|
1568
1571
|
|
|
1569
1572
|
it "executes the callback" do
|
|
@@ -1575,19 +1578,19 @@ describe Mongoid::Interceptable do
|
|
|
1575
1578
|
context "when the child is persisted" do
|
|
1576
1579
|
|
|
1577
1580
|
let(:band) do
|
|
1578
|
-
Band.create(name: "Moderat")
|
|
1581
|
+
Band.create!(name: "Moderat")
|
|
1579
1582
|
end
|
|
1580
1583
|
|
|
1581
1584
|
let!(:record) do
|
|
1582
|
-
band.records.create(name: "Moderat")
|
|
1585
|
+
band.records.create!(name: "Moderat")
|
|
1583
1586
|
end
|
|
1584
1587
|
|
|
1585
1588
|
let!(:track) do
|
|
1586
|
-
record.tracks.create(name: "Berlin")
|
|
1589
|
+
record.tracks.create!(name: "Berlin")
|
|
1587
1590
|
end
|
|
1588
1591
|
|
|
1589
1592
|
before do
|
|
1590
|
-
band.save
|
|
1593
|
+
band.save!
|
|
1591
1594
|
end
|
|
1592
1595
|
|
|
1593
1596
|
it "executes the callback" do
|
|
@@ -1614,11 +1617,11 @@ describe Mongoid::Interceptable do
|
|
|
1614
1617
|
end
|
|
1615
1618
|
|
|
1616
1619
|
before do
|
|
1617
|
-
parent.save
|
|
1620
|
+
parent.save!
|
|
1618
1621
|
end
|
|
1619
1622
|
|
|
1620
1623
|
it "does not duplicate the child documents" do
|
|
1621
|
-
parent.children.create(position: 1)
|
|
1624
|
+
parent.children.create!(position: 1)
|
|
1622
1625
|
expect(ParentDoc.find(parent.id).children.size).to eq(1)
|
|
1623
1626
|
end
|
|
1624
1627
|
end
|
|
@@ -1669,7 +1672,7 @@ describe Mongoid::Interceptable do
|
|
|
1669
1672
|
context "when updating a document" do
|
|
1670
1673
|
|
|
1671
1674
|
let(:person) do
|
|
1672
|
-
Person.create
|
|
1675
|
+
Person.create!.tap do |person|
|
|
1673
1676
|
person.attributes = {
|
|
1674
1677
|
mode: :prevent_save,
|
|
1675
1678
|
title: "Associate",
|
|
@@ -1703,8 +1706,8 @@ describe Mongoid::Interceptable do
|
|
|
1703
1706
|
context "when loading a model multiple times" do
|
|
1704
1707
|
|
|
1705
1708
|
before do
|
|
1706
|
-
load "
|
|
1707
|
-
load "
|
|
1709
|
+
load File.join(MODELS, "callback_test.rb")
|
|
1710
|
+
load File.join(MODELS, "callback_test.rb")
|
|
1708
1711
|
end
|
|
1709
1712
|
|
|
1710
1713
|
let(:callback) do
|
|
@@ -1719,4 +1722,853 @@ describe Mongoid::Interceptable do
|
|
|
1719
1722
|
end
|
|
1720
1723
|
end
|
|
1721
1724
|
end
|
|
1725
|
+
|
|
1726
|
+
context 'when creating a parent and embedded child' do
|
|
1727
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1728
|
+
let(:parent) do
|
|
1729
|
+
InterceptableSpec::CbParent.new(registry).tap do |parent|
|
|
1730
|
+
parent.cb_children << InterceptableSpec::CbChild.new(registry, cb_parent: parent)
|
|
1731
|
+
end
|
|
1732
|
+
end
|
|
1733
|
+
|
|
1734
|
+
let(:expected) do
|
|
1735
|
+
[
|
|
1736
|
+
[InterceptableSpec::CbParent, :before_validation],
|
|
1737
|
+
[InterceptableSpec::CbChild, :before_validation],
|
|
1738
|
+
[InterceptableSpec::CbChild, :after_validation],
|
|
1739
|
+
[InterceptableSpec::CbParent, :after_validation],
|
|
1740
|
+
[InterceptableSpec::CbParent, :before_save],
|
|
1741
|
+
[InterceptableSpec::CbParent, :around_save_open],
|
|
1742
|
+
[InterceptableSpec::CbParent, :before_create],
|
|
1743
|
+
[InterceptableSpec::CbParent, :around_create_open],
|
|
1744
|
+
[InterceptableSpec::CbParent, :around_create_close],
|
|
1745
|
+
[InterceptableSpec::CbParent, :after_create],
|
|
1746
|
+
[InterceptableSpec::CbParent, :around_save_close],
|
|
1747
|
+
[InterceptableSpec::CbParent, :after_save],
|
|
1748
|
+
]
|
|
1749
|
+
end
|
|
1750
|
+
|
|
1751
|
+
it 'calls callbacks in the right order' do
|
|
1752
|
+
parent.save!
|
|
1753
|
+
expect(registry.calls).to eq expected
|
|
1754
|
+
end
|
|
1755
|
+
end
|
|
1756
|
+
|
|
1757
|
+
context 'when creating a parent and embedded child with cascading callbacks' do
|
|
1758
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1759
|
+
let(:parent) do
|
|
1760
|
+
InterceptableSpec::CbParent.new(registry).tap do |parent|
|
|
1761
|
+
parent.cb_cascaded_children <<
|
|
1762
|
+
InterceptableSpec::CbCascadedChild.new(registry, cb_parent: parent)
|
|
1763
|
+
end
|
|
1764
|
+
end
|
|
1765
|
+
|
|
1766
|
+
context 'with around callbacks' do
|
|
1767
|
+
config_override :around_callbacks_for_embeds, true
|
|
1768
|
+
|
|
1769
|
+
let(:expected) do
|
|
1770
|
+
[
|
|
1771
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1772
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1773
|
+
[InterceptableSpec::CbParent, :before_validation],
|
|
1774
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1775
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1776
|
+
|
|
1777
|
+
[InterceptableSpec::CbParent, :after_validation],
|
|
1778
|
+
[InterceptableSpec::CbParent, :before_save],
|
|
1779
|
+
[InterceptableSpec::CbParent, :around_save_open],
|
|
1780
|
+
[InterceptableSpec::CbParent, :before_create],
|
|
1781
|
+
[InterceptableSpec::CbParent, :around_create_open],
|
|
1782
|
+
|
|
1783
|
+
[InterceptableSpec::CbCascadedChild, :before_save],
|
|
1784
|
+
[InterceptableSpec::CbCascadedChild, :around_save_open],
|
|
1785
|
+
[InterceptableSpec::CbCascadedChild, :before_create],
|
|
1786
|
+
[InterceptableSpec::CbCascadedChild, :around_create_open],
|
|
1787
|
+
|
|
1788
|
+
[InterceptableSpec::CbCascadedChild, :around_create_close],
|
|
1789
|
+
[InterceptableSpec::CbCascadedChild, :after_create],
|
|
1790
|
+
[InterceptableSpec::CbCascadedChild, :around_save_close],
|
|
1791
|
+
[InterceptableSpec::CbCascadedChild, :after_save],
|
|
1792
|
+
|
|
1793
|
+
[InterceptableSpec::CbParent, :around_create_close],
|
|
1794
|
+
[InterceptableSpec::CbParent, :after_create],
|
|
1795
|
+
[InterceptableSpec::CbParent, :around_save_close],
|
|
1796
|
+
[InterceptableSpec::CbParent, :after_save]
|
|
1797
|
+
]
|
|
1798
|
+
end
|
|
1799
|
+
|
|
1800
|
+
it 'calls callbacks in the right order' do
|
|
1801
|
+
parent.save!
|
|
1802
|
+
expect(registry.calls).to eq expected
|
|
1803
|
+
end
|
|
1804
|
+
end
|
|
1805
|
+
|
|
1806
|
+
context 'without around callbacks' do
|
|
1807
|
+
config_override :around_callbacks_for_embeds, false
|
|
1808
|
+
|
|
1809
|
+
let(:expected) do
|
|
1810
|
+
[
|
|
1811
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1812
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1813
|
+
[InterceptableSpec::CbParent, :before_validation],
|
|
1814
|
+
[InterceptableSpec::CbCascadedChild, :before_validation],
|
|
1815
|
+
[InterceptableSpec::CbCascadedChild, :after_validation],
|
|
1816
|
+
|
|
1817
|
+
[InterceptableSpec::CbParent, :after_validation],
|
|
1818
|
+
[InterceptableSpec::CbParent, :before_save],
|
|
1819
|
+
[InterceptableSpec::CbParent, :around_save_open],
|
|
1820
|
+
[InterceptableSpec::CbParent, :before_create],
|
|
1821
|
+
[InterceptableSpec::CbParent, :around_create_open],
|
|
1822
|
+
|
|
1823
|
+
[InterceptableSpec::CbCascadedChild, :before_save],
|
|
1824
|
+
[InterceptableSpec::CbCascadedChild, :before_create],
|
|
1825
|
+
|
|
1826
|
+
[InterceptableSpec::CbCascadedChild, :after_create],
|
|
1827
|
+
[InterceptableSpec::CbCascadedChild, :after_save],
|
|
1828
|
+
|
|
1829
|
+
[InterceptableSpec::CbParent, :around_create_close],
|
|
1830
|
+
[InterceptableSpec::CbParent, :after_create],
|
|
1831
|
+
[InterceptableSpec::CbParent, :around_save_close],
|
|
1832
|
+
[InterceptableSpec::CbParent, :after_save]
|
|
1833
|
+
]
|
|
1834
|
+
end
|
|
1835
|
+
|
|
1836
|
+
it 'calls callbacks in the right order' do
|
|
1837
|
+
parent.save!
|
|
1838
|
+
expect(registry.calls).to eq expected
|
|
1839
|
+
end
|
|
1840
|
+
end
|
|
1841
|
+
end
|
|
1842
|
+
|
|
1843
|
+
context "with associations" do
|
|
1844
|
+
context "has_one" do
|
|
1845
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1846
|
+
|
|
1847
|
+
let(:parent) do
|
|
1848
|
+
InterceptableSpec::CbHasOneParent.new(registry).tap do |parent|
|
|
1849
|
+
parent.child = InterceptableSpec::CbHasOneChild.new(registry)
|
|
1850
|
+
end
|
|
1851
|
+
end
|
|
1852
|
+
|
|
1853
|
+
let(:expected) do
|
|
1854
|
+
[
|
|
1855
|
+
[InterceptableSpec::CbHasOneParent, :before_validation],
|
|
1856
|
+
[InterceptableSpec::CbHasOneChild, :before_validation],
|
|
1857
|
+
[InterceptableSpec::CbHasOneChild, :after_validation],
|
|
1858
|
+
[InterceptableSpec::CbHasOneParent, :after_validation],
|
|
1859
|
+
[InterceptableSpec::CbHasOneParent, :before_save],
|
|
1860
|
+
|
|
1861
|
+
[InterceptableSpec::CbHasOneParent, :around_save_open],
|
|
1862
|
+
[InterceptableSpec::CbHasOneParent, :before_create],
|
|
1863
|
+
[InterceptableSpec::CbHasOneParent, :around_create_open],
|
|
1864
|
+
|
|
1865
|
+
[InterceptableSpec::CbHasOneParent, :insert_into_database],
|
|
1866
|
+
|
|
1867
|
+
[InterceptableSpec::CbHasOneChild, :before_validation],
|
|
1868
|
+
[InterceptableSpec::CbHasOneChild, :after_validation],
|
|
1869
|
+
[InterceptableSpec::CbHasOneChild, :before_save],
|
|
1870
|
+
[InterceptableSpec::CbHasOneChild, :around_save_open],
|
|
1871
|
+
[InterceptableSpec::CbHasOneChild, :before_create],
|
|
1872
|
+
[InterceptableSpec::CbHasOneChild, :around_create_open],
|
|
1873
|
+
|
|
1874
|
+
[InterceptableSpec::CbHasOneChild, :around_create_close],
|
|
1875
|
+
[InterceptableSpec::CbHasOneChild, :after_create],
|
|
1876
|
+
[InterceptableSpec::CbHasOneChild, :around_save_close],
|
|
1877
|
+
[InterceptableSpec::CbHasOneChild, :after_save],
|
|
1878
|
+
|
|
1879
|
+
[InterceptableSpec::CbHasOneParent, :around_create_close],
|
|
1880
|
+
[InterceptableSpec::CbHasOneParent, :after_create],
|
|
1881
|
+
[InterceptableSpec::CbHasOneParent, :around_save_close],
|
|
1882
|
+
[InterceptableSpec::CbHasOneParent, :after_save],
|
|
1883
|
+
]
|
|
1884
|
+
end
|
|
1885
|
+
|
|
1886
|
+
it 'calls callbacks in the right order' do
|
|
1887
|
+
parent.save!
|
|
1888
|
+
expect(registry.calls).to eq expected
|
|
1889
|
+
end
|
|
1890
|
+
end
|
|
1891
|
+
|
|
1892
|
+
context "embeds_one" do
|
|
1893
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
1894
|
+
|
|
1895
|
+
let(:parent) do
|
|
1896
|
+
InterceptableSpec::CbEmbedsOneParent.new(registry).tap do |parent|
|
|
1897
|
+
parent.child = InterceptableSpec::CbEmbedsOneChild.new(registry)
|
|
1898
|
+
end
|
|
1899
|
+
end
|
|
1900
|
+
|
|
1901
|
+
context "create" do
|
|
1902
|
+
context "with around callbacks" do
|
|
1903
|
+
config_override :around_callbacks_for_embeds, true
|
|
1904
|
+
|
|
1905
|
+
let(:expected) do
|
|
1906
|
+
[
|
|
1907
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1908
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1909
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_validation],
|
|
1910
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1911
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1912
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_validation],
|
|
1913
|
+
|
|
1914
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_save],
|
|
1915
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_open],
|
|
1916
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_create],
|
|
1917
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_create_open],
|
|
1918
|
+
|
|
1919
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_save],
|
|
1920
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_open],
|
|
1921
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_create],
|
|
1922
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_create_open],
|
|
1923
|
+
|
|
1924
|
+
[InterceptableSpec::CbEmbedsOneParent, :insert_into_database],
|
|
1925
|
+
|
|
1926
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_create_close],
|
|
1927
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_create],
|
|
1928
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_close],
|
|
1929
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_save],
|
|
1930
|
+
|
|
1931
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_create_close],
|
|
1932
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_create],
|
|
1933
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_close],
|
|
1934
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_save]
|
|
1935
|
+
]
|
|
1936
|
+
end
|
|
1937
|
+
|
|
1938
|
+
it 'calls callbacks in the right order' do
|
|
1939
|
+
parent.save!
|
|
1940
|
+
expect(registry.calls).to eq expected
|
|
1941
|
+
end
|
|
1942
|
+
end
|
|
1943
|
+
|
|
1944
|
+
context "without around callbacks" do
|
|
1945
|
+
config_override :around_callbacks_for_embeds, false
|
|
1946
|
+
|
|
1947
|
+
let(:expected) do
|
|
1948
|
+
[
|
|
1949
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1950
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1951
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_validation],
|
|
1952
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1953
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1954
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_validation],
|
|
1955
|
+
|
|
1956
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_save],
|
|
1957
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_open],
|
|
1958
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_create],
|
|
1959
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_create_open],
|
|
1960
|
+
|
|
1961
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_save],
|
|
1962
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_create],
|
|
1963
|
+
|
|
1964
|
+
[InterceptableSpec::CbEmbedsOneParent, :insert_into_database],
|
|
1965
|
+
|
|
1966
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_create],
|
|
1967
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_save],
|
|
1968
|
+
|
|
1969
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_create_close],
|
|
1970
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_create],
|
|
1971
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_close],
|
|
1972
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_save]
|
|
1973
|
+
]
|
|
1974
|
+
end
|
|
1975
|
+
|
|
1976
|
+
it 'calls callbacks in the right order' do
|
|
1977
|
+
parent.save!
|
|
1978
|
+
expect(registry.calls).to eq expected
|
|
1979
|
+
end
|
|
1980
|
+
end
|
|
1981
|
+
end
|
|
1982
|
+
|
|
1983
|
+
context "update" do
|
|
1984
|
+
context "with around callbacks" do
|
|
1985
|
+
config_override :around_callbacks_for_embeds, true
|
|
1986
|
+
|
|
1987
|
+
let(:expected) do
|
|
1988
|
+
[
|
|
1989
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1990
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1991
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_validation],
|
|
1992
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
1993
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
1994
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_validation],
|
|
1995
|
+
|
|
1996
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_save],
|
|
1997
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_open],
|
|
1998
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_update],
|
|
1999
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_update_open],
|
|
2000
|
+
|
|
2001
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_save],
|
|
2002
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_open],
|
|
2003
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_update],
|
|
2004
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_update_open],
|
|
2005
|
+
|
|
2006
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_update_close],
|
|
2007
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_update],
|
|
2008
|
+
[InterceptableSpec::CbEmbedsOneChild, :around_save_close],
|
|
2009
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_save],
|
|
2010
|
+
|
|
2011
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_update_close],
|
|
2012
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_update],
|
|
2013
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_close],
|
|
2014
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_save]
|
|
2015
|
+
]
|
|
2016
|
+
end
|
|
2017
|
+
|
|
2018
|
+
it 'calls callbacks in the right order' do
|
|
2019
|
+
parent.callback_registry = nil
|
|
2020
|
+
parent.child.callback_registry = nil
|
|
2021
|
+
parent.save!
|
|
2022
|
+
|
|
2023
|
+
parent.callback_registry = registry
|
|
2024
|
+
parent.child.callback_registry = registry
|
|
2025
|
+
parent.name = "name"
|
|
2026
|
+
parent.child.age = 10
|
|
2027
|
+
|
|
2028
|
+
parent.save!
|
|
2029
|
+
expect(registry.calls).to eq expected
|
|
2030
|
+
end
|
|
2031
|
+
end
|
|
2032
|
+
|
|
2033
|
+
context "without around callbacks" do
|
|
2034
|
+
config_override :around_callbacks_for_embeds, false
|
|
2035
|
+
|
|
2036
|
+
let(:expected) do
|
|
2037
|
+
[
|
|
2038
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
2039
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
2040
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_validation],
|
|
2041
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_validation],
|
|
2042
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_validation],
|
|
2043
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_validation],
|
|
2044
|
+
|
|
2045
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_save],
|
|
2046
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_open],
|
|
2047
|
+
[InterceptableSpec::CbEmbedsOneParent, :before_update],
|
|
2048
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_update_open],
|
|
2049
|
+
|
|
2050
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_save],
|
|
2051
|
+
[InterceptableSpec::CbEmbedsOneChild, :before_update],
|
|
2052
|
+
|
|
2053
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_update],
|
|
2054
|
+
[InterceptableSpec::CbEmbedsOneChild, :after_save],
|
|
2055
|
+
|
|
2056
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_update_close],
|
|
2057
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_update],
|
|
2058
|
+
[InterceptableSpec::CbEmbedsOneParent, :around_save_close],
|
|
2059
|
+
[InterceptableSpec::CbEmbedsOneParent, :after_save]
|
|
2060
|
+
]
|
|
2061
|
+
end
|
|
2062
|
+
|
|
2063
|
+
it 'calls callbacks in the right order' do
|
|
2064
|
+
parent.callback_registry = nil
|
|
2065
|
+
parent.child.callback_registry = nil
|
|
2066
|
+
parent.save!
|
|
2067
|
+
|
|
2068
|
+
parent.callback_registry = registry
|
|
2069
|
+
parent.child.callback_registry = registry
|
|
2070
|
+
parent.name = "name"
|
|
2071
|
+
parent.child.age = 10
|
|
2072
|
+
|
|
2073
|
+
parent.save!
|
|
2074
|
+
expect(registry.calls).to eq expected
|
|
2075
|
+
end
|
|
2076
|
+
end
|
|
2077
|
+
end
|
|
2078
|
+
end
|
|
2079
|
+
|
|
2080
|
+
context "has_many" do
|
|
2081
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
2082
|
+
|
|
2083
|
+
let(:parent) do
|
|
2084
|
+
InterceptableSpec::CbHasManyParent.new(registry).tap do |parent|
|
|
2085
|
+
parent.children = [
|
|
2086
|
+
InterceptableSpec::CbHasManyChild.new(registry),
|
|
2087
|
+
InterceptableSpec::CbHasManyChild.new(registry)
|
|
2088
|
+
]
|
|
2089
|
+
end
|
|
2090
|
+
end
|
|
2091
|
+
|
|
2092
|
+
let(:expected) do
|
|
2093
|
+
[
|
|
2094
|
+
[InterceptableSpec::CbHasManyParent, :before_validation],
|
|
2095
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
2096
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
2097
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
2098
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
2099
|
+
[InterceptableSpec::CbHasManyParent, :after_validation],
|
|
2100
|
+
|
|
2101
|
+
[InterceptableSpec::CbHasManyParent, :before_save],
|
|
2102
|
+
[InterceptableSpec::CbHasManyParent, :around_save_open],
|
|
2103
|
+
[InterceptableSpec::CbHasManyParent, :before_create],
|
|
2104
|
+
[InterceptableSpec::CbHasManyParent, :around_create_open],
|
|
2105
|
+
|
|
2106
|
+
[InterceptableSpec::CbHasManyParent, :insert_into_database],
|
|
2107
|
+
|
|
2108
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
2109
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
2110
|
+
[InterceptableSpec::CbHasManyChild, :before_save],
|
|
2111
|
+
[InterceptableSpec::CbHasManyChild, :around_save_open],
|
|
2112
|
+
[InterceptableSpec::CbHasManyChild, :before_create],
|
|
2113
|
+
[InterceptableSpec::CbHasManyChild, :around_create_open],
|
|
2114
|
+
[InterceptableSpec::CbHasManyChild, :around_create_close],
|
|
2115
|
+
[InterceptableSpec::CbHasManyChild, :after_create],
|
|
2116
|
+
[InterceptableSpec::CbHasManyChild, :around_save_close],
|
|
2117
|
+
[InterceptableSpec::CbHasManyChild, :after_save],
|
|
2118
|
+
|
|
2119
|
+
[InterceptableSpec::CbHasManyChild, :before_validation],
|
|
2120
|
+
[InterceptableSpec::CbHasManyChild, :after_validation],
|
|
2121
|
+
[InterceptableSpec::CbHasManyChild, :before_save],
|
|
2122
|
+
[InterceptableSpec::CbHasManyChild, :around_save_open],
|
|
2123
|
+
[InterceptableSpec::CbHasManyChild, :before_create],
|
|
2124
|
+
[InterceptableSpec::CbHasManyChild, :around_create_open],
|
|
2125
|
+
[InterceptableSpec::CbHasManyChild, :around_create_close],
|
|
2126
|
+
[InterceptableSpec::CbHasManyChild, :after_create],
|
|
2127
|
+
[InterceptableSpec::CbHasManyChild, :around_save_close],
|
|
2128
|
+
[InterceptableSpec::CbHasManyChild, :after_save],
|
|
2129
|
+
|
|
2130
|
+
[InterceptableSpec::CbHasManyParent, :around_create_close],
|
|
2131
|
+
[InterceptableSpec::CbHasManyParent, :after_create],
|
|
2132
|
+
[InterceptableSpec::CbHasManyParent, :around_save_close],
|
|
2133
|
+
[InterceptableSpec::CbHasManyParent, :after_save]
|
|
2134
|
+
]
|
|
2135
|
+
end
|
|
2136
|
+
|
|
2137
|
+
it 'calls callbacks in the right order' do
|
|
2138
|
+
parent.save!
|
|
2139
|
+
expect(registry.calls).to eq expected
|
|
2140
|
+
end
|
|
2141
|
+
end
|
|
2142
|
+
|
|
2143
|
+
context "embeds_many" do
|
|
2144
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
2145
|
+
|
|
2146
|
+
let(:parent) do
|
|
2147
|
+
InterceptableSpec::CbEmbedsManyParent.new(registry).tap do |parent|
|
|
2148
|
+
parent.children = [
|
|
2149
|
+
InterceptableSpec::CbEmbedsManyChild.new(registry),
|
|
2150
|
+
InterceptableSpec::CbEmbedsManyChild.new(registry),
|
|
2151
|
+
]
|
|
2152
|
+
end
|
|
2153
|
+
end
|
|
2154
|
+
|
|
2155
|
+
context "with around callbacks" do
|
|
2156
|
+
config_override :around_callbacks_for_embeds, true
|
|
2157
|
+
|
|
2158
|
+
let(:expected) do
|
|
2159
|
+
[
|
|
2160
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2161
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2162
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2163
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2164
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_validation],
|
|
2165
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2166
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2167
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2168
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2169
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_validation],
|
|
2170
|
+
|
|
2171
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_save],
|
|
2172
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_save_open],
|
|
2173
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_create],
|
|
2174
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_create_open],
|
|
2175
|
+
|
|
2176
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_save],
|
|
2177
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_open],
|
|
2178
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_save],
|
|
2179
|
+
|
|
2180
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_open],
|
|
2181
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_create],
|
|
2182
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_open],
|
|
2183
|
+
|
|
2184
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_create],
|
|
2185
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_open],
|
|
2186
|
+
|
|
2187
|
+
[InterceptableSpec::CbEmbedsManyParent, :insert_into_database],
|
|
2188
|
+
|
|
2189
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_close],
|
|
2190
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_create],
|
|
2191
|
+
|
|
2192
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_create_close],
|
|
2193
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_create],
|
|
2194
|
+
|
|
2195
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_close],
|
|
2196
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_save],
|
|
2197
|
+
|
|
2198
|
+
[InterceptableSpec::CbEmbedsManyChild, :around_save_close],
|
|
2199
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_save],
|
|
2200
|
+
|
|
2201
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_create_close],
|
|
2202
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_create],
|
|
2203
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_save_close],
|
|
2204
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_save]
|
|
2205
|
+
]
|
|
2206
|
+
end
|
|
2207
|
+
|
|
2208
|
+
it 'calls callbacks in the right order' do
|
|
2209
|
+
parent.save!
|
|
2210
|
+
expect(registry.calls).to eq expected
|
|
2211
|
+
end
|
|
2212
|
+
end
|
|
2213
|
+
|
|
2214
|
+
context "without around callbacks" do
|
|
2215
|
+
config_override :around_callbacks_for_embeds, false
|
|
2216
|
+
|
|
2217
|
+
let(:expected) do
|
|
2218
|
+
[
|
|
2219
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2220
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2221
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2222
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2223
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_validation],
|
|
2224
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2225
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2226
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_validation],
|
|
2227
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_validation],
|
|
2228
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_validation],
|
|
2229
|
+
|
|
2230
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_save],
|
|
2231
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_save_open],
|
|
2232
|
+
[InterceptableSpec::CbEmbedsManyParent, :before_create],
|
|
2233
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_create_open],
|
|
2234
|
+
|
|
2235
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_save],
|
|
2236
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_save],
|
|
2237
|
+
|
|
2238
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_create],
|
|
2239
|
+
|
|
2240
|
+
[InterceptableSpec::CbEmbedsManyChild, :before_create],
|
|
2241
|
+
|
|
2242
|
+
[InterceptableSpec::CbEmbedsManyParent, :insert_into_database],
|
|
2243
|
+
|
|
2244
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_create],
|
|
2245
|
+
|
|
2246
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_create],
|
|
2247
|
+
|
|
2248
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_save],
|
|
2249
|
+
|
|
2250
|
+
[InterceptableSpec::CbEmbedsManyChild, :after_save],
|
|
2251
|
+
|
|
2252
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_create_close],
|
|
2253
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_create],
|
|
2254
|
+
[InterceptableSpec::CbEmbedsManyParent, :around_save_close],
|
|
2255
|
+
[InterceptableSpec::CbEmbedsManyParent, :after_save]
|
|
2256
|
+
]
|
|
2257
|
+
end
|
|
2258
|
+
|
|
2259
|
+
it 'calls callbacks in the right order' do
|
|
2260
|
+
parent.save!
|
|
2261
|
+
expect(registry.calls).to eq expected
|
|
2262
|
+
end
|
|
2263
|
+
end
|
|
2264
|
+
end
|
|
2265
|
+
end
|
|
2266
|
+
|
|
2267
|
+
context "when accessing parent document from callbacks" do
|
|
2268
|
+
shared_examples 'accesses the correct parent' do
|
|
2269
|
+
it "accesses the correct parent in after_find" do
|
|
2270
|
+
expect(from_db.after_find_player).to eq(player._id)
|
|
2271
|
+
end
|
|
2272
|
+
|
|
2273
|
+
it "accesses the correct parent in after_initialize" do
|
|
2274
|
+
expect(from_db.after_initialize_player).to eq(player._id)
|
|
2275
|
+
end
|
|
2276
|
+
|
|
2277
|
+
it "accesses the correct parent in default" do
|
|
2278
|
+
expect(from_db.after_default_player).to eq(player._id)
|
|
2279
|
+
end
|
|
2280
|
+
|
|
2281
|
+
it "accesses the correct parent in unpersisted after_initialize" do
|
|
2282
|
+
expect(unpersisted.after_initialize_player).to eq(player._id)
|
|
2283
|
+
end
|
|
2284
|
+
end
|
|
2285
|
+
|
|
2286
|
+
context "when using create methods" do
|
|
2287
|
+
|
|
2288
|
+
context "when the child is an embeds_many association" do
|
|
2289
|
+
let!(:player) do
|
|
2290
|
+
Player.create!.tap do |player|
|
|
2291
|
+
player.implants.create!
|
|
2292
|
+
end
|
|
2293
|
+
end
|
|
2294
|
+
|
|
2295
|
+
let(:unpersisted) { player.implants.first }
|
|
2296
|
+
|
|
2297
|
+
before do
|
|
2298
|
+
# The default is originally set when creating this document, and it is
|
|
2299
|
+
# subsequently persisted to the database. Therefore when we retrieve
|
|
2300
|
+
# this document from the database, this field is already set, and
|
|
2301
|
+
# the default Proc is not called. This unset is needed to allow the
|
|
2302
|
+
# default Proc to be called when the document is retrieved from the
|
|
2303
|
+
# database.
|
|
2304
|
+
Player.find(player.id).implants.first.unset(:after_default_player)
|
|
2305
|
+
end
|
|
2306
|
+
|
|
2307
|
+
let(:from_db) do
|
|
2308
|
+
Player.find(player.id).implants.first
|
|
2309
|
+
end
|
|
2310
|
+
|
|
2311
|
+
include_examples 'accesses the correct parent'
|
|
2312
|
+
end
|
|
2313
|
+
|
|
2314
|
+
context "when the child is an embeds_one association" do
|
|
2315
|
+
let!(:player) do
|
|
2316
|
+
Player.create!.tap do |player|
|
|
2317
|
+
player.create_augmentation
|
|
2318
|
+
end
|
|
2319
|
+
end
|
|
2320
|
+
|
|
2321
|
+
let(:unpersisted) { player.augmentation }
|
|
2322
|
+
|
|
2323
|
+
before do
|
|
2324
|
+
Player.find(player.id).augmentation.unset(:after_default_player)
|
|
2325
|
+
end
|
|
2326
|
+
|
|
2327
|
+
let(:from_db) do
|
|
2328
|
+
Player.find(player.id).augmentation
|
|
2329
|
+
end
|
|
2330
|
+
|
|
2331
|
+
include_examples 'accesses the correct parent'
|
|
2332
|
+
end
|
|
2333
|
+
|
|
2334
|
+
context "when the child is a has_many association" do
|
|
2335
|
+
let!(:player) do
|
|
2336
|
+
Player.create!.tap do |player|
|
|
2337
|
+
player.weapons.create!
|
|
2338
|
+
end
|
|
2339
|
+
end
|
|
2340
|
+
|
|
2341
|
+
let(:unpersisted) { player.weapons.first }
|
|
2342
|
+
|
|
2343
|
+
before do
|
|
2344
|
+
Player.find(player.id).weapons.first.unset(:after_default_player)
|
|
2345
|
+
end
|
|
2346
|
+
|
|
2347
|
+
let(:from_db) do
|
|
2348
|
+
Player.find(player.id).weapons.first
|
|
2349
|
+
end
|
|
2350
|
+
|
|
2351
|
+
include_examples 'accesses the correct parent'
|
|
2352
|
+
end
|
|
2353
|
+
|
|
2354
|
+
context "when the child is a has_one association" do
|
|
2355
|
+
let!(:player) do
|
|
2356
|
+
Player.create!.tap do |player|
|
|
2357
|
+
player.create_powerup
|
|
2358
|
+
player.save!
|
|
2359
|
+
end
|
|
2360
|
+
end
|
|
2361
|
+
|
|
2362
|
+
let(:unpersisted) { player.powerup }
|
|
2363
|
+
|
|
2364
|
+
before do
|
|
2365
|
+
Player.find(player.id).powerup.unset(:after_default_player)
|
|
2366
|
+
end
|
|
2367
|
+
|
|
2368
|
+
let(:from_db) do
|
|
2369
|
+
Player.find(player.id).powerup
|
|
2370
|
+
end
|
|
2371
|
+
|
|
2372
|
+
include_examples 'accesses the correct parent'
|
|
2373
|
+
end
|
|
2374
|
+
|
|
2375
|
+
context "when the child is a has_and_belongs_to_many association" do
|
|
2376
|
+
let!(:player) do
|
|
2377
|
+
Player.create!.tap do |player|
|
|
2378
|
+
player.shields.create!
|
|
2379
|
+
end
|
|
2380
|
+
end
|
|
2381
|
+
|
|
2382
|
+
let(:unpersisted) { player.shields.first }
|
|
2383
|
+
|
|
2384
|
+
before do
|
|
2385
|
+
Player.find(player.id).shields.unset(:after_default_player)
|
|
2386
|
+
end
|
|
2387
|
+
|
|
2388
|
+
let(:from_db) do
|
|
2389
|
+
Player.find(player.id).shields.first
|
|
2390
|
+
end
|
|
2391
|
+
|
|
2392
|
+
include_examples 'accesses the correct parent'
|
|
2393
|
+
end
|
|
2394
|
+
end
|
|
2395
|
+
|
|
2396
|
+
context "when using build methods" do
|
|
2397
|
+
|
|
2398
|
+
context "when the child is an embeds_many association" do
|
|
2399
|
+
let!(:player) do
|
|
2400
|
+
Player.create!.tap do |player|
|
|
2401
|
+
player.implants.build
|
|
2402
|
+
player.implants.first.save!
|
|
2403
|
+
end
|
|
2404
|
+
end
|
|
2405
|
+
|
|
2406
|
+
let(:unpersisted) { player.implants.first }
|
|
2407
|
+
|
|
2408
|
+
before do
|
|
2409
|
+
Player.find(player.id).implants.first.unset(:after_default_player)
|
|
2410
|
+
end
|
|
2411
|
+
|
|
2412
|
+
let(:from_db) do
|
|
2413
|
+
Player.find(player.id).implants.first
|
|
2414
|
+
end
|
|
2415
|
+
|
|
2416
|
+
include_examples 'accesses the correct parent'
|
|
2417
|
+
end
|
|
2418
|
+
|
|
2419
|
+
context "when the child is an embeds_one association" do
|
|
2420
|
+
let!(:player) do
|
|
2421
|
+
Player.create!.tap do |player|
|
|
2422
|
+
player.build_augmentation
|
|
2423
|
+
player.save!
|
|
2424
|
+
end
|
|
2425
|
+
end
|
|
2426
|
+
|
|
2427
|
+
let(:unpersisted) { player.augmentation }
|
|
2428
|
+
|
|
2429
|
+
before do
|
|
2430
|
+
Player.find(player.id).augmentation.unset(:after_default_player)
|
|
2431
|
+
end
|
|
2432
|
+
|
|
2433
|
+
let(:from_db) do
|
|
2434
|
+
Player.find(player.id).augmentation
|
|
2435
|
+
end
|
|
2436
|
+
|
|
2437
|
+
include_examples 'accesses the correct parent'
|
|
2438
|
+
end
|
|
2439
|
+
|
|
2440
|
+
context "when the child is a has_many association" do
|
|
2441
|
+
let!(:player) do
|
|
2442
|
+
Player.create!.tap do |player|
|
|
2443
|
+
player.weapons.build
|
|
2444
|
+
player.weapons.first.save!
|
|
2445
|
+
end
|
|
2446
|
+
end
|
|
2447
|
+
|
|
2448
|
+
let(:unpersisted) { player.weapons.first }
|
|
2449
|
+
|
|
2450
|
+
before do
|
|
2451
|
+
Player.find(player.id).weapons.first.unset(:after_default_player)
|
|
2452
|
+
end
|
|
2453
|
+
|
|
2454
|
+
let(:from_db) do
|
|
2455
|
+
Player.find(player.id).weapons.first
|
|
2456
|
+
end
|
|
2457
|
+
|
|
2458
|
+
include_examples 'accesses the correct parent'
|
|
2459
|
+
end
|
|
2460
|
+
|
|
2461
|
+
context "when the child is a has_one association" do
|
|
2462
|
+
let!(:player) do
|
|
2463
|
+
Player.create!.tap do |player|
|
|
2464
|
+
player.build_powerup
|
|
2465
|
+
player.powerup.save!
|
|
2466
|
+
end
|
|
2467
|
+
end
|
|
2468
|
+
|
|
2469
|
+
let(:unpersisted) { player.powerup }
|
|
2470
|
+
|
|
2471
|
+
before do
|
|
2472
|
+
Player.find(player.id).powerup.unset(:after_default_player)
|
|
2473
|
+
end
|
|
2474
|
+
|
|
2475
|
+
let(:from_db) do
|
|
2476
|
+
Player.find(player.id).powerup
|
|
2477
|
+
end
|
|
2478
|
+
|
|
2479
|
+
include_examples 'accesses the correct parent'
|
|
2480
|
+
end
|
|
2481
|
+
|
|
2482
|
+
context "when the child is a has_and_belongs_to_many association" do
|
|
2483
|
+
let!(:player) do
|
|
2484
|
+
Player.create!.tap do |player|
|
|
2485
|
+
player.shields.build
|
|
2486
|
+
player.shields.first.save!
|
|
2487
|
+
end
|
|
2488
|
+
end
|
|
2489
|
+
|
|
2490
|
+
let(:unpersisted) { player.shields.first }
|
|
2491
|
+
|
|
2492
|
+
before do
|
|
2493
|
+
Player.find(player.id).shields.unset(:after_default_player)
|
|
2494
|
+
end
|
|
2495
|
+
|
|
2496
|
+
let(:from_db) do
|
|
2497
|
+
Player.find(player.id).shields.first
|
|
2498
|
+
end
|
|
2499
|
+
|
|
2500
|
+
include_examples 'accesses the correct parent'
|
|
2501
|
+
end
|
|
2502
|
+
end
|
|
2503
|
+
end
|
|
2504
|
+
|
|
2505
|
+
context "when accessing associations in defaults" do
|
|
2506
|
+
context "when not using autobuilding" do
|
|
2507
|
+
let(:band) { InterceptableBand.create(name: "Molejo") }
|
|
2508
|
+
let(:song) { band.songs.create(name: "Cilada") }
|
|
2509
|
+
|
|
2510
|
+
it "assigns the default correctly" do
|
|
2511
|
+
expect(song.band_name).to eq("Molejo")
|
|
2512
|
+
end
|
|
2513
|
+
end
|
|
2514
|
+
|
|
2515
|
+
context "when using autobuilding" do
|
|
2516
|
+
before do
|
|
2517
|
+
InterceptablePlane.create!.tap do |plane|
|
|
2518
|
+
plane.wings.create!
|
|
2519
|
+
end
|
|
2520
|
+
end
|
|
2521
|
+
|
|
2522
|
+
let(:plane) { InterceptablePlane.first }
|
|
2523
|
+
let(:wing) { InterceptableWing.first }
|
|
2524
|
+
let(:engine) { wing.engine }
|
|
2525
|
+
|
|
2526
|
+
it "sets the defaults correctly" do
|
|
2527
|
+
expect(wing._id).to eq("hello-wing")
|
|
2528
|
+
expect(wing.p_id).to eq(plane._id.to_s)
|
|
2529
|
+
expect(wing.e_id).to eq(engine._id.to_s)
|
|
2530
|
+
expect(engine._id).to eq("hello-engine-#{wing.id}")
|
|
2531
|
+
end
|
|
2532
|
+
end
|
|
2533
|
+
end
|
|
2534
|
+
|
|
2535
|
+
# This case is rather niche. The _ids method used to use the `.only` method
|
|
2536
|
+
# to get only the _ids for an association, which was causing a
|
|
2537
|
+
# MissingAttributeError to be raised when accessing another association. This
|
|
2538
|
+
# was fixed by using `.pluck` over `.only`. Look at MONGOID-5306 for a more
|
|
2539
|
+
# detailed explanation.
|
|
2540
|
+
context "when accessing _ids in validate and access an association in after_initialize" do
|
|
2541
|
+
it "doesn't raise a MissingAttributeError" do
|
|
2542
|
+
company = InterceptableCompany.create!
|
|
2543
|
+
shop = InterceptableShop.create!(company: company)
|
|
2544
|
+
user = InterceptableUser.new
|
|
2545
|
+
user.company = company
|
|
2546
|
+
expect do
|
|
2547
|
+
user.save!
|
|
2548
|
+
end.to_not raise_error(ActiveModel::MissingAttributeError)
|
|
2549
|
+
end
|
|
2550
|
+
end
|
|
2551
|
+
|
|
2552
|
+
context "when around callbacks for embedded are disabled" do
|
|
2553
|
+
config_override :around_callbacks_for_embeds, false
|
|
2554
|
+
|
|
2555
|
+
context "when around callback is defined" do
|
|
2556
|
+
let(:registry) { InterceptableSpec::CallbackRegistry.new }
|
|
2557
|
+
|
|
2558
|
+
let(:parent) do
|
|
2559
|
+
InterceptableSpec::CbEmbedsOneParent.new(registry).tap do |parent|
|
|
2560
|
+
parent.child = InterceptableSpec::CbEmbedsOneChild.new(registry)
|
|
2561
|
+
end
|
|
2562
|
+
end
|
|
2563
|
+
|
|
2564
|
+
before do
|
|
2565
|
+
expect(Mongoid.logger).to receive(:warn).with(/Around callbacks are disabled for embedded documents/).twice.and_call_original
|
|
2566
|
+
expect(Mongoid.logger).to receive(:warn).with(/To enable around callbacks for embedded documents/).twice.and_call_original
|
|
2567
|
+
end
|
|
2568
|
+
|
|
2569
|
+
it "logs a warning" do
|
|
2570
|
+
parent.save!
|
|
2571
|
+
end
|
|
2572
|
+
end
|
|
2573
|
+
end
|
|
1722
2574
|
end
|