mongoid 7.0.2 → 8.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +33 -33
- data/LICENSE +1 -0
- data/README.md +34 -20
- data/Rakefile +100 -5
- data/lib/config/locales/en.yml +220 -105
- data/lib/mongoid/association/accessors.rb +176 -84
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +9 -15
- data/lib/mongoid/association/constrainable.rb +5 -7
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +31 -10
- data/lib/mongoid/association/embedded/batchable.rb +68 -54
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +27 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +16 -25
- data/lib/mongoid/association/embedded/embedded_in.rb +9 -28
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +10 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +156 -135
- data/lib/mongoid/association/embedded/embeds_many.rb +10 -37
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +27 -10
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +64 -30
- data/lib/mongoid/association/embedded/embeds_one.rb +11 -34
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +65 -41
- data/lib/mongoid/association/many.rb +25 -35
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +22 -30
- data/lib/mongoid/association/nested/nested_buildable.rb +9 -15
- data/lib/mongoid/association/nested/one.rb +57 -30
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +5 -12
- data/lib/mongoid/association/options.rb +16 -46
- data/lib/mongoid/association/proxy.rb +52 -40
- data/lib/mongoid/association/referenced/auto_save.rb +9 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +5 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -31
- data/lib/mongoid/association/referenced/belongs_to.rb +16 -38
- data/lib/mongoid/association/referenced/counter_cache.rb +14 -25
- data/lib/mongoid/association/referenced/eager.rb +42 -38
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +106 -67
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +29 -46
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +440 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +104 -127
- data/lib/mongoid/association/referenced/has_many.rb +21 -45
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +16 -29
- data/lib/mongoid/association/referenced/has_one/proxy.rb +25 -30
- data/lib/mongoid/association/referenced/has_one.rb +16 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -26
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +149 -89
- data/lib/mongoid/association.rb +13 -27
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +23 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +49 -47
- data/lib/mongoid/attributes/dynamic.rb +22 -36
- data/lib/mongoid/attributes/nested.rb +12 -15
- data/lib/mongoid/attributes/processing.rb +19 -27
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +6 -9
- data/lib/mongoid/attributes.rb +103 -100
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +152 -73
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +21 -18
- data/lib/mongoid/clients/sessions.rb +10 -10
- data/lib/mongoid/clients/storage_options.rb +9 -17
- data/lib/mongoid/clients/validators/storage.rb +5 -24
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +7 -9
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +51 -13
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +3 -1
- data/lib/mongoid/config.rb +235 -48
- data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
- data/lib/mongoid/contextual/aggregable/mongo.rb +32 -33
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +13 -44
- data/lib/mongoid/contextual/map_reduce.rb +7 -35
- data/lib/mongoid/contextual/memory.rb +387 -81
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +641 -283
- data/lib/mongoid/contextual/none.rb +264 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +21 -11
- data/lib/mongoid/copyable.rb +46 -17
- data/lib/mongoid/criteria/findable.rb +20 -20
- data/lib/mongoid/criteria/includable.rb +32 -34
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +15 -21
- data/lib/mongoid/criteria/options.rb +4 -5
- data/lib/mongoid/criteria/permission.rb +3 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +4 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +28 -8
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +11 -12
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +6 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +49 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +12 -19
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +7 -32
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +7 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +10 -10
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +19 -7
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +105 -31
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +205 -44
- data/lib/mongoid/criteria/queryable/optional.rb +16 -65
- data/lib/mongoid/criteria/queryable/options.rb +4 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +471 -168
- data/lib/mongoid/criteria/queryable/selector.rb +133 -58
- data/lib/mongoid/criteria/queryable/smash.rb +42 -18
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +18 -15
- data/lib/mongoid/criteria/scopable.rb +29 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +106 -111
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +162 -103
- data/lib/mongoid/equality.rb +35 -18
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +35 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +3 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +3 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +8 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +5 -10
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +3 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +4 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +6 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +3 -4
- data/lib/mongoid/errors/no_client_hosts.rb +3 -4
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +3 -4
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -1
- data/lib/mongoid/errors/unknown_attribute.rb +3 -4
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +18 -4
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +37 -44
- data/lib/mongoid/extensions/big_decimal.rb +35 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +10 -6
- data/lib/mongoid/extensions/date.rb +32 -25
- data/lib/mongoid/extensions/date_time.rb +5 -13
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +5 -8
- data/lib/mongoid/extensions/float.rb +12 -14
- data/lib/mongoid/extensions/hash.rb +64 -42
- data/lib/mongoid/extensions/integer.rb +12 -16
- data/lib/mongoid/extensions/module.rb +3 -4
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +27 -52
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +14 -7
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +35 -64
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +38 -22
- data/lib/mongoid/extensions/time_with_zone.rb +26 -9
- data/lib/mongoid/extensions/true_class.rb +5 -8
- data/lib/mongoid/extensions.rb +19 -3
- data/lib/mongoid/factory.rb +104 -17
- data/lib/mongoid/fields/foreign_key.rb +14 -26
- data/lib/mongoid/fields/localized.rb +21 -15
- data/lib/mongoid/fields/standard.rb +23 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +349 -76
- data/lib/mongoid/findable.rb +115 -34
- data/lib/mongoid/indexable/specification.rb +5 -18
- data/lib/mongoid/indexable/validators/options.rb +8 -9
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +85 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +4 -154
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +130 -0
- data/lib/mongoid/persistable/creatable.rb +23 -30
- data/lib/mongoid/persistable/deletable.rb +7 -23
- data/lib/mongoid/persistable/destroyable.rb +12 -11
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +14 -10
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +16 -9
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +10 -10
- data/lib/mongoid/persistable/updatable.rb +99 -30
- data/lib/mongoid/persistable/upsertable.rb +23 -9
- data/lib/mongoid/persistable.rb +138 -40
- data/lib/mongoid/persistence_context.rb +107 -52
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +18 -234
- data/lib/mongoid/railtie.rb +20 -16
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +16 -2
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +37 -60
- data/lib/mongoid/selectable.rb +8 -18
- data/lib/mongoid/serializable.rb +33 -34
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +60 -20
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +24 -5
- data/lib/mongoid/tasks/database.rb +105 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +80 -67
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +4 -3
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +5 -6
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +54 -25
- data/lib/mongoid/traversable.rb +185 -61
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +3 -4
- data/lib/mongoid/validatable/macros.rb +8 -15
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +30 -42
- data/lib/mongoid/validatable.rb +16 -32
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +50 -17
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -32
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +29 -3
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +33 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +283 -0
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +107 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +192 -0
- data/spec/integration/callbacks_spec.rb +584 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +74 -0
- data/spec/integration/matcher_examples_spec.rb +765 -0
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +35 -33
- data/spec/mongoid/association/depending_spec.rb +431 -338
- data/spec/mongoid/association/eager_spec.rb +8 -5
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +4 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +152 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +61 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +114 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +706 -197
- data/spec/mongoid/association/embedded/embeds_many_models.rb +227 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +81 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +27 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +38 -23
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +73 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +77 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +4 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +111 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +266 -17
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +114 -58
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +96 -29
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +67 -4
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +559 -385
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +92 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +84 -7
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +132 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +415 -129
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +859 -502
- data/spec/mongoid/association/referenced/has_many_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +51 -3
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +55 -9
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +135 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +113 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +87 -7
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +48 -32
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +93 -12
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +149 -78
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +24 -22
- data/spec/mongoid/attributes_spec.rb +895 -54
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +484 -67
- data/spec/mongoid/clients/factory_spec.rb +139 -33
- data/spec/mongoid/clients/options_spec.rb +76 -54
- data/spec/mongoid/clients/sessions_spec.rb +35 -63
- data/spec/mongoid/clients/transactions_spec.rb +87 -41
- data/spec/mongoid/clients_spec.rb +257 -31
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +126 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +507 -2
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +242 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +22 -19
- data/spec/mongoid/contextual/memory_spec.rb +1828 -303
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3505 -1268
- data/spec/mongoid/contextual/none_spec.rb +80 -67
- data/spec/mongoid/copyable_spec.rb +697 -40
- data/spec/mongoid/copyable_spec_models.rb +47 -0
- data/spec/mongoid/criteria/findable_spec.rb +161 -228
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +20 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +100 -48
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +9 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +136 -26
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +46 -17
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -15
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +119 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +7 -70
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +53 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +41 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +18 -485
- data/spec/mongoid/criteria/queryable/options_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2538 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1193 -2934
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +56 -5
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +210 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1334 -1719
- data/spec/mongoid/document_fields_spec.rb +262 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +212 -67
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +78 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +7 -5
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +24 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +5 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +4 -2
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -1
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +41 -45
- data/spec/mongoid/extensions/big_decimal_spec.rb +715 -213
- data/spec/mongoid/extensions/binary_spec.rb +46 -9
- data/spec/mongoid/extensions/boolean_spec.rb +70 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +58 -140
- data/spec/mongoid/extensions/date_time_spec.rb +32 -69
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +66 -73
- data/spec/mongoid/extensions/hash_spec.rb +135 -0
- data/spec/mongoid/extensions/integer_spec.rb +61 -63
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +257 -54
- data/spec/mongoid/extensions/regexp_spec.rb +70 -20
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +146 -57
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +20 -25
- data/spec/mongoid/extensions/time_spec.rb +668 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +57 -83
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +347 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +86 -41
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +869 -114
- data/spec/mongoid/findable_spec.rb +521 -65
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +87 -32
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +761 -98
- data/spec/mongoid/interceptable_spec_models.rb +307 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +114 -29
- data/spec/mongoid/persistable/deletable_spec.rb +300 -18
- data/spec/mongoid/persistable/destroyable_spec.rb +228 -18
- data/spec/mongoid/persistable/incrementable_spec.rb +66 -13
- data/spec/mongoid/persistable/logical_spec.rb +56 -3
- data/spec/mongoid/persistable/poppable_spec.rb +55 -3
- data/spec/mongoid/persistable/pullable_spec.rb +108 -6
- data/spec/mongoid/persistable/pushable_spec.rb +163 -7
- data/spec/mongoid/persistable/renamable_spec.rb +54 -2
- data/spec/mongoid/persistable/savable_spec.rb +284 -25
- data/spec/mongoid/persistable/settable_spec.rb +91 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +55 -3
- data/spec/mongoid/persistable/updatable_spec.rb +63 -49
- data/spec/mongoid/persistable/upsertable_spec.rb +93 -3
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +60 -59
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
- data/spec/mongoid/query_cache_spec.rb +446 -78
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +381 -26
- data/spec/mongoid/scopable_spec.rb +206 -38
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +148 -38
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +153 -9
- data/spec/mongoid/tasks/database_rake_spec.rb +89 -13
- data/spec/mongoid/tasks/database_spec.rb +130 -1
- data/spec/mongoid/threaded_spec.rb +72 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +400 -10
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +568 -33
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1145 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +159 -103
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +36 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- data/spec/rails/mongoid_spec.rb +8 -18
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +298 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +37 -0
- data/spec/shared/share/Dockerfile.erb +321 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +416 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +74 -88
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +77 -0
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +129 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -1
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +10 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +3 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +4 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/support/models/circus.rb +12 -0
- data/spec/{app → support}/models/code.rb +4 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- data/spec/support/models/cover.rb +10 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +11 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +6 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +3 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +22 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +4 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +3 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +3 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +64 -0
- data.tar.gz.sig +1 -2
- metadata +1158 -615
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/errors/eager_load.rb +0 -22
- data/lib/mongoid/errors/invalid_value.rb +0 -16
- data/lib/mongoid/matchable/all.rb +0 -27
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -72
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -58
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -58
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -130
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
4
|
+
require_relative '../embeds_many_models.rb'
|
|
2
5
|
|
|
3
6
|
describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
4
7
|
|
|
@@ -112,7 +115,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
112
115
|
context "when the parent is not a new record" do
|
|
113
116
|
|
|
114
117
|
let(:person) do
|
|
115
|
-
Person.create
|
|
118
|
+
Person.create!
|
|
116
119
|
end
|
|
117
120
|
|
|
118
121
|
let(:address) do
|
|
@@ -131,7 +134,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
131
134
|
context "when appending more than one document at once" do
|
|
132
135
|
|
|
133
136
|
let(:person) do
|
|
134
|
-
Person.create
|
|
137
|
+
Person.create!
|
|
135
138
|
end
|
|
136
139
|
|
|
137
140
|
let(:address_one) do
|
|
@@ -207,7 +210,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
207
210
|
context "when the parent is not a new record" do
|
|
208
211
|
|
|
209
212
|
let(:parent_role) do
|
|
210
|
-
Role.create(name: "CEO")
|
|
213
|
+
Role.create!(name: "CEO")
|
|
211
214
|
end
|
|
212
215
|
|
|
213
216
|
let(:child_role) do
|
|
@@ -226,7 +229,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
226
229
|
|
|
227
230
|
context "when the child has one sided many to many relation" do
|
|
228
231
|
let(:person) do
|
|
229
|
-
Person.create
|
|
232
|
+
Person.create!
|
|
230
233
|
end
|
|
231
234
|
|
|
232
235
|
let(:message) do
|
|
@@ -309,7 +312,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
309
312
|
context "when the parent is not a new record" do
|
|
310
313
|
|
|
311
314
|
let(:person) do
|
|
312
|
-
Person.create
|
|
315
|
+
Person.create!
|
|
313
316
|
end
|
|
314
317
|
|
|
315
318
|
let(:address) do
|
|
@@ -330,11 +333,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
330
333
|
context "when setting via an overridden method from the parent" do
|
|
331
334
|
|
|
332
335
|
let!(:person) do
|
|
333
|
-
Person.create
|
|
336
|
+
Person.create!
|
|
334
337
|
end
|
|
335
338
|
|
|
336
339
|
let!(:address) do
|
|
337
|
-
person.addresses.create(street: "Alt Treptow")
|
|
340
|
+
person.addresses.create!(street: "Alt Treptow")
|
|
338
341
|
end
|
|
339
342
|
|
|
340
343
|
let!(:new_address) do
|
|
@@ -342,7 +345,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
342
345
|
end
|
|
343
346
|
|
|
344
347
|
before do
|
|
345
|
-
person.update_attributes(set_addresses: [ new_address ])
|
|
348
|
+
person.update_attributes!(set_addresses: [ new_address ])
|
|
346
349
|
end
|
|
347
350
|
|
|
348
351
|
it "overwrites the existing addresses" do
|
|
@@ -372,7 +375,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
372
375
|
|
|
373
376
|
before do
|
|
374
377
|
person.addresses = [ address_two ]
|
|
375
|
-
person.save
|
|
378
|
+
person.save!
|
|
376
379
|
end
|
|
377
380
|
|
|
378
381
|
it "sets the new documents" do
|
|
@@ -406,7 +409,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
406
409
|
|
|
407
410
|
before do
|
|
408
411
|
doctor.addresses = [ address_one ]
|
|
409
|
-
doctor.save
|
|
412
|
+
doctor.save!
|
|
410
413
|
end
|
|
411
414
|
|
|
412
415
|
it "sets the documents" do
|
|
@@ -425,7 +428,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
425
428
|
|
|
426
429
|
before do
|
|
427
430
|
doctor.addresses = [ address_two ]
|
|
428
|
-
doctor.save
|
|
431
|
+
doctor.save!
|
|
429
432
|
end
|
|
430
433
|
|
|
431
434
|
it "sets the new documents" do
|
|
@@ -443,7 +446,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
443
446
|
context "when replacing an existing relation" do
|
|
444
447
|
|
|
445
448
|
let(:person) do
|
|
446
|
-
Person.create(addresses: addresses)
|
|
449
|
+
Person.create!(addresses: addresses)
|
|
447
450
|
end
|
|
448
451
|
|
|
449
452
|
let(:addresses) do
|
|
@@ -504,7 +507,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
504
507
|
end
|
|
505
508
|
|
|
506
509
|
let(:tracking_id) do
|
|
507
|
-
MyCompany::Model::TrackingId.create
|
|
510
|
+
MyCompany::Model::TrackingId.create!
|
|
508
511
|
end
|
|
509
512
|
|
|
510
513
|
let(:history) do
|
|
@@ -539,7 +542,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
539
542
|
inflect.singular("address_numbers", "address_number")
|
|
540
543
|
end
|
|
541
544
|
slave.address_numbers << AddressNumber.new(country_code: 1)
|
|
542
|
-
slave.save
|
|
545
|
+
slave.save!
|
|
543
546
|
end
|
|
544
547
|
|
|
545
548
|
it "requires an inflection to determine the class" do
|
|
@@ -550,15 +553,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
550
553
|
context "when setting the entire tree via a hash" do
|
|
551
554
|
|
|
552
555
|
let(:person) do
|
|
553
|
-
Person.create
|
|
556
|
+
Person.create!
|
|
554
557
|
end
|
|
555
558
|
|
|
556
559
|
let!(:address_one) do
|
|
557
|
-
person.addresses.create(street: "Tauentzienstr")
|
|
560
|
+
person.addresses.create!(street: "Tauentzienstr")
|
|
558
561
|
end
|
|
559
562
|
|
|
560
563
|
let!(:address_two) do
|
|
561
|
-
person.addresses.create(street: "Kudamm")
|
|
564
|
+
person.addresses.create!(street: "Kudamm")
|
|
562
565
|
end
|
|
563
566
|
|
|
564
567
|
let(:attributes) do
|
|
@@ -569,7 +572,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
569
572
|
|
|
570
573
|
before do
|
|
571
574
|
attributes["addresses"][0]["city"] = "Berlin"
|
|
572
|
-
person.update_attributes(attributes)
|
|
575
|
+
person.update_attributes!(attributes)
|
|
573
576
|
end
|
|
574
577
|
|
|
575
578
|
it "sets the new attributes" do
|
|
@@ -585,15 +588,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
585
588
|
context "when setting an embedded sub-document tree via a hash" do
|
|
586
589
|
|
|
587
590
|
let(:person) do
|
|
588
|
-
Person.create
|
|
591
|
+
Person.create!
|
|
589
592
|
end
|
|
590
593
|
|
|
591
594
|
let!(:address_one) do
|
|
592
|
-
person.addresses.create(street: "Tauentzienstr")
|
|
595
|
+
person.addresses.create!(street: "Tauentzienstr")
|
|
593
596
|
end
|
|
594
597
|
|
|
595
598
|
let!(:location_one) do
|
|
596
|
-
person.addresses.first.locations.create(name: "Work")
|
|
599
|
+
person.addresses.first.locations.create!(name: "Work")
|
|
597
600
|
end
|
|
598
601
|
|
|
599
602
|
let(:attributes) do
|
|
@@ -605,7 +608,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
605
608
|
before do
|
|
606
609
|
attributes["city"] = "Berlin"
|
|
607
610
|
attributes["locations"][0]["name"] = "Home"
|
|
608
|
-
person.addresses.first.update_attributes(attributes)
|
|
611
|
+
person.addresses.first.update_attributes!(attributes)
|
|
609
612
|
end
|
|
610
613
|
|
|
611
614
|
it "sets the new attributes on the address" do
|
|
@@ -678,7 +681,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
678
681
|
context "when the parent is not a new record" do
|
|
679
682
|
|
|
680
683
|
let(:parent_role) do
|
|
681
|
-
Role.create(name: "CTO")
|
|
684
|
+
Role.create!(name: "CTO")
|
|
682
685
|
end
|
|
683
686
|
|
|
684
687
|
let(:child_role) do
|
|
@@ -746,7 +749,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
746
749
|
context "when the parent is persisted" do
|
|
747
750
|
|
|
748
751
|
let(:person) do
|
|
749
|
-
Person.create
|
|
752
|
+
Person.create!
|
|
750
753
|
end
|
|
751
754
|
|
|
752
755
|
let(:address) do
|
|
@@ -795,7 +798,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
795
798
|
context "when saving the parent" do
|
|
796
799
|
|
|
797
800
|
before do
|
|
798
|
-
person.save
|
|
801
|
+
person.save!
|
|
799
802
|
person.reload
|
|
800
803
|
end
|
|
801
804
|
|
|
@@ -809,7 +812,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
809
812
|
context "when setting on a reload" do
|
|
810
813
|
|
|
811
814
|
let(:person) do
|
|
812
|
-
Person.create
|
|
815
|
+
Person.create!
|
|
813
816
|
end
|
|
814
817
|
|
|
815
818
|
let(:address) do
|
|
@@ -879,7 +882,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
879
882
|
context "when the documents are not new records" do
|
|
880
883
|
|
|
881
884
|
let(:parent_role) do
|
|
882
|
-
Role.create
|
|
885
|
+
Role.create!
|
|
883
886
|
end
|
|
884
887
|
|
|
885
888
|
let(:child_role) do
|
|
@@ -909,13 +912,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
909
912
|
describe "#as_document" do
|
|
910
913
|
|
|
911
914
|
let!(:person) do
|
|
912
|
-
Person.create
|
|
915
|
+
Person.create!
|
|
913
916
|
end
|
|
914
917
|
|
|
915
918
|
context 'when a string is used to access an attribute' do
|
|
916
919
|
|
|
917
920
|
let!(:address) do
|
|
918
|
-
person.addresses.create(street: "one")
|
|
921
|
+
person.addresses.create!(street: "one")
|
|
919
922
|
end
|
|
920
923
|
|
|
921
924
|
let(:document) do
|
|
@@ -930,7 +933,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
930
933
|
context 'when a symbol is used to access an attribute' do
|
|
931
934
|
|
|
932
935
|
let!(:address) do
|
|
933
|
-
person.addresses.create(street: "one")
|
|
936
|
+
person.addresses.create!(street: "one")
|
|
934
937
|
end
|
|
935
938
|
|
|
936
939
|
let(:document) do
|
|
@@ -945,7 +948,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
945
948
|
context "when the relation has no default scope" do
|
|
946
949
|
|
|
947
950
|
let!(:address) do
|
|
948
|
-
person.addresses.create(street: "one")
|
|
951
|
+
person.addresses.create!(street: "one")
|
|
949
952
|
end
|
|
950
953
|
|
|
951
954
|
let(:document) do
|
|
@@ -1102,7 +1105,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1102
1105
|
context "when providing nested attributes" do
|
|
1103
1106
|
|
|
1104
1107
|
let(:person) do
|
|
1105
|
-
Person.create
|
|
1108
|
+
Person.create!
|
|
1106
1109
|
end
|
|
1107
1110
|
|
|
1108
1111
|
let(:address) do
|
|
@@ -1116,7 +1119,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1116
1119
|
context "when followed by a save" do
|
|
1117
1120
|
|
|
1118
1121
|
before do
|
|
1119
|
-
address.save
|
|
1122
|
+
address.save!
|
|
1120
1123
|
end
|
|
1121
1124
|
|
|
1122
1125
|
let(:location) do
|
|
@@ -1136,13 +1139,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1136
1139
|
context "when the parent has been persisted" do
|
|
1137
1140
|
|
|
1138
1141
|
let(:person) do
|
|
1139
|
-
Person.create
|
|
1142
|
+
Person.create!
|
|
1140
1143
|
end
|
|
1141
1144
|
|
|
1142
1145
|
context "when the children are persisted" do
|
|
1143
1146
|
|
|
1144
1147
|
let!(:address) do
|
|
1145
|
-
person.addresses.create(street: "High St")
|
|
1148
|
+
person.addresses.create!(street: "High St")
|
|
1146
1149
|
end
|
|
1147
1150
|
|
|
1148
1151
|
let!(:relation) do
|
|
@@ -1258,7 +1261,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1258
1261
|
context "when the parent is not a new record" do
|
|
1259
1262
|
|
|
1260
1263
|
let(:person) do
|
|
1261
|
-
Person.create
|
|
1264
|
+
Person.create!
|
|
1262
1265
|
end
|
|
1263
1266
|
|
|
1264
1267
|
let(:address) do
|
|
@@ -1277,7 +1280,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1277
1280
|
context "when concatenating an empty array" do
|
|
1278
1281
|
|
|
1279
1282
|
let(:person) do
|
|
1280
|
-
Person.create
|
|
1283
|
+
Person.create!
|
|
1281
1284
|
end
|
|
1282
1285
|
|
|
1283
1286
|
before do
|
|
@@ -1293,7 +1296,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1293
1296
|
context "when appending more than one document at once" do
|
|
1294
1297
|
|
|
1295
1298
|
let(:person) do
|
|
1296
|
-
Person.create
|
|
1299
|
+
Person.create!
|
|
1297
1300
|
end
|
|
1298
1301
|
|
|
1299
1302
|
let(:address_one) do
|
|
@@ -1365,7 +1368,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1365
1368
|
context "when the parent is not a new record" do
|
|
1366
1369
|
|
|
1367
1370
|
let(:parent_role) do
|
|
1368
|
-
Role.create(name: "CEO")
|
|
1371
|
+
Role.create!(name: "CEO")
|
|
1369
1372
|
end
|
|
1370
1373
|
|
|
1371
1374
|
let(:child_role) do
|
|
@@ -1386,17 +1389,262 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1386
1389
|
describe "#count" do
|
|
1387
1390
|
|
|
1388
1391
|
let(:person) do
|
|
1389
|
-
Person.create
|
|
1392
|
+
Person.create!
|
|
1390
1393
|
end
|
|
1391
1394
|
|
|
1392
1395
|
before do
|
|
1393
|
-
person.addresses.create(street: "Upper")
|
|
1396
|
+
person.addresses.create!(street: "Upper")
|
|
1394
1397
|
person.addresses.build(street: "Bond")
|
|
1398
|
+
person.addresses.build(street: "Lower")
|
|
1395
1399
|
end
|
|
1396
1400
|
|
|
1397
1401
|
it "returns the number of persisted documents" do
|
|
1398
1402
|
expect(person.addresses.count).to eq(1)
|
|
1399
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
|
|
1400
1648
|
end
|
|
1401
1649
|
|
|
1402
1650
|
describe "#create" do
|
|
@@ -1404,11 +1652,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1404
1652
|
context "when providing multiple attributes" do
|
|
1405
1653
|
|
|
1406
1654
|
let(:person) do
|
|
1407
|
-
Person.create
|
|
1655
|
+
Person.create!
|
|
1408
1656
|
end
|
|
1409
1657
|
|
|
1410
1658
|
let!(:addresses) do
|
|
1411
|
-
person.addresses.create([{ street: "Bond" }, { street: "Upper" }])
|
|
1659
|
+
person.addresses.create!([{ street: "Bond" }, { street: "Upper" }])
|
|
1412
1660
|
end
|
|
1413
1661
|
|
|
1414
1662
|
it "creates multiple documents" do
|
|
@@ -1431,11 +1679,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1431
1679
|
context "when the relation is not cyclic" do
|
|
1432
1680
|
|
|
1433
1681
|
let(:person) do
|
|
1434
|
-
Person.create
|
|
1682
|
+
Person.create!
|
|
1435
1683
|
end
|
|
1436
1684
|
|
|
1437
1685
|
let!(:address) do
|
|
1438
|
-
person.addresses.create(street: "Bond") do |address|
|
|
1686
|
+
person.addresses.create!(street: "Bond") do |address|
|
|
1439
1687
|
address.state = "CA"
|
|
1440
1688
|
end
|
|
1441
1689
|
end
|
|
@@ -1479,7 +1727,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1479
1727
|
context "when embedding a multi word named document" do
|
|
1480
1728
|
|
|
1481
1729
|
let!(:component) do
|
|
1482
|
-
person.address_components.create(street: "Test")
|
|
1730
|
+
person.address_components.create!(street: "Test")
|
|
1483
1731
|
end
|
|
1484
1732
|
|
|
1485
1733
|
it "saves the embedded document" do
|
|
@@ -1491,11 +1739,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1491
1739
|
context "when the relation is cyclic" do
|
|
1492
1740
|
|
|
1493
1741
|
let!(:entry) do
|
|
1494
|
-
Entry.create(title: "hi")
|
|
1742
|
+
Entry.create!(title: "hi")
|
|
1495
1743
|
end
|
|
1496
1744
|
|
|
1497
1745
|
let!(:child_entry) do
|
|
1498
|
-
entry.child_entries.create(title: "hello")
|
|
1746
|
+
entry.child_entries.create!(title: "hello")
|
|
1499
1747
|
end
|
|
1500
1748
|
|
|
1501
1749
|
it "creates a new child" do
|
|
@@ -1507,7 +1755,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1507
1755
|
describe "#create!" do
|
|
1508
1756
|
|
|
1509
1757
|
let(:person) do
|
|
1510
|
-
Person.create
|
|
1758
|
+
Person.create!
|
|
1511
1759
|
end
|
|
1512
1760
|
|
|
1513
1761
|
context "when providing multiple attributes" do
|
|
@@ -1614,51 +1862,56 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1614
1862
|
end
|
|
1615
1863
|
end
|
|
1616
1864
|
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
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") }
|
|
1622
1869
|
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1870
|
+
before do
|
|
1871
|
+
person.addresses << [ address_one, address_two ]
|
|
1872
|
+
end
|
|
1626
1873
|
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
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
|
|
1630
1879
|
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
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
|
|
1634
1884
|
|
|
1635
|
-
|
|
1885
|
+
it 'deletes the document from the unscoped' do
|
|
1886
|
+
expect(person.addresses.send(:_unscoped)).to eq([ address_two ])
|
|
1887
|
+
end
|
|
1636
1888
|
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1889
|
+
it 'reindexes the relation' do
|
|
1890
|
+
expect(address_two._index).to eq(0)
|
|
1891
|
+
end
|
|
1640
1892
|
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1893
|
+
it 'returns the document' do
|
|
1894
|
+
expect(deleted).to eq(address_one)
|
|
1895
|
+
end
|
|
1896
|
+
end
|
|
1644
1897
|
|
|
1645
|
-
|
|
1646
|
-
|
|
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
|
|
1647
1903
|
end
|
|
1648
1904
|
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
end
|
|
1905
|
+
context 'when the root document is unpersisted' do
|
|
1906
|
+
let(:person) { Person.new }
|
|
1652
1907
|
|
|
1653
|
-
|
|
1654
|
-
expect(deleted).to eq(address_one)
|
|
1908
|
+
it_behaves_like 'deleting from the collection'
|
|
1655
1909
|
end
|
|
1656
|
-
end
|
|
1657
1910
|
|
|
1658
|
-
|
|
1911
|
+
context 'when the root document is persisted' do
|
|
1912
|
+
let(:person) { Person.create }
|
|
1659
1913
|
|
|
1660
|
-
|
|
1661
|
-
expect(person.addresses.delete(Address.new)).to be_nil
|
|
1914
|
+
it_behaves_like 'deleting from the collection'
|
|
1662
1915
|
end
|
|
1663
1916
|
end
|
|
1664
1917
|
end
|
|
@@ -1666,7 +1919,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1666
1919
|
describe "#delete_if" do
|
|
1667
1920
|
|
|
1668
1921
|
let(:person) do
|
|
1669
|
-
Person.create
|
|
1922
|
+
Person.create!
|
|
1670
1923
|
end
|
|
1671
1924
|
|
|
1672
1925
|
context "when the documents are new" do
|
|
@@ -1715,11 +1968,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1715
1968
|
context "when the documents persisted" do
|
|
1716
1969
|
|
|
1717
1970
|
let!(:address_one) do
|
|
1718
|
-
person.addresses.create(street: "Bond")
|
|
1971
|
+
person.addresses.create!(street: "Bond")
|
|
1719
1972
|
end
|
|
1720
1973
|
|
|
1721
1974
|
let!(:address_two) do
|
|
1722
|
-
person.addresses.create(street: "Upper")
|
|
1975
|
+
person.addresses.create!(street: "Upper")
|
|
1723
1976
|
end
|
|
1724
1977
|
|
|
1725
1978
|
context "when a block is provided" do
|
|
@@ -1774,7 +2027,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1774
2027
|
describe "##{method}" do
|
|
1775
2028
|
|
|
1776
2029
|
let(:person) do
|
|
1777
|
-
Person.create
|
|
2030
|
+
Person.create!
|
|
1778
2031
|
end
|
|
1779
2032
|
|
|
1780
2033
|
context "when the documents are new" do
|
|
@@ -1828,11 +2081,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1828
2081
|
context "when the documents persisted" do
|
|
1829
2082
|
|
|
1830
2083
|
let!(:address_one) do
|
|
1831
|
-
person.addresses.create(street: "Bond")
|
|
2084
|
+
person.addresses.create!(street: "Bond")
|
|
1832
2085
|
end
|
|
1833
2086
|
|
|
1834
2087
|
let!(:address_two) do
|
|
1835
|
-
person.addresses.create(street: "Upper")
|
|
2088
|
+
person.addresses.create!(street: "Upper")
|
|
1836
2089
|
end
|
|
1837
2090
|
|
|
1838
2091
|
context "when conditions are provided" do
|
|
@@ -1879,7 +2132,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1879
2132
|
context "when removing and resaving" do
|
|
1880
2133
|
|
|
1881
2134
|
let(:owner) do
|
|
1882
|
-
PetOwner.create(title: "AKC")
|
|
2135
|
+
PetOwner.create!(title: "AKC")
|
|
1883
2136
|
end
|
|
1884
2137
|
|
|
1885
2138
|
before do
|
|
@@ -1962,6 +2215,79 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1962
2215
|
end
|
|
1963
2216
|
end
|
|
1964
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
|
|
1965
2291
|
end
|
|
1966
2292
|
end
|
|
1967
2293
|
|
|
@@ -1975,13 +2301,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1975
2301
|
describe "#exists?" do
|
|
1976
2302
|
|
|
1977
2303
|
let!(:person) do
|
|
1978
|
-
Person.create
|
|
2304
|
+
Person.create!
|
|
1979
2305
|
end
|
|
1980
2306
|
|
|
1981
2307
|
context "when documents exist in the database" do
|
|
1982
2308
|
|
|
1983
2309
|
before do
|
|
1984
|
-
person.addresses.create(street: "Bond St")
|
|
2310
|
+
person.addresses.create!(street: "Bond St")
|
|
1985
2311
|
end
|
|
1986
2312
|
|
|
1987
2313
|
it "returns true" do
|
|
@@ -2031,32 +2357,22 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2031
2357
|
context "when the id does not match" do
|
|
2032
2358
|
|
|
2033
2359
|
context "when config set to raise error" do
|
|
2034
|
-
|
|
2035
|
-
before do
|
|
2036
|
-
Mongoid.raise_not_found_error = true
|
|
2037
|
-
end
|
|
2360
|
+
config_override :raise_not_found_error, true
|
|
2038
2361
|
|
|
2039
2362
|
it "raises an error" do
|
|
2040
2363
|
expect {
|
|
2041
2364
|
person.addresses.find(BSON::ObjectId.new)
|
|
2042
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2365
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
2043
2366
|
end
|
|
2044
2367
|
end
|
|
2045
2368
|
|
|
2046
2369
|
context "when config set not to raise error" do
|
|
2370
|
+
config_override :raise_not_found_error, false
|
|
2047
2371
|
|
|
2048
2372
|
let(:address) do
|
|
2049
2373
|
person.addresses.find(BSON::ObjectId.new)
|
|
2050
2374
|
end
|
|
2051
2375
|
|
|
2052
|
-
before do
|
|
2053
|
-
Mongoid.raise_not_found_error = false
|
|
2054
|
-
end
|
|
2055
|
-
|
|
2056
|
-
after do
|
|
2057
|
-
Mongoid.raise_not_found_error = true
|
|
2058
|
-
end
|
|
2059
|
-
|
|
2060
2376
|
it "returns nil" do
|
|
2061
2377
|
expect(address).to be_nil
|
|
2062
2378
|
end
|
|
@@ -2080,36 +2396,64 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2080
2396
|
context "when the ids do not match" do
|
|
2081
2397
|
|
|
2082
2398
|
context "when config set to raise error" do
|
|
2083
|
-
|
|
2084
|
-
before do
|
|
2085
|
-
Mongoid.raise_not_found_error = true
|
|
2086
|
-
end
|
|
2399
|
+
config_override :raise_not_found_error, true
|
|
2087
2400
|
|
|
2088
2401
|
it "raises an error" do
|
|
2089
2402
|
expect {
|
|
2090
2403
|
person.addresses.find([ BSON::ObjectId.new ])
|
|
2091
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2404
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
2092
2405
|
end
|
|
2093
2406
|
end
|
|
2094
2407
|
|
|
2095
2408
|
context "when config set not to raise error" do
|
|
2409
|
+
config_override :raise_not_found_error, false
|
|
2096
2410
|
|
|
2097
2411
|
let(:addresses) do
|
|
2098
2412
|
person.addresses.find([ BSON::ObjectId.new ])
|
|
2099
2413
|
end
|
|
2100
2414
|
|
|
2101
|
-
|
|
2102
|
-
|
|
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'
|
|
2103
2439
|
end
|
|
2440
|
+
).to eq(video_one)
|
|
2441
|
+
end
|
|
2104
2442
|
|
|
2105
|
-
|
|
2106
|
-
|
|
2443
|
+
it "returns first match of multiple" do
|
|
2444
|
+
expect(
|
|
2445
|
+
author.videos.find do |video|
|
|
2446
|
+
['video one', 'video two'].include?(video.title)
|
|
2107
2447
|
end
|
|
2448
|
+
).to be_a(Video)
|
|
2449
|
+
end
|
|
2108
2450
|
|
|
2109
|
-
|
|
2110
|
-
|
|
2451
|
+
it "returns nil when not found" do
|
|
2452
|
+
expect(
|
|
2453
|
+
author.videos.find do |video|
|
|
2454
|
+
video.title == 'non exiting one'
|
|
2111
2455
|
end
|
|
2112
|
-
|
|
2456
|
+
).to be_nil
|
|
2113
2457
|
end
|
|
2114
2458
|
end
|
|
2115
2459
|
end
|
|
@@ -2117,7 +2461,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2117
2461
|
describe "#find_or_create_by" do
|
|
2118
2462
|
|
|
2119
2463
|
let(:person) do
|
|
2120
|
-
Person.create
|
|
2464
|
+
Person.create!
|
|
2121
2465
|
end
|
|
2122
2466
|
|
|
2123
2467
|
let!(:address) do
|
|
@@ -2160,11 +2504,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2160
2504
|
# context "when the child belongs to another document" do
|
|
2161
2505
|
#
|
|
2162
2506
|
# let(:product) do
|
|
2163
|
-
# Product.create
|
|
2507
|
+
# Product.create!
|
|
2164
2508
|
# end
|
|
2165
2509
|
#
|
|
2166
2510
|
# let(:purchase) do
|
|
2167
|
-
# Purchase.create
|
|
2511
|
+
# Purchase.create!
|
|
2168
2512
|
# end
|
|
2169
2513
|
#
|
|
2170
2514
|
# let(:line_item) do
|
|
@@ -2183,7 +2527,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2183
2527
|
describe "#find_or_create_by!" do
|
|
2184
2528
|
|
|
2185
2529
|
let(:person) do
|
|
2186
|
-
Person.create
|
|
2530
|
+
Person.create!
|
|
2187
2531
|
end
|
|
2188
2532
|
|
|
2189
2533
|
let!(:address) do
|
|
@@ -2235,11 +2579,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2235
2579
|
# context "when the child belongs to another document" do
|
|
2236
2580
|
#
|
|
2237
2581
|
# let(:product) do
|
|
2238
|
-
# Product.create
|
|
2582
|
+
# Product.create!
|
|
2239
2583
|
# end
|
|
2240
2584
|
#
|
|
2241
2585
|
# let(:purchase) do
|
|
2242
|
-
# Purchase.create
|
|
2586
|
+
# Purchase.create!
|
|
2243
2587
|
# end
|
|
2244
2588
|
#
|
|
2245
2589
|
# let(:line_item) do
|
|
@@ -2357,11 +2701,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2357
2701
|
describe "#method_missing" do
|
|
2358
2702
|
|
|
2359
2703
|
let!(:person) do
|
|
2360
|
-
Person.create
|
|
2704
|
+
Person.create!
|
|
2361
2705
|
end
|
|
2362
2706
|
|
|
2363
2707
|
let!(:address_one) do
|
|
2364
|
-
person.addresses.create(
|
|
2708
|
+
person.addresses.create!(
|
|
2365
2709
|
street: "Market",
|
|
2366
2710
|
state: "CA",
|
|
2367
2711
|
services: [ "1", "2" ]
|
|
@@ -2369,7 +2713,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2369
2713
|
end
|
|
2370
2714
|
|
|
2371
2715
|
let!(:address_two) do
|
|
2372
|
-
person.addresses.create(
|
|
2716
|
+
person.addresses.create!(
|
|
2373
2717
|
street: "Madison",
|
|
2374
2718
|
state: "NY",
|
|
2375
2719
|
services: [ "1", "2" ]
|
|
@@ -2413,13 +2757,26 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2413
2757
|
end
|
|
2414
2758
|
|
|
2415
2759
|
context "when providing a criteria class method" do
|
|
2760
|
+
context "without keyword arguments" do
|
|
2416
2761
|
|
|
2417
|
-
|
|
2418
|
-
|
|
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
|
|
2419
2769
|
end
|
|
2420
2770
|
|
|
2421
|
-
|
|
2422
|
-
|
|
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
|
|
2423
2780
|
end
|
|
2424
2781
|
end
|
|
2425
2782
|
|
|
@@ -2504,17 +2861,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2504
2861
|
describe "#pop" do
|
|
2505
2862
|
|
|
2506
2863
|
let(:person) do
|
|
2507
|
-
Person.create
|
|
2864
|
+
Person.create!
|
|
2508
2865
|
end
|
|
2509
2866
|
|
|
2510
2867
|
context "when no argument is provided" do
|
|
2511
2868
|
|
|
2512
2869
|
let!(:address_one) do
|
|
2513
|
-
person.addresses.create(street: "sonnenallee")
|
|
2870
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2514
2871
|
end
|
|
2515
2872
|
|
|
2516
2873
|
let!(:address_two) do
|
|
2517
|
-
person.addresses.create(street: "hermannstr")
|
|
2874
|
+
person.addresses.create!(street: "hermannstr")
|
|
2518
2875
|
end
|
|
2519
2876
|
|
|
2520
2877
|
let!(:popped) do
|
|
@@ -2537,11 +2894,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2537
2894
|
context "when an integer is provided" do
|
|
2538
2895
|
|
|
2539
2896
|
let!(:address_one) do
|
|
2540
|
-
person.addresses.create(street: "sonnenallee")
|
|
2897
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2541
2898
|
end
|
|
2542
2899
|
|
|
2543
2900
|
let!(:address_two) do
|
|
2544
|
-
person.addresses.create(street: "hermannstr")
|
|
2901
|
+
person.addresses.create!(street: "hermannstr")
|
|
2545
2902
|
end
|
|
2546
2903
|
|
|
2547
2904
|
context "when the number is zero" do
|
|
@@ -2623,17 +2980,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2623
2980
|
describe "#shift" do
|
|
2624
2981
|
|
|
2625
2982
|
let(:person) do
|
|
2626
|
-
Person.create
|
|
2983
|
+
Person.create!
|
|
2627
2984
|
end
|
|
2628
2985
|
|
|
2629
2986
|
context "when no argument is provided" do
|
|
2630
2987
|
|
|
2631
2988
|
let!(:address_one) do
|
|
2632
|
-
person.addresses.create(street: "sonnenallee")
|
|
2989
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2633
2990
|
end
|
|
2634
2991
|
|
|
2635
2992
|
let!(:address_two) do
|
|
2636
|
-
person.addresses.create(street: "hermannstr")
|
|
2993
|
+
person.addresses.create!(street: "hermannstr")
|
|
2637
2994
|
end
|
|
2638
2995
|
|
|
2639
2996
|
let!(:shifted) do
|
|
@@ -2656,11 +3013,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2656
3013
|
context "when an integer is provided" do
|
|
2657
3014
|
|
|
2658
3015
|
let!(:address_one) do
|
|
2659
|
-
person.addresses.create(street: "sonnenallee")
|
|
3016
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2660
3017
|
end
|
|
2661
3018
|
|
|
2662
3019
|
let!(:address_two) do
|
|
2663
|
-
person.addresses.create(street: "hermannstr")
|
|
3020
|
+
person.addresses.create!(street: "hermannstr")
|
|
2664
3021
|
end
|
|
2665
3022
|
|
|
2666
3023
|
context "when the number is zero" do
|
|
@@ -2808,11 +3165,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2808
3165
|
describe "##{method}" do
|
|
2809
3166
|
|
|
2810
3167
|
let(:person) do
|
|
2811
|
-
Person.create
|
|
3168
|
+
Person.create!
|
|
2812
3169
|
end
|
|
2813
3170
|
|
|
2814
3171
|
before do
|
|
2815
|
-
person.addresses.create(street: "Upper")
|
|
3172
|
+
person.addresses.create!(street: "Upper")
|
|
2816
3173
|
person.addresses.build(street: "Bond")
|
|
2817
3174
|
end
|
|
2818
3175
|
|
|
@@ -2850,7 +3207,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2850
3207
|
context "when there are no documents present" do
|
|
2851
3208
|
|
|
2852
3209
|
let(:person) do
|
|
2853
|
-
Person.create
|
|
3210
|
+
Person.create!
|
|
2854
3211
|
end
|
|
2855
3212
|
|
|
2856
3213
|
it "updates nothing" do
|
|
@@ -2861,11 +3218,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2861
3218
|
context "when documents are present" do
|
|
2862
3219
|
|
|
2863
3220
|
let(:person) do
|
|
2864
|
-
Person.create
|
|
3221
|
+
Person.create!
|
|
2865
3222
|
end
|
|
2866
3223
|
|
|
2867
3224
|
let!(:address) do
|
|
2868
|
-
person.addresses.create(street: "Hobrecht", number: 27)
|
|
3225
|
+
person.addresses.create!(street: "Hobrecht", number: 27)
|
|
2869
3226
|
end
|
|
2870
3227
|
|
|
2871
3228
|
context "when updating with a where clause" do
|
|
@@ -2900,16 +3257,16 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2900
3257
|
context "when updating the bottom level" do
|
|
2901
3258
|
|
|
2902
3259
|
let!(:person) do
|
|
2903
|
-
Person.create
|
|
3260
|
+
Person.create!
|
|
2904
3261
|
end
|
|
2905
3262
|
|
|
2906
3263
|
let!(:address) do
|
|
2907
|
-
person.addresses.create(street: "Joachimstr")
|
|
3264
|
+
person.addresses.create!(street: "Joachimstr")
|
|
2908
3265
|
end
|
|
2909
3266
|
|
|
2910
3267
|
let!(:location) do
|
|
2911
|
-
address.locations.create(name: "vacation", number: 0)
|
|
2912
|
-
address.locations.create(name: "work", number: 3)
|
|
3268
|
+
address.locations.create!(name: "vacation", number: 0)
|
|
3269
|
+
address.locations.create!(name: "work", number: 3)
|
|
2913
3270
|
end
|
|
2914
3271
|
|
|
2915
3272
|
context "when updating with replacement of embedded array" do
|
|
@@ -2917,7 +3274,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2917
3274
|
context "when updating with a hash" do
|
|
2918
3275
|
|
|
2919
3276
|
before do
|
|
2920
|
-
address.update_attributes(locations: [{ name: "home" }])
|
|
3277
|
+
address.update_attributes!(locations: [{ name: "home" }])
|
|
2921
3278
|
end
|
|
2922
3279
|
|
|
2923
3280
|
it "updates the attributes" do
|
|
@@ -2938,7 +3295,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2938
3295
|
|
|
2939
3296
|
before do
|
|
2940
3297
|
location.number = 7
|
|
2941
|
-
location.save
|
|
3298
|
+
location.save!
|
|
2942
3299
|
end
|
|
2943
3300
|
|
|
2944
3301
|
let(:updated_location_number) do
|
|
@@ -3071,7 +3428,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3071
3428
|
context "when creating a persisted tree" do
|
|
3072
3429
|
|
|
3073
3430
|
let(:quiz) do
|
|
3074
|
-
Quiz.create
|
|
3431
|
+
Quiz.create!
|
|
3075
3432
|
end
|
|
3076
3433
|
|
|
3077
3434
|
let(:page) do
|
|
@@ -3136,7 +3493,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3136
3493
|
context "when saving the root" do
|
|
3137
3494
|
|
|
3138
3495
|
before do
|
|
3139
|
-
person.save
|
|
3496
|
+
person.save!
|
|
3140
3497
|
end
|
|
3141
3498
|
|
|
3142
3499
|
it "persists the first level document" do
|
|
@@ -3162,7 +3519,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3162
3519
|
|
|
3163
3520
|
describe "replacing the entire embedded list" do
|
|
3164
3521
|
|
|
3165
|
-
context "when an embeds many relationship contains
|
|
3522
|
+
context "when an embeds many relationship contains nil as the first item" do
|
|
3166
3523
|
|
|
3167
3524
|
let(:person) do
|
|
3168
3525
|
Person.create!
|
|
@@ -3183,7 +3540,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3183
3540
|
end
|
|
3184
3541
|
end
|
|
3185
3542
|
|
|
3186
|
-
context "when an embeds many relationship contains
|
|
3543
|
+
context "when an embeds many relationship contains nil in the middle of the list" do
|
|
3187
3544
|
|
|
3188
3545
|
let(:person) do
|
|
3189
3546
|
Person.create!
|
|
@@ -3204,7 +3561,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3204
3561
|
end
|
|
3205
3562
|
end
|
|
3206
3563
|
|
|
3207
|
-
context "when an embeds many relationship contains
|
|
3564
|
+
context "when an embeds many relationship contains nil at the end of the list" do
|
|
3208
3565
|
|
|
3209
3566
|
let(:person) do
|
|
3210
3567
|
Person.create!
|
|
@@ -3228,7 +3585,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3228
3585
|
|
|
3229
3586
|
describe "appending to the embedded list" do
|
|
3230
3587
|
|
|
3231
|
-
context "when appending
|
|
3588
|
+
context "when appending nil to the first position in an embedded list" do
|
|
3232
3589
|
|
|
3233
3590
|
let(:person) do
|
|
3234
3591
|
Person.create! phone_numbers: []
|
|
@@ -3247,7 +3604,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3247
3604
|
end
|
|
3248
3605
|
end
|
|
3249
3606
|
|
|
3250
|
-
context "when appending
|
|
3607
|
+
context "when appending nil into the middle of an embedded list" do
|
|
3251
3608
|
|
|
3252
3609
|
let(:person) do
|
|
3253
3610
|
Person.create! phone_numbers: []
|
|
@@ -3266,7 +3623,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3266
3623
|
end
|
|
3267
3624
|
end
|
|
3268
3625
|
|
|
3269
|
-
context "when appending
|
|
3626
|
+
context "when appending nil to the end of an embedded list" do
|
|
3270
3627
|
|
|
3271
3628
|
let(:person) do
|
|
3272
3629
|
Person.create! phone_numbers: []
|
|
@@ -3290,11 +3647,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3290
3647
|
context "when accessing the parent in a destroy callback" do
|
|
3291
3648
|
|
|
3292
3649
|
let!(:league) do
|
|
3293
|
-
League.create
|
|
3650
|
+
League.create!
|
|
3294
3651
|
end
|
|
3295
3652
|
|
|
3296
3653
|
let!(:division) do
|
|
3297
|
-
league.divisions.create
|
|
3654
|
+
league.divisions.create!
|
|
3298
3655
|
end
|
|
3299
3656
|
|
|
3300
3657
|
before do
|
|
@@ -3309,15 +3666,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3309
3666
|
context "when updating the parent with all attributes" do
|
|
3310
3667
|
|
|
3311
3668
|
let!(:person) do
|
|
3312
|
-
Person.create
|
|
3669
|
+
Person.create!
|
|
3313
3670
|
end
|
|
3314
3671
|
|
|
3315
3672
|
let!(:address) do
|
|
3316
|
-
person.addresses.create
|
|
3673
|
+
person.addresses.create!
|
|
3317
3674
|
end
|
|
3318
3675
|
|
|
3319
3676
|
before do
|
|
3320
|
-
person.update_attributes(person.attributes)
|
|
3677
|
+
person.update_attributes!(person.attributes)
|
|
3321
3678
|
end
|
|
3322
3679
|
|
|
3323
3680
|
it "does not duplicate the embedded documents" do
|
|
@@ -3332,13 +3689,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3332
3689
|
context "when embedding children named versions" do
|
|
3333
3690
|
|
|
3334
3691
|
let(:acolyte) do
|
|
3335
|
-
Acolyte.create(name: "test")
|
|
3692
|
+
Acolyte.create!(name: "test")
|
|
3336
3693
|
end
|
|
3337
3694
|
|
|
3338
3695
|
context "when creating a child" do
|
|
3339
3696
|
|
|
3340
3697
|
let(:version) do
|
|
3341
|
-
acolyte.versions.create(number: 1)
|
|
3698
|
+
acolyte.versions.create!(number: 1)
|
|
3342
3699
|
end
|
|
3343
3700
|
|
|
3344
3701
|
it "allows the operation" do
|
|
@@ -3363,7 +3720,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3363
3720
|
let!(:account) do
|
|
3364
3721
|
Account.new(name: "Testing").tap do |acct|
|
|
3365
3722
|
acct.memberships.build
|
|
3366
|
-
acct.save
|
|
3723
|
+
acct.save!
|
|
3367
3724
|
end
|
|
3368
3725
|
end
|
|
3369
3726
|
|
|
@@ -3375,10 +3732,10 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3375
3732
|
|
|
3376
3733
|
before do
|
|
3377
3734
|
account.name = ""
|
|
3378
|
-
account.save
|
|
3379
3735
|
end
|
|
3380
3736
|
|
|
3381
3737
|
it "does not lose the parent reference" do
|
|
3738
|
+
expect(account.save).to eq false
|
|
3382
3739
|
expect(from_db.memberships.first.account).to eq(account)
|
|
3383
3740
|
end
|
|
3384
3741
|
end
|
|
@@ -3398,15 +3755,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3398
3755
|
context "when moving an embedded document from one parent to another" do
|
|
3399
3756
|
|
|
3400
3757
|
let!(:person_one) do
|
|
3401
|
-
Person.create
|
|
3758
|
+
Person.create!
|
|
3402
3759
|
end
|
|
3403
3760
|
|
|
3404
3761
|
let!(:person_two) do
|
|
3405
|
-
Person.create
|
|
3762
|
+
Person.create!
|
|
3406
3763
|
end
|
|
3407
3764
|
|
|
3408
3765
|
let!(:address) do
|
|
3409
|
-
person_one.addresses.create(street: "Kudamm")
|
|
3766
|
+
person_one.addresses.create!(street: "Kudamm")
|
|
3410
3767
|
end
|
|
3411
3768
|
|
|
3412
3769
|
before do
|
|
@@ -3441,7 +3798,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3441
3798
|
context "when the relation has a default scope" do
|
|
3442
3799
|
|
|
3443
3800
|
let!(:person) do
|
|
3444
|
-
Person.create
|
|
3801
|
+
Person.create!
|
|
3445
3802
|
end
|
|
3446
3803
|
|
|
3447
3804
|
context "when the default scope is a sort" do
|
|
@@ -3511,7 +3868,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3511
3868
|
context "when indexing the documents" do
|
|
3512
3869
|
|
|
3513
3870
|
let!(:person) do
|
|
3514
|
-
Person.create
|
|
3871
|
+
Person.create!
|
|
3515
3872
|
end
|
|
3516
3873
|
|
|
3517
3874
|
context "when the documents have a limiting default scope" do
|
|
@@ -3560,18 +3917,18 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3560
3917
|
context "when the embedded document has an array field" do
|
|
3561
3918
|
|
|
3562
3919
|
let!(:person) do
|
|
3563
|
-
Person.create
|
|
3920
|
+
Person.create!
|
|
3564
3921
|
end
|
|
3565
3922
|
|
|
3566
3923
|
let!(:video) do
|
|
3567
|
-
person.videos.create
|
|
3924
|
+
person.videos.create!
|
|
3568
3925
|
end
|
|
3569
3926
|
|
|
3570
3927
|
context "when saving the array on a persisted document" do
|
|
3571
3928
|
|
|
3572
3929
|
before do
|
|
3573
3930
|
video.genres = [ "horror", "scifi" ]
|
|
3574
|
-
video.save
|
|
3931
|
+
video.save!
|
|
3575
3932
|
end
|
|
3576
3933
|
|
|
3577
3934
|
it "sets the value" do
|
|
@@ -3596,7 +3953,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3596
3953
|
|
|
3597
3954
|
before do
|
|
3598
3955
|
loaded_video.genres = [ "comedy" ]
|
|
3599
|
-
loaded_video.save
|
|
3956
|
+
loaded_video.save!
|
|
3600
3957
|
end
|
|
3601
3958
|
|
|
3602
3959
|
it "sets the new value" do
|
|
@@ -3614,15 +3971,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3614
3971
|
context "when destroying an embedded document" do
|
|
3615
3972
|
|
|
3616
3973
|
let(:person) do
|
|
3617
|
-
Person.create
|
|
3974
|
+
Person.create!
|
|
3618
3975
|
end
|
|
3619
3976
|
|
|
3620
3977
|
let!(:address_one) do
|
|
3621
|
-
person.addresses.create(street: "hobrecht")
|
|
3978
|
+
person.addresses.create!(street: "hobrecht")
|
|
3622
3979
|
end
|
|
3623
3980
|
|
|
3624
3981
|
let!(:address_two) do
|
|
3625
|
-
person.addresses.create(street: "maybachufer")
|
|
3982
|
+
person.addresses.create!(street: "maybachufer")
|
|
3626
3983
|
end
|
|
3627
3984
|
|
|
3628
3985
|
before do
|
|
@@ -3661,6 +4018,28 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3661
4018
|
end
|
|
3662
4019
|
end
|
|
3663
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
|
+
|
|
3664
4043
|
context "when adding a document" do
|
|
3665
4044
|
|
|
3666
4045
|
let(:person) do
|
|
@@ -3694,7 +4073,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3694
4073
|
context "when the association has an order defined" do
|
|
3695
4074
|
|
|
3696
4075
|
let(:person) do
|
|
3697
|
-
Person.create
|
|
4076
|
+
Person.create!
|
|
3698
4077
|
end
|
|
3699
4078
|
|
|
3700
4079
|
let(:message_one) do
|
|
@@ -3725,11 +4104,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3725
4104
|
|
|
3726
4105
|
before do
|
|
3727
4106
|
person.aliases = [ { name: "A", priority: 3 }, { name: "B", priority: 4 }]
|
|
3728
|
-
person.save
|
|
4107
|
+
person.save!
|
|
3729
4108
|
end
|
|
3730
4109
|
|
|
3731
4110
|
let!(:person2) do
|
|
3732
|
-
Person.create( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
|
|
4111
|
+
Person.create!( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
|
|
3733
4112
|
end
|
|
3734
4113
|
|
|
3735
4114
|
it "allows ordering on a key of an embedded document" do
|
|
@@ -3764,7 +4143,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3764
4143
|
context "when updating multiple levels in one update" do
|
|
3765
4144
|
|
|
3766
4145
|
let!(:person) do
|
|
3767
|
-
Person.create(
|
|
4146
|
+
Person.create!(
|
|
3768
4147
|
addresses: [
|
|
3769
4148
|
{ locations: [{ name: "home" }]}
|
|
3770
4149
|
]
|
|
@@ -3778,7 +4157,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3778
4157
|
end
|
|
3779
4158
|
|
|
3780
4159
|
before do
|
|
3781
|
-
from_db.update_attributes(
|
|
4160
|
+
from_db.update_attributes!(
|
|
3782
4161
|
addresses: [
|
|
3783
4162
|
{ locations: [{ name: "work" }]}
|
|
3784
4163
|
]
|
|
@@ -3798,15 +4177,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3798
4177
|
context "when the embedded relation sorts on a boolean" do
|
|
3799
4178
|
|
|
3800
4179
|
let(:circuit) do
|
|
3801
|
-
Circuit.create
|
|
4180
|
+
Circuit.create!
|
|
3802
4181
|
end
|
|
3803
4182
|
|
|
3804
4183
|
let!(:bus_one) do
|
|
3805
|
-
circuit.buses.create(saturday: true)
|
|
4184
|
+
circuit.buses.create!(saturday: true)
|
|
3806
4185
|
end
|
|
3807
4186
|
|
|
3808
4187
|
let!(:bus_two) do
|
|
3809
|
-
circuit.buses.create(saturday: false)
|
|
4188
|
+
circuit.buses.create!(saturday: false)
|
|
3810
4189
|
end
|
|
3811
4190
|
|
|
3812
4191
|
it "orders properly with the boolean" do
|
|
@@ -3817,7 +4196,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3817
4196
|
context "when batch replacing multiple relations in a single update" do
|
|
3818
4197
|
|
|
3819
4198
|
let(:document) do
|
|
3820
|
-
Person.create
|
|
4199
|
+
Person.create!
|
|
3821
4200
|
end
|
|
3822
4201
|
|
|
3823
4202
|
let(:person) do
|
|
@@ -3825,23 +4204,23 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3825
4204
|
end
|
|
3826
4205
|
|
|
3827
4206
|
let!(:symptom_one) do
|
|
3828
|
-
person.symptoms.create
|
|
4207
|
+
person.symptoms.create!
|
|
3829
4208
|
end
|
|
3830
4209
|
|
|
3831
4210
|
let!(:symptom_two) do
|
|
3832
|
-
person.symptoms.create
|
|
4211
|
+
person.symptoms.create!
|
|
3833
4212
|
end
|
|
3834
4213
|
|
|
3835
4214
|
let!(:appointment_one) do
|
|
3836
|
-
person.appointments.create
|
|
4215
|
+
person.appointments.create!
|
|
3837
4216
|
end
|
|
3838
4217
|
|
|
3839
4218
|
let!(:appointment_two) do
|
|
3840
|
-
person.appointments.create
|
|
4219
|
+
person.appointments.create!
|
|
3841
4220
|
end
|
|
3842
4221
|
|
|
3843
4222
|
before do
|
|
3844
|
-
person.update_attributes(
|
|
4223
|
+
person.update_attributes!(
|
|
3845
4224
|
appointments: [ appointment_one.as_document, appointment_two.as_document ],
|
|
3846
4225
|
symptoms: [ symptom_one.as_document, symptom_two.as_document ]
|
|
3847
4226
|
)
|
|
@@ -4174,7 +4553,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4174
4553
|
context "when the parent has an after create callback" do
|
|
4175
4554
|
|
|
4176
4555
|
before do
|
|
4177
|
-
server.save
|
|
4556
|
+
server.save!
|
|
4178
4557
|
end
|
|
4179
4558
|
|
|
4180
4559
|
it "does not push the embedded documents twice" do
|
|
@@ -4186,13 +4565,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4186
4565
|
context "when embedded documents are stored without ids" do
|
|
4187
4566
|
|
|
4188
4567
|
let!(:band) do
|
|
4189
|
-
Band.create(name: "Moderat")
|
|
4568
|
+
Band.create!(name: "Moderat")
|
|
4190
4569
|
end
|
|
4191
4570
|
|
|
4192
4571
|
before do
|
|
4193
4572
|
band.collection.
|
|
4194
4573
|
find(_id: band.id).
|
|
4195
|
-
update_one("$set" => { records: [{ name: "Moderat" }]})
|
|
4574
|
+
update_one("$set" => { records: [{ _id: BSON::ObjectId.new, name: "Moderat" }]})
|
|
4196
4575
|
end
|
|
4197
4576
|
|
|
4198
4577
|
context "when loading the documents" do
|
|
@@ -4236,7 +4615,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4236
4615
|
company = Company.new
|
|
4237
4616
|
4.times { |i| company.staffs << Staff.new(age: 50 + i)}
|
|
4238
4617
|
2.times { |i| company.staffs << Staff.new(age: 40)}
|
|
4239
|
-
company.save
|
|
4618
|
+
company.save!
|
|
4240
4619
|
company.staffs.delete_if {|x| x.age >= 50}
|
|
4241
4620
|
expect(company.staffs.count).to eq(2)
|
|
4242
4621
|
end
|
|
@@ -4313,7 +4692,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4313
4692
|
context "when the parent is persisted" do
|
|
4314
4693
|
|
|
4315
4694
|
let(:zone) do
|
|
4316
|
-
DNS::Zone.create
|
|
4695
|
+
DNS::Zone.create!
|
|
4317
4696
|
end
|
|
4318
4697
|
|
|
4319
4698
|
let(:soa_1) do
|
|
@@ -4351,4 +4730,134 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4351
4730
|
end
|
|
4352
4731
|
end
|
|
4353
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
|
|
4354
4863
|
end
|