mongoid 6.4.4 → 7.5.1
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 -5
- 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 +358 -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 +5 -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 +6 -9
- 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 +117 -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 +281 -109
- 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 +36 -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 +24 -42
- 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 +49 -47
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +138 -106
- 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 +80 -17
- 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 +51 -0
- 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 +4652 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +69 -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 +3773 -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 +4092 -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 +417 -34
- data/spec/mongoid/cacheable_spec.rb +3 -1
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +146 -33
- data/spec/mongoid/clients/options_spec.rb +93 -60
- data/spec/mongoid/clients/sessions_spec.rb +40 -30
- data/spec/mongoid/clients/transactions_spec.rb +415 -0
- data/spec/mongoid/clients_spec.rb +78 -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 +350 -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 +31 -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 +1318 -183
- 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 +39 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -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 +829 -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 +95 -34
- 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 +84 -20
- 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 +3 -1
- 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 +577 -64
- 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 +61 -0
- data/spec/mongoid/shardable_spec.rb +145 -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 +2 -0
- 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 +230 -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 +73 -76
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +53 -0
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +51 -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/{app → support}/models/array_field.rb +0 -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 +64 -0
- data.tar.gz.sig +3 -1
- metadata +1301 -830
- metadata.gz.sig +0 -0
- 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/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
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
2
4
|
|
|
3
5
|
describe Mongoid::Criteria do
|
|
@@ -38,7 +40,7 @@ describe Mongoid::Criteria do
|
|
|
38
40
|
context "when the entries are the same" do
|
|
39
41
|
|
|
40
42
|
let!(:band) do
|
|
41
|
-
Band.create(name: "Depeche Mode")
|
|
43
|
+
Band.create!(name: "Depeche Mode")
|
|
42
44
|
end
|
|
43
45
|
|
|
44
46
|
let(:other) do
|
|
@@ -53,11 +55,11 @@ describe Mongoid::Criteria do
|
|
|
53
55
|
context "when the entries are not the same" do
|
|
54
56
|
|
|
55
57
|
let!(:band) do
|
|
56
|
-
Band.create(name: "Depeche Mode")
|
|
58
|
+
Band.create!(name: "Depeche Mode")
|
|
57
59
|
end
|
|
58
60
|
|
|
59
61
|
let!(:other_band) do
|
|
60
|
-
Band.create(name: "Tool")
|
|
62
|
+
Band.create!(name: "Tool")
|
|
61
63
|
end
|
|
62
64
|
|
|
63
65
|
let(:other) do
|
|
@@ -102,21 +104,21 @@ describe Mongoid::Criteria do
|
|
|
102
104
|
describe "#asc" do
|
|
103
105
|
|
|
104
106
|
let(:person) do
|
|
105
|
-
Person.create
|
|
107
|
+
Person.create!
|
|
106
108
|
end
|
|
107
109
|
|
|
108
110
|
context "when the documents are embedded" do
|
|
109
111
|
|
|
110
112
|
let!(:hobrecht) do
|
|
111
|
-
person.addresses.create(street: "hobrecht", name: "hobrecht")
|
|
113
|
+
person.addresses.create!(street: "hobrecht", name: "hobrecht")
|
|
112
114
|
end
|
|
113
115
|
|
|
114
116
|
let!(:friedel) do
|
|
115
|
-
person.addresses.create(street: "friedel", name: "friedel")
|
|
117
|
+
person.addresses.create!(street: "friedel", name: "friedel")
|
|
116
118
|
end
|
|
117
119
|
|
|
118
120
|
let!(:pfluger) do
|
|
119
|
-
person.addresses.create(street: "pfluger", name: "pfluger")
|
|
121
|
+
person.addresses.create!(street: "pfluger", name: "pfluger")
|
|
120
122
|
end
|
|
121
123
|
|
|
122
124
|
let(:criteria) do
|
|
@@ -132,7 +134,7 @@ describe Mongoid::Criteria do
|
|
|
132
134
|
describe "#batch_size" do
|
|
133
135
|
|
|
134
136
|
let(:person) do
|
|
135
|
-
Person.create
|
|
137
|
+
Person.create!
|
|
136
138
|
end
|
|
137
139
|
|
|
138
140
|
let(:criteria) do
|
|
@@ -151,7 +153,7 @@ describe Mongoid::Criteria do
|
|
|
151
153
|
describe "#read" do
|
|
152
154
|
|
|
153
155
|
let(:person) do
|
|
154
|
-
Person.create
|
|
156
|
+
Person.create!
|
|
155
157
|
end
|
|
156
158
|
|
|
157
159
|
let(:criteria) do
|
|
@@ -168,11 +170,11 @@ describe Mongoid::Criteria do
|
|
|
168
170
|
context "when provided a single field" do
|
|
169
171
|
|
|
170
172
|
let!(:depeche) do
|
|
171
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
173
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
172
174
|
end
|
|
173
175
|
|
|
174
176
|
let!(:tool) do
|
|
175
|
-
Band.create(name: "Tool", likes: 500)
|
|
177
|
+
Band.create!(name: "Tool", likes: 500)
|
|
176
178
|
end
|
|
177
179
|
|
|
178
180
|
let(:criteria) do
|
|
@@ -210,11 +212,11 @@ describe Mongoid::Criteria do
|
|
|
210
212
|
context "when provided a single field" do
|
|
211
213
|
|
|
212
214
|
let!(:depeche) do
|
|
213
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
215
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
214
216
|
end
|
|
215
217
|
|
|
216
218
|
let!(:tool) do
|
|
217
|
-
Band.create(name: "Tool", likes: 500)
|
|
219
|
+
Band.create!(name: "Tool", likes: 500)
|
|
218
220
|
end
|
|
219
221
|
|
|
220
222
|
let(:criteria) do
|
|
@@ -236,11 +238,11 @@ describe Mongoid::Criteria do
|
|
|
236
238
|
describe "\##{method}" do
|
|
237
239
|
|
|
238
240
|
let!(:match) do
|
|
239
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
241
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
240
242
|
end
|
|
241
243
|
|
|
242
244
|
let!(:non_match) do
|
|
243
|
-
Band.create(genres: [ "house" ])
|
|
245
|
+
Band.create!(genres: [ "house" ])
|
|
244
246
|
end
|
|
245
247
|
|
|
246
248
|
let(:criteria) do
|
|
@@ -258,11 +260,11 @@ describe Mongoid::Criteria do
|
|
|
258
260
|
describe "\##{method}" do
|
|
259
261
|
|
|
260
262
|
let!(:match) do
|
|
261
|
-
Band.create(name: "Depeche Mode", genres: [ "electro" ])
|
|
263
|
+
Band.create!(name: "Depeche Mode", genres: [ "electro" ])
|
|
262
264
|
end
|
|
263
265
|
|
|
264
266
|
let!(:non_match) do
|
|
265
|
-
Band.create(genres: [ "house" ])
|
|
267
|
+
Band.create!(genres: [ "house" ])
|
|
266
268
|
end
|
|
267
269
|
|
|
268
270
|
let(:criteria) do
|
|
@@ -278,26 +280,41 @@ describe Mongoid::Criteria do
|
|
|
278
280
|
describe "#as_json" do
|
|
279
281
|
|
|
280
282
|
let!(:band) do
|
|
281
|
-
Band.create(name: "Depeche Mode")
|
|
283
|
+
Band.create!(name: "Depeche Mode")
|
|
282
284
|
end
|
|
283
285
|
|
|
284
286
|
let(:criteria) do
|
|
285
287
|
Band.where(name: "Depeche Mode")
|
|
286
288
|
end
|
|
287
289
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
+
# as_json changed in rails 6 to call as_json on serializable_hash.
|
|
291
|
+
# https://github.com/rails/rails/commit/2e5cb980a448e7f4ab00df6e9ad4c1cc456616aa
|
|
292
|
+
|
|
293
|
+
context 'rails < 6' do
|
|
294
|
+
max_rails_version '5.2'
|
|
295
|
+
|
|
296
|
+
it "returns the criteria as a json hash" do
|
|
297
|
+
expect(criteria.as_json).to eq([ band.serializable_hash ])
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
context 'rails >= 6' do
|
|
302
|
+
min_rails_version '6.0'
|
|
303
|
+
|
|
304
|
+
it "returns the criteria as a json hash" do
|
|
305
|
+
expect(criteria.as_json).to eq([ band.serializable_hash.as_json ])
|
|
306
|
+
end
|
|
290
307
|
end
|
|
291
308
|
end
|
|
292
309
|
|
|
293
310
|
describe "#between" do
|
|
294
311
|
|
|
295
312
|
let!(:match) do
|
|
296
|
-
Band.create(member_count: 3)
|
|
313
|
+
Band.create!(member_count: 3)
|
|
297
314
|
end
|
|
298
315
|
|
|
299
316
|
let!(:non_match) do
|
|
300
|
-
Band.create(member_count: 10)
|
|
317
|
+
Band.create!(member_count: 10)
|
|
301
318
|
end
|
|
302
319
|
|
|
303
320
|
let(:criteria) do
|
|
@@ -363,7 +380,7 @@ describe Mongoid::Criteria do
|
|
|
363
380
|
describe "#cache" do
|
|
364
381
|
|
|
365
382
|
let!(:person) do
|
|
366
|
-
Person.create
|
|
383
|
+
Person.create!
|
|
367
384
|
end
|
|
368
385
|
|
|
369
386
|
context "when no eager loading is involved" do
|
|
@@ -515,11 +532,11 @@ describe Mongoid::Criteria do
|
|
|
515
532
|
describe "#delete" do
|
|
516
533
|
|
|
517
534
|
let(:depeche) do
|
|
518
|
-
Band.create(name: "Depeche Mode")
|
|
535
|
+
Band.create!(name: "Depeche Mode")
|
|
519
536
|
end
|
|
520
537
|
|
|
521
538
|
let(:tool) do
|
|
522
|
-
Band.create(name: "Tool")
|
|
539
|
+
Band.create!(name: "Tool")
|
|
523
540
|
end
|
|
524
541
|
|
|
525
542
|
context "when no selector is provided" do
|
|
@@ -573,7 +590,7 @@ describe Mongoid::Criteria do
|
|
|
573
590
|
describe "#each" do
|
|
574
591
|
|
|
575
592
|
let!(:band) do
|
|
576
|
-
Band.create(name: "Depeche Mode")
|
|
593
|
+
Band.create!(name: "Depeche Mode")
|
|
577
594
|
end
|
|
578
595
|
|
|
579
596
|
context "when provided a block" do
|
|
@@ -593,14 +610,14 @@ describe Mongoid::Criteria do
|
|
|
593
610
|
describe "#elem_match" do
|
|
594
611
|
|
|
595
612
|
let!(:match) do
|
|
596
|
-
Band.create(name: "Depeche Mode").tap do |band|
|
|
613
|
+
Band.create!(name: "Depeche Mode").tap do |band|
|
|
597
614
|
r = band.records
|
|
598
|
-
r.create(name: "101")
|
|
615
|
+
r.create!(name: "101")
|
|
599
616
|
end
|
|
600
617
|
end
|
|
601
618
|
|
|
602
619
|
let!(:non_match) do
|
|
603
|
-
Band.create(genres: [ "house" ])
|
|
620
|
+
Band.create!(genres: [ "house" ])
|
|
604
621
|
end
|
|
605
622
|
|
|
606
623
|
let(:criteria) do
|
|
@@ -646,7 +663,7 @@ describe Mongoid::Criteria do
|
|
|
646
663
|
context "when matching documents exist" do
|
|
647
664
|
|
|
648
665
|
let!(:match) do
|
|
649
|
-
Band.create(name: "Depeche Mode")
|
|
666
|
+
Band.create!(name: "Depeche Mode")
|
|
650
667
|
end
|
|
651
668
|
|
|
652
669
|
let(:criteria) do
|
|
@@ -661,7 +678,7 @@ describe Mongoid::Criteria do
|
|
|
661
678
|
context "when no matching documents exist" do
|
|
662
679
|
|
|
663
680
|
let!(:nonmatch) do
|
|
664
|
-
Band.create(name: "New Order")
|
|
681
|
+
Band.create!(name: "New Order")
|
|
665
682
|
end
|
|
666
683
|
|
|
667
684
|
let(:criteria) do
|
|
@@ -677,11 +694,11 @@ describe Mongoid::Criteria do
|
|
|
677
694
|
describe "#exists" do
|
|
678
695
|
|
|
679
696
|
let!(:match) do
|
|
680
|
-
Band.create(name: "Depeche Mode")
|
|
697
|
+
Band.create!(name: "Depeche Mode")
|
|
681
698
|
end
|
|
682
699
|
|
|
683
700
|
let!(:non_match) do
|
|
684
|
-
Band.create
|
|
701
|
+
Band.create!
|
|
685
702
|
end
|
|
686
703
|
|
|
687
704
|
let(:criteria) do
|
|
@@ -698,7 +715,7 @@ describe Mongoid::Criteria do
|
|
|
698
715
|
context "when matching documents exist" do
|
|
699
716
|
|
|
700
717
|
let!(:match) do
|
|
701
|
-
Band.create(name: "Depeche Mode")
|
|
718
|
+
Band.create!(name: "Depeche Mode")
|
|
702
719
|
end
|
|
703
720
|
|
|
704
721
|
let(:criteria) do
|
|
@@ -768,23 +785,83 @@ describe Mongoid::Criteria do
|
|
|
768
785
|
|
|
769
786
|
describe "#field_list" do
|
|
770
787
|
|
|
788
|
+
context "when using the default discriminator key" do
|
|
789
|
+
let(:criteria) do
|
|
790
|
+
Doctor.only(:_id)
|
|
791
|
+
end
|
|
792
|
+
|
|
793
|
+
it "returns the fields with required _id minus type" do
|
|
794
|
+
expect(criteria.field_list).to eq([ "_id" ])
|
|
795
|
+
end
|
|
796
|
+
end
|
|
797
|
+
|
|
798
|
+
context "when using a custom discriminator key" do
|
|
799
|
+
before do
|
|
800
|
+
Person.discriminator_key = "dkey"
|
|
801
|
+
end
|
|
802
|
+
|
|
803
|
+
after do
|
|
804
|
+
Person.discriminator_key = nil
|
|
805
|
+
end
|
|
806
|
+
|
|
807
|
+
let(:criteria) do
|
|
808
|
+
Doctor.only(:_id, :_type)
|
|
809
|
+
end
|
|
810
|
+
|
|
811
|
+
it "returns the fields with type without dkey" do
|
|
812
|
+
expect(criteria.field_list).to eq([ "_id", "_type" ])
|
|
813
|
+
end
|
|
814
|
+
end
|
|
815
|
+
end
|
|
816
|
+
|
|
817
|
+
describe "#find" do
|
|
818
|
+
let!(:depeche) do
|
|
819
|
+
Band.create!(name: "Depeche Mode")
|
|
820
|
+
end
|
|
821
|
+
|
|
771
822
|
let(:criteria) do
|
|
772
|
-
Band.
|
|
823
|
+
Band.where(name: "Depeche Mode")
|
|
773
824
|
end
|
|
774
825
|
|
|
775
|
-
|
|
776
|
-
|
|
826
|
+
context "when given a block" do
|
|
827
|
+
it "behaves as Enumerable" do
|
|
828
|
+
result = criteria.find { |c| c.name == "Depeche Mode" }
|
|
829
|
+
expect(result).to eq(depeche)
|
|
830
|
+
end
|
|
831
|
+
end
|
|
832
|
+
|
|
833
|
+
context "when given a Proc and a block" do
|
|
834
|
+
it "behaves as Enumerable" do
|
|
835
|
+
result = criteria.find(-> {"default"}) { |c| c.name == "Not Depeche Mode" }
|
|
836
|
+
expect(result).to eq("default")
|
|
837
|
+
end
|
|
838
|
+
end
|
|
839
|
+
|
|
840
|
+
context "when given a Proc" do
|
|
841
|
+
it "behaves as Enumerable" do
|
|
842
|
+
lambda do
|
|
843
|
+
criteria.find(-> {"default"})
|
|
844
|
+
# Proc is not serializable to a BSON type
|
|
845
|
+
end.should raise_error(BSON::Error::UnserializableClass)
|
|
846
|
+
end
|
|
847
|
+
end
|
|
848
|
+
|
|
849
|
+
context "when given an id" do
|
|
850
|
+
it "behaves as Findable" do
|
|
851
|
+
result = criteria.find(depeche.id)
|
|
852
|
+
expect(result).to eq(depeche)
|
|
853
|
+
end
|
|
777
854
|
end
|
|
778
855
|
end
|
|
779
856
|
|
|
780
857
|
describe "#find_one_and_update" do
|
|
781
858
|
|
|
782
859
|
let!(:depeche) do
|
|
783
|
-
Band.create(name: "Depeche Mode")
|
|
860
|
+
Band.create!(name: "Depeche Mode")
|
|
784
861
|
end
|
|
785
862
|
|
|
786
863
|
let!(:tool) do
|
|
787
|
-
Band.create(name: "Tool")
|
|
864
|
+
Band.create!(name: "Tool")
|
|
788
865
|
end
|
|
789
866
|
|
|
790
867
|
context "when the selector matches" do
|
|
@@ -975,13 +1052,14 @@ describe Mongoid::Criteria do
|
|
|
975
1052
|
end
|
|
976
1053
|
|
|
977
1054
|
describe "#geo_near" do
|
|
1055
|
+
max_server_version '4.0'
|
|
978
1056
|
|
|
979
1057
|
before do
|
|
980
1058
|
Bar.create_indexes
|
|
981
1059
|
end
|
|
982
1060
|
|
|
983
1061
|
let!(:match) do
|
|
984
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
1062
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
985
1063
|
end
|
|
986
1064
|
|
|
987
1065
|
let(:criteria) do
|
|
@@ -993,7 +1071,7 @@ describe Mongoid::Criteria do
|
|
|
993
1071
|
end
|
|
994
1072
|
end
|
|
995
1073
|
|
|
996
|
-
describe "#
|
|
1074
|
+
describe "#eq" do
|
|
997
1075
|
|
|
998
1076
|
let!(:match) do
|
|
999
1077
|
Band.create(member_count: 5)
|
|
@@ -1003,6 +1081,25 @@ describe Mongoid::Criteria do
|
|
|
1003
1081
|
Band.create(member_count: 1)
|
|
1004
1082
|
end
|
|
1005
1083
|
|
|
1084
|
+
let(:criteria) do
|
|
1085
|
+
Band.eq(member_count: 5)
|
|
1086
|
+
end
|
|
1087
|
+
|
|
1088
|
+
it "returns the matching documents" do
|
|
1089
|
+
expect(criteria).to eq([ match ])
|
|
1090
|
+
end
|
|
1091
|
+
end
|
|
1092
|
+
|
|
1093
|
+
describe "#gt" do
|
|
1094
|
+
|
|
1095
|
+
let!(:match) do
|
|
1096
|
+
Band.create!(member_count: 5)
|
|
1097
|
+
end
|
|
1098
|
+
|
|
1099
|
+
let!(:non_match) do
|
|
1100
|
+
Band.create!(member_count: 1)
|
|
1101
|
+
end
|
|
1102
|
+
|
|
1006
1103
|
let(:criteria) do
|
|
1007
1104
|
Band.gt(member_count: 4)
|
|
1008
1105
|
end
|
|
@@ -1015,11 +1112,11 @@ describe Mongoid::Criteria do
|
|
|
1015
1112
|
describe "#gte" do
|
|
1016
1113
|
|
|
1017
1114
|
let!(:match) do
|
|
1018
|
-
Band.create(member_count: 5)
|
|
1115
|
+
Band.create!(member_count: 5)
|
|
1019
1116
|
end
|
|
1020
1117
|
|
|
1021
1118
|
let!(:non_match) do
|
|
1022
|
-
Band.create(member_count: 1)
|
|
1119
|
+
Band.create!(member_count: 1)
|
|
1023
1120
|
end
|
|
1024
1121
|
|
|
1025
1122
|
let(:criteria) do
|
|
@@ -1038,11 +1135,11 @@ describe Mongoid::Criteria do
|
|
|
1038
1135
|
context "when querying on a normal field" do
|
|
1039
1136
|
|
|
1040
1137
|
let!(:match) do
|
|
1041
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
1138
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
1042
1139
|
end
|
|
1043
1140
|
|
|
1044
1141
|
let!(:non_match) do
|
|
1045
|
-
Band.create(genres: [ "house" ])
|
|
1142
|
+
Band.create!(genres: [ "house" ])
|
|
1046
1143
|
end
|
|
1047
1144
|
|
|
1048
1145
|
let(:criteria) do
|
|
@@ -1061,7 +1158,7 @@ describe Mongoid::Criteria do
|
|
|
1061
1158
|
end
|
|
1062
1159
|
|
|
1063
1160
|
let!(:match_one) do
|
|
1064
|
-
Person.create(preference_ids: [ id ])
|
|
1161
|
+
Person.create!(preference_ids: [ id ])
|
|
1065
1162
|
end
|
|
1066
1163
|
|
|
1067
1164
|
context "when providing valid ids" do
|
|
@@ -1102,7 +1199,7 @@ describe Mongoid::Criteria do
|
|
|
1102
1199
|
context "when the relation is a one to one" do
|
|
1103
1200
|
|
|
1104
1201
|
let!(:game) do
|
|
1105
|
-
Game.create
|
|
1202
|
+
Game.create!
|
|
1106
1203
|
end
|
|
1107
1204
|
|
|
1108
1205
|
let(:criteria) do
|
|
@@ -1140,7 +1237,7 @@ describe Mongoid::Criteria do
|
|
|
1140
1237
|
describe "#includes" do
|
|
1141
1238
|
|
|
1142
1239
|
let!(:person) do
|
|
1143
|
-
Person.create(age: 1)
|
|
1240
|
+
Person.create!(age: 1)
|
|
1144
1241
|
end
|
|
1145
1242
|
|
|
1146
1243
|
context "when providing a name that is not a relation" do
|
|
@@ -1155,11 +1252,11 @@ describe Mongoid::Criteria do
|
|
|
1155
1252
|
context "when providing one association" do
|
|
1156
1253
|
|
|
1157
1254
|
let!(:user) do
|
|
1158
|
-
User.create(posts: [ post1 ])
|
|
1255
|
+
User.create!(posts: [ post1 ])
|
|
1159
1256
|
end
|
|
1160
1257
|
|
|
1161
1258
|
let!(:post1) do
|
|
1162
|
-
Post.create
|
|
1259
|
+
Post.create!
|
|
1163
1260
|
end
|
|
1164
1261
|
|
|
1165
1262
|
let(:result) do
|
|
@@ -1178,15 +1275,15 @@ describe Mongoid::Criteria do
|
|
|
1178
1275
|
context "when providing a list of associations" do
|
|
1179
1276
|
|
|
1180
1277
|
let!(:user) do
|
|
1181
|
-
User.create(posts: [ post1 ], descriptions: [ description1 ])
|
|
1278
|
+
User.create!(posts: [ post1 ], descriptions: [ description1 ])
|
|
1182
1279
|
end
|
|
1183
1280
|
|
|
1184
1281
|
let!(:post1) do
|
|
1185
|
-
Post.create
|
|
1282
|
+
Post.create!
|
|
1186
1283
|
end
|
|
1187
1284
|
|
|
1188
1285
|
let!(:description1) do
|
|
1189
|
-
Description.create(details: 1)
|
|
1286
|
+
Description.create!(details: 1)
|
|
1190
1287
|
end
|
|
1191
1288
|
|
|
1192
1289
|
let(:result) do
|
|
@@ -1206,13 +1303,13 @@ describe Mongoid::Criteria do
|
|
|
1206
1303
|
context "when providing a nested association" do
|
|
1207
1304
|
|
|
1208
1305
|
let!(:user) do
|
|
1209
|
-
User.create
|
|
1306
|
+
User.create!
|
|
1210
1307
|
end
|
|
1211
1308
|
|
|
1212
1309
|
before do
|
|
1213
|
-
p = Post.create(alerts: [ Alert.create ])
|
|
1310
|
+
p = Post.create!(alerts: [ Alert.create! ])
|
|
1214
1311
|
user.posts = [ p ]
|
|
1215
|
-
user.save
|
|
1312
|
+
user.save!
|
|
1216
1313
|
end
|
|
1217
1314
|
|
|
1218
1315
|
let(:result) do
|
|
@@ -1232,7 +1329,7 @@ describe Mongoid::Criteria do
|
|
|
1232
1329
|
context "when providing a deeply nested association" do
|
|
1233
1330
|
|
|
1234
1331
|
let!(:user) do
|
|
1235
|
-
User.create
|
|
1332
|
+
User.create!
|
|
1236
1333
|
end
|
|
1237
1334
|
|
|
1238
1335
|
let(:results) do
|
|
@@ -1270,15 +1367,15 @@ describe Mongoid::Criteria do
|
|
|
1270
1367
|
context "when the includes is on the subclass" do
|
|
1271
1368
|
|
|
1272
1369
|
let!(:c_one) do
|
|
1273
|
-
C.create
|
|
1370
|
+
C.create!
|
|
1274
1371
|
end
|
|
1275
1372
|
|
|
1276
1373
|
let!(:c_two) do
|
|
1277
|
-
C.create
|
|
1374
|
+
C.create!
|
|
1278
1375
|
end
|
|
1279
1376
|
|
|
1280
1377
|
let!(:b) do
|
|
1281
|
-
B.create(c: c_two)
|
|
1378
|
+
B.create!(c: c_two)
|
|
1282
1379
|
end
|
|
1283
1380
|
|
|
1284
1381
|
let!(:results) do
|
|
@@ -1333,19 +1430,19 @@ describe Mongoid::Criteria do
|
|
|
1333
1430
|
context "when the includes is on the several relations" do
|
|
1334
1431
|
|
|
1335
1432
|
let!(:d_one) do
|
|
1336
|
-
D.create
|
|
1433
|
+
D.create!
|
|
1337
1434
|
end
|
|
1338
1435
|
|
|
1339
1436
|
let!(:d_two) do
|
|
1340
|
-
D.create
|
|
1437
|
+
D.create!
|
|
1341
1438
|
end
|
|
1342
1439
|
|
|
1343
1440
|
let!(:b) do
|
|
1344
|
-
B.create(d: d_two)
|
|
1441
|
+
B.create!(d: d_two)
|
|
1345
1442
|
end
|
|
1346
1443
|
|
|
1347
1444
|
let!(:c) do
|
|
1348
|
-
C.create(d: d_two)
|
|
1445
|
+
C.create!(d: d_two)
|
|
1349
1446
|
end
|
|
1350
1447
|
|
|
1351
1448
|
let!(:results) do
|
|
@@ -1404,19 +1501,19 @@ describe Mongoid::Criteria do
|
|
|
1404
1501
|
context "when the includes is on the several relations" do
|
|
1405
1502
|
|
|
1406
1503
|
let!(:d_one) do
|
|
1407
|
-
D.create
|
|
1504
|
+
D.create!
|
|
1408
1505
|
end
|
|
1409
1506
|
|
|
1410
1507
|
let!(:d_two) do
|
|
1411
|
-
D.create
|
|
1508
|
+
D.create!
|
|
1412
1509
|
end
|
|
1413
1510
|
|
|
1414
1511
|
let!(:bs) do
|
|
1415
|
-
2.times.map { B.create(d: d_two) }
|
|
1512
|
+
2.times.map { B.create!(d: d_two) }
|
|
1416
1513
|
end
|
|
1417
1514
|
|
|
1418
1515
|
let!(:cs) do
|
|
1419
|
-
2.times.map { C.create(d: d_two) }
|
|
1516
|
+
2.times.map { C.create!(d: d_two) }
|
|
1420
1517
|
end
|
|
1421
1518
|
|
|
1422
1519
|
let!(:results) do
|
|
@@ -1444,25 +1541,25 @@ describe Mongoid::Criteria do
|
|
|
1444
1541
|
end
|
|
1445
1542
|
end
|
|
1446
1543
|
|
|
1447
|
-
context "when including the same
|
|
1544
|
+
context "when including the same association multiple times" do
|
|
1448
1545
|
|
|
1449
1546
|
let(:criteria) do
|
|
1450
1547
|
Person.all.includes(:posts, :posts).includes(:posts)
|
|
1451
1548
|
end
|
|
1452
1549
|
|
|
1453
|
-
let(:
|
|
1550
|
+
let(:association) do
|
|
1454
1551
|
Person.reflect_on_association(:posts)
|
|
1455
1552
|
end
|
|
1456
1553
|
|
|
1457
|
-
it "does not duplicate the
|
|
1458
|
-
expect(criteria.inclusions).to eq([
|
|
1554
|
+
it "does not duplicate the association in the inclusions" do
|
|
1555
|
+
expect(criteria.inclusions).to eq([ association ])
|
|
1459
1556
|
end
|
|
1460
1557
|
end
|
|
1461
1558
|
|
|
1462
1559
|
context "when mapping the results more than once" do
|
|
1463
1560
|
|
|
1464
1561
|
let!(:post) do
|
|
1465
|
-
person.posts.create(title: "one")
|
|
1562
|
+
person.posts.create!(title: "one")
|
|
1466
1563
|
end
|
|
1467
1564
|
|
|
1468
1565
|
let(:criteria) do
|
|
@@ -1484,15 +1581,15 @@ describe Mongoid::Criteria do
|
|
|
1484
1581
|
context "when the criteria is from the root" do
|
|
1485
1582
|
|
|
1486
1583
|
let!(:person_two) do
|
|
1487
|
-
Person.create(age: 2)
|
|
1584
|
+
Person.create!(age: 2)
|
|
1488
1585
|
end
|
|
1489
1586
|
|
|
1490
1587
|
let!(:post_one) do
|
|
1491
|
-
person.posts.create(title: "one")
|
|
1588
|
+
person.posts.create!(title: "one")
|
|
1492
1589
|
end
|
|
1493
1590
|
|
|
1494
1591
|
let!(:post_two) do
|
|
1495
|
-
person_two.posts.create(title: "two")
|
|
1592
|
+
person_two.posts.create!(title: "two")
|
|
1496
1593
|
end
|
|
1497
1594
|
|
|
1498
1595
|
context "when calling first" do
|
|
@@ -1541,15 +1638,15 @@ describe Mongoid::Criteria do
|
|
|
1541
1638
|
context "when the criteria is from an embedded relation" do
|
|
1542
1639
|
|
|
1543
1640
|
let(:peep) do
|
|
1544
|
-
Person.create
|
|
1641
|
+
Person.create!
|
|
1545
1642
|
end
|
|
1546
1643
|
|
|
1547
1644
|
let!(:address_one) do
|
|
1548
|
-
peep.addresses.create(street: "rosenthaler")
|
|
1645
|
+
peep.addresses.create!(street: "rosenthaler")
|
|
1549
1646
|
end
|
|
1550
1647
|
|
|
1551
1648
|
let!(:address_two) do
|
|
1552
|
-
peep.addresses.create(street: "weinmeister")
|
|
1649
|
+
peep.addresses.create!(street: "weinmeister")
|
|
1553
1650
|
end
|
|
1554
1651
|
|
|
1555
1652
|
let!(:depeche) do
|
|
@@ -1563,8 +1660,8 @@ describe Mongoid::Criteria do
|
|
|
1563
1660
|
before do
|
|
1564
1661
|
address_one.band = depeche
|
|
1565
1662
|
address_two.band = tool
|
|
1566
|
-
address_one.save
|
|
1567
|
-
address_two.save
|
|
1663
|
+
address_one.save!
|
|
1664
|
+
address_two.save!
|
|
1568
1665
|
end
|
|
1569
1666
|
|
|
1570
1667
|
context "when calling first" do
|
|
@@ -1661,11 +1758,11 @@ describe Mongoid::Criteria do
|
|
|
1661
1758
|
end
|
|
1662
1759
|
|
|
1663
1760
|
let!(:post_one) do
|
|
1664
|
-
person.posts.create(title: "one")
|
|
1761
|
+
person.posts.create!(title: "one")
|
|
1665
1762
|
end
|
|
1666
1763
|
|
|
1667
1764
|
let!(:post_two) do
|
|
1668
|
-
person.posts.create(title: "two")
|
|
1765
|
+
person.posts.create!(title: "two")
|
|
1669
1766
|
end
|
|
1670
1767
|
|
|
1671
1768
|
context "when the criteria has no options" do
|
|
@@ -1783,11 +1880,11 @@ describe Mongoid::Criteria do
|
|
|
1783
1880
|
context "when the criteria has limiting options" do
|
|
1784
1881
|
|
|
1785
1882
|
let!(:person_two) do
|
|
1786
|
-
Person.create
|
|
1883
|
+
Person.create!
|
|
1787
1884
|
end
|
|
1788
1885
|
|
|
1789
1886
|
let!(:post_three) do
|
|
1790
|
-
person_two.posts.create(title: "three")
|
|
1887
|
+
person_two.posts.create!(title: "three")
|
|
1791
1888
|
end
|
|
1792
1889
|
|
|
1793
1890
|
let!(:criteria) do
|
|
@@ -1819,11 +1916,11 @@ describe Mongoid::Criteria do
|
|
|
1819
1916
|
context "when including a has and belongs to many" do
|
|
1820
1917
|
|
|
1821
1918
|
let!(:preference_one) do
|
|
1822
|
-
person.preferences.create(name: "one")
|
|
1919
|
+
person.preferences.create!(name: "one")
|
|
1823
1920
|
end
|
|
1824
1921
|
|
|
1825
1922
|
let!(:preference_two) do
|
|
1826
|
-
person.preferences.create(name: "two")
|
|
1923
|
+
person.preferences.create!(name: "two")
|
|
1827
1924
|
end
|
|
1828
1925
|
|
|
1829
1926
|
context "when one of the related items is deleted" do
|
|
@@ -1927,11 +2024,11 @@ describe Mongoid::Criteria do
|
|
|
1927
2024
|
context "when including a has many" do
|
|
1928
2025
|
|
|
1929
2026
|
let!(:post_one) do
|
|
1930
|
-
person.posts.create(title: "one")
|
|
2027
|
+
person.posts.create!(title: "one")
|
|
1931
2028
|
end
|
|
1932
2029
|
|
|
1933
2030
|
let!(:post_two) do
|
|
1934
|
-
person.posts.create(title: "two")
|
|
2031
|
+
person.posts.create!(title: "two")
|
|
1935
2032
|
end
|
|
1936
2033
|
|
|
1937
2034
|
context "when the criteria has no options" do
|
|
@@ -2016,11 +2113,11 @@ describe Mongoid::Criteria do
|
|
|
2016
2113
|
context "when the criteria has limiting options" do
|
|
2017
2114
|
|
|
2018
2115
|
let!(:person_two) do
|
|
2019
|
-
Person.create
|
|
2116
|
+
Person.create!
|
|
2020
2117
|
end
|
|
2021
2118
|
|
|
2022
2119
|
let!(:post_three) do
|
|
2023
|
-
person_two.posts.create(title: "three")
|
|
2120
|
+
person_two.posts.create!(title: "three")
|
|
2024
2121
|
end
|
|
2025
2122
|
|
|
2026
2123
|
let!(:criteria) do
|
|
@@ -2081,7 +2178,7 @@ describe Mongoid::Criteria do
|
|
|
2081
2178
|
context "when the criteria has limiting options" do
|
|
2082
2179
|
|
|
2083
2180
|
let!(:person_two) do
|
|
2084
|
-
Person.create(age: 2)
|
|
2181
|
+
Person.create!(age: 2)
|
|
2085
2182
|
end
|
|
2086
2183
|
|
|
2087
2184
|
let!(:game_three) do
|
|
@@ -2113,7 +2210,7 @@ describe Mongoid::Criteria do
|
|
|
2113
2210
|
context "when including a belongs to" do
|
|
2114
2211
|
|
|
2115
2212
|
let(:person_two) do
|
|
2116
|
-
Person.create(age: 2)
|
|
2213
|
+
Person.create!(age: 2)
|
|
2117
2214
|
end
|
|
2118
2215
|
|
|
2119
2216
|
let!(:game_one) do
|
|
@@ -2174,11 +2271,11 @@ describe Mongoid::Criteria do
|
|
|
2174
2271
|
context "when including multiples in the same criteria" do
|
|
2175
2272
|
|
|
2176
2273
|
let!(:post_one) do
|
|
2177
|
-
person.posts.create(title: "one")
|
|
2274
|
+
person.posts.create!(title: "one")
|
|
2178
2275
|
end
|
|
2179
2276
|
|
|
2180
2277
|
let!(:post_two) do
|
|
2181
|
-
person.posts.create(title: "two")
|
|
2278
|
+
person.posts.create!(title: "two")
|
|
2182
2279
|
end
|
|
2183
2280
|
|
|
2184
2281
|
let!(:game_one) do
|
|
@@ -2217,12 +2314,12 @@ describe Mongoid::Criteria do
|
|
|
2217
2314
|
Band.includes(:records)
|
|
2218
2315
|
end
|
|
2219
2316
|
|
|
2220
|
-
let(:
|
|
2317
|
+
let(:association) do
|
|
2221
2318
|
Band.relations["records"]
|
|
2222
2319
|
end
|
|
2223
2320
|
|
|
2224
2321
|
it "returns the inclusions" do
|
|
2225
|
-
expect(criteria.inclusions).to eq([
|
|
2322
|
+
expect(criteria.inclusions).to eq([ association ])
|
|
2226
2323
|
end
|
|
2227
2324
|
end
|
|
2228
2325
|
|
|
@@ -2232,27 +2329,27 @@ describe Mongoid::Criteria do
|
|
|
2232
2329
|
Band.all
|
|
2233
2330
|
end
|
|
2234
2331
|
|
|
2235
|
-
let(:
|
|
2332
|
+
let(:association) do
|
|
2236
2333
|
Band.relations["records"]
|
|
2237
2334
|
end
|
|
2238
2335
|
|
|
2239
2336
|
before do
|
|
2240
|
-
criteria.inclusions = [
|
|
2337
|
+
criteria.inclusions = [ association ]
|
|
2241
2338
|
end
|
|
2242
2339
|
|
|
2243
2340
|
it "sets the inclusions" do
|
|
2244
|
-
expect(criteria.inclusions).to eq([
|
|
2341
|
+
expect(criteria.inclusions).to eq([ association ])
|
|
2245
2342
|
end
|
|
2246
2343
|
end
|
|
2247
2344
|
|
|
2248
2345
|
describe "#lt" do
|
|
2249
2346
|
|
|
2250
2347
|
let!(:match) do
|
|
2251
|
-
Band.create(member_count: 1)
|
|
2348
|
+
Band.create!(member_count: 1)
|
|
2252
2349
|
end
|
|
2253
2350
|
|
|
2254
2351
|
let!(:non_match) do
|
|
2255
|
-
Band.create(member_count: 5)
|
|
2352
|
+
Band.create!(member_count: 5)
|
|
2256
2353
|
end
|
|
2257
2354
|
|
|
2258
2355
|
let(:criteria) do
|
|
@@ -2267,11 +2364,11 @@ describe Mongoid::Criteria do
|
|
|
2267
2364
|
describe "#lte" do
|
|
2268
2365
|
|
|
2269
2366
|
let!(:match) do
|
|
2270
|
-
Band.create(member_count: 4)
|
|
2367
|
+
Band.create!(member_count: 4)
|
|
2271
2368
|
end
|
|
2272
2369
|
|
|
2273
2370
|
let!(:non_match) do
|
|
2274
|
-
Band.create(member_count: 5)
|
|
2371
|
+
Band.create!(member_count: 5)
|
|
2275
2372
|
end
|
|
2276
2373
|
|
|
2277
2374
|
let(:criteria) do
|
|
@@ -2304,11 +2401,11 @@ describe Mongoid::Criteria do
|
|
|
2304
2401
|
end
|
|
2305
2402
|
|
|
2306
2403
|
let!(:depeche_mode) do
|
|
2307
|
-
Band.create(name: "Depeche Mode", likes: 200)
|
|
2404
|
+
Band.create!(name: "Depeche Mode", likes: 200)
|
|
2308
2405
|
end
|
|
2309
2406
|
|
|
2310
2407
|
let!(:tool) do
|
|
2311
|
-
Band.create(name: "Tool", likes: 100)
|
|
2408
|
+
Band.create!(name: "Tool", likes: 100)
|
|
2312
2409
|
end
|
|
2313
2410
|
|
|
2314
2411
|
context "when no timeout options are provided" do
|
|
@@ -2318,7 +2415,7 @@ describe Mongoid::Criteria do
|
|
|
2318
2415
|
end
|
|
2319
2416
|
|
|
2320
2417
|
it "returns the map/reduce results" do
|
|
2321
|
-
expect(map_reduce).to eq([
|
|
2418
|
+
expect(map_reduce.sort_by { |doc| doc['_id'] }).to eq([
|
|
2322
2419
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
2323
2420
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
2324
2421
|
])
|
|
@@ -2331,11 +2428,11 @@ describe Mongoid::Criteria do
|
|
|
2331
2428
|
context "when provided a single field" do
|
|
2332
2429
|
|
|
2333
2430
|
let!(:depeche) do
|
|
2334
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
2431
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
2335
2432
|
end
|
|
2336
2433
|
|
|
2337
2434
|
let!(:tool) do
|
|
2338
|
-
Band.create(name: "Tool", likes: 500)
|
|
2435
|
+
Band.create!(name: "Tool", likes: 500)
|
|
2339
2436
|
end
|
|
2340
2437
|
|
|
2341
2438
|
let(:criteria) do
|
|
@@ -2375,11 +2472,11 @@ describe Mongoid::Criteria do
|
|
|
2375
2472
|
end
|
|
2376
2473
|
|
|
2377
2474
|
let!(:match) do
|
|
2378
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2475
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2379
2476
|
end
|
|
2380
2477
|
|
|
2381
2478
|
let!(:non_match) do
|
|
2382
|
-
Bar.create(location: [ 19.26, 99.70 ])
|
|
2479
|
+
Bar.create!(location: [ 19.26, 99.70 ])
|
|
2383
2480
|
end
|
|
2384
2481
|
|
|
2385
2482
|
let(:criteria) do
|
|
@@ -2409,7 +2506,7 @@ describe Mongoid::Criteria do
|
|
|
2409
2506
|
end
|
|
2410
2507
|
end
|
|
2411
2508
|
|
|
2412
|
-
let(:
|
|
2509
|
+
let(:association) do
|
|
2413
2510
|
Band.relations["records"]
|
|
2414
2511
|
end
|
|
2415
2512
|
|
|
@@ -2434,7 +2531,7 @@ describe Mongoid::Criteria do
|
|
|
2434
2531
|
end
|
|
2435
2532
|
|
|
2436
2533
|
it "merges the inclusions" do
|
|
2437
|
-
expect(merged.inclusions).to eq([
|
|
2534
|
+
expect(merged.inclusions).to eq([ association ])
|
|
2438
2535
|
end
|
|
2439
2536
|
|
|
2440
2537
|
it "returns a new criteria" do
|
|
@@ -2448,7 +2545,7 @@ describe Mongoid::Criteria do
|
|
|
2448
2545
|
{ klass: Band, includes: [ :records ] }
|
|
2449
2546
|
end
|
|
2450
2547
|
|
|
2451
|
-
let(:
|
|
2548
|
+
let(:association) do
|
|
2452
2549
|
Band.relations["records"]
|
|
2453
2550
|
end
|
|
2454
2551
|
|
|
@@ -2469,7 +2566,7 @@ describe Mongoid::Criteria do
|
|
|
2469
2566
|
end
|
|
2470
2567
|
|
|
2471
2568
|
it "merges the inclusions" do
|
|
2472
|
-
expect(merged.inclusions).to eq([
|
|
2569
|
+
expect(merged.inclusions).to eq([ association ])
|
|
2473
2570
|
end
|
|
2474
2571
|
|
|
2475
2572
|
it "returns a new criteria" do
|
|
@@ -2494,7 +2591,7 @@ describe Mongoid::Criteria do
|
|
|
2494
2591
|
end
|
|
2495
2592
|
end
|
|
2496
2593
|
|
|
2497
|
-
let(:
|
|
2594
|
+
let(:association) do
|
|
2498
2595
|
Band.relations["records"]
|
|
2499
2596
|
end
|
|
2500
2597
|
|
|
@@ -2519,7 +2616,7 @@ describe Mongoid::Criteria do
|
|
|
2519
2616
|
end
|
|
2520
2617
|
|
|
2521
2618
|
it "merges the inclusions" do
|
|
2522
|
-
expect(merged.inclusions).to eq([
|
|
2619
|
+
expect(merged.inclusions).to eq([ association ])
|
|
2523
2620
|
end
|
|
2524
2621
|
|
|
2525
2622
|
it "returns the same criteria" do
|
|
@@ -2532,11 +2629,11 @@ describe Mongoid::Criteria do
|
|
|
2532
2629
|
context "when provided a single field" do
|
|
2533
2630
|
|
|
2534
2631
|
let!(:depeche) do
|
|
2535
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
2632
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
2536
2633
|
end
|
|
2537
2634
|
|
|
2538
2635
|
let!(:tool) do
|
|
2539
|
-
Band.create(name: "Tool", likes: 500)
|
|
2636
|
+
Band.create!(name: "Tool", likes: 500)
|
|
2540
2637
|
end
|
|
2541
2638
|
|
|
2542
2639
|
let(:criteria) do
|
|
@@ -2572,11 +2669,11 @@ describe Mongoid::Criteria do
|
|
|
2572
2669
|
describe "#mod" do
|
|
2573
2670
|
|
|
2574
2671
|
let!(:match) do
|
|
2575
|
-
Band.create(member_count: 5)
|
|
2672
|
+
Band.create!(member_count: 5)
|
|
2576
2673
|
end
|
|
2577
2674
|
|
|
2578
2675
|
let!(:non_match) do
|
|
2579
|
-
Band.create(member_count: 2)
|
|
2676
|
+
Band.create!(member_count: 2)
|
|
2580
2677
|
end
|
|
2581
2678
|
|
|
2582
2679
|
let(:criteria) do
|
|
@@ -2591,11 +2688,11 @@ describe Mongoid::Criteria do
|
|
|
2591
2688
|
describe "#ne" do
|
|
2592
2689
|
|
|
2593
2690
|
let!(:match) do
|
|
2594
|
-
Band.create(name: "Depeche Mode")
|
|
2691
|
+
Band.create!(name: "Depeche Mode")
|
|
2595
2692
|
end
|
|
2596
2693
|
|
|
2597
2694
|
let!(:non_match) do
|
|
2598
|
-
Band.create(name: "Tool")
|
|
2695
|
+
Band.create!(name: "Tool")
|
|
2599
2696
|
end
|
|
2600
2697
|
|
|
2601
2698
|
let(:criteria) do
|
|
@@ -2614,7 +2711,7 @@ describe Mongoid::Criteria do
|
|
|
2614
2711
|
end
|
|
2615
2712
|
|
|
2616
2713
|
let!(:match) do
|
|
2617
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2714
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2618
2715
|
end
|
|
2619
2716
|
|
|
2620
2717
|
let(:criteria) do
|
|
@@ -2633,7 +2730,7 @@ describe Mongoid::Criteria do
|
|
|
2633
2730
|
end
|
|
2634
2731
|
|
|
2635
2732
|
let!(:match) do
|
|
2636
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2733
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2637
2734
|
end
|
|
2638
2735
|
|
|
2639
2736
|
let(:criteria) do
|
|
@@ -2648,11 +2745,11 @@ describe Mongoid::Criteria do
|
|
|
2648
2745
|
describe "#nin" do
|
|
2649
2746
|
|
|
2650
2747
|
let!(:match) do
|
|
2651
|
-
Band.create(name: "Depeche Mode")
|
|
2748
|
+
Band.create!(name: "Depeche Mode")
|
|
2652
2749
|
end
|
|
2653
2750
|
|
|
2654
2751
|
let!(:non_match) do
|
|
2655
|
-
Band.create(name: "Tool")
|
|
2752
|
+
Band.create!(name: "Tool")
|
|
2656
2753
|
end
|
|
2657
2754
|
|
|
2658
2755
|
let(:criteria) do
|
|
@@ -2667,11 +2764,11 @@ describe Mongoid::Criteria do
|
|
|
2667
2764
|
describe "#nor" do
|
|
2668
2765
|
|
|
2669
2766
|
let!(:match) do
|
|
2670
|
-
Band.create(name: "Depeche Mode")
|
|
2767
|
+
Band.create!(name: "Depeche Mode")
|
|
2671
2768
|
end
|
|
2672
2769
|
|
|
2673
2770
|
let!(:non_match) do
|
|
2674
|
-
Band.create(name: "Tool")
|
|
2771
|
+
Band.create!(name: "Tool")
|
|
2675
2772
|
end
|
|
2676
2773
|
|
|
2677
2774
|
let(:criteria) do
|
|
@@ -2683,230 +2780,16 @@ describe Mongoid::Criteria do
|
|
|
2683
2780
|
end
|
|
2684
2781
|
end
|
|
2685
2782
|
|
|
2686
|
-
describe "#only" do
|
|
2687
|
-
|
|
2688
|
-
let!(:band) do
|
|
2689
|
-
Band.create(name: "Depeche Mode", likes: 3, views: 10)
|
|
2690
|
-
end
|
|
2691
|
-
|
|
2692
|
-
context "when not using inheritance" do
|
|
2693
|
-
|
|
2694
|
-
context "when passing splat args" do
|
|
2695
|
-
|
|
2696
|
-
let(:criteria) do
|
|
2697
|
-
Band.only(:_id)
|
|
2698
|
-
end
|
|
2699
|
-
|
|
2700
|
-
it "limits the returned fields" do
|
|
2701
|
-
expect {
|
|
2702
|
-
criteria.first.name
|
|
2703
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
2704
|
-
end
|
|
2705
|
-
|
|
2706
|
-
it "does not add _type to the fields" do
|
|
2707
|
-
expect(criteria.options[:fields]["_type"]).to be_nil
|
|
2708
|
-
end
|
|
2709
|
-
end
|
|
2710
|
-
|
|
2711
|
-
context "when not including id" do
|
|
2712
|
-
|
|
2713
|
-
let(:criteria) do
|
|
2714
|
-
Band.only(:name)
|
|
2715
|
-
end
|
|
2716
|
-
|
|
2717
|
-
it "responds to id anyway" do
|
|
2718
|
-
expect {
|
|
2719
|
-
criteria.first.id
|
|
2720
|
-
}.to_not raise_error
|
|
2721
|
-
end
|
|
2722
|
-
end
|
|
2723
|
-
|
|
2724
|
-
context "when passing an array" do
|
|
2725
|
-
|
|
2726
|
-
let(:criteria) do
|
|
2727
|
-
Band.only([ :name, :likes ])
|
|
2728
|
-
end
|
|
2729
|
-
|
|
2730
|
-
it "includes the limited fields" do
|
|
2731
|
-
expect(criteria.first.name).to_not be_nil
|
|
2732
|
-
end
|
|
2733
|
-
|
|
2734
|
-
it "excludes the non included fields" do
|
|
2735
|
-
expect {
|
|
2736
|
-
criteria.first.active
|
|
2737
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
2738
|
-
end
|
|
2739
|
-
|
|
2740
|
-
it "does not add _type to the fields" do
|
|
2741
|
-
expect(criteria.options[:fields]["_type"]).to be_nil
|
|
2742
|
-
end
|
|
2743
|
-
end
|
|
2744
|
-
|
|
2745
|
-
context "when instantiating a class of another type inside the iteration" do
|
|
2746
|
-
|
|
2747
|
-
let(:criteria) do
|
|
2748
|
-
Band.only(:name)
|
|
2749
|
-
end
|
|
2750
|
-
|
|
2751
|
-
it "only limits the fields on the correct model" do
|
|
2752
|
-
criteria.each do |band|
|
|
2753
|
-
expect(Person.new.age).to eq(100)
|
|
2754
|
-
end
|
|
2755
|
-
end
|
|
2756
|
-
end
|
|
2757
|
-
|
|
2758
|
-
context "when instantiating a document not in the result set" do
|
|
2759
|
-
|
|
2760
|
-
let(:criteria) do
|
|
2761
|
-
Band.only(:name)
|
|
2762
|
-
end
|
|
2763
|
-
|
|
2764
|
-
it "only limits the fields on the correct criteria" do
|
|
2765
|
-
criteria.each do |band|
|
|
2766
|
-
expect(Band.new.active).to be true
|
|
2767
|
-
end
|
|
2768
|
-
end
|
|
2769
|
-
end
|
|
2770
|
-
|
|
2771
|
-
context "when nesting a criteria within a criteria" do
|
|
2772
|
-
|
|
2773
|
-
let(:criteria) do
|
|
2774
|
-
Band.only(:name)
|
|
2775
|
-
end
|
|
2776
|
-
|
|
2777
|
-
it "only limits the fields on the correct criteria" do
|
|
2778
|
-
criteria.each do |band|
|
|
2779
|
-
Band.all.each do |b|
|
|
2780
|
-
expect(b.active).to be true
|
|
2781
|
-
end
|
|
2782
|
-
end
|
|
2783
|
-
end
|
|
2784
|
-
end
|
|
2785
|
-
end
|
|
2786
|
-
|
|
2787
|
-
context "when using inheritance" do
|
|
2788
|
-
|
|
2789
|
-
let(:criteria) do
|
|
2790
|
-
Doctor.only(:_id)
|
|
2791
|
-
end
|
|
2792
|
-
|
|
2793
|
-
it "adds _type to the fields" do
|
|
2794
|
-
expect(criteria.options[:fields]["_type"]).to eq(1)
|
|
2795
|
-
end
|
|
2796
|
-
end
|
|
2797
|
-
|
|
2798
|
-
context "when limiting to embedded documents" do
|
|
2799
|
-
|
|
2800
|
-
context "when the embedded documents are aliased" do
|
|
2801
|
-
|
|
2802
|
-
let(:criteria) do
|
|
2803
|
-
Person.only(:phones)
|
|
2804
|
-
end
|
|
2805
|
-
|
|
2806
|
-
it "properly uses the database field name" do
|
|
2807
|
-
expect(criteria.options).to eq(fields: { "_id" => 1, "mobile_phones" => 1 })
|
|
2808
|
-
end
|
|
2809
|
-
end
|
|
2810
|
-
end
|
|
2811
|
-
|
|
2812
|
-
context 'when the field is localized' do
|
|
2813
|
-
|
|
2814
|
-
before do
|
|
2815
|
-
I18n.locale = :en
|
|
2816
|
-
d = Dictionary.create(description: 'english-text')
|
|
2817
|
-
I18n.locale = :de
|
|
2818
|
-
d.description = 'deutsch-text'
|
|
2819
|
-
d.save
|
|
2820
|
-
end
|
|
2821
|
-
|
|
2822
|
-
after do
|
|
2823
|
-
I18n.locale = :en
|
|
2824
|
-
end
|
|
2825
|
-
|
|
2826
|
-
context 'when entire field is included' do
|
|
2827
|
-
|
|
2828
|
-
let(:dictionary) do
|
|
2829
|
-
Dictionary.only(:description).first
|
|
2830
|
-
|
|
2831
|
-
end
|
|
2832
|
-
|
|
2833
|
-
it 'loads all translations' do
|
|
2834
|
-
expect(dictionary.description_translations.keys).to include('de', 'en')
|
|
2835
|
-
end
|
|
2836
|
-
|
|
2837
|
-
it 'returns the field value for the current locale' do
|
|
2838
|
-
I18n.locale = :en
|
|
2839
|
-
expect(dictionary.description).to eq('english-text')
|
|
2840
|
-
I18n.locale = :de
|
|
2841
|
-
expect(dictionary.description).to eq('deutsch-text')
|
|
2842
|
-
end
|
|
2843
|
-
end
|
|
2844
|
-
|
|
2845
|
-
context 'when a specific locale is included' do
|
|
2846
|
-
|
|
2847
|
-
let(:dictionary) do
|
|
2848
|
-
Dictionary.only(:'description.de').first
|
|
2849
|
-
end
|
|
2850
|
-
|
|
2851
|
-
it 'loads translations only for the included locale' do
|
|
2852
|
-
expect(dictionary.description_translations.keys).to include('de')
|
|
2853
|
-
expect(dictionary.description_translations.keys).to_not include('en')
|
|
2854
|
-
end
|
|
2855
|
-
|
|
2856
|
-
it 'returns the field value for the included locale' do
|
|
2857
|
-
I18n.locale = :en
|
|
2858
|
-
expect(dictionary.description).to be_nil
|
|
2859
|
-
I18n.locale = :de
|
|
2860
|
-
expect(dictionary.description).to eq('deutsch-text')
|
|
2861
|
-
end
|
|
2862
|
-
end
|
|
2863
|
-
|
|
2864
|
-
context 'when entire field is excluded' do
|
|
2865
|
-
|
|
2866
|
-
let(:dictionary) do
|
|
2867
|
-
Dictionary.without(:description).first
|
|
2868
|
-
end
|
|
2869
|
-
|
|
2870
|
-
it 'does not load all translations' do
|
|
2871
|
-
expect(dictionary.description_translations.keys).to_not include('de', 'en')
|
|
2872
|
-
end
|
|
2873
|
-
|
|
2874
|
-
it 'raises an ActiveModel::MissingAttributeError when attempting to access the field' do
|
|
2875
|
-
expect{dictionary.description}.to raise_error ActiveModel::MissingAttributeError
|
|
2876
|
-
end
|
|
2877
|
-
end
|
|
2878
|
-
|
|
2879
|
-
context 'when a specific locale is excluded' do
|
|
2880
|
-
|
|
2881
|
-
let(:dictionary) do
|
|
2882
|
-
Dictionary.without(:'description.de').first
|
|
2883
|
-
end
|
|
2884
|
-
|
|
2885
|
-
it 'does not load excluded translations' do
|
|
2886
|
-
expect(dictionary.description_translations.keys).to_not include('de')
|
|
2887
|
-
expect(dictionary.description_translations.keys).to include('en')
|
|
2888
|
-
end
|
|
2889
|
-
|
|
2890
|
-
it 'returns nil for excluded translations' do
|
|
2891
|
-
I18n.locale = :en
|
|
2892
|
-
expect(dictionary.description).to eq('english-text')
|
|
2893
|
-
I18n.locale = :de
|
|
2894
|
-
expect(dictionary.description).to be_nil
|
|
2895
|
-
end
|
|
2896
|
-
end
|
|
2897
|
-
end
|
|
2898
|
-
end
|
|
2899
|
-
|
|
2900
2783
|
[ :or, :any_of ].each do |method|
|
|
2901
2784
|
|
|
2902
2785
|
describe "\##{method}" do
|
|
2903
2786
|
|
|
2904
2787
|
let!(:match) do
|
|
2905
|
-
Band.create(name: "Depeche Mode")
|
|
2788
|
+
Band.create!(name: "Depeche Mode")
|
|
2906
2789
|
end
|
|
2907
2790
|
|
|
2908
2791
|
let!(:non_match) do
|
|
2909
|
-
Band.create(name: "Tool")
|
|
2792
|
+
Band.create!(name: "Tool")
|
|
2910
2793
|
end
|
|
2911
2794
|
|
|
2912
2795
|
context "when sending a normal $or criterion" do
|
|
@@ -2936,25 +2819,29 @@ describe Mongoid::Criteria do
|
|
|
2936
2819
|
describe "#pluck" do
|
|
2937
2820
|
|
|
2938
2821
|
let!(:depeche) do
|
|
2939
|
-
Band.create(name: "Depeche Mode", likes: 3)
|
|
2822
|
+
Band.create!(name: "Depeche Mode", likes: 3)
|
|
2940
2823
|
end
|
|
2941
2824
|
|
|
2942
2825
|
let!(:tool) do
|
|
2943
|
-
Band.create(name: "Tool", likes: 3)
|
|
2826
|
+
Band.create!(name: "Tool", likes: 3)
|
|
2944
2827
|
end
|
|
2945
2828
|
|
|
2946
2829
|
let!(:photek) do
|
|
2947
|
-
Band.create(name: "Photek", likes: 1)
|
|
2830
|
+
Band.create!(name: "Photek", likes: 1)
|
|
2831
|
+
end
|
|
2832
|
+
|
|
2833
|
+
let(:maniacs) do
|
|
2834
|
+
Band.create!(name: "10,000 Maniacs", likes: 1, sales: "1E2")
|
|
2948
2835
|
end
|
|
2949
2836
|
|
|
2950
2837
|
context "when the field is aliased" do
|
|
2951
2838
|
|
|
2952
2839
|
let!(:expensive) do
|
|
2953
|
-
Product.create(price: 100000)
|
|
2840
|
+
Product.create!(price: 100000)
|
|
2954
2841
|
end
|
|
2955
2842
|
|
|
2956
2843
|
let!(:cheap) do
|
|
2957
|
-
Product.create(price: 1)
|
|
2844
|
+
Product.create!(price: 1)
|
|
2958
2845
|
end
|
|
2959
2846
|
|
|
2960
2847
|
context "when using alias_attribute" do
|
|
@@ -2963,8 +2850,10 @@ describe Mongoid::Criteria do
|
|
|
2963
2850
|
Product.pluck(:price)
|
|
2964
2851
|
end
|
|
2965
2852
|
|
|
2966
|
-
|
|
2967
|
-
|
|
2853
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
2854
|
+
it "uses the aliases" do
|
|
2855
|
+
expect(plucked).to eq([ 100000, 1 ])
|
|
2856
|
+
end
|
|
2968
2857
|
end
|
|
2969
2858
|
end
|
|
2970
2859
|
end
|
|
@@ -2981,14 +2870,18 @@ describe Mongoid::Criteria do
|
|
|
2981
2870
|
criteria.pluck(:name)
|
|
2982
2871
|
end
|
|
2983
2872
|
|
|
2984
|
-
|
|
2985
|
-
|
|
2873
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
2874
|
+
it "returns the values" do
|
|
2875
|
+
expect(plucked).to contain_exactly("Depeche Mode", "Tool", "Photek")
|
|
2876
|
+
end
|
|
2986
2877
|
end
|
|
2987
2878
|
|
|
2988
2879
|
context "when subsequently executing the criteria without a pluck" do
|
|
2989
2880
|
|
|
2990
|
-
|
|
2991
|
-
|
|
2881
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
2882
|
+
it "does not limit the fields" do
|
|
2883
|
+
expect(criteria.first.likes).to eq(3)
|
|
2884
|
+
end
|
|
2992
2885
|
end
|
|
2993
2886
|
end
|
|
2994
2887
|
|
|
@@ -2999,51 +2892,83 @@ describe Mongoid::Criteria do
|
|
|
2999
2892
|
end
|
|
3000
2893
|
|
|
3001
2894
|
context 'when a top-level field and a subdocument field are plucked' do
|
|
3002
|
-
|
|
3003
2895
|
before do
|
|
3004
|
-
Band.create(name: 'FKA Twigs')
|
|
3005
|
-
Band.create(name: 'FKA Twigs', records: [ Record.new(name: 'LP1') ])
|
|
2896
|
+
Band.create!(name: 'FKA Twigs')
|
|
2897
|
+
Band.create!(name: 'FKA Twigs', records: [ Record.new(name: 'LP1') ])
|
|
3006
2898
|
end
|
|
3007
2899
|
|
|
3008
2900
|
let(:embedded_pluck) do
|
|
3009
2901
|
criteria.pluck(:name, 'records.name')
|
|
3010
2902
|
end
|
|
3011
2903
|
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
[
|
|
3016
|
-
|
|
2904
|
+
context "when legacy_pluck_distinct is set" do
|
|
2905
|
+
config_override :legacy_pluck_distinct, true
|
|
2906
|
+
let(:expected) do
|
|
2907
|
+
[
|
|
2908
|
+
["FKA Twigs", nil],
|
|
2909
|
+
['FKA Twigs', [{ "name" => "LP1" }]]
|
|
2910
|
+
]
|
|
2911
|
+
end
|
|
2912
|
+
|
|
2913
|
+
it 'returns the list of top-level field and subdocument values' do
|
|
2914
|
+
expect(embedded_pluck).to eq(expected)
|
|
2915
|
+
end
|
|
3017
2916
|
end
|
|
3018
2917
|
|
|
3019
|
-
|
|
3020
|
-
|
|
2918
|
+
context "when legacy_pluck_distinct is not set" do
|
|
2919
|
+
config_override :legacy_pluck_distinct, false
|
|
2920
|
+
let(:expected) do
|
|
2921
|
+
[
|
|
2922
|
+
["FKA Twigs", nil],
|
|
2923
|
+
['FKA Twigs', ["LP1"]]
|
|
2924
|
+
]
|
|
2925
|
+
end
|
|
2926
|
+
|
|
2927
|
+
it 'returns the list of top-level field and subdocument values' do
|
|
2928
|
+
expect(embedded_pluck).to eq(expected)
|
|
2929
|
+
end
|
|
3021
2930
|
end
|
|
3022
2931
|
end
|
|
3023
2932
|
|
|
3024
2933
|
context 'when only a subdocument field is plucked' do
|
|
3025
2934
|
|
|
3026
2935
|
before do
|
|
3027
|
-
Band.create(name: 'FKA Twigs')
|
|
3028
|
-
Band.create(name: 'FKA Twigs', records: [ Record.new(name: 'LP1') ])
|
|
2936
|
+
Band.create!(name: 'FKA Twigs')
|
|
2937
|
+
Band.create!(name: 'FKA Twigs', records: [ Record.new(name: 'LP1') ])
|
|
3029
2938
|
end
|
|
3030
2939
|
|
|
3031
2940
|
let(:embedded_pluck) do
|
|
3032
2941
|
criteria.pluck('records.name')
|
|
3033
2942
|
end
|
|
3034
2943
|
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
[
|
|
3039
|
-
|
|
2944
|
+
context "when legacy_pluck_distinct is set" do
|
|
2945
|
+
config_override :legacy_pluck_distinct, true
|
|
2946
|
+
let(:expected) do
|
|
2947
|
+
[
|
|
2948
|
+
nil,
|
|
2949
|
+
[{ "name" => "LP1" }]
|
|
2950
|
+
]
|
|
2951
|
+
end
|
|
2952
|
+
|
|
2953
|
+
it 'returns the list of subdocument values' do
|
|
2954
|
+
expect(embedded_pluck).to eq(expected)
|
|
2955
|
+
end
|
|
3040
2956
|
end
|
|
3041
2957
|
|
|
3042
|
-
|
|
3043
|
-
|
|
2958
|
+
context "when legacy_pluck_distinct is not set" do
|
|
2959
|
+
config_override :legacy_pluck_distinct, false
|
|
2960
|
+
let(:expected) do
|
|
2961
|
+
[
|
|
2962
|
+
nil,
|
|
2963
|
+
["LP1"]
|
|
2964
|
+
]
|
|
2965
|
+
end
|
|
2966
|
+
|
|
2967
|
+
it 'returns the list of subdocument values' do
|
|
2968
|
+
expect(embedded_pluck).to eq(expected)
|
|
2969
|
+
end
|
|
3044
2970
|
end
|
|
3045
2971
|
end
|
|
3046
|
-
|
|
3047
2972
|
end
|
|
3048
2973
|
end
|
|
3049
2974
|
|
|
@@ -3053,8 +2978,10 @@ describe Mongoid::Criteria do
|
|
|
3053
2978
|
Band.where(:name.exists => true).pluck(:name, :likes)
|
|
3054
2979
|
end
|
|
3055
2980
|
|
|
3056
|
-
|
|
3057
|
-
|
|
2981
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
2982
|
+
it "returns the values" do
|
|
2983
|
+
expect(plucked).to contain_exactly(["Depeche Mode", 3], ["Tool", 3], ["Photek", 1])
|
|
2984
|
+
end
|
|
3058
2985
|
end
|
|
3059
2986
|
end
|
|
3060
2987
|
|
|
@@ -3064,8 +2991,10 @@ describe Mongoid::Criteria do
|
|
|
3064
2991
|
Band.where(:name.exists => true).pluck(:likes)
|
|
3065
2992
|
end
|
|
3066
2993
|
|
|
3067
|
-
|
|
3068
|
-
|
|
2994
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
2995
|
+
it "returns the duplicates" do
|
|
2996
|
+
expect(plucked).to contain_exactly(3, 3, 1)
|
|
2997
|
+
end
|
|
3069
2998
|
end
|
|
3070
2999
|
end
|
|
3071
3000
|
end
|
|
@@ -3076,8 +3005,10 @@ describe Mongoid::Criteria do
|
|
|
3076
3005
|
Band.where(name: "New Order").pluck(:_id)
|
|
3077
3006
|
end
|
|
3078
3007
|
|
|
3079
|
-
|
|
3080
|
-
|
|
3008
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
3009
|
+
it "returns an empty array" do
|
|
3010
|
+
expect(plucked).to be_empty
|
|
3011
|
+
end
|
|
3081
3012
|
end
|
|
3082
3013
|
end
|
|
3083
3014
|
|
|
@@ -3087,8 +3018,10 @@ describe Mongoid::Criteria do
|
|
|
3087
3018
|
Band.all.pluck(:id)
|
|
3088
3019
|
end
|
|
3089
3020
|
|
|
3090
|
-
|
|
3091
|
-
|
|
3021
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
3022
|
+
it "returns the field values" do
|
|
3023
|
+
expect(plucked).to eq([ depeche.id, tool.id, photek.id ])
|
|
3024
|
+
end
|
|
3092
3025
|
end
|
|
3093
3026
|
end
|
|
3094
3027
|
|
|
@@ -3098,8 +3031,10 @@ describe Mongoid::Criteria do
|
|
|
3098
3031
|
Band.all.pluck(:id, :fooz)
|
|
3099
3032
|
end
|
|
3100
3033
|
|
|
3101
|
-
|
|
3102
|
-
|
|
3034
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
3035
|
+
it "returns nil for the field that doesnt exist" do
|
|
3036
|
+
expect(plucked).to eq([[depeche.id, nil], [tool.id, nil], [photek.id, nil] ])
|
|
3037
|
+
end
|
|
3103
3038
|
end
|
|
3104
3039
|
end
|
|
3105
3040
|
|
|
@@ -3111,8 +3046,10 @@ describe Mongoid::Criteria do
|
|
|
3111
3046
|
Band.all.pluck(:foo)
|
|
3112
3047
|
end
|
|
3113
3048
|
|
|
3114
|
-
|
|
3115
|
-
|
|
3049
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
3050
|
+
it "returns a array with nil values" do
|
|
3051
|
+
expect(plucked).to eq([nil, nil, nil])
|
|
3052
|
+
end
|
|
3116
3053
|
end
|
|
3117
3054
|
end
|
|
3118
3055
|
|
|
@@ -3122,8 +3059,10 @@ describe Mongoid::Criteria do
|
|
|
3122
3059
|
Band.all.pluck(:foo, :bar)
|
|
3123
3060
|
end
|
|
3124
3061
|
|
|
3125
|
-
|
|
3126
|
-
|
|
3062
|
+
with_config_values :legacy_pluck_distinct, true, false do
|
|
3063
|
+
it "returns a nil arrays" do
|
|
3064
|
+
expect(plucked).to eq([[nil, nil], [nil, nil], [nil, nil]])
|
|
3065
|
+
end
|
|
3127
3066
|
end
|
|
3128
3067
|
end
|
|
3129
3068
|
end
|
|
@@ -3132,10 +3071,10 @@ describe Mongoid::Criteria do
|
|
|
3132
3071
|
|
|
3133
3072
|
before do
|
|
3134
3073
|
I18n.locale = :en
|
|
3135
|
-
d = Dictionary.create(description: 'english-text')
|
|
3074
|
+
d = Dictionary.create!(description: 'english-text')
|
|
3136
3075
|
I18n.locale = :de
|
|
3137
3076
|
d.description = 'deutsch-text'
|
|
3138
|
-
d.save
|
|
3077
|
+
d.save!
|
|
3139
3078
|
end
|
|
3140
3079
|
|
|
3141
3080
|
after do
|
|
@@ -3143,13 +3082,48 @@ describe Mongoid::Criteria do
|
|
|
3143
3082
|
end
|
|
3144
3083
|
|
|
3145
3084
|
context 'when plucking the entire field' do
|
|
3146
|
-
|
|
3147
3085
|
let(:plucked) do
|
|
3148
3086
|
Dictionary.all.pluck(:description)
|
|
3149
3087
|
end
|
|
3150
3088
|
|
|
3151
|
-
|
|
3152
|
-
|
|
3089
|
+
let(:plucked_translations) do
|
|
3090
|
+
Dictionary.all.pluck(:description_translations)
|
|
3091
|
+
end
|
|
3092
|
+
|
|
3093
|
+
let(:plucked_translations_both) do
|
|
3094
|
+
Dictionary.all.pluck(:description_translations, :description)
|
|
3095
|
+
end
|
|
3096
|
+
|
|
3097
|
+
context "when legacy_pluck_distinct is set" do
|
|
3098
|
+
config_override :legacy_pluck_distinct, true
|
|
3099
|
+
|
|
3100
|
+
it 'returns the non-demongoized translations' do
|
|
3101
|
+
expect(plucked.first).to eq({"de"=>"deutsch-text", "en"=>"english-text"})
|
|
3102
|
+
end
|
|
3103
|
+
|
|
3104
|
+
it 'returns nil' do
|
|
3105
|
+
expect(plucked_translations.first).to eq(nil)
|
|
3106
|
+
end
|
|
3107
|
+
|
|
3108
|
+
it 'returns nil for _translations' do
|
|
3109
|
+
expect(plucked_translations_both.first).to eq([nil, {"de"=>"deutsch-text", "en"=>"english-text"}])
|
|
3110
|
+
end
|
|
3111
|
+
end
|
|
3112
|
+
|
|
3113
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3114
|
+
config_override :legacy_pluck_distinct, false
|
|
3115
|
+
|
|
3116
|
+
it 'returns the demongoized translations' do
|
|
3117
|
+
expect(plucked.first).to eq('deutsch-text')
|
|
3118
|
+
end
|
|
3119
|
+
|
|
3120
|
+
it 'returns the full translations hash to _translations' do
|
|
3121
|
+
expect(plucked_translations.first).to eq({"de"=>"deutsch-text", "en"=>"english-text"})
|
|
3122
|
+
end
|
|
3123
|
+
|
|
3124
|
+
it 'returns both' do
|
|
3125
|
+
expect(plucked_translations_both.first).to eq([{"de"=>"deutsch-text", "en"=>"english-text"}, "deutsch-text"])
|
|
3126
|
+
end
|
|
3153
3127
|
end
|
|
3154
3128
|
end
|
|
3155
3129
|
|
|
@@ -3159,8 +3133,235 @@ describe Mongoid::Criteria do
|
|
|
3159
3133
|
Dictionary.all.pluck(:'description.de')
|
|
3160
3134
|
end
|
|
3161
3135
|
|
|
3162
|
-
|
|
3163
|
-
|
|
3136
|
+
context "when legacy_pluck_distinct is set" do
|
|
3137
|
+
config_override :legacy_pluck_distinct, true
|
|
3138
|
+
|
|
3139
|
+
it 'returns the specific translations' do
|
|
3140
|
+
expect(plucked.first).to eq({'de' => 'deutsch-text'})
|
|
3141
|
+
end
|
|
3142
|
+
end
|
|
3143
|
+
|
|
3144
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3145
|
+
config_override :legacy_pluck_distinct, false
|
|
3146
|
+
|
|
3147
|
+
it 'returns the specific translations' do
|
|
3148
|
+
expect(plucked.first).to eq('deutsch-text')
|
|
3149
|
+
end
|
|
3150
|
+
end
|
|
3151
|
+
end
|
|
3152
|
+
|
|
3153
|
+
context 'when plucking a specific locale from _translations field' do
|
|
3154
|
+
|
|
3155
|
+
let(:plucked) do
|
|
3156
|
+
Dictionary.all.pluck(:'description_translations.de')
|
|
3157
|
+
end
|
|
3158
|
+
|
|
3159
|
+
context "when legacy_pluck_distinct is set" do
|
|
3160
|
+
config_override :legacy_pluck_distinct, true
|
|
3161
|
+
|
|
3162
|
+
it 'returns the specific translations' do
|
|
3163
|
+
expect(plucked.first).to eq(nil)
|
|
3164
|
+
end
|
|
3165
|
+
end
|
|
3166
|
+
|
|
3167
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3168
|
+
config_override :legacy_pluck_distinct, false
|
|
3169
|
+
|
|
3170
|
+
it 'returns the specific translations' do
|
|
3171
|
+
expect(plucked.first).to eq('deutsch-text')
|
|
3172
|
+
end
|
|
3173
|
+
end
|
|
3174
|
+
end
|
|
3175
|
+
|
|
3176
|
+
context 'when fallbacks are enabled with a locale list' do
|
|
3177
|
+
require_fallbacks
|
|
3178
|
+
|
|
3179
|
+
around(:all) do |example|
|
|
3180
|
+
prev_fallbacks = I18n.fallbacks.dup
|
|
3181
|
+
I18n.fallbacks[:he] = [ :en ]
|
|
3182
|
+
example.run
|
|
3183
|
+
I18n.fallbacks = prev_fallbacks
|
|
3184
|
+
end
|
|
3185
|
+
|
|
3186
|
+
after do
|
|
3187
|
+
I18n.locale = :en
|
|
3188
|
+
end
|
|
3189
|
+
|
|
3190
|
+
let(:plucked) do
|
|
3191
|
+
Dictionary.all.pluck(:description).first
|
|
3192
|
+
end
|
|
3193
|
+
|
|
3194
|
+
context "when legacy_pluck_distinct is set" do
|
|
3195
|
+
config_override :legacy_pluck_distinct, true
|
|
3196
|
+
|
|
3197
|
+
it "does not correctly use the fallback" do
|
|
3198
|
+
plucked.should == {"de"=>"deutsch-text", "en"=>"english-text"}
|
|
3199
|
+
end
|
|
3200
|
+
end
|
|
3201
|
+
|
|
3202
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3203
|
+
config_override :legacy_pluck_distinct, false
|
|
3204
|
+
|
|
3205
|
+
it "correctly uses the fallback" do
|
|
3206
|
+
I18n.locale = :en
|
|
3207
|
+
d = Dictionary.create!(description: 'english-text')
|
|
3208
|
+
I18n.locale = :he
|
|
3209
|
+
plucked.should == "english-text"
|
|
3210
|
+
end
|
|
3211
|
+
end
|
|
3212
|
+
end
|
|
3213
|
+
|
|
3214
|
+
context "when the localized field is embedded" do
|
|
3215
|
+
before do
|
|
3216
|
+
p = Passport.new
|
|
3217
|
+
I18n.locale = :en
|
|
3218
|
+
p.name = "Neil"
|
|
3219
|
+
I18n.locale = :he
|
|
3220
|
+
p.name = "Nissim"
|
|
3221
|
+
|
|
3222
|
+
Person.create!(passport: p, employer_id: 12345)
|
|
3223
|
+
end
|
|
3224
|
+
|
|
3225
|
+
after do
|
|
3226
|
+
I18n.locale = :en
|
|
3227
|
+
end
|
|
3228
|
+
|
|
3229
|
+
let(:plucked) do
|
|
3230
|
+
Person.where(employer_id: 12345).pluck("pass.name").first
|
|
3231
|
+
end
|
|
3232
|
+
|
|
3233
|
+
let(:plucked_translations) do
|
|
3234
|
+
Person.where(employer_id: 12345).pluck("pass.name_translations").first
|
|
3235
|
+
end
|
|
3236
|
+
|
|
3237
|
+
let(:plucked_translations_field) do
|
|
3238
|
+
Person.where(employer_id: 12345).pluck("pass.name_translations.en").first
|
|
3239
|
+
end
|
|
3240
|
+
|
|
3241
|
+
context "when legacy_pluck_distinct is set" do
|
|
3242
|
+
config_override :legacy_pluck_distinct, true
|
|
3243
|
+
|
|
3244
|
+
it "returns the full hash embedded" do
|
|
3245
|
+
expect(plucked).to eq({ "name" => { "en" => "Neil", "he" => "Nissim" } })
|
|
3246
|
+
end
|
|
3247
|
+
|
|
3248
|
+
it "returns the empty hash" do
|
|
3249
|
+
expect(plucked_translations).to eq({})
|
|
3250
|
+
end
|
|
3251
|
+
|
|
3252
|
+
it "returns the empty hash" do
|
|
3253
|
+
expect(plucked_translations_field).to eq({})
|
|
3254
|
+
end
|
|
3255
|
+
end
|
|
3256
|
+
|
|
3257
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3258
|
+
config_override :legacy_pluck_distinct, false
|
|
3259
|
+
|
|
3260
|
+
it "returns the translation for the current locale" do
|
|
3261
|
+
expect(plucked).to eq("Nissim")
|
|
3262
|
+
end
|
|
3263
|
+
|
|
3264
|
+
it "returns the full _translation hash" do
|
|
3265
|
+
expect(plucked_translations).to eq({ "en" => "Neil", "he" => "Nissim" })
|
|
3266
|
+
end
|
|
3267
|
+
|
|
3268
|
+
it "returns the translation for the requested locale" do
|
|
3269
|
+
expect(plucked_translations_field).to eq("Neil")
|
|
3270
|
+
end
|
|
3271
|
+
end
|
|
3272
|
+
end
|
|
3273
|
+
end
|
|
3274
|
+
|
|
3275
|
+
context 'when plucking a field to be demongoized' do
|
|
3276
|
+
|
|
3277
|
+
let(:plucked) do
|
|
3278
|
+
Band.where(name: maniacs.name).pluck(:sales)
|
|
3279
|
+
end
|
|
3280
|
+
|
|
3281
|
+
context "when legacy_pluck_distinct is set" do
|
|
3282
|
+
config_override :legacy_pluck_distinct, true
|
|
3283
|
+
|
|
3284
|
+
it "does not demongoize the field" do
|
|
3285
|
+
expect(plucked.first).to be_a(String)
|
|
3286
|
+
expect(plucked.first).to eq("1E2")
|
|
3287
|
+
end
|
|
3288
|
+
end
|
|
3289
|
+
|
|
3290
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3291
|
+
config_override :legacy_pluck_distinct, false
|
|
3292
|
+
|
|
3293
|
+
it "demongoizes the field" do
|
|
3294
|
+
expect(plucked.first).to be_a(BigDecimal)
|
|
3295
|
+
expect(plucked.first).to eq(BigDecimal("1E2"))
|
|
3296
|
+
end
|
|
3297
|
+
end
|
|
3298
|
+
end
|
|
3299
|
+
|
|
3300
|
+
context "when plucking an embedded field" do
|
|
3301
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
3302
|
+
let!(:band) { Band.create!(label: label) }
|
|
3303
|
+
|
|
3304
|
+
let(:plucked) { Band.where(_id: band.id).pluck("label.sales") }
|
|
3305
|
+
|
|
3306
|
+
context "when legacy_pluck_distinct is set" do
|
|
3307
|
+
config_override :legacy_pluck_distinct, true
|
|
3308
|
+
|
|
3309
|
+
it "returns a hash with a non-demongoized field" do
|
|
3310
|
+
expect(plucked.first).to eq({ 'sales' => "1E2" })
|
|
3311
|
+
end
|
|
3312
|
+
end
|
|
3313
|
+
|
|
3314
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3315
|
+
config_override :legacy_pluck_distinct, false
|
|
3316
|
+
|
|
3317
|
+
it "demongoizes the field" do
|
|
3318
|
+
expect(plucked.first).to eq(BigDecimal("1E2"))
|
|
3319
|
+
end
|
|
3320
|
+
end
|
|
3321
|
+
end
|
|
3322
|
+
|
|
3323
|
+
context "when plucking an embeds_many field" do
|
|
3324
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
3325
|
+
let!(:band) { Band.create!(labels: [label]) }
|
|
3326
|
+
|
|
3327
|
+
let(:plucked) { Band.where(_id: band.id).pluck("labels.sales") }
|
|
3328
|
+
|
|
3329
|
+
context "when legacy_pluck_distinct is set" do
|
|
3330
|
+
config_override :legacy_pluck_distinct, true
|
|
3331
|
+
|
|
3332
|
+
it "returns a hash with a non-demongoized field" do
|
|
3333
|
+
expect(plucked.first).to eq([{ 'sales' => "1E2" }])
|
|
3334
|
+
end
|
|
3335
|
+
end
|
|
3336
|
+
|
|
3337
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3338
|
+
config_override :legacy_pluck_distinct, false
|
|
3339
|
+
|
|
3340
|
+
it "demongoizes the field" do
|
|
3341
|
+
expect(plucked.first).to eq([BigDecimal("1E2")])
|
|
3342
|
+
end
|
|
3343
|
+
end
|
|
3344
|
+
end
|
|
3345
|
+
|
|
3346
|
+
context "when plucking a nonexistent embedded field" do
|
|
3347
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
3348
|
+
let!(:band) { Band.create!(label: label) }
|
|
3349
|
+
|
|
3350
|
+
let(:plucked) { Band.where(_id: band.id).pluck("label.qwerty") }
|
|
3351
|
+
|
|
3352
|
+
context "when legacy_pluck_distinct is set" do
|
|
3353
|
+
config_override :legacy_pluck_distinct, true
|
|
3354
|
+
|
|
3355
|
+
it "returns an empty hash" do
|
|
3356
|
+
expect(plucked.first).to eq({})
|
|
3357
|
+
end
|
|
3358
|
+
end
|
|
3359
|
+
|
|
3360
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3361
|
+
config_override :legacy_pluck_distinct, false
|
|
3362
|
+
|
|
3363
|
+
it "returns nil" do
|
|
3364
|
+
expect(plucked.first).to eq(nil)
|
|
3164
3365
|
end
|
|
3165
3366
|
end
|
|
3166
3367
|
end
|
|
@@ -3247,11 +3448,11 @@ describe Mongoid::Criteria do
|
|
|
3247
3448
|
describe "#sort" do
|
|
3248
3449
|
|
|
3249
3450
|
let!(:depeche) do
|
|
3250
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
3451
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
3251
3452
|
end
|
|
3252
3453
|
|
|
3253
3454
|
let!(:tool) do
|
|
3254
|
-
Band.create(name: "Tool", likes: 500)
|
|
3455
|
+
Band.create!(name: "Tool", likes: 500)
|
|
3255
3456
|
end
|
|
3256
3457
|
|
|
3257
3458
|
let(:sorted) do
|
|
@@ -3270,11 +3471,11 @@ describe Mongoid::Criteria do
|
|
|
3270
3471
|
context "when provided a single field" do
|
|
3271
3472
|
|
|
3272
3473
|
let!(:depeche) do
|
|
3273
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
3474
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
3274
3475
|
end
|
|
3275
3476
|
|
|
3276
3477
|
let!(:tool) do
|
|
3277
|
-
Band.create(name: "Tool", likes: 500)
|
|
3478
|
+
Band.create!(name: "Tool", likes: 500)
|
|
3278
3479
|
end
|
|
3279
3480
|
|
|
3280
3481
|
let(:criteria) do
|
|
@@ -3308,7 +3509,7 @@ describe Mongoid::Criteria do
|
|
|
3308
3509
|
describe "#to_ary" do
|
|
3309
3510
|
|
|
3310
3511
|
let!(:band) do
|
|
3311
|
-
Band.create(name: "Depeche Mode")
|
|
3512
|
+
Band.create!(name: "Depeche Mode")
|
|
3312
3513
|
end
|
|
3313
3514
|
|
|
3314
3515
|
let(:criteria) do
|
|
@@ -3321,12 +3522,14 @@ describe Mongoid::Criteria do
|
|
|
3321
3522
|
end
|
|
3322
3523
|
|
|
3323
3524
|
describe "#max_scan" do
|
|
3525
|
+
max_server_version '4.0'
|
|
3526
|
+
|
|
3324
3527
|
let!(:band) do
|
|
3325
|
-
Band.create(name: "Depeche Mode")
|
|
3528
|
+
Band.create!(name: "Depeche Mode")
|
|
3326
3529
|
end
|
|
3327
3530
|
|
|
3328
3531
|
let!(:band2) do
|
|
3329
|
-
Band.create(name: "Tool")
|
|
3532
|
+
Band.create!(name: "Tool")
|
|
3330
3533
|
end
|
|
3331
3534
|
|
|
3332
3535
|
let(:criteria) do
|
|
@@ -3365,34 +3568,75 @@ describe Mongoid::Criteria do
|
|
|
3365
3568
|
end
|
|
3366
3569
|
|
|
3367
3570
|
describe "#type" do
|
|
3571
|
+
context "when using the default discriminator_key" do
|
|
3572
|
+
context "when the type is a string" do
|
|
3368
3573
|
|
|
3369
|
-
|
|
3574
|
+
let!(:browser) do
|
|
3575
|
+
Browser.create!
|
|
3576
|
+
end
|
|
3370
3577
|
|
|
3371
|
-
|
|
3372
|
-
|
|
3373
|
-
|
|
3578
|
+
let(:criteria) do
|
|
3579
|
+
Canvas.all.type("Browser")
|
|
3580
|
+
end
|
|
3374
3581
|
|
|
3375
|
-
|
|
3376
|
-
|
|
3582
|
+
it "returns documents with the provided type" do
|
|
3583
|
+
expect(criteria).to eq([ browser ])
|
|
3584
|
+
end
|
|
3377
3585
|
end
|
|
3378
3586
|
|
|
3379
|
-
|
|
3380
|
-
|
|
3587
|
+
context "when the type is an Array of type" do
|
|
3588
|
+
|
|
3589
|
+
let!(:browser) do
|
|
3590
|
+
Firefox.create!
|
|
3591
|
+
end
|
|
3592
|
+
|
|
3593
|
+
let(:criteria) do
|
|
3594
|
+
Canvas.all.type([ "Browser", "Firefox" ])
|
|
3595
|
+
end
|
|
3596
|
+
|
|
3597
|
+
it "returns documents with the provided types" do
|
|
3598
|
+
expect(criteria).to eq([ browser ])
|
|
3599
|
+
end
|
|
3381
3600
|
end
|
|
3382
3601
|
end
|
|
3383
3602
|
|
|
3384
|
-
context "when
|
|
3603
|
+
context "when using a custom discriminator_key" do
|
|
3604
|
+
before do
|
|
3605
|
+
Canvas.discriminator_key = "dkey"
|
|
3606
|
+
end
|
|
3385
3607
|
|
|
3386
|
-
|
|
3387
|
-
|
|
3608
|
+
after do
|
|
3609
|
+
Canvas.discriminator_key = nil
|
|
3388
3610
|
end
|
|
3389
3611
|
|
|
3390
|
-
|
|
3391
|
-
|
|
3612
|
+
context "when the type is a string" do
|
|
3613
|
+
|
|
3614
|
+
let!(:browser) do
|
|
3615
|
+
Browser.create!
|
|
3616
|
+
end
|
|
3617
|
+
|
|
3618
|
+
let(:criteria) do
|
|
3619
|
+
Canvas.all.type("Browser")
|
|
3620
|
+
end
|
|
3621
|
+
|
|
3622
|
+
it "returns documents with the provided type" do
|
|
3623
|
+
expect(criteria).to eq([ browser ])
|
|
3624
|
+
end
|
|
3392
3625
|
end
|
|
3393
3626
|
|
|
3394
|
-
|
|
3395
|
-
|
|
3627
|
+
context "when the type is an Array of type" do
|
|
3628
|
+
|
|
3629
|
+
let!(:browser) do
|
|
3630
|
+
Firefox.create!
|
|
3631
|
+
end
|
|
3632
|
+
|
|
3633
|
+
let(:criteria) do
|
|
3634
|
+
Canvas.all.type([ "Browser", "Firefox" ])
|
|
3635
|
+
end
|
|
3636
|
+
|
|
3637
|
+
it "returns documents with the provided types" do
|
|
3638
|
+
expect(criteria).to eq([ browser ])
|
|
3639
|
+
end
|
|
3396
3640
|
end
|
|
3397
3641
|
end
|
|
3398
3642
|
end
|
|
@@ -3400,11 +3644,43 @@ describe Mongoid::Criteria do
|
|
|
3400
3644
|
describe "#where" do
|
|
3401
3645
|
|
|
3402
3646
|
let!(:match) do
|
|
3403
|
-
Band.create(name: "Depeche Mode")
|
|
3647
|
+
Band.create!(name: "Depeche Mode")
|
|
3404
3648
|
end
|
|
3405
3649
|
|
|
3406
3650
|
let!(:non_match) do
|
|
3407
|
-
Band.create(name: "Tool")
|
|
3651
|
+
Band.create!(name: "Tool")
|
|
3652
|
+
end
|
|
3653
|
+
|
|
3654
|
+
context 'when provided no arguments' do
|
|
3655
|
+
context 'on a model class' do
|
|
3656
|
+
it 'returns an empty criteria' do
|
|
3657
|
+
Band.where.selector.should == {}
|
|
3658
|
+
end
|
|
3659
|
+
end
|
|
3660
|
+
|
|
3661
|
+
context 'on an association' do
|
|
3662
|
+
it 'returns an empty criteria' do
|
|
3663
|
+
match.records.where.selector.should == {}
|
|
3664
|
+
end
|
|
3665
|
+
end
|
|
3666
|
+
end
|
|
3667
|
+
|
|
3668
|
+
context 'when provided multiple arguments' do
|
|
3669
|
+
context 'on a model class' do
|
|
3670
|
+
it 'raises ArgumentError' do
|
|
3671
|
+
lambda do
|
|
3672
|
+
Band.where({foo: 1}, {bar: 2})
|
|
3673
|
+
end.should raise_error(ArgumentError, /where requires zero or one arguments/)
|
|
3674
|
+
end
|
|
3675
|
+
end
|
|
3676
|
+
|
|
3677
|
+
context 'on an association' do
|
|
3678
|
+
it 'raises ArgumentError' do
|
|
3679
|
+
lambda do
|
|
3680
|
+
match.records.where({foo: 1}, {bar: 2})
|
|
3681
|
+
end.should raise_error(ArgumentError, /where requires zero or one arguments/)
|
|
3682
|
+
end
|
|
3683
|
+
end
|
|
3408
3684
|
end
|
|
3409
3685
|
|
|
3410
3686
|
context "when provided a string" do
|
|
@@ -3469,7 +3745,7 @@ describe Mongoid::Criteria do
|
|
|
3469
3745
|
end
|
|
3470
3746
|
|
|
3471
3747
|
let!(:band) do
|
|
3472
|
-
Band.create(name: "Boards of Canada", sales: sales)
|
|
3748
|
+
Band.create!(name: "Boards of Canada", sales: sales)
|
|
3473
3749
|
end
|
|
3474
3750
|
|
|
3475
3751
|
let(:from_db) do
|
|
@@ -3481,14 +3757,15 @@ describe Mongoid::Criteria do
|
|
|
3481
3757
|
end
|
|
3482
3758
|
end
|
|
3483
3759
|
|
|
3484
|
-
context "when querying on a BSON::Decimal128"
|
|
3760
|
+
context "when querying on a BSON::Decimal128" do
|
|
3761
|
+
min_server_version '3.4'
|
|
3485
3762
|
|
|
3486
3763
|
let(:decimal) do
|
|
3487
3764
|
BSON::Decimal128.new("0.0005")
|
|
3488
3765
|
end
|
|
3489
3766
|
|
|
3490
3767
|
let!(:band) do
|
|
3491
|
-
Band.create(name: "Boards of Canada", decimal: decimal)
|
|
3768
|
+
Band.create!(name: "Boards of Canada", decimal: decimal)
|
|
3492
3769
|
end
|
|
3493
3770
|
|
|
3494
3771
|
let(:from_db) do
|
|
@@ -3503,7 +3780,7 @@ describe Mongoid::Criteria do
|
|
|
3503
3780
|
context 'when querying on a polymorphic relation' do
|
|
3504
3781
|
|
|
3505
3782
|
let(:movie) do
|
|
3506
|
-
Movie.create
|
|
3783
|
+
Movie.create!
|
|
3507
3784
|
end
|
|
3508
3785
|
|
|
3509
3786
|
let(:selector) do
|
|
@@ -3515,12 +3792,78 @@ describe Mongoid::Criteria do
|
|
|
3515
3792
|
end
|
|
3516
3793
|
end
|
|
3517
3794
|
end
|
|
3795
|
+
|
|
3796
|
+
context 'when given multiple keys in separate calls' do
|
|
3797
|
+
let(:criteria) { Band.where(foo: 1).where(bar: 2) }
|
|
3798
|
+
|
|
3799
|
+
it 'combines criteria' do
|
|
3800
|
+
expect(criteria.selector).to eq('foo' => 1, 'bar' => 2)
|
|
3801
|
+
end
|
|
3802
|
+
end
|
|
3803
|
+
|
|
3804
|
+
context 'when given same key in separate calls' do
|
|
3805
|
+
let(:criteria) { Band.where(foo: 1).where(foo: 2) }
|
|
3806
|
+
|
|
3807
|
+
it 'combines criteria' do
|
|
3808
|
+
expect(criteria.selector).to eq('foo' => 1, '$and' => [{'foo' => 2}])
|
|
3809
|
+
end
|
|
3810
|
+
end
|
|
3811
|
+
|
|
3812
|
+
context 'when given same key in separate calls and there are other criteria' do
|
|
3813
|
+
let(:criteria) { Band.where(foo: 1, bar: 3).where(foo: 2) }
|
|
3814
|
+
|
|
3815
|
+
it 'combines criteria' do
|
|
3816
|
+
expect(criteria.selector).to eq(
|
|
3817
|
+
'foo' => 1, '$and' => [{'foo' => 2}], 'bar' => 3)
|
|
3818
|
+
end
|
|
3819
|
+
end
|
|
3820
|
+
|
|
3821
|
+
context 'when given same key in separate calls and other criteria are added later' do
|
|
3822
|
+
let(:criteria) { Band.where(foo: 1).where(foo: 2).where(bar: 3) }
|
|
3823
|
+
|
|
3824
|
+
it 'combines criteria' do
|
|
3825
|
+
expect(criteria.selector).to eq(
|
|
3826
|
+
'foo' => 1, '$and' => [{'foo' => 2}], 'bar' => 3)
|
|
3827
|
+
end
|
|
3828
|
+
end
|
|
3829
|
+
|
|
3830
|
+
context "when duplicating where conditions" do
|
|
3831
|
+
let(:criteria) { Sound.where(active: true).where(active: true) }
|
|
3832
|
+
|
|
3833
|
+
it 'does not duplicate criteria' do
|
|
3834
|
+
expect(criteria.selector).to eq('active' => true)
|
|
3835
|
+
end
|
|
3836
|
+
end
|
|
3837
|
+
|
|
3838
|
+
context "when duplicating where conditions with different values" do
|
|
3839
|
+
let(:criteria) { Sound.where(active: true).where(active: false).where(active: true).where(active: false) }
|
|
3840
|
+
|
|
3841
|
+
it 'does not duplicate criteria' do
|
|
3842
|
+
expect(criteria.selector).to eq(
|
|
3843
|
+
'active' => true, '$and' => [{'active' => false}])
|
|
3844
|
+
end
|
|
3845
|
+
end
|
|
3846
|
+
|
|
3847
|
+
# Used to test MONGOID-5251 where the find command was adding unnecessary
|
|
3848
|
+
# and clauses. Since the find command creates the criteria and executes it,
|
|
3849
|
+
# it is difficult to analyze the criteria used. For this reason, I have
|
|
3850
|
+
# extracted the crux of the issue, adding an _id to the the criteria twice,
|
|
3851
|
+
# and used that for the test case.
|
|
3852
|
+
context "when searching by _id twice" do
|
|
3853
|
+
let(:_id) { BSON::ObjectId.new }
|
|
3854
|
+
let(:criteria) { Band.where(_id: _id) }
|
|
3855
|
+
let(:dup_criteria) { criteria.where(_id: _id)}
|
|
3856
|
+
|
|
3857
|
+
it "does not duplicate the criteria" do
|
|
3858
|
+
expect(dup_criteria.selector).to eq({ "_id" => _id })
|
|
3859
|
+
end
|
|
3860
|
+
end
|
|
3518
3861
|
end
|
|
3519
3862
|
|
|
3520
3863
|
describe "#for_js" do
|
|
3521
3864
|
|
|
3522
3865
|
let!(:match) do
|
|
3523
|
-
Band.create(name: "Depeche Mode")
|
|
3866
|
+
Band.create!(name: "Depeche Mode")
|
|
3524
3867
|
end
|
|
3525
3868
|
|
|
3526
3869
|
context "when the code has no scope" do
|
|
@@ -3535,6 +3878,7 @@ describe Mongoid::Criteria do
|
|
|
3535
3878
|
end
|
|
3536
3879
|
|
|
3537
3880
|
context "when the code has scope" do
|
|
3881
|
+
max_server_version '4.2'
|
|
3538
3882
|
|
|
3539
3883
|
let(:criteria) do
|
|
3540
3884
|
Band.for_js("this.name == param", param: "Depeche Mode")
|
|
@@ -3556,10 +3900,14 @@ describe Mongoid::Criteria do
|
|
|
3556
3900
|
|
|
3557
3901
|
before do
|
|
3558
3902
|
expect(Person).to receive(:minor).and_call_original
|
|
3903
|
+
expect(Person).to receive(:older_than).and_call_original
|
|
3559
3904
|
end
|
|
3560
3905
|
|
|
3561
3906
|
it "calls the method on the class" do
|
|
3562
3907
|
expect(criteria.minor).to be_empty
|
|
3908
|
+
expect do
|
|
3909
|
+
criteria.older_than(age: 25)
|
|
3910
|
+
end.not_to raise_error
|
|
3563
3911
|
end
|
|
3564
3912
|
end
|
|
3565
3913
|
|
|
@@ -3602,11 +3950,11 @@ describe Mongoid::Criteria do
|
|
|
3602
3950
|
describe "#uniq" do
|
|
3603
3951
|
|
|
3604
3952
|
let!(:band_one) do
|
|
3605
|
-
Band.create(name: "New Order")
|
|
3953
|
+
Band.create!(name: "New Order")
|
|
3606
3954
|
end
|
|
3607
3955
|
|
|
3608
3956
|
let!(:band_two) do
|
|
3609
|
-
Band.create(name: "New Order")
|
|
3957
|
+
Band.create!(name: "New Order")
|
|
3610
3958
|
end
|
|
3611
3959
|
|
|
3612
3960
|
let(:criteria) do
|
|
@@ -3646,7 +3994,7 @@ describe Mongoid::Criteria do
|
|
|
3646
3994
|
end
|
|
3647
3995
|
end
|
|
3648
3996
|
|
|
3649
|
-
describe "#
|
|
3997
|
+
describe "#geo_spatial" do
|
|
3650
3998
|
|
|
3651
3999
|
context "when checking within a polygon" do
|
|
3652
4000
|
|
|
@@ -3655,11 +4003,11 @@ describe Mongoid::Criteria do
|
|
|
3655
4003
|
end
|
|
3656
4004
|
|
|
3657
4005
|
let!(:match) do
|
|
3658
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
4006
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
3659
4007
|
end
|
|
3660
4008
|
|
|
3661
4009
|
let(:criteria) do
|
|
3662
|
-
Bar.
|
|
4010
|
+
Bar.geo_spatial(
|
|
3663
4011
|
:location.within_polygon => [[[ 50, 10 ], [ 50, 20 ], [ 60, 20 ], [ 60, 10 ], [ 50, 10 ]]]
|
|
3664
4012
|
)
|
|
3665
4013
|
end
|
|
@@ -3673,11 +4021,11 @@ describe Mongoid::Criteria do
|
|
|
3673
4021
|
describe "#with_size" do
|
|
3674
4022
|
|
|
3675
4023
|
let!(:match) do
|
|
3676
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
4024
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
3677
4025
|
end
|
|
3678
4026
|
|
|
3679
4027
|
let!(:non_match) do
|
|
3680
|
-
Band.create(genres: [ "house" ])
|
|
4028
|
+
Band.create!(genres: [ "house" ])
|
|
3681
4029
|
end
|
|
3682
4030
|
|
|
3683
4031
|
let(:criteria) do
|
|
@@ -3692,7 +4040,7 @@ describe Mongoid::Criteria do
|
|
|
3692
4040
|
describe "#with_type" do
|
|
3693
4041
|
|
|
3694
4042
|
let!(:match) do
|
|
3695
|
-
Band.create(name: "Depeche Mode")
|
|
4043
|
+
Band.create!(name: "Depeche Mode")
|
|
3696
4044
|
end
|
|
3697
4045
|
|
|
3698
4046
|
let(:criteria) do
|
|
@@ -3704,73 +4052,76 @@ describe Mongoid::Criteria do
|
|
|
3704
4052
|
end
|
|
3705
4053
|
end
|
|
3706
4054
|
|
|
3707
|
-
describe "#
|
|
4055
|
+
describe "#type_selection" do
|
|
4056
|
+
context "when using the default discriminator_key" do
|
|
4057
|
+
context "when only one subclass exists" do
|
|
3708
4058
|
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
4059
|
+
let(:criteria) do
|
|
4060
|
+
described_class.new(Firefox)
|
|
4061
|
+
end
|
|
3712
4062
|
|
|
3713
|
-
|
|
4063
|
+
let(:selection) do
|
|
4064
|
+
criteria.send(:type_selection)
|
|
4065
|
+
end
|
|
4066
|
+
|
|
4067
|
+
it "does not use an $in query" do
|
|
4068
|
+
expect(selection).to eq({ _type: "Firefox" })
|
|
4069
|
+
end
|
|
4070
|
+
end
|
|
3714
4071
|
|
|
3715
|
-
context "when
|
|
4072
|
+
context "when more than one subclass exists" do
|
|
3716
4073
|
|
|
3717
4074
|
let(:criteria) do
|
|
3718
|
-
|
|
4075
|
+
described_class.new(Browser)
|
|
3719
4076
|
end
|
|
3720
4077
|
|
|
3721
|
-
|
|
3722
|
-
|
|
4078
|
+
let(:selection) do
|
|
4079
|
+
criteria.send(:type_selection)
|
|
3723
4080
|
end
|
|
3724
|
-
end
|
|
3725
|
-
end
|
|
3726
4081
|
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
Person.without(:_id, :id, "_id", "id")
|
|
4082
|
+
it "does not use an $in query" do
|
|
4083
|
+
expect(selection).to eq({ _type: { "$in" => [ "Firefox", "Browser" ]}})
|
|
4084
|
+
end
|
|
3731
4085
|
end
|
|
4086
|
+
end
|
|
3732
4087
|
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3736
|
-
}.to_not raise_error
|
|
4088
|
+
context "when using a custom discriminator_key" do
|
|
4089
|
+
before do
|
|
4090
|
+
Canvas.discriminator_key = "dkey"
|
|
3737
4091
|
end
|
|
3738
4092
|
|
|
3739
|
-
|
|
3740
|
-
|
|
4093
|
+
after do
|
|
4094
|
+
Canvas.discriminator_key = nil
|
|
3741
4095
|
end
|
|
3742
|
-
end
|
|
3743
|
-
end
|
|
3744
4096
|
|
|
3745
|
-
|
|
3746
|
-
|
|
3747
|
-
context "when only one subclass exists" do
|
|
4097
|
+
context "when only one subclass exists" do
|
|
3748
4098
|
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
4099
|
+
let(:criteria) do
|
|
4100
|
+
described_class.new(Firefox)
|
|
4101
|
+
end
|
|
3752
4102
|
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
4103
|
+
let(:selection) do
|
|
4104
|
+
criteria.send(:type_selection)
|
|
4105
|
+
end
|
|
3756
4106
|
|
|
3757
|
-
|
|
3758
|
-
|
|
4107
|
+
it "does not use an $in query" do
|
|
4108
|
+
expect(selection).to eq({ dkey: "Firefox" })
|
|
4109
|
+
end
|
|
3759
4110
|
end
|
|
3760
|
-
end
|
|
3761
4111
|
|
|
3762
|
-
|
|
4112
|
+
context "when more than one subclass exists" do
|
|
3763
4113
|
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
4114
|
+
let(:criteria) do
|
|
4115
|
+
described_class.new(Browser)
|
|
4116
|
+
end
|
|
3767
4117
|
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
4118
|
+
let(:selection) do
|
|
4119
|
+
criteria.send(:type_selection)
|
|
4120
|
+
end
|
|
3771
4121
|
|
|
3772
|
-
|
|
3773
|
-
|
|
4122
|
+
it "does not use an $in query" do
|
|
4123
|
+
expect(selection).to eq({ dkey: { "$in" => [ "Firefox", "Browser" ]}})
|
|
4124
|
+
end
|
|
3774
4125
|
end
|
|
3775
4126
|
end
|
|
3776
4127
|
end
|