mongoid 7.0.5 → 8.1.5
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 +88 -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 +172 -136
- 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 +71 -41
- data/lib/mongoid/association/many.rb +25 -35
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +22 -30
- data/lib/mongoid/association/nested/nested_buildable.rb +9 -15
- data/lib/mongoid/association/nested/one.rb +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 +41 -40
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +105 -68
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +29 -46
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +440 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +113 -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 +62 -84
- data/lib/mongoid/association.rb +13 -27
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +23 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +51 -47
- data/lib/mongoid/attributes/dynamic.rb +22 -36
- data/lib/mongoid/attributes/nested.rb +12 -15
- data/lib/mongoid/attributes/processing.rb +46 -30
- 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 +15 -14
- 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 +23 -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 +265 -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 +664 -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 +42 -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 +4 -20
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +3 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +4 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +28 -8
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +11 -12
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +6 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +49 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +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 +40 -25
- 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 +453 -177
- data/lib/mongoid/criteria/queryable/selector.rb +127 -30
- data/lib/mongoid/criteria/queryable/smash.rb +42 -18
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +18 -15
- data/lib/mongoid/criteria/scopable.rb +29 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +106 -111
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +151 -99
- 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 +91 -47
- 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 -8
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +30 -61
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +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 +360 -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 +195 -42
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +4 -156
- 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 +91 -51
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +18 -238
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +4 -2
- data/lib/mongoid/railties/database.rake +16 -2
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +34 -57
- data/lib/mongoid/selectable.rb +8 -18
- data/lib/mongoid/serializable.rb +33 -34
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +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 +44 -67
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +4 -3
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +5 -6
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +54 -25
- data/lib/mongoid/traversable.rb +185 -61
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +99 -22
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +3 -4
- data/lib/mongoid/validatable/macros.rb +7 -14
- 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 +24 -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 +19 -4
- data/spec/config/mongoid.yml +17 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +20 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +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 +61 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +192 -0
- data/spec/integration/callbacks_spec.rb +605 -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 +35 -8
- 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 +3 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +114 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +741 -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 +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +22 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +31 -3
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +4 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +111 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +114 -58
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +28 -21
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +559 -385
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +68 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +81 -4
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +132 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +415 -129
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +901 -502
- data/spec/mongoid/association/referenced/has_many_models.rb +61 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +48 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +55 -9
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +135 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +65 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +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 +922 -54
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +484 -67
- data/spec/mongoid/clients/factory_spec.rb +128 -28
- data/spec/mongoid/clients/options_spec.rb +49 -30
- data/spec/mongoid/clients/sessions_spec.rb +29 -66
- data/spec/mongoid/clients/transactions_spec.rb +74 -37
- data/spec/mongoid/clients_spec.rb +189 -23
- 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 +513 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +242 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +30 -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 +3514 -1205
- data/spec/mongoid/contextual/none_spec.rb +80 -67
- data/spec/mongoid/copyable_spec.rb +659 -36
- data/spec/mongoid/copyable_spec_models.rb +30 -0
- data/spec/mongoid/criteria/findable_spec.rb +161 -228
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +20 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +43 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +9 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +136 -26
- data/spec/mongoid/criteria/queryable/extensions/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 +73 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +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 +2 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +18 -485
- data/spec/mongoid/criteria/queryable/options_spec.rb +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 +1100 -2880
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +92 -5
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +298 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1320 -1723
- 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 +153 -87
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +78 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +7 -5
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +24 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +5 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +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 +714 -212
- data/spec/mongoid/extensions/binary_spec.rb +46 -9
- data/spec/mongoid/extensions/boolean_spec.rb +70 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +58 -140
- data/spec/mongoid/extensions/date_time_spec.rb +32 -69
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +66 -73
- data/spec/mongoid/extensions/hash_spec.rb +138 -3
- data/spec/mongoid/extensions/integer_spec.rb +61 -63
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +257 -54
- data/spec/mongoid/extensions/regexp_spec.rb +60 -33
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +111 -50
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +20 -25
- data/spec/mongoid/extensions/time_spec.rb +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 +912 -114
- data/spec/mongoid/findable_spec.rb +520 -64
- 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 +972 -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 +60 -7
- 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 +59 -58
- 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 +410 -95
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +381 -26
- data/spec/mongoid/scopable_spec.rb +193 -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 +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +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 +15 -30
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +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 +5 -3
- 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 +44 -66
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +45 -69
- 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 +109 -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/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +12 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +23 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +4 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +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/support/models/purse.rb +9 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +3 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +30 -5
- data.tar.gz.sig +0 -0
- metadata +1249 -749
- 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/eq.rb +0 -22
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/other_owner_object.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/mongoid/criteria/queryable/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/eq_spec.rb +0 -48
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- data/spec/support/cluster_config.rb +0 -158
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
|
@@ -1,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
|
-
|
|
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") }
|
|
1618
1869
|
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
let(:address_one) do
|
|
1624
|
-
Address.new(street: "first")
|
|
1625
|
-
end
|
|
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,18 +2301,46 @@ 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
|
|
|
2313
|
+
let(:address) { person.addresses.first }
|
|
2314
|
+
|
|
1987
2315
|
it "returns true" do
|
|
1988
2316
|
expect(person.addresses.exists?).to be true
|
|
1989
2317
|
end
|
|
2318
|
+
|
|
2319
|
+
context 'when given specifying conditions' do
|
|
2320
|
+
context 'when the record exists in the association' do
|
|
2321
|
+
it 'returns true by condition' do
|
|
2322
|
+
expect(person.addresses.exists?(street: 'Bond St')).to be true
|
|
2323
|
+
end
|
|
2324
|
+
|
|
2325
|
+
it 'returns true by id' do
|
|
2326
|
+
expect(person.addresses.exists?(address._id)).to be true
|
|
2327
|
+
end
|
|
2328
|
+
|
|
2329
|
+
it 'returns false when given false' do
|
|
2330
|
+
expect(person.addresses.exists?(false)).to be false
|
|
2331
|
+
end
|
|
2332
|
+
|
|
2333
|
+
it 'returns false when given nil' do
|
|
2334
|
+
expect(person.addresses.exists?(nil)).to be false
|
|
2335
|
+
end
|
|
2336
|
+
end
|
|
2337
|
+
|
|
2338
|
+
context 'when the record does not exist in the association' do
|
|
2339
|
+
it 'returns false' do
|
|
2340
|
+
expect(person.addresses.exists?(street: 'Garfield Ave')).to be false
|
|
2341
|
+
end
|
|
2342
|
+
end
|
|
2343
|
+
end
|
|
1990
2344
|
end
|
|
1991
2345
|
|
|
1992
2346
|
context "when no documents exist in the database" do
|
|
@@ -1998,6 +2352,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1998
2352
|
it "returns false" do
|
|
1999
2353
|
expect(person.addresses.exists?).to be false
|
|
2000
2354
|
end
|
|
2355
|
+
|
|
2356
|
+
context 'when given specifying conditions' do
|
|
2357
|
+
it 'returns false' do
|
|
2358
|
+
expect(person.addresses.exists?(street: 'Hyde Park Dr')).to be false
|
|
2359
|
+
expect(person.addresses.exists?(street: 'Garfield Ave')).to be false
|
|
2360
|
+
end
|
|
2361
|
+
end
|
|
2001
2362
|
end
|
|
2002
2363
|
end
|
|
2003
2364
|
|
|
@@ -2031,32 +2392,22 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2031
2392
|
context "when the id does not match" do
|
|
2032
2393
|
|
|
2033
2394
|
context "when config set to raise error" do
|
|
2034
|
-
|
|
2035
|
-
before do
|
|
2036
|
-
Mongoid.raise_not_found_error = true
|
|
2037
|
-
end
|
|
2395
|
+
config_override :raise_not_found_error, true
|
|
2038
2396
|
|
|
2039
2397
|
it "raises an error" do
|
|
2040
2398
|
expect {
|
|
2041
2399
|
person.addresses.find(BSON::ObjectId.new)
|
|
2042
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2400
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
2043
2401
|
end
|
|
2044
2402
|
end
|
|
2045
2403
|
|
|
2046
2404
|
context "when config set not to raise error" do
|
|
2405
|
+
config_override :raise_not_found_error, false
|
|
2047
2406
|
|
|
2048
2407
|
let(:address) do
|
|
2049
2408
|
person.addresses.find(BSON::ObjectId.new)
|
|
2050
2409
|
end
|
|
2051
2410
|
|
|
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
2411
|
it "returns nil" do
|
|
2061
2412
|
expect(address).to be_nil
|
|
2062
2413
|
end
|
|
@@ -2080,36 +2431,64 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2080
2431
|
context "when the ids do not match" do
|
|
2081
2432
|
|
|
2082
2433
|
context "when config set to raise error" do
|
|
2083
|
-
|
|
2084
|
-
before do
|
|
2085
|
-
Mongoid.raise_not_found_error = true
|
|
2086
|
-
end
|
|
2434
|
+
config_override :raise_not_found_error, true
|
|
2087
2435
|
|
|
2088
2436
|
it "raises an error" do
|
|
2089
2437
|
expect {
|
|
2090
2438
|
person.addresses.find([ BSON::ObjectId.new ])
|
|
2091
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2439
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
2092
2440
|
end
|
|
2093
2441
|
end
|
|
2094
2442
|
|
|
2095
2443
|
context "when config set not to raise error" do
|
|
2444
|
+
config_override :raise_not_found_error, false
|
|
2096
2445
|
|
|
2097
2446
|
let(:addresses) do
|
|
2098
2447
|
person.addresses.find([ BSON::ObjectId.new ])
|
|
2099
2448
|
end
|
|
2100
2449
|
|
|
2101
|
-
|
|
2102
|
-
|
|
2450
|
+
it "returns an empty array" do
|
|
2451
|
+
expect(addresses).to be_empty
|
|
2452
|
+
end
|
|
2453
|
+
end
|
|
2454
|
+
end
|
|
2455
|
+
end
|
|
2456
|
+
|
|
2457
|
+
context "with block" do
|
|
2458
|
+
let!(:author) do
|
|
2459
|
+
Person.create!(title: 'Person')
|
|
2460
|
+
end
|
|
2461
|
+
|
|
2462
|
+
let!(:video_one) do
|
|
2463
|
+
author.videos.create!(title: 'video one')
|
|
2464
|
+
end
|
|
2465
|
+
|
|
2466
|
+
let!(:video_two) do
|
|
2467
|
+
author.videos.create!(title: 'video two')
|
|
2468
|
+
end
|
|
2469
|
+
|
|
2470
|
+
it "finds one" do
|
|
2471
|
+
expect(
|
|
2472
|
+
author.videos.find do |video|
|
|
2473
|
+
video.title == 'video one'
|
|
2103
2474
|
end
|
|
2475
|
+
).to eq(video_one)
|
|
2476
|
+
end
|
|
2104
2477
|
|
|
2105
|
-
|
|
2106
|
-
|
|
2478
|
+
it "returns first match of multiple" do
|
|
2479
|
+
expect(
|
|
2480
|
+
author.videos.find do |video|
|
|
2481
|
+
['video one', 'video two'].include?(video.title)
|
|
2107
2482
|
end
|
|
2483
|
+
).to be_a(Video)
|
|
2484
|
+
end
|
|
2108
2485
|
|
|
2109
|
-
|
|
2110
|
-
|
|
2486
|
+
it "returns nil when not found" do
|
|
2487
|
+
expect(
|
|
2488
|
+
author.videos.find do |video|
|
|
2489
|
+
video.title == 'non exiting one'
|
|
2111
2490
|
end
|
|
2112
|
-
|
|
2491
|
+
).to be_nil
|
|
2113
2492
|
end
|
|
2114
2493
|
end
|
|
2115
2494
|
end
|
|
@@ -2117,7 +2496,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2117
2496
|
describe "#find_or_create_by" do
|
|
2118
2497
|
|
|
2119
2498
|
let(:person) do
|
|
2120
|
-
Person.create
|
|
2499
|
+
Person.create!
|
|
2121
2500
|
end
|
|
2122
2501
|
|
|
2123
2502
|
let!(:address) do
|
|
@@ -2160,11 +2539,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2160
2539
|
# context "when the child belongs to another document" do
|
|
2161
2540
|
#
|
|
2162
2541
|
# let(:product) do
|
|
2163
|
-
# Product.create
|
|
2542
|
+
# Product.create!
|
|
2164
2543
|
# end
|
|
2165
2544
|
#
|
|
2166
2545
|
# let(:purchase) do
|
|
2167
|
-
# Purchase.create
|
|
2546
|
+
# Purchase.create!
|
|
2168
2547
|
# end
|
|
2169
2548
|
#
|
|
2170
2549
|
# let(:line_item) do
|
|
@@ -2183,7 +2562,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2183
2562
|
describe "#find_or_create_by!" do
|
|
2184
2563
|
|
|
2185
2564
|
let(:person) do
|
|
2186
|
-
Person.create
|
|
2565
|
+
Person.create!
|
|
2187
2566
|
end
|
|
2188
2567
|
|
|
2189
2568
|
let!(:address) do
|
|
@@ -2235,11 +2614,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2235
2614
|
# context "when the child belongs to another document" do
|
|
2236
2615
|
#
|
|
2237
2616
|
# let(:product) do
|
|
2238
|
-
# Product.create
|
|
2617
|
+
# Product.create!
|
|
2239
2618
|
# end
|
|
2240
2619
|
#
|
|
2241
2620
|
# let(:purchase) do
|
|
2242
|
-
# Purchase.create
|
|
2621
|
+
# Purchase.create!
|
|
2243
2622
|
# end
|
|
2244
2623
|
#
|
|
2245
2624
|
# let(:line_item) do
|
|
@@ -2357,11 +2736,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2357
2736
|
describe "#method_missing" do
|
|
2358
2737
|
|
|
2359
2738
|
let!(:person) do
|
|
2360
|
-
Person.create
|
|
2739
|
+
Person.create!
|
|
2361
2740
|
end
|
|
2362
2741
|
|
|
2363
2742
|
let!(:address_one) do
|
|
2364
|
-
person.addresses.create(
|
|
2743
|
+
person.addresses.create!(
|
|
2365
2744
|
street: "Market",
|
|
2366
2745
|
state: "CA",
|
|
2367
2746
|
services: [ "1", "2" ]
|
|
@@ -2369,7 +2748,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2369
2748
|
end
|
|
2370
2749
|
|
|
2371
2750
|
let!(:address_two) do
|
|
2372
|
-
person.addresses.create(
|
|
2751
|
+
person.addresses.create!(
|
|
2373
2752
|
street: "Madison",
|
|
2374
2753
|
state: "NY",
|
|
2375
2754
|
services: [ "1", "2" ]
|
|
@@ -2413,13 +2792,26 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2413
2792
|
end
|
|
2414
2793
|
|
|
2415
2794
|
context "when providing a criteria class method" do
|
|
2795
|
+
context "without keyword arguments" do
|
|
2416
2796
|
|
|
2417
|
-
|
|
2418
|
-
|
|
2797
|
+
let(:addresses) do
|
|
2798
|
+
person.addresses.california
|
|
2799
|
+
end
|
|
2800
|
+
|
|
2801
|
+
it "applies the criteria to the documents" do
|
|
2802
|
+
expect(addresses).to eq([ address_one ])
|
|
2803
|
+
end
|
|
2419
2804
|
end
|
|
2420
2805
|
|
|
2421
|
-
|
|
2422
|
-
|
|
2806
|
+
context "with keyword arguments" do
|
|
2807
|
+
|
|
2808
|
+
let(:addresses) do
|
|
2809
|
+
person.addresses.city_and_state(city: "Sacramento", state: "CA")
|
|
2810
|
+
end
|
|
2811
|
+
|
|
2812
|
+
it "applies the criteria to the documents" do
|
|
2813
|
+
expect(addresses).to eq([])
|
|
2814
|
+
end
|
|
2423
2815
|
end
|
|
2424
2816
|
end
|
|
2425
2817
|
|
|
@@ -2504,17 +2896,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2504
2896
|
describe "#pop" do
|
|
2505
2897
|
|
|
2506
2898
|
let(:person) do
|
|
2507
|
-
Person.create
|
|
2899
|
+
Person.create!
|
|
2508
2900
|
end
|
|
2509
2901
|
|
|
2510
2902
|
context "when no argument is provided" do
|
|
2511
2903
|
|
|
2512
2904
|
let!(:address_one) do
|
|
2513
|
-
person.addresses.create(street: "sonnenallee")
|
|
2905
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2514
2906
|
end
|
|
2515
2907
|
|
|
2516
2908
|
let!(:address_two) do
|
|
2517
|
-
person.addresses.create(street: "hermannstr")
|
|
2909
|
+
person.addresses.create!(street: "hermannstr")
|
|
2518
2910
|
end
|
|
2519
2911
|
|
|
2520
2912
|
let!(:popped) do
|
|
@@ -2537,11 +2929,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2537
2929
|
context "when an integer is provided" do
|
|
2538
2930
|
|
|
2539
2931
|
let!(:address_one) do
|
|
2540
|
-
person.addresses.create(street: "sonnenallee")
|
|
2932
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2541
2933
|
end
|
|
2542
2934
|
|
|
2543
2935
|
let!(:address_two) do
|
|
2544
|
-
person.addresses.create(street: "hermannstr")
|
|
2936
|
+
person.addresses.create!(street: "hermannstr")
|
|
2545
2937
|
end
|
|
2546
2938
|
|
|
2547
2939
|
context "when the number is zero" do
|
|
@@ -2623,17 +3015,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2623
3015
|
describe "#shift" do
|
|
2624
3016
|
|
|
2625
3017
|
let(:person) do
|
|
2626
|
-
Person.create
|
|
3018
|
+
Person.create!
|
|
2627
3019
|
end
|
|
2628
3020
|
|
|
2629
3021
|
context "when no argument is provided" do
|
|
2630
3022
|
|
|
2631
3023
|
let!(:address_one) do
|
|
2632
|
-
person.addresses.create(street: "sonnenallee")
|
|
3024
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2633
3025
|
end
|
|
2634
3026
|
|
|
2635
3027
|
let!(:address_two) do
|
|
2636
|
-
person.addresses.create(street: "hermannstr")
|
|
3028
|
+
person.addresses.create!(street: "hermannstr")
|
|
2637
3029
|
end
|
|
2638
3030
|
|
|
2639
3031
|
let!(:shifted) do
|
|
@@ -2656,11 +3048,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2656
3048
|
context "when an integer is provided" do
|
|
2657
3049
|
|
|
2658
3050
|
let!(:address_one) do
|
|
2659
|
-
person.addresses.create(street: "sonnenallee")
|
|
3051
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2660
3052
|
end
|
|
2661
3053
|
|
|
2662
3054
|
let!(:address_two) do
|
|
2663
|
-
person.addresses.create(street: "hermannstr")
|
|
3055
|
+
person.addresses.create!(street: "hermannstr")
|
|
2664
3056
|
end
|
|
2665
3057
|
|
|
2666
3058
|
context "when the number is zero" do
|
|
@@ -2808,11 +3200,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2808
3200
|
describe "##{method}" do
|
|
2809
3201
|
|
|
2810
3202
|
let(:person) do
|
|
2811
|
-
Person.create
|
|
3203
|
+
Person.create!
|
|
2812
3204
|
end
|
|
2813
3205
|
|
|
2814
3206
|
before do
|
|
2815
|
-
person.addresses.create(street: "Upper")
|
|
3207
|
+
person.addresses.create!(street: "Upper")
|
|
2816
3208
|
person.addresses.build(street: "Bond")
|
|
2817
3209
|
end
|
|
2818
3210
|
|
|
@@ -2850,7 +3242,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2850
3242
|
context "when there are no documents present" do
|
|
2851
3243
|
|
|
2852
3244
|
let(:person) do
|
|
2853
|
-
Person.create
|
|
3245
|
+
Person.create!
|
|
2854
3246
|
end
|
|
2855
3247
|
|
|
2856
3248
|
it "updates nothing" do
|
|
@@ -2861,11 +3253,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2861
3253
|
context "when documents are present" do
|
|
2862
3254
|
|
|
2863
3255
|
let(:person) do
|
|
2864
|
-
Person.create
|
|
3256
|
+
Person.create!
|
|
2865
3257
|
end
|
|
2866
3258
|
|
|
2867
3259
|
let!(:address) do
|
|
2868
|
-
person.addresses.create(street: "Hobrecht", number: 27)
|
|
3260
|
+
person.addresses.create!(street: "Hobrecht", number: 27)
|
|
2869
3261
|
end
|
|
2870
3262
|
|
|
2871
3263
|
context "when updating with a where clause" do
|
|
@@ -2900,16 +3292,16 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2900
3292
|
context "when updating the bottom level" do
|
|
2901
3293
|
|
|
2902
3294
|
let!(:person) do
|
|
2903
|
-
Person.create
|
|
3295
|
+
Person.create!
|
|
2904
3296
|
end
|
|
2905
3297
|
|
|
2906
3298
|
let!(:address) do
|
|
2907
|
-
person.addresses.create(street: "Joachimstr")
|
|
3299
|
+
person.addresses.create!(street: "Joachimstr")
|
|
2908
3300
|
end
|
|
2909
3301
|
|
|
2910
3302
|
let!(:location) do
|
|
2911
|
-
address.locations.create(name: "vacation", number: 0)
|
|
2912
|
-
address.locations.create(name: "work", number: 3)
|
|
3303
|
+
address.locations.create!(name: "vacation", number: 0)
|
|
3304
|
+
address.locations.create!(name: "work", number: 3)
|
|
2913
3305
|
end
|
|
2914
3306
|
|
|
2915
3307
|
context "when updating with replacement of embedded array" do
|
|
@@ -2917,7 +3309,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2917
3309
|
context "when updating with a hash" do
|
|
2918
3310
|
|
|
2919
3311
|
before do
|
|
2920
|
-
address.update_attributes(locations: [{ name: "home" }])
|
|
3312
|
+
address.update_attributes!(locations: [{ name: "home" }])
|
|
2921
3313
|
end
|
|
2922
3314
|
|
|
2923
3315
|
it "updates the attributes" do
|
|
@@ -2938,7 +3330,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2938
3330
|
|
|
2939
3331
|
before do
|
|
2940
3332
|
location.number = 7
|
|
2941
|
-
location.save
|
|
3333
|
+
location.save!
|
|
2942
3334
|
end
|
|
2943
3335
|
|
|
2944
3336
|
let(:updated_location_number) do
|
|
@@ -3071,7 +3463,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3071
3463
|
context "when creating a persisted tree" do
|
|
3072
3464
|
|
|
3073
3465
|
let(:quiz) do
|
|
3074
|
-
Quiz.create
|
|
3466
|
+
Quiz.create!
|
|
3075
3467
|
end
|
|
3076
3468
|
|
|
3077
3469
|
let(:page) do
|
|
@@ -3136,7 +3528,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3136
3528
|
context "when saving the root" do
|
|
3137
3529
|
|
|
3138
3530
|
before do
|
|
3139
|
-
person.save
|
|
3531
|
+
person.save!
|
|
3140
3532
|
end
|
|
3141
3533
|
|
|
3142
3534
|
it "persists the first level document" do
|
|
@@ -3162,7 +3554,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3162
3554
|
|
|
3163
3555
|
describe "replacing the entire embedded list" do
|
|
3164
3556
|
|
|
3165
|
-
context "when an embeds many relationship contains
|
|
3557
|
+
context "when an embeds many relationship contains nil as the first item" do
|
|
3166
3558
|
|
|
3167
3559
|
let(:person) do
|
|
3168
3560
|
Person.create!
|
|
@@ -3183,7 +3575,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3183
3575
|
end
|
|
3184
3576
|
end
|
|
3185
3577
|
|
|
3186
|
-
context "when an embeds many relationship contains
|
|
3578
|
+
context "when an embeds many relationship contains nil in the middle of the list" do
|
|
3187
3579
|
|
|
3188
3580
|
let(:person) do
|
|
3189
3581
|
Person.create!
|
|
@@ -3204,7 +3596,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3204
3596
|
end
|
|
3205
3597
|
end
|
|
3206
3598
|
|
|
3207
|
-
context "when an embeds many relationship contains
|
|
3599
|
+
context "when an embeds many relationship contains nil at the end of the list" do
|
|
3208
3600
|
|
|
3209
3601
|
let(:person) do
|
|
3210
3602
|
Person.create!
|
|
@@ -3228,7 +3620,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3228
3620
|
|
|
3229
3621
|
describe "appending to the embedded list" do
|
|
3230
3622
|
|
|
3231
|
-
context "when appending
|
|
3623
|
+
context "when appending nil to the first position in an embedded list" do
|
|
3232
3624
|
|
|
3233
3625
|
let(:person) do
|
|
3234
3626
|
Person.create! phone_numbers: []
|
|
@@ -3247,7 +3639,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3247
3639
|
end
|
|
3248
3640
|
end
|
|
3249
3641
|
|
|
3250
|
-
context "when appending
|
|
3642
|
+
context "when appending nil into the middle of an embedded list" do
|
|
3251
3643
|
|
|
3252
3644
|
let(:person) do
|
|
3253
3645
|
Person.create! phone_numbers: []
|
|
@@ -3266,7 +3658,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3266
3658
|
end
|
|
3267
3659
|
end
|
|
3268
3660
|
|
|
3269
|
-
context "when appending
|
|
3661
|
+
context "when appending nil to the end of an embedded list" do
|
|
3270
3662
|
|
|
3271
3663
|
let(:person) do
|
|
3272
3664
|
Person.create! phone_numbers: []
|
|
@@ -3290,11 +3682,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3290
3682
|
context "when accessing the parent in a destroy callback" do
|
|
3291
3683
|
|
|
3292
3684
|
let!(:league) do
|
|
3293
|
-
League.create
|
|
3685
|
+
League.create!
|
|
3294
3686
|
end
|
|
3295
3687
|
|
|
3296
3688
|
let!(:division) do
|
|
3297
|
-
league.divisions.create
|
|
3689
|
+
league.divisions.create!
|
|
3298
3690
|
end
|
|
3299
3691
|
|
|
3300
3692
|
before do
|
|
@@ -3309,15 +3701,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3309
3701
|
context "when updating the parent with all attributes" do
|
|
3310
3702
|
|
|
3311
3703
|
let!(:person) do
|
|
3312
|
-
Person.create
|
|
3704
|
+
Person.create!
|
|
3313
3705
|
end
|
|
3314
3706
|
|
|
3315
3707
|
let!(:address) do
|
|
3316
|
-
person.addresses.create
|
|
3708
|
+
person.addresses.create!
|
|
3317
3709
|
end
|
|
3318
3710
|
|
|
3319
3711
|
before do
|
|
3320
|
-
person.update_attributes(person.attributes)
|
|
3712
|
+
person.update_attributes!(person.attributes)
|
|
3321
3713
|
end
|
|
3322
3714
|
|
|
3323
3715
|
it "does not duplicate the embedded documents" do
|
|
@@ -3332,13 +3724,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3332
3724
|
context "when embedding children named versions" do
|
|
3333
3725
|
|
|
3334
3726
|
let(:acolyte) do
|
|
3335
|
-
Acolyte.create(name: "test")
|
|
3727
|
+
Acolyte.create!(name: "test")
|
|
3336
3728
|
end
|
|
3337
3729
|
|
|
3338
3730
|
context "when creating a child" do
|
|
3339
3731
|
|
|
3340
3732
|
let(:version) do
|
|
3341
|
-
acolyte.versions.create(number: 1)
|
|
3733
|
+
acolyte.versions.create!(number: 1)
|
|
3342
3734
|
end
|
|
3343
3735
|
|
|
3344
3736
|
it "allows the operation" do
|
|
@@ -3363,7 +3755,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3363
3755
|
let!(:account) do
|
|
3364
3756
|
Account.new(name: "Testing").tap do |acct|
|
|
3365
3757
|
acct.memberships.build
|
|
3366
|
-
acct.save
|
|
3758
|
+
acct.save!
|
|
3367
3759
|
end
|
|
3368
3760
|
end
|
|
3369
3761
|
|
|
@@ -3375,10 +3767,10 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3375
3767
|
|
|
3376
3768
|
before do
|
|
3377
3769
|
account.name = ""
|
|
3378
|
-
account.save
|
|
3379
3770
|
end
|
|
3380
3771
|
|
|
3381
3772
|
it "does not lose the parent reference" do
|
|
3773
|
+
expect(account.save).to eq false
|
|
3382
3774
|
expect(from_db.memberships.first.account).to eq(account)
|
|
3383
3775
|
end
|
|
3384
3776
|
end
|
|
@@ -3398,15 +3790,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3398
3790
|
context "when moving an embedded document from one parent to another" do
|
|
3399
3791
|
|
|
3400
3792
|
let!(:person_one) do
|
|
3401
|
-
Person.create
|
|
3793
|
+
Person.create!
|
|
3402
3794
|
end
|
|
3403
3795
|
|
|
3404
3796
|
let!(:person_two) do
|
|
3405
|
-
Person.create
|
|
3797
|
+
Person.create!
|
|
3406
3798
|
end
|
|
3407
3799
|
|
|
3408
3800
|
let!(:address) do
|
|
3409
|
-
person_one.addresses.create(street: "Kudamm")
|
|
3801
|
+
person_one.addresses.create!(street: "Kudamm")
|
|
3410
3802
|
end
|
|
3411
3803
|
|
|
3412
3804
|
before do
|
|
@@ -3441,7 +3833,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3441
3833
|
context "when the relation has a default scope" do
|
|
3442
3834
|
|
|
3443
3835
|
let!(:person) do
|
|
3444
|
-
Person.create
|
|
3836
|
+
Person.create!
|
|
3445
3837
|
end
|
|
3446
3838
|
|
|
3447
3839
|
context "when the default scope is a sort" do
|
|
@@ -3511,7 +3903,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3511
3903
|
context "when indexing the documents" do
|
|
3512
3904
|
|
|
3513
3905
|
let!(:person) do
|
|
3514
|
-
Person.create
|
|
3906
|
+
Person.create!
|
|
3515
3907
|
end
|
|
3516
3908
|
|
|
3517
3909
|
context "when the documents have a limiting default scope" do
|
|
@@ -3560,18 +3952,18 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3560
3952
|
context "when the embedded document has an array field" do
|
|
3561
3953
|
|
|
3562
3954
|
let!(:person) do
|
|
3563
|
-
Person.create
|
|
3955
|
+
Person.create!
|
|
3564
3956
|
end
|
|
3565
3957
|
|
|
3566
3958
|
let!(:video) do
|
|
3567
|
-
person.videos.create
|
|
3959
|
+
person.videos.create!
|
|
3568
3960
|
end
|
|
3569
3961
|
|
|
3570
3962
|
context "when saving the array on a persisted document" do
|
|
3571
3963
|
|
|
3572
3964
|
before do
|
|
3573
3965
|
video.genres = [ "horror", "scifi" ]
|
|
3574
|
-
video.save
|
|
3966
|
+
video.save!
|
|
3575
3967
|
end
|
|
3576
3968
|
|
|
3577
3969
|
it "sets the value" do
|
|
@@ -3596,7 +3988,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3596
3988
|
|
|
3597
3989
|
before do
|
|
3598
3990
|
loaded_video.genres = [ "comedy" ]
|
|
3599
|
-
loaded_video.save
|
|
3991
|
+
loaded_video.save!
|
|
3600
3992
|
end
|
|
3601
3993
|
|
|
3602
3994
|
it "sets the new value" do
|
|
@@ -3614,15 +4006,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3614
4006
|
context "when destroying an embedded document" do
|
|
3615
4007
|
|
|
3616
4008
|
let(:person) do
|
|
3617
|
-
Person.create
|
|
4009
|
+
Person.create!
|
|
3618
4010
|
end
|
|
3619
4011
|
|
|
3620
4012
|
let!(:address_one) do
|
|
3621
|
-
person.addresses.create(street: "hobrecht")
|
|
4013
|
+
person.addresses.create!(street: "hobrecht")
|
|
3622
4014
|
end
|
|
3623
4015
|
|
|
3624
4016
|
let!(:address_two) do
|
|
3625
|
-
person.addresses.create(street: "maybachufer")
|
|
4017
|
+
person.addresses.create!(street: "maybachufer")
|
|
3626
4018
|
end
|
|
3627
4019
|
|
|
3628
4020
|
before do
|
|
@@ -3661,6 +4053,28 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3661
4053
|
end
|
|
3662
4054
|
end
|
|
3663
4055
|
|
|
4056
|
+
context "when destroying a document with multiple nil _ids" do
|
|
4057
|
+
let(:congress) { EmmCongress.create! }
|
|
4058
|
+
|
|
4059
|
+
before do
|
|
4060
|
+
congress.legislators << EmmLegislator.new(_id: nil, a: 1)
|
|
4061
|
+
congress.legislators << EmmLegislator.new(_id: nil, a: 2)
|
|
4062
|
+
|
|
4063
|
+
congress.legislators[0].destroy
|
|
4064
|
+
end
|
|
4065
|
+
|
|
4066
|
+
it "deletes the correct document locally" do
|
|
4067
|
+
pending "MONGOID-5394"
|
|
4068
|
+
expect(congress.legislators.length).to eq(1)
|
|
4069
|
+
expect(congress.legislators.first.a).to eq(1)
|
|
4070
|
+
end
|
|
4071
|
+
|
|
4072
|
+
it "only deletes the one document" do
|
|
4073
|
+
pending "MONGOID-5394"
|
|
4074
|
+
expect(congress.reload.legislators.length).to eq(1)
|
|
4075
|
+
end
|
|
4076
|
+
end
|
|
4077
|
+
|
|
3664
4078
|
context "when adding a document" do
|
|
3665
4079
|
|
|
3666
4080
|
let(:person) do
|
|
@@ -3694,7 +4108,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3694
4108
|
context "when the association has an order defined" do
|
|
3695
4109
|
|
|
3696
4110
|
let(:person) do
|
|
3697
|
-
Person.create
|
|
4111
|
+
Person.create!
|
|
3698
4112
|
end
|
|
3699
4113
|
|
|
3700
4114
|
let(:message_one) do
|
|
@@ -3725,11 +4139,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3725
4139
|
|
|
3726
4140
|
before do
|
|
3727
4141
|
person.aliases = [ { name: "A", priority: 3 }, { name: "B", priority: 4 }]
|
|
3728
|
-
person.save
|
|
4142
|
+
person.save!
|
|
3729
4143
|
end
|
|
3730
4144
|
|
|
3731
4145
|
let!(:person2) do
|
|
3732
|
-
Person.create( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
|
|
4146
|
+
Person.create!( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
|
|
3733
4147
|
end
|
|
3734
4148
|
|
|
3735
4149
|
it "allows ordering on a key of an embedded document" do
|
|
@@ -3764,7 +4178,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3764
4178
|
context "when updating multiple levels in one update" do
|
|
3765
4179
|
|
|
3766
4180
|
let!(:person) do
|
|
3767
|
-
Person.create(
|
|
4181
|
+
Person.create!(
|
|
3768
4182
|
addresses: [
|
|
3769
4183
|
{ locations: [{ name: "home" }]}
|
|
3770
4184
|
]
|
|
@@ -3778,7 +4192,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3778
4192
|
end
|
|
3779
4193
|
|
|
3780
4194
|
before do
|
|
3781
|
-
from_db.update_attributes(
|
|
4195
|
+
from_db.update_attributes!(
|
|
3782
4196
|
addresses: [
|
|
3783
4197
|
{ locations: [{ name: "work" }]}
|
|
3784
4198
|
]
|
|
@@ -3798,15 +4212,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3798
4212
|
context "when the embedded relation sorts on a boolean" do
|
|
3799
4213
|
|
|
3800
4214
|
let(:circuit) do
|
|
3801
|
-
Circuit.create
|
|
4215
|
+
Circuit.create!
|
|
3802
4216
|
end
|
|
3803
4217
|
|
|
3804
4218
|
let!(:bus_one) do
|
|
3805
|
-
circuit.buses.create(saturday: true)
|
|
4219
|
+
circuit.buses.create!(saturday: true)
|
|
3806
4220
|
end
|
|
3807
4221
|
|
|
3808
4222
|
let!(:bus_two) do
|
|
3809
|
-
circuit.buses.create(saturday: false)
|
|
4223
|
+
circuit.buses.create!(saturday: false)
|
|
3810
4224
|
end
|
|
3811
4225
|
|
|
3812
4226
|
it "orders properly with the boolean" do
|
|
@@ -3817,7 +4231,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3817
4231
|
context "when batch replacing multiple relations in a single update" do
|
|
3818
4232
|
|
|
3819
4233
|
let(:document) do
|
|
3820
|
-
Person.create
|
|
4234
|
+
Person.create!
|
|
3821
4235
|
end
|
|
3822
4236
|
|
|
3823
4237
|
let(:person) do
|
|
@@ -3825,23 +4239,23 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3825
4239
|
end
|
|
3826
4240
|
|
|
3827
4241
|
let!(:symptom_one) do
|
|
3828
|
-
person.symptoms.create
|
|
4242
|
+
person.symptoms.create!
|
|
3829
4243
|
end
|
|
3830
4244
|
|
|
3831
4245
|
let!(:symptom_two) do
|
|
3832
|
-
person.symptoms.create
|
|
4246
|
+
person.symptoms.create!
|
|
3833
4247
|
end
|
|
3834
4248
|
|
|
3835
4249
|
let!(:appointment_one) do
|
|
3836
|
-
person.appointments.create
|
|
4250
|
+
person.appointments.create!
|
|
3837
4251
|
end
|
|
3838
4252
|
|
|
3839
4253
|
let!(:appointment_two) do
|
|
3840
|
-
person.appointments.create
|
|
4254
|
+
person.appointments.create!
|
|
3841
4255
|
end
|
|
3842
4256
|
|
|
3843
4257
|
before do
|
|
3844
|
-
person.update_attributes(
|
|
4258
|
+
person.update_attributes!(
|
|
3845
4259
|
appointments: [ appointment_one.as_document, appointment_two.as_document ],
|
|
3846
4260
|
symptoms: [ symptom_one.as_document, symptom_two.as_document ]
|
|
3847
4261
|
)
|
|
@@ -4174,7 +4588,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4174
4588
|
context "when the parent has an after create callback" do
|
|
4175
4589
|
|
|
4176
4590
|
before do
|
|
4177
|
-
server.save
|
|
4591
|
+
server.save!
|
|
4178
4592
|
end
|
|
4179
4593
|
|
|
4180
4594
|
it "does not push the embedded documents twice" do
|
|
@@ -4186,13 +4600,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4186
4600
|
context "when embedded documents are stored without ids" do
|
|
4187
4601
|
|
|
4188
4602
|
let!(:band) do
|
|
4189
|
-
Band.create(name: "Moderat")
|
|
4603
|
+
Band.create!(name: "Moderat")
|
|
4190
4604
|
end
|
|
4191
4605
|
|
|
4192
4606
|
before do
|
|
4193
4607
|
band.collection.
|
|
4194
4608
|
find(_id: band.id).
|
|
4195
|
-
update_one("$set" => { records: [{ name: "Moderat" }]})
|
|
4609
|
+
update_one("$set" => { records: [{ _id: BSON::ObjectId.new, name: "Moderat" }]})
|
|
4196
4610
|
end
|
|
4197
4611
|
|
|
4198
4612
|
context "when loading the documents" do
|
|
@@ -4236,7 +4650,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4236
4650
|
company = Company.new
|
|
4237
4651
|
4.times { |i| company.staffs << Staff.new(age: 50 + i)}
|
|
4238
4652
|
2.times { |i| company.staffs << Staff.new(age: 40)}
|
|
4239
|
-
company.save
|
|
4653
|
+
company.save!
|
|
4240
4654
|
company.staffs.delete_if {|x| x.age >= 50}
|
|
4241
4655
|
expect(company.staffs.count).to eq(2)
|
|
4242
4656
|
end
|
|
@@ -4313,7 +4727,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4313
4727
|
context "when the parent is persisted" do
|
|
4314
4728
|
|
|
4315
4729
|
let(:zone) do
|
|
4316
|
-
DNS::Zone.create
|
|
4730
|
+
DNS::Zone.create!
|
|
4317
4731
|
end
|
|
4318
4732
|
|
|
4319
4733
|
let(:soa_1) do
|
|
@@ -4351,4 +4765,134 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4351
4765
|
end
|
|
4352
4766
|
end
|
|
4353
4767
|
end
|
|
4768
|
+
|
|
4769
|
+
context "when trying to persist the empty list" do
|
|
4770
|
+
|
|
4771
|
+
context "in an embeds_many relation" do
|
|
4772
|
+
|
|
4773
|
+
let(:band) { Band.create! }
|
|
4774
|
+
|
|
4775
|
+
before do
|
|
4776
|
+
band.labels = []
|
|
4777
|
+
band.save!
|
|
4778
|
+
end
|
|
4779
|
+
|
|
4780
|
+
let(:reloaded_band) { Band.collection.find(_id: band._id).first }
|
|
4781
|
+
|
|
4782
|
+
it "persists the empty list" do
|
|
4783
|
+
expect(reloaded_band).to have_key(:labels)
|
|
4784
|
+
expect(reloaded_band[:labels]).to eq []
|
|
4785
|
+
end
|
|
4786
|
+
end
|
|
4787
|
+
|
|
4788
|
+
context "in a nested embeds_many relation" do
|
|
4789
|
+
|
|
4790
|
+
let(:survey) { Survey.create!(questions: [Question.new]) }
|
|
4791
|
+
|
|
4792
|
+
before do
|
|
4793
|
+
survey.questions.first.answers = []
|
|
4794
|
+
survey.save!
|
|
4795
|
+
end
|
|
4796
|
+
|
|
4797
|
+
let(:reloaded_survey) { Survey.collection.find(_id: survey._id).first }
|
|
4798
|
+
|
|
4799
|
+
it "persists the empty list" do
|
|
4800
|
+
expect(reloaded_survey).to have_key(:questions)
|
|
4801
|
+
expect(reloaded_survey[:questions][0]).to have_key(:answers)
|
|
4802
|
+
expect(reloaded_survey[:questions][0][:answers]).to eq []
|
|
4803
|
+
end
|
|
4804
|
+
end
|
|
4805
|
+
|
|
4806
|
+
context "when not setting the embeds_many field" do
|
|
4807
|
+
|
|
4808
|
+
let(:band) { Band.create! }
|
|
4809
|
+
|
|
4810
|
+
let(:reloaded_band) { Band.collection.find(_id: band._id).first }
|
|
4811
|
+
|
|
4812
|
+
it "does not persist the empty list" do
|
|
4813
|
+
expect(reloaded_band).to_not have_key(:labels)
|
|
4814
|
+
end
|
|
4815
|
+
end
|
|
4816
|
+
end
|
|
4817
|
+
|
|
4818
|
+
context "when using assign_attributes with an already populated array" do
|
|
4819
|
+
let(:post) { EmmPost.create! }
|
|
4820
|
+
|
|
4821
|
+
before do
|
|
4822
|
+
post.assign_attributes(company_tags: [{id: BSON::ObjectId.new, title: 'a'}],
|
|
4823
|
+
user_tags: [{id: BSON::ObjectId.new, title: 'b'}])
|
|
4824
|
+
post.save!
|
|
4825
|
+
post.reload
|
|
4826
|
+
post.assign_attributes(company_tags: [{id: BSON::ObjectId.new, title: 'c'}],
|
|
4827
|
+
user_tags: [])
|
|
4828
|
+
post.save!
|
|
4829
|
+
post.reload
|
|
4830
|
+
end
|
|
4831
|
+
|
|
4832
|
+
it "has the correct embedded documents" do
|
|
4833
|
+
expect(post.company_tags.length).to eq(1)
|
|
4834
|
+
expect(post.company_tags.first.title).to eq("c")
|
|
4835
|
+
end
|
|
4836
|
+
end
|
|
4837
|
+
|
|
4838
|
+
context "when the parent fails validation" do
|
|
4839
|
+
let(:school) { EmmSchool.new }
|
|
4840
|
+
let(:student) { school.students.new }
|
|
4841
|
+
|
|
4842
|
+
before do
|
|
4843
|
+
student.save
|
|
4844
|
+
end
|
|
4845
|
+
|
|
4846
|
+
it "does not mark the parent as persisted" do
|
|
4847
|
+
expect(school.persisted?).to be false
|
|
4848
|
+
end
|
|
4849
|
+
|
|
4850
|
+
it "does not mark the child as persisted" do
|
|
4851
|
+
expect(student.persisted?).to be false
|
|
4852
|
+
end
|
|
4853
|
+
|
|
4854
|
+
it "does not persist the parent" do
|
|
4855
|
+
expect(School.count).to eq(0)
|
|
4856
|
+
end
|
|
4857
|
+
end
|
|
4858
|
+
|
|
4859
|
+
context "when doing assign_attributes then assignment" do
|
|
4860
|
+
|
|
4861
|
+
let(:post) do
|
|
4862
|
+
EmmPost.create!(
|
|
4863
|
+
company_tags: [ EmmCompanyTag.new(title: "1"), EmmCompanyTag.new(title: "1") ],
|
|
4864
|
+
user_tags: [ EmmUserTag.new(title: "1"), EmmUserTag.new(title: "1") ]
|
|
4865
|
+
)
|
|
4866
|
+
end
|
|
4867
|
+
|
|
4868
|
+
let(:from_db) { EmmPost.find(post.id) }
|
|
4869
|
+
|
|
4870
|
+
before do
|
|
4871
|
+
post.assign_attributes(
|
|
4872
|
+
company_tags: [ EmmCompanyTag.new(title: '3'), EmmCompanyTag.new(title: '4') ]
|
|
4873
|
+
)
|
|
4874
|
+
post.user_tags = [ EmmUserTag.new(title: '3'), EmmUserTag.new(title: '4') ]
|
|
4875
|
+
post.save!
|
|
4876
|
+
end
|
|
4877
|
+
|
|
4878
|
+
it "persists the associations correctly" do
|
|
4879
|
+
expect(from_db.user_tags.size).to eq(2)
|
|
4880
|
+
expect(from_db.company_tags.size).to eq(2)
|
|
4881
|
+
end
|
|
4882
|
+
end
|
|
4883
|
+
|
|
4884
|
+
context "when assigning hashes" do
|
|
4885
|
+
let(:user) { EmmUser.create! }
|
|
4886
|
+
|
|
4887
|
+
before do
|
|
4888
|
+
user.orders = [ { sku: 1 }, { sku: 2 } ]
|
|
4889
|
+
end
|
|
4890
|
+
|
|
4891
|
+
it "creates the objects correctly" do
|
|
4892
|
+
expect(user.orders.first).to be_a(EmmOrder)
|
|
4893
|
+
expect(user.orders.last).to be_a(EmmOrder)
|
|
4894
|
+
|
|
4895
|
+
expect(user.orders.map(&:sku).sort).to eq([ 1, 2 ])
|
|
4896
|
+
end
|
|
4897
|
+
end
|
|
4354
4898
|
end
|