mongoid 6.4.8 → 7.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +30 -30
- data/LICENSE +1 -0
- data/README.md +34 -20
- data/Rakefile +75 -6
- data/lib/config/locales/en.yml +149 -66
- data/lib/mongoid/association/accessors.rb +402 -0
- data/lib/mongoid/association/bindable.rb +179 -0
- data/lib/mongoid/association/builders.rb +84 -0
- data/lib/mongoid/association/constrainable.rb +43 -0
- data/lib/mongoid/association/depending.rb +128 -0
- data/lib/mongoid/association/eager_loadable.rb +35 -0
- data/lib/mongoid/association/embedded/batchable.rb +375 -0
- data/lib/mongoid/association/embedded/cyclic.rb +102 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +52 -0
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +38 -0
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +111 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +134 -0
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +41 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +45 -0
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +549 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +183 -0
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +43 -0
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +39 -0
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +145 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +150 -0
- data/lib/mongoid/association/embedded.rb +6 -0
- data/lib/mongoid/association/macros.rb +227 -0
- data/lib/mongoid/association/many.rb +198 -0
- data/lib/mongoid/association/marshalable.rb +31 -0
- data/lib/mongoid/association/nested/many.rb +191 -0
- data/lib/mongoid/association/nested/nested_buildable.rb +66 -0
- data/lib/mongoid/association/nested/one.rb +116 -0
- data/lib/mongoid/association/nested.rb +15 -0
- data/lib/mongoid/association/one.rb +53 -0
- data/lib/mongoid/association/options.rb +122 -0
- data/lib/mongoid/association/proxy.rb +189 -0
- data/lib/mongoid/association/referenced/auto_save.rb +73 -0
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +82 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +48 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +73 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +125 -0
- data/lib/mongoid/association/referenced/belongs_to.rb +226 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +152 -0
- data/lib/mongoid/association/referenced/eager.rb +163 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +72 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +53 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +292 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +270 -0
- data/lib/mongoid/association/referenced/has_many/binding.rb +36 -0
- data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +44 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +502 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +545 -0
- data/lib/mongoid/association/referenced/has_many.rb +251 -0
- data/lib/mongoid/association/referenced/has_one/binding.rb +42 -0
- data/lib/mongoid/association/referenced/has_one/buildable.rb +74 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +36 -0
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +113 -0
- data/lib/mongoid/association/referenced/has_one/proxy.rb +111 -0
- data/lib/mongoid/association/referenced/has_one.rb +184 -0
- data/lib/mongoid/association/referenced/syncable.rb +155 -0
- data/lib/mongoid/association/referenced.rb +9 -0
- data/lib/mongoid/association/reflections.rb +69 -0
- data/lib/mongoid/association/relatable.rb +455 -0
- data/lib/mongoid/association.rb +135 -0
- data/lib/mongoid/atomic/modifiers.rb +27 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +24 -8
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -8
- data/lib/mongoid/atomic/paths/embedded.rb +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +43 -48
- data/lib/mongoid/attributes/dynamic.rb +19 -33
- data/lib/mongoid/attributes/nested.rb +29 -21
- data/lib/mongoid/attributes/processing.rb +11 -26
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +5 -10
- data/lib/mongoid/attributes.rb +94 -91
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +7 -61
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +17 -18
- data/lib/mongoid/clients/sessions.rb +22 -10
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +9 -13
- data/lib/mongoid/config/environment.rb +51 -13
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/client.rb +2 -17
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +123 -40
- data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
- data/lib/mongoid/contextual/aggregable/mongo.rb +25 -26
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +7 -38
- data/lib/mongoid/contextual/map_reduce.rb +5 -33
- data/lib/mongoid/contextual/memory.rb +167 -70
- data/lib/mongoid/contextual/mongo.rb +295 -106
- data/lib/mongoid/contextual/none.rb +88 -28
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +20 -14
- data/lib/mongoid/criteria/findable.rb +12 -15
- data/lib/mongoid/criteria/includable.rb +21 -28
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +2 -5
- data/lib/mongoid/criteria/modifiable.rb +10 -22
- data/lib/mongoid/criteria/options.rb +4 -5
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +5 -26
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -25
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -13
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -16
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -19
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
- data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +13 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +101 -27
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +205 -44
- data/lib/mongoid/criteria/queryable/optional.rb +5 -48
- data/lib/mongoid/criteria/queryable/options.rb +2 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +14 -19
- data/lib/mongoid/criteria/queryable/selectable.rb +436 -166
- data/lib/mongoid/criteria/queryable/selector.rb +45 -55
- data/lib/mongoid/criteria/queryable/smash.rb +2 -11
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +7 -9
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +90 -75
- data/lib/mongoid/document.rb +43 -74
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +25 -15
- data/lib/mongoid/errors/eager_load.rb +6 -5
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +31 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -9
- data/lib/mongoid/errors/invalid_relation_option.rb +28 -0
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/invalid_value.rb +2 -1
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +3 -10
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +2 -3
- data/lib/mongoid/errors/no_client_hosts.rb +2 -3
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -3
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -3
- data/lib/mongoid/errors/unknown_model.rb +24 -0
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +15 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +33 -42
- data/lib/mongoid/extensions/big_decimal.rb +2 -11
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +13 -12
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +56 -38
- data/lib/mongoid/extensions/integer.rb +5 -12
- data/lib/mongoid/extensions/module.rb +2 -3
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +21 -48
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +3 -11
- data/lib/mongoid/extensions/regexp.rb +3 -4
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +21 -41
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +12 -9
- data/lib/mongoid/extensions/time_with_zone.rb +25 -7
- data/lib/mongoid/extensions/true_class.rb +4 -7
- data/lib/mongoid/extensions.rb +18 -7
- data/lib/mongoid/factory.rb +59 -10
- data/lib/mongoid/fields/foreign_key.rb +8 -27
- data/lib/mongoid/fields/localized.rb +2 -11
- data/lib/mongoid/fields/standard.rb +8 -50
- data/lib/mongoid/fields/validators/macro.rb +37 -19
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +245 -70
- data/lib/mongoid/findable.rb +78 -27
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +10 -22
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +18 -35
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +3 -153
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +110 -0
- data/lib/mongoid/persistable/creatable.rb +4 -21
- data/lib/mongoid/persistable/deletable.rb +11 -26
- data/lib/mongoid/persistable/destroyable.rb +11 -10
- data/lib/mongoid/persistable/incrementable.rb +7 -8
- data/lib/mongoid/persistable/logical.rb +5 -7
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +14 -10
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +3 -8
- data/lib/mongoid/persistable/settable.rb +60 -18
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +32 -20
- data/lib/mongoid/persistable/upsertable.rb +4 -9
- data/lib/mongoid/persistable.rb +136 -42
- data/lib/mongoid/persistence_context.rb +101 -48
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +117 -130
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +3 -1
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +19 -44
- data/lib/mongoid/selectable.rb +8 -17
- data/lib/mongoid/serializable.rb +28 -33
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +3 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -5
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +2 -55
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +3 -2
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +3 -4
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +132 -0
- data/lib/mongoid/traversable.rb +183 -60
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +2 -3
- data/lib/mongoid/validatable/macros.rb +3 -8
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +25 -38
- data/lib/mongoid/validatable.rb +16 -35
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid/warnings.rb +29 -0
- data/lib/mongoid.rb +34 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -29
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +14 -3
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +349 -0
- data/spec/integration/associations/belongs_to_spec.rb +15 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +268 -0
- data/spec/integration/associations/embeds_many_spec.rb +206 -0
- data/spec/integration/associations/embeds_one_spec.rb +23 -0
- data/spec/integration/associations/foreign_key_spec.rb +98 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +176 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +61 -0
- data/spec/integration/callbacks_spec.rb +228 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/i18n_fallbacks_spec.rb +103 -0
- data/spec/integration/matcher_examples_spec.rb +758 -0
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +124 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +1067 -0
- data/spec/mongoid/association/auto_save_spec.rb +403 -0
- data/spec/mongoid/association/builders_spec.rb +255 -0
- data/spec/mongoid/association/constrainable_spec.rb +117 -0
- data/spec/mongoid/association/counter_cache_spec.rb +452 -0
- data/spec/mongoid/association/depending_spec.rb +959 -0
- data/spec/mongoid/association/eager_spec.rb +281 -0
- data/spec/mongoid/association/embedded/cyclic_spec.rb +180 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +67 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +173 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +36 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +559 -0
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +903 -0
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +106 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4673 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +190 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +864 -0
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +79 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +81 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1025 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +956 -0
- data/spec/mongoid/association/macros_spec.rb +1116 -0
- data/spec/mongoid/association/nested/many_spec.rb +232 -0
- data/spec/mongoid/association/nested/one_spec.rb +253 -0
- data/spec/mongoid/association/options_spec.rb +1323 -0
- data/spec/mongoid/association/polymorphic_spec.rb +162 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +243 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +238 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +412 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1373 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2046 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +180 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +148 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +196 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +3803 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +67 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1071 -0
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +155 -0
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +142 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +290 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2286 -0
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4112 -0
- data/spec/mongoid/association/referenced/has_many_models.rb +95 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +1248 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +133 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +159 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +193 -0
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1142 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1383 -0
- data/spec/mongoid/association/reflections_spec.rb +92 -0
- data/spec/mongoid/association/syncable_spec.rb +499 -0
- data/spec/mongoid/association_spec.rb +191 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +51 -2
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +107 -12
- data/spec/mongoid/atomic_spec.rb +57 -10
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +98 -78
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +44 -0
- data/spec/mongoid/attributes/readonly_spec.rb +84 -127
- data/spec/mongoid/attributes_spec.rb +461 -34
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +98 -9
- data/spec/mongoid/clients/options_spec.rb +93 -60
- data/spec/mongoid/clients/sessions_spec.rb +34 -33
- data/spec/mongoid/clients/transactions_spec.rb +415 -0
- data/spec/mongoid/clients_spec.rb +108 -16
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/environment_spec.rb +126 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +357 -2
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +242 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +30 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +24 -7
- data/spec/mongoid/contextual/memory_spec.rb +870 -88
- data/spec/mongoid/contextual/mongo_spec.rb +1339 -184
- data/spec/mongoid/contextual/none_spec.rb +45 -71
- data/spec/mongoid/copyable_spec.rb +294 -29
- data/spec/mongoid/copyable_spec_models.rb +47 -0
- data/spec/mongoid/criteria/findable_spec.rb +77 -20
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +215 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +53 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +42 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +30 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +14 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2069 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1155 -2927
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +114 -2
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +298 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +826 -478
- data/spec/mongoid/document_fields_spec.rb +113 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +131 -31
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +51 -0
- data/spec/mongoid/errors/eager_load_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +2 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +36 -58
- data/spec/mongoid/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +2 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -160
- data/spec/mongoid/extensions/date_time_spec.rb +17 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +17 -3
- data/spec/mongoid/extensions/hash_spec.rb +123 -1
- data/spec/mongoid/extensions/integer_spec.rb +14 -2
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +20 -35
- data/spec/mongoid/extensions/range_spec.rb +9 -0
- data/spec/mongoid/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +60 -27
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/extensions/time_spec.rb +29 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +301 -23
- data/spec/mongoid/fields/foreign_key_spec.rb +26 -32
- data/spec/mongoid/fields/localized_spec.rb +6 -4
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +419 -37
- data/spec/mongoid/findable_spec.rb +83 -19
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +54 -14
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +189 -96
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -27
- data/spec/mongoid/persistable/deletable_spec.rb +273 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +91 -7
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +189 -26
- data/spec/mongoid/persistable/settable_spec.rb +149 -18
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +106 -15
- data/spec/mongoid/persistence_context_spec.rb +29 -2
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +529 -85
- data/spec/mongoid/relations/proxy_spec.rb +126 -124
- data/spec/mongoid/reloadable_spec.rb +298 -20
- data/spec/mongoid/scopable_spec.rb +102 -37
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +251 -26
- data/spec/mongoid/stateful_spec.rb +3 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +15 -13
- data/spec/mongoid/tasks/database_spec.rb +3 -1
- data/spec/mongoid/threaded_spec.rb +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +8 -6
- data/spec/mongoid/touchable_spec.rb +588 -0
- data/spec/mongoid/touchable_spec_models.rb +53 -0
- data/spec/mongoid/traversable_spec.rb +1167 -1
- data/spec/mongoid/validatable/associated_spec.rb +3 -1
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +33 -26
- data/spec/mongoid/validatable/uniqueness_spec.rb +102 -73
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid_spec.rb +9 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -1
- data/spec/rails/mongoid_spec.rb +4 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +291 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +325 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +392 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +70 -83
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +27 -75
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +31 -0
- data/spec/support/models/account.rb +38 -0
- data/spec/support/models/acolyte.rb +19 -0
- data/spec/support/models/actor.rb +20 -0
- data/spec/support/models/actress.rb +4 -0
- data/spec/support/models/address.rb +85 -0
- data/spec/support/models/address_component.rb +7 -0
- data/spec/support/models/address_number.rb +8 -0
- data/spec/support/models/agency.rb +7 -0
- data/spec/support/models/agent.rb +18 -0
- data/spec/support/models/album.rb +20 -0
- data/spec/support/models/alert.rb +9 -0
- data/spec/support/models/animal.rb +28 -0
- data/spec/support/models/answer.rb +8 -0
- data/spec/support/models/appointment.rb +9 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/support/models/article.rb +14 -0
- data/spec/support/models/artist.rb +91 -0
- data/spec/support/models/artwork.rb +6 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/support/models/audio.rb +7 -0
- data/spec/support/models/augmentation.rb +13 -0
- data/spec/support/models/author.rb +8 -0
- data/spec/support/models/baby.rb +6 -0
- data/spec/support/models/band.rb +37 -0
- data/spec/support/models/bar.rb +12 -0
- data/spec/support/models/basic.rb +8 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/support/models/big_palette.rb +4 -0
- data/spec/support/models/birthday.rb +15 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/support/models/bomb.rb +6 -0
- data/spec/support/models/book.rb +18 -0
- data/spec/support/models/breed.rb +6 -0
- data/spec/support/models/browser.rb +8 -0
- data/spec/support/models/building.rb +8 -0
- data/spec/support/models/building_address.rb +9 -0
- data/spec/support/models/bus.rb +9 -0
- data/spec/support/models/business.rb +7 -0
- data/spec/support/models/callback_test.rb +11 -0
- data/spec/support/models/canvas.rb +27 -0
- data/spec/support/models/car.rb +3 -0
- data/spec/support/models/cat.rb +10 -0
- data/spec/support/models/category.rb +10 -0
- data/spec/support/models/child.rb +6 -0
- data/spec/support/models/child_doc.rb +24 -0
- data/spec/support/models/church.rb +8 -0
- data/spec/support/models/circle.rb +5 -0
- data/spec/support/models/circuit.rb +6 -0
- data/spec/support/models/circus.rb +9 -0
- data/spec/support/models/code.rb +15 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/support/models/comment.rb +18 -0
- data/spec/support/models/company.rb +7 -0
- data/spec/support/models/consumption_period.rb +9 -0
- data/spec/support/models/contextable_item.rb +7 -0
- data/spec/support/models/contractor.rb +7 -0
- data/spec/support/models/cookie.rb +8 -0
- data/spec/support/models/country_code.rb +12 -0
- data/spec/support/models/courier_job.rb +6 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/support/models/definition.rb +11 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/support/models/description.rb +13 -0
- data/spec/support/models/dictionary.rb +18 -0
- data/spec/support/models/division.rb +12 -0
- data/spec/support/models/doctor.rb +14 -0
- data/spec/support/models/dog.rb +9 -0
- data/spec/support/models/dokument.rb +8 -0
- data/spec/support/models/draft.rb +11 -0
- data/spec/support/models/dragon.rb +6 -0
- data/spec/support/models/driver.rb +9 -0
- data/spec/support/models/drug.rb +8 -0
- data/spec/support/models/dungeon.rb +6 -0
- data/spec/support/models/edit.rb +7 -0
- data/spec/support/models/email.rb +8 -0
- data/spec/support/models/employer.rb +7 -0
- data/spec/support/models/entry.rb +8 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/support/models/even.rb +9 -0
- data/spec/support/models/event.rb +24 -0
- data/spec/support/models/exhibition.rb +6 -0
- data/spec/support/models/exhibitor.rb +8 -0
- data/spec/support/models/explosion.rb +6 -0
- data/spec/support/models/eye.rb +11 -0
- data/spec/support/models/eye_bowl.rb +11 -0
- data/spec/support/models/face.rb +10 -0
- data/spec/support/models/favorite.rb +8 -0
- data/spec/support/models/filesystem.rb +7 -0
- data/spec/support/models/fire_hydrant.rb +8 -0
- data/spec/support/models/firefox.rb +6 -0
- data/spec/support/models/fish.rb +9 -0
- data/spec/support/models/folder.rb +9 -0
- data/spec/support/models/folder_item.rb +11 -0
- data/spec/support/models/fruits.rb +36 -0
- data/spec/support/models/game.rb +21 -0
- data/spec/support/models/ghost.rb +9 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/support/models/home.rb +6 -0
- data/spec/support/models/house.rb +8 -0
- data/spec/support/models/html_writer.rb +5 -0
- data/spec/support/models/id_key.rb +8 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/support/models/image.rb +24 -0
- data/spec/support/models/implant.rb +18 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/support/models/item.rb +10 -0
- data/spec/support/models/jar.rb +9 -0
- data/spec/support/models/kaleidoscope.rb +8 -0
- data/spec/support/models/kangaroo.rb +6 -0
- data/spec/support/models/label.rb +50 -0
- data/spec/support/models/language.rb +7 -0
- data/spec/support/models/lat_lng.rb +17 -0
- data/spec/support/models/league.rb +13 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/support/models/line_item.rb +8 -0
- data/spec/support/models/location.rb +10 -0
- data/spec/support/models/login.rb +10 -0
- data/spec/support/models/manufacturer.rb +9 -0
- data/spec/support/models/meat.rb +6 -0
- data/spec/support/models/membership.rb +7 -0
- data/spec/support/models/message.rb +13 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/support/models/mixed_drink.rb +6 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/support/models/movie.rb +15 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/support/models/name.rb +26 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/support/models/node.rb +7 -0
- data/spec/support/models/note.rb +19 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/support/models/odd.rb +9 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/support/models/ordered_post.rb +13 -0
- data/spec/support/models/ordered_preference.rb +8 -0
- data/spec/support/models/oscar.rb +16 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/support/models/override.rb +18 -0
- data/spec/support/models/ownable.rb +8 -0
- data/spec/support/models/owner.rb +10 -0
- data/spec/support/models/pack.rb +5 -0
- data/spec/support/models/page.rb +18 -0
- data/spec/support/models/page_question.rb +6 -0
- data/spec/support/models/palette.rb +9 -0
- data/spec/support/models/parent.rb +7 -0
- data/spec/support/models/parent_doc.rb +8 -0
- data/spec/support/models/passport.rb +13 -0
- data/spec/support/models/patient.rb +11 -0
- data/spec/support/models/pdf_writer.rb +5 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/support/models/person.rb +230 -0
- data/spec/support/models/pet.rb +25 -0
- data/spec/support/models/pet_owner.rb +8 -0
- data/spec/support/models/phone.rb +13 -0
- data/spec/support/models/piano.rb +4 -0
- data/spec/support/models/pizza.rb +9 -0
- data/spec/support/models/player.rb +37 -0
- data/spec/support/models/post.rb +52 -0
- data/spec/support/models/post_genre.rb +8 -0
- data/spec/support/models/powerup.rb +13 -0
- data/spec/support/models/preference.rb +11 -0
- data/spec/support/models/princess.rb +12 -0
- data/spec/support/models/product.rb +19 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/support/models/pronunciation.rb +7 -0
- data/spec/support/models/pub.rb +8 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/support/models/purchase.rb +6 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/support/models/question.rb +10 -0
- data/spec/support/models/quiz.rb +9 -0
- data/spec/support/models/rating.rb +10 -0
- data/spec/support/models/record.rb +54 -0
- data/spec/support/models/registry.rb +6 -0
- data/spec/support/models/role.rb +9 -0
- data/spec/support/models/root_category.rb +6 -0
- data/spec/support/models/sandwich.rb +11 -0
- data/spec/support/models/scheduler.rb +9 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/support/models/seo.rb +9 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/support/models/server.rb +15 -0
- data/spec/support/models/service.rb +24 -0
- data/spec/support/models/shape.rb +14 -0
- data/spec/support/models/shelf.rb +7 -0
- data/spec/support/models/shipment_address.rb +5 -0
- data/spec/support/models/shipping_container.rb +7 -0
- data/spec/support/models/shipping_pack.rb +5 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/support/models/shop.rb +8 -0
- data/spec/support/models/short_agent.rb +6 -0
- data/spec/support/models/short_quiz.rb +7 -0
- data/spec/support/models/simple.rb +7 -0
- data/spec/support/models/slave.rb +8 -0
- data/spec/support/models/song.rb +10 -0
- data/spec/support/models/sound.rb +7 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/support/models/square.rb +6 -0
- data/spec/support/models/staff.rb +9 -0
- data/spec/support/models/store_as_dup_test1.rb +7 -0
- data/spec/support/models/store_as_dup_test2.rb +7 -0
- data/spec/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -0
- data/spec/support/models/strategy.rb +5 -0
- data/spec/support/models/sub_item.rb +5 -0
- data/spec/support/models/subscription.rb +7 -0
- data/spec/support/models/survey.rb +7 -0
- data/spec/support/models/symptom.rb +8 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/support/models/tag.rb +10 -0
- data/spec/support/models/target.rb +7 -0
- data/spec/support/models/template.rb +7 -0
- data/spec/support/models/thing.rb +11 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/support/models/title.rb +5 -0
- data/spec/support/models/tool.rb +10 -0
- data/spec/support/models/topping.rb +7 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/support/models/track.rb +40 -0
- data/spec/support/models/translation.rb +7 -0
- data/spec/support/models/tree.rb +11 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/support/models/updatable.rb +7 -0
- data/spec/support/models/user.rb +23 -0
- data/spec/support/models/user_account.rb +12 -0
- data/spec/support/models/validation_callback.rb +12 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/support/models/version.rb +7 -0
- data/spec/support/models/vertex.rb +8 -0
- data/spec/support/models/vet_visit.rb +7 -0
- data/spec/support/models/video.rb +15 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +13 -0
- data/spec/support/models/wiki_page.rb +17 -0
- data/spec/support/models/word.rb +17 -0
- data/spec/support/models/word_origin.rb +13 -0
- data/spec/support/models/writer.rb +13 -0
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +28 -6
- data.tar.gz.sig +0 -0
- metadata +1304 -843
- metadata.gz.sig +3 -5
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/matchable/all.rb +0 -27
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -72
- data/lib/mongoid/matchable/elem_match.rb +0 -28
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/mongoid/relations/accessors.rb +0 -267
- data/lib/mongoid/relations/auto_save.rb +0 -94
- data/lib/mongoid/relations/binding.rb +0 -218
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
- data/lib/mongoid/relations/bindings/embedded/many.rb +0 -43
- data/lib/mongoid/relations/bindings/embedded/one.rb +0 -45
- data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
- data/lib/mongoid/relations/bindings/referenced/many.rb +0 -38
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
- data/lib/mongoid/relations/bindings/referenced/one.rb +0 -44
- data/lib/mongoid/relations/bindings.rb +0 -9
- data/lib/mongoid/relations/builder.rb +0 -57
- data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
- data/lib/mongoid/relations/builders/embedded/many.rb +0 -36
- data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +0 -126
- data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
- data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
- data/lib/mongoid/relations/builders.rb +0 -106
- data/lib/mongoid/relations/cascading/delete.rb +0 -44
- data/lib/mongoid/relations/cascading/destroy.rb +0 -43
- data/lib/mongoid/relations/cascading/nullify.rb +0 -35
- data/lib/mongoid/relations/cascading/restrict.rb +0 -39
- data/lib/mongoid/relations/cascading.rb +0 -56
- data/lib/mongoid/relations/constraint.rb +0 -55
- data/lib/mongoid/relations/conversions.rb +0 -34
- data/lib/mongoid/relations/counter_cache.rb +0 -160
- data/lib/mongoid/relations/cyclic.rb +0 -107
- data/lib/mongoid/relations/eager/base.rb +0 -153
- data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
- data/lib/mongoid/relations/eager/has_many.rb +0 -38
- data/lib/mongoid/relations/eager/has_one.rb +0 -30
- data/lib/mongoid/relations/eager.rb +0 -36
- data/lib/mongoid/relations/embedded/batchable.rb +0 -384
- data/lib/mongoid/relations/embedded/in.rb +0 -241
- data/lib/mongoid/relations/embedded/many.rb +0 -683
- data/lib/mongoid/relations/embedded/one.rb +0 -235
- data/lib/mongoid/relations/macros.rb +0 -367
- data/lib/mongoid/relations/many.rb +0 -242
- data/lib/mongoid/relations/marshalable.rb +0 -32
- data/lib/mongoid/relations/metadata.rb +0 -1179
- data/lib/mongoid/relations/nested_builder.rb +0 -74
- data/lib/mongoid/relations/one.rb +0 -60
- data/lib/mongoid/relations/options.rb +0 -49
- data/lib/mongoid/relations/polymorphic.rb +0 -39
- data/lib/mongoid/relations/proxy.rb +0 -215
- data/lib/mongoid/relations/referenced/in.rb +0 -304
- data/lib/mongoid/relations/referenced/many.rb +0 -812
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
- data/lib/mongoid/relations/referenced/one.rb +0 -290
- data/lib/mongoid/relations/reflections.rb +0 -64
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets/enumerable.rb +0 -493
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -97
- data/lib/mongoid/relations.rb +0 -148
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/account.rb +0 -36
- data/spec/app/models/acolyte.rb +0 -17
- data/spec/app/models/actor.rb +0 -18
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/address.rb +0 -79
- data/spec/app/models/address_component.rb +0 -5
- data/spec/app/models/address_number.rb +0 -6
- data/spec/app/models/agency.rb +0 -5
- data/spec/app/models/agent.rb +0 -16
- data/spec/app/models/album.rb +0 -18
- data/spec/app/models/alert.rb +0 -7
- data/spec/app/models/animal.rb +0 -25
- data/spec/app/models/answer.rb +0 -6
- data/spec/app/models/appointment.rb +0 -7
- data/spec/app/models/article.rb +0 -12
- data/spec/app/models/artist.rb +0 -87
- data/spec/app/models/artwork.rb +0 -4
- data/spec/app/models/audio.rb +0 -5
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/author.rb +0 -6
- data/spec/app/models/baby.rb +0 -4
- data/spec/app/models/band.rb +0 -31
- data/spec/app/models/bar.rb +0 -10
- data/spec/app/models/basic.rb +0 -6
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/big_palette.rb +0 -2
- data/spec/app/models/birthday.rb +0 -13
- data/spec/app/models/bomb.rb +0 -4
- data/spec/app/models/book.rb +0 -16
- data/spec/app/models/breed.rb +0 -4
- data/spec/app/models/browser.rb +0 -6
- data/spec/app/models/building.rb +0 -6
- data/spec/app/models/building_address.rb +0 -7
- data/spec/app/models/bus.rb +0 -7
- data/spec/app/models/business.rb +0 -5
- data/spec/app/models/callback_test.rb +0 -9
- data/spec/app/models/canvas.rb +0 -25
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/cat.rb +0 -8
- data/spec/app/models/category.rb +0 -8
- data/spec/app/models/child.rb +0 -4
- data/spec/app/models/child_doc.rb +0 -22
- data/spec/app/models/church.rb +0 -6
- data/spec/app/models/circle.rb +0 -3
- data/spec/app/models/circuit.rb +0 -4
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/code.rb +0 -11
- data/spec/app/models/comment.rb +0 -16
- data/spec/app/models/company.rb +0 -5
- data/spec/app/models/consumption_period.rb +0 -7
- data/spec/app/models/contextable_item.rb +0 -5
- data/spec/app/models/contractor.rb +0 -5
- data/spec/app/models/cookie.rb +0 -6
- data/spec/app/models/country_code.rb +0 -8
- data/spec/app/models/courier_job.rb +0 -4
- data/spec/app/models/definition.rb +0 -9
- data/spec/app/models/delegating_patient.rb +0 -16
- data/spec/app/models/description.rb +0 -11
- data/spec/app/models/dictionary.rb +0 -10
- data/spec/app/models/division.rb +0 -10
- data/spec/app/models/doctor.rb +0 -12
- data/spec/app/models/dog.rb +0 -7
- data/spec/app/models/dokument.rb +0 -6
- data/spec/app/models/draft.rb +0 -9
- data/spec/app/models/dragon.rb +0 -4
- data/spec/app/models/driver.rb +0 -7
- data/spec/app/models/drug.rb +0 -6
- data/spec/app/models/dungeon.rb +0 -4
- data/spec/app/models/edit.rb +0 -5
- data/spec/app/models/email.rb +0 -6
- data/spec/app/models/employer.rb +0 -5
- data/spec/app/models/entry.rb +0 -6
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/even.rb +0 -7
- data/spec/app/models/event.rb +0 -22
- data/spec/app/models/exhibition.rb +0 -4
- data/spec/app/models/exhibitor.rb +0 -6
- data/spec/app/models/explosion.rb +0 -4
- data/spec/app/models/eye.rb +0 -9
- data/spec/app/models/eye_bowl.rb +0 -9
- data/spec/app/models/face.rb +0 -8
- data/spec/app/models/favorite.rb +0 -6
- data/spec/app/models/filesystem.rb +0 -5
- data/spec/app/models/fire_hydrant.rb +0 -6
- data/spec/app/models/firefox.rb +0 -4
- data/spec/app/models/fish.rb +0 -7
- data/spec/app/models/folder.rb +0 -7
- data/spec/app/models/folder_item.rb +0 -9
- data/spec/app/models/fruits.rb +0 -34
- data/spec/app/models/game.rb +0 -19
- data/spec/app/models/ghost.rb +0 -7
- data/spec/app/models/home.rb +0 -4
- data/spec/app/models/house.rb +0 -6
- data/spec/app/models/html_writer.rb +0 -3
- data/spec/app/models/id_key.rb +0 -6
- data/spec/app/models/image.rb +0 -22
- data/spec/app/models/implant.rb +0 -16
- data/spec/app/models/item.rb +0 -8
- data/spec/app/models/jar.rb +0 -7
- data/spec/app/models/kaleidoscope.rb +0 -6
- data/spec/app/models/kangaroo.rb +0 -4
- data/spec/app/models/label.rb +0 -47
- data/spec/app/models/language.rb +0 -5
- data/spec/app/models/lat_lng.rb +0 -15
- data/spec/app/models/league.rb +0 -11
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/line_item.rb +0 -6
- data/spec/app/models/location.rb +0 -8
- data/spec/app/models/login.rb +0 -8
- data/spec/app/models/manufacturer.rb +0 -7
- data/spec/app/models/meat.rb +0 -4
- data/spec/app/models/membership.rb +0 -4
- data/spec/app/models/message.rb +0 -11
- data/spec/app/models/mixed_drink.rb +0 -4
- data/spec/app/models/movie.rb +0 -13
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/name.rb +0 -24
- data/spec/app/models/node.rb +0 -5
- data/spec/app/models/note.rb +0 -17
- data/spec/app/models/odd.rb +0 -7
- data/spec/app/models/ordered_post.rb +0 -11
- data/spec/app/models/ordered_preference.rb +0 -6
- data/spec/app/models/oscar.rb +0 -14
- data/spec/app/models/override.rb +0 -16
- data/spec/app/models/ownable.rb +0 -6
- data/spec/app/models/owner.rb +0 -6
- data/spec/app/models/pack.rb +0 -3
- data/spec/app/models/page.rb +0 -16
- data/spec/app/models/page_question.rb +0 -4
- data/spec/app/models/palette.rb +0 -7
- data/spec/app/models/parent.rb +0 -5
- data/spec/app/models/parent_doc.rb +0 -6
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/patient.rb +0 -9
- data/spec/app/models/pdf_writer.rb +0 -3
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/person.rb +0 -207
- data/spec/app/models/pet.rb +0 -23
- data/spec/app/models/pet_owner.rb +0 -6
- data/spec/app/models/phone.rb +0 -9
- data/spec/app/models/pizza.rb +0 -7
- data/spec/app/models/player.rb +0 -35
- data/spec/app/models/post.rb +0 -50
- data/spec/app/models/post_genre.rb +0 -6
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/preference.rb +0 -9
- data/spec/app/models/princess.rb +0 -10
- data/spec/app/models/product.rb +0 -17
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/pronunciation.rb +0 -5
- data/spec/app/models/pub.rb +0 -6
- data/spec/app/models/purchase.rb +0 -4
- data/spec/app/models/question.rb +0 -8
- data/spec/app/models/quiz.rb +0 -7
- data/spec/app/models/rating.rb +0 -8
- data/spec/app/models/record.rb +0 -52
- data/spec/app/models/registry.rb +0 -4
- data/spec/app/models/role.rb +0 -7
- data/spec/app/models/root_category.rb +0 -4
- data/spec/app/models/sandwich.rb +0 -9
- data/spec/app/models/scheduler.rb +0 -7
- data/spec/app/models/seo.rb +0 -7
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/server.rb +0 -13
- data/spec/app/models/service.rb +0 -22
- data/spec/app/models/shape.rb +0 -12
- data/spec/app/models/shelf.rb +0 -5
- data/spec/app/models/shipment_address.rb +0 -2
- data/spec/app/models/shipping_container.rb +0 -5
- data/spec/app/models/shipping_pack.rb +0 -3
- data/spec/app/models/shop.rb +0 -6
- data/spec/app/models/short_agent.rb +0 -4
- data/spec/app/models/short_quiz.rb +0 -5
- data/spec/app/models/simple.rb +0 -5
- data/spec/app/models/slave.rb +0 -6
- data/spec/app/models/song.rb +0 -8
- data/spec/app/models/sound.rb +0 -5
- data/spec/app/models/square.rb +0 -4
- data/spec/app/models/staff.rb +0 -7
- data/spec/app/models/store_as_dup_test1.rb +0 -5
- data/spec/app/models/store_as_dup_test2.rb +0 -5
- data/spec/app/models/strategy.rb +0 -3
- data/spec/app/models/sub_item.rb +0 -3
- data/spec/app/models/subscription.rb +0 -5
- data/spec/app/models/survey.rb +0 -5
- data/spec/app/models/symptom.rb +0 -6
- data/spec/app/models/tag.rb +0 -8
- data/spec/app/models/target.rb +0 -5
- data/spec/app/models/template.rb +0 -5
- data/spec/app/models/thing.rb +0 -9
- data/spec/app/models/title.rb +0 -3
- data/spec/app/models/tool.rb +0 -8
- data/spec/app/models/topping.rb +0 -5
- data/spec/app/models/track.rb +0 -38
- data/spec/app/models/translation.rb +0 -5
- data/spec/app/models/tree.rb +0 -9
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/user.rb +0 -21
- data/spec/app/models/user_account.rb +0 -10
- data/spec/app/models/validation_callback.rb +0 -10
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/version.rb +0 -5
- data/spec/app/models/vet_visit.rb +0 -5
- data/spec/app/models/video.rb +0 -13
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/app/models/wiki_page.rb +0 -14
- data/spec/app/models/word.rb +0 -15
- data/spec/app/models/word_origin.rb +0 -11
- data/spec/app/models/writer.rb +0 -11
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -130
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -86
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- data/spec/mongoid/relations/accessors_spec.rb +0 -821
- data/spec/mongoid/relations/auto_save_spec.rb +0 -314
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +0 -171
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +0 -54
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +0 -77
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +0 -241
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +0 -153
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +0 -131
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +0 -132
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +0 -99
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +0 -233
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +0 -250
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +0 -230
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
- data/spec/mongoid/relations/builders_spec.rb +0 -253
- data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
- data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
- data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
- data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
- data/spec/mongoid/relations/cascading_spec.rb +0 -355
- data/spec/mongoid/relations/constraint_spec.rb +0 -75
- data/spec/mongoid/relations/conversions_spec.rb +0 -128
- data/spec/mongoid/relations/counter_cache_spec.rb +0 -450
- data/spec/mongoid/relations/cyclic_spec.rb +0 -178
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +0 -163
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +0 -133
- data/spec/mongoid/relations/eager/has_many_spec.rb +0 -244
- data/spec/mongoid/relations/eager/has_one_spec.rb +0 -163
- data/spec/mongoid/relations/eager_spec.rb +0 -279
- data/spec/mongoid/relations/embedded/dirty_spec.rb +0 -65
- data/spec/mongoid/relations/embedded/in_spec.rb +0 -579
- data/spec/mongoid/relations/embedded/many_spec.rb +0 -4412
- data/spec/mongoid/relations/embedded/one_spec.rb +0 -1068
- data/spec/mongoid/relations/macros_spec.rb +0 -1039
- data/spec/mongoid/relations/metadata_spec.rb +0 -1985
- data/spec/mongoid/relations/options_spec.rb +0 -35
- data/spec/mongoid/relations/polymorphic_spec.rb +0 -128
- data/spec/mongoid/relations/referenced/in_spec.rb +0 -1366
- data/spec/mongoid/relations/referenced/many_spec.rb +0 -3816
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +0 -3577
- data/spec/mongoid/relations/referenced/one_spec.rb +0 -1240
- data/spec/mongoid/relations/reflections_spec.rb +0 -101
- data/spec/mongoid/relations/synchronization_spec.rb +0 -495
- data/spec/mongoid/relations/targets/enumerable_spec.rb +0 -1825
- data/spec/mongoid/relations/touchable_spec.rb +0 -402
- data/spec/mongoid/relations_spec.rb +0 -189
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
- /data/spec/{app → support}/models/array_field.rb +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
2
4
|
|
|
3
5
|
describe Mongoid::Contextual::Mongo do
|
|
@@ -7,7 +9,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
7
9
|
describe "##{method}" do
|
|
8
10
|
|
|
9
11
|
before do
|
|
10
|
-
Band.create(name: "Depeche Mode")
|
|
12
|
+
Band.create!(name: "Depeche Mode")
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
context "when the count is zero" do
|
|
@@ -78,11 +80,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
78
80
|
describe "#count" do
|
|
79
81
|
|
|
80
82
|
let!(:depeche) do
|
|
81
|
-
Band.create(name: "Depeche Mode")
|
|
83
|
+
Band.create!(name: "Depeche Mode")
|
|
82
84
|
end
|
|
83
85
|
|
|
84
86
|
let!(:new_order) do
|
|
85
|
-
Band.create(name: "New Order")
|
|
87
|
+
Band.create!(name: "New Order")
|
|
86
88
|
end
|
|
87
89
|
|
|
88
90
|
let(:criteria) do
|
|
@@ -106,11 +108,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
106
108
|
described_class.new(criteria.cache)
|
|
107
109
|
end
|
|
108
110
|
|
|
109
|
-
before do
|
|
110
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
111
|
-
end
|
|
112
|
-
|
|
113
111
|
it "returns the count cached value after first call" do
|
|
112
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
114
113
|
2.times { expect(context.count).to eq(1) }
|
|
115
114
|
end
|
|
116
115
|
end
|
|
@@ -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
|
|
@@ -168,7 +167,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
168
167
|
end
|
|
169
168
|
end
|
|
170
169
|
|
|
171
|
-
context 'when a collation is specified'
|
|
170
|
+
context 'when a collation is specified' do
|
|
171
|
+
min_server_version '3.4'
|
|
172
172
|
|
|
173
173
|
let(:context) do
|
|
174
174
|
described_class.new(criteria)
|
|
@@ -191,16 +191,81 @@ describe Mongoid::Contextual::Mongo do
|
|
|
191
191
|
end
|
|
192
192
|
end
|
|
193
193
|
|
|
194
|
+
describe "#estimated_count" do
|
|
195
|
+
|
|
196
|
+
let!(:depeche) do
|
|
197
|
+
Band.create!(name: "Depeche Mode")
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
let!(:new_order) do
|
|
201
|
+
Band.create!(name: "New Order")
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
let(:criteria) do
|
|
205
|
+
Band.where
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
context "when not providing options" do
|
|
209
|
+
it 'returns the correct count' do
|
|
210
|
+
expect(criteria.estimated_count).to eq(2)
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
context "when providing options" do
|
|
215
|
+
it 'returns the correct count' do
|
|
216
|
+
expect(criteria.estimated_count(maxTimeMS: 1000)).to eq(2)
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
context "when context is cached" do
|
|
221
|
+
|
|
222
|
+
let(:context) do
|
|
223
|
+
described_class.new(criteria.cache)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it "returns the count cached value after first call" do
|
|
227
|
+
expect(context.view).to receive(:estimated_document_count).once.and_return(1)
|
|
228
|
+
2.times do
|
|
229
|
+
context.estimated_count
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
context "when the criteria contains a selector", :focus do
|
|
235
|
+
let(:criteria) do
|
|
236
|
+
Band.where(name: "New Order")
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
context "when not providing options" do
|
|
240
|
+
it 'raises an error' do
|
|
241
|
+
expect do
|
|
242
|
+
criteria.estimated_count
|
|
243
|
+
end.to raise_error(Mongoid::Errors::InvalidEstimatedCountCriteria)
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
context "when providing options" do
|
|
248
|
+
it 'raises an error' do
|
|
249
|
+
expect do
|
|
250
|
+
criteria.estimated_count(maxTimeMS: 1000)
|
|
251
|
+
end.to raise_error(Mongoid::Errors::InvalidEstimatedCountCriteria)
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
194
259
|
[ :delete, :delete_all ].each do |method|
|
|
195
260
|
|
|
196
261
|
describe "##{method}" do
|
|
197
262
|
|
|
198
263
|
let!(:depeche_mode) do
|
|
199
|
-
Band.create(name: "Depeche Mode")
|
|
264
|
+
Band.create!(name: "Depeche Mode")
|
|
200
265
|
end
|
|
201
266
|
|
|
202
267
|
let!(:new_order) do
|
|
203
|
-
Band.create(name: "New Order")
|
|
268
|
+
Band.create!(name: "New Order")
|
|
204
269
|
end
|
|
205
270
|
|
|
206
271
|
context "when the selector is contraining" do
|
|
@@ -229,7 +294,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
229
294
|
expect(deleted).to eq(1)
|
|
230
295
|
end
|
|
231
296
|
|
|
232
|
-
context 'when the criteria has a collation'
|
|
297
|
+
context 'when the criteria has a collation' do
|
|
298
|
+
min_server_version '3.4'
|
|
233
299
|
|
|
234
300
|
let(:criteria) do
|
|
235
301
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -300,11 +366,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
300
366
|
describe "##{method}" do
|
|
301
367
|
|
|
302
368
|
let!(:depeche_mode) do
|
|
303
|
-
Band.create(name: "Depeche Mode")
|
|
369
|
+
Band.create!(name: "Depeche Mode")
|
|
304
370
|
end
|
|
305
371
|
|
|
306
372
|
let!(:new_order) do
|
|
307
|
-
Band.create(name: "New Order")
|
|
373
|
+
Band.create!(name: "New Order")
|
|
308
374
|
end
|
|
309
375
|
|
|
310
376
|
context "when the selector is contraining" do
|
|
@@ -333,7 +399,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
333
399
|
expect(destroyed).to eq(1)
|
|
334
400
|
end
|
|
335
401
|
|
|
336
|
-
context 'when the criteria has a collation'
|
|
402
|
+
context 'when the criteria has a collation' do
|
|
403
|
+
min_server_version '3.4'
|
|
337
404
|
|
|
338
405
|
let(:criteria) do
|
|
339
406
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -384,7 +451,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
384
451
|
context 'when the write concern is unacknowledged' do
|
|
385
452
|
|
|
386
453
|
before do
|
|
387
|
-
2.times { Band.create }
|
|
454
|
+
2.times { Band.create! }
|
|
388
455
|
end
|
|
389
456
|
|
|
390
457
|
let(:criteria) do
|
|
@@ -406,27 +473,83 @@ describe Mongoid::Contextual::Mongo do
|
|
|
406
473
|
describe "#distinct" do
|
|
407
474
|
|
|
408
475
|
before do
|
|
409
|
-
Band.create(name: "Depeche Mode", years: 30)
|
|
410
|
-
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")
|
|
411
479
|
end
|
|
412
480
|
|
|
413
|
-
|
|
481
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
482
|
+
context "when limiting the result set" do
|
|
414
483
|
|
|
415
|
-
|
|
416
|
-
|
|
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
|
|
417
495
|
end
|
|
418
496
|
|
|
419
|
-
|
|
420
|
-
|
|
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
|
|
421
510
|
end
|
|
422
511
|
|
|
423
|
-
|
|
424
|
-
|
|
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
|
|
425
525
|
end
|
|
426
|
-
end
|
|
427
526
|
|
|
428
|
-
|
|
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
|
|
549
|
+
end
|
|
550
|
+
end
|
|
429
551
|
|
|
552
|
+
context "when providing a demongoizable field" do
|
|
430
553
|
let(:criteria) do
|
|
431
554
|
Band.criteria
|
|
432
555
|
end
|
|
@@ -435,46 +558,253 @@ describe Mongoid::Contextual::Mongo do
|
|
|
435
558
|
described_class.new(criteria)
|
|
436
559
|
end
|
|
437
560
|
|
|
438
|
-
|
|
439
|
-
|
|
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
|
|
440
575
|
end
|
|
441
576
|
end
|
|
442
577
|
|
|
443
|
-
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
|
|
444
590
|
|
|
445
591
|
let(:criteria) do
|
|
446
|
-
|
|
592
|
+
Dictionary.criteria
|
|
447
593
|
end
|
|
448
594
|
|
|
449
595
|
let(:context) do
|
|
450
596
|
described_class.new(criteria)
|
|
451
597
|
end
|
|
452
598
|
|
|
453
|
-
|
|
454
|
-
|
|
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
|
|
455
615
|
end
|
|
456
|
-
end
|
|
457
616
|
|
|
458
|
-
|
|
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
|
|
459
620
|
|
|
460
|
-
|
|
461
|
-
|
|
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
|
|
462
633
|
end
|
|
463
634
|
|
|
464
|
-
|
|
465
|
-
|
|
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
|
|
466
656
|
end
|
|
467
657
|
|
|
468
|
-
|
|
469
|
-
|
|
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
|
|
470
679
|
end
|
|
471
680
|
|
|
472
|
-
|
|
473
|
-
|
|
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
|
|
474
801
|
end
|
|
475
802
|
|
|
476
|
-
|
|
477
|
-
|
|
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
|
|
478
808
|
end
|
|
479
809
|
end
|
|
480
810
|
end
|
|
@@ -482,7 +812,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
482
812
|
describe "#each" do
|
|
483
813
|
|
|
484
814
|
before do
|
|
485
|
-
Band.create(name: "Depeche Mode")
|
|
815
|
+
Band.create!(name: "Depeche Mode")
|
|
486
816
|
end
|
|
487
817
|
|
|
488
818
|
let(:criteria) do
|
|
@@ -493,7 +823,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
493
823
|
described_class.new(criteria)
|
|
494
824
|
end
|
|
495
825
|
|
|
496
|
-
context 'when the criteria has a collation'
|
|
826
|
+
context 'when the criteria has a collation' do
|
|
827
|
+
min_server_version '3.4'
|
|
497
828
|
|
|
498
829
|
let(:criteria) do
|
|
499
830
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -559,7 +890,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
559
890
|
context "when iterating with next" do
|
|
560
891
|
|
|
561
892
|
before do
|
|
562
|
-
10.times { |i| Band.create(name: "Test #{i}") }
|
|
893
|
+
10.times { |i| Band.create!(name: "Test #{i}") }
|
|
563
894
|
end
|
|
564
895
|
|
|
565
896
|
let(:criteria) do
|
|
@@ -571,12 +902,50 @@ describe Mongoid::Contextual::Mongo do
|
|
|
571
902
|
end
|
|
572
903
|
|
|
573
904
|
it "does not load all documents" do
|
|
574
|
-
|
|
905
|
+
subscriber = Mrss::EventSubscriber.new
|
|
906
|
+
context.view.client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
|
|
907
|
+
|
|
575
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)
|
|
576
920
|
end
|
|
577
921
|
end
|
|
578
922
|
end
|
|
579
923
|
end
|
|
924
|
+
|
|
925
|
+
context 'when the criteria has a parent document' do
|
|
926
|
+
|
|
927
|
+
before do
|
|
928
|
+
Post.create!(person: person)
|
|
929
|
+
Post.create!(person: person)
|
|
930
|
+
Post.create!(person: person)
|
|
931
|
+
end
|
|
932
|
+
|
|
933
|
+
let(:person) do
|
|
934
|
+
Person.new
|
|
935
|
+
end
|
|
936
|
+
|
|
937
|
+
let(:criteria) do
|
|
938
|
+
person.posts.all
|
|
939
|
+
end
|
|
940
|
+
|
|
941
|
+
let(:persons) do
|
|
942
|
+
criteria.collect(&:person)
|
|
943
|
+
end
|
|
944
|
+
|
|
945
|
+
it 'sets the same parent object on each related object' do
|
|
946
|
+
expect(persons.uniq.size).to eq(1)
|
|
947
|
+
end
|
|
948
|
+
end
|
|
580
949
|
end
|
|
581
950
|
|
|
582
951
|
describe "#eager_load" do
|
|
@@ -591,12 +960,12 @@ describe Mongoid::Contextual::Mongo do
|
|
|
591
960
|
|
|
592
961
|
context "when no documents are returned" do
|
|
593
962
|
|
|
594
|
-
let(:
|
|
963
|
+
let(:game_association) do
|
|
595
964
|
Person.reflect_on_association(:game)
|
|
596
965
|
end
|
|
597
966
|
|
|
598
967
|
it "does not make any additional database queries" do
|
|
599
|
-
expect(
|
|
968
|
+
expect(game_association).to receive(:eager_load).never
|
|
600
969
|
context.send(:eager_load, [])
|
|
601
970
|
end
|
|
602
971
|
end
|
|
@@ -605,7 +974,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
605
974
|
describe "#exists?" do
|
|
606
975
|
|
|
607
976
|
before do
|
|
608
|
-
Band.create(name: "Depeche Mode")
|
|
977
|
+
Band.create!(name: "Depeche Mode")
|
|
609
978
|
end
|
|
610
979
|
|
|
611
980
|
context "when the count is zero" do
|
|
@@ -718,11 +1087,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
718
1087
|
describe "#find_one_and_replace" do
|
|
719
1088
|
|
|
720
1089
|
let!(:depeche) do
|
|
721
|
-
Band.create(name: "Depeche Mode")
|
|
1090
|
+
Band.create!(name: "Depeche Mode")
|
|
722
1091
|
end
|
|
723
1092
|
|
|
724
1093
|
let!(:tool) do
|
|
725
|
-
Band.create(name: "Tool")
|
|
1094
|
+
Band.create!(name: "Tool")
|
|
726
1095
|
end
|
|
727
1096
|
|
|
728
1097
|
context "when the selector matches" do
|
|
@@ -825,7 +1194,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
825
1194
|
end
|
|
826
1195
|
end
|
|
827
1196
|
|
|
828
|
-
context 'when a collation is specified on the criteria'
|
|
1197
|
+
context 'when a collation is specified on the criteria' do
|
|
1198
|
+
min_server_version '3.4'
|
|
829
1199
|
|
|
830
1200
|
let(:criteria) do
|
|
831
1201
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -873,11 +1243,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
873
1243
|
describe "#find_one_and_update" do
|
|
874
1244
|
|
|
875
1245
|
let!(:depeche) do
|
|
876
|
-
Band.create(name: "Depeche Mode")
|
|
1246
|
+
Band.create!(name: "Depeche Mode")
|
|
877
1247
|
end
|
|
878
1248
|
|
|
879
1249
|
let!(:tool) do
|
|
880
|
-
Band.create(name: "Tool")
|
|
1250
|
+
Band.create!(name: "Tool")
|
|
881
1251
|
end
|
|
882
1252
|
|
|
883
1253
|
context "when the selector matches" do
|
|
@@ -978,7 +1348,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
978
1348
|
end
|
|
979
1349
|
end
|
|
980
1350
|
|
|
981
|
-
context 'when a collation is specified on the criteria'
|
|
1351
|
+
context 'when a collation is specified on the criteria' do
|
|
1352
|
+
min_server_version '3.4'
|
|
982
1353
|
|
|
983
1354
|
let(:criteria) do
|
|
984
1355
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1025,7 +1396,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1025
1396
|
describe "#find_one_and_delete" do
|
|
1026
1397
|
|
|
1027
1398
|
let!(:depeche) do
|
|
1028
|
-
Band.create(name: "Depeche Mode")
|
|
1399
|
+
Band.create!(name: "Depeche Mode")
|
|
1029
1400
|
end
|
|
1030
1401
|
|
|
1031
1402
|
let(:criteria) do
|
|
@@ -1052,7 +1423,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1052
1423
|
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
1053
1424
|
end
|
|
1054
1425
|
|
|
1055
|
-
context 'when a collation is specified on the criteria'
|
|
1426
|
+
context 'when a collation is specified on the criteria' do
|
|
1427
|
+
min_server_version '3.4'
|
|
1056
1428
|
|
|
1057
1429
|
let(:criteria) do
|
|
1058
1430
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1103,11 +1475,15 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1103
1475
|
describe "##{method}" do
|
|
1104
1476
|
|
|
1105
1477
|
let!(:depeche_mode) do
|
|
1106
|
-
Band.create(name: "Depeche Mode")
|
|
1478
|
+
Band.create!(name: "Depeche Mode")
|
|
1107
1479
|
end
|
|
1108
1480
|
|
|
1109
1481
|
let!(:new_order) do
|
|
1110
|
-
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")
|
|
1111
1487
|
end
|
|
1112
1488
|
|
|
1113
1489
|
context "when the context is not cached" do
|
|
@@ -1124,7 +1500,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1124
1500
|
expect(context.send(method)).to eq(depeche_mode)
|
|
1125
1501
|
end
|
|
1126
1502
|
|
|
1127
|
-
context 'when the criteria has a collation'
|
|
1503
|
+
context 'when the criteria has a collation' do
|
|
1504
|
+
min_server_version '3.4'
|
|
1128
1505
|
|
|
1129
1506
|
let(:criteria) do
|
|
1130
1507
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
@@ -1149,14 +1526,14 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1149
1526
|
context "when there is sort on the context" do
|
|
1150
1527
|
|
|
1151
1528
|
it "follows the main sort" do
|
|
1152
|
-
expect(context.send(method)).to eq(
|
|
1529
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1153
1530
|
end
|
|
1154
1531
|
end
|
|
1155
1532
|
|
|
1156
1533
|
context "when subsequently calling #last" do
|
|
1157
1534
|
|
|
1158
1535
|
it "returns the correct document" do
|
|
1159
|
-
expect(context.send(method)).to eq(
|
|
1536
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1160
1537
|
expect(context.last).to eq(depeche_mode)
|
|
1161
1538
|
end
|
|
1162
1539
|
end
|
|
@@ -1177,27 +1554,26 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1177
1554
|
expect(context.send(method)).to eq(depeche_mode)
|
|
1178
1555
|
end
|
|
1179
1556
|
|
|
1180
|
-
context
|
|
1557
|
+
context "when calling ##{method}" do
|
|
1181
1558
|
|
|
1182
|
-
it 'returns the
|
|
1559
|
+
it 'returns the requested document, sorted by _id' do
|
|
1183
1560
|
expect(context.send(method)).to eq(depeche_mode)
|
|
1184
|
-
expect(context.last).to eq(
|
|
1561
|
+
expect(context.last).to eq(rolling_stones)
|
|
1185
1562
|
end
|
|
1186
1563
|
end
|
|
1187
1564
|
|
|
1188
|
-
context 'with option {
|
|
1189
|
-
|
|
1565
|
+
context 'with option { id_sort: :none }' do
|
|
1190
1566
|
let(:opts) do
|
|
1191
1567
|
{ id_sort: :none }
|
|
1192
1568
|
end
|
|
1193
1569
|
|
|
1194
|
-
it '
|
|
1570
|
+
it 'applies the sort on _id' do
|
|
1195
1571
|
expect(context.send(method, opts)).to eq(depeche_mode)
|
|
1196
1572
|
end
|
|
1197
1573
|
|
|
1198
|
-
context
|
|
1574
|
+
context "when calling ##{method}" do
|
|
1199
1575
|
|
|
1200
|
-
it '
|
|
1576
|
+
it 'doesn\'t apply a sort on _id' do
|
|
1201
1577
|
expect(context.send(method, opts)).to eq(depeche_mode)
|
|
1202
1578
|
expect(context.last(opts)).to eq(depeche_mode)
|
|
1203
1579
|
end
|
|
@@ -1215,33 +1591,32 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1215
1591
|
described_class.new(criteria)
|
|
1216
1592
|
end
|
|
1217
1593
|
|
|
1218
|
-
|
|
1219
1594
|
it 'applies the criteria sort' do
|
|
1220
|
-
expect(context.send(method)).to eq(
|
|
1595
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1221
1596
|
end
|
|
1222
1597
|
|
|
1223
1598
|
context 'when calling #last' do
|
|
1224
1599
|
|
|
1225
1600
|
it 'applies the criteria sort' do
|
|
1226
|
-
expect(context.send(method)).to eq(
|
|
1601
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1227
1602
|
expect(context.last).to eq(depeche_mode)
|
|
1228
1603
|
end
|
|
1229
1604
|
end
|
|
1230
1605
|
|
|
1231
|
-
context 'with option {
|
|
1606
|
+
context 'with option { id_sort: :none }' do
|
|
1232
1607
|
|
|
1233
1608
|
let(:opts) do
|
|
1234
1609
|
{ id_sort: :none }
|
|
1235
1610
|
end
|
|
1236
1611
|
|
|
1237
|
-
it '
|
|
1238
|
-
expect(context.send(method, opts)).to eq(
|
|
1612
|
+
it 'uses the preexisting sort' do
|
|
1613
|
+
expect(context.send(method, opts)).to eq(rolling_stones)
|
|
1239
1614
|
end
|
|
1240
1615
|
|
|
1241
1616
|
context 'when calling #last' do
|
|
1242
1617
|
|
|
1243
|
-
it '
|
|
1244
|
-
expect(context.send(method, opts)).to eq(
|
|
1618
|
+
it 'uses the preexisting sort' do
|
|
1619
|
+
expect(context.send(method, opts)).to eq(rolling_stones)
|
|
1245
1620
|
expect(context.last(opts)).to eq(depeche_mode)
|
|
1246
1621
|
end
|
|
1247
1622
|
end
|
|
@@ -1261,14 +1636,14 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1261
1636
|
context "when there is sort on the context" do
|
|
1262
1637
|
|
|
1263
1638
|
it "follows the main sort" do
|
|
1264
|
-
expect(context.send(method)).to eq(
|
|
1639
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1265
1640
|
end
|
|
1266
1641
|
end
|
|
1267
1642
|
|
|
1268
1643
|
context "when subsequently calling #last" do
|
|
1269
1644
|
|
|
1270
1645
|
it "returns the correct document" do
|
|
1271
|
-
expect(context.send(method)).to eq(
|
|
1646
|
+
expect(context.send(method)).to eq(rolling_stones)
|
|
1272
1647
|
expect(context.last).to eq(depeche_mode)
|
|
1273
1648
|
end
|
|
1274
1649
|
end
|
|
@@ -1308,33 +1683,727 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1308
1683
|
end
|
|
1309
1684
|
end
|
|
1310
1685
|
end
|
|
1311
|
-
end
|
|
1312
|
-
end
|
|
1313
1686
|
|
|
1314
|
-
|
|
1687
|
+
context "when including a limit" do
|
|
1315
1688
|
|
|
1316
|
-
|
|
1317
|
-
Band.where(name: "Depeche Mode").no_timeout
|
|
1318
|
-
end
|
|
1689
|
+
context "when the context is not cached" do
|
|
1319
1690
|
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1691
|
+
let(:context) do
|
|
1692
|
+
described_class.new(criteria)
|
|
1693
|
+
end
|
|
1323
1694
|
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1695
|
+
context "when the limit is 1" do
|
|
1696
|
+
let(:criteria) do
|
|
1697
|
+
Band.criteria
|
|
1698
|
+
end
|
|
1327
1699
|
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1700
|
+
let(:docs) do
|
|
1701
|
+
context.send(method, 1)
|
|
1702
|
+
end
|
|
1331
1703
|
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1704
|
+
it "returns an array of documents" do
|
|
1705
|
+
expect(docs).to eq([ depeche_mode ])
|
|
1706
|
+
end
|
|
1707
|
+
end
|
|
1335
1708
|
|
|
1336
|
-
|
|
1337
|
-
|
|
1709
|
+
context "when the limit is >1" do
|
|
1710
|
+
let(:criteria) do
|
|
1711
|
+
Band.criteria
|
|
1712
|
+
end
|
|
1713
|
+
|
|
1714
|
+
let(:docs) do
|
|
1715
|
+
context.send(method, 2)
|
|
1716
|
+
end
|
|
1717
|
+
|
|
1718
|
+
it "returns the number of documents in order" do
|
|
1719
|
+
expect(docs).to eq([ depeche_mode, new_order ])
|
|
1720
|
+
end
|
|
1721
|
+
end
|
|
1722
|
+
|
|
1723
|
+
context 'when the criteria has a collation' do
|
|
1724
|
+
min_server_version '3.4'
|
|
1725
|
+
|
|
1726
|
+
let(:criteria) do
|
|
1727
|
+
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
1728
|
+
end
|
|
1729
|
+
|
|
1730
|
+
it "returns the first matching document" do
|
|
1731
|
+
expect(context.send(method, 1)).to eq([ depeche_mode ])
|
|
1732
|
+
end
|
|
1733
|
+
end
|
|
1734
|
+
end
|
|
1735
|
+
|
|
1736
|
+
context "when the context is cached" do
|
|
1737
|
+
|
|
1738
|
+
let(:context) do
|
|
1739
|
+
described_class.new(criteria)
|
|
1740
|
+
end
|
|
1741
|
+
|
|
1742
|
+
context "when the whole context is loaded" do
|
|
1743
|
+
|
|
1744
|
+
before do
|
|
1745
|
+
context.to_a
|
|
1746
|
+
end
|
|
1747
|
+
|
|
1748
|
+
context "when all of the documents are cached" do
|
|
1749
|
+
|
|
1750
|
+
let(:criteria) do
|
|
1751
|
+
Band.all.cache
|
|
1752
|
+
end
|
|
1753
|
+
|
|
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 given an empty hash" do
|
|
1887
|
+
let(:context) { described_class.new(criteria) }
|
|
1888
|
+
let(:criteria) { Band.criteria }
|
|
1889
|
+
let(:docs) { context.send(method, {}) }
|
|
1890
|
+
|
|
1891
|
+
it "behaves as if limit is nil" do
|
|
1892
|
+
expect(docs).to eq(depeche_mode)
|
|
1893
|
+
end
|
|
1894
|
+
end
|
|
1895
|
+
|
|
1896
|
+
context "when calling #first then #last" do
|
|
1897
|
+
|
|
1898
|
+
let(:context) do
|
|
1899
|
+
described_class.new(criteria)
|
|
1900
|
+
end
|
|
1901
|
+
|
|
1902
|
+
let(:criteria) do
|
|
1903
|
+
Band.all.cache
|
|
1904
|
+
end
|
|
1905
|
+
|
|
1906
|
+
before do
|
|
1907
|
+
context.first(before_limit)
|
|
1908
|
+
end
|
|
1909
|
+
|
|
1910
|
+
let(:docs) do
|
|
1911
|
+
context.last(limit)
|
|
1912
|
+
end
|
|
1913
|
+
|
|
1914
|
+
context "when getting one from the beginning and one from the end" do
|
|
1915
|
+
let(:before_limit) { 2 }
|
|
1916
|
+
let(:limit) { 1 }
|
|
1917
|
+
|
|
1918
|
+
it "gets the correct document" do
|
|
1919
|
+
expect(docs).to eq([rolling_stones])
|
|
1920
|
+
end
|
|
1921
|
+
end
|
|
1922
|
+
end
|
|
1923
|
+
end
|
|
1924
|
+
end
|
|
1925
|
+
|
|
1926
|
+
describe "#last" do
|
|
1927
|
+
let!(:depeche_mode) do
|
|
1928
|
+
Band.create!(name: "Depeche Mode")
|
|
1929
|
+
end
|
|
1930
|
+
|
|
1931
|
+
let!(:new_order) do
|
|
1932
|
+
Band.create!(name: "New Order")
|
|
1933
|
+
end
|
|
1934
|
+
|
|
1935
|
+
let!(:rolling_stones) do
|
|
1936
|
+
Band.create!(name: "The Rolling Stones")
|
|
1937
|
+
end
|
|
1938
|
+
|
|
1939
|
+
context "when the context is not cached" do
|
|
1940
|
+
|
|
1941
|
+
let(:criteria) do
|
|
1942
|
+
Band.where(name: "Depeche Mode")
|
|
1943
|
+
end
|
|
1944
|
+
|
|
1945
|
+
let(:context) do
|
|
1946
|
+
described_class.new(criteria)
|
|
1947
|
+
end
|
|
1948
|
+
|
|
1949
|
+
it "returns the last matching document" do
|
|
1950
|
+
expect(context.last).to eq(depeche_mode)
|
|
1951
|
+
end
|
|
1952
|
+
|
|
1953
|
+
context 'when the criteria has a collation' do
|
|
1954
|
+
min_server_version '3.4'
|
|
1955
|
+
|
|
1956
|
+
let(:criteria) do
|
|
1957
|
+
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
1958
|
+
end
|
|
1959
|
+
|
|
1960
|
+
it "returns the last matching document" do
|
|
1961
|
+
expect(context.last).to eq(depeche_mode)
|
|
1962
|
+
end
|
|
1963
|
+
end
|
|
1964
|
+
end
|
|
1965
|
+
|
|
1966
|
+
context "when using .desc" do
|
|
1967
|
+
|
|
1968
|
+
let(:criteria) do
|
|
1969
|
+
Band.desc(:name)
|
|
1970
|
+
end
|
|
1971
|
+
|
|
1972
|
+
let(:context) do
|
|
1973
|
+
described_class.new(criteria)
|
|
1974
|
+
end
|
|
1975
|
+
|
|
1976
|
+
context "when there is sort on the context" do
|
|
1977
|
+
|
|
1978
|
+
it "follows the main sort" do
|
|
1979
|
+
expect(context.last).to eq(depeche_mode)
|
|
1980
|
+
end
|
|
1981
|
+
end
|
|
1982
|
+
|
|
1983
|
+
context "when subsequently calling #first" do
|
|
1984
|
+
|
|
1985
|
+
it "returns the correct document" do
|
|
1986
|
+
expect(context.last).to eq(depeche_mode)
|
|
1987
|
+
expect(context.first).to eq(rolling_stones)
|
|
1988
|
+
end
|
|
1989
|
+
end
|
|
1990
|
+
end
|
|
1991
|
+
|
|
1992
|
+
context 'when the criteria has no sort' do
|
|
1993
|
+
|
|
1994
|
+
let(:criteria) do
|
|
1995
|
+
Band.all
|
|
1996
|
+
end
|
|
1997
|
+
|
|
1998
|
+
let(:context) do
|
|
1999
|
+
described_class.new(criteria)
|
|
2000
|
+
end
|
|
2001
|
+
|
|
2002
|
+
it 'applies a sort on _id' do
|
|
2003
|
+
expect(context.last).to eq(rolling_stones)
|
|
2004
|
+
end
|
|
2005
|
+
|
|
2006
|
+
context 'when calling #first' do
|
|
2007
|
+
|
|
2008
|
+
it 'returns the first document, sorted by _id' do
|
|
2009
|
+
pending "MONGOID-5416"
|
|
2010
|
+
expect(context.last).to eq(rolling_stones)
|
|
2011
|
+
expect(context.first).to eq(depeche_mode)
|
|
2012
|
+
end
|
|
2013
|
+
end
|
|
2014
|
+
|
|
2015
|
+
context 'with option { id_sort: :none }' do
|
|
2016
|
+
let(:opts) do
|
|
2017
|
+
{ id_sort: :none }
|
|
2018
|
+
end
|
|
2019
|
+
|
|
2020
|
+
it 'doesn\'t apply the sort on _id' do
|
|
2021
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
|
2022
|
+
end
|
|
2023
|
+
|
|
2024
|
+
context 'when calling #first' do
|
|
2025
|
+
|
|
2026
|
+
it 'doesn\'t apply the sort on _id' do
|
|
2027
|
+
pending "MONGOID-5416"
|
|
2028
|
+
expect(context.last(opts)).to eq(rolling_stones)
|
|
2029
|
+
expect(context.first(opts)).to eq(depeche_mode)
|
|
2030
|
+
end
|
|
2031
|
+
end
|
|
2032
|
+
end
|
|
2033
|
+
end
|
|
2034
|
+
|
|
2035
|
+
context 'when the criteria has a sort' do
|
|
2036
|
+
|
|
2037
|
+
let(:criteria) do
|
|
2038
|
+
Band.desc(:name)
|
|
2039
|
+
end
|
|
2040
|
+
|
|
2041
|
+
let(:context) do
|
|
2042
|
+
described_class.new(criteria)
|
|
2043
|
+
end
|
|
2044
|
+
|
|
2045
|
+
|
|
2046
|
+
it 'applies the criteria sort' do
|
|
2047
|
+
expect(context.last).to eq(depeche_mode)
|
|
2048
|
+
end
|
|
2049
|
+
|
|
2050
|
+
context 'when calling #first' do
|
|
2051
|
+
|
|
2052
|
+
it 'applies the criteria sort' do
|
|
2053
|
+
expect(context.last).to eq(depeche_mode)
|
|
2054
|
+
expect(context.first).to eq(rolling_stones)
|
|
2055
|
+
end
|
|
2056
|
+
end
|
|
2057
|
+
|
|
2058
|
+
context 'with option { id_sort: :none }' do
|
|
2059
|
+
|
|
2060
|
+
let(:opts) do
|
|
2061
|
+
{ id_sort: :none }
|
|
2062
|
+
end
|
|
2063
|
+
|
|
2064
|
+
it 'uses the preexisting sort' do
|
|
2065
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
|
2066
|
+
end
|
|
2067
|
+
|
|
2068
|
+
context 'when calling #first' do
|
|
2069
|
+
|
|
2070
|
+
it 'uses the preexisting sort' do
|
|
2071
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
|
2072
|
+
expect(context.first(opts)).to eq(rolling_stones)
|
|
2073
|
+
end
|
|
2074
|
+
end
|
|
2075
|
+
end
|
|
2076
|
+
end
|
|
2077
|
+
|
|
2078
|
+
context "when using .sort" do
|
|
2079
|
+
|
|
2080
|
+
let(:criteria) do
|
|
2081
|
+
Band.all.sort(:name => -1).criteria
|
|
2082
|
+
end
|
|
2083
|
+
|
|
2084
|
+
let(:context) do
|
|
2085
|
+
described_class.new(criteria)
|
|
2086
|
+
end
|
|
2087
|
+
|
|
2088
|
+
context "when there is sort on the context" do
|
|
2089
|
+
|
|
2090
|
+
it "follows the main sort" do
|
|
2091
|
+
expect(context.last).to eq(depeche_mode)
|
|
2092
|
+
end
|
|
2093
|
+
end
|
|
2094
|
+
|
|
2095
|
+
context "when subsequently calling #first" do
|
|
2096
|
+
|
|
2097
|
+
it "returns the correct document" do
|
|
2098
|
+
expect(context.last).to eq(depeche_mode)
|
|
2099
|
+
expect(context.first).to eq(rolling_stones)
|
|
2100
|
+
end
|
|
2101
|
+
end
|
|
2102
|
+
end
|
|
2103
|
+
|
|
2104
|
+
context "when the context is cached" do
|
|
2105
|
+
|
|
2106
|
+
let(:criteria) do
|
|
2107
|
+
Band.where(name: "Depeche Mode").cache
|
|
2108
|
+
end
|
|
2109
|
+
|
|
2110
|
+
let(:context) do
|
|
2111
|
+
described_class.new(criteria)
|
|
2112
|
+
end
|
|
2113
|
+
|
|
2114
|
+
context "when the cache is loaded" do
|
|
2115
|
+
|
|
2116
|
+
before do
|
|
2117
|
+
context.to_a
|
|
2118
|
+
end
|
|
2119
|
+
|
|
2120
|
+
it "returns the last document without touching the database" do
|
|
2121
|
+
expect(context).to receive(:view).never
|
|
2122
|
+
expect(context.last).to eq(depeche_mode)
|
|
2123
|
+
end
|
|
2124
|
+
end
|
|
2125
|
+
|
|
2126
|
+
context "when last method was called before" do
|
|
2127
|
+
|
|
2128
|
+
before do
|
|
2129
|
+
context.last
|
|
2130
|
+
end
|
|
2131
|
+
|
|
2132
|
+
it "returns the last document without touching the database" do
|
|
2133
|
+
expect(context).to receive(:view).never
|
|
2134
|
+
expect(context.last).to eq(depeche_mode)
|
|
2135
|
+
end
|
|
2136
|
+
end
|
|
2137
|
+
end
|
|
2138
|
+
|
|
2139
|
+
context "when including a limit" do
|
|
2140
|
+
|
|
2141
|
+
context "when the context is not cached" do
|
|
2142
|
+
|
|
2143
|
+
let(:context) do
|
|
2144
|
+
described_class.new(criteria)
|
|
2145
|
+
end
|
|
2146
|
+
|
|
2147
|
+
context "when the limit is 1" do
|
|
2148
|
+
let(:criteria) do
|
|
2149
|
+
Band.criteria
|
|
2150
|
+
end
|
|
2151
|
+
|
|
2152
|
+
let(:docs) do
|
|
2153
|
+
context.last(1)
|
|
2154
|
+
end
|
|
2155
|
+
|
|
2156
|
+
it "returns an array of documents" do
|
|
2157
|
+
expect(docs).to eq([ rolling_stones ])
|
|
2158
|
+
end
|
|
2159
|
+
end
|
|
2160
|
+
|
|
2161
|
+
context "when the limit is >1" do
|
|
2162
|
+
let(:criteria) do
|
|
2163
|
+
Band.criteria
|
|
2164
|
+
end
|
|
2165
|
+
|
|
2166
|
+
let(:docs) do
|
|
2167
|
+
context.last(2)
|
|
2168
|
+
end
|
|
2169
|
+
|
|
2170
|
+
it "returns the number of documents in order" do
|
|
2171
|
+
expect(docs).to eq([ new_order, rolling_stones ])
|
|
2172
|
+
end
|
|
2173
|
+
end
|
|
2174
|
+
|
|
2175
|
+
context 'when the criteria has a collation' do
|
|
2176
|
+
min_server_version '3.4'
|
|
2177
|
+
|
|
2178
|
+
let(:criteria) do
|
|
2179
|
+
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
|
2180
|
+
end
|
|
2181
|
+
|
|
2182
|
+
it "returns the first matching document" do
|
|
2183
|
+
expect(context.last(1)).to eq([ depeche_mode ])
|
|
2184
|
+
end
|
|
2185
|
+
end
|
|
2186
|
+
end
|
|
2187
|
+
|
|
2188
|
+
context "when the context is cached" do
|
|
2189
|
+
|
|
2190
|
+
let(:context) do
|
|
2191
|
+
described_class.new(criteria)
|
|
2192
|
+
end
|
|
2193
|
+
|
|
2194
|
+
context "when the whole context is loaded" do
|
|
2195
|
+
|
|
2196
|
+
before do
|
|
2197
|
+
context.to_a
|
|
2198
|
+
end
|
|
2199
|
+
|
|
2200
|
+
context "when all of the documents are cached" do
|
|
2201
|
+
|
|
2202
|
+
let(:criteria) do
|
|
2203
|
+
Band.all.cache
|
|
2204
|
+
end
|
|
2205
|
+
|
|
2206
|
+
context "when requesting all of the documents" do
|
|
2207
|
+
|
|
2208
|
+
let(:docs) do
|
|
2209
|
+
context.last(3)
|
|
2210
|
+
end
|
|
2211
|
+
|
|
2212
|
+
it "returns all of the documents without touching the database" do
|
|
2213
|
+
expect(context).to receive(:view).never
|
|
2214
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
2215
|
+
end
|
|
2216
|
+
end
|
|
2217
|
+
|
|
2218
|
+
context "when requesting fewer than all of the documents" do
|
|
2219
|
+
|
|
2220
|
+
let(:docs) do
|
|
2221
|
+
context.last(2)
|
|
2222
|
+
end
|
|
2223
|
+
|
|
2224
|
+
it "returns all of the documents without touching the database" do
|
|
2225
|
+
expect(context).to receive(:view).never
|
|
2226
|
+
expect(docs).to eq([ new_order, rolling_stones ])
|
|
2227
|
+
end
|
|
2228
|
+
end
|
|
2229
|
+
end
|
|
2230
|
+
|
|
2231
|
+
context "when only one document is cached" do
|
|
2232
|
+
|
|
2233
|
+
let(:criteria) do
|
|
2234
|
+
Band.where(name: "Depeche Mode").cache
|
|
2235
|
+
end
|
|
2236
|
+
|
|
2237
|
+
context "when requesting one document" do
|
|
2238
|
+
|
|
2239
|
+
let(:docs) do
|
|
2240
|
+
context.last(1)
|
|
2241
|
+
end
|
|
2242
|
+
|
|
2243
|
+
it "returns one document without touching the database" do
|
|
2244
|
+
expect(context).to receive(:view).never
|
|
2245
|
+
expect(docs).to eq([ depeche_mode ])
|
|
2246
|
+
end
|
|
2247
|
+
end
|
|
2248
|
+
end
|
|
2249
|
+
end
|
|
2250
|
+
|
|
2251
|
+
context "when the last method was called before" do
|
|
2252
|
+
|
|
2253
|
+
let(:context) do
|
|
2254
|
+
described_class.new(criteria)
|
|
2255
|
+
end
|
|
2256
|
+
|
|
2257
|
+
let(:criteria) do
|
|
2258
|
+
Band.all.cache
|
|
2259
|
+
end
|
|
2260
|
+
|
|
2261
|
+
before do
|
|
2262
|
+
context.last(before_limit)
|
|
2263
|
+
end
|
|
2264
|
+
|
|
2265
|
+
let(:docs) do
|
|
2266
|
+
context.last(limit)
|
|
2267
|
+
end
|
|
2268
|
+
|
|
2269
|
+
context "when getting all of the documents before" do
|
|
2270
|
+
let(:before_limit) { 3 }
|
|
2271
|
+
|
|
2272
|
+
context "when getting all of the documents" do
|
|
2273
|
+
let(:limit) { 3 }
|
|
2274
|
+
|
|
2275
|
+
it "returns all documents without touching the database" do
|
|
2276
|
+
expect(context).to receive(:view).never
|
|
2277
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
2278
|
+
end
|
|
2279
|
+
end
|
|
2280
|
+
|
|
2281
|
+
context "when getting fewer documents" do
|
|
2282
|
+
let(:limit) { 2 }
|
|
2283
|
+
|
|
2284
|
+
it "returns the correct documents without touching the database" do
|
|
2285
|
+
expect(context).to receive(:view).never
|
|
2286
|
+
expect(docs).to eq([ new_order, rolling_stones ])
|
|
2287
|
+
end
|
|
2288
|
+
end
|
|
2289
|
+
end
|
|
2290
|
+
|
|
2291
|
+
context "when getting fewer documents before" do
|
|
2292
|
+
let(:before_limit) { 2 }
|
|
2293
|
+
|
|
2294
|
+
context "when getting the same number of documents" do
|
|
2295
|
+
let(:limit) { 2 }
|
|
2296
|
+
|
|
2297
|
+
it "returns the correct documents without touching the database" do
|
|
2298
|
+
expect(context).to receive(:view).never
|
|
2299
|
+
expect(docs).to eq([ new_order, rolling_stones ])
|
|
2300
|
+
end
|
|
2301
|
+
end
|
|
2302
|
+
|
|
2303
|
+
context "when getting more documents" do
|
|
2304
|
+
let(:limit) { 3 }
|
|
2305
|
+
|
|
2306
|
+
it "returns the correct documents and touches the database" do
|
|
2307
|
+
expect(context).to receive(:view).twice.and_call_original
|
|
2308
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
2309
|
+
end
|
|
2310
|
+
end
|
|
2311
|
+
end
|
|
2312
|
+
|
|
2313
|
+
context "when getting one document before" do
|
|
2314
|
+
let(:before_limit) { 1 }
|
|
2315
|
+
|
|
2316
|
+
context "when getting one document" do
|
|
2317
|
+
let(:limit) { 1 }
|
|
2318
|
+
|
|
2319
|
+
it "returns the correct documents without touching the database" do
|
|
2320
|
+
expect(context).to receive(:view).never
|
|
2321
|
+
expect(docs).to eq([ rolling_stones ])
|
|
2322
|
+
end
|
|
2323
|
+
end
|
|
2324
|
+
|
|
2325
|
+
context "when getting more than one document" do
|
|
2326
|
+
let(:limit) { 3 }
|
|
2327
|
+
|
|
2328
|
+
it "returns the correct documents and touches the database" do
|
|
2329
|
+
expect(context).to receive(:view).twice.and_call_original
|
|
2330
|
+
expect(docs).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
2331
|
+
end
|
|
2332
|
+
end
|
|
2333
|
+
end
|
|
2334
|
+
end
|
|
2335
|
+
end
|
|
2336
|
+
end
|
|
2337
|
+
|
|
2338
|
+
context "when calling #last then #first" do
|
|
2339
|
+
|
|
2340
|
+
let(:context) do
|
|
2341
|
+
described_class.new(criteria)
|
|
2342
|
+
end
|
|
2343
|
+
|
|
2344
|
+
let(:criteria) do
|
|
2345
|
+
Band.all.cache
|
|
2346
|
+
end
|
|
2347
|
+
|
|
2348
|
+
before do
|
|
2349
|
+
context.last(before_limit)
|
|
2350
|
+
end
|
|
2351
|
+
|
|
2352
|
+
let(:docs) do
|
|
2353
|
+
context.first(limit)
|
|
2354
|
+
end
|
|
2355
|
+
|
|
2356
|
+
context "when getting one from the beginning and one from the end" do
|
|
2357
|
+
let(:before_limit) { 2 }
|
|
2358
|
+
let(:limit) { 1 }
|
|
2359
|
+
|
|
2360
|
+
it "hits the database" do
|
|
2361
|
+
expect(context).to receive(:view).exactly(3).times.and_call_original
|
|
2362
|
+
docs
|
|
2363
|
+
end
|
|
2364
|
+
|
|
2365
|
+
it "gets the correct document" do
|
|
2366
|
+
pending "MONGOID-5416"
|
|
2367
|
+
expect(docs).to eq([ depeche_mode ])
|
|
2368
|
+
end
|
|
2369
|
+
end
|
|
2370
|
+
end
|
|
2371
|
+
|
|
2372
|
+
context "when given an empty hash" do
|
|
2373
|
+
let(:context) { described_class.new(criteria) }
|
|
2374
|
+
let(:criteria) { Band.criteria }
|
|
2375
|
+
let(:docs) { context.last({}) }
|
|
2376
|
+
|
|
2377
|
+
it "behaves as if limit is nil" do
|
|
2378
|
+
expect(docs).to eq(rolling_stones)
|
|
2379
|
+
end
|
|
2380
|
+
end
|
|
2381
|
+
end
|
|
2382
|
+
|
|
2383
|
+
describe "#initialize" do
|
|
2384
|
+
|
|
2385
|
+
let(:criteria) do
|
|
2386
|
+
Band.where(name: "Depeche Mode").no_timeout
|
|
2387
|
+
end
|
|
2388
|
+
|
|
2389
|
+
let(:context) do
|
|
2390
|
+
described_class.new(criteria)
|
|
2391
|
+
end
|
|
2392
|
+
|
|
2393
|
+
it "sets the criteria" do
|
|
2394
|
+
expect(context.criteria).to eq(criteria)
|
|
2395
|
+
end
|
|
2396
|
+
|
|
2397
|
+
it "sets the klass" do
|
|
2398
|
+
expect(context.klass).to eq(Band)
|
|
2399
|
+
end
|
|
2400
|
+
|
|
2401
|
+
it "sets the view" do
|
|
2402
|
+
expect(context.view).to be_a(Mongo::Collection::View)
|
|
2403
|
+
end
|
|
2404
|
+
|
|
2405
|
+
it "sets the view selector" do
|
|
2406
|
+
expect(context.view.selector).to eq({ "name" => "Depeche Mode" })
|
|
1338
2407
|
end
|
|
1339
2408
|
end
|
|
1340
2409
|
|
|
@@ -1343,8 +2412,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1343
2412
|
describe "##{method}" do
|
|
1344
2413
|
|
|
1345
2414
|
before do
|
|
1346
|
-
Band.create(name: "Depeche Mode")
|
|
1347
|
-
Band.create(name: "New Order")
|
|
2415
|
+
Band.create!(name: "Depeche Mode")
|
|
2416
|
+
Band.create!(name: "New Order")
|
|
1348
2417
|
end
|
|
1349
2418
|
|
|
1350
2419
|
context "when the criteria has a limit" do
|
|
@@ -1362,12 +2431,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1362
2431
|
end
|
|
1363
2432
|
|
|
1364
2433
|
context "when calling more than once" do
|
|
1365
|
-
|
|
1366
|
-
before do
|
|
1367
|
-
expect(context.view).to receive(:count).once.and_return(2)
|
|
1368
|
-
end
|
|
1369
|
-
|
|
1370
2434
|
it "returns the cached value for subsequent calls" do
|
|
2435
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
|
1371
2436
|
2.times { expect(context.send(method)).to eq(2) }
|
|
1372
2437
|
end
|
|
1373
2438
|
end
|
|
@@ -1376,10 +2441,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1376
2441
|
|
|
1377
2442
|
before do
|
|
1378
2443
|
context.entries
|
|
1379
|
-
expect(context.view).to receive(:count).once.and_return(2)
|
|
1380
2444
|
end
|
|
1381
2445
|
|
|
1382
2446
|
it "returns the cached value for all calls" do
|
|
2447
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
|
1383
2448
|
expect(context.send(method)).to eq(2)
|
|
1384
2449
|
end
|
|
1385
2450
|
|
|
@@ -1411,12 +2476,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1411
2476
|
end
|
|
1412
2477
|
|
|
1413
2478
|
context "when calling more than once" do
|
|
1414
|
-
|
|
1415
|
-
before do
|
|
1416
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
1417
|
-
end
|
|
1418
|
-
|
|
1419
2479
|
it "returns the cached value for subsequent calls" do
|
|
2480
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
1420
2481
|
2.times { expect(context.send(method)).to eq(1) }
|
|
1421
2482
|
end
|
|
1422
2483
|
end
|
|
@@ -1425,10 +2486,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1425
2486
|
|
|
1426
2487
|
before do
|
|
1427
2488
|
context.entries
|
|
1428
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
|
1429
2489
|
end
|
|
1430
2490
|
|
|
1431
2491
|
it "returns the cached value for all calls" do
|
|
2492
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
|
1432
2493
|
expect(context.send(method)).to eq(1)
|
|
1433
2494
|
end
|
|
1434
2495
|
|
|
@@ -1450,11 +2511,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1450
2511
|
describe "#limit" do
|
|
1451
2512
|
|
|
1452
2513
|
let!(:depeche_mode) do
|
|
1453
|
-
Band.create(name: "Depeche Mode")
|
|
2514
|
+
Band.create!(name: "Depeche Mode")
|
|
1454
2515
|
end
|
|
1455
2516
|
|
|
1456
2517
|
let!(:new_order) do
|
|
1457
|
-
Band.create(name: "New Order")
|
|
2518
|
+
Band.create!(name: "New Order")
|
|
1458
2519
|
end
|
|
1459
2520
|
|
|
1460
2521
|
let(:criteria) do
|
|
@@ -1470,11 +2531,85 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1470
2531
|
end
|
|
1471
2532
|
end
|
|
1472
2533
|
|
|
2534
|
+
describe "#take" do
|
|
2535
|
+
|
|
2536
|
+
let!(:depeche_mode) do
|
|
2537
|
+
Band.create!(name: "Depeche Mode")
|
|
2538
|
+
end
|
|
2539
|
+
|
|
2540
|
+
let!(:new_order) do
|
|
2541
|
+
Band.create!(name: "New Order")
|
|
2542
|
+
end
|
|
2543
|
+
|
|
2544
|
+
let!(:rolling_stones) do
|
|
2545
|
+
Band.create!(name: "The Rolling Stones")
|
|
2546
|
+
end
|
|
2547
|
+
|
|
2548
|
+
let(:criteria) do
|
|
2549
|
+
Band.all
|
|
2550
|
+
end
|
|
2551
|
+
|
|
2552
|
+
let(:context) do
|
|
2553
|
+
described_class.new(criteria)
|
|
2554
|
+
end
|
|
2555
|
+
|
|
2556
|
+
it "takes the correct number results" do
|
|
2557
|
+
expect(context.take(2)).to eq([ depeche_mode, new_order ])
|
|
2558
|
+
end
|
|
2559
|
+
|
|
2560
|
+
it "returns an array when passing 1" do
|
|
2561
|
+
expect(context.take(1)).to eq([ depeche_mode ])
|
|
2562
|
+
end
|
|
2563
|
+
|
|
2564
|
+
it "does not return an array when not passing an argument" do
|
|
2565
|
+
expect(context.take).to eq(depeche_mode)
|
|
2566
|
+
end
|
|
2567
|
+
|
|
2568
|
+
it "returns all the documents taking more than whats in the db" do
|
|
2569
|
+
expect(context.take(5)).to eq([ depeche_mode, new_order, rolling_stones ])
|
|
2570
|
+
end
|
|
2571
|
+
end
|
|
2572
|
+
|
|
2573
|
+
describe "#take!" do
|
|
2574
|
+
|
|
2575
|
+
let!(:depeche_mode) do
|
|
2576
|
+
Band.create!(name: "Depeche Mode")
|
|
2577
|
+
end
|
|
2578
|
+
|
|
2579
|
+
let!(:new_order) do
|
|
2580
|
+
Band.create!(name: "New Order")
|
|
2581
|
+
end
|
|
2582
|
+
|
|
2583
|
+
let!(:rolling_stones) do
|
|
2584
|
+
Band.create!(name: "The Rolling Stones")
|
|
2585
|
+
end
|
|
2586
|
+
|
|
2587
|
+
let(:criteria) do
|
|
2588
|
+
Band.all
|
|
2589
|
+
end
|
|
2590
|
+
|
|
2591
|
+
let(:context) do
|
|
2592
|
+
described_class.new(criteria)
|
|
2593
|
+
end
|
|
2594
|
+
|
|
2595
|
+
it "takes the first document" do
|
|
2596
|
+
expect(context.take!).to eq(depeche_mode)
|
|
2597
|
+
end
|
|
2598
|
+
|
|
2599
|
+
context "when there are no documents" do
|
|
2600
|
+
it "raises an error" do
|
|
2601
|
+
expect do
|
|
2602
|
+
Person.take!
|
|
2603
|
+
end.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
2604
|
+
end
|
|
2605
|
+
end
|
|
2606
|
+
end
|
|
2607
|
+
|
|
1473
2608
|
describe "#map" do
|
|
1474
2609
|
|
|
1475
2610
|
before do
|
|
1476
|
-
Band.create(name: "Depeche Mode")
|
|
1477
|
-
Band.create(name: "New Order")
|
|
2611
|
+
Band.create!(name: "Depeche Mode")
|
|
2612
|
+
Band.create!(name: "New Order")
|
|
1478
2613
|
end
|
|
1479
2614
|
|
|
1480
2615
|
let(:criteria) do
|
|
@@ -1487,7 +2622,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1487
2622
|
|
|
1488
2623
|
context "when passed the symbol field name" do
|
|
1489
2624
|
|
|
1490
|
-
it "performs mapping" do
|
|
2625
|
+
it "performs mapping and warns" do
|
|
2626
|
+
expect(Mongoid::Warnings).to receive(:warn_map_field_deprecated)
|
|
1491
2627
|
expect(context.map(:name)).to eq ["Depeche Mode", "New Order"]
|
|
1492
2628
|
end
|
|
1493
2629
|
end
|
|
@@ -1503,11 +2639,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1503
2639
|
describe "#map_reduce" do
|
|
1504
2640
|
|
|
1505
2641
|
let!(:depeche_mode) do
|
|
1506
|
-
Band.create(name: "Depeche Mode", likes: 200)
|
|
2642
|
+
Band.create!(name: "Depeche Mode", likes: 200)
|
|
1507
2643
|
end
|
|
1508
2644
|
|
|
1509
2645
|
let!(:tool) do
|
|
1510
|
-
Band.create(name: "Tool", likes: 100)
|
|
2646
|
+
Band.create!(name: "Tool", likes: 100)
|
|
1511
2647
|
end
|
|
1512
2648
|
|
|
1513
2649
|
let(:map) do
|
|
@@ -1528,6 +2664,10 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1528
2664
|
}}
|
|
1529
2665
|
end
|
|
1530
2666
|
|
|
2667
|
+
let(:ordered_results) do
|
|
2668
|
+
results['results'].sort_by { |doc| doc['_id'] }
|
|
2669
|
+
end
|
|
2670
|
+
|
|
1531
2671
|
context "when no selection is provided" do
|
|
1532
2672
|
|
|
1533
2673
|
let(:criteria) do
|
|
@@ -1559,36 +2699,40 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1559
2699
|
end
|
|
1560
2700
|
|
|
1561
2701
|
it "contains the entire raw results" do
|
|
1562
|
-
expect(
|
|
2702
|
+
expect(ordered_results).to eq([
|
|
1563
2703
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
1564
2704
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
1565
2705
|
])
|
|
1566
2706
|
end
|
|
1567
2707
|
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
end
|
|
2708
|
+
context 'when statistics are available' do
|
|
2709
|
+
max_server_version '4.2'
|
|
1571
2710
|
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
})
|
|
1576
|
-
end
|
|
2711
|
+
it "contains the execution time" do
|
|
2712
|
+
expect(results.time).to_not be_nil
|
|
2713
|
+
end
|
|
1577
2714
|
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
2715
|
+
it "contains the count statistics" do
|
|
2716
|
+
expect(results["counts"]).to eq({
|
|
2717
|
+
"input" => 2, "emit" => 2, "reduce" => 0, "output" => 2
|
|
2718
|
+
})
|
|
2719
|
+
end
|
|
1581
2720
|
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
2721
|
+
it "contains the input count" do
|
|
2722
|
+
expect(results.input).to eq(2)
|
|
2723
|
+
end
|
|
1585
2724
|
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
2725
|
+
it "contains the emitted count" do
|
|
2726
|
+
expect(results.emitted).to eq(2)
|
|
2727
|
+
end
|
|
1589
2728
|
|
|
1590
|
-
|
|
1591
|
-
|
|
2729
|
+
it "contains the reduced count" do
|
|
2730
|
+
expect(results.reduced).to eq(0)
|
|
2731
|
+
end
|
|
2732
|
+
|
|
2733
|
+
it "contains the output count" do
|
|
2734
|
+
expect(results.output).to eq(2)
|
|
2735
|
+
end
|
|
1592
2736
|
end
|
|
1593
2737
|
end
|
|
1594
2738
|
|
|
@@ -1617,35 +2761,39 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1617
2761
|
end
|
|
1618
2762
|
|
|
1619
2763
|
it "contains the entire raw results" do
|
|
1620
|
-
expect(
|
|
2764
|
+
expect(ordered_results).to eq([
|
|
1621
2765
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
|
1622
2766
|
])
|
|
1623
2767
|
end
|
|
1624
2768
|
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
end
|
|
2769
|
+
context 'when statistics are available' do
|
|
2770
|
+
max_server_version '4.2'
|
|
1628
2771
|
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
})
|
|
1633
|
-
end
|
|
2772
|
+
it "contains the execution time" do
|
|
2773
|
+
expect(results.time).to_not be_nil
|
|
2774
|
+
end
|
|
1634
2775
|
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
2776
|
+
it "contains the count statistics" do
|
|
2777
|
+
expect(results["counts"]).to eq({
|
|
2778
|
+
"input" => 1, "emit" => 1, "reduce" => 0, "output" => 1
|
|
2779
|
+
})
|
|
2780
|
+
end
|
|
1638
2781
|
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
2782
|
+
it "contains the input count" do
|
|
2783
|
+
expect(results.input).to eq(1)
|
|
2784
|
+
end
|
|
1642
2785
|
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
2786
|
+
it "contains the emitted count" do
|
|
2787
|
+
expect(results.emitted).to eq(1)
|
|
2788
|
+
end
|
|
2789
|
+
|
|
2790
|
+
it "contains the reduced count" do
|
|
2791
|
+
expect(results.reduced).to eq(0)
|
|
2792
|
+
end
|
|
1646
2793
|
|
|
1647
|
-
|
|
1648
|
-
|
|
2794
|
+
it "contains the output count" do
|
|
2795
|
+
expect(results.output).to eq(1)
|
|
2796
|
+
end
|
|
1649
2797
|
end
|
|
1650
2798
|
end
|
|
1651
2799
|
|
|
@@ -1685,7 +2833,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1685
2833
|
end
|
|
1686
2834
|
|
|
1687
2835
|
it "contains the entire raw results" do
|
|
1688
|
-
expect(
|
|
2836
|
+
expect(ordered_results).to eq([
|
|
1689
2837
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
1690
2838
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
1691
2839
|
])
|
|
@@ -1693,6 +2841,9 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1693
2841
|
end
|
|
1694
2842
|
|
|
1695
2843
|
context "when limiting is provided" do
|
|
2844
|
+
# map/reduce with limit is not supported on sharded clusters:
|
|
2845
|
+
# https://jira.mongodb.org/browse/SERVER-2099
|
|
2846
|
+
require_topology :single, :replica_set
|
|
1696
2847
|
|
|
1697
2848
|
let(:criteria) do
|
|
1698
2849
|
Band.limit(1)
|
|
@@ -1799,6 +2950,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1799
2950
|
end
|
|
1800
2951
|
|
|
1801
2952
|
context "when the output specifies a different db" do
|
|
2953
|
+
# Limit is not supported in sharded clusters
|
|
2954
|
+
require_topology :single, :replica_set
|
|
1802
2955
|
|
|
1803
2956
|
let(:criteria) do
|
|
1804
2957
|
Band.limit(1)
|
|
@@ -1915,11 +3068,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1915
3068
|
describe "#skip" do
|
|
1916
3069
|
|
|
1917
3070
|
let!(:depeche_mode) do
|
|
1918
|
-
Band.create(name: "Depeche Mode")
|
|
3071
|
+
Band.create!(name: "Depeche Mode")
|
|
1919
3072
|
end
|
|
1920
3073
|
|
|
1921
3074
|
let!(:new_order) do
|
|
1922
|
-
Band.create(name: "New Order")
|
|
3075
|
+
Band.create!(name: "New Order")
|
|
1923
3076
|
end
|
|
1924
3077
|
|
|
1925
3078
|
let(:criteria) do
|
|
@@ -1938,11 +3091,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1938
3091
|
describe "#sort" do
|
|
1939
3092
|
|
|
1940
3093
|
let!(:depeche_mode) do
|
|
1941
|
-
Band.create(name: "Depeche Mode")
|
|
3094
|
+
Band.create!(name: "Depeche Mode")
|
|
1942
3095
|
end
|
|
1943
3096
|
|
|
1944
3097
|
let!(:new_order) do
|
|
1945
|
-
Band.create(name: "New Order")
|
|
3098
|
+
Band.create!(name: "New Order")
|
|
1946
3099
|
end
|
|
1947
3100
|
|
|
1948
3101
|
let(:criteria) do
|
|
@@ -1981,11 +3134,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1981
3134
|
describe "#update" do
|
|
1982
3135
|
|
|
1983
3136
|
let!(:depeche_mode) do
|
|
1984
|
-
Band.create(name: "Depeche Mode")
|
|
3137
|
+
Band.create!(name: "Depeche Mode")
|
|
1985
3138
|
end
|
|
1986
3139
|
|
|
1987
3140
|
let!(:new_order) do
|
|
1988
|
-
Band.create(name: "New Order")
|
|
3141
|
+
Band.create!(name: "New Order")
|
|
1989
3142
|
end
|
|
1990
3143
|
|
|
1991
3144
|
let(:criteria) do
|
|
@@ -1999,11 +3152,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
1999
3152
|
context "when adding an element to a HABTM set" do
|
|
2000
3153
|
|
|
2001
3154
|
let(:person) do
|
|
2002
|
-
Person.create
|
|
3155
|
+
Person.create!
|
|
2003
3156
|
end
|
|
2004
3157
|
|
|
2005
3158
|
let(:preference) do
|
|
2006
|
-
Preference.create
|
|
3159
|
+
Preference.create!
|
|
2007
3160
|
end
|
|
2008
3161
|
|
|
2009
3162
|
before do
|
|
@@ -2133,7 +3286,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2133
3286
|
end
|
|
2134
3287
|
end
|
|
2135
3288
|
|
|
2136
|
-
context 'when provided array filters'
|
|
3289
|
+
context 'when provided array filters' do
|
|
3290
|
+
min_server_version '3.6'
|
|
2137
3291
|
|
|
2138
3292
|
before do
|
|
2139
3293
|
Band.delete_all
|
|
@@ -2141,12 +3295,12 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2141
3295
|
b.labels << Label.new(name: 'Warner')
|
|
2142
3296
|
b.labels << Label.new(name: 'Sony')
|
|
2143
3297
|
b.labels << Label.new(name: 'Cbs')
|
|
2144
|
-
b.save
|
|
3298
|
+
b.save!
|
|
2145
3299
|
|
|
2146
3300
|
b = Band.new(name: 'FKA Twigs')
|
|
2147
3301
|
b.labels << Label.new(name: 'Warner')
|
|
2148
3302
|
b.labels << Label.new(name: 'Cbs')
|
|
2149
|
-
b.save
|
|
3303
|
+
b.save!
|
|
2150
3304
|
end
|
|
2151
3305
|
|
|
2152
3306
|
|
|
@@ -2172,11 +3326,11 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2172
3326
|
describe "#update_all" do
|
|
2173
3327
|
|
|
2174
3328
|
let!(:depeche_mode) do
|
|
2175
|
-
Band.create(name: "Depeche Mode", origin: "Essex")
|
|
3329
|
+
Band.create!(name: "Depeche Mode", origin: "Essex")
|
|
2176
3330
|
end
|
|
2177
3331
|
|
|
2178
3332
|
let!(:new_order) do
|
|
2179
|
-
Band.create(name: "New Order")
|
|
3333
|
+
Band.create!(name: "New Order")
|
|
2180
3334
|
end
|
|
2181
3335
|
|
|
2182
3336
|
let(:criteria) do
|
|
@@ -2305,7 +3459,8 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2305
3459
|
end
|
|
2306
3460
|
end
|
|
2307
3461
|
|
|
2308
|
-
context 'when provided array filters'
|
|
3462
|
+
context 'when provided array filters' do
|
|
3463
|
+
min_server_version '3.6'
|
|
2309
3464
|
|
|
2310
3465
|
before do
|
|
2311
3466
|
Band.delete_all
|
|
@@ -2313,12 +3468,12 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2313
3468
|
b.labels << Label.new(name: 'Warner')
|
|
2314
3469
|
b.labels << Label.new(name: 'Sony')
|
|
2315
3470
|
b.labels << Label.new(name: 'Cbs')
|
|
2316
|
-
b.save
|
|
3471
|
+
b.save!
|
|
2317
3472
|
|
|
2318
3473
|
b = Band.new(name: 'FKA Twigs')
|
|
2319
3474
|
b.labels << Label.new(name: 'Warner')
|
|
2320
3475
|
b.labels << Label.new(name: 'Cbs')
|
|
2321
|
-
b.save
|
|
3476
|
+
b.save!
|
|
2322
3477
|
end
|
|
2323
3478
|
|
|
2324
3479
|
|
|
@@ -2328,7 +3483,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2328
3483
|
|
|
2329
3484
|
let!(:update) do
|
|
2330
3485
|
context.update_all({ '$set' => { 'labels.$[i].name' => 'Sony' } },
|
|
2331
|
-
|
|
3486
|
+
array_filters: [{ 'i.name' => 'Cbs' }])
|
|
2332
3487
|
end
|
|
2333
3488
|
|
|
2334
3489
|
it 'applies the array filters' do
|
|
@@ -2343,7 +3498,7 @@ describe Mongoid::Contextual::Mongo do
|
|
|
2343
3498
|
|
|
2344
3499
|
describe '#pipeline' do
|
|
2345
3500
|
|
|
2346
|
-
context 'when the criteria has a selector'
|
|
3501
|
+
context 'when the criteria has a selector' do
|
|
2347
3502
|
|
|
2348
3503
|
before do
|
|
2349
3504
|
Artist.index(name: "text")
|