mongoid 9.0.11 → 9.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -8
- data/README.md +5 -11
- data/Rakefile +35 -38
- data/lib/config/locales/en.yml +11 -0
- data/lib/mongoid/association/accessors.rb +19 -26
- data/lib/mongoid/association/bindable.rb +43 -45
- data/lib/mongoid/association/builders.rb +18 -15
- data/lib/mongoid/association/constrainable.rb +3 -5
- data/lib/mongoid/association/depending.rb +34 -38
- data/lib/mongoid/association/eager.rb +47 -13
- data/lib/mongoid/association/eager_loadable.rb +152 -24
- data/lib/mongoid/association/embedded/batchable.rb +28 -30
- data/lib/mongoid/association/embedded/cyclic.rb +8 -11
- data/lib/mongoid/association/embedded/eager.rb +1 -6
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +6 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +25 -22
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +2 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many.rb +24 -21
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +2 -6
- data/lib/mongoid/association/embedded/embeds_one.rb +20 -18
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +3 -7
- data/lib/mongoid/association/many.rb +75 -3
- data/lib/mongoid/association/marshalable.rb +0 -3
- data/lib/mongoid/association/nested/many.rb +18 -13
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -9
- data/lib/mongoid/association/nested/one.rb +4 -7
- data/lib/mongoid/association/nested.rb +1 -3
- data/lib/mongoid/association/one.rb +0 -3
- data/lib/mongoid/association/options.rb +8 -7
- data/lib/mongoid/association/referenced/auto_save.rb +0 -2
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
- data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
- data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
- data/lib/mongoid/association/referenced/has_many/proxy.rb +10 -6
- data/lib/mongoid/association/referenced/has_many.rb +30 -24
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -3
- data/lib/mongoid/association/referenced/has_one.rb +26 -21
- data/lib/mongoid/association/referenced/syncable.rb +30 -34
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +0 -3
- data/lib/mongoid/association/relatable.rb +69 -66
- data/lib/mongoid/association.rb +12 -15
- data/lib/mongoid/atomic/modifiers.rb +65 -25
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +2 -4
- data/lib/mongoid/atomic/paths/embedded.rb +3 -6
- data/lib/mongoid/atomic/paths/root.rb +1 -4
- data/lib/mongoid/atomic/paths.rb +2 -3
- data/lib/mongoid/atomic.rb +0 -3
- data/lib/mongoid/attributes/dynamic.rb +6 -7
- data/lib/mongoid/attributes/nested.rb +8 -10
- data/lib/mongoid/attributes/projector.rb +7 -20
- data/lib/mongoid/attributes/readonly.rb +6 -11
- data/lib/mongoid/attributes.rb +18 -34
- data/lib/mongoid/cacheable.rb +24 -6
- data/lib/mongoid/clients/factory.rb +12 -15
- data/lib/mongoid/clients/options.rb +2 -5
- data/lib/mongoid/clients/sessions.rb +50 -60
- data/lib/mongoid/clients/storage_options.rb +1 -4
- data/lib/mongoid/clients/validators/storage.rb +2 -3
- data/lib/mongoid/clients/validators.rb +1 -2
- data/lib/mongoid/clients.rb +8 -11
- data/lib/mongoid/collection_configurable.rb +10 -14
- data/lib/mongoid/composable.rb +30 -34
- data/lib/mongoid/config/defaults.rb +7 -4
- data/lib/mongoid/config/encryption.rb +1 -3
- data/lib/mongoid/config/environment.rb +7 -16
- data/lib/mongoid/config/introspection.rb +14 -16
- data/lib/mongoid/config/options.rb +16 -10
- data/lib/mongoid/config/validators/async_query_executor.rb +3 -6
- data/lib/mongoid/config/validators/client.rb +12 -15
- data/lib/mongoid/config/validators/option.rb +3 -5
- data/lib/mongoid/config/validators.rb +3 -4
- data/lib/mongoid/config.rb +132 -42
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -4
- data/lib/mongoid/contextual/aggregable/mongo.rb +20 -22
- data/lib/mongoid/contextual/aggregable/none.rb +2 -4
- data/lib/mongoid/contextual/aggregable.rb +5 -7
- data/lib/mongoid/contextual/atomic.rb +20 -24
- data/lib/mongoid/contextual/command.rb +0 -3
- data/lib/mongoid/contextual/map_reduce.rb +12 -16
- data/lib/mongoid/contextual/memory.rb +72 -65
- data/lib/mongoid/contextual/mongo/documents_loader.rb +2 -3
- data/lib/mongoid/contextual/mongo.rb +169 -85
- data/lib/mongoid/contextual/none.rb +9 -9
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +18 -7
- data/lib/mongoid/copyable.rb +7 -9
- data/lib/mongoid/criteria/findable.rb +5 -7
- data/lib/mongoid/criteria/includable.rb +37 -8
- data/lib/mongoid/criteria/inspectable.rb +2 -5
- data/lib/mongoid/criteria/marshalable.rb +4 -8
- data/lib/mongoid/criteria/modifiable.rb +3 -11
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +34 -37
- data/lib/mongoid/criteria/queryable/aggregable.rb +9 -10
- data/lib/mongoid/criteria/queryable/expandable.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -10
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +20 -11
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -11
- data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -8
- data/lib/mongoid/criteria/queryable/extensions/range.rb +6 -9
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -12
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -6
- data/lib/mongoid/criteria/queryable/extensions/string.rb +5 -9
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -7
- data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +2 -12
- data/lib/mongoid/criteria/queryable/extensions.rb +18 -21
- data/lib/mongoid/criteria/queryable/key.rb +12 -18
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +31 -39
- data/lib/mongoid/criteria/queryable/optional.rb +17 -18
- data/lib/mongoid/criteria/queryable/options.rb +20 -9
- data/lib/mongoid/criteria/queryable/pipeline.rb +6 -9
- data/lib/mongoid/criteria/queryable/selectable.rb +131 -193
- data/lib/mongoid/criteria/queryable/selector.rb +20 -29
- data/lib/mongoid/criteria/queryable/smash.rb +1 -6
- data/lib/mongoid/criteria/queryable/storable.rb +20 -39
- data/lib/mongoid/criteria/queryable.rb +25 -15
- data/lib/mongoid/criteria/scopable.rb +5 -11
- data/lib/mongoid/criteria/translator.rb +5 -8
- data/lib/mongoid/criteria.rb +109 -54
- data/lib/mongoid/deprecable.rb +1 -4
- data/lib/mongoid/deprecation.rb +2 -6
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/encryptable.rb +1 -2
- data/lib/mongoid/equality.rb +4 -5
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/attribute_not_loaded.rb +1 -4
- data/lib/mongoid/errors/callback.rb +1 -4
- data/lib/mongoid/errors/create_collection_failure.rb +8 -11
- data/lib/mongoid/errors/criteria_argument_required.rb +2 -5
- data/lib/mongoid/errors/delete_restriction.rb +1 -4
- data/lib/mongoid/errors/document_not_destroyed.rb +1 -4
- data/lib/mongoid/errors/document_not_found.rb +16 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +7 -10
- data/lib/mongoid/errors/empty_config_file.rb +1 -4
- data/lib/mongoid/errors/immutable_attribute.rb +1 -4
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -4
- data/lib/mongoid/errors/invalid_async_query_executor.rb +2 -5
- data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +2 -5
- data/lib/mongoid/errors/invalid_collection.rb +1 -3
- data/lib/mongoid/errors/invalid_config_file.rb +1 -4
- data/lib/mongoid/errors/invalid_config_option.rb +2 -5
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +6 -10
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +2 -4
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -4
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +1 -4
- data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +1 -4
- data/lib/mongoid/errors/invalid_expression_operator.rb +3 -7
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +5 -9
- data/lib/mongoid/errors/invalid_field_option.rb +2 -5
- data/lib/mongoid/errors/invalid_field_type.rb +1 -4
- data/lib/mongoid/errors/invalid_find.rb +1 -4
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -4
- data/lib/mongoid/errors/invalid_includes.rb +3 -6
- data/lib/mongoid/errors/invalid_index.rb +1 -4
- data/lib/mongoid/errors/invalid_options.rb +1 -4
- data/lib/mongoid/errors/invalid_path.rb +1 -4
- data/lib/mongoid/errors/invalid_persistence_option.rb +4 -7
- data/lib/mongoid/errors/invalid_query.rb +6 -11
- data/lib/mongoid/errors/invalid_relation.rb +10 -13
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -7
- data/lib/mongoid/errors/invalid_scope.rb +1 -4
- data/lib/mongoid/errors/invalid_session_nesting.rb +0 -3
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +2 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
- data/lib/mongoid/errors/invalid_time.rb +1 -4
- data/lib/mongoid/errors/invalid_transaction_nesting.rb +0 -3
- data/lib/mongoid/errors/inverse_not_found.rb +1 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +1 -4
- data/lib/mongoid/errors/mixed_relations.rb +1 -3
- data/lib/mongoid/errors/mongoid_error.rb +7 -11
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +1 -4
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +1 -4
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- data/lib/mongoid/errors/no_environment.rb +1 -4
- data/lib/mongoid/errors/no_map_reduce_output.rb +1 -4
- data/lib/mongoid/errors/no_metadata.rb +1 -4
- data/lib/mongoid/errors/no_parent.rb +1 -4
- data/lib/mongoid/errors/readonly_attribute.rb +1 -4
- data/lib/mongoid/errors/readonly_document.rb +1 -4
- data/lib/mongoid/errors/rollback.rb +0 -2
- data/lib/mongoid/errors/scope_overwrite.rb +2 -4
- data/lib/mongoid/errors/sessions_not_supported.rb +0 -3
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -3
- data/lib/mongoid/errors/transaction_error.rb +0 -3
- data/lib/mongoid/errors/transactions_not_supported.rb +0 -3
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- data/lib/mongoid/errors/unknown_model.rb +1 -4
- data/lib/mongoid/errors/unregistered_class.rb +1 -1
- data/lib/mongoid/errors/unsaved_document.rb +1 -3
- data/lib/mongoid/errors/unsupported_isolation_level.rb +22 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +1 -4
- data/lib/mongoid/errors/validations.rb +3 -5
- data/lib/mongoid/errors.rb +72 -72
- data/lib/mongoid/evolvable.rb +0 -3
- data/lib/mongoid/extensions/array.rb +5 -7
- data/lib/mongoid/extensions/big_decimal.rb +6 -7
- data/lib/mongoid/extensions/binary.rb +3 -6
- data/lib/mongoid/extensions/boolean.rb +4 -7
- data/lib/mongoid/extensions/bson_document.rb +28 -0
- data/lib/mongoid/extensions/date.rb +10 -14
- data/lib/mongoid/extensions/date_time.rb +2 -6
- data/lib/mongoid/extensions/decimal128.rb +1 -5
- data/lib/mongoid/extensions/false_class.rb +3 -5
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +5 -10
- data/lib/mongoid/extensions/integer.rb +5 -10
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -1
- data/lib/mongoid/extensions/object.rb +9 -14
- data/lib/mongoid/extensions/object_id.rb +2 -6
- data/lib/mongoid/extensions/range.rb +14 -15
- data/lib/mongoid/extensions/raw_value.rb +0 -3
- data/lib/mongoid/extensions/regexp.rb +3 -6
- data/lib/mongoid/extensions/set.rb +3 -4
- data/lib/mongoid/extensions/string.rb +8 -12
- data/lib/mongoid/extensions/symbol.rb +3 -7
- data/lib/mongoid/extensions/time.rb +24 -26
- data/lib/mongoid/extensions/time_with_zone.rb +4 -7
- data/lib/mongoid/extensions/true_class.rb +3 -5
- data/lib/mongoid/extensions.rb +26 -26
- data/lib/mongoid/factory.rb +5 -9
- data/lib/mongoid/fields/encrypted.rb +0 -1
- data/lib/mongoid/fields/foreign_key.rb +9 -10
- data/lib/mongoid/fields/localized.rb +12 -12
- data/lib/mongoid/fields/standard.rb +5 -7
- data/lib/mongoid/fields/validators/macro.rb +23 -34
- data/lib/mongoid/fields/validators.rb +1 -2
- data/lib/mongoid/fields.rb +151 -58
- data/lib/mongoid/findable.rb +82 -53
- data/lib/mongoid/indexable/specification.rb +20 -6
- data/lib/mongoid/indexable/validators/options.rb +33 -40
- data/lib/mongoid/indexable.rb +26 -25
- data/lib/mongoid/inspectable.rb +4 -7
- data/lib/mongoid/interceptable.rb +41 -40
- data/lib/mongoid/loadable.rb +17 -18
- data/lib/mongoid/loggable.rb +4 -8
- data/lib/mongoid/matchable.rb +0 -2
- data/lib/mongoid/matcher/all.rb +2 -5
- data/lib/mongoid/matcher/and.rb +0 -3
- data/lib/mongoid/matcher/bits.rb +13 -8
- data/lib/mongoid/matcher/bits_all_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_all_set.rb +1 -3
- data/lib/mongoid/matcher/bits_any_clear.rb +1 -3
- data/lib/mongoid/matcher/bits_any_set.rb +1 -3
- data/lib/mongoid/matcher/elem_match.rb +13 -15
- data/lib/mongoid/matcher/elem_match_expression.rb +0 -3
- data/lib/mongoid/matcher/eq.rb +0 -3
- data/lib/mongoid/matcher/eq_impl.rb +12 -17
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +4 -7
- data/lib/mongoid/matcher/exists.rb +1 -4
- data/lib/mongoid/matcher/expression.rb +5 -10
- data/lib/mongoid/matcher/expression_operator.rb +1 -3
- data/lib/mongoid/matcher/field_expression.rb +10 -13
- data/lib/mongoid/matcher/field_operator.rb +4 -6
- data/lib/mongoid/matcher/gt.rb +0 -3
- data/lib/mongoid/matcher/gte.rb +0 -3
- data/lib/mongoid/matcher/in.rb +9 -12
- data/lib/mongoid/matcher/lt.rb +0 -3
- data/lib/mongoid/matcher/lte.rb +0 -3
- data/lib/mongoid/matcher/mod.rb +4 -8
- data/lib/mongoid/matcher/ne.rb +0 -3
- data/lib/mongoid/matcher/nin.rb +0 -3
- data/lib/mongoid/matcher/nor.rb +1 -6
- data/lib/mongoid/matcher/not.rb +0 -3
- data/lib/mongoid/matcher/or.rb +0 -3
- data/lib/mongoid/matcher/regex.rb +11 -14
- data/lib/mongoid/matcher/size.rb +2 -5
- data/lib/mongoid/matcher/type.rb +32 -37
- data/lib/mongoid/matcher.rb +7 -15
- data/lib/mongoid/model_resolver.rb +1 -0
- data/lib/mongoid/persistable/creatable.rb +23 -7
- data/lib/mongoid/persistable/deletable.rb +6 -7
- data/lib/mongoid/persistable/destroyable.rb +2 -6
- data/lib/mongoid/persistable/incrementable.rb +1 -3
- data/lib/mongoid/persistable/logical.rb +3 -5
- data/lib/mongoid/persistable/maxable.rb +2 -4
- data/lib/mongoid/persistable/minable.rb +2 -4
- data/lib/mongoid/persistable/multipliable.rb +1 -3
- data/lib/mongoid/persistable/poppable.rb +2 -4
- data/lib/mongoid/persistable/pullable.rb +3 -5
- data/lib/mongoid/persistable/pushable.rb +5 -7
- data/lib/mongoid/persistable/renamable.rb +1 -3
- data/lib/mongoid/persistable/savable.rb +0 -3
- data/lib/mongoid/persistable/settable.rb +4 -13
- data/lib/mongoid/persistable/unsettable.rb +1 -3
- data/lib/mongoid/persistable/updatable.rb +16 -24
- data/lib/mongoid/persistable/upsertable.rb +8 -10
- data/lib/mongoid/persistable.rb +28 -27
- data/lib/mongoid/persistence_context.rb +34 -41
- data/lib/mongoid/pluckable.rb +0 -2
- data/lib/mongoid/positional.rb +5 -11
- data/lib/mongoid/railtie.rb +16 -22
- data/lib/mongoid/railties/console_sandbox.rb +6 -8
- data/lib/mongoid/railties/controller_runtime.rb +7 -11
- data/lib/mongoid/railties/database.rake +42 -44
- data/lib/mongoid/scopable.rb +23 -31
- data/lib/mongoid/search_indexable.rb +330 -0
- data/lib/mongoid/selectable.rb +1 -3
- data/lib/mongoid/serializable.rb +6 -8
- data/lib/mongoid/shardable.rb +8 -17
- data/lib/mongoid/stateful.rb +5 -10
- data/lib/mongoid/stringified_symbol.rb +5 -9
- data/lib/mongoid/tasks/database.rake +31 -32
- data/lib/mongoid/tasks/database.rb +28 -30
- data/lib/mongoid/tasks/encryption.rb +10 -15
- data/lib/mongoid/threaded/lifecycle.rb +6 -9
- data/lib/mongoid/threaded.rb +132 -32
- data/lib/mongoid/timestamps/created/short.rb +2 -3
- data/lib/mongoid/timestamps/created.rb +1 -2
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +8 -13
- data/lib/mongoid/timestamps/updated/short.rb +2 -3
- data/lib/mongoid/timestamps/updated.rb +2 -5
- data/lib/mongoid/timestamps.rb +4 -6
- data/lib/mongoid/touchable.rb +19 -11
- data/lib/mongoid/traversable.rb +3 -2
- data/lib/mongoid/validatable/associated.rb +1 -5
- data/lib/mongoid/validatable/format.rb +0 -2
- data/lib/mongoid/validatable/length.rb +0 -2
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/numericality.rb +24 -3
- data/lib/mongoid/validatable/presence.rb +8 -10
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +12 -14
- data/lib/mongoid/validatable.rb +15 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +10 -11
- data/lib/mongoid.rb +30 -34
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
- data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
- data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
- data/lib/rails/generators/mongoid_generator.rb +6 -10
- data/lib/rails/mongoid.rb +1 -3
- data/spec/integration/active_job_spec.rb +1 -2
- data/spec/integration/app_spec.rb +142 -178
- data/spec/integration/associations/belongs_to_spec.rb +30 -28
- data/spec/integration/associations/embedded_dirty_spec.rb +0 -1
- data/spec/integration/associations/embedded_spec.rb +41 -43
- data/spec/integration/associations/embeds_many_spec.rb +46 -29
- data/spec/integration/associations/embeds_one_spec.rb +2 -1
- data/spec/integration/associations/foreign_key_spec.rb +10 -11
- data/spec/integration/associations/foreign_key_spec_models.rb +8 -9
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +16 -13
- data/spec/integration/associations/has_many_spec.rb +17 -18
- data/spec/integration/associations/has_one_spec.rb +42 -45
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +36 -39
- data/spec/integration/associations/reverse_population_spec.rb +4 -5
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +18 -20
- data/spec/integration/atomic/modifiers_spec.rb +72 -52
- data/spec/integration/bson_regexp_raw_spec.rb +2 -3
- data/spec/integration/caching_spec.rb +68 -0
- data/spec/integration/callbacks_models.rb +11 -9
- data/spec/integration/callbacks_spec.rb +78 -80
- data/spec/integration/contextual/empty_spec.rb +19 -20
- data/spec/integration/criteria/alias_query_spec.rb +12 -19
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +23 -18
- data/spec/integration/criteria/logical_spec.rb +18 -19
- data/spec/integration/criteria/range_spec.rb +77 -86
- data/spec/integration/criteria/raw_value_spec.rb +122 -109
- data/spec/integration/criteria/time_with_zone_spec.rb +33 -24
- data/spec/integration/discriminator_key_spec.rb +85 -85
- data/spec/integration/discriminator_value_spec.rb +70 -73
- data/spec/integration/document_spec.rb +9 -10
- data/spec/integration/dots_and_dollars_spec.rb +104 -119
- data/spec/integration/encryption_spec.rb +8 -11
- data/spec/integration/i18n_fallbacks_spec.rb +7 -8
- data/spec/integration/isolation_state_spec.rb +241 -0
- data/spec/integration/matcher_examples_spec.rb +145 -168
- data/spec/integration/matcher_operator_data/in.yml +6 -6
- data/spec/integration/matcher_operator_spec.rb +16 -26
- data/spec/integration/matcher_spec.rb +31 -32
- data/spec/integration/persistence/collection_options_spec.rb +0 -2
- data/spec/integration/persistence/range_field_spec.rb +24 -2
- data/spec/integration/server_query_spec.rb +43 -37
- data/spec/integration/shardable_spec.rb +10 -11
- data/spec/integration/stringified_symbol_field_spec.rb +28 -43
- data/spec/lite_spec_helper.rb +11 -12
- data/spec/mongoid/association/accessors_spec.rb +197 -285
- data/spec/mongoid/association/auto_save_spec.rb +62 -93
- data/spec/mongoid/association/builders_spec.rb +121 -74
- data/spec/mongoid/association/constrainable_spec.rb +9 -22
- data/spec/mongoid/association/counter_cache_spec.rb +71 -104
- data/spec/mongoid/association/depending_spec.rb +166 -208
- data/spec/mongoid/association/eager_spec.rb +416 -80
- data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
- data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
- data/spec/mongoid/association/macros_spec.rb +213 -300
- data/spec/mongoid/association/nested/many_spec.rb +51 -73
- data/spec/mongoid/association/nested/one_spec.rb +56 -80
- data/spec/mongoid/association/options_spec.rb +187 -310
- data/spec/mongoid/association/polymorphic_spec.rb +35 -53
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
- data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -975
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +9 -9
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +5 -6
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +59 -177
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +29 -43
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +53 -53
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +104 -67
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +431 -675
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -11
- data/spec/mongoid/association/referenced/has_many_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_many_spec.rb +44 -188
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +26 -38
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +28 -29
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +29 -42
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +270 -332
- data/spec/mongoid/association/referenced/has_one_models.rb +1 -2
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +3 -4
- data/spec/mongoid/association/referenced/has_one_spec.rb +40 -188
- data/spec/mongoid/association/reflections_spec.rb +14 -24
- data/spec/mongoid/association/syncable_spec.rb +102 -125
- data/spec/mongoid/association_spec.rb +47 -70
- data/spec/mongoid/atomic/modifiers_spec.rb +184 -197
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +39 -52
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +35 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +9 -15
- data/spec/mongoid/atomic/paths_spec.rb +81 -117
- data/spec/mongoid/atomic_spec.rb +156 -171
- data/spec/mongoid/attributes/dynamic_spec.rb +5 -6
- data/spec/mongoid/attributes/nested_spec.rb +1219 -1692
- data/spec/mongoid/attributes/nested_spec_models.rb +8 -9
- data/spec/mongoid/attributes/projector_spec.rb +2 -6
- data/spec/mongoid/attributes/readonly_spec.rb +73 -97
- data/spec/mongoid/attributes_spec.rb +669 -826
- data/spec/mongoid/cacheable_spec.rb +74 -44
- data/spec/mongoid/changeable_spec.rb +591 -733
- data/spec/mongoid/clients/factory_spec.rb +122 -154
- data/spec/mongoid/clients/options_spec.rb +40 -59
- data/spec/mongoid/clients/sessions_spec.rb +25 -44
- data/spec/mongoid/clients/transactions_spec.rb +33 -50
- data/spec/mongoid/clients/transactions_spec_models.rb +3 -4
- data/spec/mongoid/clients_spec.rb +265 -355
- data/spec/mongoid/collection_configurable_spec.rb +9 -12
- data/spec/mongoid/composable_spec.rb +2 -9
- data/spec/mongoid/config/defaults_spec.rb +24 -31
- data/spec/mongoid/config/encryption_spec.rb +54 -57
- data/spec/mongoid/config/environment_spec.rb +30 -40
- data/spec/mongoid/config/introspection_spec.rb +42 -37
- data/spec/mongoid/config/options_spec.rb +14 -21
- data/spec/mongoid/config_spec.rb +145 -195
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +98 -135
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +4 -7
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +149 -187
- data/spec/mongoid/contextual/aggregable/none_spec.rb +14 -16
- data/spec/mongoid/contextual/atomic_spec.rb +223 -271
- data/spec/mongoid/contextual/map_reduce_spec.rb +110 -138
- data/spec/mongoid/contextual/memory_spec.rb +706 -854
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +12 -13
- data/spec/mongoid/contextual/mongo_spec.rb +1008 -1213
- data/spec/mongoid/contextual/none_spec.rb +54 -59
- data/spec/mongoid/contextual/short_circuit_spec.rb +139 -0
- data/spec/mongoid/copyable_spec.rb +254 -300
- data/spec/mongoid/copyable_spec_models.rb +0 -1
- data/spec/mongoid/criteria/findable_spec.rb +322 -387
- data/spec/mongoid/criteria/includable_spec.rb +421 -372
- data/spec/mongoid/criteria/includable_spec_models.rb +16 -7
- data/spec/mongoid/criteria/inspectable_spec.rb +11 -14
- data/spec/mongoid/criteria/marshalable_spec.rb +11 -14
- data/spec/mongoid/criteria/modifiable_spec.rb +366 -512
- data/spec/mongoid/criteria/options_spec.rb +2 -7
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +112 -141
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +8 -11
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +127 -184
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +123 -60
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +84 -117
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +44 -65
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +86 -108
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +94 -33
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +103 -138
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +95 -34
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +25 -38
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +26 -28
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +32 -54
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +136 -130
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +16 -24
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +15 -24
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +12 -19
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -63
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +28 -42
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +73 -96
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +71 -92
- data/spec/mongoid/criteria/queryable/key_spec.rb +32 -36
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +44 -49
- data/spec/mongoid/criteria/queryable/optional_spec.rb +373 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +172 -123
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +65 -87
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +41 -53
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +576 -680
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +7 -11
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +807 -998
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +154 -191
- data/spec/mongoid/criteria/queryable/selector_spec.rb +294 -390
- data/spec/mongoid/criteria/queryable/smash_spec.rb +6 -11
- data/spec/mongoid/criteria/queryable/storable_spec.rb +54 -81
- data/spec/mongoid/criteria/queryable_mql_spec.rb +92 -0
- data/spec/mongoid/criteria/scopable_spec.rb +102 -138
- data/spec/mongoid/criteria/translator_spec.rb +59 -60
- data/spec/mongoid/criteria_projection_spec.rb +81 -99
- data/spec/mongoid/criteria_spec.rb +935 -950
- data/spec/mongoid/document_fields_spec.rb +28 -30
- data/spec/mongoid/document_persistence_context_spec.rb +13 -15
- data/spec/mongoid/document_query_spec.rb +9 -12
- data/spec/mongoid/document_spec.rb +317 -409
- data/spec/mongoid/equality_spec.rb +69 -102
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
- data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
- data/spec/mongoid/errors/callback_spec.rb +8 -11
- data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
- data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
- data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
- data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
- data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
- data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
- data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
- data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
- data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
- data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
- data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
- data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
- data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
- data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
- data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
- data/spec/mongoid/errors/no_environment_spec.rb +8 -11
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
- data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
- data/spec/mongoid/errors/no_parent_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
- data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
- data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
- data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
- data/spec/mongoid/errors/validations_spec.rb +11 -14
- data/spec/mongoid/extensions/array_spec.rb +70 -92
- data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
- data/spec/mongoid/extensions/binary_spec.rb +21 -32
- data/spec/mongoid/extensions/boolean_spec.rb +52 -75
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
- data/spec/mongoid/extensions/date_spec.rb +26 -38
- data/spec/mongoid/extensions/date_time_spec.rb +22 -32
- data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
- data/spec/mongoid/extensions/false_class_spec.rb +10 -17
- data/spec/mongoid/extensions/float_spec.rb +40 -61
- data/spec/mongoid/extensions/hash_spec.rb +46 -64
- data/spec/mongoid/extensions/integer_spec.rb +40 -61
- data/spec/mongoid/extensions/module_spec.rb +13 -18
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
- data/spec/mongoid/extensions/object_id_spec.rb +159 -247
- data/spec/mongoid/extensions/object_spec.rb +31 -47
- data/spec/mongoid/extensions/range_spec.rb +112 -115
- data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
- data/spec/mongoid/extensions/regexp_spec.rb +23 -36
- data/spec/mongoid/extensions/set_spec.rb +38 -49
- data/spec/mongoid/extensions/string_spec.rb +118 -167
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
- data/spec/mongoid/extensions/symbol_spec.rb +12 -20
- data/spec/mongoid/extensions/time_spec.rb +160 -202
- data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
- data/spec/mongoid/extensions/true_class_spec.rb +10 -17
- data/spec/mongoid/factory_spec.rb +125 -148
- data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
- data/spec/mongoid/fields/localized_spec.rb +140 -185
- data/spec/mongoid/fields/standard_spec.rb +43 -59
- data/spec/mongoid/fields_spec.rb +751 -620
- data/spec/mongoid/findable_spec.rb +260 -228
- data/spec/mongoid/indexable/specification_spec.rb +42 -58
- data/spec/mongoid/indexable_spec.rb +260 -264
- data/spec/mongoid/inspectable_spec.rb +45 -55
- data/spec/mongoid/interceptable_spec.rb +784 -922
- data/spec/mongoid/interceptable_spec_models.rb +35 -35
- data/spec/mongoid/loading_spec.rb +47 -43
- data/spec/mongoid/loggable_spec.rb +3 -6
- data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
- data/spec/mongoid/mongoizable_spec.rb +81 -90
- data/spec/mongoid/monkey_patches_spec.rb +4 -0
- data/spec/mongoid/persistable/creatable_spec.rb +181 -220
- data/spec/mongoid/persistable/deletable_spec.rb +139 -179
- data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
- data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
- data/spec/mongoid/persistable/logical_spec.rb +48 -61
- data/spec/mongoid/persistable/maxable_spec.rb +45 -44
- data/spec/mongoid/persistable/minable_spec.rb +45 -44
- data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
- data/spec/mongoid/persistable/poppable_spec.rb +47 -60
- data/spec/mongoid/persistable/pullable_spec.rb +79 -103
- data/spec/mongoid/persistable/pushable_spec.rb +106 -131
- data/spec/mongoid/persistable/renamable_spec.rb +52 -65
- data/spec/mongoid/persistable/savable_spec.rb +152 -189
- data/spec/mongoid/persistable/settable_spec.rb +121 -145
- data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
- data/spec/mongoid/persistable/updatable_spec.rb +185 -232
- data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
- data/spec/mongoid/persistable_spec.rb +132 -139
- data/spec/mongoid/persistence_context_spec.rb +31 -89
- data/spec/mongoid/positional_spec.rb +67 -79
- data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
- data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
- data/spec/mongoid/relations/proxy_spec.rb +0 -1
- data/spec/mongoid/reloadable_spec.rb +250 -145
- data/spec/mongoid/scopable_spec.rb +319 -398
- data/spec/mongoid/search_indexable_spec.rb +446 -41
- data/spec/mongoid/selectable_spec.rb +36 -51
- data/spec/mongoid/serializable_spec.rb +269 -312
- data/spec/mongoid/shardable_models.rb +5 -5
- data/spec/mongoid/shardable_spec.rb +44 -46
- data/spec/mongoid/stateful_spec.rb +55 -75
- data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
- data/spec/mongoid/tasks/database_spec.rb +80 -80
- data/spec/mongoid/tasks/encryption_spec.rb +22 -20
- data/spec/mongoid/threaded_spec.rb +57 -83
- data/spec/mongoid/timestamps/created/short_spec.rb +12 -16
- data/spec/mongoid/timestamps/created_spec.rb +16 -20
- data/spec/mongoid/timestamps/timeless_spec.rb +31 -43
- data/spec/mongoid/timestamps/updated/short_spec.rb +21 -28
- data/spec/mongoid/timestamps/updated_spec.rb +18 -25
- data/spec/mongoid/timestamps_spec.rb +171 -188
- data/spec/mongoid/timestamps_spec_models.rb +12 -13
- data/spec/mongoid/touchable_spec.rb +330 -294
- data/spec/mongoid/touchable_spec_models.rb +35 -37
- data/spec/mongoid/traversable_spec.rb +435 -471
- data/spec/mongoid/validatable/associated_spec.rb +42 -60
- data/spec/mongoid/validatable/format_spec.rb +24 -34
- data/spec/mongoid/validatable/length_spec.rb +62 -86
- data/spec/mongoid/validatable/numericality_spec.rb +114 -23
- data/spec/mongoid/validatable/presence_spec.rb +149 -203
- data/spec/mongoid/validatable/uniqueness_spec.rb +632 -830
- data/spec/mongoid/validatable_spec.rb +71 -103
- data/spec/mongoid/warnings_spec.rb +5 -9
- data/spec/mongoid_spec.rb +25 -41
- data/spec/rails/controller_extension/controller_runtime_spec.rb +45 -49
- data/spec/rails/mongoid_spec.rb +15 -15
- data/spec/shared/lib/mrss/cluster_config.rb +5 -40
- data/spec/shared/lib/mrss/constraints.rb +7 -46
- data/spec/shared/lib/mrss/docker_runner.rb +10 -21
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -31
- data/spec/shared/lib/mrss/release/candidate.rb +18 -12
- data/spec/shared/lib/mrss/server_version_registry.rb +1 -5
- data/spec/shared/share/Dockerfile.erb +6 -8
- data/spec/shared/shlib/server.sh +0 -50
- data/spec/shared/shlib/set_env.sh +4 -10
- data/spec/spec_helper.rb +54 -31
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +1 -2
- data/spec/support/constraints.rb +8 -25
- data/spec/support/crypt/models.rb +7 -8
- data/spec/support/crypt.rb +6 -9
- data/spec/support/expectations.rb +21 -7
- data/spec/support/feature_sandbox.rb +1 -4
- data/spec/support/helpers.rb +0 -1
- data/spec/support/immutable_ids.rb +20 -21
- data/spec/support/macros.rb +1 -3
- data/spec/support/models/account.rb +4 -5
- data/spec/support/models/acolyte.rb +5 -5
- data/spec/support/models/actor.rb +3 -3
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +11 -11
- data/spec/support/models/address_component.rb +1 -1
- data/spec/support/models/address_number.rb +1 -1
- data/spec/support/models/agency.rb +1 -1
- data/spec/support/models/agent.rb +1 -1
- data/spec/support/models/album.rb +1 -2
- data/spec/support/models/alert.rb +1 -1
- data/spec/support/models/animal.rb +4 -5
- data/spec/support/models/answer.rb +1 -1
- data/spec/support/models/appointment.rb +2 -2
- data/spec/support/models/armrest.rb +0 -1
- data/spec/support/models/array_field.rb +0 -1
- data/spec/support/models/article.rb +0 -1
- data/spec/support/models/artist.rb +16 -12
- data/spec/support/models/artwork.rb +1 -1
- data/spec/support/models/audible_sound.rb +0 -1
- data/spec/support/models/audio.rb +2 -2
- data/spec/support/models/augmentation.rb +1 -2
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/baby.rb +1 -1
- data/spec/support/models/band.rb +0 -1
- data/spec/support/models/bar.rb +2 -2
- data/spec/support/models/basic.rb +0 -1
- data/spec/support/models/bed.rb +0 -1
- data/spec/support/models/big_palette.rb +0 -1
- data/spec/support/models/birthday.rb +3 -5
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +1 -1
- data/spec/support/models/book.rb +1 -1
- data/spec/support/models/breed.rb +1 -1
- data/spec/support/models/browser.rb +1 -2
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +1 -1
- data/spec/support/models/bus.rb +1 -1
- data/spec/support/models/business.rb +2 -2
- data/spec/support/models/callback_test.rb +1 -1
- data/spec/support/models/canvas.rb +5 -6
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -2
- data/spec/support/models/catalog.rb +0 -1
- data/spec/support/models/category.rb +1 -1
- data/spec/support/models/child.rb +1 -1
- data/spec/support/models/child_doc.rb +5 -6
- data/spec/support/models/church.rb +1 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +2 -2
- data/spec/support/models/circus.rb +0 -1
- data/spec/support/models/code.rb +2 -1
- data/spec/support/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +0 -1
- data/spec/support/models/comment.rb +0 -1
- data/spec/support/models/company.rb +0 -1
- data/spec/support/models/consumption_period.rb +0 -1
- data/spec/support/models/contextable_item.rb +1 -1
- data/spec/support/models/contractor.rb +1 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -3
- data/spec/support/models/courier_job.rb +2 -2
- data/spec/support/models/cover.rb +0 -1
- data/spec/support/models/crate.rb +0 -1
- data/spec/support/models/customer.rb +0 -1
- data/spec/support/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +1 -1
- data/spec/support/models/definition.rb +1 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +1 -1
- data/spec/support/models/division.rb +2 -2
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +2 -2
- data/spec/support/models/dokument.rb +1 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +1 -1
- data/spec/support/models/driver.rb +2 -2
- data/spec/support/models/drug.rb +1 -1
- data/spec/support/models/dungeon.rb +1 -1
- data/spec/support/models/edit.rb +1 -1
- data/spec/support/models/email.rb +1 -1
- data/spec/support/models/employer.rb +1 -2
- data/spec/support/models/entry.rb +1 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +1 -1
- data/spec/support/models/event.rb +3 -4
- data/spec/support/models/exhibition.rb +1 -1
- data/spec/support/models/exhibitor.rb +1 -1
- data/spec/support/models/explosion.rb +1 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +2 -3
- data/spec/support/models/face.rb +2 -3
- data/spec/support/models/fanatic.rb +1 -1
- data/spec/support/models/favorite.rb +1 -1
- data/spec/support/models/filesystem.rb +1 -1
- data/spec/support/models/fire_hydrant.rb +1 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -2
- data/spec/support/models/folder_item.rb +1 -3
- data/spec/support/models/fruits.rb +9 -5
- data/spec/support/models/game.rb +3 -4
- data/spec/support/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +0 -1
- data/spec/support/models/hole.rb +0 -1
- data/spec/support/models/home.rb +1 -1
- data/spec/support/models/house.rb +2 -2
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +3 -3
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +1 -2
- data/spec/support/models/instrument.rb +2 -3
- data/spec/support/models/item.rb +2 -2
- data/spec/support/models/jar.rb +1 -2
- data/spec/support/models/kaleidoscope.rb +1 -1
- data/spec/support/models/kangaroo.rb +1 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +1 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +1 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +1 -1
- data/spec/support/models/location.rb +1 -1
- data/spec/support/models/login.rb +1 -2
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +1 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +1 -2
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +1 -1
- data/spec/support/models/modifier_models.rb +25 -0
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +1 -1
- data/spec/support/models/my_hash.rb +1 -2
- data/spec/support/models/name.rb +4 -5
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +1 -1
- data/spec/support/models/note.rb +3 -3
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +1 -1
- data/spec/support/models/order.rb +1 -1
- data/spec/support/models/ordered_post.rb +1 -1
- data/spec/support/models/ordered_preference.rb +1 -1
- data/spec/support/models/oscar.rb +1 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +3 -11
- data/spec/support/models/ownable.rb +1 -1
- data/spec/support/models/owner.rb +1 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +3 -3
- data/spec/support/models/page_question.rb +1 -1
- data/spec/support/models/palette.rb +2 -2
- data/spec/support/models/parent.rb +2 -2
- data/spec/support/models/parent_doc.rb +1 -1
- data/spec/support/models/passport.rb +0 -1
- data/spec/support/models/patient.rb +2 -2
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +32 -28
- data/spec/support/models/pet.rb +1 -1
- data/spec/support/models/pet_owner.rb +1 -1
- data/spec/support/models/phone.rb +1 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +1 -1
- data/spec/support/models/player.rb +5 -5
- data/spec/support/models/post.rb +12 -12
- data/spec/support/models/post_genre.rb +1 -1
- data/spec/support/models/powerup.rb +1 -2
- data/spec/support/models/preference.rb +2 -2
- data/spec/support/models/princess.rb +1 -1
- data/spec/support/models/product.rb +3 -3
- data/spec/support/models/profile.rb +2 -1
- data/spec/support/models/pronunciation.rb +1 -1
- data/spec/support/models/pub.rb +2 -2
- data/spec/support/models/publication/encyclopedia.rb +0 -1
- data/spec/support/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +0 -1
- data/spec/support/models/purchase.rb +1 -1
- data/spec/support/models/purchased_item.rb +1 -1
- data/spec/support/models/question.rb +2 -2
- data/spec/support/models/quiz.rb +1 -1
- data/spec/support/models/rating.rb +1 -1
- data/spec/support/models/record.rb +2 -3
- data/spec/support/models/registry.rb +1 -1
- data/spec/support/models/role.rb +1 -1
- data/spec/support/models/root_category.rb +1 -1
- data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
- data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_message.rb +0 -1
- data/spec/support/models/sandbox/sandbox_user.rb +0 -1
- data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
- data/spec/support/models/sandwich.rb +1 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +0 -1
- data/spec/support/models/scribe.rb +1 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +1 -1
- data/spec/support/models/series.rb +1 -1
- data/spec/support/models/server.rb +1 -1
- data/spec/support/models/service.rb +2 -2
- data/spec/support/models/shape.rb +3 -3
- data/spec/support/models/shelf.rb +1 -1
- data/spec/support/models/shield.rb +2 -2
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +1 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +2 -2
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +1 -1
- data/spec/support/models/simple.rb +1 -1
- data/spec/support/models/slave.rb +1 -1
- data/spec/support/models/song.rb +1 -2
- data/spec/support/models/sound.rb +2 -2
- data/spec/support/models/spacer.rb +0 -1
- data/spec/support/models/square.rb +0 -1
- data/spec/support/models/staff.rb +0 -1
- data/spec/support/models/store_as_dup_test1.rb +2 -2
- data/spec/support/models/store_as_dup_test2.rb +1 -1
- data/spec/support/models/store_as_dup_test3.rb +2 -2
- data/spec/support/models/store_as_dup_test4.rb +1 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +1 -2
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +2 -2
- data/spec/support/models/survey.rb +2 -2
- data/spec/support/models/symptom.rb +2 -2
- data/spec/support/models/system_role.rb +2 -3
- data/spec/support/models/tag.rb +2 -2
- data/spec/support/models/target.rb +1 -1
- data/spec/support/models/template.rb +1 -1
- data/spec/support/models/thing.rb +1 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +3 -3
- data/spec/support/models/topping.rb +1 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +1 -1
- data/spec/support/models/translation.rb +1 -1
- data/spec/support/models/tree.rb +2 -3
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +3 -4
- data/spec/support/models/user_account.rb +3 -3
- data/spec/support/models/validation_callback.rb +4 -4
- data/spec/support/models/vehicle.rb +2 -3
- data/spec/support/models/version.rb +1 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +1 -1
- data/spec/support/models/video.rb +2 -2
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +1 -2
- data/spec/support/models/wiki_page.rb +2 -3
- data/spec/support/models/word.rb +2 -2
- data/spec/support/models/word_origin.rb +1 -2
- data/spec/support/models/writer.rb +3 -3
- data/spec/support/rails_mock.rb +7 -12
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/sinatra_mock.rb +4 -2
- data/spec/support/spec_config.rb +19 -18
- metadata +14 -2
|
@@ -1,26 +1,22 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
5
4
|
|
|
6
5
|
describe Mongoid::Contextual::Atomic do
|
|
7
|
-
|
|
8
|
-
describe "#add_to_set" do
|
|
9
|
-
|
|
6
|
+
describe '#add_to_set' do
|
|
10
7
|
let!(:depeche_mode) do
|
|
11
|
-
Band.create!(members: [
|
|
8
|
+
Band.create!(members: [ 'Dave' ])
|
|
12
9
|
end
|
|
13
10
|
|
|
14
11
|
let!(:new_order) do
|
|
15
|
-
Band.create!(members: [
|
|
12
|
+
Band.create!(members: [ 'Peter' ])
|
|
16
13
|
end
|
|
17
14
|
|
|
18
15
|
let!(:smiths) do
|
|
19
16
|
Band.create!
|
|
20
17
|
end
|
|
21
18
|
|
|
22
|
-
context
|
|
23
|
-
|
|
19
|
+
context 'when the criteria has no sorting' do
|
|
24
20
|
let(:criteria) do
|
|
25
21
|
Band.all
|
|
26
22
|
end
|
|
@@ -30,24 +26,23 @@ describe Mongoid::Contextual::Atomic do
|
|
|
30
26
|
end
|
|
31
27
|
|
|
32
28
|
before do
|
|
33
|
-
context.add_to_set(members:
|
|
29
|
+
context.add_to_set(members: 'Dave')
|
|
34
30
|
end
|
|
35
31
|
|
|
36
|
-
it
|
|
37
|
-
expect(depeche_mode.reload.members).to eq([
|
|
32
|
+
it 'does not add duplicates' do
|
|
33
|
+
expect(depeche_mode.reload.members).to eq([ 'Dave' ])
|
|
38
34
|
end
|
|
39
35
|
|
|
40
|
-
it
|
|
41
|
-
expect(new_order.reload.members).to eq([
|
|
36
|
+
it 'adds unique values' do
|
|
37
|
+
expect(new_order.reload.members).to eq(%w[Peter Dave])
|
|
42
38
|
end
|
|
43
39
|
|
|
44
|
-
it
|
|
45
|
-
expect(smiths.reload.members).to eq([
|
|
40
|
+
it 'adds to non initialized fields' do
|
|
41
|
+
expect(smiths.reload.members).to eq([ 'Dave' ])
|
|
46
42
|
end
|
|
47
43
|
end
|
|
48
44
|
|
|
49
|
-
context
|
|
50
|
-
|
|
45
|
+
context 'when the criteria has sorting' do
|
|
51
46
|
let(:criteria) do
|
|
52
47
|
Band.asc(:name)
|
|
53
48
|
end
|
|
@@ -57,30 +52,29 @@ describe Mongoid::Contextual::Atomic do
|
|
|
57
52
|
end
|
|
58
53
|
|
|
59
54
|
before do
|
|
60
|
-
context.add_to_set(members:
|
|
55
|
+
context.add_to_set(members: 'Dave', genres: 'Electro')
|
|
61
56
|
end
|
|
62
57
|
|
|
63
|
-
it
|
|
64
|
-
expect(depeche_mode.reload.members).to eq([
|
|
58
|
+
it 'does not add duplicates' do
|
|
59
|
+
expect(depeche_mode.reload.members).to eq([ 'Dave' ])
|
|
65
60
|
end
|
|
66
61
|
|
|
67
|
-
it
|
|
68
|
-
expect(depeche_mode.reload.genres).to eq([
|
|
62
|
+
it 'adds multiple operations' do
|
|
63
|
+
expect(depeche_mode.reload.genres).to eq([ 'Electro' ])
|
|
69
64
|
end
|
|
70
65
|
|
|
71
|
-
it
|
|
72
|
-
expect(new_order.reload.members).to eq([
|
|
66
|
+
it 'adds unique values' do
|
|
67
|
+
expect(new_order.reload.members).to eq(%w[Peter Dave])
|
|
73
68
|
end
|
|
74
69
|
|
|
75
|
-
it
|
|
76
|
-
expect(smiths.reload.members).to eq([
|
|
70
|
+
it 'adds to non initialized fields' do
|
|
71
|
+
expect(smiths.reload.members).to eq([ 'Dave' ])
|
|
77
72
|
end
|
|
78
73
|
end
|
|
79
74
|
|
|
80
75
|
context 'when the criteria has a collation' do
|
|
81
|
-
|
|
82
76
|
let(:criteria) do
|
|
83
|
-
Band.where(members: [
|
|
77
|
+
Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
|
|
84
78
|
end
|
|
85
79
|
|
|
86
80
|
let(:context) do
|
|
@@ -88,35 +82,33 @@ describe Mongoid::Contextual::Atomic do
|
|
|
88
82
|
end
|
|
89
83
|
|
|
90
84
|
before do
|
|
91
|
-
context.add_to_set(members:
|
|
85
|
+
context.add_to_set(members: 'Dave', genres: 'Electro')
|
|
92
86
|
end
|
|
93
87
|
|
|
94
|
-
it
|
|
95
|
-
expect(depeche_mode.reload.members).to eq([
|
|
88
|
+
it 'does not add duplicates' do
|
|
89
|
+
expect(depeche_mode.reload.members).to eq([ 'Dave' ])
|
|
96
90
|
end
|
|
97
91
|
|
|
98
|
-
it
|
|
99
|
-
expect(depeche_mode.reload.genres).to eq([
|
|
92
|
+
it 'adds multiple operations' do
|
|
93
|
+
expect(depeche_mode.reload.genres).to eq([ 'Electro' ])
|
|
100
94
|
end
|
|
101
95
|
end
|
|
102
96
|
end
|
|
103
97
|
|
|
104
|
-
describe
|
|
105
|
-
|
|
98
|
+
describe '#add_each_to_set' do
|
|
106
99
|
let!(:depeche_mode) do
|
|
107
|
-
Band.create!(members: [
|
|
100
|
+
Band.create!(members: [ 'Dave' ])
|
|
108
101
|
end
|
|
109
102
|
|
|
110
103
|
let!(:new_order) do
|
|
111
|
-
Band.create!(members: [
|
|
104
|
+
Band.create!(members: [ 'Peter' ])
|
|
112
105
|
end
|
|
113
106
|
|
|
114
107
|
let!(:smiths) do
|
|
115
108
|
Band.create!
|
|
116
109
|
end
|
|
117
110
|
|
|
118
|
-
context
|
|
119
|
-
|
|
111
|
+
context 'when the criteria has no sorting' do
|
|
120
112
|
let(:criteria) do
|
|
121
113
|
Band.all
|
|
122
114
|
end
|
|
@@ -126,24 +118,23 @@ describe Mongoid::Contextual::Atomic do
|
|
|
126
118
|
end
|
|
127
119
|
|
|
128
120
|
before do
|
|
129
|
-
context.add_each_to_set(members: [
|
|
121
|
+
context.add_each_to_set(members: %w[Dave Joe])
|
|
130
122
|
end
|
|
131
123
|
|
|
132
|
-
it
|
|
133
|
-
expect(depeche_mode.reload.members).to eq([
|
|
124
|
+
it 'does not add duplicates' do
|
|
125
|
+
expect(depeche_mode.reload.members).to eq(%w[Dave Joe])
|
|
134
126
|
end
|
|
135
127
|
|
|
136
|
-
it
|
|
137
|
-
expect(new_order.reload.members).to eq([
|
|
128
|
+
it 'adds unique values' do
|
|
129
|
+
expect(new_order.reload.members).to eq(%w[Peter Dave Joe])
|
|
138
130
|
end
|
|
139
131
|
|
|
140
|
-
it
|
|
141
|
-
expect(smiths.reload.members).to eq([
|
|
132
|
+
it 'adds to non initialized fields' do
|
|
133
|
+
expect(smiths.reload.members).to eq(%w[Dave Joe])
|
|
142
134
|
end
|
|
143
135
|
end
|
|
144
136
|
|
|
145
|
-
context
|
|
146
|
-
|
|
137
|
+
context 'when the criteria has sorting' do
|
|
147
138
|
let(:criteria) do
|
|
148
139
|
Band.asc(:name)
|
|
149
140
|
end
|
|
@@ -153,30 +144,29 @@ describe Mongoid::Contextual::Atomic do
|
|
|
153
144
|
end
|
|
154
145
|
|
|
155
146
|
before do
|
|
156
|
-
context.add_each_to_set(members: [
|
|
147
|
+
context.add_each_to_set(members: %w[Dave Joe], genres: 'Electro')
|
|
157
148
|
end
|
|
158
149
|
|
|
159
|
-
it
|
|
160
|
-
expect(depeche_mode.reload.members).to eq([
|
|
150
|
+
it 'does not add duplicates' do
|
|
151
|
+
expect(depeche_mode.reload.members).to eq(%w[Dave Joe])
|
|
161
152
|
end
|
|
162
153
|
|
|
163
|
-
it
|
|
164
|
-
expect(depeche_mode.reload.genres).to eq([
|
|
154
|
+
it 'adds multiple operations' do
|
|
155
|
+
expect(depeche_mode.reload.genres).to eq([ 'Electro' ])
|
|
165
156
|
end
|
|
166
157
|
|
|
167
|
-
it
|
|
168
|
-
expect(new_order.reload.members).to eq([
|
|
158
|
+
it 'adds unique values' do
|
|
159
|
+
expect(new_order.reload.members).to eq(%w[Peter Dave Joe])
|
|
169
160
|
end
|
|
170
161
|
|
|
171
|
-
it
|
|
172
|
-
expect(smiths.reload.members).to eq([
|
|
162
|
+
it 'adds to non initialized fields' do
|
|
163
|
+
expect(smiths.reload.members).to eq(%w[Dave Joe])
|
|
173
164
|
end
|
|
174
165
|
end
|
|
175
166
|
|
|
176
167
|
context 'when the criteria has a collation' do
|
|
177
|
-
|
|
178
168
|
let(:criteria) do
|
|
179
|
-
Band.where(members: [
|
|
169
|
+
Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
|
|
180
170
|
end
|
|
181
171
|
|
|
182
172
|
let(:context) do
|
|
@@ -184,21 +174,20 @@ describe Mongoid::Contextual::Atomic do
|
|
|
184
174
|
end
|
|
185
175
|
|
|
186
176
|
before do
|
|
187
|
-
context.add_each_to_set(members: [
|
|
177
|
+
context.add_each_to_set(members: %w[Dave Joe], genres: 'Electro')
|
|
188
178
|
end
|
|
189
179
|
|
|
190
|
-
it
|
|
191
|
-
expect(depeche_mode.reload.members).to eq([
|
|
180
|
+
it 'does not add duplicates' do
|
|
181
|
+
expect(depeche_mode.reload.members).to eq(%w[Dave Joe])
|
|
192
182
|
end
|
|
193
183
|
|
|
194
|
-
it
|
|
195
|
-
expect(depeche_mode.reload.genres).to eq([
|
|
184
|
+
it 'adds multiple operations' do
|
|
185
|
+
expect(depeche_mode.reload.genres).to eq([ 'Electro' ])
|
|
196
186
|
end
|
|
197
187
|
end
|
|
198
188
|
end
|
|
199
189
|
|
|
200
|
-
describe
|
|
201
|
-
|
|
190
|
+
describe '#bit' do
|
|
202
191
|
let!(:depeche_mode) do
|
|
203
192
|
Band.create!(likes: 60)
|
|
204
193
|
end
|
|
@@ -211,47 +200,43 @@ describe Mongoid::Contextual::Atomic do
|
|
|
211
200
|
Mongoid::Contextual::Mongo.new(criteria)
|
|
212
201
|
end
|
|
213
202
|
|
|
214
|
-
context
|
|
215
|
-
|
|
203
|
+
context 'when performing a bitwise and' do
|
|
216
204
|
before do
|
|
217
205
|
context.bit(likes: { and: 13 })
|
|
218
206
|
end
|
|
219
207
|
|
|
220
|
-
it
|
|
208
|
+
it 'performs the bitwise operation on initialized fields' do
|
|
221
209
|
expect(depeche_mode.reload.likes).to eq(12)
|
|
222
210
|
end
|
|
223
211
|
end
|
|
224
212
|
|
|
225
|
-
context
|
|
226
|
-
|
|
213
|
+
context 'when performing a bitwise or' do
|
|
227
214
|
before do
|
|
228
215
|
context.bit(likes: { or: 13 })
|
|
229
216
|
end
|
|
230
217
|
|
|
231
|
-
it
|
|
218
|
+
it 'performs the bitwise operation on initialized fields' do
|
|
232
219
|
expect(depeche_mode.reload.likes).to eq(61)
|
|
233
220
|
end
|
|
234
221
|
end
|
|
235
222
|
|
|
236
|
-
context
|
|
237
|
-
|
|
223
|
+
context 'when chaining bitwise operations' do
|
|
238
224
|
before do
|
|
239
225
|
context.bit(likes: { and: 13, or: 10 })
|
|
240
226
|
end
|
|
241
227
|
|
|
242
|
-
it
|
|
228
|
+
it 'performs the bitwise operation on initialized fields' do
|
|
243
229
|
expect(depeche_mode.reload.likes).to eq(14)
|
|
244
230
|
end
|
|
245
231
|
end
|
|
246
232
|
|
|
247
233
|
context 'when the criteria has a collation' do
|
|
248
|
-
|
|
249
234
|
let!(:depeche_mode) do
|
|
250
|
-
Band.create!(members: [
|
|
235
|
+
Band.create!(members: [ 'Dave' ], likes: 60)
|
|
251
236
|
end
|
|
252
237
|
|
|
253
238
|
let(:criteria) do
|
|
254
|
-
Band.where(members: [
|
|
239
|
+
Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
|
|
255
240
|
end
|
|
256
241
|
|
|
257
242
|
let(:context) do
|
|
@@ -262,14 +247,13 @@ describe Mongoid::Contextual::Atomic do
|
|
|
262
247
|
context.bit(likes: { and: 13, or: 10 })
|
|
263
248
|
end
|
|
264
249
|
|
|
265
|
-
it
|
|
250
|
+
it 'performs the bitwise operation on initialized fields' do
|
|
266
251
|
expect(depeche_mode.reload.likes).to eq(14)
|
|
267
252
|
end
|
|
268
253
|
end
|
|
269
254
|
end
|
|
270
255
|
|
|
271
|
-
describe
|
|
272
|
-
|
|
256
|
+
describe '#inc' do
|
|
273
257
|
let!(:depeche_mode) do
|
|
274
258
|
Band.create!(likes: 60)
|
|
275
259
|
end
|
|
@@ -294,43 +278,39 @@ describe Mongoid::Contextual::Atomic do
|
|
|
294
278
|
context.inc(likes: 10)
|
|
295
279
|
end
|
|
296
280
|
|
|
297
|
-
context
|
|
298
|
-
|
|
299
|
-
it "incs the value" do
|
|
281
|
+
context 'when the field exists' do
|
|
282
|
+
it 'incs the value' do
|
|
300
283
|
expect(depeche_mode.reload.likes).to eq(70)
|
|
301
284
|
end
|
|
302
285
|
end
|
|
303
286
|
|
|
304
|
-
context
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
expect(smiths.reload.likes).to be == 10
|
|
287
|
+
context 'when the field does not exist' do
|
|
288
|
+
it 'does not error on the inc' do
|
|
289
|
+
expect(smiths.reload.likes).to eq 10
|
|
308
290
|
end
|
|
309
291
|
end
|
|
310
292
|
|
|
311
|
-
context
|
|
312
|
-
|
|
293
|
+
context 'when using the alias' do
|
|
313
294
|
before do
|
|
314
295
|
context.inc(years: 1)
|
|
315
296
|
end
|
|
316
297
|
|
|
317
|
-
it
|
|
298
|
+
it 'incs the value and read from alias' do
|
|
318
299
|
expect(beatles.reload.years).to eq(3)
|
|
319
300
|
end
|
|
320
301
|
|
|
321
|
-
it
|
|
302
|
+
it 'incs the value and read from field' do
|
|
322
303
|
expect(beatles.reload.y).to eq(3)
|
|
323
304
|
end
|
|
324
305
|
end
|
|
325
306
|
|
|
326
307
|
context 'when the criteria has a collation' do
|
|
327
|
-
|
|
328
308
|
let!(:depeche_mode) do
|
|
329
|
-
Band.create!(members: [
|
|
309
|
+
Band.create!(members: [ 'Dave' ])
|
|
330
310
|
end
|
|
331
311
|
|
|
332
312
|
let(:criteria) do
|
|
333
|
-
Band.where(members: [
|
|
313
|
+
Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
|
|
334
314
|
end
|
|
335
315
|
|
|
336
316
|
let(:context) do
|
|
@@ -341,14 +321,13 @@ describe Mongoid::Contextual::Atomic do
|
|
|
341
321
|
context.inc(years: 1)
|
|
342
322
|
end
|
|
343
323
|
|
|
344
|
-
it
|
|
324
|
+
it 'incs the value and read from alias' do
|
|
345
325
|
expect(depeche_mode.reload.years).to eq(1)
|
|
346
326
|
end
|
|
347
327
|
end
|
|
348
328
|
end
|
|
349
329
|
|
|
350
|
-
describe
|
|
351
|
-
|
|
330
|
+
describe '#mul' do
|
|
352
331
|
let!(:depeche_mode) { Band.create!(likes: 60) }
|
|
353
332
|
let!(:smiths) { Band.create! }
|
|
354
333
|
let!(:beatles) { Band.create!(years: 2) }
|
|
@@ -358,56 +337,51 @@ describe Mongoid::Contextual::Atomic do
|
|
|
358
337
|
|
|
359
338
|
before { context.mul(likes: 10) }
|
|
360
339
|
|
|
361
|
-
context
|
|
362
|
-
|
|
363
|
-
it "muls the value" do
|
|
340
|
+
context 'when the field exists' do
|
|
341
|
+
it 'muls the value' do
|
|
364
342
|
expect(depeche_mode.reload.likes).to eq(600)
|
|
365
343
|
end
|
|
366
344
|
end
|
|
367
345
|
|
|
368
|
-
context
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
expect(smiths.reload.likes).to be == 0
|
|
346
|
+
context 'when the field does not exist' do
|
|
347
|
+
it 'sets undefined fields to zero' do
|
|
348
|
+
expect(smiths.reload.likes).to eq 0
|
|
372
349
|
end
|
|
373
350
|
end
|
|
374
351
|
|
|
375
|
-
context
|
|
376
|
-
|
|
352
|
+
context 'when using the alias' do
|
|
377
353
|
before do
|
|
378
354
|
context.mul(years: 2)
|
|
379
355
|
end
|
|
380
356
|
|
|
381
|
-
it
|
|
357
|
+
it 'muls the value and read from alias' do
|
|
382
358
|
expect(beatles.reload.years).to eq(4)
|
|
383
359
|
end
|
|
384
360
|
|
|
385
|
-
it
|
|
361
|
+
it 'muls the value and read from field' do
|
|
386
362
|
expect(beatles.reload.y).to eq(4)
|
|
387
363
|
end
|
|
388
364
|
end
|
|
389
365
|
|
|
390
366
|
context 'when the criteria has a collation' do
|
|
391
|
-
|
|
392
|
-
let!(:depeche_mode) { Band.create!(members: [ "Dave" ], years: 3) }
|
|
367
|
+
let!(:depeche_mode) { Band.create!(members: [ 'Dave' ], years: 3) }
|
|
393
368
|
let(:criteria) do
|
|
394
|
-
Band.where(members: [
|
|
369
|
+
Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
|
|
395
370
|
end
|
|
396
371
|
|
|
397
372
|
let(:context) { Mongoid::Contextual::Mongo.new(criteria) }
|
|
398
373
|
|
|
399
374
|
before { context.mul(years: 2) }
|
|
400
375
|
|
|
401
|
-
it
|
|
376
|
+
it 'muls the value' do
|
|
402
377
|
expect(depeche_mode.reload.years).to eq(6)
|
|
403
378
|
end
|
|
404
379
|
end
|
|
405
380
|
end
|
|
406
381
|
|
|
407
|
-
describe
|
|
408
|
-
|
|
382
|
+
describe '#pop' do
|
|
409
383
|
let!(:depeche_mode) do
|
|
410
|
-
Band.create!(members: [
|
|
384
|
+
Band.create!(members: %w[Dave Martin])
|
|
411
385
|
end
|
|
412
386
|
|
|
413
387
|
let!(:smiths) do
|
|
@@ -422,44 +396,41 @@ describe Mongoid::Contextual::Atomic do
|
|
|
422
396
|
Mongoid::Contextual::Mongo.new(criteria)
|
|
423
397
|
end
|
|
424
398
|
|
|
425
|
-
context
|
|
426
|
-
|
|
399
|
+
context 'when popping from the front' do
|
|
427
400
|
before do
|
|
428
401
|
context.pop(members: -1)
|
|
429
402
|
end
|
|
430
403
|
|
|
431
|
-
it
|
|
432
|
-
expect(depeche_mode.reload.members).to eq([
|
|
404
|
+
it 'pops the first element off the array' do
|
|
405
|
+
expect(depeche_mode.reload.members).to eq([ 'Martin' ])
|
|
433
406
|
end
|
|
434
407
|
|
|
435
|
-
it
|
|
408
|
+
it 'does not error on uninitialized fields' do
|
|
436
409
|
expect(smiths.reload.members).to be_nil
|
|
437
410
|
end
|
|
438
411
|
end
|
|
439
412
|
|
|
440
|
-
context
|
|
441
|
-
|
|
413
|
+
context 'when popping from the rear' do
|
|
442
414
|
before do
|
|
443
415
|
context.pop(members: 1)
|
|
444
416
|
end
|
|
445
417
|
|
|
446
|
-
it
|
|
447
|
-
expect(depeche_mode.reload.members).to eq([
|
|
418
|
+
it 'pops the last element off the array' do
|
|
419
|
+
expect(depeche_mode.reload.members).to eq([ 'Dave' ])
|
|
448
420
|
end
|
|
449
421
|
|
|
450
|
-
it
|
|
422
|
+
it 'does not error on uninitialized fields' do
|
|
451
423
|
expect(smiths.reload.members).to be_nil
|
|
452
424
|
end
|
|
453
425
|
end
|
|
454
426
|
|
|
455
427
|
context 'when the criteria has a collation' do
|
|
456
|
-
|
|
457
428
|
let!(:depeche_mode) do
|
|
458
|
-
Band.create!(members: [
|
|
429
|
+
Band.create!(members: [ 'Dave' ])
|
|
459
430
|
end
|
|
460
431
|
|
|
461
432
|
let(:criteria) do
|
|
462
|
-
Band.where(members: [
|
|
433
|
+
Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
|
|
463
434
|
end
|
|
464
435
|
|
|
465
436
|
let(:context) do
|
|
@@ -470,16 +441,15 @@ describe Mongoid::Contextual::Atomic do
|
|
|
470
441
|
context.pop(members: 1)
|
|
471
442
|
end
|
|
472
443
|
|
|
473
|
-
it
|
|
444
|
+
it 'pops the last element off the array' do
|
|
474
445
|
expect(depeche_mode.reload.members).to be_empty
|
|
475
446
|
end
|
|
476
447
|
end
|
|
477
448
|
end
|
|
478
449
|
|
|
479
|
-
describe
|
|
480
|
-
|
|
450
|
+
describe '#pull' do
|
|
481
451
|
let!(:depeche_mode) do
|
|
482
|
-
Band.create!(members: [
|
|
452
|
+
Band.create!(members: %w[Dave Alan])
|
|
483
453
|
end
|
|
484
454
|
|
|
485
455
|
let!(:smiths) do
|
|
@@ -495,25 +465,24 @@ describe Mongoid::Contextual::Atomic do
|
|
|
495
465
|
end
|
|
496
466
|
|
|
497
467
|
before do
|
|
498
|
-
context.pull(members:
|
|
468
|
+
context.pull(members: 'Alan')
|
|
499
469
|
end
|
|
500
470
|
|
|
501
|
-
it
|
|
502
|
-
expect(depeche_mode.reload.members).to eq([
|
|
471
|
+
it 'pulls when the value is found' do
|
|
472
|
+
expect(depeche_mode.reload.members).to eq([ 'Dave' ])
|
|
503
473
|
end
|
|
504
474
|
|
|
505
|
-
it
|
|
475
|
+
it 'does not error on non existent fields' do
|
|
506
476
|
expect(smiths.reload.members).to be_nil
|
|
507
477
|
end
|
|
508
478
|
|
|
509
479
|
context 'when the criteria has a collation' do
|
|
510
|
-
|
|
511
480
|
let!(:depeche_mode) do
|
|
512
|
-
Band.create!(members: [
|
|
481
|
+
Band.create!(members: [ 'Dave' ])
|
|
513
482
|
end
|
|
514
483
|
|
|
515
484
|
let(:criteria) do
|
|
516
|
-
Band.where(members: [
|
|
485
|
+
Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
|
|
517
486
|
end
|
|
518
487
|
|
|
519
488
|
let(:context) do
|
|
@@ -521,21 +490,19 @@ describe Mongoid::Contextual::Atomic do
|
|
|
521
490
|
end
|
|
522
491
|
|
|
523
492
|
before do
|
|
524
|
-
context.pull(members:
|
|
493
|
+
context.pull(members: 'DAVE')
|
|
525
494
|
end
|
|
526
495
|
|
|
527
|
-
it
|
|
496
|
+
it 'pulls when the value is found' do
|
|
528
497
|
expect(depeche_mode.reload.members).to be_empty
|
|
529
498
|
end
|
|
530
499
|
end
|
|
531
500
|
end
|
|
532
501
|
|
|
533
|
-
describe
|
|
534
|
-
|
|
502
|
+
describe '#pull_all' do
|
|
535
503
|
context 'when the criteria does not have a collation' do
|
|
536
|
-
|
|
537
504
|
let!(:depeche_mode) do
|
|
538
|
-
Band.create!(members: [
|
|
505
|
+
Band.create!(members: %w[Dave Alan Fletch])
|
|
539
506
|
end
|
|
540
507
|
|
|
541
508
|
let!(:smiths) do
|
|
@@ -551,22 +518,21 @@ describe Mongoid::Contextual::Atomic do
|
|
|
551
518
|
end
|
|
552
519
|
|
|
553
520
|
before do
|
|
554
|
-
context.pull_all(members: [
|
|
521
|
+
context.pull_all(members: %w[Alan Dave])
|
|
555
522
|
end
|
|
556
523
|
|
|
557
|
-
it
|
|
558
|
-
expect(depeche_mode.reload.members).to eq([
|
|
524
|
+
it 'pulls when the values are found' do
|
|
525
|
+
expect(depeche_mode.reload.members).to eq([ 'Fletch' ])
|
|
559
526
|
end
|
|
560
527
|
|
|
561
|
-
it
|
|
528
|
+
it 'does not error on non existent fields' do
|
|
562
529
|
expect(smiths.reload.members).to be_nil
|
|
563
530
|
end
|
|
564
531
|
end
|
|
565
532
|
|
|
566
533
|
context 'when the criteria has a collation' do
|
|
567
|
-
|
|
568
534
|
let!(:depeche_mode) do
|
|
569
|
-
Band.create!(members: [
|
|
535
|
+
Band.create!(members: %w[Dave Alan Fletch])
|
|
570
536
|
end
|
|
571
537
|
|
|
572
538
|
let(:criteria) do
|
|
@@ -578,21 +544,19 @@ describe Mongoid::Contextual::Atomic do
|
|
|
578
544
|
end
|
|
579
545
|
|
|
580
546
|
before do
|
|
581
|
-
context.pull_all(members: [
|
|
547
|
+
context.pull_all(members: %w[ALAN DAVE])
|
|
582
548
|
end
|
|
583
549
|
|
|
584
|
-
it
|
|
585
|
-
expect(depeche_mode.reload.members).to eq([
|
|
550
|
+
it 'pulls when the value is found' do
|
|
551
|
+
expect(depeche_mode.reload.members).to eq([ 'Fletch' ])
|
|
586
552
|
end
|
|
587
553
|
end
|
|
588
554
|
end
|
|
589
555
|
|
|
590
|
-
describe
|
|
591
|
-
|
|
556
|
+
describe '#push' do
|
|
592
557
|
context 'when the criteria does not have a collation' do
|
|
593
|
-
|
|
594
558
|
let!(:depeche_mode) do
|
|
595
|
-
Band.create!(members: [
|
|
559
|
+
Band.create!(members: [ 'Dave' ])
|
|
596
560
|
end
|
|
597
561
|
|
|
598
562
|
let!(:smiths) do
|
|
@@ -608,22 +572,21 @@ describe Mongoid::Contextual::Atomic do
|
|
|
608
572
|
end
|
|
609
573
|
|
|
610
574
|
before do
|
|
611
|
-
context.push(members:
|
|
575
|
+
context.push(members: 'Alan')
|
|
612
576
|
end
|
|
613
577
|
|
|
614
|
-
it
|
|
615
|
-
expect(depeche_mode.reload.members).to eq([
|
|
578
|
+
it 'pushes the value to existing arrays' do
|
|
579
|
+
expect(depeche_mode.reload.members).to eq(%w[Dave Alan])
|
|
616
580
|
end
|
|
617
581
|
|
|
618
|
-
it
|
|
619
|
-
expect(smiths.reload.members).to eq([
|
|
582
|
+
it 'pushes to non existent fields' do
|
|
583
|
+
expect(smiths.reload.members).to eq([ 'Alan' ])
|
|
620
584
|
end
|
|
621
585
|
end
|
|
622
586
|
|
|
623
587
|
context 'when the criteria has a collation' do
|
|
624
|
-
|
|
625
588
|
let!(:depeche_mode) do
|
|
626
|
-
Band.create!(members: [
|
|
589
|
+
Band.create!(members: [ 'Dave' ])
|
|
627
590
|
end
|
|
628
591
|
|
|
629
592
|
let!(:smiths) do
|
|
@@ -631,7 +594,7 @@ describe Mongoid::Contextual::Atomic do
|
|
|
631
594
|
end
|
|
632
595
|
|
|
633
596
|
let(:criteria) do
|
|
634
|
-
Band.where(members: ['DAVE']).collation(locale: 'en_US', strength: 2)
|
|
597
|
+
Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
|
|
635
598
|
end
|
|
636
599
|
|
|
637
600
|
let(:context) do
|
|
@@ -639,25 +602,23 @@ describe Mongoid::Contextual::Atomic do
|
|
|
639
602
|
end
|
|
640
603
|
|
|
641
604
|
before do
|
|
642
|
-
context.push(members:
|
|
605
|
+
context.push(members: 'Alan')
|
|
643
606
|
end
|
|
644
607
|
|
|
645
|
-
it
|
|
646
|
-
expect(depeche_mode.reload.members).to eq([
|
|
608
|
+
it 'pushes the value to existing arrays' do
|
|
609
|
+
expect(depeche_mode.reload.members).to eq(%w[Dave Alan])
|
|
647
610
|
end
|
|
648
611
|
|
|
649
|
-
it
|
|
612
|
+
it 'pushes to non existent fields' do
|
|
650
613
|
expect(smiths.reload.members).to be_nil
|
|
651
614
|
end
|
|
652
615
|
end
|
|
653
616
|
end
|
|
654
617
|
|
|
655
|
-
describe
|
|
656
|
-
|
|
618
|
+
describe '#push_all' do
|
|
657
619
|
context 'when the criteria does not have a collation' do
|
|
658
|
-
|
|
659
620
|
let!(:depeche_mode) do
|
|
660
|
-
Band.create!(members: [
|
|
621
|
+
Band.create!(members: [ 'Dave' ])
|
|
661
622
|
end
|
|
662
623
|
|
|
663
624
|
let!(:smiths) do
|
|
@@ -673,22 +634,21 @@ describe Mongoid::Contextual::Atomic do
|
|
|
673
634
|
end
|
|
674
635
|
|
|
675
636
|
before do
|
|
676
|
-
context.push_all(members: [
|
|
637
|
+
context.push_all(members: %w[Alan Fletch])
|
|
677
638
|
end
|
|
678
639
|
|
|
679
|
-
it
|
|
680
|
-
expect(depeche_mode.reload.members).to eq([
|
|
640
|
+
it 'pushes the values to existing arrays' do
|
|
641
|
+
expect(depeche_mode.reload.members).to eq(%w[Dave Alan Fletch])
|
|
681
642
|
end
|
|
682
643
|
|
|
683
|
-
it
|
|
684
|
-
expect(smiths.reload.members).to eq([
|
|
644
|
+
it 'pushes to non existent fields' do
|
|
645
|
+
expect(smiths.reload.members).to eq(%w[Alan Fletch])
|
|
685
646
|
end
|
|
686
647
|
end
|
|
687
648
|
|
|
688
649
|
context 'when the criteria has a collation' do
|
|
689
|
-
|
|
690
650
|
let!(:depeche_mode) do
|
|
691
|
-
Band.create!(members: [
|
|
651
|
+
Band.create!(members: [ 'Dave' ])
|
|
692
652
|
end
|
|
693
653
|
|
|
694
654
|
let!(:smiths) do
|
|
@@ -696,7 +656,7 @@ describe Mongoid::Contextual::Atomic do
|
|
|
696
656
|
end
|
|
697
657
|
|
|
698
658
|
let(:criteria) do
|
|
699
|
-
Band.where(members: ['DAVE']).collation(locale: 'en_US', strength: 2)
|
|
659
|
+
Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
|
|
700
660
|
end
|
|
701
661
|
|
|
702
662
|
let(:context) do
|
|
@@ -704,21 +664,19 @@ describe Mongoid::Contextual::Atomic do
|
|
|
704
664
|
end
|
|
705
665
|
|
|
706
666
|
before do
|
|
707
|
-
context.push_all(members: [
|
|
667
|
+
context.push_all(members: %w[Alan Fletch])
|
|
708
668
|
end
|
|
709
669
|
|
|
710
|
-
it
|
|
711
|
-
expect(depeche_mode.reload.members).to eq([
|
|
670
|
+
it 'pushes the values to existing arrays' do
|
|
671
|
+
expect(depeche_mode.reload.members).to eq(%w[Dave Alan Fletch])
|
|
712
672
|
end
|
|
713
673
|
end
|
|
714
674
|
end
|
|
715
675
|
|
|
716
|
-
describe
|
|
717
|
-
|
|
676
|
+
describe '#rename' do
|
|
718
677
|
context 'when the criteria does not have a collation' do
|
|
719
|
-
|
|
720
678
|
let!(:depeche_mode) do
|
|
721
|
-
Band.create!(members: [
|
|
679
|
+
Band.create!(members: [ 'Dave' ])
|
|
722
680
|
end
|
|
723
681
|
|
|
724
682
|
let!(:smiths) do
|
|
@@ -737,19 +695,18 @@ describe Mongoid::Contextual::Atomic do
|
|
|
737
695
|
context.rename(members: :musicians)
|
|
738
696
|
end
|
|
739
697
|
|
|
740
|
-
it
|
|
741
|
-
expect(depeche_mode.reload.musicians).to eq([
|
|
698
|
+
it 'renames existing fields' do
|
|
699
|
+
expect(depeche_mode.reload.musicians).to eq([ 'Dave' ])
|
|
742
700
|
end
|
|
743
701
|
|
|
744
|
-
it
|
|
745
|
-
expect(smiths.reload).
|
|
702
|
+
it 'does not rename non existent fields' do
|
|
703
|
+
expect(smiths.reload).not_to respond_to(:musicians)
|
|
746
704
|
end
|
|
747
705
|
end
|
|
748
706
|
|
|
749
707
|
context 'when the criteria has a collation' do
|
|
750
|
-
|
|
751
708
|
let!(:depeche_mode) do
|
|
752
|
-
Band.create!(members: [
|
|
709
|
+
Band.create!(members: [ 'Dave' ])
|
|
753
710
|
end
|
|
754
711
|
|
|
755
712
|
let!(:smiths) do
|
|
@@ -757,7 +714,7 @@ describe Mongoid::Contextual::Atomic do
|
|
|
757
714
|
end
|
|
758
715
|
|
|
759
716
|
let(:criteria) do
|
|
760
|
-
Band.where(members: ['DAVE']).collation(locale: 'en_US', strength: 2)
|
|
717
|
+
Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
|
|
761
718
|
end
|
|
762
719
|
|
|
763
720
|
let(:context) do
|
|
@@ -768,20 +725,19 @@ describe Mongoid::Contextual::Atomic do
|
|
|
768
725
|
context.rename(members: :musicians)
|
|
769
726
|
end
|
|
770
727
|
|
|
771
|
-
it
|
|
772
|
-
expect(depeche_mode.reload.musicians).to eq([
|
|
728
|
+
it 'renames existing fields' do
|
|
729
|
+
expect(depeche_mode.reload.musicians).to eq([ 'Dave' ])
|
|
773
730
|
end
|
|
774
731
|
|
|
775
|
-
it
|
|
776
|
-
expect(smiths.reload).
|
|
732
|
+
it 'does not rename non existent fields' do
|
|
733
|
+
expect(smiths.reload).not_to respond_to(:musicians)
|
|
777
734
|
end
|
|
778
735
|
end
|
|
779
736
|
end
|
|
780
737
|
|
|
781
|
-
describe
|
|
782
|
-
|
|
738
|
+
describe '#set' do
|
|
783
739
|
let!(:depeche_mode) do
|
|
784
|
-
Band.create!(name:
|
|
740
|
+
Band.create!(name: 'Depeche Mode')
|
|
785
741
|
end
|
|
786
742
|
|
|
787
743
|
let!(:smiths) do
|
|
@@ -797,23 +753,22 @@ describe Mongoid::Contextual::Atomic do
|
|
|
797
753
|
end
|
|
798
754
|
|
|
799
755
|
before do
|
|
800
|
-
context.set(name:
|
|
756
|
+
context.set(name: 'Recoil')
|
|
801
757
|
end
|
|
802
758
|
|
|
803
759
|
shared_examples 'writes as expected' do
|
|
804
|
-
it
|
|
805
|
-
expect(depeche_mode.reload.name).to eq(
|
|
760
|
+
it 'sets existing fields' do
|
|
761
|
+
expect(depeche_mode.reload.name).to eq('Recoil')
|
|
806
762
|
end
|
|
807
763
|
|
|
808
|
-
it
|
|
809
|
-
expect(smiths.reload.name).to eq(
|
|
764
|
+
it 'sets non existent fields' do
|
|
765
|
+
expect(smiths.reload.name).to eq('Recoil')
|
|
810
766
|
end
|
|
811
767
|
end
|
|
812
768
|
|
|
813
769
|
include_examples 'writes as expected'
|
|
814
770
|
|
|
815
771
|
context 'when fields being set have been projected out' do
|
|
816
|
-
|
|
817
772
|
let(:criteria) do
|
|
818
773
|
Band.only(:genres)
|
|
819
774
|
end
|
|
@@ -822,16 +777,14 @@ describe Mongoid::Contextual::Atomic do
|
|
|
822
777
|
end
|
|
823
778
|
end
|
|
824
779
|
|
|
825
|
-
describe
|
|
826
|
-
|
|
827
|
-
context "when unsetting a single field" do
|
|
828
|
-
|
|
780
|
+
describe '#unset' do
|
|
781
|
+
context 'when unsetting a single field' do
|
|
829
782
|
let!(:depeche_mode) do
|
|
830
|
-
Band.create!(name:
|
|
783
|
+
Band.create!(name: 'Depeche Mode', years: 10)
|
|
831
784
|
end
|
|
832
785
|
|
|
833
786
|
let!(:new_order) do
|
|
834
|
-
Band.create!(name:
|
|
787
|
+
Band.create!(name: 'New Order', years: 10)
|
|
835
788
|
end
|
|
836
789
|
|
|
837
790
|
let(:criteria) do
|
|
@@ -842,43 +795,41 @@ describe Mongoid::Contextual::Atomic do
|
|
|
842
795
|
Mongoid::Contextual::Mongo.new(criteria)
|
|
843
796
|
end
|
|
844
797
|
|
|
845
|
-
context
|
|
846
|
-
|
|
798
|
+
context 'when the field is not aliased' do
|
|
847
799
|
before do
|
|
848
800
|
context.unset(:name)
|
|
849
801
|
end
|
|
850
802
|
|
|
851
|
-
it
|
|
803
|
+
it 'unsets the fields from all documents' do
|
|
852
804
|
depeche_mode.reload
|
|
853
805
|
new_order.reload
|
|
854
806
|
expect(depeche_mode.name).to be_nil
|
|
855
|
-
expect(depeche_mode.years).
|
|
807
|
+
expect(depeche_mode.years).not_to be_nil
|
|
856
808
|
expect(new_order.name).to be_nil
|
|
857
|
-
expect(new_order.years).
|
|
809
|
+
expect(new_order.years).not_to be_nil
|
|
858
810
|
end
|
|
859
811
|
end
|
|
860
812
|
|
|
861
|
-
context
|
|
813
|
+
context 'when the field is aliased' do
|
|
862
814
|
before do
|
|
863
815
|
context.unset(:years)
|
|
864
816
|
end
|
|
865
817
|
|
|
866
|
-
it
|
|
818
|
+
it 'unsets the fields from all documents' do
|
|
867
819
|
depeche_mode.reload
|
|
868
820
|
new_order.reload
|
|
869
|
-
expect(depeche_mode.name).
|
|
821
|
+
expect(depeche_mode.name).not_to be_nil
|
|
870
822
|
expect(depeche_mode.years).to be_nil
|
|
871
|
-
expect(new_order.name).
|
|
823
|
+
expect(new_order.name).not_to be_nil
|
|
872
824
|
expect(new_order.years).to be_nil
|
|
873
825
|
end
|
|
874
826
|
end
|
|
875
827
|
end
|
|
876
828
|
|
|
877
|
-
context
|
|
878
|
-
|
|
829
|
+
context 'when unsetting multiple fields' do
|
|
879
830
|
let!(:new_order) do
|
|
880
|
-
Band.create!(name:
|
|
881
|
-
|
|
831
|
+
Band.create!(name: 'New Order', genres: %w[electro dub], years: 10,
|
|
832
|
+
likes: 200, rating: 4.3, origin: 'Space')
|
|
882
833
|
end
|
|
883
834
|
|
|
884
835
|
let(:criteria) do
|
|
@@ -889,48 +840,45 @@ describe Mongoid::Contextual::Atomic do
|
|
|
889
840
|
Mongoid::Contextual::Mongo.new(criteria)
|
|
890
841
|
end
|
|
891
842
|
|
|
892
|
-
context
|
|
893
|
-
|
|
843
|
+
context 'when the field is not aliased' do
|
|
894
844
|
before do
|
|
895
845
|
context.unset(:name, :genres)
|
|
896
846
|
end
|
|
897
847
|
|
|
898
|
-
it
|
|
848
|
+
it 'unsets the specified fields' do
|
|
899
849
|
new_order.reload
|
|
900
850
|
expect(new_order.name).to be_nil
|
|
901
851
|
expect(new_order.genres).to be_nil
|
|
902
|
-
expect(new_order.years).
|
|
903
|
-
expect(new_order.likes).
|
|
904
|
-
expect(new_order.rating).
|
|
852
|
+
expect(new_order.years).not_to be_nil
|
|
853
|
+
expect(new_order.likes).not_to be_nil
|
|
854
|
+
expect(new_order.rating).not_to be_nil
|
|
905
855
|
end
|
|
906
856
|
end
|
|
907
857
|
|
|
908
|
-
context
|
|
909
|
-
|
|
858
|
+
context 'when the field is aliased' do
|
|
910
859
|
before do
|
|
911
860
|
context.unset(:name, :years)
|
|
912
861
|
end
|
|
913
862
|
|
|
914
|
-
it
|
|
863
|
+
it 'unsets the specified fields' do
|
|
915
864
|
new_order.reload
|
|
916
865
|
expect(new_order.name).to be_nil
|
|
917
|
-
expect(new_order.genres).
|
|
866
|
+
expect(new_order.genres).not_to be_nil
|
|
918
867
|
expect(new_order.years).to be_nil
|
|
919
|
-
expect(new_order.likes).
|
|
920
|
-
expect(new_order.rating).
|
|
868
|
+
expect(new_order.likes).not_to be_nil
|
|
869
|
+
expect(new_order.rating).not_to be_nil
|
|
921
870
|
end
|
|
922
871
|
end
|
|
923
872
|
|
|
924
|
-
context
|
|
925
|
-
|
|
873
|
+
context 'when using Hash arguments' do
|
|
926
874
|
before do
|
|
927
|
-
context.unset({ years: true, likes:
|
|
875
|
+
context.unset({ years: true, likes: '' }, { rating: false, origin: nil })
|
|
928
876
|
end
|
|
929
877
|
|
|
930
|
-
it
|
|
878
|
+
it 'unsets the specified fields' do
|
|
931
879
|
new_order.reload
|
|
932
|
-
expect(new_order.name).
|
|
933
|
-
expect(new_order.genres).
|
|
880
|
+
expect(new_order.name).not_to be_nil
|
|
881
|
+
expect(new_order.genres).not_to be_nil
|
|
934
882
|
expect(new_order.years).to be_nil
|
|
935
883
|
expect(new_order.likes).to be_nil
|
|
936
884
|
expect(new_order.rating).to be_nil
|
|
@@ -938,16 +886,15 @@ describe Mongoid::Contextual::Atomic do
|
|
|
938
886
|
end
|
|
939
887
|
end
|
|
940
888
|
|
|
941
|
-
context
|
|
942
|
-
|
|
889
|
+
context 'when mixing argument types' do
|
|
943
890
|
before do
|
|
944
|
-
context.unset(:name, [:years], { likes:
|
|
891
|
+
context.unset(:name, [ :years ], { likes: '' }, { rating: false })
|
|
945
892
|
end
|
|
946
893
|
|
|
947
|
-
it
|
|
894
|
+
it 'unsets the specified fields' do
|
|
948
895
|
new_order.reload
|
|
949
896
|
expect(new_order.name).to be_nil
|
|
950
|
-
expect(new_order.genres).
|
|
897
|
+
expect(new_order.genres).not_to be_nil
|
|
951
898
|
expect(new_order.years).to be_nil
|
|
952
899
|
expect(new_order.likes).to be_nil
|
|
953
900
|
expect(new_order.rating).to be_nil
|
|
@@ -956,13 +903,12 @@ describe Mongoid::Contextual::Atomic do
|
|
|
956
903
|
end
|
|
957
904
|
|
|
958
905
|
context 'when the criteria has a collation' do
|
|
959
|
-
|
|
960
906
|
let!(:depeche_mode) do
|
|
961
|
-
Band.create!(name:
|
|
907
|
+
Band.create!(name: 'Depeche Mode', years: 10)
|
|
962
908
|
end
|
|
963
909
|
|
|
964
910
|
let!(:new_order) do
|
|
965
|
-
Band.create!(name:
|
|
911
|
+
Band.create!(name: 'New Order', years: 10)
|
|
966
912
|
end
|
|
967
913
|
|
|
968
914
|
let(:criteria) do
|
|
@@ -977,10 +923,10 @@ describe Mongoid::Contextual::Atomic do
|
|
|
977
923
|
context.unset(:name)
|
|
978
924
|
end
|
|
979
925
|
|
|
980
|
-
it
|
|
926
|
+
it 'unsets the unaliased field' do
|
|
981
927
|
depeche_mode.reload
|
|
982
928
|
expect(depeche_mode.name).to be_nil
|
|
983
|
-
expect(depeche_mode.years).
|
|
929
|
+
expect(depeche_mode.years).not_to be_nil
|
|
984
930
|
end
|
|
985
931
|
end
|
|
986
932
|
end
|
|
@@ -995,7 +941,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
995
941
|
Band.create!(
|
|
996
942
|
member_count: member_count,
|
|
997
943
|
founded: founded,
|
|
998
|
-
views: views
|
|
944
|
+
views: views
|
|
945
|
+
)
|
|
999
946
|
end
|
|
1000
947
|
|
|
1001
948
|
let(:criteria) { Band.all }
|
|
@@ -1004,12 +951,12 @@ describe Mongoid::Contextual::Atomic do
|
|
|
1004
951
|
shared_examples_for 'min-able comparisons' do
|
|
1005
952
|
shared_examples_for 'a min-able context' do
|
|
1006
953
|
it 'chooses the smaller value' do
|
|
1007
|
-
context.send(min_method,
|
|
1008
|
-
expect(band.reload.member_count).to
|
|
1009
|
-
expect(band.views).to
|
|
954
|
+
context.send(min_method, 'member_count' => given_members, views: given_views)
|
|
955
|
+
expect(band.reload.member_count).to eq [ member_count, given_members ].min
|
|
956
|
+
expect(band.views).to eq [ views, given_views ].min
|
|
1010
957
|
end
|
|
1011
958
|
end
|
|
1012
|
-
|
|
959
|
+
|
|
1013
960
|
context 'when given value < existing value' do
|
|
1014
961
|
let(:given_views) { views - 1 }
|
|
1015
962
|
let(:given_members) { member_count - 1 }
|
|
@@ -1034,25 +981,27 @@ describe Mongoid::Contextual::Atomic do
|
|
|
1034
981
|
context 'when the named field does not yet exist on the document' do
|
|
1035
982
|
it 'sets the field to the argument' do
|
|
1036
983
|
context.send(min_method, new_field: 100)
|
|
1037
|
-
expect(band.reload.new_field).to
|
|
984
|
+
expect(band.reload.new_field).to eq 100
|
|
1038
985
|
end
|
|
1039
986
|
end
|
|
1040
987
|
|
|
1041
988
|
context 'when arguments are dates/times' do
|
|
1042
989
|
it 'picks the earliest date' do
|
|
1043
990
|
context.send(min_method, founded: founded - 1)
|
|
1044
|
-
expect(band.reload.founded).to
|
|
991
|
+
expect(band.reload.founded).to eq founded - 1
|
|
1045
992
|
end
|
|
1046
993
|
end
|
|
1047
994
|
end
|
|
1048
995
|
|
|
1049
996
|
context 'as itself' do
|
|
1050
997
|
let(:min_method) { :set_min }
|
|
998
|
+
|
|
1051
999
|
include_examples 'min-able comparisons'
|
|
1052
1000
|
end
|
|
1053
1001
|
|
|
1054
1002
|
context 'as #clamp_upper_bound' do
|
|
1055
1003
|
let(:min_method) { :clamp_upper_bound }
|
|
1004
|
+
|
|
1056
1005
|
include_examples 'min-able comparisons'
|
|
1057
1006
|
end
|
|
1058
1007
|
end
|
|
@@ -1067,7 +1016,8 @@ describe Mongoid::Contextual::Atomic do
|
|
|
1067
1016
|
Band.create!(
|
|
1068
1017
|
member_count: member_count,
|
|
1069
1018
|
founded: founded,
|
|
1070
|
-
views: views
|
|
1019
|
+
views: views
|
|
1020
|
+
)
|
|
1071
1021
|
end
|
|
1072
1022
|
|
|
1073
1023
|
let(:criteria) { Band.all }
|
|
@@ -1076,9 +1026,9 @@ describe Mongoid::Contextual::Atomic do
|
|
|
1076
1026
|
shared_examples_for 'max-able comparisons' do
|
|
1077
1027
|
shared_examples_for 'a max-able context' do
|
|
1078
1028
|
it 'chooses the larger value' do
|
|
1079
|
-
context.send(max_method,
|
|
1080
|
-
expect(band.reload.member_count).to
|
|
1081
|
-
expect(band.views).to
|
|
1029
|
+
context.send(max_method, 'member_count' => given_members, views: given_views)
|
|
1030
|
+
expect(band.reload.member_count).to eq [ member_count, given_members ].max
|
|
1031
|
+
expect(band.views).to eq [ views, given_views ].max
|
|
1082
1032
|
end
|
|
1083
1033
|
end
|
|
1084
1034
|
|
|
@@ -1106,25 +1056,27 @@ describe Mongoid::Contextual::Atomic do
|
|
|
1106
1056
|
context 'when the named field does not yet exist on the document' do
|
|
1107
1057
|
it 'sets the field to the argument' do
|
|
1108
1058
|
context.send(max_method, new_field: 100)
|
|
1109
|
-
expect(band.reload.new_field).to
|
|
1059
|
+
expect(band.reload.new_field).to eq 100
|
|
1110
1060
|
end
|
|
1111
1061
|
end
|
|
1112
1062
|
|
|
1113
1063
|
context 'when arguments are dates/times' do
|
|
1114
1064
|
it 'picks the earliest date' do
|
|
1115
1065
|
context.send(max_method, founded: founded + 1)
|
|
1116
|
-
expect(band.reload.founded).to
|
|
1066
|
+
expect(band.reload.founded).to eq founded + 1
|
|
1117
1067
|
end
|
|
1118
1068
|
end
|
|
1119
1069
|
end
|
|
1120
1070
|
|
|
1121
1071
|
context 'as itself' do
|
|
1122
1072
|
let(:max_method) { :set_max }
|
|
1073
|
+
|
|
1123
1074
|
include_examples 'max-able comparisons'
|
|
1124
1075
|
end
|
|
1125
1076
|
|
|
1126
1077
|
context 'as #clamp_lower_bound' do
|
|
1127
1078
|
let(:max_method) { :clamp_lower_bound }
|
|
1079
|
+
|
|
1128
1080
|
include_examples 'max-able comparisons'
|
|
1129
1081
|
end
|
|
1130
1082
|
end
|