mongoid 7.0.2 → 8.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +33 -33
- data/LICENSE +1 -0
- data/README.md +34 -20
- data/Rakefile +100 -5
- data/lib/config/locales/en.yml +220 -105
- data/lib/mongoid/association/accessors.rb +176 -84
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +9 -15
- data/lib/mongoid/association/constrainable.rb +5 -7
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +31 -10
- data/lib/mongoid/association/embedded/batchable.rb +68 -54
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +27 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +16 -25
- data/lib/mongoid/association/embedded/embedded_in.rb +9 -28
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +10 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +156 -135
- data/lib/mongoid/association/embedded/embeds_many.rb +10 -37
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +27 -10
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +64 -30
- data/lib/mongoid/association/embedded/embeds_one.rb +11 -34
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +65 -41
- data/lib/mongoid/association/many.rb +25 -35
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +22 -30
- data/lib/mongoid/association/nested/nested_buildable.rb +9 -15
- data/lib/mongoid/association/nested/one.rb +57 -30
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +5 -12
- data/lib/mongoid/association/options.rb +16 -46
- data/lib/mongoid/association/proxy.rb +52 -40
- data/lib/mongoid/association/referenced/auto_save.rb +9 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +5 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -31
- data/lib/mongoid/association/referenced/belongs_to.rb +16 -38
- data/lib/mongoid/association/referenced/counter_cache.rb +14 -25
- data/lib/mongoid/association/referenced/eager.rb +42 -38
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +106 -67
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +29 -46
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +440 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +104 -127
- data/lib/mongoid/association/referenced/has_many.rb +21 -45
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +16 -29
- data/lib/mongoid/association/referenced/has_one/proxy.rb +25 -30
- data/lib/mongoid/association/referenced/has_one.rb +16 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -26
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +149 -89
- data/lib/mongoid/association.rb +13 -27
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +23 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +49 -47
- data/lib/mongoid/attributes/dynamic.rb +22 -36
- data/lib/mongoid/attributes/nested.rb +12 -15
- data/lib/mongoid/attributes/processing.rb +19 -27
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +6 -9
- data/lib/mongoid/attributes.rb +103 -100
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +152 -73
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +21 -18
- data/lib/mongoid/clients/sessions.rb +10 -10
- data/lib/mongoid/clients/storage_options.rb +9 -17
- data/lib/mongoid/clients/validators/storage.rb +5 -24
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +7 -9
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +51 -13
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +3 -1
- data/lib/mongoid/config.rb +235 -48
- data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
- data/lib/mongoid/contextual/aggregable/mongo.rb +32 -33
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +13 -44
- data/lib/mongoid/contextual/map_reduce.rb +7 -35
- data/lib/mongoid/contextual/memory.rb +387 -81
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +641 -283
- data/lib/mongoid/contextual/none.rb +264 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +21 -11
- data/lib/mongoid/copyable.rb +46 -17
- data/lib/mongoid/criteria/findable.rb +20 -20
- data/lib/mongoid/criteria/includable.rb +32 -34
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +15 -21
- data/lib/mongoid/criteria/options.rb +4 -5
- data/lib/mongoid/criteria/permission.rb +3 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +4 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +28 -8
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +11 -12
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +6 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +49 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +12 -19
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +7 -32
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +7 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +10 -10
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +19 -7
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +105 -31
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +205 -44
- data/lib/mongoid/criteria/queryable/optional.rb +16 -65
- data/lib/mongoid/criteria/queryable/options.rb +4 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +471 -168
- data/lib/mongoid/criteria/queryable/selector.rb +133 -58
- data/lib/mongoid/criteria/queryable/smash.rb +42 -18
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +18 -15
- data/lib/mongoid/criteria/scopable.rb +29 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +106 -111
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +162 -103
- data/lib/mongoid/equality.rb +35 -18
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +35 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +3 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +3 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +8 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +5 -10
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +3 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +4 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +6 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +3 -4
- data/lib/mongoid/errors/no_client_hosts.rb +3 -4
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +3 -4
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -1
- data/lib/mongoid/errors/unknown_attribute.rb +3 -4
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +18 -4
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +37 -44
- data/lib/mongoid/extensions/big_decimal.rb +35 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +10 -6
- data/lib/mongoid/extensions/date.rb +32 -25
- data/lib/mongoid/extensions/date_time.rb +5 -13
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +5 -8
- data/lib/mongoid/extensions/float.rb +12 -14
- data/lib/mongoid/extensions/hash.rb +64 -42
- data/lib/mongoid/extensions/integer.rb +12 -16
- data/lib/mongoid/extensions/module.rb +3 -4
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +27 -52
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +14 -7
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +35 -64
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +38 -22
- data/lib/mongoid/extensions/time_with_zone.rb +26 -9
- data/lib/mongoid/extensions/true_class.rb +5 -8
- data/lib/mongoid/extensions.rb +19 -3
- data/lib/mongoid/factory.rb +104 -17
- data/lib/mongoid/fields/foreign_key.rb +14 -26
- data/lib/mongoid/fields/localized.rb +21 -15
- data/lib/mongoid/fields/standard.rb +23 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +349 -76
- data/lib/mongoid/findable.rb +115 -34
- data/lib/mongoid/indexable/specification.rb +5 -18
- data/lib/mongoid/indexable/validators/options.rb +8 -9
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +85 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +4 -154
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +130 -0
- data/lib/mongoid/persistable/creatable.rb +23 -30
- data/lib/mongoid/persistable/deletable.rb +7 -23
- data/lib/mongoid/persistable/destroyable.rb +12 -11
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +14 -10
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +16 -9
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +10 -10
- data/lib/mongoid/persistable/updatable.rb +99 -30
- data/lib/mongoid/persistable/upsertable.rb +23 -9
- data/lib/mongoid/persistable.rb +138 -40
- data/lib/mongoid/persistence_context.rb +107 -52
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +18 -234
- data/lib/mongoid/railtie.rb +20 -16
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +16 -2
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +37 -60
- data/lib/mongoid/selectable.rb +8 -18
- data/lib/mongoid/serializable.rb +33 -34
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +60 -20
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +24 -5
- data/lib/mongoid/tasks/database.rb +105 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +80 -67
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +4 -3
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +5 -6
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +54 -25
- data/lib/mongoid/traversable.rb +185 -61
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +3 -4
- data/lib/mongoid/validatable/macros.rb +8 -15
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +30 -42
- data/lib/mongoid/validatable.rb +16 -32
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +50 -17
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -32
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +29 -3
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +33 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +283 -0
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +107 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +192 -0
- data/spec/integration/callbacks_spec.rb +584 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +74 -0
- data/spec/integration/matcher_examples_spec.rb +765 -0
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +35 -33
- data/spec/mongoid/association/depending_spec.rb +431 -338
- data/spec/mongoid/association/eager_spec.rb +8 -5
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +4 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +152 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +61 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +114 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +706 -197
- data/spec/mongoid/association/embedded/embeds_many_models.rb +227 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +81 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +27 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +38 -23
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +73 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +77 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +4 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +111 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +266 -17
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +114 -58
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +96 -29
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +67 -4
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +559 -385
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +92 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +84 -7
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +132 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +415 -129
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +859 -502
- data/spec/mongoid/association/referenced/has_many_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +51 -3
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +55 -9
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +135 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +113 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +87 -7
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +48 -32
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +93 -12
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +149 -78
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +24 -22
- data/spec/mongoid/attributes_spec.rb +895 -54
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +484 -67
- data/spec/mongoid/clients/factory_spec.rb +139 -33
- data/spec/mongoid/clients/options_spec.rb +76 -54
- data/spec/mongoid/clients/sessions_spec.rb +35 -63
- data/spec/mongoid/clients/transactions_spec.rb +87 -41
- data/spec/mongoid/clients_spec.rb +257 -31
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +126 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +507 -2
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +242 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +22 -19
- data/spec/mongoid/contextual/memory_spec.rb +1828 -303
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3505 -1268
- data/spec/mongoid/contextual/none_spec.rb +80 -67
- data/spec/mongoid/copyable_spec.rb +697 -40
- data/spec/mongoid/copyable_spec_models.rb +47 -0
- data/spec/mongoid/criteria/findable_spec.rb +161 -228
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +20 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +100 -48
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +9 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +136 -26
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +46 -17
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -15
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +119 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +7 -70
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +53 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +41 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +18 -485
- data/spec/mongoid/criteria/queryable/options_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2538 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1193 -2934
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +56 -5
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +210 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1334 -1719
- data/spec/mongoid/document_fields_spec.rb +262 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +212 -67
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +78 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +7 -5
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +24 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +5 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +4 -2
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -1
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +41 -45
- data/spec/mongoid/extensions/big_decimal_spec.rb +715 -213
- data/spec/mongoid/extensions/binary_spec.rb +46 -9
- data/spec/mongoid/extensions/boolean_spec.rb +70 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +58 -140
- data/spec/mongoid/extensions/date_time_spec.rb +32 -69
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +66 -73
- data/spec/mongoid/extensions/hash_spec.rb +135 -0
- data/spec/mongoid/extensions/integer_spec.rb +61 -63
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +257 -54
- data/spec/mongoid/extensions/regexp_spec.rb +70 -20
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +146 -57
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +20 -25
- data/spec/mongoid/extensions/time_spec.rb +668 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +57 -83
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +347 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +86 -41
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +869 -114
- data/spec/mongoid/findable_spec.rb +521 -65
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +87 -32
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +761 -98
- data/spec/mongoid/interceptable_spec_models.rb +307 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +114 -29
- data/spec/mongoid/persistable/deletable_spec.rb +300 -18
- data/spec/mongoid/persistable/destroyable_spec.rb +228 -18
- data/spec/mongoid/persistable/incrementable_spec.rb +66 -13
- data/spec/mongoid/persistable/logical_spec.rb +56 -3
- data/spec/mongoid/persistable/poppable_spec.rb +55 -3
- data/spec/mongoid/persistable/pullable_spec.rb +108 -6
- data/spec/mongoid/persistable/pushable_spec.rb +163 -7
- data/spec/mongoid/persistable/renamable_spec.rb +54 -2
- data/spec/mongoid/persistable/savable_spec.rb +284 -25
- data/spec/mongoid/persistable/settable_spec.rb +91 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +55 -3
- data/spec/mongoid/persistable/updatable_spec.rb +63 -49
- data/spec/mongoid/persistable/upsertable_spec.rb +93 -3
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +60 -59
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
- data/spec/mongoid/query_cache_spec.rb +446 -78
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +381 -26
- data/spec/mongoid/scopable_spec.rb +206 -38
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +148 -38
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +153 -9
- data/spec/mongoid/tasks/database_rake_spec.rb +89 -13
- data/spec/mongoid/tasks/database_spec.rb +130 -1
- data/spec/mongoid/threaded_spec.rb +72 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +400 -10
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +568 -33
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1145 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +159 -103
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +36 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- data/spec/rails/mongoid_spec.rb +8 -18
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +298 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +321 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +416 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +74 -88
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +77 -0
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +129 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -1
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +10 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +3 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +4 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/support/models/circus.rb +12 -0
- data/spec/{app → support}/models/code.rb +4 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +11 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +6 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +3 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +22 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +4 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +3 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +3 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +64 -0
- data.tar.gz.sig +1 -2
- metadata +1158 -615
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/errors/eager_load.rb +0 -22
- data/lib/mongoid/errors/invalid_value.rb +0 -16
- data/lib/mongoid/matchable/all.rb +0 -27
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -72
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -58
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -58
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -130
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
4
|
+
require_relative "../has_and_belongs_to_many_models"
|
|
2
5
|
|
|
3
6
|
describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
7
|
+
config_override :raise_not_found_error, true
|
|
4
8
|
|
|
5
9
|
around(:each) do |example|
|
|
6
|
-
original_raise_not_found_error = Mongoid.raise_not_found_error
|
|
7
10
|
original_preferences_association = Person.relations["preferences"]
|
|
8
|
-
Mongoid.raise_not_found_error = true
|
|
9
11
|
Person.has_and_belongs_to_many :preferences, autosave: true
|
|
10
12
|
example.run
|
|
11
|
-
Mongoid.raise_not_found_error = original_raise_not_found_error
|
|
12
13
|
Person.relations["preferences"] = original_preferences_association
|
|
13
14
|
end
|
|
14
15
|
|
|
@@ -24,7 +25,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
24
25
|
context "when the inverse_of is nil" do
|
|
25
26
|
|
|
26
27
|
let!(:article) do
|
|
27
|
-
Article.create
|
|
28
|
+
Article.create!
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
context "when the child document is new" do
|
|
@@ -45,7 +46,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
45
46
|
context "when the child document is not new" do
|
|
46
47
|
|
|
47
48
|
let(:preference) do
|
|
48
|
-
Preference.create
|
|
49
|
+
Preference.create!
|
|
49
50
|
end
|
|
50
51
|
|
|
51
52
|
it "does not persist the child document" do
|
|
@@ -77,7 +78,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
77
78
|
context "when the parent is not a new record" do
|
|
78
79
|
|
|
79
80
|
let(:person) do
|
|
80
|
-
Person.create
|
|
81
|
+
Person.create!
|
|
81
82
|
end
|
|
82
83
|
|
|
83
84
|
let!(:preference) do
|
|
@@ -121,11 +122,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
121
122
|
context "when appending in a parent create block" do
|
|
122
123
|
|
|
123
124
|
let!(:preference) do
|
|
124
|
-
Preference.create(name: "testing")
|
|
125
|
+
Preference.create!(name: "testing")
|
|
125
126
|
end
|
|
126
127
|
|
|
127
128
|
let!(:person) do
|
|
128
|
-
Person.create do |doc|
|
|
129
|
+
Person.create! do |doc|
|
|
129
130
|
doc.preferences << preference
|
|
130
131
|
end
|
|
131
132
|
end
|
|
@@ -210,7 +211,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
210
211
|
context "when the child is already persisted" do
|
|
211
212
|
|
|
212
213
|
let!(:persisted) do
|
|
213
|
-
Preference.create(name: "testy")
|
|
214
|
+
Preference.create!(name: "testy")
|
|
214
215
|
end
|
|
215
216
|
|
|
216
217
|
let(:preference) do
|
|
@@ -219,7 +220,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
219
220
|
|
|
220
221
|
before do
|
|
221
222
|
person.preferences.send(method, preference)
|
|
222
|
-
person.save
|
|
223
|
+
person.save!
|
|
223
224
|
end
|
|
224
225
|
|
|
225
226
|
it "adds the documents to the relation" do
|
|
@@ -250,7 +251,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
250
251
|
context "when setting via the associated ids" do
|
|
251
252
|
|
|
252
253
|
let!(:persisted) do
|
|
253
|
-
Preference.create(name: "testy")
|
|
254
|
+
Preference.create!(name: "testy")
|
|
254
255
|
end
|
|
255
256
|
|
|
256
257
|
let(:preference) do
|
|
@@ -262,7 +263,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
262
263
|
end
|
|
263
264
|
|
|
264
265
|
before do
|
|
265
|
-
person.save
|
|
266
|
+
person.save!
|
|
266
267
|
end
|
|
267
268
|
|
|
268
269
|
it "adds the documents to the relation" do
|
|
@@ -290,7 +291,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
290
291
|
context "when the parent is not a new record" do
|
|
291
292
|
|
|
292
293
|
let(:person) do
|
|
293
|
-
Person.create
|
|
294
|
+
Person.create!
|
|
294
295
|
end
|
|
295
296
|
|
|
296
297
|
let(:preference) do
|
|
@@ -372,11 +373,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
372
373
|
context "when both sides have been persisted" do
|
|
373
374
|
|
|
374
375
|
let(:person) do
|
|
375
|
-
Person.create
|
|
376
|
+
Person.create!
|
|
376
377
|
end
|
|
377
378
|
|
|
378
379
|
let(:event) do
|
|
379
|
-
Event.create
|
|
380
|
+
Event.create!
|
|
380
381
|
end
|
|
381
382
|
|
|
382
383
|
before do
|
|
@@ -425,15 +426,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
425
426
|
context "when the relation also includes a has_many relation" do
|
|
426
427
|
|
|
427
428
|
let(:artwork) do
|
|
428
|
-
Artwork.create
|
|
429
|
+
Artwork.create!
|
|
429
430
|
end
|
|
430
431
|
|
|
431
432
|
let(:exhibition) do
|
|
432
|
-
Exhibition.create
|
|
433
|
+
Exhibition.create!
|
|
433
434
|
end
|
|
434
435
|
|
|
435
436
|
let(:exhibitor) do
|
|
436
|
-
Exhibitor.create(exhibition: exhibition)
|
|
437
|
+
Exhibitor.create!(exhibition: exhibition)
|
|
437
438
|
end
|
|
438
439
|
|
|
439
440
|
before do
|
|
@@ -448,11 +449,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
448
449
|
context "when the relation is self referencing" do
|
|
449
450
|
|
|
450
451
|
let(:tag_one) do
|
|
451
|
-
Tag.create(text: "one")
|
|
452
|
+
Tag.create!(text: "one")
|
|
452
453
|
end
|
|
453
454
|
|
|
454
455
|
let(:tag_two) do
|
|
455
|
-
Tag.create(text: "two")
|
|
456
|
+
Tag.create!(text: "two")
|
|
456
457
|
end
|
|
457
458
|
|
|
458
459
|
before do
|
|
@@ -561,7 +562,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
561
562
|
end
|
|
562
563
|
|
|
563
564
|
let(:preference) do
|
|
564
|
-
Preference.create(name: "one")
|
|
565
|
+
Preference.create!(name: "one")
|
|
565
566
|
end
|
|
566
567
|
|
|
567
568
|
before do
|
|
@@ -582,7 +583,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
582
583
|
context "when the document is persisted" do
|
|
583
584
|
|
|
584
585
|
before do
|
|
585
|
-
person.save
|
|
586
|
+
person.save!
|
|
586
587
|
end
|
|
587
588
|
|
|
588
589
|
it "does not add the duplicates" do
|
|
@@ -653,7 +654,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
653
654
|
end
|
|
654
655
|
|
|
655
656
|
let!(:preference) do
|
|
656
|
-
Preference.create
|
|
657
|
+
Preference.create!
|
|
657
658
|
end
|
|
658
659
|
|
|
659
660
|
before do
|
|
@@ -700,7 +701,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
700
701
|
context "when the parent is not a new record" do
|
|
701
702
|
|
|
702
703
|
let(:person) do
|
|
703
|
-
Person.create
|
|
704
|
+
Person.create!
|
|
704
705
|
end
|
|
705
706
|
|
|
706
707
|
let(:preference) do
|
|
@@ -784,7 +785,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
784
785
|
expect(person.preferences).to eq([ another_preference ])
|
|
785
786
|
end
|
|
786
787
|
|
|
787
|
-
it "persists the relation between
|
|
788
|
+
it "persists the relation between another_preference and person" do
|
|
788
789
|
expect(another_preference.people).to eq([ person ])
|
|
789
790
|
end
|
|
790
791
|
|
|
@@ -796,7 +797,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
796
797
|
context "and person is saved" do
|
|
797
798
|
|
|
798
799
|
before do
|
|
799
|
-
person.save
|
|
800
|
+
person.save!
|
|
800
801
|
person.reload
|
|
801
802
|
another_preference.reload
|
|
802
803
|
end
|
|
@@ -805,7 +806,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
805
806
|
expect(person.preferences).to eq([ another_preference ])
|
|
806
807
|
end
|
|
807
808
|
|
|
808
|
-
it "persists the relation between
|
|
809
|
+
it "persists the relation between another_preference and person" do
|
|
809
810
|
expect(another_preference.people).to eq([ person ])
|
|
810
811
|
end
|
|
811
812
|
|
|
@@ -820,11 +821,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
820
821
|
|
|
821
822
|
describe "when self-referencing" do
|
|
822
823
|
let!(:parent) do
|
|
823
|
-
Vertex.create
|
|
824
|
+
Vertex.create!
|
|
824
825
|
end
|
|
825
826
|
|
|
826
827
|
let!(:child) do
|
|
827
|
-
Vertex.create(parents: [parent])
|
|
828
|
+
Vertex.create!(parents: [parent])
|
|
828
829
|
end
|
|
829
830
|
|
|
830
831
|
before do
|
|
@@ -961,7 +962,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
961
962
|
context "when the relation has been loaded" do
|
|
962
963
|
|
|
963
964
|
let(:person) do
|
|
964
|
-
Person.create
|
|
965
|
+
Person.create!
|
|
965
966
|
end
|
|
966
967
|
|
|
967
968
|
let(:preference) do
|
|
@@ -1001,7 +1002,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1001
1002
|
end
|
|
1002
1003
|
|
|
1003
1004
|
let(:person) do
|
|
1004
|
-
Person.create
|
|
1005
|
+
Person.create!.tap do |p|
|
|
1005
1006
|
p.preferences = [ preference ]
|
|
1006
1007
|
end
|
|
1007
1008
|
end
|
|
@@ -1071,7 +1072,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1071
1072
|
context "when the parent is not a new record" do
|
|
1072
1073
|
|
|
1073
1074
|
let(:person) do
|
|
1074
|
-
Person.create
|
|
1075
|
+
Person.create!
|
|
1075
1076
|
end
|
|
1076
1077
|
|
|
1077
1078
|
let!(:preference) do
|
|
@@ -1109,7 +1110,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1109
1110
|
context "when saving the target" do
|
|
1110
1111
|
|
|
1111
1112
|
before do
|
|
1112
|
-
preference.save
|
|
1113
|
+
preference.save!
|
|
1113
1114
|
end
|
|
1114
1115
|
|
|
1115
1116
|
it "persists the parent keys" do
|
|
@@ -1128,13 +1129,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1128
1129
|
context "when the parent has been persisted" do
|
|
1129
1130
|
|
|
1130
1131
|
let!(:person) do
|
|
1131
|
-
Person.create
|
|
1132
|
+
Person.create!
|
|
1132
1133
|
end
|
|
1133
1134
|
|
|
1134
1135
|
context "when the children are persisted" do
|
|
1135
1136
|
|
|
1136
1137
|
let!(:preference) do
|
|
1137
|
-
person.preferences.create(name: "settings")
|
|
1138
|
+
person.preferences.create!(name: "settings")
|
|
1138
1139
|
end
|
|
1139
1140
|
|
|
1140
1141
|
let!(:relation) do
|
|
@@ -1306,7 +1307,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1306
1307
|
context "when the parent is not a new record" do
|
|
1307
1308
|
|
|
1308
1309
|
let(:person) do
|
|
1309
|
-
Person.create
|
|
1310
|
+
Person.create!
|
|
1310
1311
|
end
|
|
1311
1312
|
|
|
1312
1313
|
let!(:preference) do
|
|
@@ -1350,11 +1351,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1350
1351
|
context "when appending in a parent create block" do
|
|
1351
1352
|
|
|
1352
1353
|
let!(:preference) do
|
|
1353
|
-
Preference.create(name: "testing")
|
|
1354
|
+
Preference.create!(name: "testing")
|
|
1354
1355
|
end
|
|
1355
1356
|
|
|
1356
1357
|
let!(:person) do
|
|
1357
|
-
Person.create do |doc|
|
|
1358
|
+
Person.create! do |doc|
|
|
1358
1359
|
doc.preferences.concat([ preference ])
|
|
1359
1360
|
end
|
|
1360
1361
|
end
|
|
@@ -1439,7 +1440,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1439
1440
|
context "when the child is already persisted" do
|
|
1440
1441
|
|
|
1441
1442
|
let!(:persisted) do
|
|
1442
|
-
Preference.create(name: "testy")
|
|
1443
|
+
Preference.create!(name: "testy")
|
|
1443
1444
|
end
|
|
1444
1445
|
|
|
1445
1446
|
let(:preference) do
|
|
@@ -1448,7 +1449,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1448
1449
|
|
|
1449
1450
|
before do
|
|
1450
1451
|
person.preferences.concat([ preference ])
|
|
1451
|
-
person.save
|
|
1452
|
+
person.save!
|
|
1452
1453
|
end
|
|
1453
1454
|
|
|
1454
1455
|
it "adds the documents to the relation" do
|
|
@@ -1479,7 +1480,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1479
1480
|
context "when setting via the associated ids" do
|
|
1480
1481
|
|
|
1481
1482
|
let!(:persisted) do
|
|
1482
|
-
Preference.create(name: "testy")
|
|
1483
|
+
Preference.create!(name: "testy")
|
|
1483
1484
|
end
|
|
1484
1485
|
|
|
1485
1486
|
let(:preference) do
|
|
@@ -1491,7 +1492,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1491
1492
|
end
|
|
1492
1493
|
|
|
1493
1494
|
before do
|
|
1494
|
-
person.save
|
|
1495
|
+
person.save!
|
|
1495
1496
|
end
|
|
1496
1497
|
|
|
1497
1498
|
it "adds the documents to the relation" do
|
|
@@ -1519,7 +1520,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1519
1520
|
context "when the parent is not a new record" do
|
|
1520
1521
|
|
|
1521
1522
|
let(:person) do
|
|
1522
|
-
Person.create
|
|
1523
|
+
Person.create!
|
|
1523
1524
|
end
|
|
1524
1525
|
|
|
1525
1526
|
let(:preference) do
|
|
@@ -1601,11 +1602,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1601
1602
|
context "when both sides have been persisted" do
|
|
1602
1603
|
|
|
1603
1604
|
let(:person) do
|
|
1604
|
-
Person.create
|
|
1605
|
+
Person.create!
|
|
1605
1606
|
end
|
|
1606
1607
|
|
|
1607
1608
|
let(:event) do
|
|
1608
|
-
Event.create
|
|
1609
|
+
Event.create!
|
|
1609
1610
|
end
|
|
1610
1611
|
|
|
1611
1612
|
before do
|
|
@@ -1654,15 +1655,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1654
1655
|
context "when the relation also includes a has_many relation" do
|
|
1655
1656
|
|
|
1656
1657
|
let(:artwork) do
|
|
1657
|
-
Artwork.create
|
|
1658
|
+
Artwork.create!
|
|
1658
1659
|
end
|
|
1659
1660
|
|
|
1660
1661
|
let(:exhibition) do
|
|
1661
|
-
Exhibition.create
|
|
1662
|
+
Exhibition.create!
|
|
1662
1663
|
end
|
|
1663
1664
|
|
|
1664
1665
|
let(:exhibitor) do
|
|
1665
|
-
Exhibitor.create(exhibition: exhibition)
|
|
1666
|
+
Exhibitor.create!(exhibition: exhibition)
|
|
1666
1667
|
end
|
|
1667
1668
|
|
|
1668
1669
|
before do
|
|
@@ -1677,11 +1678,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1677
1678
|
context "when the relation is self referencing" do
|
|
1678
1679
|
|
|
1679
1680
|
let(:tag_one) do
|
|
1680
|
-
Tag.create(text: "one")
|
|
1681
|
+
Tag.create!(text: "one")
|
|
1681
1682
|
end
|
|
1682
1683
|
|
|
1683
1684
|
let(:tag_two) do
|
|
1684
|
-
Tag.create(text: "two")
|
|
1685
|
+
Tag.create!(text: "two")
|
|
1685
1686
|
end
|
|
1686
1687
|
|
|
1687
1688
|
before do
|
|
@@ -1732,7 +1733,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1732
1733
|
describe "#count" do
|
|
1733
1734
|
|
|
1734
1735
|
let(:person) do
|
|
1735
|
-
Person.create
|
|
1736
|
+
Person.create!
|
|
1736
1737
|
end
|
|
1737
1738
|
|
|
1738
1739
|
context "when nothing exists on the relation" do
|
|
@@ -1754,10 +1755,47 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1754
1755
|
end
|
|
1755
1756
|
end
|
|
1756
1757
|
|
|
1758
|
+
describe "#any?" do
|
|
1759
|
+
|
|
1760
|
+
let(:person) do
|
|
1761
|
+
Person.create!
|
|
1762
|
+
end
|
|
1763
|
+
|
|
1764
|
+
context "when nothing exists on the relation" do
|
|
1765
|
+
|
|
1766
|
+
context "when no document is added" do
|
|
1767
|
+
|
|
1768
|
+
let!(:sandwich) do
|
|
1769
|
+
Sandwich.create!
|
|
1770
|
+
end
|
|
1771
|
+
|
|
1772
|
+
it "returns false" do
|
|
1773
|
+
expect(sandwich.meats.any?).to be false
|
|
1774
|
+
end
|
|
1775
|
+
end
|
|
1776
|
+
|
|
1777
|
+
context "when the document is destroyed" do
|
|
1778
|
+
|
|
1779
|
+
before do
|
|
1780
|
+
Meat.create!
|
|
1781
|
+
end
|
|
1782
|
+
|
|
1783
|
+
let!(:sandwich) do
|
|
1784
|
+
Sandwich.create!
|
|
1785
|
+
end
|
|
1786
|
+
|
|
1787
|
+
it "returns false" do
|
|
1788
|
+
sandwich.destroy
|
|
1789
|
+
expect(sandwich.meats.any?).to be false
|
|
1790
|
+
end
|
|
1791
|
+
end
|
|
1792
|
+
end
|
|
1793
|
+
end
|
|
1794
|
+
|
|
1757
1795
|
context "when documents have been persisted" do
|
|
1758
1796
|
|
|
1759
1797
|
let!(:preference) do
|
|
1760
|
-
person.preferences.create(name: "setting")
|
|
1798
|
+
person.preferences.create!(name: "setting")
|
|
1761
1799
|
end
|
|
1762
1800
|
|
|
1763
1801
|
it "returns the number of persisted documents" do
|
|
@@ -1768,12 +1806,12 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1768
1806
|
context "when appending to a loaded relation" do
|
|
1769
1807
|
|
|
1770
1808
|
let!(:preference) do
|
|
1771
|
-
person.preferences.create(name: "setting")
|
|
1809
|
+
person.preferences.create!(name: "setting")
|
|
1772
1810
|
end
|
|
1773
1811
|
|
|
1774
1812
|
before do
|
|
1775
1813
|
person.preferences.count
|
|
1776
|
-
person.preferences << Preference.create(name: "two")
|
|
1814
|
+
person.preferences << Preference.create!(name: "two")
|
|
1777
1815
|
end
|
|
1778
1816
|
|
|
1779
1817
|
it "returns the number of persisted documents" do
|
|
@@ -1797,7 +1835,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1797
1835
|
context "when the documents are part of the relation" do
|
|
1798
1836
|
|
|
1799
1837
|
before do
|
|
1800
|
-
Preference.create(person_ids: [ person.id ])
|
|
1838
|
+
Preference.create!(person_ids: [ person.id ])
|
|
1801
1839
|
end
|
|
1802
1840
|
|
|
1803
1841
|
it "returns the count from the db" do
|
|
@@ -1808,7 +1846,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1808
1846
|
context "when the documents are not part of the relation" do
|
|
1809
1847
|
|
|
1810
1848
|
before do
|
|
1811
|
-
Preference.create
|
|
1849
|
+
Preference.create!
|
|
1812
1850
|
end
|
|
1813
1851
|
|
|
1814
1852
|
it "returns the count from the db" do
|
|
@@ -1822,7 +1860,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1822
1860
|
context "when documents have been persisted" do
|
|
1823
1861
|
|
|
1824
1862
|
let!(:house) do
|
|
1825
|
-
person.houses.create(name: "Wayne Manor")
|
|
1863
|
+
person.houses.create!(name: "Wayne Manor")
|
|
1826
1864
|
end
|
|
1827
1865
|
|
|
1828
1866
|
it "returns the number of persisted documents" do
|
|
@@ -1843,6 +1881,107 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1843
1881
|
end
|
|
1844
1882
|
end
|
|
1845
1883
|
|
|
1884
|
+
describe "#any?" do
|
|
1885
|
+
|
|
1886
|
+
let(:sandwich) do
|
|
1887
|
+
Sandwich.create!
|
|
1888
|
+
end
|
|
1889
|
+
|
|
1890
|
+
context "when nothing exists on the relation" do
|
|
1891
|
+
|
|
1892
|
+
context "when no document is added" do
|
|
1893
|
+
|
|
1894
|
+
let!(:sandwich) do
|
|
1895
|
+
Sandwich.create!
|
|
1896
|
+
end
|
|
1897
|
+
|
|
1898
|
+
it "returns false" do
|
|
1899
|
+
expect(sandwich.meats.any?).to be false
|
|
1900
|
+
end
|
|
1901
|
+
end
|
|
1902
|
+
|
|
1903
|
+
context "when the document is destroyed" do
|
|
1904
|
+
|
|
1905
|
+
before do
|
|
1906
|
+
Meat.create!
|
|
1907
|
+
end
|
|
1908
|
+
|
|
1909
|
+
let!(:sandwich) do
|
|
1910
|
+
Sandwich.create!
|
|
1911
|
+
end
|
|
1912
|
+
|
|
1913
|
+
it "returns false" do
|
|
1914
|
+
sandwich.destroy
|
|
1915
|
+
expect(sandwich.meats.any?).to be false
|
|
1916
|
+
end
|
|
1917
|
+
end
|
|
1918
|
+
end
|
|
1919
|
+
|
|
1920
|
+
context "when appending to a relation and _loaded/_unloaded are empty" do
|
|
1921
|
+
|
|
1922
|
+
let!(:sandwich) do
|
|
1923
|
+
Sandwich.create!
|
|
1924
|
+
end
|
|
1925
|
+
|
|
1926
|
+
before do
|
|
1927
|
+
sandwich.meats << Meat.new
|
|
1928
|
+
end
|
|
1929
|
+
|
|
1930
|
+
it "returns true" do
|
|
1931
|
+
expect(sandwich.meats.any?).to be true
|
|
1932
|
+
end
|
|
1933
|
+
end
|
|
1934
|
+
|
|
1935
|
+
context "when appending to a relation in a transaction" do
|
|
1936
|
+
require_transaction_support
|
|
1937
|
+
|
|
1938
|
+
let!(:sandwich) do
|
|
1939
|
+
Sandwich.create!
|
|
1940
|
+
end
|
|
1941
|
+
|
|
1942
|
+
it "returns true" do
|
|
1943
|
+
sandwich.with_session do |session|
|
|
1944
|
+
session.with_transaction do
|
|
1945
|
+
expect{ sandwich.meats << Meat.new }.to_not raise_error
|
|
1946
|
+
expect(sandwich.meats.any?).to be true
|
|
1947
|
+
end
|
|
1948
|
+
end
|
|
1949
|
+
end
|
|
1950
|
+
end
|
|
1951
|
+
|
|
1952
|
+
context "when documents have been persisted" do
|
|
1953
|
+
|
|
1954
|
+
let!(:meat) do
|
|
1955
|
+
sandwich.meats.create!
|
|
1956
|
+
end
|
|
1957
|
+
|
|
1958
|
+
it "returns true" do
|
|
1959
|
+
expect(sandwich.meats.any?).to be true
|
|
1960
|
+
end
|
|
1961
|
+
end
|
|
1962
|
+
|
|
1963
|
+
context "when documents have not been persisted" do
|
|
1964
|
+
|
|
1965
|
+
let!(:meat) do
|
|
1966
|
+
sandwich.meats.build
|
|
1967
|
+
end
|
|
1968
|
+
|
|
1969
|
+
it "returns false" do
|
|
1970
|
+
expect(sandwich.meats.any?).to be true
|
|
1971
|
+
end
|
|
1972
|
+
end
|
|
1973
|
+
|
|
1974
|
+
context "when new documents exist in the database" do
|
|
1975
|
+
before do
|
|
1976
|
+
Meat.create!(sandwiches: [sandwich])
|
|
1977
|
+
end
|
|
1978
|
+
|
|
1979
|
+
it "returns true" do
|
|
1980
|
+
expect(sandwich.meats.any?).to be true
|
|
1981
|
+
end
|
|
1982
|
+
end
|
|
1983
|
+
end
|
|
1984
|
+
|
|
1846
1985
|
[ :create, :create! ].each do |method|
|
|
1847
1986
|
|
|
1848
1987
|
describe "##{method}" do
|
|
@@ -1852,15 +1991,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1852
1991
|
context "when using string keys" do
|
|
1853
1992
|
|
|
1854
1993
|
let(:agent) do
|
|
1855
|
-
Agent.create(number: "007")
|
|
1994
|
+
Agent.create!(number: "007")
|
|
1856
1995
|
end
|
|
1857
1996
|
|
|
1858
1997
|
before do
|
|
1859
|
-
agent.accounts.
|
|
1998
|
+
agent.accounts.send(method, name: "test again")
|
|
1860
1999
|
end
|
|
1861
2000
|
|
|
1862
2001
|
it "does not convert the string key to an object id" do
|
|
1863
|
-
expect(agent.account_ids).to eq([ "
|
|
2002
|
+
expect(agent.account_ids).to eq([ "test-again" ])
|
|
1864
2003
|
end
|
|
1865
2004
|
end
|
|
1866
2005
|
|
|
@@ -1932,7 +2071,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1932
2071
|
context "when validation fails" do
|
|
1933
2072
|
|
|
1934
2073
|
let(:person) do
|
|
1935
|
-
Person.create
|
|
2074
|
+
Person.create!
|
|
1936
2075
|
end
|
|
1937
2076
|
|
|
1938
2077
|
context "when the relation is not polymorphic" do
|
|
@@ -1946,290 +2085,236 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
1946
2085
|
end
|
|
1947
2086
|
end
|
|
1948
2087
|
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
let(:preference_one) do
|
|
1956
|
-
Preference.create(name: "Testing")
|
|
1957
|
-
end
|
|
1958
|
-
|
|
1959
|
-
let(:preference_two) do
|
|
1960
|
-
Preference.create(name: "Test")
|
|
1961
|
-
end
|
|
1962
|
-
|
|
1963
|
-
before do
|
|
1964
|
-
person.preferences << [ preference_one, preference_two ]
|
|
1965
|
-
end
|
|
1966
|
-
|
|
1967
|
-
context "when the document exists" do
|
|
2088
|
+
%i[ delete delete_one ].each do |method|
|
|
2089
|
+
describe "\##{method}" do
|
|
2090
|
+
let(:person) { Person.create! }
|
|
2091
|
+
let(:preference_one) { Preference.create!(name: "Testing") }
|
|
2092
|
+
let(:preference_two) { Preference.create!(name: "Test") }
|
|
1968
2093
|
|
|
1969
|
-
|
|
1970
|
-
person.preferences
|
|
1971
|
-
end
|
|
1972
|
-
|
|
1973
|
-
it "removes the document from the relation" do
|
|
1974
|
-
expect(person.preferences).to eq([ preference_two ])
|
|
1975
|
-
end
|
|
1976
|
-
|
|
1977
|
-
it "returns the document" do
|
|
1978
|
-
expect(deleted).to eq(preference_one)
|
|
1979
|
-
end
|
|
1980
|
-
|
|
1981
|
-
it "removes the document key from the foreign key" do
|
|
1982
|
-
expect(person.preference_ids).to eq([ preference_two.id ])
|
|
1983
|
-
end
|
|
1984
|
-
|
|
1985
|
-
it "removes the inverse reference" do
|
|
1986
|
-
expect(deleted.reload.people).to be_empty
|
|
1987
|
-
end
|
|
1988
|
-
|
|
1989
|
-
it "removes the base id from the inverse keys" do
|
|
1990
|
-
expect(deleted.reload.person_ids).to be_empty
|
|
2094
|
+
before do
|
|
2095
|
+
person.preferences << [ preference_one, preference_two ]
|
|
1991
2096
|
end
|
|
1992
2097
|
|
|
1993
|
-
context
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
person.reload
|
|
1997
|
-
preference_one.reload
|
|
1998
|
-
preference_two.reload
|
|
2098
|
+
context 'when the document exists' do
|
|
2099
|
+
let!(:deleted) do
|
|
2100
|
+
person.preferences.send(method, preference_one)
|
|
1999
2101
|
end
|
|
2000
2102
|
|
|
2001
|
-
it
|
|
2103
|
+
it 'removes the document from the relation' do
|
|
2002
2104
|
expect(person.preferences).to eq([ preference_two ])
|
|
2003
2105
|
end
|
|
2004
2106
|
|
|
2005
|
-
it
|
|
2006
|
-
expect(
|
|
2107
|
+
it 'returns the document' do
|
|
2108
|
+
expect(deleted).to eq(preference_one)
|
|
2007
2109
|
end
|
|
2008
|
-
end
|
|
2009
|
-
end
|
|
2010
|
-
|
|
2011
|
-
context "when the document does not exist" do
|
|
2012
2110
|
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
end
|
|
2016
|
-
|
|
2017
|
-
it "returns nil" do
|
|
2018
|
-
expect(deleted).to be_nil
|
|
2019
|
-
end
|
|
2020
|
-
|
|
2021
|
-
it "does not modify the relation" do
|
|
2022
|
-
expect(person.preferences).to eq([ preference_one, preference_two ])
|
|
2023
|
-
end
|
|
2024
|
-
|
|
2025
|
-
it "does not modify the keys" do
|
|
2026
|
-
expect(person.preference_ids).to eq([ preference_one.id, preference_two.id ])
|
|
2027
|
-
end
|
|
2028
|
-
end
|
|
2029
|
-
|
|
2030
|
-
context "when :dependent => :nullify is set" do
|
|
2031
|
-
|
|
2032
|
-
context "when :inverse_of is set" do
|
|
2033
|
-
|
|
2034
|
-
let(:event) do
|
|
2035
|
-
Event.create
|
|
2111
|
+
it 'removes the document key from the foreign key' do
|
|
2112
|
+
expect(person.preference_ids).to eq([ preference_two.id ])
|
|
2036
2113
|
end
|
|
2037
2114
|
|
|
2038
|
-
|
|
2039
|
-
|
|
2115
|
+
it 'removes the inverse reference' do
|
|
2116
|
+
expect(deleted.reload.people).to be_empty
|
|
2040
2117
|
end
|
|
2041
2118
|
|
|
2042
|
-
it
|
|
2043
|
-
expect(
|
|
2119
|
+
it 'removes the base id from the inverse keys' do
|
|
2120
|
+
expect(deleted.reload.person_ids).to be_empty
|
|
2044
2121
|
end
|
|
2045
|
-
end
|
|
2046
|
-
end
|
|
2047
2122
|
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2123
|
+
context 'and person and preferences are reloaded' do
|
|
2124
|
+
before do
|
|
2125
|
+
person.reload
|
|
2126
|
+
preference_one.reload
|
|
2127
|
+
preference_two.reload
|
|
2128
|
+
end
|
|
2053
2129
|
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2130
|
+
it 'nullifies the deleted preference' do
|
|
2131
|
+
expect(person.preferences).to eq([ preference_two ])
|
|
2132
|
+
end
|
|
2057
2133
|
|
|
2058
|
-
|
|
2059
|
-
|
|
2134
|
+
it 'retains the ids for one preference' do
|
|
2135
|
+
expect(person.preference_ids).to eq([ preference_two.id ])
|
|
2136
|
+
end
|
|
2137
|
+
end
|
|
2060
2138
|
end
|
|
2061
2139
|
|
|
2062
|
-
context
|
|
2063
|
-
|
|
2140
|
+
context 'when the document does not exist' do
|
|
2064
2141
|
let!(:deleted) do
|
|
2065
|
-
|
|
2066
|
-
end
|
|
2067
|
-
|
|
2068
|
-
it "deletes the document from the relation" do
|
|
2069
|
-
expect(tag_one.related).to be_empty
|
|
2142
|
+
person.preferences.send(method, Preference.new)
|
|
2070
2143
|
end
|
|
2071
2144
|
|
|
2072
|
-
it
|
|
2073
|
-
expect(
|
|
2145
|
+
it 'returns nil' do
|
|
2146
|
+
expect(deleted).to be_nil
|
|
2074
2147
|
end
|
|
2075
2148
|
|
|
2076
|
-
it
|
|
2077
|
-
expect(
|
|
2149
|
+
it 'does not modify the relation' do
|
|
2150
|
+
expect(person.preferences).to eq([ preference_one, preference_two ])
|
|
2078
2151
|
end
|
|
2079
2152
|
|
|
2080
|
-
it
|
|
2081
|
-
expect(
|
|
2153
|
+
it 'does not modify the keys' do
|
|
2154
|
+
expect(person.preference_ids).to eq([ preference_one.id, preference_two.id ])
|
|
2082
2155
|
end
|
|
2083
2156
|
end
|
|
2084
2157
|
|
|
2085
|
-
context
|
|
2158
|
+
context 'when :dependent => :nullify is set' do
|
|
2159
|
+
context 'when :inverse_of is set' do
|
|
2160
|
+
let(:event) { Event.create! }
|
|
2086
2161
|
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
let(:reloaded) do
|
|
2090
|
-
tag_one.reload
|
|
2091
|
-
end
|
|
2092
|
-
|
|
2093
|
-
let!(:deleted) do
|
|
2094
|
-
reloaded.related.delete(tag_two)
|
|
2095
|
-
end
|
|
2096
|
-
|
|
2097
|
-
it "deletes the document from the relation" do
|
|
2098
|
-
expect(reloaded.related).to be_empty
|
|
2162
|
+
before do
|
|
2163
|
+
person.administrated_events << [ event ]
|
|
2099
2164
|
end
|
|
2100
2165
|
|
|
2101
|
-
it
|
|
2102
|
-
expect(
|
|
2166
|
+
it 'deletes the document' do
|
|
2167
|
+
expect(event.delete).to be true
|
|
2103
2168
|
end
|
|
2169
|
+
end
|
|
2170
|
+
end
|
|
2104
2171
|
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2172
|
+
context 'when the relationships are self referencing' do
|
|
2173
|
+
let(:tag_one) { Tag.create!(text: "one") }
|
|
2174
|
+
let(:tag_two) { Tag.create!(text: "two") }
|
|
2108
2175
|
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
end
|
|
2176
|
+
before do
|
|
2177
|
+
tag_one.related << tag_two
|
|
2112
2178
|
end
|
|
2113
2179
|
|
|
2114
|
-
context
|
|
2180
|
+
context 'when deleting without reloading' do
|
|
2181
|
+
let!(:deleted) { tag_one.related.send(method, tag_two) }
|
|
2115
2182
|
|
|
2116
|
-
|
|
2117
|
-
|
|
2183
|
+
it 'deletes the document from the relation' do
|
|
2184
|
+
expect(tag_one.related).to be_empty
|
|
2118
2185
|
end
|
|
2119
2186
|
|
|
2120
|
-
|
|
2121
|
-
|
|
2187
|
+
it 'deletes the foreign key from the relation' do
|
|
2188
|
+
expect(tag_one.related_ids).to be_empty
|
|
2122
2189
|
end
|
|
2123
2190
|
|
|
2124
|
-
it
|
|
2125
|
-
expect(
|
|
2126
|
-
end
|
|
2127
|
-
|
|
2128
|
-
it "deletes the foreign key from the relation" do
|
|
2129
|
-
expect(reloaded.related_ids).to be_empty
|
|
2191
|
+
it 'removes the reference from the inverse' do
|
|
2192
|
+
expect(deleted.related).to be_empty
|
|
2130
2193
|
end
|
|
2131
2194
|
|
|
2132
|
-
it
|
|
2195
|
+
it 'removes the foreign keys from the inverse' do
|
|
2133
2196
|
expect(deleted.related_ids).to be_empty
|
|
2134
2197
|
end
|
|
2135
2198
|
end
|
|
2136
|
-
end
|
|
2137
|
-
end
|
|
2138
2199
|
|
|
2139
|
-
|
|
2200
|
+
context 'when deleting with reloading' do
|
|
2201
|
+
context "when deleting from the front side" do
|
|
2202
|
+
let(:reloaded) { tag_one.reload }
|
|
2203
|
+
let!(:deleted) { reloaded.related.send(method, tag_two) }
|
|
2140
2204
|
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2205
|
+
it 'deletes the document from the relation' do
|
|
2206
|
+
expect(reloaded.related).to be_empty
|
|
2207
|
+
end
|
|
2144
2208
|
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2209
|
+
it 'deletes the foreign key from the relation' do
|
|
2210
|
+
expect(reloaded.related_ids).to be_empty
|
|
2211
|
+
end
|
|
2148
2212
|
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2213
|
+
it 'removes the reference from the inverse' do
|
|
2214
|
+
expect(deleted.related).to be_empty
|
|
2215
|
+
end
|
|
2152
2216
|
|
|
2153
|
-
|
|
2217
|
+
it 'removes the foreign keys from the inverse' do
|
|
2218
|
+
expect(deleted.related_ids).to be_empty
|
|
2219
|
+
end
|
|
2220
|
+
end
|
|
2154
2221
|
|
|
2155
|
-
|
|
2222
|
+
context 'when deleting from the inverse side' do
|
|
2223
|
+
let(:reloaded) { tag_two.reload }
|
|
2224
|
+
let!(:deleted) { reloaded.related.send(method, tag_one) }
|
|
2156
2225
|
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2226
|
+
it 'deletes the document from the relation' do
|
|
2227
|
+
expect(reloaded.related).to be_empty
|
|
2228
|
+
end
|
|
2160
2229
|
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2230
|
+
it 'deletes the foreign key from the relation' do
|
|
2231
|
+
expect(reloaded.related_ids).to be_empty
|
|
2232
|
+
end
|
|
2164
2233
|
|
|
2165
|
-
|
|
2166
|
-
|
|
2234
|
+
it 'removes the foreign keys from the inverse' do
|
|
2235
|
+
expect(deleted.related_ids).to be_empty
|
|
2236
|
+
end
|
|
2167
2237
|
end
|
|
2168
2238
|
end
|
|
2239
|
+
end
|
|
2169
2240
|
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
expect(post).to receive(:before_remove_tag).and_raise
|
|
2174
|
-
begin; post.tags.delete(tag); rescue; end
|
|
2175
|
-
end
|
|
2241
|
+
context 'when the association has callbacks' do
|
|
2242
|
+
let(:post) { Post.new }
|
|
2243
|
+
let(:tag) { Tag.new }
|
|
2176
2244
|
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
end
|
|
2245
|
+
before do
|
|
2246
|
+
post.tags << tag
|
|
2180
2247
|
end
|
|
2181
|
-
end
|
|
2182
2248
|
|
|
2183
|
-
|
|
2249
|
+
context 'when the callback is a before_remove' do
|
|
2250
|
+
context 'when there are no errors' do
|
|
2251
|
+
before do
|
|
2252
|
+
post.tags.send(method, tag)
|
|
2253
|
+
end
|
|
2184
2254
|
|
|
2185
|
-
|
|
2255
|
+
it 'executes the callback' do
|
|
2256
|
+
expect(post.before_remove_called).to be true
|
|
2257
|
+
end
|
|
2186
2258
|
|
|
2187
|
-
|
|
2188
|
-
|
|
2259
|
+
it 'removes the document from the relation' do
|
|
2260
|
+
expect(post.tags).to be_empty
|
|
2261
|
+
end
|
|
2189
2262
|
end
|
|
2190
2263
|
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2264
|
+
context "when errors are raised" do
|
|
2265
|
+
before do
|
|
2266
|
+
expect(post).to receive(:before_remove_tag).and_raise
|
|
2267
|
+
begin; post.tags.send(method, tag); rescue; end
|
|
2268
|
+
end
|
|
2194
2269
|
|
|
2195
|
-
|
|
2196
|
-
|
|
2270
|
+
it 'does not remove the document from the relation' do
|
|
2271
|
+
expect(post.tags).to eq([ tag ])
|
|
2272
|
+
end
|
|
2197
2273
|
end
|
|
2198
2274
|
end
|
|
2199
2275
|
|
|
2200
|
-
context
|
|
2276
|
+
context 'when the callback is an after_remove' do
|
|
2277
|
+
context 'when no errors are raised' do
|
|
2278
|
+
before do
|
|
2279
|
+
post.tags.send(method, tag)
|
|
2280
|
+
end
|
|
2201
2281
|
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2282
|
+
it 'executes the callback' do
|
|
2283
|
+
expect(post.after_remove_called).to be true
|
|
2284
|
+
end
|
|
2285
|
+
|
|
2286
|
+
it 'removes the document from the relation' do
|
|
2287
|
+
expect(post.tags).to be_empty
|
|
2288
|
+
end
|
|
2205
2289
|
end
|
|
2206
2290
|
|
|
2207
|
-
|
|
2208
|
-
|
|
2291
|
+
context 'when errors are raised' do
|
|
2292
|
+
before do
|
|
2293
|
+
expect(post).to receive(:after_remove_tag).and_raise
|
|
2294
|
+
begin; post.tags.send(method, tag); rescue; end
|
|
2295
|
+
end
|
|
2296
|
+
|
|
2297
|
+
it 'removes the document from the relation' do
|
|
2298
|
+
expect(post.tags).to be_empty
|
|
2299
|
+
end
|
|
2209
2300
|
end
|
|
2210
2301
|
end
|
|
2211
2302
|
end
|
|
2212
2303
|
end
|
|
2213
2304
|
end
|
|
2214
2305
|
|
|
2215
|
-
[
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
context "when conditions are provided" do
|
|
2222
|
-
|
|
2223
|
-
let(:person) do
|
|
2224
|
-
Person.create
|
|
2225
|
-
end
|
|
2306
|
+
%i[ delete_all destroy_all ].each do |method|
|
|
2307
|
+
describe "\##{method}" do
|
|
2308
|
+
context 'when the relation is not polymorphic' do
|
|
2309
|
+
context 'when conditions are provided' do
|
|
2310
|
+
let(:person) { Person.create! }
|
|
2226
2311
|
|
|
2227
2312
|
let!(:preference_one) do
|
|
2228
|
-
person.preferences.create(name: "Testing")
|
|
2313
|
+
person.preferences.create!(name: "Testing")
|
|
2229
2314
|
end
|
|
2230
2315
|
|
|
2231
2316
|
let!(:preference_two) do
|
|
2232
|
-
person.preferences.create(name: "Test")
|
|
2317
|
+
person.preferences.create!(name: "Test")
|
|
2233
2318
|
end
|
|
2234
2319
|
|
|
2235
2320
|
let!(:deleted) do
|
|
@@ -2254,14 +2339,18 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2254
2339
|
it "removes the ids from the foreign key" do
|
|
2255
2340
|
expect(person.preference_ids).to eq([ preference_two.id ])
|
|
2256
2341
|
end
|
|
2342
|
+
|
|
2343
|
+
it "sets the association locally" do
|
|
2344
|
+
expect(person.preferences).to eq([preference_two])
|
|
2345
|
+
end
|
|
2257
2346
|
end
|
|
2258
2347
|
|
|
2259
2348
|
context "when conditions are not provided" do
|
|
2260
2349
|
|
|
2261
2350
|
let(:person) do
|
|
2262
|
-
Person.create
|
|
2263
|
-
person.preferences.create(name: "Testing")
|
|
2264
|
-
person.preferences.create(name: "Test")
|
|
2351
|
+
Person.create!.tap do |person|
|
|
2352
|
+
person.preferences.create!(name: "Testing")
|
|
2353
|
+
person.preferences.create!(name: "Test")
|
|
2265
2354
|
end
|
|
2266
2355
|
end
|
|
2267
2356
|
|
|
@@ -2280,6 +2369,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2280
2369
|
it "returns the number of documents deleted" do
|
|
2281
2370
|
expect(deleted).to eq(2)
|
|
2282
2371
|
end
|
|
2372
|
+
|
|
2373
|
+
it "sets the association locally" do
|
|
2374
|
+
expect(person.preferences).to eq([])
|
|
2375
|
+
end
|
|
2283
2376
|
end
|
|
2284
2377
|
end
|
|
2285
2378
|
end
|
|
@@ -2295,13 +2388,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2295
2388
|
describe "#exists?" do
|
|
2296
2389
|
|
|
2297
2390
|
let!(:person) do
|
|
2298
|
-
Person.create
|
|
2391
|
+
Person.create!
|
|
2299
2392
|
end
|
|
2300
2393
|
|
|
2301
2394
|
context "when documents exist in the database" do
|
|
2302
2395
|
|
|
2303
2396
|
before do
|
|
2304
|
-
person.preferences.create
|
|
2397
|
+
person.preferences.create!
|
|
2305
2398
|
end
|
|
2306
2399
|
|
|
2307
2400
|
it "returns true" do
|
|
@@ -2326,23 +2419,23 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2326
2419
|
context "when the relation is not polymorphic" do
|
|
2327
2420
|
|
|
2328
2421
|
let(:person) do
|
|
2329
|
-
Person.create
|
|
2422
|
+
Person.create!
|
|
2330
2423
|
end
|
|
2331
2424
|
|
|
2332
2425
|
let!(:preference_one) do
|
|
2333
|
-
person.preferences.create(name: "Test")
|
|
2426
|
+
person.preferences.create!(name: "Test")
|
|
2334
2427
|
end
|
|
2335
2428
|
|
|
2336
2429
|
let!(:preference_two) do
|
|
2337
|
-
person.preferences.create(name: "OMG I has relations")
|
|
2430
|
+
person.preferences.create!(name: "OMG I has relations")
|
|
2338
2431
|
end
|
|
2339
2432
|
|
|
2340
2433
|
let!(:unrelated_pref) do
|
|
2341
|
-
Preference.create(name: "orphan annie")
|
|
2434
|
+
Preference.create!(name: "orphan annie")
|
|
2342
2435
|
end
|
|
2343
2436
|
|
|
2344
2437
|
let!(:unrelated_pref_two) do
|
|
2345
|
-
Preference.create(name: "orphan two")
|
|
2438
|
+
Preference.create!(name: "orphan two")
|
|
2346
2439
|
end
|
|
2347
2440
|
|
|
2348
2441
|
context "when providing an id" do
|
|
@@ -2367,39 +2460,29 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2367
2460
|
it "raises an error" do
|
|
2368
2461
|
expect {
|
|
2369
2462
|
preference
|
|
2370
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2463
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2371
2464
|
end
|
|
2372
2465
|
end
|
|
2373
2466
|
|
|
2374
2467
|
context "when the id does not match" do
|
|
2375
2468
|
|
|
2376
2469
|
context "when config set to raise error" do
|
|
2377
|
-
|
|
2378
|
-
before do
|
|
2379
|
-
Mongoid.raise_not_found_error = true
|
|
2380
|
-
end
|
|
2470
|
+
config_override :raise_not_found_error, true
|
|
2381
2471
|
|
|
2382
2472
|
it "raises an error" do
|
|
2383
2473
|
expect {
|
|
2384
2474
|
person.preferences.find(BSON::ObjectId.new)
|
|
2385
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2475
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2386
2476
|
end
|
|
2387
2477
|
end
|
|
2388
2478
|
|
|
2389
2479
|
context "when config set not to raise error" do
|
|
2480
|
+
config_override :raise_not_found_error, false
|
|
2390
2481
|
|
|
2391
2482
|
let(:preference) do
|
|
2392
2483
|
person.preferences.find(BSON::ObjectId.new)
|
|
2393
2484
|
end
|
|
2394
2485
|
|
|
2395
|
-
before do
|
|
2396
|
-
Mongoid.raise_not_found_error = false
|
|
2397
|
-
end
|
|
2398
|
-
|
|
2399
|
-
after do
|
|
2400
|
-
Mongoid.raise_not_found_error = true
|
|
2401
|
-
end
|
|
2402
|
-
|
|
2403
2486
|
it "returns nil" do
|
|
2404
2487
|
expect(preference).to be_nil
|
|
2405
2488
|
end
|
|
@@ -2420,7 +2503,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2420
2503
|
end
|
|
2421
2504
|
end
|
|
2422
2505
|
|
|
2423
|
-
context "when the ids
|
|
2506
|
+
context "when the ids match unreferenced documents" do
|
|
2424
2507
|
|
|
2425
2508
|
let(:preferences) do
|
|
2426
2509
|
person.preferences.find(
|
|
@@ -2431,39 +2514,29 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2431
2514
|
it "raises an error" do
|
|
2432
2515
|
expect {
|
|
2433
2516
|
preferences
|
|
2434
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2517
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2435
2518
|
end
|
|
2436
2519
|
end
|
|
2437
2520
|
|
|
2438
2521
|
context "when the ids do not match" do
|
|
2439
2522
|
|
|
2440
2523
|
context "when config set to raise error" do
|
|
2441
|
-
|
|
2442
|
-
before do
|
|
2443
|
-
Mongoid.raise_not_found_error = true
|
|
2444
|
-
end
|
|
2524
|
+
config_override :raise_not_found_error, true
|
|
2445
2525
|
|
|
2446
2526
|
it "raises an error" do
|
|
2447
2527
|
expect {
|
|
2448
2528
|
person.preferences.find([ BSON::ObjectId.new ])
|
|
2449
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2529
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Preference with id\(s\)/)
|
|
2450
2530
|
end
|
|
2451
2531
|
end
|
|
2452
2532
|
|
|
2453
2533
|
context "when config set not to raise error" do
|
|
2534
|
+
config_override :raise_not_found_error, false
|
|
2454
2535
|
|
|
2455
2536
|
let(:preferences) do
|
|
2456
2537
|
person.preferences.find([ BSON::ObjectId.new ])
|
|
2457
2538
|
end
|
|
2458
2539
|
|
|
2459
|
-
before do
|
|
2460
|
-
Mongoid.raise_not_found_error = false
|
|
2461
|
-
end
|
|
2462
|
-
|
|
2463
|
-
after do
|
|
2464
|
-
Mongoid.raise_not_found_error = true
|
|
2465
|
-
end
|
|
2466
|
-
|
|
2467
2540
|
it "returns an empty array" do
|
|
2468
2541
|
expect(preferences).to be_empty
|
|
2469
2542
|
end
|
|
@@ -2478,11 +2551,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2478
2551
|
context "when the relation is not polymorphic" do
|
|
2479
2552
|
|
|
2480
2553
|
let(:person) do
|
|
2481
|
-
Person.create
|
|
2554
|
+
Person.create!
|
|
2482
2555
|
end
|
|
2483
2556
|
|
|
2484
2557
|
let!(:preference) do
|
|
2485
|
-
person.preferences.create(name: "Testing")
|
|
2558
|
+
person.preferences.create!(name: "Testing")
|
|
2486
2559
|
end
|
|
2487
2560
|
|
|
2488
2561
|
context "when the document exists" do
|
|
@@ -2518,11 +2591,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2518
2591
|
context "when the relation is not polymorphic" do
|
|
2519
2592
|
|
|
2520
2593
|
let(:person) do
|
|
2521
|
-
Person.create
|
|
2594
|
+
Person.create!
|
|
2522
2595
|
end
|
|
2523
2596
|
|
|
2524
2597
|
let!(:preference) do
|
|
2525
|
-
person.preferences.create(name: "Testing")
|
|
2598
|
+
person.preferences.create!(name: "Testing")
|
|
2526
2599
|
end
|
|
2527
2600
|
|
|
2528
2601
|
context "when the document exists" do
|
|
@@ -2567,11 +2640,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2567
2640
|
context "when the relation is not polymorphic" do
|
|
2568
2641
|
|
|
2569
2642
|
let(:person) do
|
|
2570
|
-
Person.create
|
|
2643
|
+
Person.create!
|
|
2571
2644
|
end
|
|
2572
2645
|
|
|
2573
2646
|
let!(:preference) do
|
|
2574
|
-
person.preferences.create(name: "Testing")
|
|
2647
|
+
person.preferences.create!(name: "Testing")
|
|
2575
2648
|
end
|
|
2576
2649
|
|
|
2577
2650
|
context "when the document exists" do
|
|
@@ -2605,15 +2678,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2605
2678
|
describe "#max" do
|
|
2606
2679
|
|
|
2607
2680
|
let(:person) do
|
|
2608
|
-
Person.create
|
|
2681
|
+
Person.create!
|
|
2609
2682
|
end
|
|
2610
2683
|
|
|
2611
2684
|
let(:preference_one) do
|
|
2612
|
-
Preference.create(ranking: 5)
|
|
2685
|
+
Preference.create!(ranking: 5)
|
|
2613
2686
|
end
|
|
2614
2687
|
|
|
2615
2688
|
let(:preference_two) do
|
|
2616
|
-
Preference.create(ranking: 10)
|
|
2689
|
+
Preference.create!(ranking: 10)
|
|
2617
2690
|
end
|
|
2618
2691
|
|
|
2619
2692
|
before do
|
|
@@ -2634,15 +2707,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2634
2707
|
describe "#max_by" do
|
|
2635
2708
|
|
|
2636
2709
|
let(:person) do
|
|
2637
|
-
Person.create
|
|
2710
|
+
Person.create!
|
|
2638
2711
|
end
|
|
2639
2712
|
|
|
2640
2713
|
let(:preference_one) do
|
|
2641
|
-
Preference.create(ranking: 5)
|
|
2714
|
+
Preference.create!(ranking: 5)
|
|
2642
2715
|
end
|
|
2643
2716
|
|
|
2644
2717
|
let(:preference_two) do
|
|
2645
|
-
Preference.create(ranking: 10)
|
|
2718
|
+
Preference.create!(ranking: 10)
|
|
2646
2719
|
end
|
|
2647
2720
|
|
|
2648
2721
|
before do
|
|
@@ -2661,19 +2734,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2661
2734
|
describe "#method_missing" do
|
|
2662
2735
|
|
|
2663
2736
|
let!(:person) do
|
|
2664
|
-
Person.create
|
|
2737
|
+
Person.create!
|
|
2665
2738
|
end
|
|
2666
2739
|
|
|
2667
2740
|
let!(:preference_one) do
|
|
2668
|
-
person.preferences.create(name: "First", value: "Posting")
|
|
2741
|
+
person.preferences.create!(name: "First", value: "Posting")
|
|
2669
2742
|
end
|
|
2670
2743
|
|
|
2671
2744
|
let!(:preference_two) do
|
|
2672
|
-
person.preferences.create(name: "Second", value: "Testing")
|
|
2745
|
+
person.preferences.create!(name: "Second", value: "Testing")
|
|
2673
2746
|
end
|
|
2674
2747
|
|
|
2675
2748
|
let!(:unrelated) do
|
|
2676
|
-
Preference.create(name: "Third")
|
|
2749
|
+
Preference.create!(name: "Third")
|
|
2677
2750
|
end
|
|
2678
2751
|
|
|
2679
2752
|
context "when providing a single criteria" do
|
|
@@ -2686,7 +2759,8 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2686
2759
|
expect(preferences).to eq([ preference_one ])
|
|
2687
2760
|
end
|
|
2688
2761
|
|
|
2689
|
-
context 'when providing a collation'
|
|
2762
|
+
context 'when providing a collation' do
|
|
2763
|
+
min_server_version '3.4'
|
|
2690
2764
|
|
|
2691
2765
|
let(:preferences) do
|
|
2692
2766
|
person.preferences.where(name: "FIRST").collation(locale: 'en_US', strength: 2).to_a
|
|
@@ -2747,7 +2821,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2747
2821
|
context "when the inverse relation is not defined" do
|
|
2748
2822
|
|
|
2749
2823
|
let!(:house) do
|
|
2750
|
-
person.houses.create(name: "Wayne Manor")
|
|
2824
|
+
person.houses.create!(name: "Wayne Manor")
|
|
2751
2825
|
end
|
|
2752
2826
|
|
|
2753
2827
|
it "returns the distinct values for the fields" do
|
|
@@ -2761,15 +2835,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2761
2835
|
describe "#min" do
|
|
2762
2836
|
|
|
2763
2837
|
let(:person) do
|
|
2764
|
-
Person.create
|
|
2838
|
+
Person.create!
|
|
2765
2839
|
end
|
|
2766
2840
|
|
|
2767
2841
|
let(:preference_one) do
|
|
2768
|
-
Preference.create(ranking: 5)
|
|
2842
|
+
Preference.create!(ranking: 5)
|
|
2769
2843
|
end
|
|
2770
2844
|
|
|
2771
2845
|
let(:preference_two) do
|
|
2772
|
-
Preference.create(ranking: 10)
|
|
2846
|
+
Preference.create!(ranking: 10)
|
|
2773
2847
|
end
|
|
2774
2848
|
|
|
2775
2849
|
before do
|
|
@@ -2790,15 +2864,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2790
2864
|
describe "#min_by" do
|
|
2791
2865
|
|
|
2792
2866
|
let(:person) do
|
|
2793
|
-
Person.create
|
|
2867
|
+
Person.create!
|
|
2794
2868
|
end
|
|
2795
2869
|
|
|
2796
2870
|
let(:preference_one) do
|
|
2797
|
-
Preference.create(ranking: 5)
|
|
2871
|
+
Preference.create!(ranking: 5)
|
|
2798
2872
|
end
|
|
2799
2873
|
|
|
2800
2874
|
let(:preference_two) do
|
|
2801
|
-
Preference.create(ranking: 10)
|
|
2875
|
+
Preference.create!(ranking: 10)
|
|
2802
2876
|
end
|
|
2803
2877
|
|
|
2804
2878
|
before do
|
|
@@ -2824,15 +2898,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2824
2898
|
describe "#nullify_all" do
|
|
2825
2899
|
|
|
2826
2900
|
let(:person) do
|
|
2827
|
-
Person.create
|
|
2901
|
+
Person.create!
|
|
2828
2902
|
end
|
|
2829
2903
|
|
|
2830
2904
|
let!(:preference_one) do
|
|
2831
|
-
person.preferences.create(name: "One")
|
|
2905
|
+
person.preferences.create!(name: "One")
|
|
2832
2906
|
end
|
|
2833
2907
|
|
|
2834
2908
|
let!(:preference_two) do
|
|
2835
|
-
person.preferences.create(name: "Two")
|
|
2909
|
+
person.preferences.create!(name: "Two")
|
|
2836
2910
|
end
|
|
2837
2911
|
|
|
2838
2912
|
before do
|
|
@@ -2878,9 +2952,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2878
2952
|
person.preferences
|
|
2879
2953
|
end
|
|
2880
2954
|
|
|
2881
|
-
Array.public_instance_methods.each do |method|
|
|
2955
|
+
Array.public_instance_methods.sort.each do |method|
|
|
2882
2956
|
|
|
2883
|
-
context "when checking
|
|
2957
|
+
context "when checking Array##{method}" do
|
|
2958
|
+
|
|
2959
|
+
before do
|
|
2960
|
+
expect([].respond_to?(method)).to be true
|
|
2961
|
+
end
|
|
2884
2962
|
|
|
2885
2963
|
it "returns true" do
|
|
2886
2964
|
expect(preferences.respond_to?(method)).to be true
|
|
@@ -2888,9 +2966,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2888
2966
|
end
|
|
2889
2967
|
end
|
|
2890
2968
|
|
|
2891
|
-
Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy.public_instance_methods.each do |method|
|
|
2969
|
+
Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy.public_instance_methods.sort.each do |method|
|
|
2892
2970
|
|
|
2893
|
-
context "when checking
|
|
2971
|
+
context "when checking Proxy##{method}" do
|
|
2894
2972
|
|
|
2895
2973
|
it "returns true" do
|
|
2896
2974
|
expect(preferences.respond_to?(method)).to be true
|
|
@@ -2898,9 +2976,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2898
2976
|
end
|
|
2899
2977
|
end
|
|
2900
2978
|
|
|
2901
|
-
Preference.scopes.keys.each do |method|
|
|
2979
|
+
Preference.scopes.keys.sort.each do |method|
|
|
2902
2980
|
|
|
2903
|
-
context "when checking #{method}" do
|
|
2981
|
+
context "when checking scope #{method}" do
|
|
2904
2982
|
|
|
2905
2983
|
it "returns true" do
|
|
2906
2984
|
expect(preferences.respond_to?(method)).to be true
|
|
@@ -2911,20 +2989,36 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2911
2989
|
|
|
2912
2990
|
describe "#scoped" do
|
|
2913
2991
|
|
|
2914
|
-
let(:person) do
|
|
2915
|
-
Person.new
|
|
2916
|
-
end
|
|
2917
|
-
|
|
2918
2992
|
let(:scoped) do
|
|
2919
2993
|
person.preferences.scoped
|
|
2920
2994
|
end
|
|
2921
2995
|
|
|
2922
|
-
|
|
2923
|
-
|
|
2996
|
+
context 'when association is empty' do
|
|
2997
|
+
|
|
2998
|
+
let(:person) do
|
|
2999
|
+
Person.new
|
|
3000
|
+
end
|
|
3001
|
+
|
|
3002
|
+
it "returns the relation criteria" do
|
|
3003
|
+
expect(scoped).to be_a(Mongoid::Criteria)
|
|
3004
|
+
end
|
|
3005
|
+
|
|
3006
|
+
it "returns with an empty selector" do
|
|
3007
|
+
expect(scoped.selector).to eq("_id" => { "$in" => [] })
|
|
3008
|
+
end
|
|
2924
3009
|
end
|
|
2925
3010
|
|
|
2926
|
-
|
|
2927
|
-
|
|
3011
|
+
context 'when association is not empty' do
|
|
3012
|
+
|
|
3013
|
+
let(:person) do
|
|
3014
|
+
Person.create!(preferences: [
|
|
3015
|
+
Preference.new(id: 123),
|
|
3016
|
+
])
|
|
3017
|
+
end
|
|
3018
|
+
|
|
3019
|
+
it "returns with a selector including association element ids" do
|
|
3020
|
+
expect(scoped.selector).to eq("_id" => { "$in" => [123] })
|
|
3021
|
+
end
|
|
2928
3022
|
end
|
|
2929
3023
|
end
|
|
2930
3024
|
|
|
@@ -2933,13 +3027,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2933
3027
|
describe "##{method}" do
|
|
2934
3028
|
|
|
2935
3029
|
let(:person) do
|
|
2936
|
-
Person.create
|
|
3030
|
+
Person.create!
|
|
2937
3031
|
end
|
|
2938
3032
|
|
|
2939
3033
|
context "when documents have been persisted" do
|
|
2940
3034
|
|
|
2941
3035
|
let!(:preference) do
|
|
2942
|
-
person.preferences.create(name: "Testing")
|
|
3036
|
+
person.preferences.create!(name: "Testing")
|
|
2943
3037
|
end
|
|
2944
3038
|
|
|
2945
3039
|
it "returns the number of documents" do
|
|
@@ -2951,7 +3045,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2951
3045
|
|
|
2952
3046
|
before do
|
|
2953
3047
|
person.preferences.build(name: "Test")
|
|
2954
|
-
person.preferences.create(name: "Test 2")
|
|
3048
|
+
person.preferences.create!(name: "Test 2")
|
|
2955
3049
|
end
|
|
2956
3050
|
|
|
2957
3051
|
it "returns the total number of documents" do
|
|
@@ -2966,15 +3060,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2966
3060
|
context "when the relation has no default scope" do
|
|
2967
3061
|
|
|
2968
3062
|
let!(:person) do
|
|
2969
|
-
Person.create
|
|
3063
|
+
Person.create!
|
|
2970
3064
|
end
|
|
2971
3065
|
|
|
2972
3066
|
let!(:preference_one) do
|
|
2973
|
-
person.preferences.create(name: "first")
|
|
3067
|
+
person.preferences.create!(name: "first")
|
|
2974
3068
|
end
|
|
2975
3069
|
|
|
2976
3070
|
let!(:preference_two) do
|
|
2977
|
-
Preference.create(name: "second")
|
|
3071
|
+
Preference.create!(name: "second")
|
|
2978
3072
|
end
|
|
2979
3073
|
|
|
2980
3074
|
let(:unscoped) do
|
|
@@ -2989,15 +3083,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
2989
3083
|
context "when the relation has a default scope" do
|
|
2990
3084
|
|
|
2991
3085
|
let!(:person) do
|
|
2992
|
-
Person.create
|
|
3086
|
+
Person.create!
|
|
2993
3087
|
end
|
|
2994
3088
|
|
|
2995
3089
|
let!(:house_one) do
|
|
2996
|
-
person.houses.create(name: "first")
|
|
3090
|
+
person.houses.create!(name: "first")
|
|
2997
3091
|
end
|
|
2998
3092
|
|
|
2999
3093
|
let!(:house_two) do
|
|
3000
|
-
House.create(name: "second")
|
|
3094
|
+
House.create!(name: "second")
|
|
3001
3095
|
end
|
|
3002
3096
|
|
|
3003
3097
|
let(:unscoped) do
|
|
@@ -3033,10 +3127,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3033
3127
|
end
|
|
3034
3128
|
|
|
3035
3129
|
before do
|
|
3036
|
-
person.update_attributes(
|
|
3130
|
+
person.update_attributes!(
|
|
3037
3131
|
houses: [ wife_house, exwife_house, girlfriend_house ]
|
|
3038
3132
|
)
|
|
3039
|
-
person.update_attributes(house_ids: [ girlfriend_house.id ])
|
|
3133
|
+
person.update_attributes!(house_ids: [ girlfriend_house.id ])
|
|
3040
3134
|
end
|
|
3041
3135
|
|
|
3042
3136
|
context "when reloading" do
|
|
@@ -3083,7 +3177,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3083
3177
|
end
|
|
3084
3178
|
|
|
3085
3179
|
let!(:business) do
|
|
3086
|
-
Business.create(name: "serious", owners: [ user ])
|
|
3180
|
+
Business.create!(name: "serious", owners: [ user ])
|
|
3087
3181
|
end
|
|
3088
3182
|
|
|
3089
3183
|
before do
|
|
@@ -3126,11 +3220,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3126
3220
|
context "when the documents are persisted" do
|
|
3127
3221
|
|
|
3128
3222
|
let(:user) do
|
|
3129
|
-
User.create(name: "tst")
|
|
3223
|
+
User.create!(name: "tst")
|
|
3130
3224
|
end
|
|
3131
3225
|
|
|
3132
3226
|
let(:business) do
|
|
3133
|
-
Business.create(name: "srs", owners: [ user ])
|
|
3227
|
+
Business.create!(name: "srs", owners: [ user ])
|
|
3134
3228
|
end
|
|
3135
3229
|
|
|
3136
3230
|
before do
|
|
@@ -3174,11 +3268,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3174
3268
|
context "when binding the relation multiple times" do
|
|
3175
3269
|
|
|
3176
3270
|
let(:person) do
|
|
3177
|
-
Person.create
|
|
3271
|
+
Person.create!
|
|
3178
3272
|
end
|
|
3179
3273
|
|
|
3180
3274
|
let(:preference) do
|
|
3181
|
-
person.preferences.create(name: "testing")
|
|
3275
|
+
person.preferences.create!(name: "testing")
|
|
3182
3276
|
end
|
|
3183
3277
|
|
|
3184
3278
|
before do
|
|
@@ -3197,19 +3291,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3197
3291
|
context "when the association has order criteria" do
|
|
3198
3292
|
|
|
3199
3293
|
let(:person) do
|
|
3200
|
-
Person.create
|
|
3294
|
+
Person.create!
|
|
3201
3295
|
end
|
|
3202
3296
|
|
|
3203
3297
|
let(:preference_one) do
|
|
3204
|
-
OrderedPreference.create(name: 'preference-1', value: 10)
|
|
3298
|
+
OrderedPreference.create!(name: 'preference-1', value: 10)
|
|
3205
3299
|
end
|
|
3206
3300
|
|
|
3207
3301
|
let(:preference_two) do
|
|
3208
|
-
OrderedPreference.create(name: 'preference-2', value: 20)
|
|
3302
|
+
OrderedPreference.create!(name: 'preference-2', value: 20)
|
|
3209
3303
|
end
|
|
3210
3304
|
|
|
3211
3305
|
let(:preference_three) do
|
|
3212
|
-
OrderedPreference.create(name: 'preference-3', value: 20)
|
|
3306
|
+
OrderedPreference.create!(name: 'preference-3', value: 20)
|
|
3213
3307
|
end
|
|
3214
3308
|
|
|
3215
3309
|
before do
|
|
@@ -3233,7 +3327,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3233
3327
|
context "when the parent is not a new record and freshly loaded" do
|
|
3234
3328
|
|
|
3235
3329
|
let(:person) do
|
|
3236
|
-
Person.create
|
|
3330
|
+
Person.create!
|
|
3237
3331
|
end
|
|
3238
3332
|
|
|
3239
3333
|
let(:preference) do
|
|
@@ -3242,7 +3336,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3242
3336
|
|
|
3243
3337
|
before do
|
|
3244
3338
|
person.preferences = [ preference ]
|
|
3245
|
-
person.save
|
|
3339
|
+
person.save!
|
|
3246
3340
|
person.reload
|
|
3247
3341
|
person.preferences = nil
|
|
3248
3342
|
end
|
|
@@ -3265,15 +3359,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3265
3359
|
context "when reloading the relation" do
|
|
3266
3360
|
|
|
3267
3361
|
let!(:person) do
|
|
3268
|
-
Person.create
|
|
3362
|
+
Person.create!
|
|
3269
3363
|
end
|
|
3270
3364
|
|
|
3271
3365
|
let!(:preference_one) do
|
|
3272
|
-
Preference.create(name: "one")
|
|
3366
|
+
Preference.create!(name: "one")
|
|
3273
3367
|
end
|
|
3274
3368
|
|
|
3275
3369
|
let!(:preference_two) do
|
|
3276
|
-
Preference.create(name: "two")
|
|
3370
|
+
Preference.create!(name: "two")
|
|
3277
3371
|
end
|
|
3278
3372
|
|
|
3279
3373
|
before do
|
|
@@ -3317,7 +3411,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3317
3411
|
context "when the document is new" do
|
|
3318
3412
|
|
|
3319
3413
|
let!(:person) do
|
|
3320
|
-
Person.create(preference_names: "one, two")
|
|
3414
|
+
Person.create!(preference_names: "one, two")
|
|
3321
3415
|
end
|
|
3322
3416
|
|
|
3323
3417
|
let(:preference_one) do
|
|
@@ -3353,23 +3447,23 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3353
3447
|
end
|
|
3354
3448
|
|
|
3355
3449
|
let(:preference_one) do
|
|
3356
|
-
Preference.create(name: "one")
|
|
3450
|
+
Preference.create!(name: "one")
|
|
3357
3451
|
end
|
|
3358
3452
|
|
|
3359
3453
|
let(:preference_two) do
|
|
3360
|
-
Preference.create(name: "two")
|
|
3454
|
+
Preference.create!(name: "two")
|
|
3361
3455
|
end
|
|
3362
3456
|
|
|
3363
3457
|
before do
|
|
3364
3458
|
person.preference_ids = [ preference_one.id, preference_two.id ]
|
|
3365
|
-
person.save
|
|
3459
|
+
person.save!
|
|
3366
3460
|
end
|
|
3367
3461
|
|
|
3368
3462
|
context "and the order is changed" do
|
|
3369
3463
|
|
|
3370
3464
|
before do
|
|
3371
3465
|
person.preference_ids = [ preference_two.id, preference_one.id ]
|
|
3372
|
-
person.save
|
|
3466
|
+
person.save!
|
|
3373
3467
|
end
|
|
3374
3468
|
|
|
3375
3469
|
let(:reloaded) do
|
|
@@ -3386,13 +3480,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3386
3480
|
context "and the order is changed and an element is added" do
|
|
3387
3481
|
|
|
3388
3482
|
let(:preference_three) do
|
|
3389
|
-
Preference.create(name: "three")
|
|
3483
|
+
Preference.create!(name: "three")
|
|
3390
3484
|
end
|
|
3391
3485
|
|
|
3392
3486
|
before do
|
|
3393
3487
|
person.preference_ids =
|
|
3394
3488
|
[ preference_two.id, preference_one.id, preference_three.id ]
|
|
3395
|
-
person.save
|
|
3489
|
+
person.save!
|
|
3396
3490
|
end
|
|
3397
3491
|
|
|
3398
3492
|
let(:reloaded) do
|
|
@@ -3409,16 +3503,16 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3409
3503
|
context "and the order is changed and an element is removed" do
|
|
3410
3504
|
|
|
3411
3505
|
let(:preference_three) do
|
|
3412
|
-
Preference.create(name: "three")
|
|
3506
|
+
Preference.create!(name: "three")
|
|
3413
3507
|
end
|
|
3414
3508
|
|
|
3415
3509
|
before do
|
|
3416
3510
|
person.preference_ids =
|
|
3417
3511
|
[ preference_one.id, preference_two.id, preference_three.id ]
|
|
3418
|
-
person.save
|
|
3512
|
+
person.save!
|
|
3419
3513
|
person.preference_ids =
|
|
3420
3514
|
[ preference_three.id, preference_two.id ]
|
|
3421
|
-
person.save
|
|
3515
|
+
person.save!
|
|
3422
3516
|
end
|
|
3423
3517
|
|
|
3424
3518
|
let(:reloaded) do
|
|
@@ -3468,15 +3562,15 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3468
3562
|
context "when the relation exists" do
|
|
3469
3563
|
|
|
3470
3564
|
let!(:person) do
|
|
3471
|
-
Person.create
|
|
3565
|
+
Person.create!
|
|
3472
3566
|
end
|
|
3473
3567
|
|
|
3474
3568
|
let!(:pref_one) do
|
|
3475
|
-
person.preferences.create
|
|
3569
|
+
person.preferences.create!
|
|
3476
3570
|
end
|
|
3477
3571
|
|
|
3478
3572
|
let!(:pref_two) do
|
|
3479
|
-
Preference.create
|
|
3573
|
+
Preference.create!
|
|
3480
3574
|
end
|
|
3481
3575
|
|
|
3482
3576
|
before do
|
|
@@ -3492,15 +3586,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3492
3586
|
context "when using a different primary key" do
|
|
3493
3587
|
|
|
3494
3588
|
let(:dog) do
|
|
3495
|
-
Dog.create(name: 'Doggie')
|
|
3589
|
+
Dog.create!(name: 'Doggie')
|
|
3496
3590
|
end
|
|
3497
3591
|
|
|
3498
3592
|
let(:cat) do
|
|
3499
|
-
Cat.create(name: 'Kitty')
|
|
3593
|
+
Cat.create!(name: 'Kitty')
|
|
3594
|
+
end
|
|
3595
|
+
|
|
3596
|
+
let(:another_cat) do
|
|
3597
|
+
Cat.create!(name: 'Kitten')
|
|
3500
3598
|
end
|
|
3501
3599
|
|
|
3502
3600
|
let(:fire_hydrant) do
|
|
3503
|
-
FireHydrant.create(location: '221B Baker Street')
|
|
3601
|
+
FireHydrant.create!(location: '221B Baker Street')
|
|
3504
3602
|
end
|
|
3505
3603
|
|
|
3506
3604
|
context "when adding to a one-way many to many" do
|
|
@@ -3514,6 +3612,28 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3514
3612
|
end
|
|
3515
3613
|
end
|
|
3516
3614
|
|
|
3615
|
+
context "when adding multiple documents to a one-way many to many" do
|
|
3616
|
+
|
|
3617
|
+
before do
|
|
3618
|
+
fire_hydrant.cats.push([cat, another_cat])
|
|
3619
|
+
end
|
|
3620
|
+
|
|
3621
|
+
it "adds the pk values to the fk set" do
|
|
3622
|
+
expect(fire_hydrant.cat_ids).to eq([cat.name, another_cat.name])
|
|
3623
|
+
end
|
|
3624
|
+
end
|
|
3625
|
+
|
|
3626
|
+
context "when adding a new document to a one-way many to many" do
|
|
3627
|
+
|
|
3628
|
+
before do
|
|
3629
|
+
fire_hydrant.cats.build name: 'Kitten'
|
|
3630
|
+
end
|
|
3631
|
+
|
|
3632
|
+
it "adds the pk values to the fk set" do
|
|
3633
|
+
expect(fire_hydrant.cat_ids).to eq(['Kitten'])
|
|
3634
|
+
end
|
|
3635
|
+
end
|
|
3636
|
+
|
|
3517
3637
|
context "when adding to a two-way many to many" do
|
|
3518
3638
|
|
|
3519
3639
|
before do
|
|
@@ -3570,10 +3690,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3570
3690
|
end
|
|
3571
3691
|
|
|
3572
3692
|
it "should assign relation from both sides" do
|
|
3573
|
-
p1 = Project.create name: 'Foo'
|
|
3574
|
-
p2 = Project.create name: 'Bar'
|
|
3575
|
-
d1 = Distributor.create name: 'Rock'
|
|
3576
|
-
d2 = Distributor.create name: 'Soul'
|
|
3693
|
+
p1 = Project.create! name: 'Foo'
|
|
3694
|
+
p2 = Project.create! name: 'Bar'
|
|
3695
|
+
d1 = Distributor.create! name: 'Rock'
|
|
3696
|
+
d2 = Distributor.create! name: 'Soul'
|
|
3577
3697
|
|
|
3578
3698
|
p1.distributors << d1
|
|
3579
3699
|
expect(p1.d_ids).to match_array([d1.id])
|
|
@@ -3583,4 +3703,58 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
|
|
3583
3703
|
expect(p2.d_ids).to match_array([d2.id])
|
|
3584
3704
|
end
|
|
3585
3705
|
end
|
|
3706
|
+
|
|
3707
|
+
context "when accesing own _id from parent's foreign key in default" do
|
|
3708
|
+
let!(:contract) { HabtmmContract.create! }
|
|
3709
|
+
let!(:signature) { contract.signatures.create! }
|
|
3710
|
+
|
|
3711
|
+
it "is nil" do
|
|
3712
|
+
expect(signature.favorite_signature).to be nil
|
|
3713
|
+
end
|
|
3714
|
+
end
|
|
3715
|
+
|
|
3716
|
+
context "when setting an association on a model that uses the class_name option" do
|
|
3717
|
+
let!(:contract) { HabtmmContract.create! }
|
|
3718
|
+
let!(:signature) { HabtmmSignature.create!(contracts: [contract]) }
|
|
3719
|
+
|
|
3720
|
+
it "populates the inverse foreign key" do
|
|
3721
|
+
expect(signature.contracts.first.signature_ids).to eq([signature.id])
|
|
3722
|
+
end
|
|
3723
|
+
end
|
|
3724
|
+
|
|
3725
|
+
context "when there is a foreign key in the aliased associations" do
|
|
3726
|
+
it "has the correct aliases" do
|
|
3727
|
+
expect(Dog.aliased_associations["breed_ids"]).to eq("breeds")
|
|
3728
|
+
expect(Breed.aliased_associations["dog_ids"]).to eq("dogs")
|
|
3729
|
+
end
|
|
3730
|
+
end
|
|
3731
|
+
|
|
3732
|
+
# This test is for MONGOID-5344 which tests that the initial call to
|
|
3733
|
+
# signature_ids refers to the same array as subsequent calls to signature_ids.
|
|
3734
|
+
# Prior to the change in that ticket, this test broke because the array
|
|
3735
|
+
# returned from write_attribute (which is triggered the first time the
|
|
3736
|
+
# foreign key array is referenced, to set the default), refers to a different
|
|
3737
|
+
# array to the one stored in the attributes hash. This happened because,
|
|
3738
|
+
# when retrieving a document from the database, the attributes hash is actually
|
|
3739
|
+
# a BSON::Document, which applies a transformation to the array before
|
|
3740
|
+
# storing it.
|
|
3741
|
+
context "when executing concat on foreign key array from the db" do
|
|
3742
|
+
config_override :legacy_attributes, false
|
|
3743
|
+
|
|
3744
|
+
before do
|
|
3745
|
+
HabtmmContract.create!
|
|
3746
|
+
HabtmmSignature.create!
|
|
3747
|
+
end
|
|
3748
|
+
|
|
3749
|
+
let!(:contract) { HabtmmContract.first }
|
|
3750
|
+
let!(:signature) { HabtmmSignature.first }
|
|
3751
|
+
|
|
3752
|
+
before do
|
|
3753
|
+
contract.signature_ids.concat([signature.id])
|
|
3754
|
+
end
|
|
3755
|
+
|
|
3756
|
+
it "works on the first attempt" do
|
|
3757
|
+
expect(contract.signature_ids).to eq([signature.id])
|
|
3758
|
+
end
|
|
3759
|
+
end
|
|
3586
3760
|
end
|