mongoid 7.3.5 → 7.5.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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +17 -17
- data/README.md +3 -3
- data/lib/config/locales/en.yml +28 -20
- data/lib/mongoid/association/accessors.rb +0 -27
- data/lib/mongoid/association/bindable.rb +0 -21
- data/lib/mongoid/association/builders.rb +0 -9
- data/lib/mongoid/association/constrainable.rb +0 -3
- data/lib/mongoid/association/depending.rb +0 -7
- data/lib/mongoid/association/eager_loadable.rb +0 -3
- data/lib/mongoid/association/embedded/batchable.rb +12 -59
- data/lib/mongoid/association/embedded/cyclic.rb +2 -11
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +0 -3
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +0 -13
- data/lib/mongoid/association/embedded/embedded_in.rb +0 -23
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +0 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +31 -44
- data/lib/mongoid/association/embedded/embeds_many.rb +0 -31
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +0 -3
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +26 -14
- data/lib/mongoid/association/embedded/embeds_one.rb +0 -27
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +26 -5
- data/lib/mongoid/association/many.rb +0 -17
- data/lib/mongoid/association/marshalable.rb +0 -5
- data/lib/mongoid/association/nested/many.rb +0 -11
- data/lib/mongoid/association/nested/nested_buildable.rb +0 -9
- data/lib/mongoid/association/nested/one.rb +1 -16
- data/lib/mongoid/association/nested.rb +0 -3
- data/lib/mongoid/association/one.rb +1 -10
- data/lib/mongoid/association/options.rb +0 -33
- data/lib/mongoid/association/proxy.rb +0 -21
- data/lib/mongoid/association/referenced/auto_save.rb +0 -9
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +0 -7
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +4 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +0 -13
- data/lib/mongoid/association/referenced/belongs_to.rb +9 -34
- data/lib/mongoid/association/referenced/counter_cache.rb +2 -15
- data/lib/mongoid/association/referenced/eager.rb +3 -24
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +12 -39
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +11 -38
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -64
- data/lib/mongoid/association/referenced/has_many/proxy.rb +20 -63
- data/lib/mongoid/association/referenced/has_many.rb +12 -39
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +3 -4
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -15
- data/lib/mongoid/association/referenced/has_one/proxy.rb +0 -9
- data/lib/mongoid/association/referenced/has_one.rb +9 -32
- data/lib/mongoid/association/referenced/syncable.rb +0 -17
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +0 -1
- data/lib/mongoid/association/relatable.rb +0 -61
- data/lib/mongoid/association.rb +0 -17
- data/lib/mongoid/atomic/modifiers.rb +4 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +0 -24
- data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
- data/lib/mongoid/atomic/paths/embedded.rb +0 -3
- data/lib/mongoid/atomic/paths/root.rb +0 -5
- data/lib/mongoid/atomic/paths.rb +0 -1
- data/lib/mongoid/atomic.rb +1 -42
- data/lib/mongoid/attributes/dynamic.rb +0 -17
- data/lib/mongoid/attributes/nested.rb +0 -5
- data/lib/mongoid/attributes/processing.rb +1 -18
- data/lib/mongoid/attributes/projector.rb +0 -1
- data/lib/mongoid/attributes/readonly.rb +0 -5
- data/lib/mongoid/attributes.rb +0 -33
- data/lib/mongoid/cacheable.rb +1 -6
- data/lib/mongoid/changeable.rb +3 -59
- data/lib/mongoid/clients/factory.rb +0 -7
- data/lib/mongoid/clients/options.rb +0 -5
- data/lib/mongoid/clients/sessions.rb +0 -7
- data/lib/mongoid/clients/storage_options.rb +0 -7
- data/lib/mongoid/clients/validators/storage.rb +0 -9
- data/lib/mongoid/clients/validators.rb +0 -1
- data/lib/mongoid/clients.rb +0 -9
- data/lib/mongoid/composable.rb +0 -7
- data/lib/mongoid/config/environment.rb +21 -6
- data/lib/mongoid/config/options.rb +0 -11
- data/lib/mongoid/config/validators/client.rb +0 -17
- data/lib/mongoid/config/validators/option.rb +0 -3
- data/lib/mongoid/config/validators.rb +0 -1
- data/lib/mongoid/config.rb +43 -30
- data/lib/mongoid/contextual/aggregable/memory.rb +14 -11
- data/lib/mongoid/contextual/aggregable/mongo.rb +15 -20
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +0 -25
- data/lib/mongoid/contextual/command.rb +0 -5
- data/lib/mongoid/contextual/geo_near.rb +1 -34
- data/lib/mongoid/contextual/map_reduce.rb +0 -31
- data/lib/mongoid/contextual/memory.rb +147 -70
- data/lib/mongoid/contextual/mongo.rb +249 -103
- data/lib/mongoid/contextual/none.rb +83 -28
- data/lib/mongoid/contextual/queryable.rb +0 -3
- data/lib/mongoid/contextual.rb +0 -5
- data/lib/mongoid/copyable.rb +0 -5
- data/lib/mongoid/criteria/findable.rb +0 -13
- data/lib/mongoid/criteria/includable.rb +0 -9
- data/lib/mongoid/criteria/inspectable.rb +0 -3
- data/lib/mongoid/criteria/marshalable.rb +0 -5
- data/lib/mongoid/criteria/modifiable.rb +0 -19
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +0 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +0 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -1
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -25
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +0 -3
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +0 -3
- data/lib/mongoid/criteria/queryable/extensions/date.rb +0 -7
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +0 -5
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -24
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +0 -11
- data/lib/mongoid/criteria/queryable/extensions/object.rb +1 -28
- data/lib/mongoid/criteria/queryable/extensions/range.rb +38 -16
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +0 -9
- data/lib/mongoid/criteria/queryable/extensions/set.rb +0 -3
- data/lib/mongoid/criteria/queryable/extensions/string.rb +0 -17
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +0 -9
- data/lib/mongoid/criteria/queryable/extensions/time.rb +0 -7
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +0 -7
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -1
- data/lib/mongoid/criteria/queryable/key.rb +1 -14
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +22 -30
- data/lib/mongoid/criteria/queryable/optional.rb +0 -45
- data/lib/mongoid/criteria/queryable/options.rb +0 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +0 -13
- data/lib/mongoid/criteria/queryable/selectable.rb +45 -76
- data/lib/mongoid/criteria/queryable/selector.rb +0 -17
- data/lib/mongoid/criteria/queryable/smash.rb +0 -11
- data/lib/mongoid/criteria/queryable/storable.rb +6 -2
- data/lib/mongoid/criteria/queryable.rb +0 -7
- data/lib/mongoid/criteria/scopable.rb +25 -19
- data/lib/mongoid/criteria.rb +2 -57
- data/lib/mongoid/document.rb +1 -50
- data/lib/mongoid/equality.rb +26 -10
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/callback.rb +0 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
- data/lib/mongoid/errors/delete_restriction.rb +0 -3
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
- data/lib/mongoid/errors/document_not_found.rb +23 -15
- data/lib/mongoid/errors/eager_load.rb +0 -3
- data/lib/mongoid/errors/empty_config_file.rb +0 -1
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
- data/lib/mongoid/errors/invalid_collection.rb +0 -1
- data/lib/mongoid/errors/invalid_config_file.rb +0 -1
- data/lib/mongoid/errors/invalid_config_option.rb +0 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +0 -3
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +0 -1
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +0 -1
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +0 -1
- data/lib/mongoid/errors/invalid_expression_operator.rb +0 -1
- data/lib/mongoid/errors/invalid_field.rb +0 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +0 -1
- data/lib/mongoid/errors/invalid_field_option.rb +0 -3
- data/lib/mongoid/errors/invalid_find.rb +0 -3
- data/lib/mongoid/errors/invalid_includes.rb +0 -3
- data/lib/mongoid/errors/invalid_index.rb +0 -3
- data/lib/mongoid/errors/invalid_options.rb +0 -3
- data/lib/mongoid/errors/invalid_path.rb +0 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
- data/lib/mongoid/errors/invalid_query.rb +0 -1
- data/lib/mongoid/errors/invalid_relation.rb +0 -7
- data/lib/mongoid/errors/invalid_relation_option.rb +0 -3
- data/lib/mongoid/errors/invalid_scope.rb +0 -3
- data/lib/mongoid/errors/invalid_session_use.rb +1 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +0 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +0 -3
- data/lib/mongoid/errors/invalid_time.rb +0 -3
- data/lib/mongoid/errors/invalid_value.rb +0 -1
- data/lib/mongoid/errors/inverse_not_found.rb +0 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
- data/lib/mongoid/errors/mixed_relations.rb +0 -3
- data/lib/mongoid/errors/mongoid_error.rb +0 -9
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +0 -3
- data/lib/mongoid/errors/no_client_config.rb +0 -3
- data/lib/mongoid/errors/no_client_database.rb +0 -3
- data/lib/mongoid/errors/no_client_hosts.rb +0 -3
- data/lib/mongoid/errors/no_clients_config.rb +0 -3
- data/lib/mongoid/errors/no_default_client.rb +0 -3
- data/lib/mongoid/errors/no_environment.rb +0 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
- data/lib/mongoid/errors/no_metadata.rb +0 -3
- data/lib/mongoid/errors/no_parent.rb +0 -3
- data/lib/mongoid/errors/readonly_attribute.rb +0 -3
- data/lib/mongoid/errors/readonly_document.rb +1 -6
- data/lib/mongoid/errors/scope_overwrite.rb +0 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +0 -1
- data/lib/mongoid/errors/unknown_attribute.rb +0 -3
- data/lib/mongoid/errors/unknown_model.rb +0 -3
- data/lib/mongoid/errors/unsaved_document.rb +1 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
- data/lib/mongoid/errors/validations.rb +0 -1
- data/lib/mongoid/errors.rb +0 -1
- data/lib/mongoid/evolvable.rb +0 -3
- data/lib/mongoid/extensions/array.rb +3 -29
- data/lib/mongoid/extensions/big_decimal.rb +0 -11
- data/lib/mongoid/extensions/boolean.rb +0 -3
- data/lib/mongoid/extensions/date.rb +0 -9
- data/lib/mongoid/extensions/date_time.rb +0 -9
- data/lib/mongoid/extensions/decimal128.rb +0 -5
- data/lib/mongoid/extensions/false_class.rb +1 -6
- data/lib/mongoid/extensions/float.rb +0 -7
- data/lib/mongoid/extensions/hash.rb +0 -27
- data/lib/mongoid/extensions/integer.rb +0 -9
- data/lib/mongoid/extensions/module.rb +0 -3
- data/lib/mongoid/extensions/nil_class.rb +0 -5
- data/lib/mongoid/extensions/object.rb +1 -40
- data/lib/mongoid/extensions/object_id.rb +0 -7
- data/lib/mongoid/extensions/range.rb +0 -11
- data/lib/mongoid/extensions/regexp.rb +0 -3
- data/lib/mongoid/extensions/set.rb +0 -7
- data/lib/mongoid/extensions/string.rb +1 -30
- data/lib/mongoid/extensions/symbol.rb +0 -7
- data/lib/mongoid/extensions/time.rb +0 -11
- data/lib/mongoid/extensions/time_with_zone.rb +13 -9
- data/lib/mongoid/extensions/true_class.rb +1 -6
- data/lib/mongoid/extensions.rb +15 -3
- data/lib/mongoid/factory.rb +1 -2
- data/lib/mongoid/fields/foreign_key.rb +0 -21
- data/lib/mongoid/fields/localized.rb +0 -11
- data/lib/mongoid/fields/standard.rb +0 -33
- data/lib/mongoid/fields/validators/macro.rb +0 -9
- data/lib/mongoid/fields/validators.rb +0 -1
- data/lib/mongoid/fields.rb +191 -60
- data/lib/mongoid/findable.rb +20 -10
- data/lib/mongoid/indexable/specification.rb +0 -15
- data/lib/mongoid/indexable/validators/options.rb +0 -7
- data/lib/mongoid/indexable.rb +1 -18
- data/lib/mongoid/inspectable.rb +1 -10
- data/lib/mongoid/interceptable.rb +0 -25
- data/lib/mongoid/loggable.rb +0 -9
- data/lib/mongoid/matchable.rb +0 -5
- data/lib/mongoid/matcher/eq_impl.rb +37 -2
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +6 -1
- data/lib/mongoid/persistable/creatable.rb +1 -20
- data/lib/mongoid/persistable/deletable.rb +0 -17
- data/lib/mongoid/persistable/destroyable.rb +0 -7
- data/lib/mongoid/persistable/incrementable.rb +0 -5
- data/lib/mongoid/persistable/logical.rb +0 -5
- data/lib/mongoid/persistable/poppable.rb +0 -5
- data/lib/mongoid/persistable/pullable.rb +0 -7
- data/lib/mongoid/persistable/pushable.rb +0 -7
- data/lib/mongoid/persistable/renamable.rb +0 -5
- data/lib/mongoid/persistable/savable.rb +0 -7
- data/lib/mongoid/persistable/settable.rb +0 -5
- data/lib/mongoid/persistable/unsettable.rb +0 -5
- data/lib/mongoid/persistable/updatable.rb +2 -17
- data/lib/mongoid/persistable/upsertable.rb +0 -7
- data/lib/mongoid/persistable.rb +0 -23
- data/lib/mongoid/persistence_context.rb +0 -27
- data/lib/mongoid/positional.rb +0 -5
- data/lib/mongoid/query_cache.rb +0 -33
- data/lib/mongoid/railtie.rb +0 -15
- data/lib/mongoid/railties/controller_runtime.rb +0 -1
- data/lib/mongoid/reloadable.rb +4 -16
- data/lib/mongoid/scopable.rb +6 -34
- data/lib/mongoid/selectable.rb +0 -9
- data/lib/mongoid/serializable.rb +0 -15
- data/lib/mongoid/shardable.rb +0 -7
- data/lib/mongoid/stateful.rb +0 -9
- data/lib/mongoid/stringified_symbol.rb +2 -3
- data/lib/mongoid/tasks/database.rb +0 -5
- data/lib/mongoid/threaded/lifecycle.rb +0 -21
- data/lib/mongoid/threaded.rb +0 -55
- data/lib/mongoid/timestamps/created/short.rb +0 -1
- data/lib/mongoid/timestamps/created.rb +0 -1
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +0 -7
- data/lib/mongoid/timestamps/updated/short.rb +0 -1
- data/lib/mongoid/timestamps/updated.rb +0 -3
- data/lib/mongoid/timestamps.rb +0 -1
- data/lib/mongoid/touchable.rb +0 -7
- data/lib/mongoid/traversable.rb +67 -53
- data/lib/mongoid/validatable/associated.rb +0 -3
- data/lib/mongoid/validatable/format.rb +0 -1
- data/lib/mongoid/validatable/length.rb +0 -1
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -7
- data/lib/mongoid/validatable/presence.rb +1 -8
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +15 -30
- data/lib/mongoid/validatable.rb +1 -22
- data/lib/mongoid/version.rb +1 -2
- data/lib/mongoid/warnings.rb +29 -0
- data/lib/mongoid.rb +1 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +0 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -3
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid_generator.rb +0 -1
- data/lib/rails/mongoid.rb +0 -3
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +20 -15
- data/spec/integration/associations/belongs_to_spec.rb +0 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +0 -1
- data/spec/integration/associations/embeds_many_spec.rb +0 -1
- data/spec/integration/associations/embeds_one_spec.rb +0 -1
- data/spec/integration/associations/foreign_key_spec.rb +0 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
- data/spec/integration/associations/has_many_spec.rb +0 -1
- data/spec/integration/associations/has_one_spec.rb +0 -1
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +0 -1
- data/spec/integration/associations/reverse_population_spec.rb +0 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +0 -1
- data/spec/integration/bson_regexp_raw_spec.rb +0 -1
- data/spec/integration/callbacks_models.rb +12 -0
- data/spec/integration/callbacks_spec.rb +18 -6
- data/spec/integration/contextual/empty_spec.rb +0 -1
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +0 -1
- data/spec/integration/criteria/default_scope_spec.rb +51 -0
- data/spec/integration/criteria/logical_spec.rb +30 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +0 -1
- data/spec/integration/discriminator_value_spec.rb +0 -1
- data/spec/integration/document_spec.rb +0 -1
- data/spec/integration/i18n_fallbacks_spec.rb +15 -2
- data/spec/integration/matcher_examples_spec.rb +0 -1
- data/spec/integration/matcher_operator_spec.rb +27 -3
- data/spec/integration/matcher_spec.rb +95 -1
- data/spec/integration/server_query_spec.rb +0 -1
- data/spec/integration/shardable_spec.rb +0 -1
- data/spec/integration/stringified_symbol_field_spec.rb +14 -1
- data/spec/lite_spec_helper.rb +1 -2
- data/spec/mongoid/association/accessors_spec.rb +44 -15
- data/spec/mongoid/association/auto_save_spec.rb +72 -34
- data/spec/mongoid/association/builders_spec.rb +1 -2
- data/spec/mongoid/association/constrainable_spec.rb +0 -1
- data/spec/mongoid/association/counter_cache_spec.rb +32 -33
- data/spec/mongoid/association/depending_spec.rb +12 -13
- data/spec/mongoid/association/eager_spec.rb +4 -5
- data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +13 -14
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +384 -156
- data/spec/mongoid/association/embedded/embeds_many_models.rb +0 -122
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +21 -22
- 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 +0 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -1
- data/spec/mongoid/association/macros_spec.rb +9 -10
- data/spec/mongoid/association/nested/many_spec.rb +0 -1
- data/spec/mongoid/association/nested/one_spec.rb +0 -1
- data/spec/mongoid/association/options_spec.rb +0 -1
- data/spec/mongoid/association/polymorphic_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +55 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +57 -53
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +22 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +179 -162
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +18 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +21 -1
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +21 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +113 -33
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +225 -178
- data/spec/mongoid/association/referenced/has_many_models.rb +18 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +21 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +51 -8
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +26 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +18 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +21 -1
- data/spec/mongoid/association/reflections_spec.rb +0 -1
- data/spec/mongoid/association/syncable_spec.rb +31 -32
- data/spec/mongoid/association_spec.rb +0 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
- data/spec/mongoid/atomic/paths_spec.rb +0 -1
- data/spec/mongoid/atomic_spec.rb +28 -7
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +66 -67
- data/spec/mongoid/attributes/projector_spec.rb +5 -2
- data/spec/mongoid/attributes/readonly_spec.rb +22 -23
- data/spec/mongoid/attributes_spec.rb +32 -33
- data/spec/mongoid/cacheable_spec.rb +1 -2
- data/spec/mongoid/changeable_spec.rb +35 -36
- data/spec/mongoid/clients/factory_spec.rb +11 -13
- data/spec/mongoid/clients/options_spec.rb +5 -5
- data/spec/mongoid/clients/sessions_spec.rb +22 -23
- data/spec/mongoid/clients/transactions_spec.rb +49 -27
- data/spec/mongoid/clients_spec.rb +6 -7
- data/spec/mongoid/composable_spec.rb +0 -1
- data/spec/mongoid/config/environment_spec.rb +39 -2
- data/spec/mongoid/config/options_spec.rb +0 -1
- data/spec/mongoid/config_spec.rb +154 -4
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +51 -12
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +46 -47
- data/spec/mongoid/contextual/geo_near_spec.rb +17 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -3
- data/spec/mongoid/contextual/memory_spec.rb +849 -89
- data/spec/mongoid/contextual/mongo_spec.rb +1185 -160
- data/spec/mongoid/contextual/none_spec.rb +43 -72
- data/spec/mongoid/copyable_spec.rb +12 -13
- data/spec/mongoid/copyable_spec_models.rb +0 -1
- data/spec/mongoid/criteria/findable_spec.rb +23 -24
- data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +0 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +36 -37
- data/spec/mongoid/criteria/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +0 -1
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +227 -55
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/selector_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
- data/spec/mongoid/criteria/scopable_spec.rb +127 -1
- data/spec/mongoid/criteria_projection_spec.rb +3 -4
- data/spec/mongoid/criteria_spec.rb +523 -187
- data/spec/mongoid/document_fields_spec.rb +0 -1
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +0 -1
- data/spec/mongoid/document_spec.rb +11 -33
- data/spec/mongoid/equality_spec.rb +142 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
- data/spec/mongoid/errors/callback_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +49 -1
- data/spec/mongoid/errors/eager_load_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +1 -2
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_database_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_hosts_spec.rb +0 -1
- data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_environment_spec.rb +0 -1
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
- data/spec/mongoid/errors/no_parent_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +0 -1
- data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +0 -1
- data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
- data/spec/mongoid/errors/validations_spec.rb +0 -1
- data/spec/mongoid/extensions/array_spec.rb +0 -1
- data/spec/mongoid/extensions/big_decimal_spec.rb +0 -1
- data/spec/mongoid/extensions/binary_spec.rb +0 -1
- data/spec/mongoid/extensions/boolean_spec.rb +0 -1
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +0 -1
- data/spec/mongoid/extensions/date_spec.rb +0 -1
- data/spec/mongoid/extensions/date_time_spec.rb +0 -1
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
- data/spec/mongoid/extensions/false_class_spec.rb +0 -1
- data/spec/mongoid/extensions/float_spec.rb +0 -1
- data/spec/mongoid/extensions/hash_spec.rb +0 -1
- data/spec/mongoid/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/extensions/module_spec.rb +0 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/extensions/object_id_spec.rb +0 -1
- data/spec/mongoid/extensions/object_spec.rb +0 -1
- data/spec/mongoid/extensions/range_spec.rb +0 -1
- data/spec/mongoid/extensions/regexp_spec.rb +0 -1
- data/spec/mongoid/extensions/set_spec.rb +0 -1
- data/spec/mongoid/extensions/string_spec.rb +2 -3
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +0 -1
- data/spec/mongoid/extensions/symbol_spec.rb +0 -1
- data/spec/mongoid/extensions/time_spec.rb +0 -1
- data/spec/mongoid/extensions/time_with_zone_spec.rb +0 -1
- data/spec/mongoid/extensions/true_class_spec.rb +0 -1
- data/spec/mongoid/extensions_spec.rb +14 -3
- data/spec/mongoid/factory_spec.rb +1 -1
- data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
- data/spec/mongoid/fields/localized_spec.rb +0 -1
- data/spec/mongoid/fields/standard_spec.rb +0 -1
- data/spec/mongoid/fields_spec.rb +326 -31
- data/spec/mongoid/findable_spec.rb +51 -22
- data/spec/mongoid/indexable/specification_spec.rb +0 -1
- data/spec/mongoid/indexable_spec.rb +0 -1
- data/spec/mongoid/inspectable_spec.rb +0 -1
- data/spec/mongoid/interceptable_spec.rb +102 -95
- data/spec/mongoid/loggable_spec.rb +0 -1
- data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -2
- data/spec/mongoid/persistable/creatable_spec.rb +2 -3
- data/spec/mongoid/persistable/deletable_spec.rb +18 -19
- data/spec/mongoid/persistable/destroyable_spec.rb +8 -9
- data/spec/mongoid/persistable/incrementable_spec.rb +8 -9
- data/spec/mongoid/persistable/logical_spec.rb +4 -5
- data/spec/mongoid/persistable/poppable_spec.rb +4 -5
- data/spec/mongoid/persistable/pullable_spec.rb +8 -9
- data/spec/mongoid/persistable/pushable_spec.rb +8 -9
- data/spec/mongoid/persistable/renamable_spec.rb +3 -4
- data/spec/mongoid/persistable/savable_spec.rb +15 -11
- data/spec/mongoid/persistable/settable_spec.rb +9 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +4 -5
- data/spec/mongoid/persistable/updatable_spec.rb +41 -24
- data/spec/mongoid/persistable/upsertable_spec.rb +1 -2
- data/spec/mongoid/persistable_spec.rb +1 -2
- data/spec/mongoid/persistence_context_spec.rb +0 -1
- data/spec/mongoid/positional_spec.rb +0 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +1 -2
- data/spec/mongoid/query_cache_spec.rb +30 -8
- data/spec/mongoid/relations/proxy_spec.rb +6 -7
- data/spec/mongoid/reloadable_spec.rb +209 -23
- data/spec/mongoid/scopable_spec.rb +54 -22
- data/spec/mongoid/selectable_spec.rb +6 -7
- data/spec/mongoid/serializable_spec.rb +9 -10
- data/spec/mongoid/shardable_spec.rb +2 -3
- data/spec/mongoid/stateful_spec.rb +1 -2
- data/spec/mongoid/tasks/database_rake_spec.rb +0 -1
- data/spec/mongoid/tasks/database_spec.rb +0 -1
- data/spec/mongoid/threaded_spec.rb +2 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
- data/spec/mongoid/timestamps/created_spec.rb +1 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
- data/spec/mongoid/timestamps/updated_spec.rb +3 -4
- data/spec/mongoid/timestamps_spec.rb +6 -7
- data/spec/mongoid/touchable_spec.rb +15 -20
- data/spec/mongoid/touchable_spec_models.rb +0 -1
- data/spec/mongoid/traversable_spec.rb +65 -2
- data/spec/mongoid/validatable/associated_spec.rb +0 -1
- data/spec/mongoid/validatable/format_spec.rb +0 -1
- data/spec/mongoid/validatable/length_spec.rb +0 -1
- data/spec/mongoid/validatable/numericality_spec.rb +0 -1
- data/spec/mongoid/validatable/presence_spec.rb +26 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +67 -68
- data/spec/mongoid/validatable_spec.rb +2 -3
- data/spec/mongoid_spec.rb +0 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -1
- data/spec/rails/mongoid_spec.rb +0 -1
- data/spec/shared/lib/mrss/constraints.rb +10 -17
- data/spec/shared/lib/mrss/docker_runner.rb +23 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
- data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
- data/spec/shared/share/Dockerfile.erb +56 -54
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +46 -21
- data/spec/shared/shlib/set_env.sh +43 -5
- data/spec/spec_helper.rb +12 -22
- data/spec/support/authorization.rb +0 -1
- data/spec/support/constraints.rb +0 -1
- data/spec/support/expectations.rb +0 -1
- data/spec/support/macros.rb +31 -1
- data/spec/support/models/account.rb +1 -2
- data/spec/support/models/acolyte.rb +0 -1
- data/spec/support/models/actor.rb +0 -1
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +0 -1
- data/spec/support/models/address_component.rb +0 -1
- data/spec/support/models/address_number.rb +0 -1
- data/spec/support/models/agency.rb +0 -1
- data/spec/support/models/agent.rb +0 -1
- data/spec/support/models/album.rb +0 -1
- data/spec/support/models/alert.rb +0 -1
- data/spec/support/models/animal.rb +0 -1
- data/spec/support/models/answer.rb +0 -1
- data/spec/support/models/appointment.rb +0 -1
- 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 +2 -1
- data/spec/support/models/artwork.rb +0 -1
- data/spec/support/models/audio.rb +0 -1
- data/spec/support/models/augmentation.rb +0 -1
- data/spec/support/models/author.rb +0 -1
- data/spec/support/models/baby.rb +0 -1
- data/spec/support/models/band.rb +4 -1
- data/spec/support/models/bar.rb +0 -1
- 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 +0 -1
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +0 -1
- data/spec/support/models/book.rb +0 -1
- data/spec/support/models/breed.rb +0 -1
- data/spec/support/models/browser.rb +0 -1
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +0 -1
- data/spec/support/models/bus.rb +0 -1
- data/spec/support/models/business.rb +0 -1
- data/spec/support/models/callback_test.rb +0 -1
- data/spec/support/models/canvas.rb +0 -1
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -1
- data/spec/support/models/category.rb +0 -1
- data/spec/support/models/child.rb +0 -1
- data/spec/support/models/child_doc.rb +3 -4
- data/spec/support/models/church.rb +0 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +0 -1
- 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 +0 -1
- data/spec/support/models/contractor.rb +0 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -1
- data/spec/support/models/courier_job.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 +0 -1
- data/spec/support/models/definition.rb +0 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +0 -1
- data/spec/support/models/division.rb +0 -1
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +0 -1
- data/spec/support/models/dokument.rb +0 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +0 -1
- data/spec/support/models/driver.rb +0 -1
- data/spec/support/models/drug.rb +0 -1
- data/spec/support/models/dungeon.rb +0 -1
- data/spec/support/models/edit.rb +0 -1
- data/spec/support/models/email.rb +0 -1
- data/spec/support/models/employer.rb +0 -1
- data/spec/support/models/entry.rb +0 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +0 -1
- data/spec/support/models/event.rb +0 -1
- data/spec/support/models/exhibition.rb +0 -1
- data/spec/support/models/exhibitor.rb +0 -1
- data/spec/support/models/explosion.rb +0 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +0 -1
- data/spec/support/models/face.rb +0 -1
- data/spec/support/models/favorite.rb +0 -1
- data/spec/support/models/filesystem.rb +0 -1
- data/spec/support/models/fire_hydrant.rb +0 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -1
- data/spec/support/models/folder_item.rb +0 -1
- data/spec/support/models/fruits.rb +0 -1
- data/spec/support/models/game.rb +0 -1
- 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 +0 -1
- data/spec/support/models/house.rb +0 -1
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +0 -1
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +0 -1
- data/spec/support/models/instrument.rb +0 -1
- data/spec/support/models/item.rb +0 -1
- data/spec/support/models/jar.rb +0 -1
- data/spec/support/models/kaleidoscope.rb +0 -1
- data/spec/support/models/kangaroo.rb +0 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +0 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +0 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +0 -1
- data/spec/support/models/location.rb +0 -1
- data/spec/support/models/login.rb +0 -1
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +0 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +0 -1
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +0 -1
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +0 -1
- data/spec/support/models/my_hash.rb +0 -1
- data/spec/support/models/name.rb +0 -1
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +0 -1
- data/spec/support/models/note.rb +0 -1
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +0 -1
- data/spec/support/models/order.rb +2 -1
- data/spec/support/models/ordered_post.rb +1 -2
- data/spec/support/models/ordered_preference.rb +0 -1
- data/spec/support/models/oscar.rb +0 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +0 -1
- data/spec/support/models/ownable.rb +0 -1
- data/spec/support/models/owner.rb +0 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +0 -1
- data/spec/support/models/page_question.rb +0 -1
- data/spec/support/models/palette.rb +0 -1
- data/spec/support/models/parent.rb +0 -1
- data/spec/support/models/parent_doc.rb +0 -1
- data/spec/support/models/passport.rb +5 -1
- data/spec/support/models/patient.rb +0 -1
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +1 -1
- data/spec/support/models/pet.rb +0 -1
- data/spec/support/models/pet_owner.rb +0 -1
- data/spec/support/models/phone.rb +2 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +0 -1
- data/spec/support/models/player.rb +0 -1
- data/spec/support/models/post.rb +0 -1
- data/spec/support/models/post_genre.rb +0 -1
- data/spec/support/models/powerup.rb +0 -1
- data/spec/support/models/preference.rb +0 -1
- data/spec/support/models/princess.rb +0 -1
- data/spec/support/models/product.rb +0 -1
- data/spec/support/models/profile.rb +0 -1
- data/spec/support/models/pronunciation.rb +0 -1
- data/spec/support/models/pub.rb +0 -1
- 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 +0 -1
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/support/models/question.rb +0 -1
- data/spec/support/models/quiz.rb +0 -1
- data/spec/support/models/rating.rb +0 -1
- data/spec/support/models/record.rb +0 -1
- data/spec/support/models/registry.rb +0 -1
- data/spec/support/models/role.rb +0 -1
- data/spec/support/models/root_category.rb +0 -1
- data/spec/support/models/sandwich.rb +0 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/scribe.rb +0 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +0 -1
- data/spec/support/models/series.rb +0 -1
- data/spec/support/models/server.rb +0 -1
- data/spec/support/models/service.rb +0 -1
- data/spec/support/models/shape.rb +0 -1
- data/spec/support/models/shelf.rb +0 -1
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +0 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +0 -1
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +0 -1
- data/spec/support/models/simple.rb +0 -1
- data/spec/support/models/slave.rb +0 -1
- data/spec/support/models/song.rb +0 -1
- data/spec/support/models/sound.rb +0 -1
- 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 +0 -1
- data/spec/support/models/store_as_dup_test2.rb +0 -1
- data/spec/support/models/store_as_dup_test3.rb +0 -1
- data/spec/support/models/store_as_dup_test4.rb +0 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +0 -1
- data/spec/support/models/survey.rb +0 -1
- data/spec/support/models/symptom.rb +0 -1
- data/spec/support/models/tag.rb +0 -1
- data/spec/support/models/target.rb +0 -1
- data/spec/support/models/template.rb +0 -1
- data/spec/support/models/thing.rb +0 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +0 -1
- data/spec/support/models/topping.rb +0 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +0 -1
- data/spec/support/models/translation.rb +0 -1
- data/spec/support/models/tree.rb +0 -1
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +0 -1
- data/spec/support/models/user_account.rb +0 -1
- data/spec/support/models/validation_callback.rb +0 -1
- data/spec/support/models/vehicle.rb +0 -1
- data/spec/support/models/version.rb +0 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +0 -1
- data/spec/support/models/video.rb +0 -1
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +0 -1
- data/spec/support/models/wiki_page.rb +0 -1
- data/spec/support/models/word.rb +0 -1
- data/spec/support/models/word_origin.rb +0 -1
- data/spec/support/models/writer.rb +0 -1
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +0 -1
- data/spec/support/spec_config.rb +7 -1
- data.tar.gz.sig +0 -0
- metadata +51 -11
- metadata.gz.sig +0 -0
- data/lib/support/ruby_version.rb +0 -29
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require "spec_helper"
|
|
5
4
|
|
|
@@ -10,7 +9,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
10
9
|
describe "##{method}" do
|
|
11
10
|
|
|
12
11
|
before do
|
|
13
|
-
Band.create(name: "Depeche Mode")
|
|
12
|
+
Band.create!(name: "Depeche Mode")
|
|
14
13
|
end
|
|
15
14
|
|
|
16
15
|
context "when the count is zero" do
|
|
@@ -81,11 +80,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
81
80
|
describe "#count" do
|
|
82
81
|
|
|
83
82
|
let!(:depeche) do
|
|
84
|
-
Band.create(name: "Depeche Mode")
|
|
83
|
+
Band.create!(name: "Depeche Mode")
|
|
85
84
|
end
|
|
86
85
|
|
|
87
86
|
let!(:new_order) do
|
|
88
|
-
Band.create(name: "New Order")
|
|
87
|
+
Band.create!(name: "New Order")
|
|
89
88
|
end
|
|
90
89
|
|
|
91
90
|
let(:criteria) do
|
|
@@ -134,7 +133,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
134
133
|
context "and a limit true" do
|
|
135
134
|
|
|
136
135
|
before do
|
|
137
|
-
2.times { Band.create(name: "Depeche Mode", likes: 1) }
|
|
136
|
+
2.times { Band.create!(name: "Depeche Mode", likes: 1) }
|
|
138
137
|
end
|
|
139
138
|
|
|
140
139
|
let(:count) do
|
|
@@ -152,7 +151,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
152
151
|
context "when provided limit" do
|
|
153
152
|
|
|
154
153
|
before do
|
|
155
|
-
2.times { Band.create(name: "Depeche Mode") }
|
|
154
|
+
2.times { Band.create!(name: "Depeche Mode") }
|
|
156
155
|
end
|
|
157
156
|
|
|
158
157
|
let(:context) do
|
|
@@ -195,11 +194,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
195
194
|
describe "#estimated_count" do
|
|
196
195
|
|
|
197
196
|
let!(:depeche) do
|
|
198
|
-
Band.create(name: "Depeche Mode")
|
|
197
|
+
Band.create!(name: "Depeche Mode")
|
|
199
198
|
end
|
|
200
199
|
|
|
201
200
|
let!(:new_order) do
|
|
202
|
-
Band.create(name: "New Order")
|
|
201
|
+
Band.create!(name: "New Order")
|
|
203
202
|
end
|
|
204
203
|
|
|
205
204
|
let(:criteria) do
|
|
@@ -262,11 +261,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
262
261
|
describe "##{method}" do
|
|
263
262
|
|
|
264
263
|
let!(:depeche_mode) do
|
|
265
|
-
Band.create(name: "Depeche Mode")
|
|
264
|
+
Band.create!(name: "Depeche Mode")
|
|
266
265
|
end
|
|
267
266
|
|
|
268
267
|
let!(:new_order) do
|
|
269
|
-
Band.create(name: "New Order")
|
|
268
|
+
Band.create!(name: "New Order")
|
|
270
269
|
end
|
|
271
270
|
|
|
272
271
|
context "when the selector is contraining" do
|
|
@@ -367,11 +366,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
367
366
|
describe "##{method}" do
|
|
368
367
|
|
|
369
368
|
let!(:depeche_mode) do
|
|
370
|
-
Band.create(name: "Depeche Mode")
|
|
369
|
+
Band.create!(name: "Depeche Mode")
|
|
371
370
|
end
|
|
372
371
|
|
|
373
372
|
let!(:new_order) do
|
|
374
|
-
Band.create(name: "New Order")
|
|
373
|
+
Band.create!(name: "New Order")
|
|
375
374
|
end
|
|
376
375
|
|
|
377
376
|
context "when the selector is contraining" do
|
|
@@ -452,7 +451,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
452
451
|
context 'when the write concern is unacknowledged' do
|
|
453
452
|
|
|
454
453
|
before do
|
|
455
|
-
2.times { Band.create }
|
|
454
|
+
2.times { Band.create! }
|
|
456
455
|
end
|
|
457
456
|
|
|
458
457
|
let(:criteria) do
|
|
@@ -474,27 +473,83 @@ describe Mongoid::Contextual::Mongo do
|
|
|
474
473
|
describe "#distinct" do
|
|
475
474
|
|
|
476
475
|
before do
|
|
477
|
-
Band.create(name: "Depeche Mode", years: 30)
|
|
478
|
-
Band.create(name: "New Order", years: 25)
|
|
476
|
+
Band.create!(name: "Depeche Mode", years: 30, sales: "1E2")
|
|
477
|
+
Band.create!(name: "New Order", years: 25, sales: "2E3")
|
|
478
|
+
Band.create!(name: "10,000 Maniacs", years: 20, sales: "1E2")
|
|
479
479
|
end
|
|
480
480
|
|
|
481
|
-
|
|
481
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
482
|
+
context "when limiting the result set" do
|
|
482
483
|
|
|
483
|
-
|
|
484
|
-
|
|
484
|
+
let(:criteria) do
|
|
485
|
+
Band.where(name: "Depeche Mode")
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
let(:context) do
|
|
489
|
+
described_class.new(criteria)
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
it "returns the distinct matching fields" do
|
|
493
|
+
expect(context.distinct(:name)).to eq([ "Depeche Mode" ])
|
|
494
|
+
end
|
|
485
495
|
end
|
|
486
496
|
|
|
487
|
-
|
|
488
|
-
|
|
497
|
+
context "when not limiting the result set" do
|
|
498
|
+
|
|
499
|
+
let(:criteria) do
|
|
500
|
+
Band.criteria
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
let(:context) do
|
|
504
|
+
described_class.new(criteria)
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
it "returns the distinct field values" do
|
|
508
|
+
expect(context.distinct(:name).sort).to eq([ "10,000 Maniacs", "Depeche Mode", "New Order" ].sort)
|
|
509
|
+
end
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
context "when providing an aliased field" do
|
|
513
|
+
|
|
514
|
+
let(:criteria) do
|
|
515
|
+
Band.criteria
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
let(:context) do
|
|
519
|
+
described_class.new(criteria)
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
it "returns the distinct field values" do
|
|
523
|
+
expect(context.distinct(:years).sort).to eq([ 20, 25, 30 ])
|
|
524
|
+
end
|
|
489
525
|
end
|
|
490
526
|
|
|
491
|
-
|
|
492
|
-
|
|
527
|
+
context 'when a collation is specified' do
|
|
528
|
+
min_server_version '3.4'
|
|
529
|
+
|
|
530
|
+
before do
|
|
531
|
+
Band.create!(name: 'DEPECHE MODE')
|
|
532
|
+
end
|
|
533
|
+
|
|
534
|
+
let(:context) do
|
|
535
|
+
described_class.new(criteria)
|
|
536
|
+
end
|
|
537
|
+
|
|
538
|
+
let(:expected_results) do
|
|
539
|
+
["10,000 Maniacs", "Depeche Mode", "New Order"]
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
let(:criteria) do
|
|
543
|
+
Band.where({}).collation(locale: 'en_US', strength: 2)
|
|
544
|
+
end
|
|
545
|
+
|
|
546
|
+
it 'applies the collation' do
|
|
547
|
+
expect(context.distinct(:name).sort).to eq(expected_results.sort)
|
|
548
|
+
end
|
|
493
549
|
end
|
|
494
550
|
end
|
|
495
551
|
|
|
496
|
-
context "when
|
|
497
|
-
|
|
552
|
+
context "when providing a demongoizable field" do
|
|
498
553
|
let(:criteria) do
|
|
499
554
|
Band.criteria
|
|
500
555
|
end
|
|
@@ -503,47 +558,253 @@ describe Mongoid::Contextual::Mongo do
|
|
|
503
558
|
described_class.new(criteria)
|
|
504
559
|
end
|
|
505
560
|
|
|
506
|
-
|
|
507
|
-
|
|
561
|
+
context "when legacy_pluck_distinct is set" do
|
|
562
|
+
config_override :legacy_pluck_distinct, true
|
|
563
|
+
|
|
564
|
+
it "returns the non-demongoized distinct field values" do
|
|
565
|
+
expect(context.distinct(:sales).sort).to eq([ "1E2", "2E3" ])
|
|
566
|
+
end
|
|
567
|
+
end
|
|
568
|
+
|
|
569
|
+
context "when legacy_pluck_distinct is not set" do
|
|
570
|
+
config_override :legacy_pluck_distinct, false
|
|
571
|
+
|
|
572
|
+
it "returns the non-demongoized distinct field values" do
|
|
573
|
+
expect(context.distinct(:sales).sort).to eq([ BigDecimal("1E2"), BigDecimal("2E3") ])
|
|
574
|
+
end
|
|
508
575
|
end
|
|
509
576
|
end
|
|
510
577
|
|
|
511
|
-
context "when
|
|
578
|
+
context "when getting a localized field" do
|
|
579
|
+
before do
|
|
580
|
+
I18n.locale = :en
|
|
581
|
+
d = Dictionary.create!(description: 'english-text')
|
|
582
|
+
I18n.locale = :de
|
|
583
|
+
d.description = 'deutsch-text'
|
|
584
|
+
d.save!
|
|
585
|
+
end
|
|
586
|
+
|
|
587
|
+
after do
|
|
588
|
+
I18n.locale = :en
|
|
589
|
+
end
|
|
512
590
|
|
|
513
591
|
let(:criteria) do
|
|
514
|
-
|
|
592
|
+
Dictionary.criteria
|
|
515
593
|
end
|
|
516
594
|
|
|
517
595
|
let(:context) do
|
|
518
596
|
described_class.new(criteria)
|
|
519
597
|
end
|
|
520
598
|
|
|
521
|
-
|
|
522
|
-
|
|
599
|
+
context "when getting the field without _translations" do
|
|
600
|
+
context "when legacy_pluck_distinct is set" do
|
|
601
|
+
config_override :legacy_pluck_distinct, true
|
|
602
|
+
|
|
603
|
+
it "gets the full hash" do
|
|
604
|
+
expect(context.distinct(:description)).to eq([{ "de" => "deutsch-text", "en" => "english-text" }])
|
|
605
|
+
end
|
|
606
|
+
end
|
|
607
|
+
|
|
608
|
+
context "when legacy_pluck_distinct is not set" do
|
|
609
|
+
config_override :legacy_pluck_distinct, false
|
|
610
|
+
|
|
611
|
+
it "gets the demongoized localized field" do
|
|
612
|
+
expect(context.distinct(:description)).to eq([ 'deutsch-text' ])
|
|
613
|
+
end
|
|
614
|
+
end
|
|
523
615
|
end
|
|
524
|
-
end
|
|
525
616
|
|
|
526
|
-
|
|
527
|
-
|
|
617
|
+
context "when getting the field with _translations" do
|
|
618
|
+
context "when legacy_pluck_distinct is set" do
|
|
619
|
+
config_override :legacy_pluck_distinct, true
|
|
528
620
|
|
|
529
|
-
|
|
530
|
-
|
|
621
|
+
it "gets an empty list" do
|
|
622
|
+
expect(context.distinct(:description_translations)).to eq([])
|
|
623
|
+
end
|
|
624
|
+
end
|
|
625
|
+
|
|
626
|
+
context "when legacy_pluck_distinct is not set" do
|
|
627
|
+
config_override :legacy_pluck_distinct, false
|
|
628
|
+
|
|
629
|
+
it "gets the full hash" do
|
|
630
|
+
expect(context.distinct(:description_translations)).to eq([ { "de" => "deutsch-text", "en" => "english-text" } ])
|
|
631
|
+
end
|
|
632
|
+
end
|
|
531
633
|
end
|
|
532
634
|
|
|
533
|
-
|
|
534
|
-
|
|
635
|
+
context 'when plucking a specific locale' do
|
|
636
|
+
|
|
637
|
+
let(:distinct) do
|
|
638
|
+
context.distinct(:'description.de')
|
|
639
|
+
end
|
|
640
|
+
|
|
641
|
+
context "when legacy_pluck_distinct is set" do
|
|
642
|
+
config_override :legacy_pluck_distinct, true
|
|
643
|
+
|
|
644
|
+
it 'returns the specific translation' do
|
|
645
|
+
expect(distinct).to eq([ 'deutsch-text' ])
|
|
646
|
+
end
|
|
647
|
+
end
|
|
648
|
+
|
|
649
|
+
context "when legacy_pluck_distinct is not set" do
|
|
650
|
+
config_override :legacy_pluck_distinct, false
|
|
651
|
+
|
|
652
|
+
it 'returns the specific translation' do
|
|
653
|
+
expect(distinct).to eq([ "deutsch-text" ])
|
|
654
|
+
end
|
|
655
|
+
end
|
|
535
656
|
end
|
|
536
657
|
|
|
537
|
-
|
|
538
|
-
|
|
658
|
+
context 'when plucking a specific locale from _translations field' do
|
|
659
|
+
|
|
660
|
+
let(:distinct) do
|
|
661
|
+
context.distinct(:'description_translations.de')
|
|
662
|
+
end
|
|
663
|
+
|
|
664
|
+
context "when legacy_pluck_distinct is set" do
|
|
665
|
+
config_override :legacy_pluck_distinct, true
|
|
666
|
+
|
|
667
|
+
it 'returns the empty list' do
|
|
668
|
+
expect(distinct).to eq([])
|
|
669
|
+
end
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
context "when legacy_pluck_distinct is not set" do
|
|
673
|
+
config_override :legacy_pluck_distinct, false
|
|
674
|
+
|
|
675
|
+
it 'returns the specific translations' do
|
|
676
|
+
expect(distinct).to eq(['deutsch-text'])
|
|
677
|
+
end
|
|
678
|
+
end
|
|
539
679
|
end
|
|
540
680
|
|
|
541
|
-
|
|
542
|
-
|
|
681
|
+
context 'when fallbacks are enabled with a locale list' do
|
|
682
|
+
require_fallbacks
|
|
683
|
+
|
|
684
|
+
around(:all) do |example|
|
|
685
|
+
prev_fallbacks = I18n.fallbacks.dup
|
|
686
|
+
I18n.fallbacks[:he] = [ :en ]
|
|
687
|
+
example.run
|
|
688
|
+
I18n.fallbacks = prev_fallbacks
|
|
689
|
+
end
|
|
690
|
+
|
|
691
|
+
after do
|
|
692
|
+
I18n.locale = :en
|
|
693
|
+
end
|
|
694
|
+
|
|
695
|
+
let(:distinct) do
|
|
696
|
+
context.distinct(:description).first
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
context "when legacy_pluck_distinct is set" do
|
|
700
|
+
config_override :legacy_pluck_distinct, true
|
|
701
|
+
|
|
702
|
+
it "does not correctly use the fallback" do
|
|
703
|
+
distinct.should == {"de"=>"deutsch-text", "en"=>"english-text"}
|
|
704
|
+
end
|
|
705
|
+
end
|
|
706
|
+
|
|
707
|
+
context "when legacy_pluck_distinct is not set" do
|
|
708
|
+
config_override :legacy_pluck_distinct, false
|
|
709
|
+
|
|
710
|
+
it "correctly uses the fallback" do
|
|
711
|
+
I18n.locale = :en
|
|
712
|
+
d = Dictionary.create!(description: 'english-text')
|
|
713
|
+
I18n.locale = :he
|
|
714
|
+
distinct.should == "english-text"
|
|
715
|
+
end
|
|
716
|
+
end
|
|
717
|
+
end
|
|
718
|
+
|
|
719
|
+
context "when the localized field is embedded" do
|
|
720
|
+
before do
|
|
721
|
+
p = Passport.new
|
|
722
|
+
I18n.locale = :en
|
|
723
|
+
p.name = "Neil"
|
|
724
|
+
I18n.locale = :he
|
|
725
|
+
p.name = "Nissim"
|
|
726
|
+
|
|
727
|
+
Person.create!(passport: p, employer_id: 12345)
|
|
728
|
+
end
|
|
729
|
+
|
|
730
|
+
after do
|
|
731
|
+
I18n.locale = :en
|
|
732
|
+
end
|
|
733
|
+
|
|
734
|
+
let(:criteria) do
|
|
735
|
+
Person.where(employer_id: 12345)
|
|
736
|
+
end
|
|
737
|
+
|
|
738
|
+
let(:context) do
|
|
739
|
+
described_class.new(criteria)
|
|
740
|
+
end
|
|
741
|
+
|
|
742
|
+
let(:distinct) do
|
|
743
|
+
context.distinct("pass.name").first
|
|
744
|
+
end
|
|
745
|
+
|
|
746
|
+
let(:distinct_translations) do
|
|
747
|
+
context.distinct("pass.name_translations").first
|
|
748
|
+
end
|
|
749
|
+
|
|
750
|
+
let(:distinct_translations_field) do
|
|
751
|
+
context.distinct("pass.name_translations.en").first
|
|
752
|
+
end
|
|
753
|
+
|
|
754
|
+
context "when legacy_pluck_distinct is set" do
|
|
755
|
+
config_override :legacy_pluck_distinct, true
|
|
756
|
+
|
|
757
|
+
it "returns the full hash" do
|
|
758
|
+
expect(distinct).to eq({ "en" => "Neil", "he" => "Nissim" })
|
|
759
|
+
end
|
|
760
|
+
|
|
761
|
+
it "returns the empty hash" do
|
|
762
|
+
expect(distinct_translations).to eq(nil)
|
|
763
|
+
end
|
|
764
|
+
|
|
765
|
+
it "returns the empty hash" do
|
|
766
|
+
expect(distinct_translations_field).to eq(nil)
|
|
767
|
+
end
|
|
768
|
+
end
|
|
769
|
+
|
|
770
|
+
context "when legacy_pluck_distinct is not set" do
|
|
771
|
+
config_override :legacy_pluck_distinct, false
|
|
772
|
+
|
|
773
|
+
it "returns the translation for the current locale" do
|
|
774
|
+
expect(distinct).to eq("Nissim")
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
it "returns the full _translation hash" do
|
|
778
|
+
expect(distinct_translations).to eq({ "en" => "Neil", "he" => "Nissim" })
|
|
779
|
+
end
|
|
780
|
+
|
|
781
|
+
it "returns the translation for the requested locale" do
|
|
782
|
+
expect(distinct_translations_field).to eq("Neil")
|
|
783
|
+
end
|
|
784
|
+
end
|
|
785
|
+
end
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
context "when getting an embedded field" do
|
|
789
|
+
|
|
790
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
791
|
+
let!(:band) { Band.create!(label: label) }
|
|
792
|
+
let(:criteria) { Band.where(_id: band.id) }
|
|
793
|
+
let(:context) { described_class.new(criteria) }
|
|
794
|
+
|
|
795
|
+
context "when legacy_pluck_distinct is set" do
|
|
796
|
+
config_override :legacy_pluck_distinct, true
|
|
797
|
+
|
|
798
|
+
it "returns the distinct matching fields" do
|
|
799
|
+
expect(context.distinct("label.sales")).to eq([ "1E2" ])
|
|
800
|
+
end
|
|
543
801
|
end
|
|
544
802
|
|
|
545
|
-
|
|
546
|
-
|
|
803
|
+
context "when legacy_pluck_distinct is not set" do
|
|
804
|
+
config_override :legacy_pluck_distinct, false
|
|
805
|
+
it "returns the distinct matching fields" do
|
|
806
|
+
expect(context.distinct("label.sales")).to eq([ BigDecimal("1E2") ])
|
|
807
|
+
end
|
|
547
808
|
end
|
|
548
809
|
end
|
|
549
810
|
end
|
|
@@ -551,7 +812,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
551
812
|
describe "#each" do
|
|
552
813
|
|
|
553
814
|
before do
|
|
554
|
-
Band.create(name: "Depeche Mode")
|
|
815
|
+
Band.create!(name: "Depeche Mode")
|
|
555
816
|
end
|
|
556
817
|
|
|
557
818
|
let(:criteria) do
|
|
@@ -629,7 +890,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
629
890
|
context "when iterating with next" do
|
|
630
891
|
|
|
631
892
|
before do
|
|
632
|
-
10.times { |i| Band.create(name: "Test #{i}") }
|
|
893
|
+
10.times { |i| Band.create!(name: "Test #{i}") }
|
|
633
894
|
end
|
|
634
895
|
|
|
635
896
|
let(:criteria) do
|
|
@@ -641,8 +902,21 @@ describe Mongoid::Contextual::Mongo do
|
|
|
641
902
|
end
|
|
642
903
|
|
|
643
904
|
it "does not load all documents" do
|
|
644
|
-
|
|
905
|
+
subscriber = Mrss::EventSubscriber.new
|
|
906
|
+
context.view.client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
|
|
907
|
+
|
|
645
908
|
enum.next
|
|
909
|
+
|
|
910
|
+
find_events = subscriber.all_events.select do |evt|
|
|
911
|
+
evt.command_name == 'find'
|
|
912
|
+
end
|
|
913
|
+
expect(find_events.length).to be(2)
|
|
914
|
+
get_more_events = subscriber.all_events.select do |evt|
|
|
915
|
+
evt.command_name == 'getMore'
|
|
916
|
+
end
|
|
917
|
+
expect(get_more_events.length).to be(0)
|
|
918
|
+
ensure
|
|
919
|
+
context.view.client.unsubscribe(Mongo::Monitoring::COMMAND, subscriber)
|
|
646
920
|
end
|
|
647
921
|
end
|
|
648
922
|
end
|
|
@@ -651,9 +925,9 @@ describe Mongoid::Contextual::Mongo do
|
|
|
651
925
|
context 'when the criteria has a parent document' do
|
|
652
926
|
|
|
653
927
|
before do
|
|
654
|
-
Post.create(person: person)
|
|
655
|
-
Post.create(person: person)
|
|
656
|
-
Post.create(person: person)
|
|
928
|
+
Post.create!(person: person)
|
|
929
|
+
Post.create!(person: person)
|
|
930
|
+
Post.create!(person: person)
|
|
657
931
|
end
|
|
658
932
|
|
|
659
933
|
let(:person) do
|
|
@@ -700,7 +974,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
700
974
|
describe "#exists?" do
|
|
701
975
|
|
|
702
976
|
before do
|
|
703
|
-
Band.create(name: "Depeche Mode")
|
|
977
|
+
Band.create!(name: "Depeche Mode")
|
|
704
978
|
end
|
|
705
979
|
|
|
706
980
|
context "when the count is zero" do
|
|
@@ -813,11 +1087,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
813
1087
|
describe "#find_one_and_replace" do
|
|
814
1088
|
|
|
815
1089
|
let!(:depeche) do
|
|
816
|
-
Band.create(name: "Depeche Mode")
|
|
1090
|
+
Band.create!(name: "Depeche Mode")
|
|
817
1091
|
end
|
|
818
1092
|
|
|
819
1093
|
let!(:tool) do
|
|
820
|
-
Band.create(name: "Tool")
|
|
1094
|
+
Band.create!(name: "Tool")
|
|
821
1095
|
end
|
|
822
1096
|
|
|
823
1097
|
context "when the selector matches" do
|
|
@@ -969,11 +1243,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
969
1243
|
describe "#find_one_and_update" do
|
|
970
1244
|
|
|
971
1245
|
let!(:depeche) do
|
|
972
|
-
Band.create(name: "Depeche Mode")
|
|
1246
|
+
Band.create!(name: "Depeche Mode")
|
|
973
1247
|
end
|
|
974
1248
|
|
|
975
1249
|
let!(:tool) do
|
|
976
|
-
Band.create(name: "Tool")
|
|
1250
|
+
Band.create!(name: "Tool")
|
|
977
1251
|
end
|
|
978
1252
|
|
|
979
1253
|
context "when the selector matches" do
|
|
@@ -1122,7 +1396,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1122
1396
|
describe "#find_one_and_delete" do
|
|
1123
1397
|
|
|
1124
1398
|
let!(:depeche) do
|
|
1125
|
-
Band.create(name: "Depeche Mode")
|
|
1399
|
+
Band.create!(name: "Depeche Mode")
|
|
1126
1400
|
end
|
|
1127
1401
|
|
|
1128
1402
|
let(:criteria) do
|
|
@@ -1201,11 +1475,15 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1201
1475
|
describe "##{method}" do
|
|
1202
1476
|
|
|
1203
1477
|
let!(:depeche_mode) do
|
|
1204
|
-
Band.create(name: "Depeche Mode")
|
|
1478
|
+
Band.create!(name: "Depeche Mode")
|
|
1205
1479
|
end
|
|
1206
1480
|
|
|
1207
1481
|
let!(:new_order) do
|
|
1208
|
-
Band.create(name: "New Order")
|
|
1482
|
+
Band.create!(name: "New Order")
|
|
1483
|
+
end
|
|
1484
|
+
|
|
1485
|
+
let!(:rolling_stones) do
|
|
1486
|
+
Band.create!(name: "The Rolling Stones")
|
|
1209
1487
|
end
|
|
1210
1488
|
|
|
1211
1489
|
context "when the context is not cached" do
|
|
@@ -1248,14 +1526,14 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1248
1526
|
context "when there is sort on the context" do
|
|
1249
1527
|
|
|
1250
1528
|
it "follows the main sort" do
|
|
1251
|
-
expect(context.send(method)).to eq(
|
|
1529
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1252
1530
|
end
|
|
1253
1531
|
end
|
|
1254
1532
|
|
|
1255
1533
|
context "when subsequently calling #last" do
|
|
1256
1534
|
|
|
1257
1535
|
it "returns the correct document" do
|
|
1258
|
-
expect(context.send(method)).to eq(
|
|
1536
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1259
1537
|
expect(context.last).to eq(depeche_mode)
|
|
1260
1538
|
end
|
|
1261
1539
|
end
|
|
@@ -1280,23 +1558,22 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1280
1558
|
|
|
1281
1559
|
it 'returns the last document, sorted by _id' do
|
|
1282
1560
|
expect(context.send(method)).to eq(depeche_mode)
|
|
1283
|
-
expect(context.last).to eq(
|
|
1561
|
+
expect(context.last).to eq(rolling_stones)
|
|
1284
1562
|
end
|
|
1285
1563
|
end
|
|
1286
1564
|
|
|
1287
|
-
context 'with option {
|
|
1288
|
-
|
|
1565
|
+
context 'with option { id_sort: :none }' do
|
|
1289
1566
|
let(:opts) do
|
|
1290
1567
|
{ id_sort: :none }
|
|
1291
1568
|
end
|
|
1292
1569
|
|
|
1293
|
-
it '
|
|
1570
|
+
it 'applies the sort on _id' do
|
|
1294
1571
|
expect(context.send(method, opts)).to eq(depeche_mode)
|
|
1295
1572
|
end
|
|
1296
1573
|
|
|
1297
1574
|
context 'when calling #last' do
|
|
1298
1575
|
|
|
1299
|
-
it '
|
|
1576
|
+
it 'doesn\'t apply a sort on _id' do
|
|
1300
1577
|
expect(context.send(method, opts)).to eq(depeche_mode)
|
|
1301
1578
|
expect(context.last(opts)).to eq(depeche_mode)
|
|
1302
1579
|
end
|
|
@@ -1314,33 +1591,32 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1314
1591
|
described_class.new(criteria)
|
|
1315
1592
|
end
|
|
1316
1593
|
|
|
1317
|
-
|
|
1318
1594
|
it 'applies the criteria sort' do
|
|
1319
|
-
expect(context.send(method)).to eq(
|
|
1595
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1320
1596
|
end
|
|
1321
1597
|
|
|
1322
1598
|
context 'when calling #last' do
|
|
1323
1599
|
|
|
1324
1600
|
it 'applies the criteria sort' do
|
|
1325
|
-
expect(context.send(method)).to eq(
|
|
1601
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1326
1602
|
expect(context.last).to eq(depeche_mode)
|
|
1327
1603
|
end
|
|
1328
1604
|
end
|
|
1329
1605
|
|
|
1330
|
-
context 'with option {
|
|
1606
|
+
context 'with option { id_sort: :none }' do
|
|
1331
1607
|
|
|
1332
1608
|
let(:opts) do
|
|
1333
1609
|
{ id_sort: :none }
|
|
1334
1610
|
end
|
|
1335
1611
|
|
|
1336
|
-
it '
|
|
1337
|
-
expect(context.send(method, opts)).to eq(
|
|
1612
|
+
it 'uses the preexisting sort' do
|
|
1613
|
+
expect(context.send(method, opts)).to eq(rolling_stones)
|
|
1338
1614
|
end
|
|
1339
1615
|
|
|
1340
1616
|
context 'when calling #last' do
|
|
1341
1617
|
|
|
1342
|
-
it '
|
|
1343
|
-
expect(context.send(method, opts)).to eq(
|
|
1618
|
+
it 'uses the preexisting sort' do
|
|
1619
|
+
expect(context.send(method, opts)).to eq(rolling_stones)
|
|
1344
1620
|
expect(context.last(opts)).to eq(depeche_mode)
|
|
1345
1621
|
end
|
|
1346
1622
|
end
|
|
@@ -1360,14 +1636,14 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1360
1636
|
context "when there is sort on the context" do
|
|
1361
1637
|
|
|
1362
1638
|
it "follows the main sort" do
|
|
1363
|
-
expect(context.send(method)).to eq(
|
|
1639
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1364
1640
|
end
|
|
1365
1641
|
end
|
|
1366
1642
|
|
|
1367
1643
|
context "when subsequently calling #last" do
|
|
1368
1644
|
|
|
1369
1645
|
it "returns the correct document" do
|
|
1370
|
-
expect(context.send(method)).to eq(
|
|
1646
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1371
1647
|
expect(context.last).to eq(depeche_mode)
|
|
1372
1648
|
end
|
|
1373
1649
|
end
|
|
@@ -1407,95 +1683,769 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1407
1683
|
end
|
|
1408
1684
|
end
|
|
1409
1685
|
end
|
|
1410
|
-
end
|
|
1411
|
-
end
|
|
1412
|
-
|
|
1413
|
-
describe "#initialize" do
|
|
1414
|
-
|
|
1415
|
-
let(:criteria) do
|
|
1416
|
-
Band.where(name: "Depeche Mode").no_timeout
|
|
1417
|
-
end
|
|
1418
1686
|
|
|
1419
|
-
|
|
1420
|
-
described_class.new(criteria)
|
|
1421
|
-
end
|
|
1422
|
-
|
|
1423
|
-
it "sets the criteria" do
|
|
1424
|
-
expect(context.criteria).to eq(criteria)
|
|
1425
|
-
end
|
|
1687
|
+
context "when including a limit" do
|
|
1426
1688
|
|
|
1427
|
-
|
|
1428
|
-
expect(context.klass).to eq(Band)
|
|
1429
|
-
end
|
|
1689
|
+
context "when the context is not cached" do
|
|
1430
1690
|
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1691
|
+
let(:context) do
|
|
1692
|
+
described_class.new(criteria)
|
|
1693
|
+
end
|
|
1434
1694
|
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1695
|
+
context "when the limit is 1" do
|
|
1696
|
+
let(:criteria) do
|
|
1697
|
+
Band.criteria
|
|
1698
|
+
end
|
|
1439
1699
|
|
|
1440
|
-
|
|
1700
|
+
let(:docs) do
|
|
1701
|
+
context.send(method, 1)
|
|
1702
|
+
end
|
|
1441
1703
|
|
|
1442
|
-
|
|
1704
|
+
it "returns an array of documents" do
|
|
1705
|
+
expect(docs).to eq([ depeche_mode ])
|
|
1706
|
+
end
|
|
1707
|
+
end
|
|
1443
1708
|
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1709
|
+
context "when the limit is >1" do
|
|
1710
|
+
let(:criteria) do
|
|
1711
|
+
Band.criteria
|
|
1712
|
+
end
|
|
1448
1713
|
|
|
1449
|
-
|
|
1714
|
+
let(:docs) do
|
|
1715
|
+
context.send(method, 2)
|
|
1716
|
+
end
|
|
1450
1717
|
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1718
|
+
it "returns the number of documents in order" do
|
|
1719
|
+
expect(docs).to eq([ depeche_mode, new_order ])
|
|
1720
|
+
end
|
|
1721
|
+
end
|
|
1454
1722
|
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
end
|
|
1723
|
+
context 'when the criteria has a collation' do
|
|
1724
|
+
min_server_version '3.4'
|
|
1458
1725
|
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1726
|
+
let(:criteria) do
|
|
1727
|
+
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
1728
|
+
end
|
|
1462
1729
|
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
2.times { expect(context.send(method)).to eq(2) }
|
|
1730
|
+
it "returns the first matching document" do
|
|
1731
|
+
expect(context.send(method, 1)).to eq([ depeche_mode ])
|
|
1732
|
+
end
|
|
1467
1733
|
end
|
|
1468
1734
|
end
|
|
1469
1735
|
|
|
1470
|
-
context "when the
|
|
1471
|
-
|
|
1472
|
-
before do
|
|
1473
|
-
context.entries
|
|
1474
|
-
end
|
|
1736
|
+
context "when the context is cached" do
|
|
1475
1737
|
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
expect(context.send(method)).to eq(2)
|
|
1738
|
+
let(:context) do
|
|
1739
|
+
described_class.new(criteria)
|
|
1479
1740
|
end
|
|
1480
1741
|
|
|
1481
|
-
context "when the
|
|
1742
|
+
context "when the whole context is loaded" do
|
|
1482
1743
|
|
|
1483
1744
|
before do
|
|
1484
|
-
context.
|
|
1745
|
+
context.to_a
|
|
1485
1746
|
end
|
|
1486
1747
|
|
|
1487
|
-
|
|
1488
|
-
expect(context.size).to eq(2)
|
|
1489
|
-
end
|
|
1490
|
-
end
|
|
1491
|
-
end
|
|
1492
|
-
end
|
|
1748
|
+
context "when all of the documents are cached" do
|
|
1493
1749
|
|
|
1494
|
-
|
|
1750
|
+
let(:criteria) do
|
|
1751
|
+
Band.all.cache
|
|
1752
|
+
end
|
|
1495
1753
|
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1754
|
+
context "when requesting all of the documents" do
|
|
1755
|
+
|
|
1756
|
+
let(:docs) do
|
|
1757
|
+
context.send(method, 3)
|
|
1758
|
+
end
|
|
1759
|
+
|
|
1760
|
+
it "returns all of the documents without touching the database" do
|
|
1761
|
+
expect(context).to receive(:view).never
|
|
1762
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
1763
|
+
end
|
|
1764
|
+
end
|
|
1765
|
+
|
|
1766
|
+
context "when requesting fewer than all of the documents" do
|
|
1767
|
+
|
|
1768
|
+
let(:docs) do
|
|
1769
|
+
context.send(method, 2)
|
|
1770
|
+
end
|
|
1771
|
+
|
|
1772
|
+
it "returns all of the documents without touching the database" do
|
|
1773
|
+
expect(context).to receive(:view).never
|
|
1774
|
+
expect(docs).to eq([ depeche_mode, new_order ])
|
|
1775
|
+
end
|
|
1776
|
+
end
|
|
1777
|
+
end
|
|
1778
|
+
|
|
1779
|
+
context "when only one document is cached" do
|
|
1780
|
+
|
|
1781
|
+
let(:criteria) do
|
|
1782
|
+
Band.where(name: "Depeche Mode").cache
|
|
1783
|
+
end
|
|
1784
|
+
|
|
1785
|
+
context "when requesting one document" do
|
|
1786
|
+
|
|
1787
|
+
let(:docs) do
|
|
1788
|
+
context.send(method, 1)
|
|
1789
|
+
end
|
|
1790
|
+
|
|
1791
|
+
it "returns one document without touching the database" do
|
|
1792
|
+
expect(context).to receive(:view).never
|
|
1793
|
+
expect(docs).to eq([ depeche_mode ])
|
|
1794
|
+
end
|
|
1795
|
+
end
|
|
1796
|
+
end
|
|
1797
|
+
end
|
|
1798
|
+
|
|
1799
|
+
context "when the first method was called before" do
|
|
1800
|
+
|
|
1801
|
+
let(:context) do
|
|
1802
|
+
described_class.new(criteria)
|
|
1803
|
+
end
|
|
1804
|
+
|
|
1805
|
+
let(:criteria) do
|
|
1806
|
+
Band.all.cache
|
|
1807
|
+
end
|
|
1808
|
+
|
|
1809
|
+
before do
|
|
1810
|
+
context.first(before_limit)
|
|
1811
|
+
end
|
|
1812
|
+
|
|
1813
|
+
let(:docs) do
|
|
1814
|
+
context.send(method, limit)
|
|
1815
|
+
end
|
|
1816
|
+
|
|
1817
|
+
context "when getting all of the documents before" do
|
|
1818
|
+
let(:before_limit) { 3 }
|
|
1819
|
+
|
|
1820
|
+
context "when getting all of the documents" do
|
|
1821
|
+
let(:limit) { 3 }
|
|
1822
|
+
|
|
1823
|
+
it "returns all documents without touching the database" do
|
|
1824
|
+
expect(context).to receive(:view).never
|
|
1825
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
1826
|
+
end
|
|
1827
|
+
end
|
|
1828
|
+
|
|
1829
|
+
context "when getting fewer documents" do
|
|
1830
|
+
let(:limit) { 2 }
|
|
1831
|
+
|
|
1832
|
+
it "returns the correct documents without touching the database" do
|
|
1833
|
+
expect(context).to receive(:view).never
|
|
1834
|
+
expect(docs).to eq([ depeche_mode, new_order ])
|
|
1835
|
+
end
|
|
1836
|
+
end
|
|
1837
|
+
end
|
|
1838
|
+
|
|
1839
|
+
context "when getting fewer documents before" do
|
|
1840
|
+
let(:before_limit) { 2 }
|
|
1841
|
+
|
|
1842
|
+
context "when getting the same number of documents" do
|
|
1843
|
+
let(:limit) { 2 }
|
|
1844
|
+
|
|
1845
|
+
it "returns the correct documents without touching the database" do
|
|
1846
|
+
expect(context).to receive(:view).never
|
|
1847
|
+
expect(docs).to eq([ depeche_mode, new_order ])
|
|
1848
|
+
end
|
|
1849
|
+
end
|
|
1850
|
+
|
|
1851
|
+
context "when getting more documents" do
|
|
1852
|
+
let(:limit) { 3 }
|
|
1853
|
+
|
|
1854
|
+
it "returns the correct documents and touches the database" do
|
|
1855
|
+
expect(context).to receive(:view).exactly(3).times.and_call_original
|
|
1856
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
1857
|
+
end
|
|
1858
|
+
end
|
|
1859
|
+
end
|
|
1860
|
+
|
|
1861
|
+
context "when getting one document before" do
|
|
1862
|
+
let(:before_limit) { 1 }
|
|
1863
|
+
|
|
1864
|
+
context "when getting one document" do
|
|
1865
|
+
let(:limit) { 1 }
|
|
1866
|
+
|
|
1867
|
+
it "returns the correct documents without touching the database" do
|
|
1868
|
+
expect(context).to receive(:view).never
|
|
1869
|
+
expect(docs).to eq([ depeche_mode ])
|
|
1870
|
+
end
|
|
1871
|
+
end
|
|
1872
|
+
|
|
1873
|
+
context "when getting more than one document" do
|
|
1874
|
+
let(:limit) { 3 }
|
|
1875
|
+
|
|
1876
|
+
it "returns the correct documents and touches the database" do
|
|
1877
|
+
expect(context).to receive(:view).exactly(3).times.and_call_original
|
|
1878
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
1879
|
+
end
|
|
1880
|
+
end
|
|
1881
|
+
end
|
|
1882
|
+
end
|
|
1883
|
+
end
|
|
1884
|
+
end
|
|
1885
|
+
|
|
1886
|
+
context "when calling #first then #last" do
|
|
1887
|
+
|
|
1888
|
+
let(:context) do
|
|
1889
|
+
described_class.new(criteria)
|
|
1890
|
+
end
|
|
1891
|
+
|
|
1892
|
+
let(:criteria) do
|
|
1893
|
+
Band.all.cache
|
|
1894
|
+
end
|
|
1895
|
+
|
|
1896
|
+
before do
|
|
1897
|
+
context.first(before_limit)
|
|
1898
|
+
end
|
|
1899
|
+
|
|
1900
|
+
let(:docs) do
|
|
1901
|
+
context.last(limit)
|
|
1902
|
+
end
|
|
1903
|
+
|
|
1904
|
+
context "when getting one from the beginning and one from the end" do
|
|
1905
|
+
let(:before_limit) { 2 }
|
|
1906
|
+
let(:limit) { 1 }
|
|
1907
|
+
|
|
1908
|
+
it "gets the correct document" do
|
|
1909
|
+
expect(docs).to eq([rolling_stones])
|
|
1910
|
+
end
|
|
1911
|
+
end
|
|
1912
|
+
end
|
|
1913
|
+
end
|
|
1914
|
+
end
|
|
1915
|
+
|
|
1916
|
+
describe "#last" do
|
|
1917
|
+
let!(:depeche_mode) do
|
|
1918
|
+
Band.create!(name: "Depeche Mode")
|
|
1919
|
+
end
|
|
1920
|
+
|
|
1921
|
+
let!(:new_order) do
|
|
1922
|
+
Band.create!(name: "New Order")
|
|
1923
|
+
end
|
|
1924
|
+
|
|
1925
|
+
let!(:rolling_stones) do
|
|
1926
|
+
Band.create!(name: "The Rolling Stones")
|
|
1927
|
+
end
|
|
1928
|
+
|
|
1929
|
+
context "when the context is not cached" do
|
|
1930
|
+
|
|
1931
|
+
let(:criteria) do
|
|
1932
|
+
Band.where(name: "Depeche Mode")
|
|
1933
|
+
end
|
|
1934
|
+
|
|
1935
|
+
let(:context) do
|
|
1936
|
+
described_class.new(criteria)
|
|
1937
|
+
end
|
|
1938
|
+
|
|
1939
|
+
it "returns the last matching document" do
|
|
1940
|
+
expect(context.last).to eq(depeche_mode)
|
|
1941
|
+
end
|
|
1942
|
+
|
|
1943
|
+
context 'when the criteria has a collation' do
|
|
1944
|
+
min_server_version '3.4'
|
|
1945
|
+
|
|
1946
|
+
let(:criteria) do
|
|
1947
|
+
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
1948
|
+
end
|
|
1949
|
+
|
|
1950
|
+
it "returns the last matching document" do
|
|
1951
|
+
expect(context.last).to eq(depeche_mode)
|
|
1952
|
+
end
|
|
1953
|
+
end
|
|
1954
|
+
end
|
|
1955
|
+
|
|
1956
|
+
context "when using .desc" do
|
|
1957
|
+
|
|
1958
|
+
let(:criteria) do
|
|
1959
|
+
Band.desc(:name)
|
|
1960
|
+
end
|
|
1961
|
+
|
|
1962
|
+
let(:context) do
|
|
1963
|
+
described_class.new(criteria)
|
|
1964
|
+
end
|
|
1965
|
+
|
|
1966
|
+
context "when there is sort on the context" do
|
|
1967
|
+
|
|
1968
|
+
it "follows the main sort" do
|
|
1969
|
+
expect(context.last).to eq(depeche_mode)
|
|
1970
|
+
end
|
|
1971
|
+
end
|
|
1972
|
+
|
|
1973
|
+
context "when subsequently calling #first" do
|
|
1974
|
+
|
|
1975
|
+
it "returns the correct document" do
|
|
1976
|
+
expect(context.last).to eq(depeche_mode)
|
|
1977
|
+
expect(context.first).to eq(rolling_stones)
|
|
1978
|
+
end
|
|
1979
|
+
end
|
|
1980
|
+
end
|
|
1981
|
+
|
|
1982
|
+
context 'when the criteria has no sort' do
|
|
1983
|
+
|
|
1984
|
+
let(:criteria) do
|
|
1985
|
+
Band.all
|
|
1986
|
+
end
|
|
1987
|
+
|
|
1988
|
+
let(:context) do
|
|
1989
|
+
described_class.new(criteria)
|
|
1990
|
+
end
|
|
1991
|
+
|
|
1992
|
+
it 'applies a sort on _id' do
|
|
1993
|
+
expect(context.last).to eq(rolling_stones)
|
|
1994
|
+
end
|
|
1995
|
+
|
|
1996
|
+
context 'when calling #first' do
|
|
1997
|
+
|
|
1998
|
+
it 'returns the first document, sorted by _id' do
|
|
1999
|
+
pending "MONGOID-5416"
|
|
2000
|
+
expect(context.last).to eq(rolling_stones)
|
|
2001
|
+
expect(context.first).to eq(depeche_mode)
|
|
2002
|
+
end
|
|
2003
|
+
end
|
|
2004
|
+
|
|
2005
|
+
context 'with option { id_sort: :none }' do
|
|
2006
|
+
let(:opts) do
|
|
2007
|
+
{ id_sort: :none }
|
|
2008
|
+
end
|
|
2009
|
+
|
|
2010
|
+
it 'doesn\'t apply the sort on _id' do
|
|
2011
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
|
2012
|
+
end
|
|
2013
|
+
|
|
2014
|
+
context 'when calling #first' do
|
|
2015
|
+
|
|
2016
|
+
it 'doesn\'t apply the sort on _id' do
|
|
2017
|
+
pending "MONGOID-5416"
|
|
2018
|
+
expect(context.last(opts)).to eq(rolling_stones)
|
|
2019
|
+
expect(context.first(opts)).to eq(depeche_mode)
|
|
2020
|
+
end
|
|
2021
|
+
end
|
|
2022
|
+
end
|
|
2023
|
+
end
|
|
2024
|
+
|
|
2025
|
+
context 'when the criteria has a sort' do
|
|
2026
|
+
|
|
2027
|
+
let(:criteria) do
|
|
2028
|
+
Band.desc(:name)
|
|
2029
|
+
end
|
|
2030
|
+
|
|
2031
|
+
let(:context) do
|
|
2032
|
+
described_class.new(criteria)
|
|
2033
|
+
end
|
|
2034
|
+
|
|
2035
|
+
|
|
2036
|
+
it 'applies the criteria sort' do
|
|
2037
|
+
expect(context.last).to eq(depeche_mode)
|
|
2038
|
+
end
|
|
2039
|
+
|
|
2040
|
+
context 'when calling #first' do
|
|
2041
|
+
|
|
2042
|
+
it 'applies the criteria sort' do
|
|
2043
|
+
expect(context.last).to eq(depeche_mode)
|
|
2044
|
+
expect(context.first).to eq(rolling_stones)
|
|
2045
|
+
end
|
|
2046
|
+
end
|
|
2047
|
+
|
|
2048
|
+
context 'with option { id_sort: :none }' do
|
|
2049
|
+
|
|
2050
|
+
let(:opts) do
|
|
2051
|
+
{ id_sort: :none }
|
|
2052
|
+
end
|
|
2053
|
+
|
|
2054
|
+
it 'uses the preexisting sort' do
|
|
2055
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
|
2056
|
+
end
|
|
2057
|
+
|
|
2058
|
+
context 'when calling #first' do
|
|
2059
|
+
|
|
2060
|
+
it 'uses the preexisting sort' do
|
|
2061
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
|
2062
|
+
expect(context.first(opts)).to eq(rolling_stones)
|
|
2063
|
+
end
|
|
2064
|
+
end
|
|
2065
|
+
end
|
|
2066
|
+
end
|
|
2067
|
+
|
|
2068
|
+
context "when using .sort" do
|
|
2069
|
+
|
|
2070
|
+
let(:criteria) do
|
|
2071
|
+
Band.all.sort(:name => -1).criteria
|
|
2072
|
+
end
|
|
2073
|
+
|
|
2074
|
+
let(:context) do
|
|
2075
|
+
described_class.new(criteria)
|
|
2076
|
+
end
|
|
2077
|
+
|
|
2078
|
+
context "when there is sort on the context" do
|
|
2079
|
+
|
|
2080
|
+
it "follows the main sort" do
|
|
2081
|
+
expect(context.last).to eq(depeche_mode)
|
|
2082
|
+
end
|
|
2083
|
+
end
|
|
2084
|
+
|
|
2085
|
+
context "when subsequently calling #first" do
|
|
2086
|
+
|
|
2087
|
+
it "returns the correct document" do
|
|
2088
|
+
expect(context.last).to eq(depeche_mode)
|
|
2089
|
+
expect(context.first).to eq(rolling_stones)
|
|
2090
|
+
end
|
|
2091
|
+
end
|
|
2092
|
+
end
|
|
2093
|
+
|
|
2094
|
+
context "when the context is cached" do
|
|
2095
|
+
|
|
2096
|
+
let(:criteria) do
|
|
2097
|
+
Band.where(name: "Depeche Mode").cache
|
|
2098
|
+
end
|
|
2099
|
+
|
|
2100
|
+
let(:context) do
|
|
2101
|
+
described_class.new(criteria)
|
|
2102
|
+
end
|
|
2103
|
+
|
|
2104
|
+
context "when the cache is loaded" do
|
|
2105
|
+
|
|
2106
|
+
before do
|
|
2107
|
+
context.to_a
|
|
2108
|
+
end
|
|
2109
|
+
|
|
2110
|
+
it "returns the last document without touching the database" do
|
|
2111
|
+
expect(context).to receive(:view).never
|
|
2112
|
+
expect(context.last).to eq(depeche_mode)
|
|
2113
|
+
end
|
|
2114
|
+
end
|
|
2115
|
+
|
|
2116
|
+
context "when last method was called before" do
|
|
2117
|
+
|
|
2118
|
+
before do
|
|
2119
|
+
context.last
|
|
2120
|
+
end
|
|
2121
|
+
|
|
2122
|
+
it "returns the last document without touching the database" do
|
|
2123
|
+
expect(context).to receive(:view).never
|
|
2124
|
+
expect(context.last).to eq(depeche_mode)
|
|
2125
|
+
end
|
|
2126
|
+
end
|
|
2127
|
+
end
|
|
2128
|
+
|
|
2129
|
+
context "when including a limit" do
|
|
2130
|
+
|
|
2131
|
+
context "when the context is not cached" do
|
|
2132
|
+
|
|
2133
|
+
let(:context) do
|
|
2134
|
+
described_class.new(criteria)
|
|
2135
|
+
end
|
|
2136
|
+
|
|
2137
|
+
context "when the limit is 1" do
|
|
2138
|
+
let(:criteria) do
|
|
2139
|
+
Band.criteria
|
|
2140
|
+
end
|
|
2141
|
+
|
|
2142
|
+
let(:docs) do
|
|
2143
|
+
context.last(1)
|
|
2144
|
+
end
|
|
2145
|
+
|
|
2146
|
+
it "returns an array of documents" do
|
|
2147
|
+
expect(docs).to eq([ rolling_stones ])
|
|
2148
|
+
end
|
|
2149
|
+
end
|
|
2150
|
+
|
|
2151
|
+
context "when the limit is >1" do
|
|
2152
|
+
let(:criteria) do
|
|
2153
|
+
Band.criteria
|
|
2154
|
+
end
|
|
2155
|
+
|
|
2156
|
+
let(:docs) do
|
|
2157
|
+
context.last(2)
|
|
2158
|
+
end
|
|
2159
|
+
|
|
2160
|
+
it "returns the number of documents in order" do
|
|
2161
|
+
expect(docs).to eq([ new_order, rolling_stones ])
|
|
2162
|
+
end
|
|
2163
|
+
end
|
|
2164
|
+
|
|
2165
|
+
context 'when the criteria has a collation' do
|
|
2166
|
+
min_server_version '3.4'
|
|
2167
|
+
|
|
2168
|
+
let(:criteria) do
|
|
2169
|
+
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
2170
|
+
end
|
|
2171
|
+
|
|
2172
|
+
it "returns the first matching document" do
|
|
2173
|
+
expect(context.last(1)).to eq([ depeche_mode ])
|
|
2174
|
+
end
|
|
2175
|
+
end
|
|
2176
|
+
end
|
|
2177
|
+
|
|
2178
|
+
context "when the context is cached" do
|
|
2179
|
+
|
|
2180
|
+
let(:context) do
|
|
2181
|
+
described_class.new(criteria)
|
|
2182
|
+
end
|
|
2183
|
+
|
|
2184
|
+
context "when the whole context is loaded" do
|
|
2185
|
+
|
|
2186
|
+
before do
|
|
2187
|
+
context.to_a
|
|
2188
|
+
end
|
|
2189
|
+
|
|
2190
|
+
context "when all of the documents are cached" do
|
|
2191
|
+
|
|
2192
|
+
let(:criteria) do
|
|
2193
|
+
Band.all.cache
|
|
2194
|
+
end
|
|
2195
|
+
|
|
2196
|
+
context "when requesting all of the documents" do
|
|
2197
|
+
|
|
2198
|
+
let(:docs) do
|
|
2199
|
+
context.last(3)
|
|
2200
|
+
end
|
|
2201
|
+
|
|
2202
|
+
it "returns all of the documents without touching the database" do
|
|
2203
|
+
expect(context).to receive(:view).never
|
|
2204
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
2205
|
+
end
|
|
2206
|
+
end
|
|
2207
|
+
|
|
2208
|
+
context "when requesting fewer than all of the documents" do
|
|
2209
|
+
|
|
2210
|
+
let(:docs) do
|
|
2211
|
+
context.last(2)
|
|
2212
|
+
end
|
|
2213
|
+
|
|
2214
|
+
it "returns all of the documents without touching the database" do
|
|
2215
|
+
expect(context).to receive(:view).never
|
|
2216
|
+
expect(docs).to eq([ new_order, rolling_stones ])
|
|
2217
|
+
end
|
|
2218
|
+
end
|
|
2219
|
+
end
|
|
2220
|
+
|
|
2221
|
+
context "when only one document is cached" do
|
|
2222
|
+
|
|
2223
|
+
let(:criteria) do
|
|
2224
|
+
Band.where(name: "Depeche Mode").cache
|
|
2225
|
+
end
|
|
2226
|
+
|
|
2227
|
+
context "when requesting one document" do
|
|
2228
|
+
|
|
2229
|
+
let(:docs) do
|
|
2230
|
+
context.last(1)
|
|
2231
|
+
end
|
|
2232
|
+
|
|
2233
|
+
it "returns one document without touching the database" do
|
|
2234
|
+
expect(context).to receive(:view).never
|
|
2235
|
+
expect(docs).to eq([ depeche_mode ])
|
|
2236
|
+
end
|
|
2237
|
+
end
|
|
2238
|
+
end
|
|
2239
|
+
end
|
|
2240
|
+
|
|
2241
|
+
context "when the last method was called before" do
|
|
2242
|
+
|
|
2243
|
+
let(:context) do
|
|
2244
|
+
described_class.new(criteria)
|
|
2245
|
+
end
|
|
2246
|
+
|
|
2247
|
+
let(:criteria) do
|
|
2248
|
+
Band.all.cache
|
|
2249
|
+
end
|
|
2250
|
+
|
|
2251
|
+
before do
|
|
2252
|
+
context.last(before_limit)
|
|
2253
|
+
end
|
|
2254
|
+
|
|
2255
|
+
let(:docs) do
|
|
2256
|
+
context.last(limit)
|
|
2257
|
+
end
|
|
2258
|
+
|
|
2259
|
+
context "when getting all of the documents before" do
|
|
2260
|
+
let(:before_limit) { 3 }
|
|
2261
|
+
|
|
2262
|
+
context "when getting all of the documents" do
|
|
2263
|
+
let(:limit) { 3 }
|
|
2264
|
+
|
|
2265
|
+
it "returns all documents without touching the database" do
|
|
2266
|
+
expect(context).to receive(:view).never
|
|
2267
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
2268
|
+
end
|
|
2269
|
+
end
|
|
2270
|
+
|
|
2271
|
+
context "when getting fewer documents" do
|
|
2272
|
+
let(:limit) { 2 }
|
|
2273
|
+
|
|
2274
|
+
it "returns the correct documents without touching the database" do
|
|
2275
|
+
expect(context).to receive(:view).never
|
|
2276
|
+
expect(docs).to eq([ new_order, rolling_stones ])
|
|
2277
|
+
end
|
|
2278
|
+
end
|
|
2279
|
+
end
|
|
2280
|
+
|
|
2281
|
+
context "when getting fewer documents before" do
|
|
2282
|
+
let(:before_limit) { 2 }
|
|
2283
|
+
|
|
2284
|
+
context "when getting the same number of documents" do
|
|
2285
|
+
let(:limit) { 2 }
|
|
2286
|
+
|
|
2287
|
+
it "returns the correct documents without touching the database" do
|
|
2288
|
+
expect(context).to receive(:view).never
|
|
2289
|
+
expect(docs).to eq([ new_order, rolling_stones ])
|
|
2290
|
+
end
|
|
2291
|
+
end
|
|
2292
|
+
|
|
2293
|
+
context "when getting more documents" do
|
|
2294
|
+
let(:limit) { 3 }
|
|
2295
|
+
|
|
2296
|
+
it "returns the correct documents and touches the database" do
|
|
2297
|
+
expect(context).to receive(:view).twice.and_call_original
|
|
2298
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
2299
|
+
end
|
|
2300
|
+
end
|
|
2301
|
+
end
|
|
2302
|
+
|
|
2303
|
+
context "when getting one document before" do
|
|
2304
|
+
let(:before_limit) { 1 }
|
|
2305
|
+
|
|
2306
|
+
context "when getting one document" do
|
|
2307
|
+
let(:limit) { 1 }
|
|
2308
|
+
|
|
2309
|
+
it "returns the correct documents without touching the database" do
|
|
2310
|
+
expect(context).to receive(:view).never
|
|
2311
|
+
expect(docs).to eq([ rolling_stones ])
|
|
2312
|
+
end
|
|
2313
|
+
end
|
|
2314
|
+
|
|
2315
|
+
context "when getting more than one document" do
|
|
2316
|
+
let(:limit) { 3 }
|
|
2317
|
+
|
|
2318
|
+
it "returns the correct documents and touches the database" do
|
|
2319
|
+
expect(context).to receive(:view).twice.and_call_original
|
|
2320
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
2321
|
+
end
|
|
2322
|
+
end
|
|
2323
|
+
end
|
|
2324
|
+
end
|
|
2325
|
+
end
|
|
2326
|
+
end
|
|
2327
|
+
|
|
2328
|
+
context "when calling #last then #first" do
|
|
2329
|
+
|
|
2330
|
+
let(:context) do
|
|
2331
|
+
described_class.new(criteria)
|
|
2332
|
+
end
|
|
2333
|
+
|
|
2334
|
+
let(:criteria) do
|
|
2335
|
+
Band.all.cache
|
|
2336
|
+
end
|
|
2337
|
+
|
|
2338
|
+
before do
|
|
2339
|
+
context.last(before_limit)
|
|
2340
|
+
end
|
|
2341
|
+
|
|
2342
|
+
let(:docs) do
|
|
2343
|
+
context.first(limit)
|
|
2344
|
+
end
|
|
2345
|
+
|
|
2346
|
+
context "when getting one from the beginning and one from the end" do
|
|
2347
|
+
let(:before_limit) { 2 }
|
|
2348
|
+
let(:limit) { 1 }
|
|
2349
|
+
|
|
2350
|
+
it "hits the database" do
|
|
2351
|
+
expect(context).to receive(:view).exactly(3).times.and_call_original
|
|
2352
|
+
docs
|
|
2353
|
+
end
|
|
2354
|
+
|
|
2355
|
+
it "gets the correct document" do
|
|
2356
|
+
pending "MONGOID-5416"
|
|
2357
|
+
expect(docs).to eq([ depeche_mode ])
|
|
2358
|
+
end
|
|
2359
|
+
end
|
|
2360
|
+
end
|
|
2361
|
+
end
|
|
2362
|
+
|
|
2363
|
+
describe "#initialize" do
|
|
2364
|
+
|
|
2365
|
+
let(:criteria) do
|
|
2366
|
+
Band.where(name: "Depeche Mode").no_timeout
|
|
2367
|
+
end
|
|
2368
|
+
|
|
2369
|
+
let(:context) do
|
|
2370
|
+
described_class.new(criteria)
|
|
2371
|
+
end
|
|
2372
|
+
|
|
2373
|
+
it "sets the criteria" do
|
|
2374
|
+
expect(context.criteria).to eq(criteria)
|
|
2375
|
+
end
|
|
2376
|
+
|
|
2377
|
+
it "sets the klass" do
|
|
2378
|
+
expect(context.klass).to eq(Band)
|
|
2379
|
+
end
|
|
2380
|
+
|
|
2381
|
+
it "sets the view" do
|
|
2382
|
+
expect(context.view).to be_a(Mongo::Collection::View)
|
|
2383
|
+
end
|
|
2384
|
+
|
|
2385
|
+
it "sets the view selector" do
|
|
2386
|
+
expect(context.view.selector).to eq({ "name" => "Depeche Mode" })
|
|
2387
|
+
end
|
|
2388
|
+
end
|
|
2389
|
+
|
|
2390
|
+
[ :length, :size ].each do |method|
|
|
2391
|
+
|
|
2392
|
+
describe "##{method}" do
|
|
2393
|
+
|
|
2394
|
+
before do
|
|
2395
|
+
Band.create!(name: "Depeche Mode")
|
|
2396
|
+
Band.create!(name: "New Order")
|
|
2397
|
+
end
|
|
2398
|
+
|
|
2399
|
+
context "when the criteria has a limit" do
|
|
2400
|
+
|
|
2401
|
+
let(:criteria) do
|
|
2402
|
+
Band.limit(1)
|
|
2403
|
+
end
|
|
2404
|
+
|
|
2405
|
+
let(:context) do
|
|
2406
|
+
described_class.new(criteria)
|
|
2407
|
+
end
|
|
2408
|
+
|
|
2409
|
+
it "returns the number of documents that match" do
|
|
2410
|
+
expect(context.send(method)).to eq(2)
|
|
2411
|
+
end
|
|
2412
|
+
|
|
2413
|
+
context "when calling more than once" do
|
|
2414
|
+
it "returns the cached value for subsequent calls" do
|
|
2415
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
|
2416
|
+
2.times { expect(context.send(method)).to eq(2) }
|
|
2417
|
+
end
|
|
2418
|
+
end
|
|
2419
|
+
|
|
2420
|
+
context "when the results have been iterated over" do
|
|
2421
|
+
|
|
2422
|
+
before do
|
|
2423
|
+
context.entries
|
|
2424
|
+
end
|
|
2425
|
+
|
|
2426
|
+
it "returns the cached value for all calls" do
|
|
2427
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
|
2428
|
+
expect(context.send(method)).to eq(2)
|
|
2429
|
+
end
|
|
2430
|
+
|
|
2431
|
+
context "when the results have been iterated over multiple times" do
|
|
2432
|
+
|
|
2433
|
+
before do
|
|
2434
|
+
context.entries
|
|
2435
|
+
end
|
|
2436
|
+
|
|
2437
|
+
it "resets the length on each full iteration" do
|
|
2438
|
+
expect(context.size).to eq(2)
|
|
2439
|
+
end
|
|
2440
|
+
end
|
|
2441
|
+
end
|
|
2442
|
+
end
|
|
2443
|
+
|
|
2444
|
+
context "when the criteria has no limit" do
|
|
2445
|
+
|
|
2446
|
+
let(:criteria) do
|
|
2447
|
+
Band.where(name: "Depeche Mode")
|
|
2448
|
+
end
|
|
1499
2449
|
|
|
1500
2450
|
let(:context) do
|
|
1501
2451
|
described_class.new(criteria)
|
|
@@ -1541,11 +2491,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1541
2491
|
describe "#limit" do
|
|
1542
2492
|
|
|
1543
2493
|
let!(:depeche_mode) do
|
|
1544
|
-
Band.create(name: "Depeche Mode")
|
|
2494
|
+
Band.create!(name: "Depeche Mode")
|
|
1545
2495
|
end
|
|
1546
2496
|
|
|
1547
2497
|
let!(:new_order) do
|
|
1548
|
-
Band.create(name: "New Order")
|
|
2498
|
+
Band.create!(name: "New Order")
|
|
1549
2499
|
end
|
|
1550
2500
|
|
|
1551
2501
|
let(:criteria) do
|
|
@@ -1561,11 +2511,85 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1561
2511
|
end
|
|
1562
2512
|
end
|
|
1563
2513
|
|
|
2514
|
+
describe "#take" do
|
|
2515
|
+
|
|
2516
|
+
let!(:depeche_mode) do
|
|
2517
|
+
Band.create!(name: "Depeche Mode")
|
|
2518
|
+
end
|
|
2519
|
+
|
|
2520
|
+
let!(:new_order) do
|
|
2521
|
+
Band.create!(name: "New Order")
|
|
2522
|
+
end
|
|
2523
|
+
|
|
2524
|
+
let!(:rolling_stones) do
|
|
2525
|
+
Band.create!(name: "The Rolling Stones")
|
|
2526
|
+
end
|
|
2527
|
+
|
|
2528
|
+
let(:criteria) do
|
|
2529
|
+
Band.all
|
|
2530
|
+
end
|
|
2531
|
+
|
|
2532
|
+
let(:context) do
|
|
2533
|
+
described_class.new(criteria)
|
|
2534
|
+
end
|
|
2535
|
+
|
|
2536
|
+
it "takes the correct number results" do
|
|
2537
|
+
expect(context.take(2)).to eq([ depeche_mode, new_order ])
|
|
2538
|
+
end
|
|
2539
|
+
|
|
2540
|
+
it "returns an array when passing 1" do
|
|
2541
|
+
expect(context.take(1)).to eq([ depeche_mode ])
|
|
2542
|
+
end
|
|
2543
|
+
|
|
2544
|
+
it "does not return an array when not passing an argument" do
|
|
2545
|
+
expect(context.take).to eq(depeche_mode)
|
|
2546
|
+
end
|
|
2547
|
+
|
|
2548
|
+
it "returns all the documents taking more than whats in the db" do
|
|
2549
|
+
expect(context.take(5)).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
2550
|
+
end
|
|
2551
|
+
end
|
|
2552
|
+
|
|
2553
|
+
describe "#take!" do
|
|
2554
|
+
|
|
2555
|
+
let!(:depeche_mode) do
|
|
2556
|
+
Band.create!(name: "Depeche Mode")
|
|
2557
|
+
end
|
|
2558
|
+
|
|
2559
|
+
let!(:new_order) do
|
|
2560
|
+
Band.create!(name: "New Order")
|
|
2561
|
+
end
|
|
2562
|
+
|
|
2563
|
+
let!(:rolling_stones) do
|
|
2564
|
+
Band.create!(name: "The Rolling Stones")
|
|
2565
|
+
end
|
|
2566
|
+
|
|
2567
|
+
let(:criteria) do
|
|
2568
|
+
Band.all
|
|
2569
|
+
end
|
|
2570
|
+
|
|
2571
|
+
let(:context) do
|
|
2572
|
+
described_class.new(criteria)
|
|
2573
|
+
end
|
|
2574
|
+
|
|
2575
|
+
it "takes the first document" do
|
|
2576
|
+
expect(context.take!).to eq(depeche_mode)
|
|
2577
|
+
end
|
|
2578
|
+
|
|
2579
|
+
context "when there are no documents" do
|
|
2580
|
+
it "raises an error" do
|
|
2581
|
+
expect do
|
|
2582
|
+
Person.take!
|
|
2583
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2584
|
+
end
|
|
2585
|
+
end
|
|
2586
|
+
end
|
|
2587
|
+
|
|
1564
2588
|
describe "#map" do
|
|
1565
2589
|
|
|
1566
2590
|
before do
|
|
1567
|
-
Band.create(name: "Depeche Mode")
|
|
1568
|
-
Band.create(name: "New Order")
|
|
2591
|
+
Band.create!(name: "Depeche Mode")
|
|
2592
|
+
Band.create!(name: "New Order")
|
|
1569
2593
|
end
|
|
1570
2594
|
|
|
1571
2595
|
let(:criteria) do
|
|
@@ -1578,7 +2602,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1578
2602
|
|
|
1579
2603
|
context "when passed the symbol field name" do
|
|
1580
2604
|
|
|
1581
|
-
it "performs mapping" do
|
|
2605
|
+
it "performs mapping and warns" do
|
|
2606
|
+
expect(Mongoid::Warnings).to receive(:warn_map_field_deprecated)
|
|
1582
2607
|
expect(context.map(:name)).to eq ["Depeche Mode", "New Order"]
|
|
1583
2608
|
end
|
|
1584
2609
|
end
|
|
@@ -1594,11 +2619,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1594
2619
|
describe "#map_reduce" do
|
|
1595
2620
|
|
|
1596
2621
|
let!(:depeche_mode) do
|
|
1597
|
-
Band.create(name: "Depeche Mode", likes: 200)
|
|
2622
|
+
Band.create!(name: "Depeche Mode", likes: 200)
|
|
1598
2623
|
end
|
|
1599
2624
|
|
|
1600
2625
|
let!(:tool) do
|
|
1601
|
-
Band.create(name: "Tool", likes: 100)
|
|
2626
|
+
Band.create!(name: "Tool", likes: 100)
|
|
1602
2627
|
end
|
|
1603
2628
|
|
|
1604
2629
|
let(:map) do
|
|
@@ -2023,11 +3048,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2023
3048
|
describe "#skip" do
|
|
2024
3049
|
|
|
2025
3050
|
let!(:depeche_mode) do
|
|
2026
|
-
Band.create(name: "Depeche Mode")
|
|
3051
|
+
Band.create!(name: "Depeche Mode")
|
|
2027
3052
|
end
|
|
2028
3053
|
|
|
2029
3054
|
let!(:new_order) do
|
|
2030
|
-
Band.create(name: "New Order")
|
|
3055
|
+
Band.create!(name: "New Order")
|
|
2031
3056
|
end
|
|
2032
3057
|
|
|
2033
3058
|
let(:criteria) do
|
|
@@ -2046,11 +3071,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2046
3071
|
describe "#sort" do
|
|
2047
3072
|
|
|
2048
3073
|
let!(:depeche_mode) do
|
|
2049
|
-
Band.create(name: "Depeche Mode")
|
|
3074
|
+
Band.create!(name: "Depeche Mode")
|
|
2050
3075
|
end
|
|
2051
3076
|
|
|
2052
3077
|
let!(:new_order) do
|
|
2053
|
-
Band.create(name: "New Order")
|
|
3078
|
+
Band.create!(name: "New Order")
|
|
2054
3079
|
end
|
|
2055
3080
|
|
|
2056
3081
|
let(:criteria) do
|
|
@@ -2089,11 +3114,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2089
3114
|
describe "#update" do
|
|
2090
3115
|
|
|
2091
3116
|
let!(:depeche_mode) do
|
|
2092
|
-
Band.create(name: "Depeche Mode")
|
|
3117
|
+
Band.create!(name: "Depeche Mode")
|
|
2093
3118
|
end
|
|
2094
3119
|
|
|
2095
3120
|
let!(:new_order) do
|
|
2096
|
-
Band.create(name: "New Order")
|
|
3121
|
+
Band.create!(name: "New Order")
|
|
2097
3122
|
end
|
|
2098
3123
|
|
|
2099
3124
|
let(:criteria) do
|
|
@@ -2107,11 +3132,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2107
3132
|
context "when adding an element to a HABTM set" do
|
|
2108
3133
|
|
|
2109
3134
|
let(:person) do
|
|
2110
|
-
Person.create
|
|
3135
|
+
Person.create!
|
|
2111
3136
|
end
|
|
2112
3137
|
|
|
2113
3138
|
let(:preference) do
|
|
2114
|
-
Preference.create
|
|
3139
|
+
Preference.create!
|
|
2115
3140
|
end
|
|
2116
3141
|
|
|
2117
3142
|
before do
|
|
@@ -2250,12 +3275,12 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2250
3275
|
b.labels << Label.new(name: 'Warner')
|
|
2251
3276
|
b.labels << Label.new(name: 'Sony')
|
|
2252
3277
|
b.labels << Label.new(name: 'Cbs')
|
|
2253
|
-
b.save
|
|
3278
|
+
b.save!
|
|
2254
3279
|
|
|
2255
3280
|
b = Band.new(name: 'FKA Twigs')
|
|
2256
3281
|
b.labels << Label.new(name: 'Warner')
|
|
2257
3282
|
b.labels << Label.new(name: 'Cbs')
|
|
2258
|
-
b.save
|
|
3283
|
+
b.save!
|
|
2259
3284
|
end
|
|
2260
3285
|
|
|
2261
3286
|
|
|
@@ -2281,11 +3306,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2281
3306
|
describe "#update_all" do
|
|
2282
3307
|
|
|
2283
3308
|
let!(:depeche_mode) do
|
|
2284
|
-
Band.create(name: "Depeche Mode", origin: "Essex")
|
|
3309
|
+
Band.create!(name: "Depeche Mode", origin: "Essex")
|
|
2285
3310
|
end
|
|
2286
3311
|
|
|
2287
3312
|
let!(:new_order) do
|
|
2288
|
-
Band.create(name: "New Order")
|
|
3313
|
+
Band.create!(name: "New Order")
|
|
2289
3314
|
end
|
|
2290
3315
|
|
|
2291
3316
|
let(:criteria) do
|
|
@@ -2423,12 +3448,12 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2423
3448
|
b.labels << Label.new(name: 'Warner')
|
|
2424
3449
|
b.labels << Label.new(name: 'Sony')
|
|
2425
3450
|
b.labels << Label.new(name: 'Cbs')
|
|
2426
|
-
b.save
|
|
3451
|
+
b.save!
|
|
2427
3452
|
|
|
2428
3453
|
b = Band.new(name: 'FKA Twigs')
|
|
2429
3454
|
b.labels << Label.new(name: 'Warner')
|
|
2430
3455
|
b.labels << Label.new(name: 'Cbs')
|
|
2431
|
-
b.save
|
|
3456
|
+
b.save!
|
|
2432
3457
|
end
|
|
2433
3458
|
|
|
2434
3459
|
|