mongoid 7.1.1 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +20 -20
- data/README.md +15 -8
- data/Rakefile +61 -5
- data/lib/config/locales/en.yml +162 -56
- data/lib/mongoid/association/accessors.rb +89 -40
- data/lib/mongoid/association/bindable.rb +50 -23
- data/lib/mongoid/association/builders.rb +5 -12
- data/lib/mongoid/association/constrainable.rb +1 -5
- data/lib/mongoid/association/depending.rb +5 -17
- data/lib/mongoid/association/eager_loadable.rb +29 -10
- data/lib/mongoid/association/embedded/batchable.rb +64 -52
- data/lib/mongoid/association/embedded/cyclic.rb +3 -12
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -5
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -16
- data/lib/mongoid/association/embedded/embedded_in.rb +4 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -7
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +110 -92
- data/lib/mongoid/association/embedded/embeds_many.rb +4 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -8
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +50 -19
- data/lib/mongoid/association/embedded/embeds_one.rb +5 -31
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +27 -5
- data/lib/mongoid/association/many.rb +14 -27
- data/lib/mongoid/association/marshalable.rb +0 -5
- data/lib/mongoid/association/nested/many.rb +6 -16
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -13
- data/lib/mongoid/association/nested/one.rb +48 -23
- data/lib/mongoid/association/nested.rb +0 -3
- data/lib/mongoid/association/one.rb +2 -11
- data/lib/mongoid/association/options.rb +9 -42
- data/lib/mongoid/association/proxy.rb +22 -27
- data/lib/mongoid/association/referenced/auto_save.rb +6 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -8
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -19
- data/lib/mongoid/association/referenced/belongs_to.rb +11 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +12 -25
- data/lib/mongoid/association/referenced/eager.rb +5 -26
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +81 -51
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +17 -41
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +438 -461
- data/lib/mongoid/association/referenced/has_many/proxy.rb +58 -84
- data/lib/mongoid/association/referenced/has_many.rb +15 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +12 -5
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +7 -22
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -16
- data/lib/mongoid/association/referenced/has_one.rb +12 -35
- data/lib/mongoid/association/referenced/syncable.rb +4 -21
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +4 -5
- data/lib/mongoid/association/relatable.rb +46 -71
- data/lib/mongoid/association.rb +5 -22
- data/lib/mongoid/atomic/modifiers.rb +7 -54
- data/lib/mongoid/atomic/paths/embedded/many.rb +19 -5
- data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
- data/lib/mongoid/atomic/paths/embedded.rb +0 -3
- data/lib/mongoid/atomic/paths/root.rb +0 -5
- data/lib/mongoid/atomic/paths.rb +0 -1
- data/lib/mongoid/atomic.rb +40 -47
- data/lib/mongoid/attributes/dynamic.rb +5 -22
- data/lib/mongoid/attributes/nested.rb +6 -11
- data/lib/mongoid/attributes/processing.rb +11 -21
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -8
- data/lib/mongoid/attributes.rb +82 -88
- data/lib/mongoid/cacheable.rb +4 -9
- data/lib/mongoid/changeable.rb +148 -69
- data/lib/mongoid/clients/factory.rb +41 -17
- data/lib/mongoid/clients/options.rb +13 -14
- data/lib/mongoid/clients/sessions.rb +8 -11
- data/lib/mongoid/clients/storage_options.rb +7 -17
- data/lib/mongoid/clients/validators/storage.rb +3 -24
- data/lib/mongoid/clients/validators.rb +0 -1
- data/lib/mongoid/clients.rb +1 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +3 -7
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +28 -5
- data/lib/mongoid/config/options.rb +0 -11
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -23
- data/lib/mongoid/config/validators/option.rb +0 -3
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config.rb +183 -39
- data/lib/mongoid/contextual/aggregable/memory.rb +37 -26
- data/lib/mongoid/contextual/aggregable/mongo.rb +29 -32
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +7 -27
- data/lib/mongoid/contextual/command.rb +0 -5
- data/lib/mongoid/contextual/geo_near.rb +8 -41
- data/lib/mongoid/contextual/map_reduce.rb +2 -33
- data/lib/mongoid/contextual/memory.rb +383 -79
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +636 -283
- data/lib/mongoid/contextual/none.rb +262 -31
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +14 -7
- data/lib/mongoid/copyable.rb +39 -16
- data/lib/mongoid/criteria/findable.rb +9 -19
- data/lib/mongoid/criteria/includable.rb +27 -31
- data/lib/mongoid/criteria/inspectable.rb +0 -3
- data/lib/mongoid/criteria/marshalable.rb +10 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -20
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +1 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -25
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -40
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -7
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -6
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -40
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -20
- data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +46 -16
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -18
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -31
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +16 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -5
- data/lib/mongoid/criteria/queryable/key.rb +6 -19
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +123 -38
- data/lib/mongoid/criteria/queryable/optional.rb +11 -62
- data/lib/mongoid/criteria/queryable/options.rb +2 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -14
- data/lib/mongoid/criteria/queryable/selectable.rb +138 -125
- data/lib/mongoid/criteria/queryable/selector.rb +94 -30
- data/lib/mongoid/criteria/queryable/smash.rb +40 -18
- data/lib/mongoid/criteria/queryable/storable.rb +14 -10
- data/lib/mongoid/criteria/queryable.rb +11 -13
- data/lib/mongoid/criteria/scopable.rb +27 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +88 -108
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +149 -99
- data/lib/mongoid/equality.rb +32 -16
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/callback.rb +0 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
- data/lib/mongoid/errors/delete_restriction.rb +8 -12
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
- data/lib/mongoid/errors/document_not_found.rb +33 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +0 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +0 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +0 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_includes.rb +0 -3
- data/lib/mongoid/errors/invalid_index.rb +0 -3
- data/lib/mongoid/errors/invalid_options.rb +0 -3
- data/lib/mongoid/errors/invalid_path.rb +0 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -8
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -4
- data/lib/mongoid/errors/invalid_scope.rb +0 -3
- data/lib/mongoid/errors/invalid_session_use.rb +1 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +0 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
- data/lib/mongoid/errors/mixed_relations.rb +0 -3
- data/lib/mongoid/errors/mongoid_error.rb +4 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +2 -5
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +0 -3
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +0 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
- data/lib/mongoid/errors/no_metadata.rb +0 -3
- data/lib/mongoid/errors/no_parent.rb +0 -3
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -6
- data/lib/mongoid/errors/scope_overwrite.rb +0 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -2
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +0 -3
- data/lib/mongoid/errors/unsaved_document.rb +1 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
- data/lib/mongoid/errors/validations.rb +0 -1
- data/lib/mongoid/errors.rb +15 -4
- data/lib/mongoid/evolvable.rb +1 -4
- data/lib/mongoid/extensions/array.rb +12 -36
- data/lib/mongoid/extensions/big_decimal.rb +33 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -6
- data/lib/mongoid/extensions/date.rb +26 -29
- data/lib/mongoid/extensions/date_time.rb +1 -10
- data/lib/mongoid/extensions/decimal128.rb +0 -5
- data/lib/mongoid/extensions/false_class.rb +3 -8
- data/lib/mongoid/extensions/float.rb +7 -11
- data/lib/mongoid/extensions/hash.rb +19 -37
- data/lib/mongoid/extensions/integer.rb +7 -13
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -5
- data/lib/mongoid/extensions/object.rb +11 -48
- data/lib/mongoid/extensions/object_id.rb +0 -7
- data/lib/mongoid/extensions/range.rb +40 -20
- data/lib/mongoid/extensions/regexp.rb +12 -8
- data/lib/mongoid/extensions/set.rb +11 -11
- data/lib/mongoid/extensions/string.rb +12 -52
- data/lib/mongoid/extensions/symbol.rb +4 -22
- data/lib/mongoid/extensions/time.rb +28 -26
- data/lib/mongoid/extensions/time_with_zone.rb +14 -11
- data/lib/mongoid/extensions/true_class.rb +3 -8
- data/lib/mongoid/extensions.rb +17 -3
- data/lib/mongoid/factory.rb +80 -16
- data/lib/mongoid/fields/foreign_key.rb +11 -25
- data/lib/mongoid/fields/localized.rb +19 -15
- data/lib/mongoid/fields/standard.rb +17 -40
- data/lib/mongoid/fields/validators/macro.rb +25 -24
- data/lib/mongoid/fields/validators.rb +0 -1
- data/lib/mongoid/fields.rb +346 -75
- data/lib/mongoid/findable.rb +107 -31
- data/lib/mongoid/indexable/specification.rb +2 -17
- data/lib/mongoid/indexable/validators/options.rb +6 -9
- data/lib/mongoid/indexable.rb +3 -20
- data/lib/mongoid/inspectable.rb +2 -11
- data/lib/mongoid/interceptable.rb +79 -41
- data/lib/mongoid/loggable.rb +0 -9
- data/lib/mongoid/matchable.rb +2 -155
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +130 -0
- data/lib/mongoid/persistable/creatable.rb +20 -29
- data/lib/mongoid/persistable/deletable.rb +4 -22
- data/lib/mongoid/persistable/destroyable.rb +9 -10
- data/lib/mongoid/persistable/incrementable.rb +0 -5
- data/lib/mongoid/persistable/logical.rb +0 -5
- data/lib/mongoid/persistable/poppable.rb +0 -5
- data/lib/mongoid/persistable/pullable.rb +0 -7
- data/lib/mongoid/persistable/pushable.rb +4 -8
- data/lib/mongoid/persistable/renamable.rb +0 -5
- data/lib/mongoid/persistable/savable.rb +13 -8
- data/lib/mongoid/persistable/settable.rb +0 -5
- data/lib/mongoid/persistable/unsettable.rb +2 -7
- data/lib/mongoid/persistable/updatable.rb +96 -29
- data/lib/mongoid/persistable/upsertable.rb +20 -8
- data/lib/mongoid/persistable.rb +6 -26
- data/lib/mongoid/persistence_context.rb +71 -43
- data/lib/mongoid/positional.rb +0 -5
- data/lib/mongoid/query_cache.rb +16 -236
- data/lib/mongoid/railtie.rb +0 -15
- data/lib/mongoid/railties/controller_runtime.rb +1 -2
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +17 -20
- data/lib/mongoid/scopable.rb +32 -56
- data/lib/mongoid/selectable.rb +5 -17
- data/lib/mongoid/serializable.rb +11 -22
- data/lib/mongoid/shardable.rb +49 -16
- data/lib/mongoid/stateful.rb +57 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +59 -11
- data/lib/mongoid/threaded/lifecycle.rb +5 -26
- data/lib/mongoid/threaded.rb +42 -67
- data/lib/mongoid/timestamps/created/short.rb +0 -1
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +0 -7
- data/lib/mongoid/timestamps/updated/short.rb +0 -1
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +0 -1
- data/lib/mongoid/touchable.rb +34 -13
- data/lib/mongoid/traversable.rb +181 -59
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +1 -4
- data/lib/mongoid/validatable/format.rb +0 -1
- data/lib/mongoid/validatable/length.rb +0 -1
- data/lib/mongoid/validatable/localizable.rb +1 -4
- data/lib/mongoid/validatable/macros.rb +5 -14
- data/lib/mongoid/validatable/presence.rb +6 -13
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -40
- data/lib/mongoid/validatable.rb +9 -27
- data/lib/mongoid/version.rb +1 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +42 -18
- data/lib/rails/generators/mongoid/config/config_generator.rb +8 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -6
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +0 -1
- data/lib/rails/mongoid.rb +0 -3
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +16 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +18 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +163 -1
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +0 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +192 -0
- data/spec/integration/callbacks_spec.rb +584 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +51 -0
- data/spec/integration/criteria/logical_spec.rb +43 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -19
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +20 -5
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +25 -9
- data/spec/mongoid/association/accessors_spec.rb +282 -78
- data/spec/mongoid/association/auto_save_spec.rb +72 -34
- data/spec/mongoid/association/builders_spec.rb +1 -2
- data/spec/mongoid/association/constrainable_spec.rb +0 -1
- data/spec/mongoid/association/counter_cache_spec.rb +33 -34
- data/spec/mongoid/association/depending_spec.rb +429 -339
- data/spec/mongoid/association/eager_spec.rb +6 -6
- data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -2
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +150 -14
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +704 -198
- data/spec/mongoid/association/embedded/embeds_many_models.rb +194 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -1
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +78 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +36 -24
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +20 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -3
- data/spec/mongoid/association/macros_spec.rb +9 -10
- data/spec/mongoid/association/nested/many_spec.rb +0 -1
- data/spec/mongoid/association/nested/one_spec.rb +16 -13
- data/spec/mongoid/association/options_spec.rb +0 -1
- data/spec/mongoid/association/polymorphic_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -2
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +109 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +112 -59
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +20 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +26 -22
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +523 -372
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +56 -3
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +130 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +413 -130
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +857 -503
- data/spec/mongoid/association/referenced/has_many_models.rb +59 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +46 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -10
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +133 -28
- data/spec/mongoid/association/referenced/has_one_models.rb +63 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +22 -2
- data/spec/mongoid/association/reflections_spec.rb +0 -1
- data/spec/mongoid/association/syncable_spec.rb +46 -33
- data/spec/mongoid/association_spec.rb +0 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
- data/spec/mongoid/atomic/paths_spec.rb +91 -13
- data/spec/mongoid/atomic_spec.rb +51 -7
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +147 -79
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +22 -23
- data/spec/mongoid/attributes_spec.rb +888 -62
- data/spec/mongoid/cacheable_spec.rb +4 -5
- data/spec/mongoid/changeable_spec.rb +464 -73
- data/spec/mongoid/clients/factory_spec.rb +91 -9
- data/spec/mongoid/clients/options_spec.rb +27 -19
- data/spec/mongoid/clients/sessions_spec.rb +27 -67
- data/spec/mongoid/clients/transactions_spec.rb +69 -35
- data/spec/mongoid/clients_spec.rb +187 -24
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +0 -1
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +124 -9
- data/spec/mongoid/config/options_spec.rb +0 -1
- data/spec/mongoid/config_spec.rb +465 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +431 -154
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +148 -86
- data/spec/mongoid/contextual/geo_near_spec.rb +28 -20
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -20
- data/spec/mongoid/contextual/memory_spec.rb +1826 -304
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3501 -1272
- data/spec/mongoid/contextual/none_spec.rb +78 -68
- data/spec/mongoid/copyable_spec.rb +657 -37
- data/spec/mongoid/copyable_spec_models.rb +28 -1
- data/spec/mongoid/criteria/findable_spec.rb +109 -234
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +37 -38
- data/spec/mongoid/criteria/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -74
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -20
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -27
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -16
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -8
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +5 -71
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +30 -8
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +39 -2
- data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +143 -13
- data/spec/mongoid/criteria/queryable/optional_spec.rb +16 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1186 -195
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +307 -705
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -4
- data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
- data/spec/mongoid/criteria/scopable_spec.rb +127 -1
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1267 -1739
- data/spec/mongoid/document_fields_spec.rb +179 -5
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +51 -1
- data/spec/mongoid/document_spec.rb +151 -88
- data/spec/mongoid/equality_spec.rb +142 -42
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
- data/spec/mongoid/errors/callback_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +2 -3
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +5 -6
- data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -9
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -3
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -4
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -4
- data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -4
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
- data/spec/mongoid/errors/no_parent_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -3
- data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -2
- data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
- data/spec/mongoid/errors/validations_spec.rb +0 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -213
- data/spec/mongoid/extensions/binary_spec.rb +44 -10
- data/spec/mongoid/extensions/boolean_spec.rb +68 -83
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -4
- data/spec/mongoid/extensions/date_spec.rb +71 -2
- data/spec/mongoid/extensions/date_time_spec.rb +15 -10
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
- data/spec/mongoid/extensions/false_class_spec.rb +1 -2
- data/spec/mongoid/extensions/float_spec.rb +53 -75
- data/spec/mongoid/extensions/hash_spec.rb +30 -1
- data/spec/mongoid/extensions/integer_spec.rb +50 -65
- data/spec/mongoid/extensions/module_spec.rb +0 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/extensions/object_id_spec.rb +0 -1
- data/spec/mongoid/extensions/object_spec.rb +0 -1
- data/spec/mongoid/extensions/range_spec.rb +255 -55
- data/spec/mongoid/extensions/regexp_spec.rb +58 -34
- data/spec/mongoid/extensions/set_spec.rb +106 -1
- data/spec/mongoid/extensions/string_spec.rb +58 -31
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +18 -26
- data/spec/mongoid/extensions/time_spec.rb +639 -107
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -84
- data/spec/mongoid/extensions/true_class_spec.rb +1 -2
- data/spec/mongoid/extensions_spec.rb +14 -3
- data/spec/mongoid/factory_spec.rb +323 -30
- data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
- data/spec/mongoid/fields/localized_spec.rb +84 -42
- data/spec/mongoid/fields/standard_spec.rb +0 -1
- data/spec/mongoid/fields_spec.rb +855 -118
- data/spec/mongoid/findable_spec.rb +518 -65
- data/spec/mongoid/indexable/specification_spec.rb +2 -3
- data/spec/mongoid/indexable_spec.rb +85 -33
- data/spec/mongoid/inspectable_spec.rb +37 -3
- data/spec/mongoid/interceptable_spec.rb +702 -104
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/loggable_spec.rb +0 -1
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -30
- data/spec/mongoid/persistable/deletable_spec.rb +298 -19
- data/spec/mongoid/persistable/destroyable_spec.rb +226 -19
- data/spec/mongoid/persistable/incrementable_spec.rb +45 -9
- data/spec/mongoid/persistable/logical_spec.rb +41 -5
- data/spec/mongoid/persistable/poppable_spec.rb +40 -5
- data/spec/mongoid/persistable/pullable_spec.rb +80 -9
- data/spec/mongoid/persistable/pushable_spec.rb +80 -9
- data/spec/mongoid/persistable/renamable_spec.rb +39 -4
- data/spec/mongoid/persistable/savable_spec.rb +282 -26
- data/spec/mongoid/persistable/settable_spec.rb +76 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +40 -5
- data/spec/mongoid/persistable/updatable_spec.rb +61 -50
- data/spec/mongoid/persistable/upsertable_spec.rb +91 -4
- data/spec/mongoid/persistable_spec.rb +3 -4
- data/spec/mongoid/persistence_context_spec.rb +57 -59
- data/spec/mongoid/positional_spec.rb +0 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +7 -5
- data/spec/mongoid/query_cache_spec.rb +424 -68
- data/spec/mongoid/relations/proxy_spec.rb +7 -8
- data/spec/mongoid/reloadable_spec.rb +355 -27
- data/spec/mongoid/scopable_spec.rb +191 -39
- data/spec/mongoid/selectable_spec.rb +6 -7
- data/spec/mongoid/serializable_spec.rb +35 -39
- data/spec/mongoid/shardable_models.rb +15 -1
- data/spec/mongoid/shardable_spec.rb +181 -32
- data/spec/mongoid/stateful_spec.rb +151 -10
- data/spec/mongoid/tasks/database_rake_spec.rb +87 -14
- data/spec/mongoid/tasks/database_spec.rb +128 -2
- data/spec/mongoid/threaded_spec.rb +2 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
- data/spec/mongoid/timestamps/created_spec.rb +1 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
- data/spec/mongoid/timestamps/updated_spec.rb +3 -4
- data/spec/mongoid/timestamps_spec.rb +398 -11
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +525 -36
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1143 -2
- data/spec/mongoid/validatable/associated_spec.rb +0 -1
- data/spec/mongoid/validatable/format_spec.rb +0 -1
- data/spec/mongoid/validatable/length_spec.rb +0 -1
- data/spec/mongoid/validatable/numericality_spec.rb +0 -1
- data/spec/mongoid/validatable/presence_spec.rb +26 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +125 -99
- data/spec/mongoid/validatable_spec.rb +3 -4
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +35 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -3
- data/spec/rails/mongoid_spec.rb +4 -17
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +298 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +321 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +416 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +24 -54
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +34 -197
- data/spec/support/expectations.rb +0 -1
- data/spec/support/helpers.rb +1 -1
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +109 -1
- data/spec/{app → support}/models/account.rb +1 -2
- data/spec/{app → support}/models/acolyte.rb +0 -1
- data/spec/{app → support}/models/actor.rb +1 -2
- data/spec/{app → support}/models/actress.rb +0 -1
- data/spec/{app → support}/models/address.rb +4 -1
- data/spec/{app → support}/models/address_component.rb +0 -1
- data/spec/{app → support}/models/address_number.rb +0 -1
- data/spec/{app → support}/models/agency.rb +0 -1
- data/spec/{app → support}/models/agent.rb +0 -1
- data/spec/{app → support}/models/album.rb +0 -1
- data/spec/{app → support}/models/alert.rb +0 -1
- data/spec/{app → support}/models/animal.rb +0 -1
- data/spec/{app → support}/models/answer.rb +0 -1
- data/spec/{app → support}/models/appointment.rb +0 -1
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/array_field.rb +0 -1
- data/spec/{app → support}/models/article.rb +0 -1
- data/spec/{app → support}/models/artist.rb +2 -2
- data/spec/{app → support}/models/artwork.rb +0 -1
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +0 -1
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +0 -1
- data/spec/{app → support}/models/baby.rb +0 -1
- data/spec/{app → support}/models/band.rb +8 -1
- data/spec/{app → support}/models/bar.rb +0 -1
- data/spec/{app → support}/models/basic.rb +0 -1
- data/spec/{app → support}/models/bed.rb +0 -1
- data/spec/{app → support}/models/big_palette.rb +0 -1
- data/spec/{app → support}/models/birthday.rb +0 -1
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +0 -1
- data/spec/{app → support}/models/book.rb +1 -1
- data/spec/{app → support}/models/breed.rb +0 -1
- data/spec/{app → support}/models/browser.rb +1 -2
- data/spec/{app → support}/models/building.rb +2 -1
- data/spec/{app → support}/models/building_address.rb +0 -1
- data/spec/{app → support}/models/bus.rb +0 -1
- data/spec/{app → support}/models/business.rb +0 -1
- data/spec/{app → support}/models/callback_test.rb +0 -1
- data/spec/{app → support}/models/canvas.rb +1 -2
- data/spec/{app → support}/models/car.rb +0 -1
- data/spec/{app → support}/models/cat.rb +0 -1
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +0 -1
- data/spec/{app → support}/models/child.rb +0 -1
- data/spec/{app → support}/models/child_doc.rb +3 -4
- data/spec/{app → support}/models/church.rb +0 -1
- data/spec/{app → support}/models/circle.rb +0 -1
- data/spec/{app → support}/models/circuit.rb +0 -1
- data/spec/{app → support}/models/circus.rb +3 -1
- data/spec/{app → support}/models/code.rb +2 -1
- data/spec/{app → support}/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +0 -1
- data/spec/{app → support}/models/company.rb +0 -1
- data/spec/{app → support}/models/consumption_period.rb +0 -1
- data/spec/{app → support}/models/contextable_item.rb +0 -1
- data/spec/{app → support}/models/contractor.rb +0 -1
- data/spec/{app → support}/models/cookie.rb +0 -1
- data/spec/{app → support}/models/country_code.rb +2 -1
- data/spec/{app → support}/models/courier_job.rb +0 -1
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +0 -1
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +0 -1
- data/spec/{app → support}/models/dictionary.rb +6 -1
- data/spec/{app → support}/models/division.rb +0 -1
- data/spec/{app → support}/models/doctor.rb +0 -1
- data/spec/{app → support}/models/dog.rb +0 -1
- data/spec/{app → support}/models/dokument.rb +0 -1
- data/spec/{app → support}/models/draft.rb +0 -1
- data/spec/{app → support}/models/dragon.rb +0 -1
- data/spec/{app → support}/models/driver.rb +1 -2
- data/spec/{app → support}/models/drug.rb +0 -1
- data/spec/{app → support}/models/dungeon.rb +0 -1
- data/spec/{app → support}/models/edit.rb +0 -1
- data/spec/{app → support}/models/email.rb +0 -1
- data/spec/{app → support}/models/employer.rb +0 -1
- data/spec/{app → support}/models/entry.rb +0 -1
- data/spec/{app → support}/models/eraser.rb +0 -1
- data/spec/{app → support}/models/even.rb +0 -1
- data/spec/{app → support}/models/event.rb +0 -1
- data/spec/{app → support}/models/exhibition.rb +0 -1
- data/spec/{app → support}/models/exhibitor.rb +0 -1
- data/spec/{app → support}/models/explosion.rb +0 -1
- data/spec/{app → support}/models/eye.rb +0 -1
- data/spec/{app → support}/models/eye_bowl.rb +0 -1
- data/spec/{app → support}/models/face.rb +0 -1
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +0 -1
- data/spec/{app → support}/models/filesystem.rb +0 -1
- data/spec/{app → support}/models/fire_hydrant.rb +0 -1
- data/spec/{app → support}/models/firefox.rb +0 -1
- data/spec/{app → support}/models/fish.rb +0 -1
- data/spec/{app → support}/models/folder.rb +0 -1
- data/spec/{app → support}/models/folder_item.rb +0 -1
- data/spec/{app → support}/models/fruits.rb +0 -1
- data/spec/{app → support}/models/game.rb +0 -1
- data/spec/{app → support}/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +0 -1
- data/spec/{app → support}/models/house.rb +0 -1
- data/spec/{app → support}/models/html_writer.rb +0 -1
- data/spec/{app → support}/models/id_key.rb +0 -1
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +0 -1
- data/spec/{app → support}/models/implant.rb +9 -1
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +1 -2
- data/spec/{app → support}/models/jar.rb +0 -1
- data/spec/{app → support}/models/kaleidoscope.rb +0 -1
- data/spec/{app → support}/models/kangaroo.rb +0 -1
- data/spec/{app → support}/models/label.rb +4 -2
- data/spec/{app → support}/models/language.rb +0 -1
- data/spec/{app → support}/models/lat_lng.rb +0 -1
- data/spec/{app → support}/models/league.rb +0 -1
- data/spec/{app → support}/models/learner.rb +0 -1
- data/spec/{app → support}/models/line_item.rb +0 -1
- data/spec/{app → support}/models/location.rb +0 -1
- data/spec/{app → support}/models/login.rb +0 -1
- data/spec/{app → support}/models/manufacturer.rb +0 -1
- data/spec/{app → support}/models/meat.rb +0 -1
- data/spec/{app → support}/models/membership.rb +1 -1
- data/spec/{app → support}/models/message.rb +0 -1
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +0 -1
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +0 -1
- data/spec/{app → support}/models/my_hash.rb +0 -1
- data/spec/{app → support}/models/name.rb +0 -1
- data/spec/{app → support}/models/name_only.rb +0 -1
- data/spec/{app → support}/models/node.rb +0 -1
- data/spec/{app → support}/models/note.rb +0 -1
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +0 -1
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +1 -2
- data/spec/{app → support}/models/ordered_preference.rb +0 -1
- data/spec/{app → support}/models/oscar.rb +0 -1
- data/spec/{app → support}/models/other_owner_object.rb +0 -1
- data/spec/{app → support}/models/override.rb +0 -1
- data/spec/{app → support}/models/ownable.rb +0 -1
- data/spec/{app → support}/models/owner.rb +2 -1
- data/spec/{app → support}/models/pack.rb +0 -1
- data/spec/{app → support}/models/page.rb +0 -1
- data/spec/{app → support}/models/page_question.rb +0 -1
- data/spec/{app → support}/models/palette.rb +1 -2
- data/spec/{app → support}/models/parent.rb +0 -1
- data/spec/{app → support}/models/parent_doc.rb +0 -1
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +0 -1
- data/spec/{app → support}/models/pdf_writer.rb +0 -1
- data/spec/{app → support}/models/pencil.rb +0 -1
- data/spec/{app → support}/models/person.rb +20 -2
- data/spec/{app → support}/models/pet.rb +0 -1
- data/spec/{app → support}/models/pet_owner.rb +0 -1
- data/spec/{app → support}/models/phone.rb +3 -2
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +0 -1
- data/spec/{app → support}/models/player.rb +2 -1
- data/spec/{app → support}/models/post.rb +0 -1
- data/spec/{app → support}/models/post_genre.rb +0 -1
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +0 -1
- data/spec/{app → support}/models/princess.rb +0 -1
- data/spec/{app → support}/models/product.rb +1 -1
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -1
- data/spec/{app → support}/models/pub.rb +0 -1
- data/spec/{app → support}/models/publication/encyclopedia.rb +0 -1
- data/spec/{app → support}/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +0 -1
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +0 -1
- data/spec/{app → support}/models/quiz.rb +0 -1
- data/spec/{app → support}/models/rating.rb +0 -1
- data/spec/{app → support}/models/record.rb +0 -1
- data/spec/{app → support}/models/registry.rb +1 -1
- data/spec/{app → support}/models/role.rb +0 -1
- data/spec/{app → support}/models/root_category.rb +0 -1
- data/spec/{app → support}/models/sandwich.rb +0 -1
- data/spec/{app → support}/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +14 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -3
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +0 -1
- data/spec/{app → support}/models/series.rb +1 -1
- data/spec/{app → support}/models/server.rb +0 -1
- data/spec/{app → support}/models/service.rb +0 -1
- data/spec/{app → support}/models/shape.rb +2 -3
- data/spec/{app → support}/models/shelf.rb +0 -1
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -1
- data/spec/{app → support}/models/shipping_container.rb +0 -1
- data/spec/{app → support}/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +0 -1
- data/spec/{app → support}/models/short_agent.rb +0 -1
- data/spec/{app → support}/models/short_quiz.rb +0 -1
- data/spec/{app → support}/models/simple.rb +0 -1
- data/spec/{app → support}/models/slave.rb +0 -1
- data/spec/{app → support}/models/song.rb +0 -1
- data/spec/{app → support}/models/sound.rb +0 -1
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +0 -1
- data/spec/{app → support}/models/staff.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -1
- data/spec/{app → support}/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +0 -1
- data/spec/{app → support}/models/subscription.rb +0 -1
- data/spec/{app → support}/models/survey.rb +0 -1
- data/spec/{app → support}/models/symptom.rb +0 -1
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -1
- data/spec/{app → support}/models/target.rb +0 -1
- data/spec/{app → support}/models/template.rb +0 -1
- data/spec/{app → support}/models/thing.rb +0 -1
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +0 -1
- data/spec/{app → support}/models/tool.rb +2 -3
- data/spec/{app → support}/models/topping.rb +0 -1
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +0 -1
- data/spec/{app → support}/models/translation.rb +0 -1
- data/spec/{app → support}/models/tree.rb +0 -1
- data/spec/{app → support}/models/truck.rb +2 -1
- data/spec/{app → support}/models/updatable.rb +0 -1
- data/spec/{app → support}/models/user.rb +0 -1
- data/spec/{app → support}/models/user_account.rb +0 -1
- data/spec/{app → support}/models/validation_callback.rb +0 -1
- data/spec/{app → support}/models/vehicle.rb +7 -3
- data/spec/{app → support}/models/version.rb +0 -1
- data/spec/{app → support}/models/vertex.rb +0 -1
- data/spec/{app → support}/models/vet_visit.rb +0 -1
- data/spec/{app → support}/models/video.rb +0 -1
- data/spec/{app → support}/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +1 -1
- data/spec/{app → support}/models/word.rb +0 -1
- data/spec/{app → support}/models/word_origin.rb +0 -1
- data/spec/{app → support}/models/writer.rb +2 -3
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/spec_config.rb +28 -6
- data.tar.gz.sig +0 -0
- metadata +1216 -799
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -26
- data/lib/mongoid/errors/invalid_value.rb +0 -18
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/lib/support/ruby_version.rb +0 -29
- data/spec/app/models/augmentation.rb +0 -14
- data/spec/app/models/coding.rb +0 -4
- data/spec/app/models/passport.rb +0 -8
- data/spec/app/models/powerup.rb +0 -14
- data/spec/app/models/publication.rb +0 -5
- data/spec/app/models/weapon.rb +0 -14
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -61
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -61
- data/spec/mongoid/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/lite_constraints.rb +0 -22
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require "spec_helper"
|
|
4
|
+
require_relative '../embeds_many_models.rb'
|
|
5
5
|
|
|
6
6
|
describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
7
7
|
|
|
@@ -115,7 +115,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
115
115
|
context "when the parent is not a new record" do
|
|
116
116
|
|
|
117
117
|
let(:person) do
|
|
118
|
-
Person.create
|
|
118
|
+
Person.create!
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
let(:address) do
|
|
@@ -134,7 +134,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
134
134
|
context "when appending more than one document at once" do
|
|
135
135
|
|
|
136
136
|
let(:person) do
|
|
137
|
-
Person.create
|
|
137
|
+
Person.create!
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
let(:address_one) do
|
|
@@ -210,7 +210,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
210
210
|
context "when the parent is not a new record" do
|
|
211
211
|
|
|
212
212
|
let(:parent_role) do
|
|
213
|
-
Role.create(name: "CEO")
|
|
213
|
+
Role.create!(name: "CEO")
|
|
214
214
|
end
|
|
215
215
|
|
|
216
216
|
let(:child_role) do
|
|
@@ -229,7 +229,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
229
229
|
|
|
230
230
|
context "when the child has one sided many to many relation" do
|
|
231
231
|
let(:person) do
|
|
232
|
-
Person.create
|
|
232
|
+
Person.create!
|
|
233
233
|
end
|
|
234
234
|
|
|
235
235
|
let(:message) do
|
|
@@ -312,7 +312,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
312
312
|
context "when the parent is not a new record" do
|
|
313
313
|
|
|
314
314
|
let(:person) do
|
|
315
|
-
Person.create
|
|
315
|
+
Person.create!
|
|
316
316
|
end
|
|
317
317
|
|
|
318
318
|
let(:address) do
|
|
@@ -333,11 +333,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
333
333
|
context "when setting via an overridden method from the parent" do
|
|
334
334
|
|
|
335
335
|
let!(:person) do
|
|
336
|
-
Person.create
|
|
336
|
+
Person.create!
|
|
337
337
|
end
|
|
338
338
|
|
|
339
339
|
let!(:address) do
|
|
340
|
-
person.addresses.create(street: "Alt Treptow")
|
|
340
|
+
person.addresses.create!(street: "Alt Treptow")
|
|
341
341
|
end
|
|
342
342
|
|
|
343
343
|
let!(:new_address) do
|
|
@@ -345,7 +345,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
345
345
|
end
|
|
346
346
|
|
|
347
347
|
before do
|
|
348
|
-
person.update_attributes(set_addresses: [ new_address ])
|
|
348
|
+
person.update_attributes!(set_addresses: [ new_address ])
|
|
349
349
|
end
|
|
350
350
|
|
|
351
351
|
it "overwrites the existing addresses" do
|
|
@@ -375,7 +375,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
375
375
|
|
|
376
376
|
before do
|
|
377
377
|
person.addresses = [ address_two ]
|
|
378
|
-
person.save
|
|
378
|
+
person.save!
|
|
379
379
|
end
|
|
380
380
|
|
|
381
381
|
it "sets the new documents" do
|
|
@@ -409,7 +409,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
409
409
|
|
|
410
410
|
before do
|
|
411
411
|
doctor.addresses = [ address_one ]
|
|
412
|
-
doctor.save
|
|
412
|
+
doctor.save!
|
|
413
413
|
end
|
|
414
414
|
|
|
415
415
|
it "sets the documents" do
|
|
@@ -428,7 +428,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
428
428
|
|
|
429
429
|
before do
|
|
430
430
|
doctor.addresses = [ address_two ]
|
|
431
|
-
doctor.save
|
|
431
|
+
doctor.save!
|
|
432
432
|
end
|
|
433
433
|
|
|
434
434
|
it "sets the new documents" do
|
|
@@ -446,7 +446,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
446
446
|
context "when replacing an existing relation" do
|
|
447
447
|
|
|
448
448
|
let(:person) do
|
|
449
|
-
Person.create(addresses: addresses)
|
|
449
|
+
Person.create!(addresses: addresses)
|
|
450
450
|
end
|
|
451
451
|
|
|
452
452
|
let(:addresses) do
|
|
@@ -507,7 +507,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
507
507
|
end
|
|
508
508
|
|
|
509
509
|
let(:tracking_id) do
|
|
510
|
-
MyCompany::Model::TrackingId.create
|
|
510
|
+
MyCompany::Model::TrackingId.create!
|
|
511
511
|
end
|
|
512
512
|
|
|
513
513
|
let(:history) do
|
|
@@ -542,7 +542,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
542
542
|
inflect.singular("address_numbers", "address_number")
|
|
543
543
|
end
|
|
544
544
|
slave.address_numbers << AddressNumber.new(country_code: 1)
|
|
545
|
-
slave.save
|
|
545
|
+
slave.save!
|
|
546
546
|
end
|
|
547
547
|
|
|
548
548
|
it "requires an inflection to determine the class" do
|
|
@@ -553,15 +553,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
553
553
|
context "when setting the entire tree via a hash" do
|
|
554
554
|
|
|
555
555
|
let(:person) do
|
|
556
|
-
Person.create
|
|
556
|
+
Person.create!
|
|
557
557
|
end
|
|
558
558
|
|
|
559
559
|
let!(:address_one) do
|
|
560
|
-
person.addresses.create(street: "Tauentzienstr")
|
|
560
|
+
person.addresses.create!(street: "Tauentzienstr")
|
|
561
561
|
end
|
|
562
562
|
|
|
563
563
|
let!(:address_two) do
|
|
564
|
-
person.addresses.create(street: "Kudamm")
|
|
564
|
+
person.addresses.create!(street: "Kudamm")
|
|
565
565
|
end
|
|
566
566
|
|
|
567
567
|
let(:attributes) do
|
|
@@ -572,7 +572,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
572
572
|
|
|
573
573
|
before do
|
|
574
574
|
attributes["addresses"][0]["city"] = "Berlin"
|
|
575
|
-
person.update_attributes(attributes)
|
|
575
|
+
person.update_attributes!(attributes)
|
|
576
576
|
end
|
|
577
577
|
|
|
578
578
|
it "sets the new attributes" do
|
|
@@ -588,15 +588,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
588
588
|
context "when setting an embedded sub-document tree via a hash" do
|
|
589
589
|
|
|
590
590
|
let(:person) do
|
|
591
|
-
Person.create
|
|
591
|
+
Person.create!
|
|
592
592
|
end
|
|
593
593
|
|
|
594
594
|
let!(:address_one) do
|
|
595
|
-
person.addresses.create(street: "Tauentzienstr")
|
|
595
|
+
person.addresses.create!(street: "Tauentzienstr")
|
|
596
596
|
end
|
|
597
597
|
|
|
598
598
|
let!(:location_one) do
|
|
599
|
-
person.addresses.first.locations.create(name: "Work")
|
|
599
|
+
person.addresses.first.locations.create!(name: "Work")
|
|
600
600
|
end
|
|
601
601
|
|
|
602
602
|
let(:attributes) do
|
|
@@ -608,7 +608,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
608
608
|
before do
|
|
609
609
|
attributes["city"] = "Berlin"
|
|
610
610
|
attributes["locations"][0]["name"] = "Home"
|
|
611
|
-
person.addresses.first.update_attributes(attributes)
|
|
611
|
+
person.addresses.first.update_attributes!(attributes)
|
|
612
612
|
end
|
|
613
613
|
|
|
614
614
|
it "sets the new attributes on the address" do
|
|
@@ -681,7 +681,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
681
681
|
context "when the parent is not a new record" do
|
|
682
682
|
|
|
683
683
|
let(:parent_role) do
|
|
684
|
-
Role.create(name: "CTO")
|
|
684
|
+
Role.create!(name: "CTO")
|
|
685
685
|
end
|
|
686
686
|
|
|
687
687
|
let(:child_role) do
|
|
@@ -749,7 +749,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
749
749
|
context "when the parent is persisted" do
|
|
750
750
|
|
|
751
751
|
let(:person) do
|
|
752
|
-
Person.create
|
|
752
|
+
Person.create!
|
|
753
753
|
end
|
|
754
754
|
|
|
755
755
|
let(:address) do
|
|
@@ -798,7 +798,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
798
798
|
context "when saving the parent" do
|
|
799
799
|
|
|
800
800
|
before do
|
|
801
|
-
person.save
|
|
801
|
+
person.save!
|
|
802
802
|
person.reload
|
|
803
803
|
end
|
|
804
804
|
|
|
@@ -812,7 +812,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
812
812
|
context "when setting on a reload" do
|
|
813
813
|
|
|
814
814
|
let(:person) do
|
|
815
|
-
Person.create
|
|
815
|
+
Person.create!
|
|
816
816
|
end
|
|
817
817
|
|
|
818
818
|
let(:address) do
|
|
@@ -882,7 +882,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
882
882
|
context "when the documents are not new records" do
|
|
883
883
|
|
|
884
884
|
let(:parent_role) do
|
|
885
|
-
Role.create
|
|
885
|
+
Role.create!
|
|
886
886
|
end
|
|
887
887
|
|
|
888
888
|
let(:child_role) do
|
|
@@ -912,13 +912,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
912
912
|
describe "#as_document" do
|
|
913
913
|
|
|
914
914
|
let!(:person) do
|
|
915
|
-
Person.create
|
|
915
|
+
Person.create!
|
|
916
916
|
end
|
|
917
917
|
|
|
918
918
|
context 'when a string is used to access an attribute' do
|
|
919
919
|
|
|
920
920
|
let!(:address) do
|
|
921
|
-
person.addresses.create(street: "one")
|
|
921
|
+
person.addresses.create!(street: "one")
|
|
922
922
|
end
|
|
923
923
|
|
|
924
924
|
let(:document) do
|
|
@@ -933,7 +933,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
933
933
|
context 'when a symbol is used to access an attribute' do
|
|
934
934
|
|
|
935
935
|
let!(:address) do
|
|
936
|
-
person.addresses.create(street: "one")
|
|
936
|
+
person.addresses.create!(street: "one")
|
|
937
937
|
end
|
|
938
938
|
|
|
939
939
|
let(:document) do
|
|
@@ -948,7 +948,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
948
948
|
context "when the relation has no default scope" do
|
|
949
949
|
|
|
950
950
|
let!(:address) do
|
|
951
|
-
person.addresses.create(street: "one")
|
|
951
|
+
person.addresses.create!(street: "one")
|
|
952
952
|
end
|
|
953
953
|
|
|
954
954
|
let(:document) do
|
|
@@ -1105,7 +1105,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1105
1105
|
context "when providing nested attributes" do
|
|
1106
1106
|
|
|
1107
1107
|
let(:person) do
|
|
1108
|
-
Person.create
|
|
1108
|
+
Person.create!
|
|
1109
1109
|
end
|
|
1110
1110
|
|
|
1111
1111
|
let(:address) do
|
|
@@ -1119,7 +1119,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1119
1119
|
context "when followed by a save" do
|
|
1120
1120
|
|
|
1121
1121
|
before do
|
|
1122
|
-
address.save
|
|
1122
|
+
address.save!
|
|
1123
1123
|
end
|
|
1124
1124
|
|
|
1125
1125
|
let(:location) do
|
|
@@ -1139,13 +1139,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1139
1139
|
context "when the parent has been persisted" do
|
|
1140
1140
|
|
|
1141
1141
|
let(:person) do
|
|
1142
|
-
Person.create
|
|
1142
|
+
Person.create!
|
|
1143
1143
|
end
|
|
1144
1144
|
|
|
1145
1145
|
context "when the children are persisted" do
|
|
1146
1146
|
|
|
1147
1147
|
let!(:address) do
|
|
1148
|
-
person.addresses.create(street: "High St")
|
|
1148
|
+
person.addresses.create!(street: "High St")
|
|
1149
1149
|
end
|
|
1150
1150
|
|
|
1151
1151
|
let!(:relation) do
|
|
@@ -1261,7 +1261,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1261
1261
|
context "when the parent is not a new record" do
|
|
1262
1262
|
|
|
1263
1263
|
let(:person) do
|
|
1264
|
-
Person.create
|
|
1264
|
+
Person.create!
|
|
1265
1265
|
end
|
|
1266
1266
|
|
|
1267
1267
|
let(:address) do
|
|
@@ -1280,7 +1280,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1280
1280
|
context "when concatenating an empty array" do
|
|
1281
1281
|
|
|
1282
1282
|
let(:person) do
|
|
1283
|
-
Person.create
|
|
1283
|
+
Person.create!
|
|
1284
1284
|
end
|
|
1285
1285
|
|
|
1286
1286
|
before do
|
|
@@ -1296,7 +1296,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1296
1296
|
context "when appending more than one document at once" do
|
|
1297
1297
|
|
|
1298
1298
|
let(:person) do
|
|
1299
|
-
Person.create
|
|
1299
|
+
Person.create!
|
|
1300
1300
|
end
|
|
1301
1301
|
|
|
1302
1302
|
let(:address_one) do
|
|
@@ -1368,7 +1368,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1368
1368
|
context "when the parent is not a new record" do
|
|
1369
1369
|
|
|
1370
1370
|
let(:parent_role) do
|
|
1371
|
-
Role.create(name: "CEO")
|
|
1371
|
+
Role.create!(name: "CEO")
|
|
1372
1372
|
end
|
|
1373
1373
|
|
|
1374
1374
|
let(:child_role) do
|
|
@@ -1389,17 +1389,262 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1389
1389
|
describe "#count" do
|
|
1390
1390
|
|
|
1391
1391
|
let(:person) do
|
|
1392
|
-
Person.create
|
|
1392
|
+
Person.create!
|
|
1393
1393
|
end
|
|
1394
1394
|
|
|
1395
1395
|
before do
|
|
1396
|
-
person.addresses.create(street: "Upper")
|
|
1396
|
+
person.addresses.create!(street: "Upper")
|
|
1397
1397
|
person.addresses.build(street: "Bond")
|
|
1398
|
+
person.addresses.build(street: "Lower")
|
|
1398
1399
|
end
|
|
1399
1400
|
|
|
1400
1401
|
it "returns the number of persisted documents" do
|
|
1401
1402
|
expect(person.addresses.count).to eq(1)
|
|
1402
1403
|
end
|
|
1404
|
+
|
|
1405
|
+
context 'block form' do
|
|
1406
|
+
it "iterates across all documents" do
|
|
1407
|
+
expect(person.addresses.count {|a| a.persisted? }).to eq(1)
|
|
1408
|
+
expect(person.addresses.count {|a| !a.persisted? }).to eq(2)
|
|
1409
|
+
expect(person.addresses.count {|a| a.street.include?('on') }).to eq(1)
|
|
1410
|
+
expect(person.addresses.count {|a| a.street.ends_with?('er') }).to eq(2)
|
|
1411
|
+
end
|
|
1412
|
+
end
|
|
1413
|
+
|
|
1414
|
+
context 'argument form' do
|
|
1415
|
+
it "behaves correctly when given a model instance" do
|
|
1416
|
+
expect(person.addresses.count(person.addresses.first)).to eq(1)
|
|
1417
|
+
end
|
|
1418
|
+
|
|
1419
|
+
it "behaves correctly when given a non-model instance" do
|
|
1420
|
+
expect(person.addresses.count(1)).to eq(0)
|
|
1421
|
+
end
|
|
1422
|
+
end
|
|
1423
|
+
end
|
|
1424
|
+
|
|
1425
|
+
describe "#any?" do
|
|
1426
|
+
|
|
1427
|
+
let(:person) do
|
|
1428
|
+
Person.create!
|
|
1429
|
+
end
|
|
1430
|
+
|
|
1431
|
+
context "when documents are persisted" do
|
|
1432
|
+
before do
|
|
1433
|
+
person.addresses.create!(street: "Upper")
|
|
1434
|
+
end
|
|
1435
|
+
|
|
1436
|
+
it "returns true" do
|
|
1437
|
+
expect(person.addresses.any?).to be true
|
|
1438
|
+
end
|
|
1439
|
+
|
|
1440
|
+
it "block form iterates across all documents" do
|
|
1441
|
+
expect(person.addresses.any? {|a| a.street == "Upper" }).to be true
|
|
1442
|
+
expect(person.addresses.any? {|a| a.street == "Bond" }).to be false
|
|
1443
|
+
end
|
|
1444
|
+
|
|
1445
|
+
context 'argument form' do
|
|
1446
|
+
it "behaves correctly when given a model instance" do
|
|
1447
|
+
expect(person.addresses.any?(person.addresses.first)).to be true
|
|
1448
|
+
end
|
|
1449
|
+
|
|
1450
|
+
it "behaves correctly when given a non-model instance" do
|
|
1451
|
+
expect(person.addresses.any?(1)).to be false
|
|
1452
|
+
end
|
|
1453
|
+
end
|
|
1454
|
+
end
|
|
1455
|
+
|
|
1456
|
+
context "when documents are not persisted" do
|
|
1457
|
+
before do
|
|
1458
|
+
person.addresses.build(street: "Bond")
|
|
1459
|
+
end
|
|
1460
|
+
|
|
1461
|
+
it "returns true" do
|
|
1462
|
+
expect(person.addresses.any?).to be true
|
|
1463
|
+
end
|
|
1464
|
+
|
|
1465
|
+
it "block form iterates across all documents" do
|
|
1466
|
+
expect(person.addresses.any? {|a| a.street == "Upper" }).to be false
|
|
1467
|
+
expect(person.addresses.any? {|a| a.street == "Bond" }).to be true
|
|
1468
|
+
end
|
|
1469
|
+
|
|
1470
|
+
context 'argument form' do
|
|
1471
|
+
it "behaves correctly when given a model instance" do
|
|
1472
|
+
expect(person.addresses.any?(person.addresses.first)).to be true
|
|
1473
|
+
end
|
|
1474
|
+
|
|
1475
|
+
it "behaves correctly when given a non-model instance" do
|
|
1476
|
+
expect(person.addresses.any?(1)).to be false
|
|
1477
|
+
end
|
|
1478
|
+
end
|
|
1479
|
+
end
|
|
1480
|
+
|
|
1481
|
+
context "when documents are not present" do
|
|
1482
|
+
it "returns false" do
|
|
1483
|
+
expect(person.addresses.any?).to be false
|
|
1484
|
+
end
|
|
1485
|
+
|
|
1486
|
+
it "block form iterates across all documents" do
|
|
1487
|
+
expect(person.addresses.any?(&:a)).to be false
|
|
1488
|
+
end
|
|
1489
|
+
|
|
1490
|
+
it "argument form is supported" do
|
|
1491
|
+
expect(person.addresses.any?(1)).to be false
|
|
1492
|
+
end
|
|
1493
|
+
end
|
|
1494
|
+
end
|
|
1495
|
+
|
|
1496
|
+
describe "#all?" do
|
|
1497
|
+
|
|
1498
|
+
let(:person) do
|
|
1499
|
+
Person.create!
|
|
1500
|
+
end
|
|
1501
|
+
|
|
1502
|
+
context "when documents are persisted" do
|
|
1503
|
+
before do
|
|
1504
|
+
person.addresses.create!(street: "Upper")
|
|
1505
|
+
end
|
|
1506
|
+
|
|
1507
|
+
it "returns true" do
|
|
1508
|
+
expect(person.addresses.all?).to be true
|
|
1509
|
+
end
|
|
1510
|
+
|
|
1511
|
+
it "block form iterates across all documents" do
|
|
1512
|
+
expect(person.addresses.all? {|a| a.street == "Upper" }).to be true
|
|
1513
|
+
expect(person.addresses.all? {|a| a.street == "Bond" }).to be false
|
|
1514
|
+
end
|
|
1515
|
+
|
|
1516
|
+
context 'argument form' do
|
|
1517
|
+
it "behaves correctly when given a model instance" do
|
|
1518
|
+
expect(person.addresses.all?(person.addresses.first)).to be true
|
|
1519
|
+
end
|
|
1520
|
+
|
|
1521
|
+
it "behaves correctly when given a non-model instance" do
|
|
1522
|
+
expect(person.addresses.all?(1)).to be false
|
|
1523
|
+
end
|
|
1524
|
+
end
|
|
1525
|
+
end
|
|
1526
|
+
|
|
1527
|
+
context "when documents are not persisted" do
|
|
1528
|
+
before do
|
|
1529
|
+
person.addresses.build(street: "Bond")
|
|
1530
|
+
end
|
|
1531
|
+
|
|
1532
|
+
it "returns true" do
|
|
1533
|
+
expect(person.addresses.all?).to be true
|
|
1534
|
+
end
|
|
1535
|
+
|
|
1536
|
+
it "block form iterates across all documents" do
|
|
1537
|
+
expect(person.addresses.all? {|a| a.street == "Upper" }).to be false
|
|
1538
|
+
expect(person.addresses.all? {|a| a.street == "Bond" }).to be true
|
|
1539
|
+
end
|
|
1540
|
+
|
|
1541
|
+
context 'argument form' do
|
|
1542
|
+
it "behaves correctly when given a model instance" do
|
|
1543
|
+
expect(person.addresses.all?(person.addresses.first)).to be true
|
|
1544
|
+
end
|
|
1545
|
+
|
|
1546
|
+
it "behaves correctly when given a non-model instance" do
|
|
1547
|
+
expect(person.addresses.all?(1)).to be false
|
|
1548
|
+
end
|
|
1549
|
+
end
|
|
1550
|
+
end
|
|
1551
|
+
|
|
1552
|
+
context "when documents are not present" do
|
|
1553
|
+
it "returns false" do
|
|
1554
|
+
expect(person.addresses.all?).to be true
|
|
1555
|
+
end
|
|
1556
|
+
|
|
1557
|
+
it "block form iterates across all documents" do
|
|
1558
|
+
expect(person.addresses.all?(&:foo)).to be true
|
|
1559
|
+
end
|
|
1560
|
+
|
|
1561
|
+
context 'argument form' do
|
|
1562
|
+
it "behaves correctly when given nil" do
|
|
1563
|
+
expect(person.addresses.all?(nil)).to be true
|
|
1564
|
+
end
|
|
1565
|
+
|
|
1566
|
+
it "behaves correctly when given a non-model instance" do
|
|
1567
|
+
expect(person.addresses.all?(1)).to be true
|
|
1568
|
+
end
|
|
1569
|
+
end
|
|
1570
|
+
end
|
|
1571
|
+
end
|
|
1572
|
+
|
|
1573
|
+
describe "#none?" do
|
|
1574
|
+
|
|
1575
|
+
let(:person) do
|
|
1576
|
+
Person.create!
|
|
1577
|
+
end
|
|
1578
|
+
|
|
1579
|
+
context "when documents are persisted" do
|
|
1580
|
+
before do
|
|
1581
|
+
person.addresses.create!(street: "Upper")
|
|
1582
|
+
end
|
|
1583
|
+
|
|
1584
|
+
it "returns true" do
|
|
1585
|
+
expect(person.addresses.none?).to be false
|
|
1586
|
+
end
|
|
1587
|
+
|
|
1588
|
+
it "block form iterates across all documents" do
|
|
1589
|
+
expect(person.addresses.none? {|a| a.street == "Upper" }).to be false
|
|
1590
|
+
expect(person.addresses.none? {|a| a.street == "Bond" }).to be true
|
|
1591
|
+
end
|
|
1592
|
+
|
|
1593
|
+
context 'argument form' do
|
|
1594
|
+
it "behaves correctly when given a model instance" do
|
|
1595
|
+
expect(person.addresses.none?(person.addresses.first)).to be false
|
|
1596
|
+
end
|
|
1597
|
+
|
|
1598
|
+
it "behaves correctly when given a non-model instance" do
|
|
1599
|
+
expect(person.addresses.none?(1)).to be true
|
|
1600
|
+
end
|
|
1601
|
+
end
|
|
1602
|
+
end
|
|
1603
|
+
|
|
1604
|
+
context "when documents are not persisted" do
|
|
1605
|
+
before do
|
|
1606
|
+
person.addresses.build(street: "Bond")
|
|
1607
|
+
end
|
|
1608
|
+
|
|
1609
|
+
it "returns true" do
|
|
1610
|
+
expect(person.addresses.none?).to be false
|
|
1611
|
+
end
|
|
1612
|
+
|
|
1613
|
+
it "block form iterates across all documents" do
|
|
1614
|
+
expect(person.addresses.none? {|a| a.street == "Upper" }).to be true
|
|
1615
|
+
expect(person.addresses.none? {|a| a.street == "Bond" }).to be false
|
|
1616
|
+
end
|
|
1617
|
+
|
|
1618
|
+
context 'argument form' do
|
|
1619
|
+
it "behaves correctly when given a model instance" do
|
|
1620
|
+
expect(person.addresses.none?(person.addresses.first)).to be false
|
|
1621
|
+
end
|
|
1622
|
+
|
|
1623
|
+
it "behaves correctly when given a non-model instance" do
|
|
1624
|
+
expect(person.addresses.none?(1)).to be true
|
|
1625
|
+
end
|
|
1626
|
+
end
|
|
1627
|
+
end
|
|
1628
|
+
|
|
1629
|
+
context "when documents are not present" do
|
|
1630
|
+
it "returns false" do
|
|
1631
|
+
expect(person.addresses.none?).to be true
|
|
1632
|
+
end
|
|
1633
|
+
|
|
1634
|
+
it "block form iterates across all documents" do
|
|
1635
|
+
expect(person.addresses.none?(&:a)).to be true
|
|
1636
|
+
end
|
|
1637
|
+
|
|
1638
|
+
context 'argument form' do
|
|
1639
|
+
it "behaves correctly when given nil" do
|
|
1640
|
+
expect(person.addresses.none?(nil)).to be true
|
|
1641
|
+
end
|
|
1642
|
+
|
|
1643
|
+
it "behaves correctly when given a non-model instance" do
|
|
1644
|
+
expect(person.addresses.none?(1)).to be true
|
|
1645
|
+
end
|
|
1646
|
+
end
|
|
1647
|
+
end
|
|
1403
1648
|
end
|
|
1404
1649
|
|
|
1405
1650
|
describe "#create" do
|
|
@@ -1407,11 +1652,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1407
1652
|
context "when providing multiple attributes" do
|
|
1408
1653
|
|
|
1409
1654
|
let(:person) do
|
|
1410
|
-
Person.create
|
|
1655
|
+
Person.create!
|
|
1411
1656
|
end
|
|
1412
1657
|
|
|
1413
1658
|
let!(:addresses) do
|
|
1414
|
-
person.addresses.create([{ street: "Bond" }, { street: "Upper" }])
|
|
1659
|
+
person.addresses.create!([{ street: "Bond" }, { street: "Upper" }])
|
|
1415
1660
|
end
|
|
1416
1661
|
|
|
1417
1662
|
it "creates multiple documents" do
|
|
@@ -1434,11 +1679,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1434
1679
|
context "when the relation is not cyclic" do
|
|
1435
1680
|
|
|
1436
1681
|
let(:person) do
|
|
1437
|
-
Person.create
|
|
1682
|
+
Person.create!
|
|
1438
1683
|
end
|
|
1439
1684
|
|
|
1440
1685
|
let!(:address) do
|
|
1441
|
-
person.addresses.create(street: "Bond") do |address|
|
|
1686
|
+
person.addresses.create!(street: "Bond") do |address|
|
|
1442
1687
|
address.state = "CA"
|
|
1443
1688
|
end
|
|
1444
1689
|
end
|
|
@@ -1482,7 +1727,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1482
1727
|
context "when embedding a multi word named document" do
|
|
1483
1728
|
|
|
1484
1729
|
let!(:component) do
|
|
1485
|
-
person.address_components.create(street: "Test")
|
|
1730
|
+
person.address_components.create!(street: "Test")
|
|
1486
1731
|
end
|
|
1487
1732
|
|
|
1488
1733
|
it "saves the embedded document" do
|
|
@@ -1494,11 +1739,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1494
1739
|
context "when the relation is cyclic" do
|
|
1495
1740
|
|
|
1496
1741
|
let!(:entry) do
|
|
1497
|
-
Entry.create(title: "hi")
|
|
1742
|
+
Entry.create!(title: "hi")
|
|
1498
1743
|
end
|
|
1499
1744
|
|
|
1500
1745
|
let!(:child_entry) do
|
|
1501
|
-
entry.child_entries.create(title: "hello")
|
|
1746
|
+
entry.child_entries.create!(title: "hello")
|
|
1502
1747
|
end
|
|
1503
1748
|
|
|
1504
1749
|
it "creates a new child" do
|
|
@@ -1510,7 +1755,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1510
1755
|
describe "#create!" do
|
|
1511
1756
|
|
|
1512
1757
|
let(:person) do
|
|
1513
|
-
Person.create
|
|
1758
|
+
Person.create!
|
|
1514
1759
|
end
|
|
1515
1760
|
|
|
1516
1761
|
context "when providing multiple attributes" do
|
|
@@ -1617,51 +1862,56 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1617
1862
|
end
|
|
1618
1863
|
end
|
|
1619
1864
|
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
end
|
|
1865
|
+
%i[ delete delete_one ].each do |method|
|
|
1866
|
+
describe "\##{method}" do
|
|
1867
|
+
let(:address_one) { Address.new(street: "first") }
|
|
1868
|
+
let(:address_two) { Address.new(street: "second") }
|
|
1625
1869
|
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1870
|
+
before do
|
|
1871
|
+
person.addresses << [ address_one, address_two ]
|
|
1872
|
+
end
|
|
1629
1873
|
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1874
|
+
shared_examples_for 'deleting from the collection' do
|
|
1875
|
+
context 'when the document exists in the relation' do
|
|
1876
|
+
let!(:deleted) do
|
|
1877
|
+
person.addresses.send(method, address_one)
|
|
1878
|
+
end
|
|
1633
1879
|
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1880
|
+
it 'deletes the document' do
|
|
1881
|
+
expect(person.addresses).to eq([ address_two ])
|
|
1882
|
+
expect(person.reload.addresses).to eq([ address_two ]) if person.persisted?
|
|
1883
|
+
end
|
|
1637
1884
|
|
|
1638
|
-
|
|
1885
|
+
it 'deletes the document from the unscoped' do
|
|
1886
|
+
expect(person.addresses.send(:_unscoped)).to eq([ address_two ])
|
|
1887
|
+
end
|
|
1639
1888
|
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1889
|
+
it 'reindexes the relation' do
|
|
1890
|
+
expect(address_two._index).to eq(0)
|
|
1891
|
+
end
|
|
1643
1892
|
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1893
|
+
it 'returns the document' do
|
|
1894
|
+
expect(deleted).to eq(address_one)
|
|
1895
|
+
end
|
|
1896
|
+
end
|
|
1647
1897
|
|
|
1648
|
-
|
|
1649
|
-
|
|
1898
|
+
context 'when the document does not exist' do
|
|
1899
|
+
it 'returns nil' do
|
|
1900
|
+
expect(person.addresses.send(method, Address.new)).to be_nil
|
|
1901
|
+
end
|
|
1902
|
+
end
|
|
1650
1903
|
end
|
|
1651
1904
|
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
end
|
|
1905
|
+
context 'when the root document is unpersisted' do
|
|
1906
|
+
let(:person) { Person.new }
|
|
1655
1907
|
|
|
1656
|
-
|
|
1657
|
-
expect(deleted).to eq(address_one)
|
|
1908
|
+
it_behaves_like 'deleting from the collection'
|
|
1658
1909
|
end
|
|
1659
|
-
end
|
|
1660
1910
|
|
|
1661
|
-
|
|
1911
|
+
context 'when the root document is persisted' do
|
|
1912
|
+
let(:person) { Person.create }
|
|
1662
1913
|
|
|
1663
|
-
|
|
1664
|
-
expect(person.addresses.delete(Address.new)).to be_nil
|
|
1914
|
+
it_behaves_like 'deleting from the collection'
|
|
1665
1915
|
end
|
|
1666
1916
|
end
|
|
1667
1917
|
end
|
|
@@ -1669,7 +1919,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1669
1919
|
describe "#delete_if" do
|
|
1670
1920
|
|
|
1671
1921
|
let(:person) do
|
|
1672
|
-
Person.create
|
|
1922
|
+
Person.create!
|
|
1673
1923
|
end
|
|
1674
1924
|
|
|
1675
1925
|
context "when the documents are new" do
|
|
@@ -1718,11 +1968,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1718
1968
|
context "when the documents persisted" do
|
|
1719
1969
|
|
|
1720
1970
|
let!(:address_one) do
|
|
1721
|
-
person.addresses.create(street: "Bond")
|
|
1971
|
+
person.addresses.create!(street: "Bond")
|
|
1722
1972
|
end
|
|
1723
1973
|
|
|
1724
1974
|
let!(:address_two) do
|
|
1725
|
-
person.addresses.create(street: "Upper")
|
|
1975
|
+
person.addresses.create!(street: "Upper")
|
|
1726
1976
|
end
|
|
1727
1977
|
|
|
1728
1978
|
context "when a block is provided" do
|
|
@@ -1777,7 +2027,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1777
2027
|
describe "##{method}" do
|
|
1778
2028
|
|
|
1779
2029
|
let(:person) do
|
|
1780
|
-
Person.create
|
|
2030
|
+
Person.create!
|
|
1781
2031
|
end
|
|
1782
2032
|
|
|
1783
2033
|
context "when the documents are new" do
|
|
@@ -1831,11 +2081,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1831
2081
|
context "when the documents persisted" do
|
|
1832
2082
|
|
|
1833
2083
|
let!(:address_one) do
|
|
1834
|
-
person.addresses.create(street: "Bond")
|
|
2084
|
+
person.addresses.create!(street: "Bond")
|
|
1835
2085
|
end
|
|
1836
2086
|
|
|
1837
2087
|
let!(:address_two) do
|
|
1838
|
-
person.addresses.create(street: "Upper")
|
|
2088
|
+
person.addresses.create!(street: "Upper")
|
|
1839
2089
|
end
|
|
1840
2090
|
|
|
1841
2091
|
context "when conditions are provided" do
|
|
@@ -1882,7 +2132,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1882
2132
|
context "when removing and resaving" do
|
|
1883
2133
|
|
|
1884
2134
|
let(:owner) do
|
|
1885
|
-
PetOwner.create(title: "AKC")
|
|
2135
|
+
PetOwner.create!(title: "AKC")
|
|
1886
2136
|
end
|
|
1887
2137
|
|
|
1888
2138
|
before do
|
|
@@ -1965,6 +2215,79 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1965
2215
|
end
|
|
1966
2216
|
end
|
|
1967
2217
|
end
|
|
2218
|
+
|
|
2219
|
+
context "when modifying the document beforehand" do
|
|
2220
|
+
let(:parent) { EmmParent.new }
|
|
2221
|
+
|
|
2222
|
+
before do
|
|
2223
|
+
|
|
2224
|
+
parent.blocks << EmmBlock.new(name: 'test', children: [size: 1, order: 1])
|
|
2225
|
+
parent.save!
|
|
2226
|
+
|
|
2227
|
+
parent.blocks[0].children[0].assign_attributes(size: 2)
|
|
2228
|
+
|
|
2229
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2230
|
+
end
|
|
2231
|
+
|
|
2232
|
+
it "deletes the correct document in the database" do
|
|
2233
|
+
expect(parent.reload.blocks.length).to eq(0)
|
|
2234
|
+
end
|
|
2235
|
+
end
|
|
2236
|
+
|
|
2237
|
+
context "when nil _id" do
|
|
2238
|
+
let(:parent) { EmmParent.new }
|
|
2239
|
+
|
|
2240
|
+
before do
|
|
2241
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test', children: [size: 1, order: 1])
|
|
2242
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test2', children: [size: 1, order: 1])
|
|
2243
|
+
parent.save!
|
|
2244
|
+
|
|
2245
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2246
|
+
end
|
|
2247
|
+
|
|
2248
|
+
it "deletes only the matching documents in the database" do
|
|
2249
|
+
expect(parent.reload.blocks.length).to eq(1)
|
|
2250
|
+
end
|
|
2251
|
+
end
|
|
2252
|
+
|
|
2253
|
+
# Since without an _id field we must us a $pullAll with the attributes of
|
|
2254
|
+
# the embedded document, if you modify it beforehand, the query will not
|
|
2255
|
+
# be able to find the correct document to pull.
|
|
2256
|
+
context "when modifying the document with nil _id" do
|
|
2257
|
+
let(:parent) { EmmParent.new }
|
|
2258
|
+
|
|
2259
|
+
before do
|
|
2260
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test', children: [size: 1, order: 1])
|
|
2261
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test2', children: [size: 1, order: 1])
|
|
2262
|
+
parent.save!
|
|
2263
|
+
|
|
2264
|
+
parent.blocks[0].children[0].assign_attributes(size: 2)
|
|
2265
|
+
|
|
2266
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2267
|
+
end
|
|
2268
|
+
|
|
2269
|
+
it "does not delete the correct documents" do
|
|
2270
|
+
expect(parent.reload.blocks.length).to eq(2)
|
|
2271
|
+
end
|
|
2272
|
+
end
|
|
2273
|
+
|
|
2274
|
+
context "when documents with and without _id" do
|
|
2275
|
+
let(:parent) { EmmParent.new }
|
|
2276
|
+
|
|
2277
|
+
before do
|
|
2278
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test', children: [size: 1, order: 1])
|
|
2279
|
+
parent.blocks << EmmBlock.new(name: 'test', children: [size: 1, order: 1])
|
|
2280
|
+
parent.save!
|
|
2281
|
+
|
|
2282
|
+
parent.blocks[1].children[0].assign_attributes(size: 2)
|
|
2283
|
+
|
|
2284
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2285
|
+
end
|
|
2286
|
+
|
|
2287
|
+
it "does not delete the correct documents" do
|
|
2288
|
+
expect(parent.reload.blocks.length).to eq(0)
|
|
2289
|
+
end
|
|
2290
|
+
end
|
|
1968
2291
|
end
|
|
1969
2292
|
end
|
|
1970
2293
|
|
|
@@ -1978,13 +2301,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1978
2301
|
describe "#exists?" do
|
|
1979
2302
|
|
|
1980
2303
|
let!(:person) do
|
|
1981
|
-
Person.create
|
|
2304
|
+
Person.create!
|
|
1982
2305
|
end
|
|
1983
2306
|
|
|
1984
2307
|
context "when documents exist in the database" do
|
|
1985
2308
|
|
|
1986
2309
|
before do
|
|
1987
|
-
person.addresses.create(street: "Bond St")
|
|
2310
|
+
person.addresses.create!(street: "Bond St")
|
|
1988
2311
|
end
|
|
1989
2312
|
|
|
1990
2313
|
it "returns true" do
|
|
@@ -2034,32 +2357,22 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2034
2357
|
context "when the id does not match" do
|
|
2035
2358
|
|
|
2036
2359
|
context "when config set to raise error" do
|
|
2037
|
-
|
|
2038
|
-
before do
|
|
2039
|
-
Mongoid.raise_not_found_error = true
|
|
2040
|
-
end
|
|
2360
|
+
config_override :raise_not_found_error, true
|
|
2041
2361
|
|
|
2042
2362
|
it "raises an error" do
|
|
2043
2363
|
expect {
|
|
2044
2364
|
person.addresses.find(BSON::ObjectId.new)
|
|
2045
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2365
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
2046
2366
|
end
|
|
2047
2367
|
end
|
|
2048
2368
|
|
|
2049
2369
|
context "when config set not to raise error" do
|
|
2370
|
+
config_override :raise_not_found_error, false
|
|
2050
2371
|
|
|
2051
2372
|
let(:address) do
|
|
2052
2373
|
person.addresses.find(BSON::ObjectId.new)
|
|
2053
2374
|
end
|
|
2054
2375
|
|
|
2055
|
-
before do
|
|
2056
|
-
Mongoid.raise_not_found_error = false
|
|
2057
|
-
end
|
|
2058
|
-
|
|
2059
|
-
after do
|
|
2060
|
-
Mongoid.raise_not_found_error = true
|
|
2061
|
-
end
|
|
2062
|
-
|
|
2063
2376
|
it "returns nil" do
|
|
2064
2377
|
expect(address).to be_nil
|
|
2065
2378
|
end
|
|
@@ -2083,36 +2396,64 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2083
2396
|
context "when the ids do not match" do
|
|
2084
2397
|
|
|
2085
2398
|
context "when config set to raise error" do
|
|
2086
|
-
|
|
2087
|
-
before do
|
|
2088
|
-
Mongoid.raise_not_found_error = true
|
|
2089
|
-
end
|
|
2399
|
+
config_override :raise_not_found_error, true
|
|
2090
2400
|
|
|
2091
2401
|
it "raises an error" do
|
|
2092
2402
|
expect {
|
|
2093
2403
|
person.addresses.find([ BSON::ObjectId.new ])
|
|
2094
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2404
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
2095
2405
|
end
|
|
2096
2406
|
end
|
|
2097
2407
|
|
|
2098
2408
|
context "when config set not to raise error" do
|
|
2409
|
+
config_override :raise_not_found_error, false
|
|
2099
2410
|
|
|
2100
2411
|
let(:addresses) do
|
|
2101
2412
|
person.addresses.find([ BSON::ObjectId.new ])
|
|
2102
2413
|
end
|
|
2103
2414
|
|
|
2104
|
-
|
|
2105
|
-
|
|
2415
|
+
it "returns an empty array" do
|
|
2416
|
+
expect(addresses).to be_empty
|
|
2417
|
+
end
|
|
2418
|
+
end
|
|
2419
|
+
end
|
|
2420
|
+
end
|
|
2421
|
+
|
|
2422
|
+
context "with block" do
|
|
2423
|
+
let!(:author) do
|
|
2424
|
+
Person.create!(title: 'Person')
|
|
2425
|
+
end
|
|
2426
|
+
|
|
2427
|
+
let!(:video_one) do
|
|
2428
|
+
author.videos.create!(title: 'video one')
|
|
2429
|
+
end
|
|
2430
|
+
|
|
2431
|
+
let!(:video_two) do
|
|
2432
|
+
author.videos.create!(title: 'video two')
|
|
2433
|
+
end
|
|
2434
|
+
|
|
2435
|
+
it "finds one" do
|
|
2436
|
+
expect(
|
|
2437
|
+
author.videos.find do |video|
|
|
2438
|
+
video.title == 'video one'
|
|
2106
2439
|
end
|
|
2440
|
+
).to eq(video_one)
|
|
2441
|
+
end
|
|
2107
2442
|
|
|
2108
|
-
|
|
2109
|
-
|
|
2443
|
+
it "returns first match of multiple" do
|
|
2444
|
+
expect(
|
|
2445
|
+
author.videos.find do |video|
|
|
2446
|
+
['video one', 'video two'].include?(video.title)
|
|
2110
2447
|
end
|
|
2448
|
+
).to be_a(Video)
|
|
2449
|
+
end
|
|
2111
2450
|
|
|
2112
|
-
|
|
2113
|
-
|
|
2451
|
+
it "returns nil when not found" do
|
|
2452
|
+
expect(
|
|
2453
|
+
author.videos.find do |video|
|
|
2454
|
+
video.title == 'non exiting one'
|
|
2114
2455
|
end
|
|
2115
|
-
|
|
2456
|
+
).to be_nil
|
|
2116
2457
|
end
|
|
2117
2458
|
end
|
|
2118
2459
|
end
|
|
@@ -2120,7 +2461,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2120
2461
|
describe "#find_or_create_by" do
|
|
2121
2462
|
|
|
2122
2463
|
let(:person) do
|
|
2123
|
-
Person.create
|
|
2464
|
+
Person.create!
|
|
2124
2465
|
end
|
|
2125
2466
|
|
|
2126
2467
|
let!(:address) do
|
|
@@ -2163,11 +2504,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2163
2504
|
# context "when the child belongs to another document" do
|
|
2164
2505
|
#
|
|
2165
2506
|
# let(:product) do
|
|
2166
|
-
# Product.create
|
|
2507
|
+
# Product.create!
|
|
2167
2508
|
# end
|
|
2168
2509
|
#
|
|
2169
2510
|
# let(:purchase) do
|
|
2170
|
-
# Purchase.create
|
|
2511
|
+
# Purchase.create!
|
|
2171
2512
|
# end
|
|
2172
2513
|
#
|
|
2173
2514
|
# let(:line_item) do
|
|
@@ -2186,7 +2527,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2186
2527
|
describe "#find_or_create_by!" do
|
|
2187
2528
|
|
|
2188
2529
|
let(:person) do
|
|
2189
|
-
Person.create
|
|
2530
|
+
Person.create!
|
|
2190
2531
|
end
|
|
2191
2532
|
|
|
2192
2533
|
let!(:address) do
|
|
@@ -2238,11 +2579,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2238
2579
|
# context "when the child belongs to another document" do
|
|
2239
2580
|
#
|
|
2240
2581
|
# let(:product) do
|
|
2241
|
-
# Product.create
|
|
2582
|
+
# Product.create!
|
|
2242
2583
|
# end
|
|
2243
2584
|
#
|
|
2244
2585
|
# let(:purchase) do
|
|
2245
|
-
# Purchase.create
|
|
2586
|
+
# Purchase.create!
|
|
2246
2587
|
# end
|
|
2247
2588
|
#
|
|
2248
2589
|
# let(:line_item) do
|
|
@@ -2360,11 +2701,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2360
2701
|
describe "#method_missing" do
|
|
2361
2702
|
|
|
2362
2703
|
let!(:person) do
|
|
2363
|
-
Person.create
|
|
2704
|
+
Person.create!
|
|
2364
2705
|
end
|
|
2365
2706
|
|
|
2366
2707
|
let!(:address_one) do
|
|
2367
|
-
person.addresses.create(
|
|
2708
|
+
person.addresses.create!(
|
|
2368
2709
|
street: "Market",
|
|
2369
2710
|
state: "CA",
|
|
2370
2711
|
services: [ "1", "2" ]
|
|
@@ -2372,7 +2713,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2372
2713
|
end
|
|
2373
2714
|
|
|
2374
2715
|
let!(:address_two) do
|
|
2375
|
-
person.addresses.create(
|
|
2716
|
+
person.addresses.create!(
|
|
2376
2717
|
street: "Madison",
|
|
2377
2718
|
state: "NY",
|
|
2378
2719
|
services: [ "1", "2" ]
|
|
@@ -2416,13 +2757,26 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2416
2757
|
end
|
|
2417
2758
|
|
|
2418
2759
|
context "when providing a criteria class method" do
|
|
2760
|
+
context "without keyword arguments" do
|
|
2419
2761
|
|
|
2420
|
-
|
|
2421
|
-
|
|
2762
|
+
let(:addresses) do
|
|
2763
|
+
person.addresses.california
|
|
2764
|
+
end
|
|
2765
|
+
|
|
2766
|
+
it "applies the criteria to the documents" do
|
|
2767
|
+
expect(addresses).to eq([ address_one ])
|
|
2768
|
+
end
|
|
2422
2769
|
end
|
|
2423
2770
|
|
|
2424
|
-
|
|
2425
|
-
|
|
2771
|
+
context "with keyword arguments" do
|
|
2772
|
+
|
|
2773
|
+
let(:addresses) do
|
|
2774
|
+
person.addresses.city_and_state(city: "Sacramento", state: "CA")
|
|
2775
|
+
end
|
|
2776
|
+
|
|
2777
|
+
it "applies the criteria to the documents" do
|
|
2778
|
+
expect(addresses).to eq([])
|
|
2779
|
+
end
|
|
2426
2780
|
end
|
|
2427
2781
|
end
|
|
2428
2782
|
|
|
@@ -2507,17 +2861,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2507
2861
|
describe "#pop" do
|
|
2508
2862
|
|
|
2509
2863
|
let(:person) do
|
|
2510
|
-
Person.create
|
|
2864
|
+
Person.create!
|
|
2511
2865
|
end
|
|
2512
2866
|
|
|
2513
2867
|
context "when no argument is provided" do
|
|
2514
2868
|
|
|
2515
2869
|
let!(:address_one) do
|
|
2516
|
-
person.addresses.create(street: "sonnenallee")
|
|
2870
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2517
2871
|
end
|
|
2518
2872
|
|
|
2519
2873
|
let!(:address_two) do
|
|
2520
|
-
person.addresses.create(street: "hermannstr")
|
|
2874
|
+
person.addresses.create!(street: "hermannstr")
|
|
2521
2875
|
end
|
|
2522
2876
|
|
|
2523
2877
|
let!(:popped) do
|
|
@@ -2540,11 +2894,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2540
2894
|
context "when an integer is provided" do
|
|
2541
2895
|
|
|
2542
2896
|
let!(:address_one) do
|
|
2543
|
-
person.addresses.create(street: "sonnenallee")
|
|
2897
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2544
2898
|
end
|
|
2545
2899
|
|
|
2546
2900
|
let!(:address_two) do
|
|
2547
|
-
person.addresses.create(street: "hermannstr")
|
|
2901
|
+
person.addresses.create!(street: "hermannstr")
|
|
2548
2902
|
end
|
|
2549
2903
|
|
|
2550
2904
|
context "when the number is zero" do
|
|
@@ -2626,17 +2980,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2626
2980
|
describe "#shift" do
|
|
2627
2981
|
|
|
2628
2982
|
let(:person) do
|
|
2629
|
-
Person.create
|
|
2983
|
+
Person.create!
|
|
2630
2984
|
end
|
|
2631
2985
|
|
|
2632
2986
|
context "when no argument is provided" do
|
|
2633
2987
|
|
|
2634
2988
|
let!(:address_one) do
|
|
2635
|
-
person.addresses.create(street: "sonnenallee")
|
|
2989
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2636
2990
|
end
|
|
2637
2991
|
|
|
2638
2992
|
let!(:address_two) do
|
|
2639
|
-
person.addresses.create(street: "hermannstr")
|
|
2993
|
+
person.addresses.create!(street: "hermannstr")
|
|
2640
2994
|
end
|
|
2641
2995
|
|
|
2642
2996
|
let!(:shifted) do
|
|
@@ -2659,11 +3013,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2659
3013
|
context "when an integer is provided" do
|
|
2660
3014
|
|
|
2661
3015
|
let!(:address_one) do
|
|
2662
|
-
person.addresses.create(street: "sonnenallee")
|
|
3016
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2663
3017
|
end
|
|
2664
3018
|
|
|
2665
3019
|
let!(:address_two) do
|
|
2666
|
-
person.addresses.create(street: "hermannstr")
|
|
3020
|
+
person.addresses.create!(street: "hermannstr")
|
|
2667
3021
|
end
|
|
2668
3022
|
|
|
2669
3023
|
context "when the number is zero" do
|
|
@@ -2811,11 +3165,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2811
3165
|
describe "##{method}" do
|
|
2812
3166
|
|
|
2813
3167
|
let(:person) do
|
|
2814
|
-
Person.create
|
|
3168
|
+
Person.create!
|
|
2815
3169
|
end
|
|
2816
3170
|
|
|
2817
3171
|
before do
|
|
2818
|
-
person.addresses.create(street: "Upper")
|
|
3172
|
+
person.addresses.create!(street: "Upper")
|
|
2819
3173
|
person.addresses.build(street: "Bond")
|
|
2820
3174
|
end
|
|
2821
3175
|
|
|
@@ -2853,7 +3207,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2853
3207
|
context "when there are no documents present" do
|
|
2854
3208
|
|
|
2855
3209
|
let(:person) do
|
|
2856
|
-
Person.create
|
|
3210
|
+
Person.create!
|
|
2857
3211
|
end
|
|
2858
3212
|
|
|
2859
3213
|
it "updates nothing" do
|
|
@@ -2864,11 +3218,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2864
3218
|
context "when documents are present" do
|
|
2865
3219
|
|
|
2866
3220
|
let(:person) do
|
|
2867
|
-
Person.create
|
|
3221
|
+
Person.create!
|
|
2868
3222
|
end
|
|
2869
3223
|
|
|
2870
3224
|
let!(:address) do
|
|
2871
|
-
person.addresses.create(street: "Hobrecht", number: 27)
|
|
3225
|
+
person.addresses.create!(street: "Hobrecht", number: 27)
|
|
2872
3226
|
end
|
|
2873
3227
|
|
|
2874
3228
|
context "when updating with a where clause" do
|
|
@@ -2903,16 +3257,16 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2903
3257
|
context "when updating the bottom level" do
|
|
2904
3258
|
|
|
2905
3259
|
let!(:person) do
|
|
2906
|
-
Person.create
|
|
3260
|
+
Person.create!
|
|
2907
3261
|
end
|
|
2908
3262
|
|
|
2909
3263
|
let!(:address) do
|
|
2910
|
-
person.addresses.create(street: "Joachimstr")
|
|
3264
|
+
person.addresses.create!(street: "Joachimstr")
|
|
2911
3265
|
end
|
|
2912
3266
|
|
|
2913
3267
|
let!(:location) do
|
|
2914
|
-
address.locations.create(name: "vacation", number: 0)
|
|
2915
|
-
address.locations.create(name: "work", number: 3)
|
|
3268
|
+
address.locations.create!(name: "vacation", number: 0)
|
|
3269
|
+
address.locations.create!(name: "work", number: 3)
|
|
2916
3270
|
end
|
|
2917
3271
|
|
|
2918
3272
|
context "when updating with replacement of embedded array" do
|
|
@@ -2920,7 +3274,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2920
3274
|
context "when updating with a hash" do
|
|
2921
3275
|
|
|
2922
3276
|
before do
|
|
2923
|
-
address.update_attributes(locations: [{ name: "home" }])
|
|
3277
|
+
address.update_attributes!(locations: [{ name: "home" }])
|
|
2924
3278
|
end
|
|
2925
3279
|
|
|
2926
3280
|
it "updates the attributes" do
|
|
@@ -2941,7 +3295,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2941
3295
|
|
|
2942
3296
|
before do
|
|
2943
3297
|
location.number = 7
|
|
2944
|
-
location.save
|
|
3298
|
+
location.save!
|
|
2945
3299
|
end
|
|
2946
3300
|
|
|
2947
3301
|
let(:updated_location_number) do
|
|
@@ -3074,7 +3428,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3074
3428
|
context "when creating a persisted tree" do
|
|
3075
3429
|
|
|
3076
3430
|
let(:quiz) do
|
|
3077
|
-
Quiz.create
|
|
3431
|
+
Quiz.create!
|
|
3078
3432
|
end
|
|
3079
3433
|
|
|
3080
3434
|
let(:page) do
|
|
@@ -3139,7 +3493,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3139
3493
|
context "when saving the root" do
|
|
3140
3494
|
|
|
3141
3495
|
before do
|
|
3142
|
-
person.save
|
|
3496
|
+
person.save!
|
|
3143
3497
|
end
|
|
3144
3498
|
|
|
3145
3499
|
it "persists the first level document" do
|
|
@@ -3165,7 +3519,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3165
3519
|
|
|
3166
3520
|
describe "replacing the entire embedded list" do
|
|
3167
3521
|
|
|
3168
|
-
context "when an embeds many relationship contains
|
|
3522
|
+
context "when an embeds many relationship contains nil as the first item" do
|
|
3169
3523
|
|
|
3170
3524
|
let(:person) do
|
|
3171
3525
|
Person.create!
|
|
@@ -3186,7 +3540,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3186
3540
|
end
|
|
3187
3541
|
end
|
|
3188
3542
|
|
|
3189
|
-
context "when an embeds many relationship contains
|
|
3543
|
+
context "when an embeds many relationship contains nil in the middle of the list" do
|
|
3190
3544
|
|
|
3191
3545
|
let(:person) do
|
|
3192
3546
|
Person.create!
|
|
@@ -3207,7 +3561,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3207
3561
|
end
|
|
3208
3562
|
end
|
|
3209
3563
|
|
|
3210
|
-
context "when an embeds many relationship contains
|
|
3564
|
+
context "when an embeds many relationship contains nil at the end of the list" do
|
|
3211
3565
|
|
|
3212
3566
|
let(:person) do
|
|
3213
3567
|
Person.create!
|
|
@@ -3231,7 +3585,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3231
3585
|
|
|
3232
3586
|
describe "appending to the embedded list" do
|
|
3233
3587
|
|
|
3234
|
-
context "when appending
|
|
3588
|
+
context "when appending nil to the first position in an embedded list" do
|
|
3235
3589
|
|
|
3236
3590
|
let(:person) do
|
|
3237
3591
|
Person.create! phone_numbers: []
|
|
@@ -3250,7 +3604,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3250
3604
|
end
|
|
3251
3605
|
end
|
|
3252
3606
|
|
|
3253
|
-
context "when appending
|
|
3607
|
+
context "when appending nil into the middle of an embedded list" do
|
|
3254
3608
|
|
|
3255
3609
|
let(:person) do
|
|
3256
3610
|
Person.create! phone_numbers: []
|
|
@@ -3269,7 +3623,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3269
3623
|
end
|
|
3270
3624
|
end
|
|
3271
3625
|
|
|
3272
|
-
context "when appending
|
|
3626
|
+
context "when appending nil to the end of an embedded list" do
|
|
3273
3627
|
|
|
3274
3628
|
let(:person) do
|
|
3275
3629
|
Person.create! phone_numbers: []
|
|
@@ -3293,11 +3647,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3293
3647
|
context "when accessing the parent in a destroy callback" do
|
|
3294
3648
|
|
|
3295
3649
|
let!(:league) do
|
|
3296
|
-
League.create
|
|
3650
|
+
League.create!
|
|
3297
3651
|
end
|
|
3298
3652
|
|
|
3299
3653
|
let!(:division) do
|
|
3300
|
-
league.divisions.create
|
|
3654
|
+
league.divisions.create!
|
|
3301
3655
|
end
|
|
3302
3656
|
|
|
3303
3657
|
before do
|
|
@@ -3312,15 +3666,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3312
3666
|
context "when updating the parent with all attributes" do
|
|
3313
3667
|
|
|
3314
3668
|
let!(:person) do
|
|
3315
|
-
Person.create
|
|
3669
|
+
Person.create!
|
|
3316
3670
|
end
|
|
3317
3671
|
|
|
3318
3672
|
let!(:address) do
|
|
3319
|
-
person.addresses.create
|
|
3673
|
+
person.addresses.create!
|
|
3320
3674
|
end
|
|
3321
3675
|
|
|
3322
3676
|
before do
|
|
3323
|
-
person.update_attributes(person.attributes)
|
|
3677
|
+
person.update_attributes!(person.attributes)
|
|
3324
3678
|
end
|
|
3325
3679
|
|
|
3326
3680
|
it "does not duplicate the embedded documents" do
|
|
@@ -3335,13 +3689,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3335
3689
|
context "when embedding children named versions" do
|
|
3336
3690
|
|
|
3337
3691
|
let(:acolyte) do
|
|
3338
|
-
Acolyte.create(name: "test")
|
|
3692
|
+
Acolyte.create!(name: "test")
|
|
3339
3693
|
end
|
|
3340
3694
|
|
|
3341
3695
|
context "when creating a child" do
|
|
3342
3696
|
|
|
3343
3697
|
let(:version) do
|
|
3344
|
-
acolyte.versions.create(number: 1)
|
|
3698
|
+
acolyte.versions.create!(number: 1)
|
|
3345
3699
|
end
|
|
3346
3700
|
|
|
3347
3701
|
it "allows the operation" do
|
|
@@ -3366,7 +3720,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3366
3720
|
let!(:account) do
|
|
3367
3721
|
Account.new(name: "Testing").tap do |acct|
|
|
3368
3722
|
acct.memberships.build
|
|
3369
|
-
acct.save
|
|
3723
|
+
acct.save!
|
|
3370
3724
|
end
|
|
3371
3725
|
end
|
|
3372
3726
|
|
|
@@ -3378,10 +3732,10 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3378
3732
|
|
|
3379
3733
|
before do
|
|
3380
3734
|
account.name = ""
|
|
3381
|
-
account.save
|
|
3382
3735
|
end
|
|
3383
3736
|
|
|
3384
3737
|
it "does not lose the parent reference" do
|
|
3738
|
+
expect(account.save).to eq false
|
|
3385
3739
|
expect(from_db.memberships.first.account).to eq(account)
|
|
3386
3740
|
end
|
|
3387
3741
|
end
|
|
@@ -3401,15 +3755,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3401
3755
|
context "when moving an embedded document from one parent to another" do
|
|
3402
3756
|
|
|
3403
3757
|
let!(:person_one) do
|
|
3404
|
-
Person.create
|
|
3758
|
+
Person.create!
|
|
3405
3759
|
end
|
|
3406
3760
|
|
|
3407
3761
|
let!(:person_two) do
|
|
3408
|
-
Person.create
|
|
3762
|
+
Person.create!
|
|
3409
3763
|
end
|
|
3410
3764
|
|
|
3411
3765
|
let!(:address) do
|
|
3412
|
-
person_one.addresses.create(street: "Kudamm")
|
|
3766
|
+
person_one.addresses.create!(street: "Kudamm")
|
|
3413
3767
|
end
|
|
3414
3768
|
|
|
3415
3769
|
before do
|
|
@@ -3444,7 +3798,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3444
3798
|
context "when the relation has a default scope" do
|
|
3445
3799
|
|
|
3446
3800
|
let!(:person) do
|
|
3447
|
-
Person.create
|
|
3801
|
+
Person.create!
|
|
3448
3802
|
end
|
|
3449
3803
|
|
|
3450
3804
|
context "when the default scope is a sort" do
|
|
@@ -3514,7 +3868,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3514
3868
|
context "when indexing the documents" do
|
|
3515
3869
|
|
|
3516
3870
|
let!(:person) do
|
|
3517
|
-
Person.create
|
|
3871
|
+
Person.create!
|
|
3518
3872
|
end
|
|
3519
3873
|
|
|
3520
3874
|
context "when the documents have a limiting default scope" do
|
|
@@ -3563,18 +3917,18 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3563
3917
|
context "when the embedded document has an array field" do
|
|
3564
3918
|
|
|
3565
3919
|
let!(:person) do
|
|
3566
|
-
Person.create
|
|
3920
|
+
Person.create!
|
|
3567
3921
|
end
|
|
3568
3922
|
|
|
3569
3923
|
let!(:video) do
|
|
3570
|
-
person.videos.create
|
|
3924
|
+
person.videos.create!
|
|
3571
3925
|
end
|
|
3572
3926
|
|
|
3573
3927
|
context "when saving the array on a persisted document" do
|
|
3574
3928
|
|
|
3575
3929
|
before do
|
|
3576
3930
|
video.genres = [ "horror", "scifi" ]
|
|
3577
|
-
video.save
|
|
3931
|
+
video.save!
|
|
3578
3932
|
end
|
|
3579
3933
|
|
|
3580
3934
|
it "sets the value" do
|
|
@@ -3599,7 +3953,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3599
3953
|
|
|
3600
3954
|
before do
|
|
3601
3955
|
loaded_video.genres = [ "comedy" ]
|
|
3602
|
-
loaded_video.save
|
|
3956
|
+
loaded_video.save!
|
|
3603
3957
|
end
|
|
3604
3958
|
|
|
3605
3959
|
it "sets the new value" do
|
|
@@ -3617,15 +3971,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3617
3971
|
context "when destroying an embedded document" do
|
|
3618
3972
|
|
|
3619
3973
|
let(:person) do
|
|
3620
|
-
Person.create
|
|
3974
|
+
Person.create!
|
|
3621
3975
|
end
|
|
3622
3976
|
|
|
3623
3977
|
let!(:address_one) do
|
|
3624
|
-
person.addresses.create(street: "hobrecht")
|
|
3978
|
+
person.addresses.create!(street: "hobrecht")
|
|
3625
3979
|
end
|
|
3626
3980
|
|
|
3627
3981
|
let!(:address_two) do
|
|
3628
|
-
person.addresses.create(street: "maybachufer")
|
|
3982
|
+
person.addresses.create!(street: "maybachufer")
|
|
3629
3983
|
end
|
|
3630
3984
|
|
|
3631
3985
|
before do
|
|
@@ -3664,6 +4018,28 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3664
4018
|
end
|
|
3665
4019
|
end
|
|
3666
4020
|
|
|
4021
|
+
context "when destroying a document with multiple nil _ids" do
|
|
4022
|
+
let(:congress) { EmmCongress.create! }
|
|
4023
|
+
|
|
4024
|
+
before do
|
|
4025
|
+
congress.legislators << EmmLegislator.new(_id: nil, a: 1)
|
|
4026
|
+
congress.legislators << EmmLegislator.new(_id: nil, a: 2)
|
|
4027
|
+
|
|
4028
|
+
congress.legislators[0].destroy
|
|
4029
|
+
end
|
|
4030
|
+
|
|
4031
|
+
it "deletes the correct document locally" do
|
|
4032
|
+
pending "MONGOID-5394"
|
|
4033
|
+
expect(congress.legislators.length).to eq(1)
|
|
4034
|
+
expect(congress.legislators.first.a).to eq(1)
|
|
4035
|
+
end
|
|
4036
|
+
|
|
4037
|
+
it "only deletes the one document" do
|
|
4038
|
+
pending "MONGOID-5394"
|
|
4039
|
+
expect(congress.reload.legislators.length).to eq(1)
|
|
4040
|
+
end
|
|
4041
|
+
end
|
|
4042
|
+
|
|
3667
4043
|
context "when adding a document" do
|
|
3668
4044
|
|
|
3669
4045
|
let(:person) do
|
|
@@ -3697,7 +4073,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3697
4073
|
context "when the association has an order defined" do
|
|
3698
4074
|
|
|
3699
4075
|
let(:person) do
|
|
3700
|
-
Person.create
|
|
4076
|
+
Person.create!
|
|
3701
4077
|
end
|
|
3702
4078
|
|
|
3703
4079
|
let(:message_one) do
|
|
@@ -3728,11 +4104,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3728
4104
|
|
|
3729
4105
|
before do
|
|
3730
4106
|
person.aliases = [ { name: "A", priority: 3 }, { name: "B", priority: 4 }]
|
|
3731
|
-
person.save
|
|
4107
|
+
person.save!
|
|
3732
4108
|
end
|
|
3733
4109
|
|
|
3734
4110
|
let!(:person2) do
|
|
3735
|
-
Person.create( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
|
|
4111
|
+
Person.create!( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
|
|
3736
4112
|
end
|
|
3737
4113
|
|
|
3738
4114
|
it "allows ordering on a key of an embedded document" do
|
|
@@ -3767,7 +4143,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3767
4143
|
context "when updating multiple levels in one update" do
|
|
3768
4144
|
|
|
3769
4145
|
let!(:person) do
|
|
3770
|
-
Person.create(
|
|
4146
|
+
Person.create!(
|
|
3771
4147
|
addresses: [
|
|
3772
4148
|
{ locations: [{ name: "home" }]}
|
|
3773
4149
|
]
|
|
@@ -3781,7 +4157,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3781
4157
|
end
|
|
3782
4158
|
|
|
3783
4159
|
before do
|
|
3784
|
-
from_db.update_attributes(
|
|
4160
|
+
from_db.update_attributes!(
|
|
3785
4161
|
addresses: [
|
|
3786
4162
|
{ locations: [{ name: "work" }]}
|
|
3787
4163
|
]
|
|
@@ -3801,15 +4177,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3801
4177
|
context "when the embedded relation sorts on a boolean" do
|
|
3802
4178
|
|
|
3803
4179
|
let(:circuit) do
|
|
3804
|
-
Circuit.create
|
|
4180
|
+
Circuit.create!
|
|
3805
4181
|
end
|
|
3806
4182
|
|
|
3807
4183
|
let!(:bus_one) do
|
|
3808
|
-
circuit.buses.create(saturday: true)
|
|
4184
|
+
circuit.buses.create!(saturday: true)
|
|
3809
4185
|
end
|
|
3810
4186
|
|
|
3811
4187
|
let!(:bus_two) do
|
|
3812
|
-
circuit.buses.create(saturday: false)
|
|
4188
|
+
circuit.buses.create!(saturday: false)
|
|
3813
4189
|
end
|
|
3814
4190
|
|
|
3815
4191
|
it "orders properly with the boolean" do
|
|
@@ -3820,7 +4196,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3820
4196
|
context "when batch replacing multiple relations in a single update" do
|
|
3821
4197
|
|
|
3822
4198
|
let(:document) do
|
|
3823
|
-
Person.create
|
|
4199
|
+
Person.create!
|
|
3824
4200
|
end
|
|
3825
4201
|
|
|
3826
4202
|
let(:person) do
|
|
@@ -3828,23 +4204,23 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3828
4204
|
end
|
|
3829
4205
|
|
|
3830
4206
|
let!(:symptom_one) do
|
|
3831
|
-
person.symptoms.create
|
|
4207
|
+
person.symptoms.create!
|
|
3832
4208
|
end
|
|
3833
4209
|
|
|
3834
4210
|
let!(:symptom_two) do
|
|
3835
|
-
person.symptoms.create
|
|
4211
|
+
person.symptoms.create!
|
|
3836
4212
|
end
|
|
3837
4213
|
|
|
3838
4214
|
let!(:appointment_one) do
|
|
3839
|
-
person.appointments.create
|
|
4215
|
+
person.appointments.create!
|
|
3840
4216
|
end
|
|
3841
4217
|
|
|
3842
4218
|
let!(:appointment_two) do
|
|
3843
|
-
person.appointments.create
|
|
4219
|
+
person.appointments.create!
|
|
3844
4220
|
end
|
|
3845
4221
|
|
|
3846
4222
|
before do
|
|
3847
|
-
person.update_attributes(
|
|
4223
|
+
person.update_attributes!(
|
|
3848
4224
|
appointments: [ appointment_one.as_document, appointment_two.as_document ],
|
|
3849
4225
|
symptoms: [ symptom_one.as_document, symptom_two.as_document ]
|
|
3850
4226
|
)
|
|
@@ -4177,7 +4553,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4177
4553
|
context "when the parent has an after create callback" do
|
|
4178
4554
|
|
|
4179
4555
|
before do
|
|
4180
|
-
server.save
|
|
4556
|
+
server.save!
|
|
4181
4557
|
end
|
|
4182
4558
|
|
|
4183
4559
|
it "does not push the embedded documents twice" do
|
|
@@ -4189,13 +4565,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4189
4565
|
context "when embedded documents are stored without ids" do
|
|
4190
4566
|
|
|
4191
4567
|
let!(:band) do
|
|
4192
|
-
Band.create(name: "Moderat")
|
|
4568
|
+
Band.create!(name: "Moderat")
|
|
4193
4569
|
end
|
|
4194
4570
|
|
|
4195
4571
|
before do
|
|
4196
4572
|
band.collection.
|
|
4197
4573
|
find(_id: band.id).
|
|
4198
|
-
update_one("$set" => { records: [{ name: "Moderat" }]})
|
|
4574
|
+
update_one("$set" => { records: [{ _id: BSON::ObjectId.new, name: "Moderat" }]})
|
|
4199
4575
|
end
|
|
4200
4576
|
|
|
4201
4577
|
context "when loading the documents" do
|
|
@@ -4239,7 +4615,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4239
4615
|
company = Company.new
|
|
4240
4616
|
4.times { |i| company.staffs << Staff.new(age: 50 + i)}
|
|
4241
4617
|
2.times { |i| company.staffs << Staff.new(age: 40)}
|
|
4242
|
-
company.save
|
|
4618
|
+
company.save!
|
|
4243
4619
|
company.staffs.delete_if {|x| x.age >= 50}
|
|
4244
4620
|
expect(company.staffs.count).to eq(2)
|
|
4245
4621
|
end
|
|
@@ -4316,7 +4692,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4316
4692
|
context "when the parent is persisted" do
|
|
4317
4693
|
|
|
4318
4694
|
let(:zone) do
|
|
4319
|
-
DNS::Zone.create
|
|
4695
|
+
DNS::Zone.create!
|
|
4320
4696
|
end
|
|
4321
4697
|
|
|
4322
4698
|
let(:soa_1) do
|
|
@@ -4354,4 +4730,134 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4354
4730
|
end
|
|
4355
4731
|
end
|
|
4356
4732
|
end
|
|
4733
|
+
|
|
4734
|
+
context "when trying to persist the empty list" do
|
|
4735
|
+
|
|
4736
|
+
context "in an embeds_many relation" do
|
|
4737
|
+
|
|
4738
|
+
let(:band) { Band.create! }
|
|
4739
|
+
|
|
4740
|
+
before do
|
|
4741
|
+
band.labels = []
|
|
4742
|
+
band.save!
|
|
4743
|
+
end
|
|
4744
|
+
|
|
4745
|
+
let(:reloaded_band) { Band.collection.find(_id: band._id).first }
|
|
4746
|
+
|
|
4747
|
+
it "persists the empty list" do
|
|
4748
|
+
expect(reloaded_band).to have_key(:labels)
|
|
4749
|
+
expect(reloaded_band[:labels]).to eq []
|
|
4750
|
+
end
|
|
4751
|
+
end
|
|
4752
|
+
|
|
4753
|
+
context "in a nested embeds_many relation" do
|
|
4754
|
+
|
|
4755
|
+
let(:survey) { Survey.create!(questions: [Question.new]) }
|
|
4756
|
+
|
|
4757
|
+
before do
|
|
4758
|
+
survey.questions.first.answers = []
|
|
4759
|
+
survey.save!
|
|
4760
|
+
end
|
|
4761
|
+
|
|
4762
|
+
let(:reloaded_survey) { Survey.collection.find(_id: survey._id).first }
|
|
4763
|
+
|
|
4764
|
+
it "persists the empty list" do
|
|
4765
|
+
expect(reloaded_survey).to have_key(:questions)
|
|
4766
|
+
expect(reloaded_survey[:questions][0]).to have_key(:answers)
|
|
4767
|
+
expect(reloaded_survey[:questions][0][:answers]).to eq []
|
|
4768
|
+
end
|
|
4769
|
+
end
|
|
4770
|
+
|
|
4771
|
+
context "when not setting the embeds_many field" do
|
|
4772
|
+
|
|
4773
|
+
let(:band) { Band.create! }
|
|
4774
|
+
|
|
4775
|
+
let(:reloaded_band) { Band.collection.find(_id: band._id).first }
|
|
4776
|
+
|
|
4777
|
+
it "does not persist the empty list" do
|
|
4778
|
+
expect(reloaded_band).to_not have_key(:labels)
|
|
4779
|
+
end
|
|
4780
|
+
end
|
|
4781
|
+
end
|
|
4782
|
+
|
|
4783
|
+
context "when using assign_attributes with an already populated array" do
|
|
4784
|
+
let(:post) { EmmPost.create! }
|
|
4785
|
+
|
|
4786
|
+
before do
|
|
4787
|
+
post.assign_attributes(company_tags: [{id: BSON::ObjectId.new, title: 'a'}],
|
|
4788
|
+
user_tags: [{id: BSON::ObjectId.new, title: 'b'}])
|
|
4789
|
+
post.save!
|
|
4790
|
+
post.reload
|
|
4791
|
+
post.assign_attributes(company_tags: [{id: BSON::ObjectId.new, title: 'c'}],
|
|
4792
|
+
user_tags: [])
|
|
4793
|
+
post.save!
|
|
4794
|
+
post.reload
|
|
4795
|
+
end
|
|
4796
|
+
|
|
4797
|
+
it "has the correct embedded documents" do
|
|
4798
|
+
expect(post.company_tags.length).to eq(1)
|
|
4799
|
+
expect(post.company_tags.first.title).to eq("c")
|
|
4800
|
+
end
|
|
4801
|
+
end
|
|
4802
|
+
|
|
4803
|
+
context "when the parent fails validation" do
|
|
4804
|
+
let(:school) { EmmSchool.new }
|
|
4805
|
+
let(:student) { school.students.new }
|
|
4806
|
+
|
|
4807
|
+
before do
|
|
4808
|
+
student.save
|
|
4809
|
+
end
|
|
4810
|
+
|
|
4811
|
+
it "does not mark the parent as persisted" do
|
|
4812
|
+
expect(school.persisted?).to be false
|
|
4813
|
+
end
|
|
4814
|
+
|
|
4815
|
+
it "does not mark the child as persisted" do
|
|
4816
|
+
expect(student.persisted?).to be false
|
|
4817
|
+
end
|
|
4818
|
+
|
|
4819
|
+
it "does not persist the parent" do
|
|
4820
|
+
expect(School.count).to eq(0)
|
|
4821
|
+
end
|
|
4822
|
+
end
|
|
4823
|
+
|
|
4824
|
+
context "when doing assign_attributes then assignment" do
|
|
4825
|
+
|
|
4826
|
+
let(:post) do
|
|
4827
|
+
EmmPost.create!(
|
|
4828
|
+
company_tags: [ EmmCompanyTag.new(title: "1"), EmmCompanyTag.new(title: "1") ],
|
|
4829
|
+
user_tags: [ EmmUserTag.new(title: "1"), EmmUserTag.new(title: "1") ]
|
|
4830
|
+
)
|
|
4831
|
+
end
|
|
4832
|
+
|
|
4833
|
+
let(:from_db) { EmmPost.find(post.id) }
|
|
4834
|
+
|
|
4835
|
+
before do
|
|
4836
|
+
post.assign_attributes(
|
|
4837
|
+
company_tags: [ EmmCompanyTag.new(title: '3'), EmmCompanyTag.new(title: '4') ]
|
|
4838
|
+
)
|
|
4839
|
+
post.user_tags = [ EmmUserTag.new(title: '3'), EmmUserTag.new(title: '4') ]
|
|
4840
|
+
post.save!
|
|
4841
|
+
end
|
|
4842
|
+
|
|
4843
|
+
it "persists the associations correctly" do
|
|
4844
|
+
expect(from_db.user_tags.size).to eq(2)
|
|
4845
|
+
expect(from_db.company_tags.size).to eq(2)
|
|
4846
|
+
end
|
|
4847
|
+
end
|
|
4848
|
+
|
|
4849
|
+
context "when assigning hashes" do
|
|
4850
|
+
let(:user) { EmmUser.create! }
|
|
4851
|
+
|
|
4852
|
+
before do
|
|
4853
|
+
user.orders = [ { sku: 1 }, { sku: 2 } ]
|
|
4854
|
+
end
|
|
4855
|
+
|
|
4856
|
+
it "creates the objects correctly" do
|
|
4857
|
+
expect(user.orders.first).to be_a(EmmOrder)
|
|
4858
|
+
expect(user.orders.last).to be_a(EmmOrder)
|
|
4859
|
+
|
|
4860
|
+
expect(user.orders.map(&:sku).sort).to eq([ 1, 2 ])
|
|
4861
|
+
end
|
|
4862
|
+
end
|
|
4357
4863
|
end
|