mongoid 7.0.13 → 8.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +30 -30
- data/README.md +32 -19
- data/Rakefile +43 -0
- data/lib/config/locales/en.yml +178 -95
- data/lib/mongoid/association/accessors.rb +175 -83
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +8 -14
- data/lib/mongoid/association/constrainable.rb +5 -7
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +31 -10
- data/lib/mongoid/association/embedded/batchable.rb +67 -53
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +27 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- data/lib/mongoid/association/embedded/embedded_in.rb +9 -28
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +143 -122
- data/lib/mongoid/association/embedded/embeds_many.rb +8 -36
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +26 -9
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +63 -29
- data/lib/mongoid/association/embedded/embeds_one.rb +9 -33
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +71 -41
- data/lib/mongoid/association/many.rb +25 -35
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +22 -30
- data/lib/mongoid/association/nested/nested_buildable.rb +9 -15
- data/lib/mongoid/association/nested/one.rb +19 -30
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +5 -12
- data/lib/mongoid/association/options.rb +16 -46
- data/lib/mongoid/association/proxy.rb +37 -38
- data/lib/mongoid/association/referenced/auto_save.rb +9 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +5 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -31
- data/lib/mongoid/association/referenced/belongs_to.rb +16 -38
- data/lib/mongoid/association/referenced/counter_cache.rb +14 -25
- data/lib/mongoid/association/referenced/eager.rb +41 -40
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +105 -68
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +29 -46
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +440 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +101 -124
- data/lib/mongoid/association/referenced/has_many.rb +21 -45
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +16 -29
- data/lib/mongoid/association/referenced/has_one/proxy.rb +25 -30
- data/lib/mongoid/association/referenced/has_one.rb +16 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -26
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +62 -84
- data/lib/mongoid/association.rb +13 -27
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +23 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +45 -51
- data/lib/mongoid/attributes/dynamic.rb +6 -21
- data/lib/mongoid/attributes/nested.rb +11 -14
- data/lib/mongoid/attributes/processing.rb +46 -30
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +5 -8
- data/lib/mongoid/attributes.rb +80 -98
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +49 -70
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +15 -14
- data/lib/mongoid/clients/sessions.rb +4 -20
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +5 -12
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- data/lib/mongoid/config/environment.rb +30 -5
- data/lib/mongoid/config/options.rb +23 -23
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +164 -48
- data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
- data/lib/mongoid/contextual/aggregable/mongo.rb +32 -33
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +13 -44
- data/lib/mongoid/contextual/map_reduce.rb +7 -35
- data/lib/mongoid/contextual/memory.rb +187 -81
- data/lib/mongoid/contextual/mongo.rb +360 -239
- data/lib/mongoid/contextual/none.rb +109 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +9 -11
- data/lib/mongoid/copyable.rb +42 -17
- data/lib/mongoid/criteria/findable.rb +19 -19
- data/lib/mongoid/criteria/includable.rb +30 -33
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -19
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +3 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +4 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +28 -8
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +11 -12
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +6 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +49 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -16
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +7 -32
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +7 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +39 -24
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +200 -40
- data/lib/mongoid/criteria/queryable/optional.rb +10 -59
- data/lib/mongoid/criteria/queryable/options.rb +4 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +417 -171
- data/lib/mongoid/criteria/queryable/selector.rb +127 -30
- data/lib/mongoid/criteria/queryable/smash.rb +42 -18
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +18 -15
- data/lib/mongoid/criteria/scopable.rb +29 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +95 -107
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +148 -97
- data/lib/mongoid/equality.rb +35 -18
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +35 -21
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +3 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +3 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +8 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +5 -10
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +3 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +6 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +3 -4
- data/lib/mongoid/errors/no_client_hosts.rb +3 -4
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +3 -4
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -1
- data/lib/mongoid/errors/unknown_attribute.rb +3 -4
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +14 -3
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +37 -44
- data/lib/mongoid/extensions/big_decimal.rb +35 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +10 -6
- data/lib/mongoid/extensions/date.rb +32 -25
- data/lib/mongoid/extensions/date_time.rb +5 -13
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +5 -8
- data/lib/mongoid/extensions/float.rb +12 -14
- data/lib/mongoid/extensions/hash.rb +87 -45
- data/lib/mongoid/extensions/integer.rb +12 -16
- data/lib/mongoid/extensions/module.rb +3 -4
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +25 -50
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +13 -7
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +30 -61
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +37 -23
- data/lib/mongoid/extensions/time_with_zone.rb +26 -9
- data/lib/mongoid/extensions/true_class.rb +5 -8
- data/lib/mongoid/extensions.rb +19 -3
- data/lib/mongoid/factory.rb +104 -17
- data/lib/mongoid/fields/foreign_key.rb +14 -26
- data/lib/mongoid/fields/localized.rb +11 -15
- data/lib/mongoid/fields/standard.rb +13 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +328 -85
- data/lib/mongoid/findable.rb +90 -33
- data/lib/mongoid/indexable/specification.rb +5 -18
- data/lib/mongoid/indexable/validators/options.rb +8 -9
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +191 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +3 -154
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +130 -0
- data/lib/mongoid/persistable/creatable.rb +22 -30
- data/lib/mongoid/persistable/deletable.rb +6 -22
- data/lib/mongoid/persistable/destroyable.rb +12 -11
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +3 -8
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +5 -10
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +9 -9
- data/lib/mongoid/persistable/updatable.rb +50 -31
- data/lib/mongoid/persistable/upsertable.rb +5 -10
- data/lib/mongoid/persistable.rb +135 -40
- data/lib/mongoid/persistence_context.rb +85 -45
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +13 -280
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +4 -2
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +19 -22
- data/lib/mongoid/scopable.rb +34 -57
- data/lib/mongoid/selectable.rb +8 -18
- data/lib/mongoid/serializable.rb +33 -34
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +38 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +44 -67
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +4 -3
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +5 -6
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +54 -25
- data/lib/mongoid/traversable.rb +185 -61
- data/lib/mongoid/validatable/associated.rb +99 -22
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +3 -4
- data/lib/mongoid/validatable/macros.rb +2 -9
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +29 -41
- data/lib/mongoid/validatable.rb +22 -33
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +34 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -32
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +17 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +31 -27
- data/spec/integration/associations/belongs_to_spec.rb +20 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +162 -55
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +107 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +107 -1
- data/spec/integration/callbacks_spec.rb +262 -8
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +392 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +73 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +18 -6
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +35 -33
- data/spec/mongoid/association/depending_spec.rb +431 -338
- data/spec/mongoid/association/eager_spec.rb +8 -5
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +4 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +84 -22
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +114 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +687 -173
- data/spec/mongoid/association/embedded/embeds_many_models.rb +174 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +71 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +27 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +22 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +31 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +4 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +111 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +114 -58
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +26 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +418 -361
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +68 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +81 -4
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +132 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +314 -133
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +848 -451
- data/spec/mongoid/association/referenced/has_many_models.rb +61 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +48 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +55 -9
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +135 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +65 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +47 -31
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +66 -26
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +149 -78
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +24 -22
- data/spec/mongoid/attributes_spec.rb +683 -65
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +185 -43
- data/spec/mongoid/clients/factory_spec.rb +128 -28
- data/spec/mongoid/clients/options_spec.rb +45 -26
- data/spec/mongoid/clients/sessions_spec.rb +25 -66
- data/spec/mongoid/clients/transactions_spec.rb +54 -29
- data/spec/mongoid/clients_spec.rb +65 -8
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/environment_spec.rb +126 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +377 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +205 -67
- data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +6 -18
- data/spec/mongoid/contextual/memory_spec.rb +1360 -91
- data/spec/mongoid/contextual/mongo_spec.rb +1871 -544
- data/spec/mongoid/contextual/none_spec.rb +39 -73
- data/spec/mongoid/copyable_spec.rb +657 -26
- data/spec/mongoid/copyable_spec_models.rb +30 -0
- data/spec/mongoid/criteria/findable_spec.rb +161 -228
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +20 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +43 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +9 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +136 -26
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +46 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -15
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +34 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +18 -485
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1643 -286
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1191 -2752
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +91 -4
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +298 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +409 -0
- data/spec/mongoid/criteria_spec.rb +1322 -1723
- data/spec/mongoid/document_fields_spec.rb +179 -5
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +153 -87
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +78 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +7 -5
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +24 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +5 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -1
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +41 -45
- data/spec/mongoid/extensions/big_decimal_spec.rb +714 -212
- data/spec/mongoid/extensions/binary_spec.rb +46 -9
- data/spec/mongoid/extensions/boolean_spec.rb +70 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +58 -140
- data/spec/mongoid/extensions/date_time_spec.rb +32 -69
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +66 -73
- data/spec/mongoid/extensions/hash_spec.rb +138 -3
- data/spec/mongoid/extensions/integer_spec.rb +61 -63
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +257 -54
- data/spec/mongoid/extensions/regexp_spec.rb +60 -33
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +111 -50
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +20 -25
- data/spec/mongoid/extensions/time_spec.rb +663 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +50 -31
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +347 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +43 -16
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +776 -80
- data/spec/mongoid/findable_spec.rb +133 -34
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +65 -18
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +955 -103
- data/spec/mongoid/interceptable_spec_models.rb +307 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +114 -29
- data/spec/mongoid/persistable/deletable_spec.rb +274 -12
- data/spec/mongoid/persistable/destroyable_spec.rb +202 -12
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +36 -6
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +24 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +18 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +52 -1
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
- data/spec/mongoid/query_cache_spec.rb +339 -87
- data/spec/mongoid/relations/proxy_spec.rb +8 -6
- data/spec/mongoid/reloadable_spec.rb +357 -22
- data/spec/mongoid/scopable_spec.rb +121 -37
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +31 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +2 -0
- data/spec/mongoid/tasks/database_spec.rb +2 -0
- data/spec/mongoid/threaded_spec.rb +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +398 -6
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +296 -33
- data/spec/mongoid/touchable_spec_models.rb +57 -0
- data/spec/mongoid/traversable_spec.rb +1160 -1
- data/spec/mongoid/validatable/associated_spec.rb +15 -30
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +128 -98
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +3 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +5 -3
- data/spec/rails/mongoid_spec.rb +8 -18
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/cluster_config.rb +14 -4
- data/spec/shared/lib/mrss/constraints.rb +51 -27
- data/spec/shared/lib/mrss/docker_runner.rb +37 -4
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +48 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -18
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +18 -1
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +156 -66
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +171 -45
- data/spec/shared/shlib/set_env.sh +47 -6
- data/spec/spec_helper.rb +38 -36
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +39 -8
- data/spec/support/expectations.rb +5 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +77 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -0
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +9 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +2 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +2 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/support/models/circus.rb +12 -0
- data/spec/{app → support}/models/code.rb +4 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/{app → support}/models/customer.rb +0 -1
- data/spec/{app → support}/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +11 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +6 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +3 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +12 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +23 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +4 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +2 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +3 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +12 -3
- data.tar.gz.sig +0 -0
- metadata +1162 -764
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/errors/eager_load.rb +0 -22
- data/lib/mongoid/errors/invalid_value.rb +0 -16
- data/lib/mongoid/matchable/all.rb +0 -28
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -119
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/eq.rb +0 -22
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/other_owner_object.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -137
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/eq_spec.rb +0 -48
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
4
|
+
require_relative '../embeds_many_models.rb'
|
|
2
5
|
|
|
3
6
|
describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
4
7
|
|
|
@@ -112,7 +115,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
112
115
|
context "when the parent is not a new record" do
|
|
113
116
|
|
|
114
117
|
let(:person) do
|
|
115
|
-
Person.create
|
|
118
|
+
Person.create!
|
|
116
119
|
end
|
|
117
120
|
|
|
118
121
|
let(:address) do
|
|
@@ -131,7 +134,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
131
134
|
context "when appending more than one document at once" do
|
|
132
135
|
|
|
133
136
|
let(:person) do
|
|
134
|
-
Person.create
|
|
137
|
+
Person.create!
|
|
135
138
|
end
|
|
136
139
|
|
|
137
140
|
let(:address_one) do
|
|
@@ -207,7 +210,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
207
210
|
context "when the parent is not a new record" do
|
|
208
211
|
|
|
209
212
|
let(:parent_role) do
|
|
210
|
-
Role.create(name: "CEO")
|
|
213
|
+
Role.create!(name: "CEO")
|
|
211
214
|
end
|
|
212
215
|
|
|
213
216
|
let(:child_role) do
|
|
@@ -226,7 +229,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
226
229
|
|
|
227
230
|
context "when the child has one sided many to many relation" do
|
|
228
231
|
let(:person) do
|
|
229
|
-
Person.create
|
|
232
|
+
Person.create!
|
|
230
233
|
end
|
|
231
234
|
|
|
232
235
|
let(:message) do
|
|
@@ -309,7 +312,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
309
312
|
context "when the parent is not a new record" do
|
|
310
313
|
|
|
311
314
|
let(:person) do
|
|
312
|
-
Person.create
|
|
315
|
+
Person.create!
|
|
313
316
|
end
|
|
314
317
|
|
|
315
318
|
let(:address) do
|
|
@@ -330,11 +333,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
330
333
|
context "when setting via an overridden method from the parent" do
|
|
331
334
|
|
|
332
335
|
let!(:person) do
|
|
333
|
-
Person.create
|
|
336
|
+
Person.create!
|
|
334
337
|
end
|
|
335
338
|
|
|
336
339
|
let!(:address) do
|
|
337
|
-
person.addresses.create(street: "Alt Treptow")
|
|
340
|
+
person.addresses.create!(street: "Alt Treptow")
|
|
338
341
|
end
|
|
339
342
|
|
|
340
343
|
let!(:new_address) do
|
|
@@ -342,7 +345,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
342
345
|
end
|
|
343
346
|
|
|
344
347
|
before do
|
|
345
|
-
person.update_attributes(set_addresses: [ new_address ])
|
|
348
|
+
person.update_attributes!(set_addresses: [ new_address ])
|
|
346
349
|
end
|
|
347
350
|
|
|
348
351
|
it "overwrites the existing addresses" do
|
|
@@ -372,7 +375,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
372
375
|
|
|
373
376
|
before do
|
|
374
377
|
person.addresses = [ address_two ]
|
|
375
|
-
person.save
|
|
378
|
+
person.save!
|
|
376
379
|
end
|
|
377
380
|
|
|
378
381
|
it "sets the new documents" do
|
|
@@ -406,7 +409,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
406
409
|
|
|
407
410
|
before do
|
|
408
411
|
doctor.addresses = [ address_one ]
|
|
409
|
-
doctor.save
|
|
412
|
+
doctor.save!
|
|
410
413
|
end
|
|
411
414
|
|
|
412
415
|
it "sets the documents" do
|
|
@@ -425,7 +428,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
425
428
|
|
|
426
429
|
before do
|
|
427
430
|
doctor.addresses = [ address_two ]
|
|
428
|
-
doctor.save
|
|
431
|
+
doctor.save!
|
|
429
432
|
end
|
|
430
433
|
|
|
431
434
|
it "sets the new documents" do
|
|
@@ -443,7 +446,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
443
446
|
context "when replacing an existing relation" do
|
|
444
447
|
|
|
445
448
|
let(:person) do
|
|
446
|
-
Person.create(addresses: addresses)
|
|
449
|
+
Person.create!(addresses: addresses)
|
|
447
450
|
end
|
|
448
451
|
|
|
449
452
|
let(:addresses) do
|
|
@@ -504,7 +507,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
504
507
|
end
|
|
505
508
|
|
|
506
509
|
let(:tracking_id) do
|
|
507
|
-
MyCompany::Model::TrackingId.create
|
|
510
|
+
MyCompany::Model::TrackingId.create!
|
|
508
511
|
end
|
|
509
512
|
|
|
510
513
|
let(:history) do
|
|
@@ -539,7 +542,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
539
542
|
inflect.singular("address_numbers", "address_number")
|
|
540
543
|
end
|
|
541
544
|
slave.address_numbers << AddressNumber.new(country_code: 1)
|
|
542
|
-
slave.save
|
|
545
|
+
slave.save!
|
|
543
546
|
end
|
|
544
547
|
|
|
545
548
|
it "requires an inflection to determine the class" do
|
|
@@ -550,15 +553,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
550
553
|
context "when setting the entire tree via a hash" do
|
|
551
554
|
|
|
552
555
|
let(:person) do
|
|
553
|
-
Person.create
|
|
556
|
+
Person.create!
|
|
554
557
|
end
|
|
555
558
|
|
|
556
559
|
let!(:address_one) do
|
|
557
|
-
person.addresses.create(street: "Tauentzienstr")
|
|
560
|
+
person.addresses.create!(street: "Tauentzienstr")
|
|
558
561
|
end
|
|
559
562
|
|
|
560
563
|
let!(:address_two) do
|
|
561
|
-
person.addresses.create(street: "Kudamm")
|
|
564
|
+
person.addresses.create!(street: "Kudamm")
|
|
562
565
|
end
|
|
563
566
|
|
|
564
567
|
let(:attributes) do
|
|
@@ -569,7 +572,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
569
572
|
|
|
570
573
|
before do
|
|
571
574
|
attributes["addresses"][0]["city"] = "Berlin"
|
|
572
|
-
person.update_attributes(attributes)
|
|
575
|
+
person.update_attributes!(attributes)
|
|
573
576
|
end
|
|
574
577
|
|
|
575
578
|
it "sets the new attributes" do
|
|
@@ -585,15 +588,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
585
588
|
context "when setting an embedded sub-document tree via a hash" do
|
|
586
589
|
|
|
587
590
|
let(:person) do
|
|
588
|
-
Person.create
|
|
591
|
+
Person.create!
|
|
589
592
|
end
|
|
590
593
|
|
|
591
594
|
let!(:address_one) do
|
|
592
|
-
person.addresses.create(street: "Tauentzienstr")
|
|
595
|
+
person.addresses.create!(street: "Tauentzienstr")
|
|
593
596
|
end
|
|
594
597
|
|
|
595
598
|
let!(:location_one) do
|
|
596
|
-
person.addresses.first.locations.create(name: "Work")
|
|
599
|
+
person.addresses.first.locations.create!(name: "Work")
|
|
597
600
|
end
|
|
598
601
|
|
|
599
602
|
let(:attributes) do
|
|
@@ -605,7 +608,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
605
608
|
before do
|
|
606
609
|
attributes["city"] = "Berlin"
|
|
607
610
|
attributes["locations"][0]["name"] = "Home"
|
|
608
|
-
person.addresses.first.update_attributes(attributes)
|
|
611
|
+
person.addresses.first.update_attributes!(attributes)
|
|
609
612
|
end
|
|
610
613
|
|
|
611
614
|
it "sets the new attributes on the address" do
|
|
@@ -678,7 +681,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
678
681
|
context "when the parent is not a new record" do
|
|
679
682
|
|
|
680
683
|
let(:parent_role) do
|
|
681
|
-
Role.create(name: "CTO")
|
|
684
|
+
Role.create!(name: "CTO")
|
|
682
685
|
end
|
|
683
686
|
|
|
684
687
|
let(:child_role) do
|
|
@@ -746,7 +749,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
746
749
|
context "when the parent is persisted" do
|
|
747
750
|
|
|
748
751
|
let(:person) do
|
|
749
|
-
Person.create
|
|
752
|
+
Person.create!
|
|
750
753
|
end
|
|
751
754
|
|
|
752
755
|
let(:address) do
|
|
@@ -795,7 +798,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
795
798
|
context "when saving the parent" do
|
|
796
799
|
|
|
797
800
|
before do
|
|
798
|
-
person.save
|
|
801
|
+
person.save!
|
|
799
802
|
person.reload
|
|
800
803
|
end
|
|
801
804
|
|
|
@@ -809,7 +812,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
809
812
|
context "when setting on a reload" do
|
|
810
813
|
|
|
811
814
|
let(:person) do
|
|
812
|
-
Person.create
|
|
815
|
+
Person.create!
|
|
813
816
|
end
|
|
814
817
|
|
|
815
818
|
let(:address) do
|
|
@@ -879,7 +882,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
879
882
|
context "when the documents are not new records" do
|
|
880
883
|
|
|
881
884
|
let(:parent_role) do
|
|
882
|
-
Role.create
|
|
885
|
+
Role.create!
|
|
883
886
|
end
|
|
884
887
|
|
|
885
888
|
let(:child_role) do
|
|
@@ -909,13 +912,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
909
912
|
describe "#as_document" do
|
|
910
913
|
|
|
911
914
|
let!(:person) do
|
|
912
|
-
Person.create
|
|
915
|
+
Person.create!
|
|
913
916
|
end
|
|
914
917
|
|
|
915
918
|
context 'when a string is used to access an attribute' do
|
|
916
919
|
|
|
917
920
|
let!(:address) do
|
|
918
|
-
person.addresses.create(street: "one")
|
|
921
|
+
person.addresses.create!(street: "one")
|
|
919
922
|
end
|
|
920
923
|
|
|
921
924
|
let(:document) do
|
|
@@ -930,7 +933,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
930
933
|
context 'when a symbol is used to access an attribute' do
|
|
931
934
|
|
|
932
935
|
let!(:address) do
|
|
933
|
-
person.addresses.create(street: "one")
|
|
936
|
+
person.addresses.create!(street: "one")
|
|
934
937
|
end
|
|
935
938
|
|
|
936
939
|
let(:document) do
|
|
@@ -945,7 +948,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
945
948
|
context "when the relation has no default scope" do
|
|
946
949
|
|
|
947
950
|
let!(:address) do
|
|
948
|
-
person.addresses.create(street: "one")
|
|
951
|
+
person.addresses.create!(street: "one")
|
|
949
952
|
end
|
|
950
953
|
|
|
951
954
|
let(:document) do
|
|
@@ -1102,7 +1105,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1102
1105
|
context "when providing nested attributes" do
|
|
1103
1106
|
|
|
1104
1107
|
let(:person) do
|
|
1105
|
-
Person.create
|
|
1108
|
+
Person.create!
|
|
1106
1109
|
end
|
|
1107
1110
|
|
|
1108
1111
|
let(:address) do
|
|
@@ -1116,7 +1119,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1116
1119
|
context "when followed by a save" do
|
|
1117
1120
|
|
|
1118
1121
|
before do
|
|
1119
|
-
address.save
|
|
1122
|
+
address.save!
|
|
1120
1123
|
end
|
|
1121
1124
|
|
|
1122
1125
|
let(:location) do
|
|
@@ -1136,13 +1139,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1136
1139
|
context "when the parent has been persisted" do
|
|
1137
1140
|
|
|
1138
1141
|
let(:person) do
|
|
1139
|
-
Person.create
|
|
1142
|
+
Person.create!
|
|
1140
1143
|
end
|
|
1141
1144
|
|
|
1142
1145
|
context "when the children are persisted" do
|
|
1143
1146
|
|
|
1144
1147
|
let!(:address) do
|
|
1145
|
-
person.addresses.create(street: "High St")
|
|
1148
|
+
person.addresses.create!(street: "High St")
|
|
1146
1149
|
end
|
|
1147
1150
|
|
|
1148
1151
|
let!(:relation) do
|
|
@@ -1258,7 +1261,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1258
1261
|
context "when the parent is not a new record" do
|
|
1259
1262
|
|
|
1260
1263
|
let(:person) do
|
|
1261
|
-
Person.create
|
|
1264
|
+
Person.create!
|
|
1262
1265
|
end
|
|
1263
1266
|
|
|
1264
1267
|
let(:address) do
|
|
@@ -1277,7 +1280,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1277
1280
|
context "when concatenating an empty array" do
|
|
1278
1281
|
|
|
1279
1282
|
let(:person) do
|
|
1280
|
-
Person.create
|
|
1283
|
+
Person.create!
|
|
1281
1284
|
end
|
|
1282
1285
|
|
|
1283
1286
|
before do
|
|
@@ -1293,7 +1296,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1293
1296
|
context "when appending more than one document at once" do
|
|
1294
1297
|
|
|
1295
1298
|
let(:person) do
|
|
1296
|
-
Person.create
|
|
1299
|
+
Person.create!
|
|
1297
1300
|
end
|
|
1298
1301
|
|
|
1299
1302
|
let(:address_one) do
|
|
@@ -1365,7 +1368,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1365
1368
|
context "when the parent is not a new record" do
|
|
1366
1369
|
|
|
1367
1370
|
let(:parent_role) do
|
|
1368
|
-
Role.create(name: "CEO")
|
|
1371
|
+
Role.create!(name: "CEO")
|
|
1369
1372
|
end
|
|
1370
1373
|
|
|
1371
1374
|
let(:child_role) do
|
|
@@ -1386,17 +1389,262 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1386
1389
|
describe "#count" do
|
|
1387
1390
|
|
|
1388
1391
|
let(:person) do
|
|
1389
|
-
Person.create
|
|
1392
|
+
Person.create!
|
|
1390
1393
|
end
|
|
1391
1394
|
|
|
1392
1395
|
before do
|
|
1393
|
-
person.addresses.create(street: "Upper")
|
|
1396
|
+
person.addresses.create!(street: "Upper")
|
|
1394
1397
|
person.addresses.build(street: "Bond")
|
|
1398
|
+
person.addresses.build(street: "Lower")
|
|
1395
1399
|
end
|
|
1396
1400
|
|
|
1397
1401
|
it "returns the number of persisted documents" do
|
|
1398
1402
|
expect(person.addresses.count).to eq(1)
|
|
1399
1403
|
end
|
|
1404
|
+
|
|
1405
|
+
context 'block form' do
|
|
1406
|
+
it "iterates across all documents" do
|
|
1407
|
+
expect(person.addresses.count {|a| a.persisted? }).to eq(1)
|
|
1408
|
+
expect(person.addresses.count {|a| !a.persisted? }).to eq(2)
|
|
1409
|
+
expect(person.addresses.count {|a| a.street.include?('on') }).to eq(1)
|
|
1410
|
+
expect(person.addresses.count {|a| a.street.ends_with?('er') }).to eq(2)
|
|
1411
|
+
end
|
|
1412
|
+
end
|
|
1413
|
+
|
|
1414
|
+
context 'argument form' do
|
|
1415
|
+
it "behaves correctly when given a model instance" do
|
|
1416
|
+
expect(person.addresses.count(person.addresses.first)).to eq(1)
|
|
1417
|
+
end
|
|
1418
|
+
|
|
1419
|
+
it "behaves correctly when given a non-model instance" do
|
|
1420
|
+
expect(person.addresses.count(1)).to eq(0)
|
|
1421
|
+
end
|
|
1422
|
+
end
|
|
1423
|
+
end
|
|
1424
|
+
|
|
1425
|
+
describe "#any?" do
|
|
1426
|
+
|
|
1427
|
+
let(:person) do
|
|
1428
|
+
Person.create!
|
|
1429
|
+
end
|
|
1430
|
+
|
|
1431
|
+
context "when documents are persisted" do
|
|
1432
|
+
before do
|
|
1433
|
+
person.addresses.create!(street: "Upper")
|
|
1434
|
+
end
|
|
1435
|
+
|
|
1436
|
+
it "returns true" do
|
|
1437
|
+
expect(person.addresses.any?).to be true
|
|
1438
|
+
end
|
|
1439
|
+
|
|
1440
|
+
it "block form iterates across all documents" do
|
|
1441
|
+
expect(person.addresses.any? {|a| a.street == "Upper" }).to be true
|
|
1442
|
+
expect(person.addresses.any? {|a| a.street == "Bond" }).to be false
|
|
1443
|
+
end
|
|
1444
|
+
|
|
1445
|
+
context 'argument form' do
|
|
1446
|
+
it "behaves correctly when given a model instance" do
|
|
1447
|
+
expect(person.addresses.any?(person.addresses.first)).to be true
|
|
1448
|
+
end
|
|
1449
|
+
|
|
1450
|
+
it "behaves correctly when given a non-model instance" do
|
|
1451
|
+
expect(person.addresses.any?(1)).to be false
|
|
1452
|
+
end
|
|
1453
|
+
end
|
|
1454
|
+
end
|
|
1455
|
+
|
|
1456
|
+
context "when documents are not persisted" do
|
|
1457
|
+
before do
|
|
1458
|
+
person.addresses.build(street: "Bond")
|
|
1459
|
+
end
|
|
1460
|
+
|
|
1461
|
+
it "returns true" do
|
|
1462
|
+
expect(person.addresses.any?).to be true
|
|
1463
|
+
end
|
|
1464
|
+
|
|
1465
|
+
it "block form iterates across all documents" do
|
|
1466
|
+
expect(person.addresses.any? {|a| a.street == "Upper" }).to be false
|
|
1467
|
+
expect(person.addresses.any? {|a| a.street == "Bond" }).to be true
|
|
1468
|
+
end
|
|
1469
|
+
|
|
1470
|
+
context 'argument form' do
|
|
1471
|
+
it "behaves correctly when given a model instance" do
|
|
1472
|
+
expect(person.addresses.any?(person.addresses.first)).to be true
|
|
1473
|
+
end
|
|
1474
|
+
|
|
1475
|
+
it "behaves correctly when given a non-model instance" do
|
|
1476
|
+
expect(person.addresses.any?(1)).to be false
|
|
1477
|
+
end
|
|
1478
|
+
end
|
|
1479
|
+
end
|
|
1480
|
+
|
|
1481
|
+
context "when documents are not present" do
|
|
1482
|
+
it "returns false" do
|
|
1483
|
+
expect(person.addresses.any?).to be false
|
|
1484
|
+
end
|
|
1485
|
+
|
|
1486
|
+
it "block form iterates across all documents" do
|
|
1487
|
+
expect(person.addresses.any?(&:a)).to be false
|
|
1488
|
+
end
|
|
1489
|
+
|
|
1490
|
+
it "argument form is supported" do
|
|
1491
|
+
expect(person.addresses.any?(1)).to be false
|
|
1492
|
+
end
|
|
1493
|
+
end
|
|
1494
|
+
end
|
|
1495
|
+
|
|
1496
|
+
describe "#all?" do
|
|
1497
|
+
|
|
1498
|
+
let(:person) do
|
|
1499
|
+
Person.create!
|
|
1500
|
+
end
|
|
1501
|
+
|
|
1502
|
+
context "when documents are persisted" do
|
|
1503
|
+
before do
|
|
1504
|
+
person.addresses.create!(street: "Upper")
|
|
1505
|
+
end
|
|
1506
|
+
|
|
1507
|
+
it "returns true" do
|
|
1508
|
+
expect(person.addresses.all?).to be true
|
|
1509
|
+
end
|
|
1510
|
+
|
|
1511
|
+
it "block form iterates across all documents" do
|
|
1512
|
+
expect(person.addresses.all? {|a| a.street == "Upper" }).to be true
|
|
1513
|
+
expect(person.addresses.all? {|a| a.street == "Bond" }).to be false
|
|
1514
|
+
end
|
|
1515
|
+
|
|
1516
|
+
context 'argument form' do
|
|
1517
|
+
it "behaves correctly when given a model instance" do
|
|
1518
|
+
expect(person.addresses.all?(person.addresses.first)).to be true
|
|
1519
|
+
end
|
|
1520
|
+
|
|
1521
|
+
it "behaves correctly when given a non-model instance" do
|
|
1522
|
+
expect(person.addresses.all?(1)).to be false
|
|
1523
|
+
end
|
|
1524
|
+
end
|
|
1525
|
+
end
|
|
1526
|
+
|
|
1527
|
+
context "when documents are not persisted" do
|
|
1528
|
+
before do
|
|
1529
|
+
person.addresses.build(street: "Bond")
|
|
1530
|
+
end
|
|
1531
|
+
|
|
1532
|
+
it "returns true" do
|
|
1533
|
+
expect(person.addresses.all?).to be true
|
|
1534
|
+
end
|
|
1535
|
+
|
|
1536
|
+
it "block form iterates across all documents" do
|
|
1537
|
+
expect(person.addresses.all? {|a| a.street == "Upper" }).to be false
|
|
1538
|
+
expect(person.addresses.all? {|a| a.street == "Bond" }).to be true
|
|
1539
|
+
end
|
|
1540
|
+
|
|
1541
|
+
context 'argument form' do
|
|
1542
|
+
it "behaves correctly when given a model instance" do
|
|
1543
|
+
expect(person.addresses.all?(person.addresses.first)).to be true
|
|
1544
|
+
end
|
|
1545
|
+
|
|
1546
|
+
it "behaves correctly when given a non-model instance" do
|
|
1547
|
+
expect(person.addresses.all?(1)).to be false
|
|
1548
|
+
end
|
|
1549
|
+
end
|
|
1550
|
+
end
|
|
1551
|
+
|
|
1552
|
+
context "when documents are not present" do
|
|
1553
|
+
it "returns false" do
|
|
1554
|
+
expect(person.addresses.all?).to be true
|
|
1555
|
+
end
|
|
1556
|
+
|
|
1557
|
+
it "block form iterates across all documents" do
|
|
1558
|
+
expect(person.addresses.all?(&:foo)).to be true
|
|
1559
|
+
end
|
|
1560
|
+
|
|
1561
|
+
context 'argument form' do
|
|
1562
|
+
it "behaves correctly when given nil" do
|
|
1563
|
+
expect(person.addresses.all?(nil)).to be true
|
|
1564
|
+
end
|
|
1565
|
+
|
|
1566
|
+
it "behaves correctly when given a non-model instance" do
|
|
1567
|
+
expect(person.addresses.all?(1)).to be true
|
|
1568
|
+
end
|
|
1569
|
+
end
|
|
1570
|
+
end
|
|
1571
|
+
end
|
|
1572
|
+
|
|
1573
|
+
describe "#none?" do
|
|
1574
|
+
|
|
1575
|
+
let(:person) do
|
|
1576
|
+
Person.create!
|
|
1577
|
+
end
|
|
1578
|
+
|
|
1579
|
+
context "when documents are persisted" do
|
|
1580
|
+
before do
|
|
1581
|
+
person.addresses.create!(street: "Upper")
|
|
1582
|
+
end
|
|
1583
|
+
|
|
1584
|
+
it "returns true" do
|
|
1585
|
+
expect(person.addresses.none?).to be false
|
|
1586
|
+
end
|
|
1587
|
+
|
|
1588
|
+
it "block form iterates across all documents" do
|
|
1589
|
+
expect(person.addresses.none? {|a| a.street == "Upper" }).to be false
|
|
1590
|
+
expect(person.addresses.none? {|a| a.street == "Bond" }).to be true
|
|
1591
|
+
end
|
|
1592
|
+
|
|
1593
|
+
context 'argument form' do
|
|
1594
|
+
it "behaves correctly when given a model instance" do
|
|
1595
|
+
expect(person.addresses.none?(person.addresses.first)).to be false
|
|
1596
|
+
end
|
|
1597
|
+
|
|
1598
|
+
it "behaves correctly when given a non-model instance" do
|
|
1599
|
+
expect(person.addresses.none?(1)).to be true
|
|
1600
|
+
end
|
|
1601
|
+
end
|
|
1602
|
+
end
|
|
1603
|
+
|
|
1604
|
+
context "when documents are not persisted" do
|
|
1605
|
+
before do
|
|
1606
|
+
person.addresses.build(street: "Bond")
|
|
1607
|
+
end
|
|
1608
|
+
|
|
1609
|
+
it "returns true" do
|
|
1610
|
+
expect(person.addresses.none?).to be false
|
|
1611
|
+
end
|
|
1612
|
+
|
|
1613
|
+
it "block form iterates across all documents" do
|
|
1614
|
+
expect(person.addresses.none? {|a| a.street == "Upper" }).to be true
|
|
1615
|
+
expect(person.addresses.none? {|a| a.street == "Bond" }).to be false
|
|
1616
|
+
end
|
|
1617
|
+
|
|
1618
|
+
context 'argument form' do
|
|
1619
|
+
it "behaves correctly when given a model instance" do
|
|
1620
|
+
expect(person.addresses.none?(person.addresses.first)).to be false
|
|
1621
|
+
end
|
|
1622
|
+
|
|
1623
|
+
it "behaves correctly when given a non-model instance" do
|
|
1624
|
+
expect(person.addresses.none?(1)).to be true
|
|
1625
|
+
end
|
|
1626
|
+
end
|
|
1627
|
+
end
|
|
1628
|
+
|
|
1629
|
+
context "when documents are not present" do
|
|
1630
|
+
it "returns false" do
|
|
1631
|
+
expect(person.addresses.none?).to be true
|
|
1632
|
+
end
|
|
1633
|
+
|
|
1634
|
+
it "block form iterates across all documents" do
|
|
1635
|
+
expect(person.addresses.none?(&:a)).to be true
|
|
1636
|
+
end
|
|
1637
|
+
|
|
1638
|
+
context 'argument form' do
|
|
1639
|
+
it "behaves correctly when given nil" do
|
|
1640
|
+
expect(person.addresses.none?(nil)).to be true
|
|
1641
|
+
end
|
|
1642
|
+
|
|
1643
|
+
it "behaves correctly when given a non-model instance" do
|
|
1644
|
+
expect(person.addresses.none?(1)).to be true
|
|
1645
|
+
end
|
|
1646
|
+
end
|
|
1647
|
+
end
|
|
1400
1648
|
end
|
|
1401
1649
|
|
|
1402
1650
|
describe "#create" do
|
|
@@ -1404,11 +1652,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1404
1652
|
context "when providing multiple attributes" do
|
|
1405
1653
|
|
|
1406
1654
|
let(:person) do
|
|
1407
|
-
Person.create
|
|
1655
|
+
Person.create!
|
|
1408
1656
|
end
|
|
1409
1657
|
|
|
1410
1658
|
let!(:addresses) do
|
|
1411
|
-
person.addresses.create([{ street: "Bond" }, { street: "Upper" }])
|
|
1659
|
+
person.addresses.create!([{ street: "Bond" }, { street: "Upper" }])
|
|
1412
1660
|
end
|
|
1413
1661
|
|
|
1414
1662
|
it "creates multiple documents" do
|
|
@@ -1431,11 +1679,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1431
1679
|
context "when the relation is not cyclic" do
|
|
1432
1680
|
|
|
1433
1681
|
let(:person) do
|
|
1434
|
-
Person.create
|
|
1682
|
+
Person.create!
|
|
1435
1683
|
end
|
|
1436
1684
|
|
|
1437
1685
|
let!(:address) do
|
|
1438
|
-
person.addresses.create(street: "Bond") do |address|
|
|
1686
|
+
person.addresses.create!(street: "Bond") do |address|
|
|
1439
1687
|
address.state = "CA"
|
|
1440
1688
|
end
|
|
1441
1689
|
end
|
|
@@ -1479,7 +1727,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1479
1727
|
context "when embedding a multi word named document" do
|
|
1480
1728
|
|
|
1481
1729
|
let!(:component) do
|
|
1482
|
-
person.address_components.create(street: "Test")
|
|
1730
|
+
person.address_components.create!(street: "Test")
|
|
1483
1731
|
end
|
|
1484
1732
|
|
|
1485
1733
|
it "saves the embedded document" do
|
|
@@ -1491,11 +1739,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1491
1739
|
context "when the relation is cyclic" do
|
|
1492
1740
|
|
|
1493
1741
|
let!(:entry) do
|
|
1494
|
-
Entry.create(title: "hi")
|
|
1742
|
+
Entry.create!(title: "hi")
|
|
1495
1743
|
end
|
|
1496
1744
|
|
|
1497
1745
|
let!(:child_entry) do
|
|
1498
|
-
entry.child_entries.create(title: "hello")
|
|
1746
|
+
entry.child_entries.create!(title: "hello")
|
|
1499
1747
|
end
|
|
1500
1748
|
|
|
1501
1749
|
it "creates a new child" do
|
|
@@ -1507,7 +1755,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1507
1755
|
describe "#create!" do
|
|
1508
1756
|
|
|
1509
1757
|
let(:person) do
|
|
1510
|
-
Person.create
|
|
1758
|
+
Person.create!
|
|
1511
1759
|
end
|
|
1512
1760
|
|
|
1513
1761
|
context "when providing multiple attributes" do
|
|
@@ -1614,51 +1862,56 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1614
1862
|
end
|
|
1615
1863
|
end
|
|
1616
1864
|
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
end
|
|
1865
|
+
%i[ delete delete_one ].each do |method|
|
|
1866
|
+
describe "\##{method}" do
|
|
1867
|
+
let(:address_one) { Address.new(street: "first") }
|
|
1868
|
+
let(:address_two) { Address.new(street: "second") }
|
|
1622
1869
|
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1870
|
+
before do
|
|
1871
|
+
person.addresses << [ address_one, address_two ]
|
|
1872
|
+
end
|
|
1626
1873
|
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1874
|
+
shared_examples_for 'deleting from the collection' do
|
|
1875
|
+
context 'when the document exists in the relation' do
|
|
1876
|
+
let!(:deleted) do
|
|
1877
|
+
person.addresses.send(method, address_one)
|
|
1878
|
+
end
|
|
1630
1879
|
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1880
|
+
it 'deletes the document' do
|
|
1881
|
+
expect(person.addresses).to eq([ address_two ])
|
|
1882
|
+
expect(person.reload.addresses).to eq([ address_two ]) if person.persisted?
|
|
1883
|
+
end
|
|
1634
1884
|
|
|
1635
|
-
|
|
1885
|
+
it 'deletes the document from the unscoped' do
|
|
1886
|
+
expect(person.addresses.send(:_unscoped)).to eq([ address_two ])
|
|
1887
|
+
end
|
|
1636
1888
|
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1889
|
+
it 'reindexes the relation' do
|
|
1890
|
+
expect(address_two._index).to eq(0)
|
|
1891
|
+
end
|
|
1640
1892
|
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1893
|
+
it 'returns the document' do
|
|
1894
|
+
expect(deleted).to eq(address_one)
|
|
1895
|
+
end
|
|
1896
|
+
end
|
|
1644
1897
|
|
|
1645
|
-
|
|
1646
|
-
|
|
1898
|
+
context 'when the document does not exist' do
|
|
1899
|
+
it 'returns nil' do
|
|
1900
|
+
expect(person.addresses.send(method, Address.new)).to be_nil
|
|
1901
|
+
end
|
|
1902
|
+
end
|
|
1647
1903
|
end
|
|
1648
1904
|
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
end
|
|
1905
|
+
context 'when the root document is unpersisted' do
|
|
1906
|
+
let(:person) { Person.new }
|
|
1652
1907
|
|
|
1653
|
-
|
|
1654
|
-
expect(deleted).to eq(address_one)
|
|
1908
|
+
it_behaves_like 'deleting from the collection'
|
|
1655
1909
|
end
|
|
1656
|
-
end
|
|
1657
1910
|
|
|
1658
|
-
|
|
1911
|
+
context 'when the root document is persisted' do
|
|
1912
|
+
let(:person) { Person.create }
|
|
1659
1913
|
|
|
1660
|
-
|
|
1661
|
-
expect(person.addresses.delete(Address.new)).to be_nil
|
|
1914
|
+
it_behaves_like 'deleting from the collection'
|
|
1662
1915
|
end
|
|
1663
1916
|
end
|
|
1664
1917
|
end
|
|
@@ -1666,7 +1919,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1666
1919
|
describe "#delete_if" do
|
|
1667
1920
|
|
|
1668
1921
|
let(:person) do
|
|
1669
|
-
Person.create
|
|
1922
|
+
Person.create!
|
|
1670
1923
|
end
|
|
1671
1924
|
|
|
1672
1925
|
context "when the documents are new" do
|
|
@@ -1715,11 +1968,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1715
1968
|
context "when the documents persisted" do
|
|
1716
1969
|
|
|
1717
1970
|
let!(:address_one) do
|
|
1718
|
-
person.addresses.create(street: "Bond")
|
|
1971
|
+
person.addresses.create!(street: "Bond")
|
|
1719
1972
|
end
|
|
1720
1973
|
|
|
1721
1974
|
let!(:address_two) do
|
|
1722
|
-
person.addresses.create(street: "Upper")
|
|
1975
|
+
person.addresses.create!(street: "Upper")
|
|
1723
1976
|
end
|
|
1724
1977
|
|
|
1725
1978
|
context "when a block is provided" do
|
|
@@ -1774,7 +2027,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1774
2027
|
describe "##{method}" do
|
|
1775
2028
|
|
|
1776
2029
|
let(:person) do
|
|
1777
|
-
Person.create
|
|
2030
|
+
Person.create!
|
|
1778
2031
|
end
|
|
1779
2032
|
|
|
1780
2033
|
context "when the documents are new" do
|
|
@@ -1828,11 +2081,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1828
2081
|
context "when the documents persisted" do
|
|
1829
2082
|
|
|
1830
2083
|
let!(:address_one) do
|
|
1831
|
-
person.addresses.create(street: "Bond")
|
|
2084
|
+
person.addresses.create!(street: "Bond")
|
|
1832
2085
|
end
|
|
1833
2086
|
|
|
1834
2087
|
let!(:address_two) do
|
|
1835
|
-
person.addresses.create(street: "Upper")
|
|
2088
|
+
person.addresses.create!(street: "Upper")
|
|
1836
2089
|
end
|
|
1837
2090
|
|
|
1838
2091
|
context "when conditions are provided" do
|
|
@@ -1879,7 +2132,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1879
2132
|
context "when removing and resaving" do
|
|
1880
2133
|
|
|
1881
2134
|
let(:owner) do
|
|
1882
|
-
PetOwner.create(title: "AKC")
|
|
2135
|
+
PetOwner.create!(title: "AKC")
|
|
1883
2136
|
end
|
|
1884
2137
|
|
|
1885
2138
|
before do
|
|
@@ -1962,6 +2215,79 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1962
2215
|
end
|
|
1963
2216
|
end
|
|
1964
2217
|
end
|
|
2218
|
+
|
|
2219
|
+
context "when modifying the document beforehand" do
|
|
2220
|
+
let(:parent) { EmmParent.new }
|
|
2221
|
+
|
|
2222
|
+
before do
|
|
2223
|
+
|
|
2224
|
+
parent.blocks << EmmBlock.new(name: 'test', children: [size: 1, order: 1])
|
|
2225
|
+
parent.save!
|
|
2226
|
+
|
|
2227
|
+
parent.blocks[0].children[0].assign_attributes(size: 2)
|
|
2228
|
+
|
|
2229
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2230
|
+
end
|
|
2231
|
+
|
|
2232
|
+
it "deletes the correct document in the database" do
|
|
2233
|
+
expect(parent.reload.blocks.length).to eq(0)
|
|
2234
|
+
end
|
|
2235
|
+
end
|
|
2236
|
+
|
|
2237
|
+
context "when nil _id" do
|
|
2238
|
+
let(:parent) { EmmParent.new }
|
|
2239
|
+
|
|
2240
|
+
before do
|
|
2241
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test', children: [size: 1, order: 1])
|
|
2242
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test2', children: [size: 1, order: 1])
|
|
2243
|
+
parent.save!
|
|
2244
|
+
|
|
2245
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2246
|
+
end
|
|
2247
|
+
|
|
2248
|
+
it "deletes only the matching documents in the database" do
|
|
2249
|
+
expect(parent.reload.blocks.length).to eq(1)
|
|
2250
|
+
end
|
|
2251
|
+
end
|
|
2252
|
+
|
|
2253
|
+
# Since without an _id field we must us a $pullAll with the attributes of
|
|
2254
|
+
# the embedded document, if you modify it beforehand, the query will not
|
|
2255
|
+
# be able to find the correct document to pull.
|
|
2256
|
+
context "when modifying the document with nil _id" do
|
|
2257
|
+
let(:parent) { EmmParent.new }
|
|
2258
|
+
|
|
2259
|
+
before do
|
|
2260
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test', children: [size: 1, order: 1])
|
|
2261
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test2', children: [size: 1, order: 1])
|
|
2262
|
+
parent.save!
|
|
2263
|
+
|
|
2264
|
+
parent.blocks[0].children[0].assign_attributes(size: 2)
|
|
2265
|
+
|
|
2266
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2267
|
+
end
|
|
2268
|
+
|
|
2269
|
+
it "does not delete the correct documents" do
|
|
2270
|
+
expect(parent.reload.blocks.length).to eq(2)
|
|
2271
|
+
end
|
|
2272
|
+
end
|
|
2273
|
+
|
|
2274
|
+
context "when documents with and without _id" do
|
|
2275
|
+
let(:parent) { EmmParent.new }
|
|
2276
|
+
|
|
2277
|
+
before do
|
|
2278
|
+
parent.blocks << EmmBlock.new(_id: nil, name: 'test', children: [size: 1, order: 1])
|
|
2279
|
+
parent.blocks << EmmBlock.new(name: 'test', children: [size: 1, order: 1])
|
|
2280
|
+
parent.save!
|
|
2281
|
+
|
|
2282
|
+
parent.blocks[1].children[0].assign_attributes(size: 2)
|
|
2283
|
+
|
|
2284
|
+
parent.blocks.destroy_all(:name => 'test')
|
|
2285
|
+
end
|
|
2286
|
+
|
|
2287
|
+
it "does not delete the correct documents" do
|
|
2288
|
+
expect(parent.reload.blocks.length).to eq(0)
|
|
2289
|
+
end
|
|
2290
|
+
end
|
|
1965
2291
|
end
|
|
1966
2292
|
end
|
|
1967
2293
|
|
|
@@ -1975,13 +2301,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
1975
2301
|
describe "#exists?" do
|
|
1976
2302
|
|
|
1977
2303
|
let!(:person) do
|
|
1978
|
-
Person.create
|
|
2304
|
+
Person.create!
|
|
1979
2305
|
end
|
|
1980
2306
|
|
|
1981
2307
|
context "when documents exist in the database" do
|
|
1982
2308
|
|
|
1983
2309
|
before do
|
|
1984
|
-
person.addresses.create(street: "Bond St")
|
|
2310
|
+
person.addresses.create!(street: "Bond St")
|
|
1985
2311
|
end
|
|
1986
2312
|
|
|
1987
2313
|
it "returns true" do
|
|
@@ -2039,7 +2365,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2039
2365
|
it "raises an error" do
|
|
2040
2366
|
expect {
|
|
2041
2367
|
person.addresses.find(BSON::ObjectId.new)
|
|
2042
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2368
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
2043
2369
|
end
|
|
2044
2370
|
end
|
|
2045
2371
|
|
|
@@ -2088,7 +2414,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2088
2414
|
it "raises an error" do
|
|
2089
2415
|
expect {
|
|
2090
2416
|
person.addresses.find([ BSON::ObjectId.new ])
|
|
2091
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2417
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Address with id\(s\)/)
|
|
2092
2418
|
end
|
|
2093
2419
|
end
|
|
2094
2420
|
|
|
@@ -2112,12 +2438,50 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2112
2438
|
end
|
|
2113
2439
|
end
|
|
2114
2440
|
end
|
|
2441
|
+
|
|
2442
|
+
context "with block" do
|
|
2443
|
+
let!(:author) do
|
|
2444
|
+
Person.create!(title: 'Person')
|
|
2445
|
+
end
|
|
2446
|
+
|
|
2447
|
+
let!(:video_one) do
|
|
2448
|
+
author.videos.create!(title: 'video one')
|
|
2449
|
+
end
|
|
2450
|
+
|
|
2451
|
+
let!(:video_two) do
|
|
2452
|
+
author.videos.create!(title: 'video two')
|
|
2453
|
+
end
|
|
2454
|
+
|
|
2455
|
+
it "finds one" do
|
|
2456
|
+
expect(
|
|
2457
|
+
author.videos.find do |video|
|
|
2458
|
+
video.title == 'video one'
|
|
2459
|
+
end
|
|
2460
|
+
).to eq(video_one)
|
|
2461
|
+
end
|
|
2462
|
+
|
|
2463
|
+
it "returns first match of multiple" do
|
|
2464
|
+
expect(
|
|
2465
|
+
author.videos.find do |video|
|
|
2466
|
+
['video one', 'video two'].include?(video.title)
|
|
2467
|
+
end
|
|
2468
|
+
).to be_a(Video)
|
|
2469
|
+
end
|
|
2470
|
+
|
|
2471
|
+
it "returns nil when not found" do
|
|
2472
|
+
expect(
|
|
2473
|
+
author.videos.find do |video|
|
|
2474
|
+
video.title == 'non exiting one'
|
|
2475
|
+
end
|
|
2476
|
+
).to be_nil
|
|
2477
|
+
end
|
|
2478
|
+
end
|
|
2115
2479
|
end
|
|
2116
2480
|
|
|
2117
2481
|
describe "#find_or_create_by" do
|
|
2118
2482
|
|
|
2119
2483
|
let(:person) do
|
|
2120
|
-
Person.create
|
|
2484
|
+
Person.create!
|
|
2121
2485
|
end
|
|
2122
2486
|
|
|
2123
2487
|
let!(:address) do
|
|
@@ -2160,11 +2524,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2160
2524
|
# context "when the child belongs to another document" do
|
|
2161
2525
|
#
|
|
2162
2526
|
# let(:product) do
|
|
2163
|
-
# Product.create
|
|
2527
|
+
# Product.create!
|
|
2164
2528
|
# end
|
|
2165
2529
|
#
|
|
2166
2530
|
# let(:purchase) do
|
|
2167
|
-
# Purchase.create
|
|
2531
|
+
# Purchase.create!
|
|
2168
2532
|
# end
|
|
2169
2533
|
#
|
|
2170
2534
|
# let(:line_item) do
|
|
@@ -2183,7 +2547,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2183
2547
|
describe "#find_or_create_by!" do
|
|
2184
2548
|
|
|
2185
2549
|
let(:person) do
|
|
2186
|
-
Person.create
|
|
2550
|
+
Person.create!
|
|
2187
2551
|
end
|
|
2188
2552
|
|
|
2189
2553
|
let!(:address) do
|
|
@@ -2235,11 +2599,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2235
2599
|
# context "when the child belongs to another document" do
|
|
2236
2600
|
#
|
|
2237
2601
|
# let(:product) do
|
|
2238
|
-
# Product.create
|
|
2602
|
+
# Product.create!
|
|
2239
2603
|
# end
|
|
2240
2604
|
#
|
|
2241
2605
|
# let(:purchase) do
|
|
2242
|
-
# Purchase.create
|
|
2606
|
+
# Purchase.create!
|
|
2243
2607
|
# end
|
|
2244
2608
|
#
|
|
2245
2609
|
# let(:line_item) do
|
|
@@ -2357,11 +2721,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2357
2721
|
describe "#method_missing" do
|
|
2358
2722
|
|
|
2359
2723
|
let!(:person) do
|
|
2360
|
-
Person.create
|
|
2724
|
+
Person.create!
|
|
2361
2725
|
end
|
|
2362
2726
|
|
|
2363
2727
|
let!(:address_one) do
|
|
2364
|
-
person.addresses.create(
|
|
2728
|
+
person.addresses.create!(
|
|
2365
2729
|
street: "Market",
|
|
2366
2730
|
state: "CA",
|
|
2367
2731
|
services: [ "1", "2" ]
|
|
@@ -2369,7 +2733,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2369
2733
|
end
|
|
2370
2734
|
|
|
2371
2735
|
let!(:address_two) do
|
|
2372
|
-
person.addresses.create(
|
|
2736
|
+
person.addresses.create!(
|
|
2373
2737
|
street: "Madison",
|
|
2374
2738
|
state: "NY",
|
|
2375
2739
|
services: [ "1", "2" ]
|
|
@@ -2413,13 +2777,26 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2413
2777
|
end
|
|
2414
2778
|
|
|
2415
2779
|
context "when providing a criteria class method" do
|
|
2780
|
+
context "without keyword arguments" do
|
|
2416
2781
|
|
|
2417
|
-
|
|
2418
|
-
|
|
2782
|
+
let(:addresses) do
|
|
2783
|
+
person.addresses.california
|
|
2784
|
+
end
|
|
2785
|
+
|
|
2786
|
+
it "applies the criteria to the documents" do
|
|
2787
|
+
expect(addresses).to eq([ address_one ])
|
|
2788
|
+
end
|
|
2419
2789
|
end
|
|
2420
2790
|
|
|
2421
|
-
|
|
2422
|
-
|
|
2791
|
+
context "with keyword arguments" do
|
|
2792
|
+
|
|
2793
|
+
let(:addresses) do
|
|
2794
|
+
person.addresses.city_and_state(city: "Sacramento", state: "CA")
|
|
2795
|
+
end
|
|
2796
|
+
|
|
2797
|
+
it "applies the criteria to the documents" do
|
|
2798
|
+
expect(addresses).to eq([])
|
|
2799
|
+
end
|
|
2423
2800
|
end
|
|
2424
2801
|
end
|
|
2425
2802
|
|
|
@@ -2504,17 +2881,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2504
2881
|
describe "#pop" do
|
|
2505
2882
|
|
|
2506
2883
|
let(:person) do
|
|
2507
|
-
Person.create
|
|
2884
|
+
Person.create!
|
|
2508
2885
|
end
|
|
2509
2886
|
|
|
2510
2887
|
context "when no argument is provided" do
|
|
2511
2888
|
|
|
2512
2889
|
let!(:address_one) do
|
|
2513
|
-
person.addresses.create(street: "sonnenallee")
|
|
2890
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2514
2891
|
end
|
|
2515
2892
|
|
|
2516
2893
|
let!(:address_two) do
|
|
2517
|
-
person.addresses.create(street: "hermannstr")
|
|
2894
|
+
person.addresses.create!(street: "hermannstr")
|
|
2518
2895
|
end
|
|
2519
2896
|
|
|
2520
2897
|
let!(:popped) do
|
|
@@ -2537,11 +2914,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2537
2914
|
context "when an integer is provided" do
|
|
2538
2915
|
|
|
2539
2916
|
let!(:address_one) do
|
|
2540
|
-
person.addresses.create(street: "sonnenallee")
|
|
2917
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2541
2918
|
end
|
|
2542
2919
|
|
|
2543
2920
|
let!(:address_two) do
|
|
2544
|
-
person.addresses.create(street: "hermannstr")
|
|
2921
|
+
person.addresses.create!(street: "hermannstr")
|
|
2545
2922
|
end
|
|
2546
2923
|
|
|
2547
2924
|
context "when the number is zero" do
|
|
@@ -2623,17 +3000,17 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2623
3000
|
describe "#shift" do
|
|
2624
3001
|
|
|
2625
3002
|
let(:person) do
|
|
2626
|
-
Person.create
|
|
3003
|
+
Person.create!
|
|
2627
3004
|
end
|
|
2628
3005
|
|
|
2629
3006
|
context "when no argument is provided" do
|
|
2630
3007
|
|
|
2631
3008
|
let!(:address_one) do
|
|
2632
|
-
person.addresses.create(street: "sonnenallee")
|
|
3009
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2633
3010
|
end
|
|
2634
3011
|
|
|
2635
3012
|
let!(:address_two) do
|
|
2636
|
-
person.addresses.create(street: "hermannstr")
|
|
3013
|
+
person.addresses.create!(street: "hermannstr")
|
|
2637
3014
|
end
|
|
2638
3015
|
|
|
2639
3016
|
let!(:shifted) do
|
|
@@ -2656,11 +3033,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2656
3033
|
context "when an integer is provided" do
|
|
2657
3034
|
|
|
2658
3035
|
let!(:address_one) do
|
|
2659
|
-
person.addresses.create(street: "sonnenallee")
|
|
3036
|
+
person.addresses.create!(street: "sonnenallee")
|
|
2660
3037
|
end
|
|
2661
3038
|
|
|
2662
3039
|
let!(:address_two) do
|
|
2663
|
-
person.addresses.create(street: "hermannstr")
|
|
3040
|
+
person.addresses.create!(street: "hermannstr")
|
|
2664
3041
|
end
|
|
2665
3042
|
|
|
2666
3043
|
context "when the number is zero" do
|
|
@@ -2808,11 +3185,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2808
3185
|
describe "##{method}" do
|
|
2809
3186
|
|
|
2810
3187
|
let(:person) do
|
|
2811
|
-
Person.create
|
|
3188
|
+
Person.create!
|
|
2812
3189
|
end
|
|
2813
3190
|
|
|
2814
3191
|
before do
|
|
2815
|
-
person.addresses.create(street: "Upper")
|
|
3192
|
+
person.addresses.create!(street: "Upper")
|
|
2816
3193
|
person.addresses.build(street: "Bond")
|
|
2817
3194
|
end
|
|
2818
3195
|
|
|
@@ -2850,7 +3227,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2850
3227
|
context "when there are no documents present" do
|
|
2851
3228
|
|
|
2852
3229
|
let(:person) do
|
|
2853
|
-
Person.create
|
|
3230
|
+
Person.create!
|
|
2854
3231
|
end
|
|
2855
3232
|
|
|
2856
3233
|
it "updates nothing" do
|
|
@@ -2861,11 +3238,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2861
3238
|
context "when documents are present" do
|
|
2862
3239
|
|
|
2863
3240
|
let(:person) do
|
|
2864
|
-
Person.create
|
|
3241
|
+
Person.create!
|
|
2865
3242
|
end
|
|
2866
3243
|
|
|
2867
3244
|
let!(:address) do
|
|
2868
|
-
person.addresses.create(street: "Hobrecht", number: 27)
|
|
3245
|
+
person.addresses.create!(street: "Hobrecht", number: 27)
|
|
2869
3246
|
end
|
|
2870
3247
|
|
|
2871
3248
|
context "when updating with a where clause" do
|
|
@@ -2900,16 +3277,16 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2900
3277
|
context "when updating the bottom level" do
|
|
2901
3278
|
|
|
2902
3279
|
let!(:person) do
|
|
2903
|
-
Person.create
|
|
3280
|
+
Person.create!
|
|
2904
3281
|
end
|
|
2905
3282
|
|
|
2906
3283
|
let!(:address) do
|
|
2907
|
-
person.addresses.create(street: "Joachimstr")
|
|
3284
|
+
person.addresses.create!(street: "Joachimstr")
|
|
2908
3285
|
end
|
|
2909
3286
|
|
|
2910
3287
|
let!(:location) do
|
|
2911
|
-
address.locations.create(name: "vacation", number: 0)
|
|
2912
|
-
address.locations.create(name: "work", number: 3)
|
|
3288
|
+
address.locations.create!(name: "vacation", number: 0)
|
|
3289
|
+
address.locations.create!(name: "work", number: 3)
|
|
2913
3290
|
end
|
|
2914
3291
|
|
|
2915
3292
|
context "when updating with replacement of embedded array" do
|
|
@@ -2917,7 +3294,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2917
3294
|
context "when updating with a hash" do
|
|
2918
3295
|
|
|
2919
3296
|
before do
|
|
2920
|
-
address.update_attributes(locations: [{ name: "home" }])
|
|
3297
|
+
address.update_attributes!(locations: [{ name: "home" }])
|
|
2921
3298
|
end
|
|
2922
3299
|
|
|
2923
3300
|
it "updates the attributes" do
|
|
@@ -2938,7 +3315,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
2938
3315
|
|
|
2939
3316
|
before do
|
|
2940
3317
|
location.number = 7
|
|
2941
|
-
location.save
|
|
3318
|
+
location.save!
|
|
2942
3319
|
end
|
|
2943
3320
|
|
|
2944
3321
|
let(:updated_location_number) do
|
|
@@ -3071,7 +3448,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3071
3448
|
context "when creating a persisted tree" do
|
|
3072
3449
|
|
|
3073
3450
|
let(:quiz) do
|
|
3074
|
-
Quiz.create
|
|
3451
|
+
Quiz.create!
|
|
3075
3452
|
end
|
|
3076
3453
|
|
|
3077
3454
|
let(:page) do
|
|
@@ -3136,7 +3513,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3136
3513
|
context "when saving the root" do
|
|
3137
3514
|
|
|
3138
3515
|
before do
|
|
3139
|
-
person.save
|
|
3516
|
+
person.save!
|
|
3140
3517
|
end
|
|
3141
3518
|
|
|
3142
3519
|
it "persists the first level document" do
|
|
@@ -3162,7 +3539,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3162
3539
|
|
|
3163
3540
|
describe "replacing the entire embedded list" do
|
|
3164
3541
|
|
|
3165
|
-
context "when an embeds many relationship contains
|
|
3542
|
+
context "when an embeds many relationship contains nil as the first item" do
|
|
3166
3543
|
|
|
3167
3544
|
let(:person) do
|
|
3168
3545
|
Person.create!
|
|
@@ -3183,7 +3560,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3183
3560
|
end
|
|
3184
3561
|
end
|
|
3185
3562
|
|
|
3186
|
-
context "when an embeds many relationship contains
|
|
3563
|
+
context "when an embeds many relationship contains nil in the middle of the list" do
|
|
3187
3564
|
|
|
3188
3565
|
let(:person) do
|
|
3189
3566
|
Person.create!
|
|
@@ -3204,7 +3581,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3204
3581
|
end
|
|
3205
3582
|
end
|
|
3206
3583
|
|
|
3207
|
-
context "when an embeds many relationship contains
|
|
3584
|
+
context "when an embeds many relationship contains nil at the end of the list" do
|
|
3208
3585
|
|
|
3209
3586
|
let(:person) do
|
|
3210
3587
|
Person.create!
|
|
@@ -3228,7 +3605,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3228
3605
|
|
|
3229
3606
|
describe "appending to the embedded list" do
|
|
3230
3607
|
|
|
3231
|
-
context "when appending
|
|
3608
|
+
context "when appending nil to the first position in an embedded list" do
|
|
3232
3609
|
|
|
3233
3610
|
let(:person) do
|
|
3234
3611
|
Person.create! phone_numbers: []
|
|
@@ -3247,7 +3624,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3247
3624
|
end
|
|
3248
3625
|
end
|
|
3249
3626
|
|
|
3250
|
-
context "when appending
|
|
3627
|
+
context "when appending nil into the middle of an embedded list" do
|
|
3251
3628
|
|
|
3252
3629
|
let(:person) do
|
|
3253
3630
|
Person.create! phone_numbers: []
|
|
@@ -3266,7 +3643,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3266
3643
|
end
|
|
3267
3644
|
end
|
|
3268
3645
|
|
|
3269
|
-
context "when appending
|
|
3646
|
+
context "when appending nil to the end of an embedded list" do
|
|
3270
3647
|
|
|
3271
3648
|
let(:person) do
|
|
3272
3649
|
Person.create! phone_numbers: []
|
|
@@ -3290,11 +3667,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3290
3667
|
context "when accessing the parent in a destroy callback" do
|
|
3291
3668
|
|
|
3292
3669
|
let!(:league) do
|
|
3293
|
-
League.create
|
|
3670
|
+
League.create!
|
|
3294
3671
|
end
|
|
3295
3672
|
|
|
3296
3673
|
let!(:division) do
|
|
3297
|
-
league.divisions.create
|
|
3674
|
+
league.divisions.create!
|
|
3298
3675
|
end
|
|
3299
3676
|
|
|
3300
3677
|
before do
|
|
@@ -3309,15 +3686,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3309
3686
|
context "when updating the parent with all attributes" do
|
|
3310
3687
|
|
|
3311
3688
|
let!(:person) do
|
|
3312
|
-
Person.create
|
|
3689
|
+
Person.create!
|
|
3313
3690
|
end
|
|
3314
3691
|
|
|
3315
3692
|
let!(:address) do
|
|
3316
|
-
person.addresses.create
|
|
3693
|
+
person.addresses.create!
|
|
3317
3694
|
end
|
|
3318
3695
|
|
|
3319
3696
|
before do
|
|
3320
|
-
person.update_attributes(person.attributes)
|
|
3697
|
+
person.update_attributes!(person.attributes)
|
|
3321
3698
|
end
|
|
3322
3699
|
|
|
3323
3700
|
it "does not duplicate the embedded documents" do
|
|
@@ -3332,13 +3709,13 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3332
3709
|
context "when embedding children named versions" do
|
|
3333
3710
|
|
|
3334
3711
|
let(:acolyte) do
|
|
3335
|
-
Acolyte.create(name: "test")
|
|
3712
|
+
Acolyte.create!(name: "test")
|
|
3336
3713
|
end
|
|
3337
3714
|
|
|
3338
3715
|
context "when creating a child" do
|
|
3339
3716
|
|
|
3340
3717
|
let(:version) do
|
|
3341
|
-
acolyte.versions.create(number: 1)
|
|
3718
|
+
acolyte.versions.create!(number: 1)
|
|
3342
3719
|
end
|
|
3343
3720
|
|
|
3344
3721
|
it "allows the operation" do
|
|
@@ -3363,7 +3740,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3363
3740
|
let!(:account) do
|
|
3364
3741
|
Account.new(name: "Testing").tap do |acct|
|
|
3365
3742
|
acct.memberships.build
|
|
3366
|
-
acct.save
|
|
3743
|
+
acct.save!
|
|
3367
3744
|
end
|
|
3368
3745
|
end
|
|
3369
3746
|
|
|
@@ -3375,10 +3752,10 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3375
3752
|
|
|
3376
3753
|
before do
|
|
3377
3754
|
account.name = ""
|
|
3378
|
-
account.save
|
|
3379
3755
|
end
|
|
3380
3756
|
|
|
3381
3757
|
it "does not lose the parent reference" do
|
|
3758
|
+
expect(account.save).to eq false
|
|
3382
3759
|
expect(from_db.memberships.first.account).to eq(account)
|
|
3383
3760
|
end
|
|
3384
3761
|
end
|
|
@@ -3398,15 +3775,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3398
3775
|
context "when moving an embedded document from one parent to another" do
|
|
3399
3776
|
|
|
3400
3777
|
let!(:person_one) do
|
|
3401
|
-
Person.create
|
|
3778
|
+
Person.create!
|
|
3402
3779
|
end
|
|
3403
3780
|
|
|
3404
3781
|
let!(:person_two) do
|
|
3405
|
-
Person.create
|
|
3782
|
+
Person.create!
|
|
3406
3783
|
end
|
|
3407
3784
|
|
|
3408
3785
|
let!(:address) do
|
|
3409
|
-
person_one.addresses.create(street: "Kudamm")
|
|
3786
|
+
person_one.addresses.create!(street: "Kudamm")
|
|
3410
3787
|
end
|
|
3411
3788
|
|
|
3412
3789
|
before do
|
|
@@ -3441,7 +3818,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3441
3818
|
context "when the relation has a default scope" do
|
|
3442
3819
|
|
|
3443
3820
|
let!(:person) do
|
|
3444
|
-
Person.create
|
|
3821
|
+
Person.create!
|
|
3445
3822
|
end
|
|
3446
3823
|
|
|
3447
3824
|
context "when the default scope is a sort" do
|
|
@@ -3511,7 +3888,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3511
3888
|
context "when indexing the documents" do
|
|
3512
3889
|
|
|
3513
3890
|
let!(:person) do
|
|
3514
|
-
Person.create
|
|
3891
|
+
Person.create!
|
|
3515
3892
|
end
|
|
3516
3893
|
|
|
3517
3894
|
context "when the documents have a limiting default scope" do
|
|
@@ -3560,18 +3937,18 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3560
3937
|
context "when the embedded document has an array field" do
|
|
3561
3938
|
|
|
3562
3939
|
let!(:person) do
|
|
3563
|
-
Person.create
|
|
3940
|
+
Person.create!
|
|
3564
3941
|
end
|
|
3565
3942
|
|
|
3566
3943
|
let!(:video) do
|
|
3567
|
-
person.videos.create
|
|
3944
|
+
person.videos.create!
|
|
3568
3945
|
end
|
|
3569
3946
|
|
|
3570
3947
|
context "when saving the array on a persisted document" do
|
|
3571
3948
|
|
|
3572
3949
|
before do
|
|
3573
3950
|
video.genres = [ "horror", "scifi" ]
|
|
3574
|
-
video.save
|
|
3951
|
+
video.save!
|
|
3575
3952
|
end
|
|
3576
3953
|
|
|
3577
3954
|
it "sets the value" do
|
|
@@ -3596,7 +3973,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3596
3973
|
|
|
3597
3974
|
before do
|
|
3598
3975
|
loaded_video.genres = [ "comedy" ]
|
|
3599
|
-
loaded_video.save
|
|
3976
|
+
loaded_video.save!
|
|
3600
3977
|
end
|
|
3601
3978
|
|
|
3602
3979
|
it "sets the new value" do
|
|
@@ -3614,15 +3991,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3614
3991
|
context "when destroying an embedded document" do
|
|
3615
3992
|
|
|
3616
3993
|
let(:person) do
|
|
3617
|
-
Person.create
|
|
3994
|
+
Person.create!
|
|
3618
3995
|
end
|
|
3619
3996
|
|
|
3620
3997
|
let!(:address_one) do
|
|
3621
|
-
person.addresses.create(street: "hobrecht")
|
|
3998
|
+
person.addresses.create!(street: "hobrecht")
|
|
3622
3999
|
end
|
|
3623
4000
|
|
|
3624
4001
|
let!(:address_two) do
|
|
3625
|
-
person.addresses.create(street: "maybachufer")
|
|
4002
|
+
person.addresses.create!(street: "maybachufer")
|
|
3626
4003
|
end
|
|
3627
4004
|
|
|
3628
4005
|
before do
|
|
@@ -3661,6 +4038,28 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3661
4038
|
end
|
|
3662
4039
|
end
|
|
3663
4040
|
|
|
4041
|
+
context "when destroying a document with multiple nil _ids" do
|
|
4042
|
+
let(:congress) { EmmCongress.create! }
|
|
4043
|
+
|
|
4044
|
+
before do
|
|
4045
|
+
congress.legislators << EmmLegislator.new(_id: nil, a: 1)
|
|
4046
|
+
congress.legislators << EmmLegislator.new(_id: nil, a: 2)
|
|
4047
|
+
|
|
4048
|
+
congress.legislators[0].destroy
|
|
4049
|
+
end
|
|
4050
|
+
|
|
4051
|
+
it "deletes the correct document locally" do
|
|
4052
|
+
pending "MONGOID-5394"
|
|
4053
|
+
expect(congress.legislators.length).to eq(1)
|
|
4054
|
+
expect(congress.legislators.first.a).to eq(1)
|
|
4055
|
+
end
|
|
4056
|
+
|
|
4057
|
+
it "only deletes the one document" do
|
|
4058
|
+
pending "MONGOID-5394"
|
|
4059
|
+
expect(congress.reload.legislators.length).to eq(1)
|
|
4060
|
+
end
|
|
4061
|
+
end
|
|
4062
|
+
|
|
3664
4063
|
context "when adding a document" do
|
|
3665
4064
|
|
|
3666
4065
|
let(:person) do
|
|
@@ -3694,7 +4093,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3694
4093
|
context "when the association has an order defined" do
|
|
3695
4094
|
|
|
3696
4095
|
let(:person) do
|
|
3697
|
-
Person.create
|
|
4096
|
+
Person.create!
|
|
3698
4097
|
end
|
|
3699
4098
|
|
|
3700
4099
|
let(:message_one) do
|
|
@@ -3725,11 +4124,11 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3725
4124
|
|
|
3726
4125
|
before do
|
|
3727
4126
|
person.aliases = [ { name: "A", priority: 3 }, { name: "B", priority: 4 }]
|
|
3728
|
-
person.save
|
|
4127
|
+
person.save!
|
|
3729
4128
|
end
|
|
3730
4129
|
|
|
3731
4130
|
let!(:person2) do
|
|
3732
|
-
Person.create( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
|
|
4131
|
+
Person.create!( aliases: [ { name: "C", priority: 1 }, { name: "D", priority: 2 }])
|
|
3733
4132
|
end
|
|
3734
4133
|
|
|
3735
4134
|
it "allows ordering on a key of an embedded document" do
|
|
@@ -3764,7 +4163,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3764
4163
|
context "when updating multiple levels in one update" do
|
|
3765
4164
|
|
|
3766
4165
|
let!(:person) do
|
|
3767
|
-
Person.create(
|
|
4166
|
+
Person.create!(
|
|
3768
4167
|
addresses: [
|
|
3769
4168
|
{ locations: [{ name: "home" }]}
|
|
3770
4169
|
]
|
|
@@ -3778,7 +4177,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3778
4177
|
end
|
|
3779
4178
|
|
|
3780
4179
|
before do
|
|
3781
|
-
from_db.update_attributes(
|
|
4180
|
+
from_db.update_attributes!(
|
|
3782
4181
|
addresses: [
|
|
3783
4182
|
{ locations: [{ name: "work" }]}
|
|
3784
4183
|
]
|
|
@@ -3798,15 +4197,15 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3798
4197
|
context "when the embedded relation sorts on a boolean" do
|
|
3799
4198
|
|
|
3800
4199
|
let(:circuit) do
|
|
3801
|
-
Circuit.create
|
|
4200
|
+
Circuit.create!
|
|
3802
4201
|
end
|
|
3803
4202
|
|
|
3804
4203
|
let!(:bus_one) do
|
|
3805
|
-
circuit.buses.create(saturday: true)
|
|
4204
|
+
circuit.buses.create!(saturday: true)
|
|
3806
4205
|
end
|
|
3807
4206
|
|
|
3808
4207
|
let!(:bus_two) do
|
|
3809
|
-
circuit.buses.create(saturday: false)
|
|
4208
|
+
circuit.buses.create!(saturday: false)
|
|
3810
4209
|
end
|
|
3811
4210
|
|
|
3812
4211
|
it "orders properly with the boolean" do
|
|
@@ -3817,7 +4216,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3817
4216
|
context "when batch replacing multiple relations in a single update" do
|
|
3818
4217
|
|
|
3819
4218
|
let(:document) do
|
|
3820
|
-
Person.create
|
|
4219
|
+
Person.create!
|
|
3821
4220
|
end
|
|
3822
4221
|
|
|
3823
4222
|
let(:person) do
|
|
@@ -3825,23 +4224,23 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
3825
4224
|
end
|
|
3826
4225
|
|
|
3827
4226
|
let!(:symptom_one) do
|
|
3828
|
-
person.symptoms.create
|
|
4227
|
+
person.symptoms.create!
|
|
3829
4228
|
end
|
|
3830
4229
|
|
|
3831
4230
|
let!(:symptom_two) do
|
|
3832
|
-
person.symptoms.create
|
|
4231
|
+
person.symptoms.create!
|
|
3833
4232
|
end
|
|
3834
4233
|
|
|
3835
4234
|
let!(:appointment_one) do
|
|
3836
|
-
person.appointments.create
|
|
4235
|
+
person.appointments.create!
|
|
3837
4236
|
end
|
|
3838
4237
|
|
|
3839
4238
|
let!(:appointment_two) do
|
|
3840
|
-
person.appointments.create
|
|
4239
|
+
person.appointments.create!
|
|
3841
4240
|
end
|
|
3842
4241
|
|
|
3843
4242
|
before do
|
|
3844
|
-
person.update_attributes(
|
|
4243
|
+
person.update_attributes!(
|
|
3845
4244
|
appointments: [ appointment_one.as_document, appointment_two.as_document ],
|
|
3846
4245
|
symptoms: [ symptom_one.as_document, symptom_two.as_document ]
|
|
3847
4246
|
)
|
|
@@ -4174,7 +4573,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4174
4573
|
context "when the parent has an after create callback" do
|
|
4175
4574
|
|
|
4176
4575
|
before do
|
|
4177
|
-
server.save
|
|
4576
|
+
server.save!
|
|
4178
4577
|
end
|
|
4179
4578
|
|
|
4180
4579
|
it "does not push the embedded documents twice" do
|
|
@@ -4186,7 +4585,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4186
4585
|
context "when embedded documents are stored without ids" do
|
|
4187
4586
|
|
|
4188
4587
|
let!(:band) do
|
|
4189
|
-
Band.create(name: "Moderat")
|
|
4588
|
+
Band.create!(name: "Moderat")
|
|
4190
4589
|
end
|
|
4191
4590
|
|
|
4192
4591
|
before do
|
|
@@ -4236,7 +4635,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4236
4635
|
company = Company.new
|
|
4237
4636
|
4.times { |i| company.staffs << Staff.new(age: 50 + i)}
|
|
4238
4637
|
2.times { |i| company.staffs << Staff.new(age: 40)}
|
|
4239
|
-
company.save
|
|
4638
|
+
company.save!
|
|
4240
4639
|
company.staffs.delete_if {|x| x.age >= 50}
|
|
4241
4640
|
expect(company.staffs.count).to eq(2)
|
|
4242
4641
|
end
|
|
@@ -4313,7 +4712,7 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4313
4712
|
context "when the parent is persisted" do
|
|
4314
4713
|
|
|
4315
4714
|
let(:zone) do
|
|
4316
|
-
DNS::Zone.create
|
|
4715
|
+
DNS::Zone.create!
|
|
4317
4716
|
end
|
|
4318
4717
|
|
|
4319
4718
|
let(:soa_1) do
|
|
@@ -4351,4 +4750,119 @@ describe Mongoid::Association::Embedded::EmbedsMany::Proxy do
|
|
|
4351
4750
|
end
|
|
4352
4751
|
end
|
|
4353
4752
|
end
|
|
4753
|
+
|
|
4754
|
+
context "when trying to persist the empty list" do
|
|
4755
|
+
|
|
4756
|
+
context "in an embeds_many relation" do
|
|
4757
|
+
|
|
4758
|
+
let(:band) { Band.create! }
|
|
4759
|
+
|
|
4760
|
+
before do
|
|
4761
|
+
band.labels = []
|
|
4762
|
+
band.save!
|
|
4763
|
+
end
|
|
4764
|
+
|
|
4765
|
+
let(:reloaded_band) { Band.collection.find(_id: band._id).first }
|
|
4766
|
+
|
|
4767
|
+
it "persists the empty list" do
|
|
4768
|
+
expect(reloaded_band).to have_key(:labels)
|
|
4769
|
+
expect(reloaded_band[:labels]).to eq []
|
|
4770
|
+
end
|
|
4771
|
+
end
|
|
4772
|
+
|
|
4773
|
+
context "in a nested embeds_many relation" do
|
|
4774
|
+
|
|
4775
|
+
let(:survey) { Survey.create!(questions: [Question.new]) }
|
|
4776
|
+
|
|
4777
|
+
before do
|
|
4778
|
+
survey.questions.first.answers = []
|
|
4779
|
+
survey.save!
|
|
4780
|
+
end
|
|
4781
|
+
|
|
4782
|
+
let(:reloaded_survey) { Survey.collection.find(_id: survey._id).first }
|
|
4783
|
+
|
|
4784
|
+
it "persists the empty list" do
|
|
4785
|
+
expect(reloaded_survey).to have_key(:questions)
|
|
4786
|
+
expect(reloaded_survey[:questions][0]).to have_key(:answers)
|
|
4787
|
+
expect(reloaded_survey[:questions][0][:answers]).to eq []
|
|
4788
|
+
end
|
|
4789
|
+
end
|
|
4790
|
+
|
|
4791
|
+
context "when not setting the embeds_many field" do
|
|
4792
|
+
|
|
4793
|
+
let(:band) { Band.create! }
|
|
4794
|
+
|
|
4795
|
+
let(:reloaded_band) { Band.collection.find(_id: band._id).first }
|
|
4796
|
+
|
|
4797
|
+
it "does not persist the empty list" do
|
|
4798
|
+
expect(reloaded_band).to_not have_key(:labels)
|
|
4799
|
+
end
|
|
4800
|
+
end
|
|
4801
|
+
end
|
|
4802
|
+
|
|
4803
|
+
context "when using assign_attributes with an already populated array" do
|
|
4804
|
+
let(:post) { EmmPost.create! }
|
|
4805
|
+
|
|
4806
|
+
before do
|
|
4807
|
+
post.assign_attributes(company_tags: [{id: BSON::ObjectId.new, title: 'a'}],
|
|
4808
|
+
user_tags: [{id: BSON::ObjectId.new, title: 'b'}])
|
|
4809
|
+
post.save!
|
|
4810
|
+
post.reload
|
|
4811
|
+
post.assign_attributes(company_tags: [{id: BSON::ObjectId.new, title: 'c'}],
|
|
4812
|
+
user_tags: [])
|
|
4813
|
+
post.save!
|
|
4814
|
+
post.reload
|
|
4815
|
+
end
|
|
4816
|
+
|
|
4817
|
+
it "has the correct embedded documents" do
|
|
4818
|
+
expect(post.company_tags.length).to eq(1)
|
|
4819
|
+
expect(post.company_tags.first.title).to eq("c")
|
|
4820
|
+
end
|
|
4821
|
+
end
|
|
4822
|
+
|
|
4823
|
+
context "when the parent fails validation" do
|
|
4824
|
+
let(:school) { EmmSchool.new }
|
|
4825
|
+
let(:student) { school.students.new }
|
|
4826
|
+
|
|
4827
|
+
before do
|
|
4828
|
+
student.save
|
|
4829
|
+
end
|
|
4830
|
+
|
|
4831
|
+
it "does not mark the parent as persisted" do
|
|
4832
|
+
expect(school.persisted?).to be false
|
|
4833
|
+
end
|
|
4834
|
+
|
|
4835
|
+
it "does not mark the child as persisted" do
|
|
4836
|
+
expect(student.persisted?).to be false
|
|
4837
|
+
end
|
|
4838
|
+
|
|
4839
|
+
it "does not persist the parent" do
|
|
4840
|
+
expect(School.count).to eq(0)
|
|
4841
|
+
end
|
|
4842
|
+
end
|
|
4843
|
+
|
|
4844
|
+
context "when doing assign_attributes then assignment" do
|
|
4845
|
+
|
|
4846
|
+
let(:post) do
|
|
4847
|
+
EmmPost.create!(
|
|
4848
|
+
company_tags: [ EmmCompanyTag.new(title: "1"), EmmCompanyTag.new(title: "1") ],
|
|
4849
|
+
user_tags: [ EmmUserTag.new(title: "1"), EmmUserTag.new(title: "1") ]
|
|
4850
|
+
)
|
|
4851
|
+
end
|
|
4852
|
+
|
|
4853
|
+
let(:from_db) { EmmPost.find(post.id) }
|
|
4854
|
+
|
|
4855
|
+
before do
|
|
4856
|
+
post.assign_attributes(
|
|
4857
|
+
company_tags: [ EmmCompanyTag.new(title: '3'), EmmCompanyTag.new(title: '4') ]
|
|
4858
|
+
)
|
|
4859
|
+
post.user_tags = [ EmmUserTag.new(title: '3'), EmmUserTag.new(title: '4') ]
|
|
4860
|
+
post.save!
|
|
4861
|
+
end
|
|
4862
|
+
|
|
4863
|
+
it "persists the associations correctly" do
|
|
4864
|
+
expect(from_db.user_tags.size).to eq(2)
|
|
4865
|
+
expect(from_db.company_tags.size).to eq(2)
|
|
4866
|
+
end
|
|
4867
|
+
end
|
|
4354
4868
|
end
|