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,158 +1,141 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# rubocop:todo all
|
|
3
2
|
|
|
4
|
-
require
|
|
3
|
+
require 'spec_helper'
|
|
5
4
|
|
|
6
5
|
describe Mongoid::Findable do
|
|
7
|
-
|
|
8
|
-
describe ".distinct" do
|
|
9
|
-
|
|
6
|
+
describe '.distinct' do
|
|
10
7
|
before do
|
|
11
|
-
Band.create!(name:
|
|
12
|
-
Band.create!(name:
|
|
8
|
+
Band.create!(name: 'Tool')
|
|
9
|
+
Band.create!(name: 'Photek')
|
|
13
10
|
end
|
|
14
11
|
|
|
15
|
-
it
|
|
16
|
-
expect(Band.distinct(:name).sort).to eq([
|
|
12
|
+
it 'returns the distinct values for the field' do
|
|
13
|
+
expect(Band.distinct(:name).sort).to eq(%w[Photek Tool])
|
|
17
14
|
end
|
|
18
15
|
end
|
|
19
16
|
|
|
20
|
-
describe
|
|
21
|
-
|
|
17
|
+
describe '.each' do
|
|
22
18
|
let!(:band) do
|
|
23
19
|
Band.create!
|
|
24
20
|
end
|
|
25
21
|
|
|
26
|
-
it
|
|
27
|
-
Band.
|
|
28
|
-
expect(band).to be_a(Band)
|
|
29
|
-
end
|
|
22
|
+
it 'iterates through all documents' do
|
|
23
|
+
expect(Band).to all(be_a(Band))
|
|
30
24
|
end
|
|
31
25
|
end
|
|
32
26
|
|
|
33
|
-
describe
|
|
34
|
-
|
|
27
|
+
describe '.each_with_index' do
|
|
35
28
|
let!(:band) do
|
|
36
29
|
Band.create!
|
|
37
30
|
end
|
|
38
31
|
|
|
39
|
-
it
|
|
40
|
-
Band.each_with_index do |
|
|
32
|
+
it 'iterates through all documents' do
|
|
33
|
+
Band.each_with_index do |_band, index|
|
|
41
34
|
expect(index).to eq(0)
|
|
42
35
|
end
|
|
43
36
|
end
|
|
44
37
|
end
|
|
45
38
|
|
|
46
|
-
describe
|
|
47
|
-
|
|
39
|
+
describe '.find_one_and_update' do
|
|
48
40
|
let!(:person) do
|
|
49
|
-
Person.create!(title:
|
|
41
|
+
Person.create!(title: 'Senior')
|
|
50
42
|
end
|
|
51
43
|
|
|
52
|
-
it
|
|
53
|
-
expect(Person.find_one_and_update(title:
|
|
44
|
+
it 'returns the document' do
|
|
45
|
+
expect(Person.find_one_and_update(title: 'Junior')).to eq(person)
|
|
54
46
|
end
|
|
55
47
|
end
|
|
56
48
|
|
|
57
|
-
describe
|
|
58
|
-
|
|
59
|
-
context "when collection is a embeds_many" do
|
|
60
|
-
|
|
49
|
+
describe '.find_by' do
|
|
50
|
+
context 'when collection is a embeds_many' do
|
|
61
51
|
let(:person) do
|
|
62
|
-
Person.create!(title:
|
|
52
|
+
Person.create!(title: 'sir')
|
|
63
53
|
end
|
|
64
54
|
|
|
65
55
|
let!(:message) do
|
|
66
56
|
person.messages.create!(body: 'foo')
|
|
67
57
|
end
|
|
68
58
|
|
|
69
|
-
context
|
|
70
|
-
|
|
71
|
-
it "returns the document" do
|
|
59
|
+
context 'when the document is found' do
|
|
60
|
+
it 'returns the document' do
|
|
72
61
|
expect(person.messages.find_by(body: 'foo')).to eq(message)
|
|
73
62
|
end
|
|
74
63
|
end
|
|
75
64
|
|
|
76
|
-
context
|
|
77
|
-
|
|
78
|
-
context "when raising a not found error" do
|
|
65
|
+
context 'when the document is not found' do
|
|
66
|
+
context 'when raising a not found error' do
|
|
79
67
|
config_override :raise_not_found_error, true
|
|
80
68
|
|
|
81
|
-
it
|
|
82
|
-
expect
|
|
69
|
+
it 'raises an error' do
|
|
70
|
+
expect do
|
|
83
71
|
person.messages.find_by(body: 'bar')
|
|
84
|
-
|
|
72
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound,
|
|
73
|
+
/Document not found for class Message with attributes/)
|
|
85
74
|
end
|
|
86
75
|
end
|
|
87
76
|
|
|
88
|
-
context
|
|
77
|
+
context 'when raising no error' do
|
|
89
78
|
config_override :raise_not_found_error, false
|
|
90
79
|
|
|
91
|
-
it
|
|
80
|
+
it 'returns nil' do
|
|
92
81
|
expect(person.messages.find_by(body: 'bar')).to be_nil
|
|
93
82
|
end
|
|
94
83
|
end
|
|
95
84
|
end
|
|
96
85
|
end
|
|
97
86
|
|
|
98
|
-
context
|
|
99
|
-
|
|
87
|
+
context 'when the document is found' do
|
|
100
88
|
let!(:person) do
|
|
101
|
-
Person.create!(title:
|
|
89
|
+
Person.create!(title: 'sir')
|
|
102
90
|
end
|
|
103
91
|
|
|
104
|
-
context
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
expect(Person.find_by(title: "sir")).to eq(person)
|
|
92
|
+
context 'when no block is provided' do
|
|
93
|
+
it 'returns the document' do
|
|
94
|
+
expect(Person.find_by(title: 'sir')).to eq(person)
|
|
108
95
|
end
|
|
109
96
|
end
|
|
110
97
|
|
|
111
|
-
context
|
|
112
|
-
|
|
98
|
+
context 'when a block is provided' do
|
|
113
99
|
let(:result) do
|
|
114
|
-
Person.find_by(title:
|
|
100
|
+
Person.find_by(title: 'sir') do |peep|
|
|
115
101
|
peep.age = 50
|
|
116
102
|
end
|
|
117
103
|
end
|
|
118
104
|
|
|
119
|
-
it
|
|
105
|
+
it 'yields the returned document' do
|
|
120
106
|
expect(result.age).to eq(50)
|
|
121
107
|
end
|
|
122
108
|
end
|
|
123
109
|
end
|
|
124
110
|
|
|
125
|
-
context
|
|
126
|
-
|
|
127
|
-
context "when raising a not found error" do
|
|
111
|
+
context 'when the document is not found' do
|
|
112
|
+
context 'when raising a not found error' do
|
|
128
113
|
config_override :raise_not_found_error, true
|
|
129
114
|
|
|
130
|
-
it
|
|
131
|
-
expect
|
|
132
|
-
Person.find_by(ssn:
|
|
133
|
-
|
|
115
|
+
it 'raises an error' do
|
|
116
|
+
expect do
|
|
117
|
+
Person.find_by(ssn: '333-22-1111')
|
|
118
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Person with attributes/)
|
|
134
119
|
end
|
|
135
120
|
end
|
|
136
121
|
|
|
137
|
-
context
|
|
122
|
+
context 'when raising no error' do
|
|
138
123
|
config_override :raise_not_found_error, false
|
|
139
124
|
|
|
140
|
-
context
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
expect(Person.find_by(ssn: "333-22-1111")).to be_nil
|
|
125
|
+
context 'when no block is provided' do
|
|
126
|
+
it 'returns nil' do
|
|
127
|
+
expect(Person.find_by(ssn: '333-22-1111')).to be_nil
|
|
144
128
|
end
|
|
145
129
|
end
|
|
146
130
|
|
|
147
|
-
context
|
|
148
|
-
|
|
131
|
+
context 'when a block is provided' do
|
|
149
132
|
let(:result) do
|
|
150
|
-
Person.find_by(ssn:
|
|
133
|
+
Person.find_by(ssn: '333-22-1111') do |peep|
|
|
151
134
|
peep.age = 50
|
|
152
135
|
end
|
|
153
136
|
end
|
|
154
137
|
|
|
155
|
-
it
|
|
138
|
+
it 'returns nil' do
|
|
156
139
|
expect(result).to be_nil
|
|
157
140
|
end
|
|
158
141
|
end
|
|
@@ -160,49 +143,118 @@ describe Mongoid::Findable do
|
|
|
160
143
|
end
|
|
161
144
|
end
|
|
162
145
|
|
|
163
|
-
describe
|
|
146
|
+
describe '#any?' do
|
|
147
|
+
context 'when called on collection with documents' do
|
|
148
|
+
before do
|
|
149
|
+
Band.create!(name: 'Tool')
|
|
150
|
+
end
|
|
164
151
|
|
|
165
|
-
|
|
152
|
+
it 'returns true' do
|
|
153
|
+
expect(Band.any?).to be true
|
|
154
|
+
end
|
|
155
|
+
end
|
|
166
156
|
|
|
167
|
-
|
|
168
|
-
|
|
157
|
+
context 'when called on collection with no documents' do
|
|
158
|
+
it 'returns false' do
|
|
159
|
+
expect(Band.any?).to be false
|
|
169
160
|
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
170
163
|
|
|
171
|
-
|
|
164
|
+
describe '#one?' do
|
|
165
|
+
context 'when called on collection with no documents' do
|
|
166
|
+
it 'returns false' do
|
|
167
|
+
expect(Band.one?).to be false
|
|
168
|
+
end
|
|
169
|
+
end
|
|
172
170
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
171
|
+
context 'when called on collection with one document' do
|
|
172
|
+
before do
|
|
173
|
+
Band.create!(name: 'Radiohead')
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
it 'returns true' do
|
|
177
|
+
expect(Band.one?).to be true
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
context 'when called on collection with multiple documents' do
|
|
182
|
+
before do
|
|
183
|
+
Band.create!(name: 'Tool')
|
|
184
|
+
Band.create!(name: 'Radiohead')
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it 'returns false' do
|
|
188
|
+
expect(Band.one?).to be false
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
describe '#many?' do
|
|
194
|
+
context 'when called on collection with no documents' do
|
|
195
|
+
it 'returns false' do
|
|
196
|
+
expect(Band.many?).to be false
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
context 'when called on collection with one document' do
|
|
201
|
+
before do
|
|
202
|
+
Band.create!(name: 'Radiohead')
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it 'returns false' do
|
|
206
|
+
expect(Band.many?).to be false
|
|
176
207
|
end
|
|
208
|
+
end
|
|
177
209
|
|
|
178
|
-
|
|
210
|
+
context 'when called on collection with multiple documents' do
|
|
211
|
+
before do
|
|
212
|
+
Band.create!(name: 'Radiohead')
|
|
213
|
+
Band.create!(name: 'Tool')
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it 'returns true' do
|
|
217
|
+
expect(Band.many?).to be true
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
179
221
|
|
|
222
|
+
describe 'find_by!' do
|
|
223
|
+
context 'when the document is found' do
|
|
224
|
+
let!(:person) do
|
|
225
|
+
Person.create!(title: 'sir')
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
context 'when no block is provided' do
|
|
229
|
+
it 'returns the document' do
|
|
230
|
+
expect(Person.find_by!(title: 'sir')).to eq(person)
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
context 'when a block is provided' do
|
|
180
235
|
let(:result) do
|
|
181
|
-
Person.find_by!(title:
|
|
236
|
+
Person.find_by!(title: 'sir') do |peep|
|
|
182
237
|
peep.age = 50
|
|
183
238
|
end
|
|
184
239
|
end
|
|
185
240
|
|
|
186
|
-
it
|
|
241
|
+
it 'yields the returned document' do
|
|
187
242
|
expect(result.age).to eq(50)
|
|
188
243
|
end
|
|
189
244
|
end
|
|
190
245
|
end
|
|
191
246
|
|
|
192
|
-
context
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Person with attributes/)
|
|
247
|
+
context 'when the document is not found' do
|
|
248
|
+
it 'raises an error' do
|
|
249
|
+
expect do
|
|
250
|
+
Person.find_by!(ssn: '333-22-1111')
|
|
251
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Person with attributes/)
|
|
198
252
|
end
|
|
199
253
|
end
|
|
200
254
|
end
|
|
201
255
|
|
|
202
|
-
[
|
|
203
|
-
|
|
256
|
+
%i[first one].each do |method|
|
|
204
257
|
describe "##{method}" do
|
|
205
|
-
|
|
206
258
|
let!(:person1) do
|
|
207
259
|
Person.create!
|
|
208
260
|
end
|
|
@@ -211,21 +263,21 @@ describe Mongoid::Findable do
|
|
|
211
263
|
Person.create!
|
|
212
264
|
end
|
|
213
265
|
|
|
214
|
-
it
|
|
266
|
+
it 'returns the first matching document' do
|
|
215
267
|
expect(Person.send(method)).to eq(person1)
|
|
216
268
|
end
|
|
217
269
|
|
|
218
|
-
it
|
|
270
|
+
it 'passes the limit through' do
|
|
219
271
|
expect(Person.send(method, 1)).to eq([ person1 ])
|
|
220
272
|
end
|
|
221
273
|
|
|
222
|
-
it
|
|
274
|
+
it 'returns nil when no documents are found' do
|
|
223
275
|
expect(Band.send(method)).to be_nil
|
|
224
276
|
end
|
|
225
277
|
end
|
|
226
278
|
end
|
|
227
279
|
|
|
228
|
-
describe
|
|
280
|
+
describe '#first!' do
|
|
229
281
|
let!(:person1) do
|
|
230
282
|
Person.create!
|
|
231
283
|
end
|
|
@@ -234,18 +286,18 @@ describe Mongoid::Findable do
|
|
|
234
286
|
Person.create!
|
|
235
287
|
end
|
|
236
288
|
|
|
237
|
-
it
|
|
289
|
+
it 'returns the first matching document' do
|
|
238
290
|
expect(Person.first!).to eq(person1)
|
|
239
291
|
end
|
|
240
292
|
|
|
241
|
-
it
|
|
293
|
+
it 'raises an error when there are no documents' do
|
|
242
294
|
expect do
|
|
243
295
|
Band.first!
|
|
244
296
|
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
|
|
245
297
|
end
|
|
246
298
|
end
|
|
247
299
|
|
|
248
|
-
describe
|
|
300
|
+
describe '#last' do
|
|
249
301
|
let!(:person1) do
|
|
250
302
|
Person.create!
|
|
251
303
|
end
|
|
@@ -254,20 +306,20 @@ describe Mongoid::Findable do
|
|
|
254
306
|
Person.create!
|
|
255
307
|
end
|
|
256
308
|
|
|
257
|
-
it
|
|
309
|
+
it 'returns the first matching document' do
|
|
258
310
|
expect(Person.last).to eq(person2)
|
|
259
311
|
end
|
|
260
312
|
|
|
261
|
-
it
|
|
313
|
+
it 'passes the limit through' do
|
|
262
314
|
expect(Person.last(1)).to eq([ person2 ])
|
|
263
315
|
end
|
|
264
316
|
|
|
265
|
-
it
|
|
317
|
+
it 'returns nil when no documents are found' do
|
|
266
318
|
expect(Band.last).to be_nil
|
|
267
319
|
end
|
|
268
320
|
end
|
|
269
321
|
|
|
270
|
-
describe
|
|
322
|
+
describe '#last!' do
|
|
271
323
|
let!(:person1) do
|
|
272
324
|
Person.create!
|
|
273
325
|
end
|
|
@@ -276,18 +328,18 @@ describe Mongoid::Findable do
|
|
|
276
328
|
Person.create!
|
|
277
329
|
end
|
|
278
330
|
|
|
279
|
-
it
|
|
331
|
+
it 'returns the last matching document' do
|
|
280
332
|
expect(Person.last!).to eq(person2)
|
|
281
333
|
end
|
|
282
334
|
|
|
283
|
-
it
|
|
335
|
+
it 'raises an error when there are no documents' do
|
|
284
336
|
expect do
|
|
285
337
|
Band.last!
|
|
286
338
|
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
|
|
287
339
|
end
|
|
288
340
|
end
|
|
289
341
|
|
|
290
|
-
describe
|
|
342
|
+
describe '#second' do
|
|
291
343
|
let!(:person1) do
|
|
292
344
|
Person.create!
|
|
293
345
|
end
|
|
@@ -296,16 +348,16 @@ describe Mongoid::Findable do
|
|
|
296
348
|
Person.create!
|
|
297
349
|
end
|
|
298
350
|
|
|
299
|
-
it
|
|
351
|
+
it 'returns the second matching document' do
|
|
300
352
|
expect(Person.second).to eq(person2)
|
|
301
353
|
end
|
|
302
354
|
|
|
303
|
-
it
|
|
355
|
+
it 'returns nil when no documents are found' do
|
|
304
356
|
expect(Band.second).to be_nil
|
|
305
357
|
end
|
|
306
358
|
end
|
|
307
359
|
|
|
308
|
-
describe
|
|
360
|
+
describe '#second!' do
|
|
309
361
|
let!(:person1) do
|
|
310
362
|
Person.create!
|
|
311
363
|
end
|
|
@@ -314,18 +366,18 @@ describe Mongoid::Findable do
|
|
|
314
366
|
Person.create!
|
|
315
367
|
end
|
|
316
368
|
|
|
317
|
-
it
|
|
369
|
+
it 'returns the second matching document' do
|
|
318
370
|
expect(Person.second!).to eq(person2)
|
|
319
371
|
end
|
|
320
372
|
|
|
321
|
-
it
|
|
373
|
+
it 'raises an error when there are no documents' do
|
|
322
374
|
expect do
|
|
323
375
|
Band.second!
|
|
324
376
|
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
|
|
325
377
|
end
|
|
326
378
|
end
|
|
327
379
|
|
|
328
|
-
describe
|
|
380
|
+
describe '#third' do
|
|
329
381
|
let!(:person1) do
|
|
330
382
|
Person.create!
|
|
331
383
|
end
|
|
@@ -338,16 +390,16 @@ describe Mongoid::Findable do
|
|
|
338
390
|
Person.create!
|
|
339
391
|
end
|
|
340
392
|
|
|
341
|
-
it
|
|
393
|
+
it 'returns the third matching document' do
|
|
342
394
|
expect(Person.third).to eq(person3)
|
|
343
395
|
end
|
|
344
396
|
|
|
345
|
-
it
|
|
397
|
+
it 'returns nil when no documents are found' do
|
|
346
398
|
expect(Band.third).to be_nil
|
|
347
399
|
end
|
|
348
400
|
end
|
|
349
401
|
|
|
350
|
-
describe
|
|
402
|
+
describe '#third!' do
|
|
351
403
|
let!(:person1) do
|
|
352
404
|
Person.create!
|
|
353
405
|
end
|
|
@@ -360,18 +412,18 @@ describe Mongoid::Findable do
|
|
|
360
412
|
Person.create!
|
|
361
413
|
end
|
|
362
414
|
|
|
363
|
-
it
|
|
415
|
+
it 'returns the third matching document' do
|
|
364
416
|
expect(Person.third!).to eq(person3)
|
|
365
417
|
end
|
|
366
418
|
|
|
367
|
-
it
|
|
419
|
+
it 'raises an error when there are no documents' do
|
|
368
420
|
expect do
|
|
369
421
|
Band.third!
|
|
370
422
|
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
|
|
371
423
|
end
|
|
372
424
|
end
|
|
373
425
|
|
|
374
|
-
describe
|
|
426
|
+
describe '#fourth' do
|
|
375
427
|
let!(:person1) do
|
|
376
428
|
Person.create!
|
|
377
429
|
end
|
|
@@ -388,16 +440,16 @@ describe Mongoid::Findable do
|
|
|
388
440
|
Person.create!
|
|
389
441
|
end
|
|
390
442
|
|
|
391
|
-
it
|
|
443
|
+
it 'returns the fourth matching document' do
|
|
392
444
|
expect(Person.fourth).to eq(person4)
|
|
393
445
|
end
|
|
394
446
|
|
|
395
|
-
it
|
|
447
|
+
it 'returns nil when no documents are found' do
|
|
396
448
|
expect(Band.fourth).to be_nil
|
|
397
449
|
end
|
|
398
450
|
end
|
|
399
451
|
|
|
400
|
-
describe
|
|
452
|
+
describe '#fourth!' do
|
|
401
453
|
let!(:person1) do
|
|
402
454
|
Person.create!
|
|
403
455
|
end
|
|
@@ -414,18 +466,18 @@ describe Mongoid::Findable do
|
|
|
414
466
|
Person.create!
|
|
415
467
|
end
|
|
416
468
|
|
|
417
|
-
it
|
|
469
|
+
it 'returns the fourth matching document' do
|
|
418
470
|
expect(Person.fourth!).to eq(person4)
|
|
419
471
|
end
|
|
420
472
|
|
|
421
|
-
it
|
|
473
|
+
it 'raises an error when there are no documents' do
|
|
422
474
|
expect do
|
|
423
475
|
Band.fourth!
|
|
424
476
|
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
|
|
425
477
|
end
|
|
426
478
|
end
|
|
427
479
|
|
|
428
|
-
describe
|
|
480
|
+
describe '#fifth' do
|
|
429
481
|
let!(:person1) do
|
|
430
482
|
Person.create!
|
|
431
483
|
end
|
|
@@ -446,16 +498,16 @@ describe Mongoid::Findable do
|
|
|
446
498
|
Person.create!
|
|
447
499
|
end
|
|
448
500
|
|
|
449
|
-
it
|
|
501
|
+
it 'returns the fifth matching document' do
|
|
450
502
|
expect(Person.fifth).to eq(person5)
|
|
451
503
|
end
|
|
452
504
|
|
|
453
|
-
it
|
|
505
|
+
it 'returns nil when no documents are found' do
|
|
454
506
|
expect(Band.fifth).to be_nil
|
|
455
507
|
end
|
|
456
508
|
end
|
|
457
509
|
|
|
458
|
-
describe
|
|
510
|
+
describe '#fifth!' do
|
|
459
511
|
let!(:person1) do
|
|
460
512
|
Person.create!
|
|
461
513
|
end
|
|
@@ -476,18 +528,18 @@ describe Mongoid::Findable do
|
|
|
476
528
|
Person.create!
|
|
477
529
|
end
|
|
478
530
|
|
|
479
|
-
it
|
|
531
|
+
it 'returns the fifth matching document' do
|
|
480
532
|
expect(Person.fifth!).to eq(person5)
|
|
481
533
|
end
|
|
482
534
|
|
|
483
|
-
it
|
|
535
|
+
it 'raises an error when there are no documents' do
|
|
484
536
|
expect do
|
|
485
537
|
Band.fifth!
|
|
486
538
|
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
|
|
487
539
|
end
|
|
488
540
|
end
|
|
489
541
|
|
|
490
|
-
describe
|
|
542
|
+
describe '#second_to_last' do
|
|
491
543
|
let!(:person1) do
|
|
492
544
|
Person.create!
|
|
493
545
|
end
|
|
@@ -508,16 +560,16 @@ describe Mongoid::Findable do
|
|
|
508
560
|
Person.create!
|
|
509
561
|
end
|
|
510
562
|
|
|
511
|
-
it
|
|
563
|
+
it 'returns the second to last matching document' do
|
|
512
564
|
expect(Person.second_to_last).to eq(person4)
|
|
513
565
|
end
|
|
514
566
|
|
|
515
|
-
it
|
|
567
|
+
it 'returns nil when no documents are found' do
|
|
516
568
|
expect(Band.second_to_last).to be_nil
|
|
517
569
|
end
|
|
518
570
|
end
|
|
519
571
|
|
|
520
|
-
describe
|
|
572
|
+
describe '#second_to_last!' do
|
|
521
573
|
let!(:person1) do
|
|
522
574
|
Person.create!
|
|
523
575
|
end
|
|
@@ -538,18 +590,18 @@ describe Mongoid::Findable do
|
|
|
538
590
|
Person.create!
|
|
539
591
|
end
|
|
540
592
|
|
|
541
|
-
it
|
|
593
|
+
it 'returns the second to last matching document' do
|
|
542
594
|
expect(Person.second_to_last!).to eq(person4)
|
|
543
595
|
end
|
|
544
596
|
|
|
545
|
-
it
|
|
597
|
+
it 'raises an error when there are no documents' do
|
|
546
598
|
expect do
|
|
547
599
|
Band.second_to_last!
|
|
548
600
|
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
|
|
549
601
|
end
|
|
550
602
|
end
|
|
551
603
|
|
|
552
|
-
describe
|
|
604
|
+
describe '#third_to_last' do
|
|
553
605
|
let!(:person1) do
|
|
554
606
|
Person.create!
|
|
555
607
|
end
|
|
@@ -570,16 +622,16 @@ describe Mongoid::Findable do
|
|
|
570
622
|
Person.create!
|
|
571
623
|
end
|
|
572
624
|
|
|
573
|
-
it
|
|
625
|
+
it 'returns the third to last matching document' do
|
|
574
626
|
expect(Person.third_to_last).to eq(person3)
|
|
575
627
|
end
|
|
576
628
|
|
|
577
|
-
it
|
|
629
|
+
it 'returns nil when no documents are found' do
|
|
578
630
|
expect(Band.third_to_last).to be_nil
|
|
579
631
|
end
|
|
580
632
|
end
|
|
581
633
|
|
|
582
|
-
describe
|
|
634
|
+
describe '#third_to_last!' do
|
|
583
635
|
let!(:person1) do
|
|
584
636
|
Person.create!
|
|
585
637
|
end
|
|
@@ -600,34 +652,30 @@ describe Mongoid::Findable do
|
|
|
600
652
|
Person.create!
|
|
601
653
|
end
|
|
602
654
|
|
|
603
|
-
it
|
|
655
|
+
it 'returns the third to last matching document' do
|
|
604
656
|
expect(Person.third_to_last!).to eq(person3)
|
|
605
657
|
end
|
|
606
658
|
|
|
607
|
-
it
|
|
659
|
+
it 'raises an error when there are no documents' do
|
|
608
660
|
expect do
|
|
609
661
|
Band.third_to_last!
|
|
610
662
|
end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
|
|
611
663
|
end
|
|
612
664
|
end
|
|
613
665
|
|
|
614
|
-
describe
|
|
615
|
-
|
|
616
|
-
context "when the document is found" do
|
|
617
|
-
|
|
666
|
+
describe '.first_or_create' do
|
|
667
|
+
context 'when the document is found' do
|
|
618
668
|
let!(:person) do
|
|
619
669
|
Person.create!
|
|
620
670
|
end
|
|
621
671
|
|
|
622
|
-
it
|
|
672
|
+
it 'returns the document' do
|
|
623
673
|
expect(Person.first_or_create).to eq(person)
|
|
624
674
|
end
|
|
625
675
|
end
|
|
626
676
|
|
|
627
|
-
context
|
|
628
|
-
|
|
629
|
-
context "when providing a document" do
|
|
630
|
-
|
|
677
|
+
context 'when the document is not found' do
|
|
678
|
+
context 'when providing a document' do
|
|
631
679
|
let!(:person) do
|
|
632
680
|
Person.create!
|
|
633
681
|
end
|
|
@@ -636,66 +684,60 @@ describe Mongoid::Findable do
|
|
|
636
684
|
Game.first_or_create(person: person)
|
|
637
685
|
end
|
|
638
686
|
|
|
639
|
-
it
|
|
687
|
+
it 'returns the new document' do
|
|
640
688
|
expect(from_db.person).to eq(person)
|
|
641
689
|
end
|
|
642
690
|
end
|
|
643
691
|
|
|
644
|
-
context
|
|
645
|
-
|
|
692
|
+
context 'when not providing a block' do
|
|
646
693
|
let!(:person) do
|
|
647
|
-
Person.first_or_create(title:
|
|
694
|
+
Person.first_or_create(title: 'Senorita')
|
|
648
695
|
end
|
|
649
696
|
|
|
650
|
-
it
|
|
697
|
+
it 'creates a persisted document' do
|
|
651
698
|
expect(person).to be_persisted
|
|
652
699
|
end
|
|
653
700
|
|
|
654
|
-
it
|
|
655
|
-
expect(person.title).to eq(
|
|
701
|
+
it 'sets the attributes' do
|
|
702
|
+
expect(person.title).to eq('Senorita')
|
|
656
703
|
end
|
|
657
704
|
end
|
|
658
705
|
|
|
659
|
-
context
|
|
660
|
-
|
|
706
|
+
context 'when providing a block' do
|
|
661
707
|
let!(:person) do
|
|
662
|
-
Person.first_or_create(title:
|
|
708
|
+
Person.first_or_create(title: 'Senorita') do |person|
|
|
663
709
|
person.pets = true
|
|
664
710
|
end
|
|
665
711
|
end
|
|
666
712
|
|
|
667
|
-
it
|
|
713
|
+
it 'creates a persisted document' do
|
|
668
714
|
expect(person).to be_persisted
|
|
669
715
|
end
|
|
670
716
|
|
|
671
|
-
it
|
|
672
|
-
expect(person.title).to eq(
|
|
717
|
+
it 'sets the attributes' do
|
|
718
|
+
expect(person.title).to eq('Senorita')
|
|
673
719
|
end
|
|
674
720
|
|
|
675
|
-
it
|
|
721
|
+
it 'calls the block' do
|
|
676
722
|
expect(person.pets).to be true
|
|
677
723
|
end
|
|
678
724
|
end
|
|
679
725
|
end
|
|
680
726
|
end
|
|
681
727
|
|
|
682
|
-
describe
|
|
683
|
-
|
|
684
|
-
context "when the document is found" do
|
|
685
|
-
|
|
728
|
+
describe '.first_or_initialize' do
|
|
729
|
+
context 'when the document is found' do
|
|
686
730
|
let!(:person) do
|
|
687
731
|
Person.create!
|
|
688
732
|
end
|
|
689
733
|
|
|
690
|
-
it
|
|
734
|
+
it 'returns the document' do
|
|
691
735
|
expect(Person.first_or_create).to eq(person)
|
|
692
736
|
end
|
|
693
737
|
end
|
|
694
738
|
|
|
695
|
-
context
|
|
696
|
-
|
|
697
|
-
context "when providing a document" do
|
|
698
|
-
|
|
739
|
+
context 'when the document is not found' do
|
|
740
|
+
context 'when providing a document' do
|
|
699
741
|
let!(:person) do
|
|
700
742
|
Person.create!
|
|
701
743
|
end
|
|
@@ -704,155 +746,147 @@ describe Mongoid::Findable do
|
|
|
704
746
|
Game.first_or_initialize(person: person)
|
|
705
747
|
end
|
|
706
748
|
|
|
707
|
-
it
|
|
749
|
+
it 'returns the new document' do
|
|
708
750
|
expect(found.person).to eq(person)
|
|
709
751
|
end
|
|
710
752
|
|
|
711
|
-
it
|
|
712
|
-
expect(found).
|
|
753
|
+
it 'does not save the document' do
|
|
754
|
+
expect(found).not_to be_persisted
|
|
713
755
|
end
|
|
714
756
|
end
|
|
715
757
|
|
|
716
|
-
context
|
|
717
|
-
|
|
758
|
+
context 'when not providing a block' do
|
|
718
759
|
before do
|
|
719
760
|
Person.delete_all
|
|
720
761
|
end
|
|
721
762
|
|
|
722
763
|
let!(:person) do
|
|
723
|
-
Person.first_or_initialize(title:
|
|
764
|
+
Person.first_or_initialize(title: 'esquire')
|
|
724
765
|
end
|
|
725
766
|
|
|
726
|
-
it
|
|
727
|
-
expect(person).
|
|
767
|
+
it 'creates a non persisted document' do
|
|
768
|
+
expect(person).not_to be_persisted
|
|
728
769
|
end
|
|
729
770
|
|
|
730
|
-
it
|
|
731
|
-
expect(person.title).to eq(
|
|
771
|
+
it 'sets the attributes' do
|
|
772
|
+
expect(person.title).to eq('esquire')
|
|
732
773
|
end
|
|
733
774
|
end
|
|
734
775
|
|
|
735
|
-
context
|
|
736
|
-
|
|
776
|
+
context 'when providing a block' do
|
|
737
777
|
let!(:person) do
|
|
738
|
-
Person.first_or_initialize(title:
|
|
778
|
+
Person.first_or_initialize(title: 'Senorita') do |person|
|
|
739
779
|
person.pets = true
|
|
740
780
|
end
|
|
741
781
|
end
|
|
742
782
|
|
|
743
|
-
it
|
|
744
|
-
expect(person).
|
|
783
|
+
it 'creates a new document' do
|
|
784
|
+
expect(person).not_to be_persisted
|
|
745
785
|
end
|
|
746
786
|
|
|
747
|
-
it
|
|
748
|
-
expect(person.title).to eq(
|
|
787
|
+
it 'sets the attributes' do
|
|
788
|
+
expect(person.title).to eq('Senorita')
|
|
749
789
|
end
|
|
750
790
|
|
|
751
|
-
it
|
|
791
|
+
it 'calls the block' do
|
|
752
792
|
expect(person.pets).to be true
|
|
753
793
|
end
|
|
754
794
|
end
|
|
755
795
|
end
|
|
756
796
|
end
|
|
757
797
|
|
|
758
|
-
describe
|
|
759
|
-
|
|
798
|
+
describe '.none' do
|
|
760
799
|
let!(:depeche) do
|
|
761
|
-
Band.create!(name:
|
|
800
|
+
Band.create!(name: 'Depeche Mode', likes: 3)
|
|
762
801
|
end
|
|
763
802
|
|
|
764
|
-
context
|
|
765
|
-
|
|
766
|
-
it "returns no records" do
|
|
803
|
+
context 'when not chaining any criteria' do
|
|
804
|
+
it 'returns no records' do
|
|
767
805
|
expect(Band.none).to be_empty
|
|
768
806
|
end
|
|
769
807
|
|
|
770
|
-
it
|
|
808
|
+
it 'has an empty count' do
|
|
771
809
|
expect(Band.none.count).to eq(0)
|
|
772
810
|
end
|
|
773
811
|
|
|
774
|
-
it
|
|
812
|
+
it 'returns nil for first' do
|
|
775
813
|
expect(Band.none.first).to be_nil
|
|
776
814
|
end
|
|
777
815
|
|
|
778
|
-
it
|
|
816
|
+
it 'returns nil for last' do
|
|
779
817
|
expect(Band.none.last).to be_nil
|
|
780
818
|
end
|
|
781
819
|
|
|
782
|
-
it
|
|
820
|
+
it 'returns zero for length' do
|
|
783
821
|
expect(Band.none.length).to eq(0)
|
|
784
822
|
end
|
|
785
823
|
|
|
786
|
-
it
|
|
824
|
+
it 'returns zero for size' do
|
|
787
825
|
expect(Band.none.size).to eq(0)
|
|
788
826
|
end
|
|
789
827
|
end
|
|
790
828
|
|
|
791
|
-
context
|
|
792
|
-
|
|
829
|
+
context 'when chaining criteria after the none' do
|
|
793
830
|
let(:criteria) do
|
|
794
|
-
Band.none.where(name:
|
|
831
|
+
Band.none.where(name: 'Depeche Mode')
|
|
795
832
|
end
|
|
796
833
|
|
|
797
|
-
it
|
|
834
|
+
it 'returns no records' do
|
|
798
835
|
expect(criteria).to be_empty
|
|
799
836
|
end
|
|
800
837
|
|
|
801
|
-
it
|
|
838
|
+
it 'has an empty count' do
|
|
802
839
|
expect(criteria.count).to eq(0)
|
|
803
840
|
end
|
|
804
841
|
|
|
805
|
-
it
|
|
842
|
+
it 'returns nil for first' do
|
|
806
843
|
expect(criteria.first).to be_nil
|
|
807
844
|
end
|
|
808
845
|
|
|
809
|
-
it
|
|
846
|
+
it 'returns nil for last' do
|
|
810
847
|
expect(criteria.last).to be_nil
|
|
811
848
|
end
|
|
812
849
|
|
|
813
|
-
it
|
|
850
|
+
it 'returns zero for length' do
|
|
814
851
|
expect(criteria.length).to eq(0)
|
|
815
852
|
end
|
|
816
853
|
|
|
817
|
-
it
|
|
854
|
+
it 'returns zero for size' do
|
|
818
855
|
expect(criteria.size).to eq(0)
|
|
819
856
|
end
|
|
820
857
|
end
|
|
821
858
|
end
|
|
822
859
|
|
|
823
|
-
describe
|
|
824
|
-
|
|
860
|
+
describe '.pluck' do
|
|
825
861
|
let!(:depeche) do
|
|
826
|
-
Band.create!(name:
|
|
862
|
+
Band.create!(name: 'Depeche Mode', likes: 3)
|
|
827
863
|
end
|
|
828
864
|
|
|
829
865
|
let!(:tool) do
|
|
830
|
-
Band.create!(name:
|
|
866
|
+
Band.create!(name: 'Tool', likes: 3)
|
|
831
867
|
end
|
|
832
868
|
|
|
833
869
|
let!(:photek) do
|
|
834
|
-
Band.create!(name:
|
|
870
|
+
Band.create!(name: 'Photek', likes: 1)
|
|
835
871
|
end
|
|
836
872
|
|
|
837
|
-
context
|
|
838
|
-
|
|
873
|
+
context 'when field values exist' do
|
|
839
874
|
let(:plucked) do
|
|
840
875
|
Band.pluck(:name)
|
|
841
876
|
end
|
|
842
877
|
|
|
843
|
-
it
|
|
844
|
-
expect(plucked).to eq([
|
|
878
|
+
it 'returns the field values' do
|
|
879
|
+
expect(plucked).to eq([ 'Depeche Mode', 'Tool', 'Photek' ])
|
|
845
880
|
end
|
|
846
881
|
end
|
|
847
882
|
|
|
848
|
-
context
|
|
849
|
-
|
|
883
|
+
context 'when field values do not exist' do
|
|
850
884
|
let(:plucked) do
|
|
851
885
|
Band.pluck(:follows)
|
|
852
886
|
end
|
|
853
887
|
|
|
854
|
-
it
|
|
855
|
-
expect(plucked).to eq([nil, nil, nil])
|
|
888
|
+
it 'returns an array with nil values' do
|
|
889
|
+
expect(plucked).to eq([ nil, nil, nil ])
|
|
856
890
|
end
|
|
857
891
|
end
|
|
858
892
|
end
|
|
@@ -860,11 +894,11 @@ describe Mongoid::Findable do
|
|
|
860
894
|
describe '.count' do
|
|
861
895
|
context 'when the collection is not empty' do
|
|
862
896
|
before do
|
|
863
|
-
Band.create!(name:
|
|
864
|
-
Band.create!(name:
|
|
897
|
+
Band.create!(name: 'Tool')
|
|
898
|
+
Band.create!(name: 'Photek')
|
|
865
899
|
end
|
|
866
900
|
|
|
867
|
-
it 'returns the
|
|
901
|
+
it 'returns the correct count' do
|
|
868
902
|
expect(Band.count).to eq(2)
|
|
869
903
|
end
|
|
870
904
|
end
|
|
@@ -873,8 +907,8 @@ describe Mongoid::Findable do
|
|
|
873
907
|
describe '.estimated_count' do
|
|
874
908
|
context 'when the collection is not empty' do
|
|
875
909
|
before do
|
|
876
|
-
Band.create!(name:
|
|
877
|
-
Band.create!(name:
|
|
910
|
+
Band.create!(name: 'Tool')
|
|
911
|
+
Band.create!(name: 'Photek')
|
|
878
912
|
end
|
|
879
913
|
|
|
880
914
|
it 'returns the correct count' do
|
|
@@ -890,9 +924,7 @@ describe Mongoid::Findable do
|
|
|
890
924
|
end
|
|
891
925
|
|
|
892
926
|
Mongoid::Criteria::Queryable::Selectable.forwardables.each do |method|
|
|
893
|
-
|
|
894
927
|
describe "##{method}" do
|
|
895
|
-
|
|
896
928
|
it "forwards the #{method} to the criteria" do
|
|
897
929
|
expect(Band).to respond_to(method)
|
|
898
930
|
end
|
|
@@ -901,7 +933,7 @@ describe Mongoid::Findable do
|
|
|
901
933
|
|
|
902
934
|
context 'when Mongoid is configured to use activesupport time zone' do
|
|
903
935
|
config_override :use_utc, false
|
|
904
|
-
time_zone_override
|
|
936
|
+
time_zone_override 'Asia/Kolkata'
|
|
905
937
|
|
|
906
938
|
let!(:time) do
|
|
907
939
|
Time.current.tap do |t|
|
|
@@ -924,7 +956,7 @@ describe Mongoid::Findable do
|
|
|
924
956
|
end
|
|
925
957
|
|
|
926
958
|
it 'loads other fields accurately' do
|
|
927
|
-
expect(User.distinct(:name)).to
|
|
959
|
+
expect(User.distinct(:name)).to contain_exactly('Tom')
|
|
928
960
|
end
|
|
929
961
|
end
|
|
930
962
|
end
|