mongoid 6.4.8 → 7.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +30 -30
- data/LICENSE +1 -0
- data/README.md +34 -20
- data/Rakefile +75 -6
- data/lib/config/locales/en.yml +149 -66
- data/lib/mongoid/association/accessors.rb +402 -0
- data/lib/mongoid/association/bindable.rb +179 -0
- data/lib/mongoid/association/builders.rb +84 -0
- data/lib/mongoid/association/constrainable.rb +43 -0
- data/lib/mongoid/association/depending.rb +128 -0
- data/lib/mongoid/association/eager_loadable.rb +35 -0
- data/lib/mongoid/association/embedded/batchable.rb +375 -0
- data/lib/mongoid/association/embedded/cyclic.rb +102 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +52 -0
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +38 -0
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +111 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +134 -0
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +41 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +45 -0
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +549 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +183 -0
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +43 -0
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +39 -0
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +145 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +150 -0
- data/lib/mongoid/association/embedded.rb +6 -0
- data/lib/mongoid/association/macros.rb +227 -0
- data/lib/mongoid/association/many.rb +198 -0
- data/lib/mongoid/association/marshalable.rb +31 -0
- data/lib/mongoid/association/nested/many.rb +191 -0
- data/lib/mongoid/association/nested/nested_buildable.rb +66 -0
- data/lib/mongoid/association/nested/one.rb +116 -0
- data/lib/mongoid/association/nested.rb +15 -0
- data/lib/mongoid/association/one.rb +53 -0
- data/lib/mongoid/association/options.rb +122 -0
- data/lib/mongoid/association/proxy.rb +189 -0
- data/lib/mongoid/association/referenced/auto_save.rb +73 -0
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +82 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +48 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +73 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +125 -0
- data/lib/mongoid/association/referenced/belongs_to.rb +226 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +152 -0
- data/lib/mongoid/association/referenced/eager.rb +163 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +72 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +53 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +292 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +270 -0
- data/lib/mongoid/association/referenced/has_many/binding.rb +36 -0
- data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +44 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +502 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +545 -0
- data/lib/mongoid/association/referenced/has_many.rb +251 -0
- data/lib/mongoid/association/referenced/has_one/binding.rb +42 -0
- data/lib/mongoid/association/referenced/has_one/buildable.rb +74 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +36 -0
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +113 -0
- data/lib/mongoid/association/referenced/has_one/proxy.rb +111 -0
- data/lib/mongoid/association/referenced/has_one.rb +184 -0
- data/lib/mongoid/association/referenced/syncable.rb +155 -0
- data/lib/mongoid/association/referenced.rb +9 -0
- data/lib/mongoid/association/reflections.rb +69 -0
- data/lib/mongoid/association/relatable.rb +455 -0
- data/lib/mongoid/association.rb +135 -0
- data/lib/mongoid/atomic/modifiers.rb +27 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +24 -8
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -8
- data/lib/mongoid/atomic/paths/embedded.rb +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +43 -48
- data/lib/mongoid/attributes/dynamic.rb +19 -33
- data/lib/mongoid/attributes/nested.rb +29 -21
- data/lib/mongoid/attributes/processing.rb +11 -26
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +5 -10
- data/lib/mongoid/attributes.rb +94 -91
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +7 -61
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +17 -18
- data/lib/mongoid/clients/sessions.rb +22 -10
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +9 -13
- data/lib/mongoid/config/environment.rb +51 -13
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/client.rb +2 -17
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +123 -40
- data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
- data/lib/mongoid/contextual/aggregable/mongo.rb +25 -26
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +7 -38
- data/lib/mongoid/contextual/map_reduce.rb +5 -33
- data/lib/mongoid/contextual/memory.rb +167 -70
- data/lib/mongoid/contextual/mongo.rb +295 -106
- data/lib/mongoid/contextual/none.rb +88 -28
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +20 -14
- data/lib/mongoid/criteria/findable.rb +12 -15
- data/lib/mongoid/criteria/includable.rb +21 -28
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +2 -5
- data/lib/mongoid/criteria/modifiable.rb +10 -22
- data/lib/mongoid/criteria/options.rb +4 -5
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +5 -26
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -25
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -13
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -16
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -19
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
- data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +13 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +101 -27
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +205 -44
- data/lib/mongoid/criteria/queryable/optional.rb +5 -48
- data/lib/mongoid/criteria/queryable/options.rb +2 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +14 -19
- data/lib/mongoid/criteria/queryable/selectable.rb +436 -166
- data/lib/mongoid/criteria/queryable/selector.rb +45 -55
- data/lib/mongoid/criteria/queryable/smash.rb +2 -11
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +7 -9
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +90 -75
- data/lib/mongoid/document.rb +43 -74
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +25 -15
- data/lib/mongoid/errors/eager_load.rb +6 -5
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +31 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -9
- data/lib/mongoid/errors/invalid_relation_option.rb +28 -0
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/invalid_value.rb +2 -1
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +3 -10
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +2 -3
- data/lib/mongoid/errors/no_client_hosts.rb +2 -3
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -3
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -3
- data/lib/mongoid/errors/unknown_model.rb +24 -0
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +15 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +33 -42
- data/lib/mongoid/extensions/big_decimal.rb +2 -11
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +13 -12
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +56 -38
- data/lib/mongoid/extensions/integer.rb +5 -12
- data/lib/mongoid/extensions/module.rb +2 -3
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +21 -48
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +3 -11
- data/lib/mongoid/extensions/regexp.rb +3 -4
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +21 -41
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +12 -9
- data/lib/mongoid/extensions/time_with_zone.rb +25 -7
- data/lib/mongoid/extensions/true_class.rb +4 -7
- data/lib/mongoid/extensions.rb +18 -7
- data/lib/mongoid/factory.rb +59 -10
- data/lib/mongoid/fields/foreign_key.rb +8 -27
- data/lib/mongoid/fields/localized.rb +2 -11
- data/lib/mongoid/fields/standard.rb +8 -50
- data/lib/mongoid/fields/validators/macro.rb +37 -19
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +245 -70
- data/lib/mongoid/findable.rb +78 -27
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +10 -22
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +18 -35
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +3 -153
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +110 -0
- data/lib/mongoid/persistable/creatable.rb +4 -21
- data/lib/mongoid/persistable/deletable.rb +11 -26
- data/lib/mongoid/persistable/destroyable.rb +11 -10
- data/lib/mongoid/persistable/incrementable.rb +7 -8
- data/lib/mongoid/persistable/logical.rb +5 -7
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +14 -10
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +3 -8
- data/lib/mongoid/persistable/settable.rb +60 -18
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +32 -20
- data/lib/mongoid/persistable/upsertable.rb +4 -9
- data/lib/mongoid/persistable.rb +136 -42
- data/lib/mongoid/persistence_context.rb +101 -48
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +117 -130
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +3 -1
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +19 -44
- data/lib/mongoid/selectable.rb +8 -17
- data/lib/mongoid/serializable.rb +28 -33
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +3 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -5
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +2 -55
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +3 -2
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +3 -4
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +132 -0
- data/lib/mongoid/traversable.rb +183 -60
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +2 -3
- data/lib/mongoid/validatable/macros.rb +3 -8
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +25 -38
- data/lib/mongoid/validatable.rb +16 -35
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid/warnings.rb +29 -0
- data/lib/mongoid.rb +34 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -29
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +14 -3
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +349 -0
- data/spec/integration/associations/belongs_to_spec.rb +15 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +268 -0
- data/spec/integration/associations/embeds_many_spec.rb +206 -0
- data/spec/integration/associations/embeds_one_spec.rb +23 -0
- data/spec/integration/associations/foreign_key_spec.rb +98 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +176 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +61 -0
- data/spec/integration/callbacks_spec.rb +228 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/i18n_fallbacks_spec.rb +103 -0
- data/spec/integration/matcher_examples_spec.rb +758 -0
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +124 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +1067 -0
- data/spec/mongoid/association/auto_save_spec.rb +403 -0
- data/spec/mongoid/association/builders_spec.rb +255 -0
- data/spec/mongoid/association/constrainable_spec.rb +117 -0
- data/spec/mongoid/association/counter_cache_spec.rb +452 -0
- data/spec/mongoid/association/depending_spec.rb +959 -0
- data/spec/mongoid/association/eager_spec.rb +281 -0
- data/spec/mongoid/association/embedded/cyclic_spec.rb +180 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +67 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +173 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +36 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +559 -0
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +903 -0
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +106 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4673 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +190 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +864 -0
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +79 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +81 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1025 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +956 -0
- data/spec/mongoid/association/macros_spec.rb +1116 -0
- data/spec/mongoid/association/nested/many_spec.rb +232 -0
- data/spec/mongoid/association/nested/one_spec.rb +253 -0
- data/spec/mongoid/association/options_spec.rb +1323 -0
- data/spec/mongoid/association/polymorphic_spec.rb +162 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +243 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +238 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +412 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1373 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2046 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +180 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +148 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +196 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +3803 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +67 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1071 -0
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +155 -0
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +142 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +290 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2286 -0
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4112 -0
- data/spec/mongoid/association/referenced/has_many_models.rb +95 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +1248 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +133 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +159 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +193 -0
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1142 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1383 -0
- data/spec/mongoid/association/reflections_spec.rb +92 -0
- data/spec/mongoid/association/syncable_spec.rb +499 -0
- data/spec/mongoid/association_spec.rb +191 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +51 -2
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +107 -12
- data/spec/mongoid/atomic_spec.rb +57 -10
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +98 -78
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +44 -0
- data/spec/mongoid/attributes/readonly_spec.rb +84 -127
- data/spec/mongoid/attributes_spec.rb +461 -34
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +98 -9
- data/spec/mongoid/clients/options_spec.rb +93 -60
- data/spec/mongoid/clients/sessions_spec.rb +34 -33
- data/spec/mongoid/clients/transactions_spec.rb +415 -0
- data/spec/mongoid/clients_spec.rb +108 -16
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/environment_spec.rb +126 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +357 -2
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +242 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +30 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +24 -7
- data/spec/mongoid/contextual/memory_spec.rb +870 -88
- data/spec/mongoid/contextual/mongo_spec.rb +1339 -184
- data/spec/mongoid/contextual/none_spec.rb +45 -71
- data/spec/mongoid/copyable_spec.rb +294 -29
- data/spec/mongoid/copyable_spec_models.rb +47 -0
- data/spec/mongoid/criteria/findable_spec.rb +77 -20
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +215 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +53 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +42 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +30 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +14 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +2069 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1155 -2927
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +114 -2
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +298 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +826 -478
- data/spec/mongoid/document_fields_spec.rb +113 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +131 -31
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +51 -0
- data/spec/mongoid/errors/eager_load_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +2 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +36 -58
- data/spec/mongoid/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +2 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -160
- data/spec/mongoid/extensions/date_time_spec.rb +17 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +17 -3
- data/spec/mongoid/extensions/hash_spec.rb +123 -1
- data/spec/mongoid/extensions/integer_spec.rb +14 -2
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +20 -35
- data/spec/mongoid/extensions/range_spec.rb +9 -0
- data/spec/mongoid/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +60 -27
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/extensions/time_spec.rb +29 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +301 -23
- data/spec/mongoid/fields/foreign_key_spec.rb +26 -32
- data/spec/mongoid/fields/localized_spec.rb +6 -4
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +419 -37
- data/spec/mongoid/findable_spec.rb +83 -19
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +54 -14
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +189 -96
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -27
- data/spec/mongoid/persistable/deletable_spec.rb +273 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +91 -7
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +189 -26
- data/spec/mongoid/persistable/settable_spec.rb +149 -18
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +106 -15
- data/spec/mongoid/persistence_context_spec.rb +29 -2
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +529 -85
- data/spec/mongoid/relations/proxy_spec.rb +126 -124
- data/spec/mongoid/reloadable_spec.rb +298 -20
- data/spec/mongoid/scopable_spec.rb +102 -37
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +251 -26
- data/spec/mongoid/stateful_spec.rb +3 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +15 -13
- data/spec/mongoid/tasks/database_spec.rb +3 -1
- data/spec/mongoid/threaded_spec.rb +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +8 -6
- data/spec/mongoid/touchable_spec.rb +588 -0
- data/spec/mongoid/touchable_spec_models.rb +53 -0
- data/spec/mongoid/traversable_spec.rb +1167 -1
- data/spec/mongoid/validatable/associated_spec.rb +3 -1
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +33 -26
- data/spec/mongoid/validatable/uniqueness_spec.rb +102 -73
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid_spec.rb +9 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -1
- data/spec/rails/mongoid_spec.rb +4 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +291 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +325 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +392 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +70 -83
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +27 -75
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +31 -0
- data/spec/support/models/account.rb +38 -0
- data/spec/support/models/acolyte.rb +19 -0
- data/spec/support/models/actor.rb +20 -0
- data/spec/support/models/actress.rb +4 -0
- data/spec/support/models/address.rb +85 -0
- data/spec/support/models/address_component.rb +7 -0
- data/spec/support/models/address_number.rb +8 -0
- data/spec/support/models/agency.rb +7 -0
- data/spec/support/models/agent.rb +18 -0
- data/spec/support/models/album.rb +20 -0
- data/spec/support/models/alert.rb +9 -0
- data/spec/support/models/animal.rb +28 -0
- data/spec/support/models/answer.rb +8 -0
- data/spec/support/models/appointment.rb +9 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/support/models/article.rb +14 -0
- data/spec/support/models/artist.rb +91 -0
- data/spec/support/models/artwork.rb +6 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/support/models/audio.rb +7 -0
- data/spec/support/models/augmentation.rb +13 -0
- data/spec/support/models/author.rb +8 -0
- data/spec/support/models/baby.rb +6 -0
- data/spec/support/models/band.rb +37 -0
- data/spec/support/models/bar.rb +12 -0
- data/spec/support/models/basic.rb +8 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/support/models/big_palette.rb +4 -0
- data/spec/support/models/birthday.rb +15 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/support/models/bomb.rb +6 -0
- data/spec/support/models/book.rb +18 -0
- data/spec/support/models/breed.rb +6 -0
- data/spec/support/models/browser.rb +8 -0
- data/spec/support/models/building.rb +8 -0
- data/spec/support/models/building_address.rb +9 -0
- data/spec/support/models/bus.rb +9 -0
- data/spec/support/models/business.rb +7 -0
- data/spec/support/models/callback_test.rb +11 -0
- data/spec/support/models/canvas.rb +27 -0
- data/spec/support/models/car.rb +3 -0
- data/spec/support/models/cat.rb +10 -0
- data/spec/support/models/category.rb +10 -0
- data/spec/support/models/child.rb +6 -0
- data/spec/support/models/child_doc.rb +24 -0
- data/spec/support/models/church.rb +8 -0
- data/spec/support/models/circle.rb +5 -0
- data/spec/support/models/circuit.rb +6 -0
- data/spec/support/models/circus.rb +9 -0
- data/spec/support/models/code.rb +15 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/support/models/comment.rb +18 -0
- data/spec/support/models/company.rb +7 -0
- data/spec/support/models/consumption_period.rb +9 -0
- data/spec/support/models/contextable_item.rb +7 -0
- data/spec/support/models/contractor.rb +7 -0
- data/spec/support/models/cookie.rb +8 -0
- data/spec/support/models/country_code.rb +12 -0
- data/spec/support/models/courier_job.rb +6 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/support/models/definition.rb +11 -0
- data/spec/support/models/delegating_patient.rb +15 -0
- data/spec/support/models/description.rb +13 -0
- data/spec/support/models/dictionary.rb +18 -0
- data/spec/support/models/division.rb +12 -0
- data/spec/support/models/doctor.rb +14 -0
- data/spec/support/models/dog.rb +9 -0
- data/spec/support/models/dokument.rb +8 -0
- data/spec/support/models/draft.rb +11 -0
- data/spec/support/models/dragon.rb +6 -0
- data/spec/support/models/driver.rb +9 -0
- data/spec/support/models/drug.rb +8 -0
- data/spec/support/models/dungeon.rb +6 -0
- data/spec/support/models/edit.rb +7 -0
- data/spec/support/models/email.rb +8 -0
- data/spec/support/models/employer.rb +7 -0
- data/spec/support/models/entry.rb +8 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/support/models/even.rb +9 -0
- data/spec/support/models/event.rb +24 -0
- data/spec/support/models/exhibition.rb +6 -0
- data/spec/support/models/exhibitor.rb +8 -0
- data/spec/support/models/explosion.rb +6 -0
- data/spec/support/models/eye.rb +11 -0
- data/spec/support/models/eye_bowl.rb +11 -0
- data/spec/support/models/face.rb +10 -0
- data/spec/support/models/favorite.rb +8 -0
- data/spec/support/models/filesystem.rb +7 -0
- data/spec/support/models/fire_hydrant.rb +8 -0
- data/spec/support/models/firefox.rb +6 -0
- data/spec/support/models/fish.rb +9 -0
- data/spec/support/models/folder.rb +9 -0
- data/spec/support/models/folder_item.rb +11 -0
- data/spec/support/models/fruits.rb +36 -0
- data/spec/support/models/game.rb +21 -0
- data/spec/support/models/ghost.rb +9 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/support/models/home.rb +6 -0
- data/spec/support/models/house.rb +8 -0
- data/spec/support/models/html_writer.rb +5 -0
- data/spec/support/models/id_key.rb +8 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/support/models/image.rb +24 -0
- data/spec/support/models/implant.rb +18 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/support/models/item.rb +10 -0
- data/spec/support/models/jar.rb +9 -0
- data/spec/support/models/kaleidoscope.rb +8 -0
- data/spec/support/models/kangaroo.rb +6 -0
- data/spec/support/models/label.rb +50 -0
- data/spec/support/models/language.rb +7 -0
- data/spec/support/models/lat_lng.rb +17 -0
- data/spec/support/models/league.rb +13 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/support/models/line_item.rb +8 -0
- data/spec/support/models/location.rb +10 -0
- data/spec/support/models/login.rb +10 -0
- data/spec/support/models/manufacturer.rb +9 -0
- data/spec/support/models/meat.rb +6 -0
- data/spec/support/models/membership.rb +7 -0
- data/spec/support/models/message.rb +13 -0
- data/spec/support/models/minim.rb +6 -0
- data/spec/support/models/mixed_drink.rb +6 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/support/models/movie.rb +15 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/support/models/name.rb +26 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/support/models/node.rb +7 -0
- data/spec/support/models/note.rb +19 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/support/models/odd.rb +9 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/support/models/ordered_post.rb +13 -0
- data/spec/support/models/ordered_preference.rb +8 -0
- data/spec/support/models/oscar.rb +16 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/support/models/override.rb +18 -0
- data/spec/support/models/ownable.rb +8 -0
- data/spec/support/models/owner.rb +10 -0
- data/spec/support/models/pack.rb +5 -0
- data/spec/support/models/page.rb +18 -0
- data/spec/support/models/page_question.rb +6 -0
- data/spec/support/models/palette.rb +9 -0
- data/spec/support/models/parent.rb +7 -0
- data/spec/support/models/parent_doc.rb +8 -0
- data/spec/support/models/passport.rb +13 -0
- data/spec/support/models/patient.rb +11 -0
- data/spec/support/models/pdf_writer.rb +5 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/support/models/person.rb +230 -0
- data/spec/support/models/pet.rb +25 -0
- data/spec/support/models/pet_owner.rb +8 -0
- data/spec/support/models/phone.rb +13 -0
- data/spec/support/models/piano.rb +4 -0
- data/spec/support/models/pizza.rb +9 -0
- data/spec/support/models/player.rb +37 -0
- data/spec/support/models/post.rb +52 -0
- data/spec/support/models/post_genre.rb +8 -0
- data/spec/support/models/powerup.rb +13 -0
- data/spec/support/models/preference.rb +11 -0
- data/spec/support/models/princess.rb +12 -0
- data/spec/support/models/product.rb +19 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/support/models/pronunciation.rb +7 -0
- data/spec/support/models/pub.rb +8 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/support/models/purchase.rb +6 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/support/models/question.rb +10 -0
- data/spec/support/models/quiz.rb +9 -0
- data/spec/support/models/rating.rb +10 -0
- data/spec/support/models/record.rb +54 -0
- data/spec/support/models/registry.rb +6 -0
- data/spec/support/models/role.rb +9 -0
- data/spec/support/models/root_category.rb +6 -0
- data/spec/support/models/sandwich.rb +11 -0
- data/spec/support/models/scheduler.rb +9 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/support/models/seo.rb +9 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/support/models/server.rb +15 -0
- data/spec/support/models/service.rb +24 -0
- data/spec/support/models/shape.rb +14 -0
- data/spec/support/models/shelf.rb +7 -0
- data/spec/support/models/shipment_address.rb +5 -0
- data/spec/support/models/shipping_container.rb +7 -0
- data/spec/support/models/shipping_pack.rb +5 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/support/models/shop.rb +8 -0
- data/spec/support/models/short_agent.rb +6 -0
- data/spec/support/models/short_quiz.rb +7 -0
- data/spec/support/models/simple.rb +7 -0
- data/spec/support/models/slave.rb +8 -0
- data/spec/support/models/song.rb +10 -0
- data/spec/support/models/sound.rb +7 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/support/models/square.rb +6 -0
- data/spec/support/models/staff.rb +9 -0
- data/spec/support/models/store_as_dup_test1.rb +7 -0
- data/spec/support/models/store_as_dup_test2.rb +7 -0
- data/spec/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -0
- data/spec/support/models/strategy.rb +5 -0
- data/spec/support/models/sub_item.rb +5 -0
- data/spec/support/models/subscription.rb +7 -0
- data/spec/support/models/survey.rb +7 -0
- data/spec/support/models/symptom.rb +8 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/support/models/tag.rb +10 -0
- data/spec/support/models/target.rb +7 -0
- data/spec/support/models/template.rb +7 -0
- data/spec/support/models/thing.rb +11 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/support/models/title.rb +5 -0
- data/spec/support/models/tool.rb +10 -0
- data/spec/support/models/topping.rb +7 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/support/models/track.rb +40 -0
- data/spec/support/models/translation.rb +7 -0
- data/spec/support/models/tree.rb +11 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/support/models/updatable.rb +7 -0
- data/spec/support/models/user.rb +23 -0
- data/spec/support/models/user_account.rb +12 -0
- data/spec/support/models/validation_callback.rb +12 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/support/models/version.rb +7 -0
- data/spec/support/models/vertex.rb +8 -0
- data/spec/support/models/vet_visit.rb +7 -0
- data/spec/support/models/video.rb +15 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +13 -0
- data/spec/support/models/wiki_page.rb +17 -0
- data/spec/support/models/word.rb +17 -0
- data/spec/support/models/word_origin.rb +13 -0
- data/spec/support/models/writer.rb +13 -0
- data/spec/support/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +28 -6
- data.tar.gz.sig +0 -0
- metadata +1304 -843
- metadata.gz.sig +3 -5
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/matchable/all.rb +0 -27
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -72
- data/lib/mongoid/matchable/elem_match.rb +0 -28
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/mongoid/relations/accessors.rb +0 -267
- data/lib/mongoid/relations/auto_save.rb +0 -94
- data/lib/mongoid/relations/binding.rb +0 -218
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
- data/lib/mongoid/relations/bindings/embedded/many.rb +0 -43
- data/lib/mongoid/relations/bindings/embedded/one.rb +0 -45
- data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
- data/lib/mongoid/relations/bindings/referenced/many.rb +0 -38
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
- data/lib/mongoid/relations/bindings/referenced/one.rb +0 -44
- data/lib/mongoid/relations/bindings.rb +0 -9
- data/lib/mongoid/relations/builder.rb +0 -57
- data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
- data/lib/mongoid/relations/builders/embedded/many.rb +0 -36
- data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +0 -126
- data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
- data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
- data/lib/mongoid/relations/builders.rb +0 -106
- data/lib/mongoid/relations/cascading/delete.rb +0 -44
- data/lib/mongoid/relations/cascading/destroy.rb +0 -43
- data/lib/mongoid/relations/cascading/nullify.rb +0 -35
- data/lib/mongoid/relations/cascading/restrict.rb +0 -39
- data/lib/mongoid/relations/cascading.rb +0 -56
- data/lib/mongoid/relations/constraint.rb +0 -55
- data/lib/mongoid/relations/conversions.rb +0 -34
- data/lib/mongoid/relations/counter_cache.rb +0 -160
- data/lib/mongoid/relations/cyclic.rb +0 -107
- data/lib/mongoid/relations/eager/base.rb +0 -153
- data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
- data/lib/mongoid/relations/eager/has_many.rb +0 -38
- data/lib/mongoid/relations/eager/has_one.rb +0 -30
- data/lib/mongoid/relations/eager.rb +0 -36
- data/lib/mongoid/relations/embedded/batchable.rb +0 -384
- data/lib/mongoid/relations/embedded/in.rb +0 -241
- data/lib/mongoid/relations/embedded/many.rb +0 -683
- data/lib/mongoid/relations/embedded/one.rb +0 -235
- data/lib/mongoid/relations/macros.rb +0 -367
- data/lib/mongoid/relations/many.rb +0 -242
- data/lib/mongoid/relations/marshalable.rb +0 -32
- data/lib/mongoid/relations/metadata.rb +0 -1179
- data/lib/mongoid/relations/nested_builder.rb +0 -74
- data/lib/mongoid/relations/one.rb +0 -60
- data/lib/mongoid/relations/options.rb +0 -49
- data/lib/mongoid/relations/polymorphic.rb +0 -39
- data/lib/mongoid/relations/proxy.rb +0 -215
- data/lib/mongoid/relations/referenced/in.rb +0 -304
- data/lib/mongoid/relations/referenced/many.rb +0 -812
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
- data/lib/mongoid/relations/referenced/one.rb +0 -290
- data/lib/mongoid/relations/reflections.rb +0 -64
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets/enumerable.rb +0 -493
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -97
- data/lib/mongoid/relations.rb +0 -148
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/account.rb +0 -36
- data/spec/app/models/acolyte.rb +0 -17
- data/spec/app/models/actor.rb +0 -18
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/address.rb +0 -79
- data/spec/app/models/address_component.rb +0 -5
- data/spec/app/models/address_number.rb +0 -6
- data/spec/app/models/agency.rb +0 -5
- data/spec/app/models/agent.rb +0 -16
- data/spec/app/models/album.rb +0 -18
- data/spec/app/models/alert.rb +0 -7
- data/spec/app/models/animal.rb +0 -25
- data/spec/app/models/answer.rb +0 -6
- data/spec/app/models/appointment.rb +0 -7
- data/spec/app/models/article.rb +0 -12
- data/spec/app/models/artist.rb +0 -87
- data/spec/app/models/artwork.rb +0 -4
- data/spec/app/models/audio.rb +0 -5
- data/spec/app/models/augmentation.rb +0 -11
- data/spec/app/models/author.rb +0 -6
- data/spec/app/models/baby.rb +0 -4
- data/spec/app/models/band.rb +0 -31
- data/spec/app/models/bar.rb +0 -10
- data/spec/app/models/basic.rb +0 -6
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/big_palette.rb +0 -2
- data/spec/app/models/birthday.rb +0 -13
- data/spec/app/models/bomb.rb +0 -4
- data/spec/app/models/book.rb +0 -16
- data/spec/app/models/breed.rb +0 -4
- data/spec/app/models/browser.rb +0 -6
- data/spec/app/models/building.rb +0 -6
- data/spec/app/models/building_address.rb +0 -7
- data/spec/app/models/bus.rb +0 -7
- data/spec/app/models/business.rb +0 -5
- data/spec/app/models/callback_test.rb +0 -9
- data/spec/app/models/canvas.rb +0 -25
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/cat.rb +0 -8
- data/spec/app/models/category.rb +0 -8
- data/spec/app/models/child.rb +0 -4
- data/spec/app/models/child_doc.rb +0 -22
- data/spec/app/models/church.rb +0 -6
- data/spec/app/models/circle.rb +0 -3
- data/spec/app/models/circuit.rb +0 -4
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/code.rb +0 -11
- data/spec/app/models/comment.rb +0 -16
- data/spec/app/models/company.rb +0 -5
- data/spec/app/models/consumption_period.rb +0 -7
- data/spec/app/models/contextable_item.rb +0 -5
- data/spec/app/models/contractor.rb +0 -5
- data/spec/app/models/cookie.rb +0 -6
- data/spec/app/models/country_code.rb +0 -8
- data/spec/app/models/courier_job.rb +0 -4
- data/spec/app/models/definition.rb +0 -9
- data/spec/app/models/delegating_patient.rb +0 -16
- data/spec/app/models/description.rb +0 -11
- data/spec/app/models/dictionary.rb +0 -10
- data/spec/app/models/division.rb +0 -10
- data/spec/app/models/doctor.rb +0 -12
- data/spec/app/models/dog.rb +0 -7
- data/spec/app/models/dokument.rb +0 -6
- data/spec/app/models/draft.rb +0 -9
- data/spec/app/models/dragon.rb +0 -4
- data/spec/app/models/driver.rb +0 -7
- data/spec/app/models/drug.rb +0 -6
- data/spec/app/models/dungeon.rb +0 -4
- data/spec/app/models/edit.rb +0 -5
- data/spec/app/models/email.rb +0 -6
- data/spec/app/models/employer.rb +0 -5
- data/spec/app/models/entry.rb +0 -6
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/even.rb +0 -7
- data/spec/app/models/event.rb +0 -22
- data/spec/app/models/exhibition.rb +0 -4
- data/spec/app/models/exhibitor.rb +0 -6
- data/spec/app/models/explosion.rb +0 -4
- data/spec/app/models/eye.rb +0 -9
- data/spec/app/models/eye_bowl.rb +0 -9
- data/spec/app/models/face.rb +0 -8
- data/spec/app/models/favorite.rb +0 -6
- data/spec/app/models/filesystem.rb +0 -5
- data/spec/app/models/fire_hydrant.rb +0 -6
- data/spec/app/models/firefox.rb +0 -4
- data/spec/app/models/fish.rb +0 -7
- data/spec/app/models/folder.rb +0 -7
- data/spec/app/models/folder_item.rb +0 -9
- data/spec/app/models/fruits.rb +0 -34
- data/spec/app/models/game.rb +0 -19
- data/spec/app/models/ghost.rb +0 -7
- data/spec/app/models/home.rb +0 -4
- data/spec/app/models/house.rb +0 -6
- data/spec/app/models/html_writer.rb +0 -3
- data/spec/app/models/id_key.rb +0 -6
- data/spec/app/models/image.rb +0 -22
- data/spec/app/models/implant.rb +0 -16
- data/spec/app/models/item.rb +0 -8
- data/spec/app/models/jar.rb +0 -7
- data/spec/app/models/kaleidoscope.rb +0 -6
- data/spec/app/models/kangaroo.rb +0 -4
- data/spec/app/models/label.rb +0 -47
- data/spec/app/models/language.rb +0 -5
- data/spec/app/models/lat_lng.rb +0 -15
- data/spec/app/models/league.rb +0 -11
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/line_item.rb +0 -6
- data/spec/app/models/location.rb +0 -8
- data/spec/app/models/login.rb +0 -8
- data/spec/app/models/manufacturer.rb +0 -7
- data/spec/app/models/meat.rb +0 -4
- data/spec/app/models/membership.rb +0 -4
- data/spec/app/models/message.rb +0 -11
- data/spec/app/models/mixed_drink.rb +0 -4
- data/spec/app/models/movie.rb +0 -13
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/name.rb +0 -24
- data/spec/app/models/node.rb +0 -5
- data/spec/app/models/note.rb +0 -17
- data/spec/app/models/odd.rb +0 -7
- data/spec/app/models/ordered_post.rb +0 -11
- data/spec/app/models/ordered_preference.rb +0 -6
- data/spec/app/models/oscar.rb +0 -14
- data/spec/app/models/override.rb +0 -16
- data/spec/app/models/ownable.rb +0 -6
- data/spec/app/models/owner.rb +0 -6
- data/spec/app/models/pack.rb +0 -3
- data/spec/app/models/page.rb +0 -16
- data/spec/app/models/page_question.rb +0 -4
- data/spec/app/models/palette.rb +0 -7
- data/spec/app/models/parent.rb +0 -5
- data/spec/app/models/parent_doc.rb +0 -6
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/patient.rb +0 -9
- data/spec/app/models/pdf_writer.rb +0 -3
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/person.rb +0 -207
- data/spec/app/models/pet.rb +0 -23
- data/spec/app/models/pet_owner.rb +0 -6
- data/spec/app/models/phone.rb +0 -9
- data/spec/app/models/pizza.rb +0 -7
- data/spec/app/models/player.rb +0 -35
- data/spec/app/models/post.rb +0 -50
- data/spec/app/models/post_genre.rb +0 -6
- data/spec/app/models/powerup.rb +0 -11
- data/spec/app/models/preference.rb +0 -9
- data/spec/app/models/princess.rb +0 -10
- data/spec/app/models/product.rb +0 -17
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/pronunciation.rb +0 -5
- data/spec/app/models/pub.rb +0 -6
- data/spec/app/models/purchase.rb +0 -4
- data/spec/app/models/question.rb +0 -8
- data/spec/app/models/quiz.rb +0 -7
- data/spec/app/models/rating.rb +0 -8
- data/spec/app/models/record.rb +0 -52
- data/spec/app/models/registry.rb +0 -4
- data/spec/app/models/role.rb +0 -7
- data/spec/app/models/root_category.rb +0 -4
- data/spec/app/models/sandwich.rb +0 -9
- data/spec/app/models/scheduler.rb +0 -7
- data/spec/app/models/seo.rb +0 -7
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/server.rb +0 -13
- data/spec/app/models/service.rb +0 -22
- data/spec/app/models/shape.rb +0 -12
- data/spec/app/models/shelf.rb +0 -5
- data/spec/app/models/shipment_address.rb +0 -2
- data/spec/app/models/shipping_container.rb +0 -5
- data/spec/app/models/shipping_pack.rb +0 -3
- data/spec/app/models/shop.rb +0 -6
- data/spec/app/models/short_agent.rb +0 -4
- data/spec/app/models/short_quiz.rb +0 -5
- data/spec/app/models/simple.rb +0 -5
- data/spec/app/models/slave.rb +0 -6
- data/spec/app/models/song.rb +0 -8
- data/spec/app/models/sound.rb +0 -5
- data/spec/app/models/square.rb +0 -4
- data/spec/app/models/staff.rb +0 -7
- data/spec/app/models/store_as_dup_test1.rb +0 -5
- data/spec/app/models/store_as_dup_test2.rb +0 -5
- data/spec/app/models/strategy.rb +0 -3
- data/spec/app/models/sub_item.rb +0 -3
- data/spec/app/models/subscription.rb +0 -5
- data/spec/app/models/survey.rb +0 -5
- data/spec/app/models/symptom.rb +0 -6
- data/spec/app/models/tag.rb +0 -8
- data/spec/app/models/target.rb +0 -5
- data/spec/app/models/template.rb +0 -5
- data/spec/app/models/thing.rb +0 -9
- data/spec/app/models/title.rb +0 -3
- data/spec/app/models/tool.rb +0 -8
- data/spec/app/models/topping.rb +0 -5
- data/spec/app/models/track.rb +0 -38
- data/spec/app/models/translation.rb +0 -5
- data/spec/app/models/tree.rb +0 -9
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/user.rb +0 -21
- data/spec/app/models/user_account.rb +0 -10
- data/spec/app/models/validation_callback.rb +0 -10
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/version.rb +0 -5
- data/spec/app/models/vet_visit.rb +0 -5
- data/spec/app/models/video.rb +0 -13
- data/spec/app/models/video_game.rb +0 -1
- data/spec/app/models/weapon.rb +0 -11
- data/spec/app/models/wiki_page.rb +0 -14
- data/spec/app/models/word.rb +0 -15
- data/spec/app/models/word_origin.rb +0 -11
- data/spec/app/models/writer.rb +0 -11
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -130
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -86
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- data/spec/mongoid/relations/accessors_spec.rb +0 -821
- data/spec/mongoid/relations/auto_save_spec.rb +0 -314
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +0 -171
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +0 -54
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +0 -77
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +0 -241
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +0 -153
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +0 -131
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +0 -132
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +0 -99
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +0 -233
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +0 -250
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +0 -230
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
- data/spec/mongoid/relations/builders_spec.rb +0 -253
- data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
- data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
- data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
- data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
- data/spec/mongoid/relations/cascading_spec.rb +0 -355
- data/spec/mongoid/relations/constraint_spec.rb +0 -75
- data/spec/mongoid/relations/conversions_spec.rb +0 -128
- data/spec/mongoid/relations/counter_cache_spec.rb +0 -450
- data/spec/mongoid/relations/cyclic_spec.rb +0 -178
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +0 -163
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +0 -133
- data/spec/mongoid/relations/eager/has_many_spec.rb +0 -244
- data/spec/mongoid/relations/eager/has_one_spec.rb +0 -163
- data/spec/mongoid/relations/eager_spec.rb +0 -279
- data/spec/mongoid/relations/embedded/dirty_spec.rb +0 -65
- data/spec/mongoid/relations/embedded/in_spec.rb +0 -579
- data/spec/mongoid/relations/embedded/many_spec.rb +0 -4412
- data/spec/mongoid/relations/embedded/one_spec.rb +0 -1068
- data/spec/mongoid/relations/macros_spec.rb +0 -1039
- data/spec/mongoid/relations/metadata_spec.rb +0 -1985
- data/spec/mongoid/relations/options_spec.rb +0 -35
- data/spec/mongoid/relations/polymorphic_spec.rb +0 -128
- data/spec/mongoid/relations/referenced/in_spec.rb +0 -1366
- data/spec/mongoid/relations/referenced/many_spec.rb +0 -3816
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +0 -3577
- data/spec/mongoid/relations/referenced/one_spec.rb +0 -1240
- data/spec/mongoid/relations/reflections_spec.rb +0 -101
- data/spec/mongoid/relations/synchronization_spec.rb +0 -495
- data/spec/mongoid/relations/targets/enumerable_spec.rb +0 -1825
- data/spec/mongoid/relations/touchable_spec.rb +0 -402
- data/spec/mongoid/relations_spec.rb +0 -189
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/session_registry.rb +0 -50
- /data/spec/{app → support}/models/array_field.rb +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
2
4
|
|
|
3
5
|
describe Mongoid::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")
|
|
824
|
+
end
|
|
825
|
+
|
|
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
|
|
773
847
|
end
|
|
774
848
|
|
|
775
|
-
|
|
776
|
-
|
|
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
|
|
@@ -982,7 +1059,7 @@ describe Mongoid::Criteria do
|
|
|
982
1059
|
end
|
|
983
1060
|
|
|
984
1061
|
let!(:match) do
|
|
985
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
1062
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
986
1063
|
end
|
|
987
1064
|
|
|
988
1065
|
let(:criteria) do
|
|
@@ -994,7 +1071,7 @@ describe Mongoid::Criteria do
|
|
|
994
1071
|
end
|
|
995
1072
|
end
|
|
996
1073
|
|
|
997
|
-
describe "#
|
|
1074
|
+
describe "#eq" do
|
|
998
1075
|
|
|
999
1076
|
let!(:match) do
|
|
1000
1077
|
Band.create(member_count: 5)
|
|
@@ -1004,6 +1081,25 @@ describe Mongoid::Criteria do
|
|
|
1004
1081
|
Band.create(member_count: 1)
|
|
1005
1082
|
end
|
|
1006
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
|
+
|
|
1007
1103
|
let(:criteria) do
|
|
1008
1104
|
Band.gt(member_count: 4)
|
|
1009
1105
|
end
|
|
@@ -1016,11 +1112,11 @@ describe Mongoid::Criteria do
|
|
|
1016
1112
|
describe "#gte" do
|
|
1017
1113
|
|
|
1018
1114
|
let!(:match) do
|
|
1019
|
-
Band.create(member_count: 5)
|
|
1115
|
+
Band.create!(member_count: 5)
|
|
1020
1116
|
end
|
|
1021
1117
|
|
|
1022
1118
|
let!(:non_match) do
|
|
1023
|
-
Band.create(member_count: 1)
|
|
1119
|
+
Band.create!(member_count: 1)
|
|
1024
1120
|
end
|
|
1025
1121
|
|
|
1026
1122
|
let(:criteria) do
|
|
@@ -1039,11 +1135,11 @@ describe Mongoid::Criteria do
|
|
|
1039
1135
|
context "when querying on a normal field" do
|
|
1040
1136
|
|
|
1041
1137
|
let!(:match) do
|
|
1042
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
1138
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
1043
1139
|
end
|
|
1044
1140
|
|
|
1045
1141
|
let!(:non_match) do
|
|
1046
|
-
Band.create(genres: [ "house" ])
|
|
1142
|
+
Band.create!(genres: [ "house" ])
|
|
1047
1143
|
end
|
|
1048
1144
|
|
|
1049
1145
|
let(:criteria) do
|
|
@@ -1062,7 +1158,7 @@ describe Mongoid::Criteria do
|
|
|
1062
1158
|
end
|
|
1063
1159
|
|
|
1064
1160
|
let!(:match_one) do
|
|
1065
|
-
Person.create(preference_ids: [ id ])
|
|
1161
|
+
Person.create!(preference_ids: [ id ])
|
|
1066
1162
|
end
|
|
1067
1163
|
|
|
1068
1164
|
context "when providing valid ids" do
|
|
@@ -1103,7 +1199,7 @@ describe Mongoid::Criteria do
|
|
|
1103
1199
|
context "when the relation is a one to one" do
|
|
1104
1200
|
|
|
1105
1201
|
let!(:game) do
|
|
1106
|
-
Game.create
|
|
1202
|
+
Game.create!
|
|
1107
1203
|
end
|
|
1108
1204
|
|
|
1109
1205
|
let(:criteria) do
|
|
@@ -1141,7 +1237,7 @@ describe Mongoid::Criteria do
|
|
|
1141
1237
|
describe "#includes" do
|
|
1142
1238
|
|
|
1143
1239
|
let!(:person) do
|
|
1144
|
-
Person.create(age: 1)
|
|
1240
|
+
Person.create!(age: 1)
|
|
1145
1241
|
end
|
|
1146
1242
|
|
|
1147
1243
|
context "when providing a name that is not a relation" do
|
|
@@ -1156,11 +1252,11 @@ describe Mongoid::Criteria do
|
|
|
1156
1252
|
context "when providing one association" do
|
|
1157
1253
|
|
|
1158
1254
|
let!(:user) do
|
|
1159
|
-
User.create(posts: [ post1 ])
|
|
1255
|
+
User.create!(posts: [ post1 ])
|
|
1160
1256
|
end
|
|
1161
1257
|
|
|
1162
1258
|
let!(:post1) do
|
|
1163
|
-
Post.create
|
|
1259
|
+
Post.create!
|
|
1164
1260
|
end
|
|
1165
1261
|
|
|
1166
1262
|
let(:result) do
|
|
@@ -1179,15 +1275,15 @@ describe Mongoid::Criteria do
|
|
|
1179
1275
|
context "when providing a list of associations" do
|
|
1180
1276
|
|
|
1181
1277
|
let!(:user) do
|
|
1182
|
-
User.create(posts: [ post1 ], descriptions: [ description1 ])
|
|
1278
|
+
User.create!(posts: [ post1 ], descriptions: [ description1 ])
|
|
1183
1279
|
end
|
|
1184
1280
|
|
|
1185
1281
|
let!(:post1) do
|
|
1186
|
-
Post.create
|
|
1282
|
+
Post.create!
|
|
1187
1283
|
end
|
|
1188
1284
|
|
|
1189
1285
|
let!(:description1) do
|
|
1190
|
-
Description.create(details: 1)
|
|
1286
|
+
Description.create!(details: 1)
|
|
1191
1287
|
end
|
|
1192
1288
|
|
|
1193
1289
|
let(:result) do
|
|
@@ -1207,13 +1303,13 @@ describe Mongoid::Criteria do
|
|
|
1207
1303
|
context "when providing a nested association" do
|
|
1208
1304
|
|
|
1209
1305
|
let!(:user) do
|
|
1210
|
-
User.create
|
|
1306
|
+
User.create!
|
|
1211
1307
|
end
|
|
1212
1308
|
|
|
1213
1309
|
before do
|
|
1214
|
-
p = Post.create(alerts: [ Alert.create ])
|
|
1310
|
+
p = Post.create!(alerts: [ Alert.create! ])
|
|
1215
1311
|
user.posts = [ p ]
|
|
1216
|
-
user.save
|
|
1312
|
+
user.save!
|
|
1217
1313
|
end
|
|
1218
1314
|
|
|
1219
1315
|
let(:result) do
|
|
@@ -1233,7 +1329,7 @@ describe Mongoid::Criteria do
|
|
|
1233
1329
|
context "when providing a deeply nested association" do
|
|
1234
1330
|
|
|
1235
1331
|
let!(:user) do
|
|
1236
|
-
User.create
|
|
1332
|
+
User.create!
|
|
1237
1333
|
end
|
|
1238
1334
|
|
|
1239
1335
|
let(:results) do
|
|
@@ -1271,15 +1367,15 @@ describe Mongoid::Criteria do
|
|
|
1271
1367
|
context "when the includes is on the subclass" do
|
|
1272
1368
|
|
|
1273
1369
|
let!(:c_one) do
|
|
1274
|
-
C.create
|
|
1370
|
+
C.create!
|
|
1275
1371
|
end
|
|
1276
1372
|
|
|
1277
1373
|
let!(:c_two) do
|
|
1278
|
-
C.create
|
|
1374
|
+
C.create!
|
|
1279
1375
|
end
|
|
1280
1376
|
|
|
1281
1377
|
let!(:b) do
|
|
1282
|
-
B.create(c: c_two)
|
|
1378
|
+
B.create!(c: c_two)
|
|
1283
1379
|
end
|
|
1284
1380
|
|
|
1285
1381
|
let!(:results) do
|
|
@@ -1334,19 +1430,19 @@ describe Mongoid::Criteria do
|
|
|
1334
1430
|
context "when the includes is on the several relations" do
|
|
1335
1431
|
|
|
1336
1432
|
let!(:d_one) do
|
|
1337
|
-
D.create
|
|
1433
|
+
D.create!
|
|
1338
1434
|
end
|
|
1339
1435
|
|
|
1340
1436
|
let!(:d_two) do
|
|
1341
|
-
D.create
|
|
1437
|
+
D.create!
|
|
1342
1438
|
end
|
|
1343
1439
|
|
|
1344
1440
|
let!(:b) do
|
|
1345
|
-
B.create(d: d_two)
|
|
1441
|
+
B.create!(d: d_two)
|
|
1346
1442
|
end
|
|
1347
1443
|
|
|
1348
1444
|
let!(:c) do
|
|
1349
|
-
C.create(d: d_two)
|
|
1445
|
+
C.create!(d: d_two)
|
|
1350
1446
|
end
|
|
1351
1447
|
|
|
1352
1448
|
let!(:results) do
|
|
@@ -1405,19 +1501,19 @@ describe Mongoid::Criteria do
|
|
|
1405
1501
|
context "when the includes is on the several relations" do
|
|
1406
1502
|
|
|
1407
1503
|
let!(:d_one) do
|
|
1408
|
-
D.create
|
|
1504
|
+
D.create!
|
|
1409
1505
|
end
|
|
1410
1506
|
|
|
1411
1507
|
let!(:d_two) do
|
|
1412
|
-
D.create
|
|
1508
|
+
D.create!
|
|
1413
1509
|
end
|
|
1414
1510
|
|
|
1415
1511
|
let!(:bs) do
|
|
1416
|
-
2.times.map { B.create(d: d_two) }
|
|
1512
|
+
2.times.map { B.create!(d: d_two) }
|
|
1417
1513
|
end
|
|
1418
1514
|
|
|
1419
1515
|
let!(:cs) do
|
|
1420
|
-
2.times.map { C.create(d: d_two) }
|
|
1516
|
+
2.times.map { C.create!(d: d_two) }
|
|
1421
1517
|
end
|
|
1422
1518
|
|
|
1423
1519
|
let!(:results) do
|
|
@@ -1445,25 +1541,25 @@ describe Mongoid::Criteria do
|
|
|
1445
1541
|
end
|
|
1446
1542
|
end
|
|
1447
1543
|
|
|
1448
|
-
context "when including the same
|
|
1544
|
+
context "when including the same association multiple times" do
|
|
1449
1545
|
|
|
1450
1546
|
let(:criteria) do
|
|
1451
1547
|
Person.all.includes(:posts, :posts).includes(:posts)
|
|
1452
1548
|
end
|
|
1453
1549
|
|
|
1454
|
-
let(:
|
|
1550
|
+
let(:association) do
|
|
1455
1551
|
Person.reflect_on_association(:posts)
|
|
1456
1552
|
end
|
|
1457
1553
|
|
|
1458
|
-
it "does not duplicate the
|
|
1459
|
-
expect(criteria.inclusions).to eq([
|
|
1554
|
+
it "does not duplicate the association in the inclusions" do
|
|
1555
|
+
expect(criteria.inclusions).to eq([ association ])
|
|
1460
1556
|
end
|
|
1461
1557
|
end
|
|
1462
1558
|
|
|
1463
1559
|
context "when mapping the results more than once" do
|
|
1464
1560
|
|
|
1465
1561
|
let!(:post) do
|
|
1466
|
-
person.posts.create(title: "one")
|
|
1562
|
+
person.posts.create!(title: "one")
|
|
1467
1563
|
end
|
|
1468
1564
|
|
|
1469
1565
|
let(:criteria) do
|
|
@@ -1485,15 +1581,15 @@ describe Mongoid::Criteria do
|
|
|
1485
1581
|
context "when the criteria is from the root" do
|
|
1486
1582
|
|
|
1487
1583
|
let!(:person_two) do
|
|
1488
|
-
Person.create(age: 2)
|
|
1584
|
+
Person.create!(age: 2)
|
|
1489
1585
|
end
|
|
1490
1586
|
|
|
1491
1587
|
let!(:post_one) do
|
|
1492
|
-
person.posts.create(title: "one")
|
|
1588
|
+
person.posts.create!(title: "one")
|
|
1493
1589
|
end
|
|
1494
1590
|
|
|
1495
1591
|
let!(:post_two) do
|
|
1496
|
-
person_two.posts.create(title: "two")
|
|
1592
|
+
person_two.posts.create!(title: "two")
|
|
1497
1593
|
end
|
|
1498
1594
|
|
|
1499
1595
|
context "when calling first" do
|
|
@@ -1542,15 +1638,15 @@ describe Mongoid::Criteria do
|
|
|
1542
1638
|
context "when the criteria is from an embedded relation" do
|
|
1543
1639
|
|
|
1544
1640
|
let(:peep) do
|
|
1545
|
-
Person.create
|
|
1641
|
+
Person.create!
|
|
1546
1642
|
end
|
|
1547
1643
|
|
|
1548
1644
|
let!(:address_one) do
|
|
1549
|
-
peep.addresses.create(street: "rosenthaler")
|
|
1645
|
+
peep.addresses.create!(street: "rosenthaler")
|
|
1550
1646
|
end
|
|
1551
1647
|
|
|
1552
1648
|
let!(:address_two) do
|
|
1553
|
-
peep.addresses.create(street: "weinmeister")
|
|
1649
|
+
peep.addresses.create!(street: "weinmeister")
|
|
1554
1650
|
end
|
|
1555
1651
|
|
|
1556
1652
|
let!(:depeche) do
|
|
@@ -1564,8 +1660,8 @@ describe Mongoid::Criteria do
|
|
|
1564
1660
|
before do
|
|
1565
1661
|
address_one.band = depeche
|
|
1566
1662
|
address_two.band = tool
|
|
1567
|
-
address_one.save
|
|
1568
|
-
address_two.save
|
|
1663
|
+
address_one.save!
|
|
1664
|
+
address_two.save!
|
|
1569
1665
|
end
|
|
1570
1666
|
|
|
1571
1667
|
context "when calling first" do
|
|
@@ -1662,11 +1758,11 @@ describe Mongoid::Criteria do
|
|
|
1662
1758
|
end
|
|
1663
1759
|
|
|
1664
1760
|
let!(:post_one) do
|
|
1665
|
-
person.posts.create(title: "one")
|
|
1761
|
+
person.posts.create!(title: "one")
|
|
1666
1762
|
end
|
|
1667
1763
|
|
|
1668
1764
|
let!(:post_two) do
|
|
1669
|
-
person.posts.create(title: "two")
|
|
1765
|
+
person.posts.create!(title: "two")
|
|
1670
1766
|
end
|
|
1671
1767
|
|
|
1672
1768
|
context "when the criteria has no options" do
|
|
@@ -1784,11 +1880,11 @@ describe Mongoid::Criteria do
|
|
|
1784
1880
|
context "when the criteria has limiting options" do
|
|
1785
1881
|
|
|
1786
1882
|
let!(:person_two) do
|
|
1787
|
-
Person.create
|
|
1883
|
+
Person.create!
|
|
1788
1884
|
end
|
|
1789
1885
|
|
|
1790
1886
|
let!(:post_three) do
|
|
1791
|
-
person_two.posts.create(title: "three")
|
|
1887
|
+
person_two.posts.create!(title: "three")
|
|
1792
1888
|
end
|
|
1793
1889
|
|
|
1794
1890
|
let!(:criteria) do
|
|
@@ -1820,11 +1916,11 @@ describe Mongoid::Criteria do
|
|
|
1820
1916
|
context "when including a has and belongs to many" do
|
|
1821
1917
|
|
|
1822
1918
|
let!(:preference_one) do
|
|
1823
|
-
person.preferences.create(name: "one")
|
|
1919
|
+
person.preferences.create!(name: "one")
|
|
1824
1920
|
end
|
|
1825
1921
|
|
|
1826
1922
|
let!(:preference_two) do
|
|
1827
|
-
person.preferences.create(name: "two")
|
|
1923
|
+
person.preferences.create!(name: "two")
|
|
1828
1924
|
end
|
|
1829
1925
|
|
|
1830
1926
|
context "when one of the related items is deleted" do
|
|
@@ -1928,11 +2024,11 @@ describe Mongoid::Criteria do
|
|
|
1928
2024
|
context "when including a has many" do
|
|
1929
2025
|
|
|
1930
2026
|
let!(:post_one) do
|
|
1931
|
-
person.posts.create(title: "one")
|
|
2027
|
+
person.posts.create!(title: "one")
|
|
1932
2028
|
end
|
|
1933
2029
|
|
|
1934
2030
|
let!(:post_two) do
|
|
1935
|
-
person.posts.create(title: "two")
|
|
2031
|
+
person.posts.create!(title: "two")
|
|
1936
2032
|
end
|
|
1937
2033
|
|
|
1938
2034
|
context "when the criteria has no options" do
|
|
@@ -2017,11 +2113,11 @@ describe Mongoid::Criteria do
|
|
|
2017
2113
|
context "when the criteria has limiting options" do
|
|
2018
2114
|
|
|
2019
2115
|
let!(:person_two) do
|
|
2020
|
-
Person.create
|
|
2116
|
+
Person.create!
|
|
2021
2117
|
end
|
|
2022
2118
|
|
|
2023
2119
|
let!(:post_three) do
|
|
2024
|
-
person_two.posts.create(title: "three")
|
|
2120
|
+
person_two.posts.create!(title: "three")
|
|
2025
2121
|
end
|
|
2026
2122
|
|
|
2027
2123
|
let!(:criteria) do
|
|
@@ -2082,7 +2178,7 @@ describe Mongoid::Criteria do
|
|
|
2082
2178
|
context "when the criteria has limiting options" do
|
|
2083
2179
|
|
|
2084
2180
|
let!(:person_two) do
|
|
2085
|
-
Person.create(age: 2)
|
|
2181
|
+
Person.create!(age: 2)
|
|
2086
2182
|
end
|
|
2087
2183
|
|
|
2088
2184
|
let!(:game_three) do
|
|
@@ -2114,7 +2210,7 @@ describe Mongoid::Criteria do
|
|
|
2114
2210
|
context "when including a belongs to" do
|
|
2115
2211
|
|
|
2116
2212
|
let(:person_two) do
|
|
2117
|
-
Person.create(age: 2)
|
|
2213
|
+
Person.create!(age: 2)
|
|
2118
2214
|
end
|
|
2119
2215
|
|
|
2120
2216
|
let!(:game_one) do
|
|
@@ -2175,11 +2271,11 @@ describe Mongoid::Criteria do
|
|
|
2175
2271
|
context "when including multiples in the same criteria" do
|
|
2176
2272
|
|
|
2177
2273
|
let!(:post_one) do
|
|
2178
|
-
person.posts.create(title: "one")
|
|
2274
|
+
person.posts.create!(title: "one")
|
|
2179
2275
|
end
|
|
2180
2276
|
|
|
2181
2277
|
let!(:post_two) do
|
|
2182
|
-
person.posts.create(title: "two")
|
|
2278
|
+
person.posts.create!(title: "two")
|
|
2183
2279
|
end
|
|
2184
2280
|
|
|
2185
2281
|
let!(:game_one) do
|
|
@@ -2218,12 +2314,12 @@ describe Mongoid::Criteria do
|
|
|
2218
2314
|
Band.includes(:records)
|
|
2219
2315
|
end
|
|
2220
2316
|
|
|
2221
|
-
let(:
|
|
2317
|
+
let(:association) do
|
|
2222
2318
|
Band.relations["records"]
|
|
2223
2319
|
end
|
|
2224
2320
|
|
|
2225
2321
|
it "returns the inclusions" do
|
|
2226
|
-
expect(criteria.inclusions).to eq([
|
|
2322
|
+
expect(criteria.inclusions).to eq([ association ])
|
|
2227
2323
|
end
|
|
2228
2324
|
end
|
|
2229
2325
|
|
|
@@ -2233,27 +2329,27 @@ describe Mongoid::Criteria do
|
|
|
2233
2329
|
Band.all
|
|
2234
2330
|
end
|
|
2235
2331
|
|
|
2236
|
-
let(:
|
|
2332
|
+
let(:association) do
|
|
2237
2333
|
Band.relations["records"]
|
|
2238
2334
|
end
|
|
2239
2335
|
|
|
2240
2336
|
before do
|
|
2241
|
-
criteria.inclusions = [
|
|
2337
|
+
criteria.inclusions = [ association ]
|
|
2242
2338
|
end
|
|
2243
2339
|
|
|
2244
2340
|
it "sets the inclusions" do
|
|
2245
|
-
expect(criteria.inclusions).to eq([
|
|
2341
|
+
expect(criteria.inclusions).to eq([ association ])
|
|
2246
2342
|
end
|
|
2247
2343
|
end
|
|
2248
2344
|
|
|
2249
2345
|
describe "#lt" do
|
|
2250
2346
|
|
|
2251
2347
|
let!(:match) do
|
|
2252
|
-
Band.create(member_count: 1)
|
|
2348
|
+
Band.create!(member_count: 1)
|
|
2253
2349
|
end
|
|
2254
2350
|
|
|
2255
2351
|
let!(:non_match) do
|
|
2256
|
-
Band.create(member_count: 5)
|
|
2352
|
+
Band.create!(member_count: 5)
|
|
2257
2353
|
end
|
|
2258
2354
|
|
|
2259
2355
|
let(:criteria) do
|
|
@@ -2268,11 +2364,11 @@ describe Mongoid::Criteria do
|
|
|
2268
2364
|
describe "#lte" do
|
|
2269
2365
|
|
|
2270
2366
|
let!(:match) do
|
|
2271
|
-
Band.create(member_count: 4)
|
|
2367
|
+
Band.create!(member_count: 4)
|
|
2272
2368
|
end
|
|
2273
2369
|
|
|
2274
2370
|
let!(:non_match) do
|
|
2275
|
-
Band.create(member_count: 5)
|
|
2371
|
+
Band.create!(member_count: 5)
|
|
2276
2372
|
end
|
|
2277
2373
|
|
|
2278
2374
|
let(:criteria) do
|
|
@@ -2305,11 +2401,11 @@ describe Mongoid::Criteria do
|
|
|
2305
2401
|
end
|
|
2306
2402
|
|
|
2307
2403
|
let!(:depeche_mode) do
|
|
2308
|
-
Band.create(name: "Depeche Mode", likes: 200)
|
|
2404
|
+
Band.create!(name: "Depeche Mode", likes: 200)
|
|
2309
2405
|
end
|
|
2310
2406
|
|
|
2311
2407
|
let!(:tool) do
|
|
2312
|
-
Band.create(name: "Tool", likes: 100)
|
|
2408
|
+
Band.create!(name: "Tool", likes: 100)
|
|
2313
2409
|
end
|
|
2314
2410
|
|
|
2315
2411
|
context "when no timeout options are provided" do
|
|
@@ -2319,7 +2415,7 @@ describe Mongoid::Criteria do
|
|
|
2319
2415
|
end
|
|
2320
2416
|
|
|
2321
2417
|
it "returns the map/reduce results" do
|
|
2322
|
-
expect(map_reduce).to eq([
|
|
2418
|
+
expect(map_reduce.sort_by { |doc| doc['_id'] }).to eq([
|
|
2323
2419
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
2324
2420
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
2325
2421
|
])
|
|
@@ -2332,11 +2428,11 @@ describe Mongoid::Criteria do
|
|
|
2332
2428
|
context "when provided a single field" do
|
|
2333
2429
|
|
|
2334
2430
|
let!(:depeche) do
|
|
2335
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
2431
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
2336
2432
|
end
|
|
2337
2433
|
|
|
2338
2434
|
let!(:tool) do
|
|
2339
|
-
Band.create(name: "Tool", likes: 500)
|
|
2435
|
+
Band.create!(name: "Tool", likes: 500)
|
|
2340
2436
|
end
|
|
2341
2437
|
|
|
2342
2438
|
let(:criteria) do
|
|
@@ -2376,11 +2472,11 @@ describe Mongoid::Criteria do
|
|
|
2376
2472
|
end
|
|
2377
2473
|
|
|
2378
2474
|
let!(:match) do
|
|
2379
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2475
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2380
2476
|
end
|
|
2381
2477
|
|
|
2382
2478
|
let!(:non_match) do
|
|
2383
|
-
Bar.create(location: [ 19.26, 99.70 ])
|
|
2479
|
+
Bar.create!(location: [ 19.26, 99.70 ])
|
|
2384
2480
|
end
|
|
2385
2481
|
|
|
2386
2482
|
let(:criteria) do
|
|
@@ -2410,7 +2506,7 @@ describe Mongoid::Criteria do
|
|
|
2410
2506
|
end
|
|
2411
2507
|
end
|
|
2412
2508
|
|
|
2413
|
-
let(:
|
|
2509
|
+
let(:association) do
|
|
2414
2510
|
Band.relations["records"]
|
|
2415
2511
|
end
|
|
2416
2512
|
|
|
@@ -2435,7 +2531,7 @@ describe Mongoid::Criteria do
|
|
|
2435
2531
|
end
|
|
2436
2532
|
|
|
2437
2533
|
it "merges the inclusions" do
|
|
2438
|
-
expect(merged.inclusions).to eq([
|
|
2534
|
+
expect(merged.inclusions).to eq([ association ])
|
|
2439
2535
|
end
|
|
2440
2536
|
|
|
2441
2537
|
it "returns a new criteria" do
|
|
@@ -2449,7 +2545,7 @@ describe Mongoid::Criteria do
|
|
|
2449
2545
|
{ klass: Band, includes: [ :records ] }
|
|
2450
2546
|
end
|
|
2451
2547
|
|
|
2452
|
-
let(:
|
|
2548
|
+
let(:association) do
|
|
2453
2549
|
Band.relations["records"]
|
|
2454
2550
|
end
|
|
2455
2551
|
|
|
@@ -2470,7 +2566,7 @@ describe Mongoid::Criteria do
|
|
|
2470
2566
|
end
|
|
2471
2567
|
|
|
2472
2568
|
it "merges the inclusions" do
|
|
2473
|
-
expect(merged.inclusions).to eq([
|
|
2569
|
+
expect(merged.inclusions).to eq([ association ])
|
|
2474
2570
|
end
|
|
2475
2571
|
|
|
2476
2572
|
it "returns a new criteria" do
|
|
@@ -2495,7 +2591,7 @@ describe Mongoid::Criteria do
|
|
|
2495
2591
|
end
|
|
2496
2592
|
end
|
|
2497
2593
|
|
|
2498
|
-
let(:
|
|
2594
|
+
let(:association) do
|
|
2499
2595
|
Band.relations["records"]
|
|
2500
2596
|
end
|
|
2501
2597
|
|
|
@@ -2520,7 +2616,7 @@ describe Mongoid::Criteria do
|
|
|
2520
2616
|
end
|
|
2521
2617
|
|
|
2522
2618
|
it "merges the inclusions" do
|
|
2523
|
-
expect(merged.inclusions).to eq([
|
|
2619
|
+
expect(merged.inclusions).to eq([ association ])
|
|
2524
2620
|
end
|
|
2525
2621
|
|
|
2526
2622
|
it "returns the same criteria" do
|
|
@@ -2533,11 +2629,11 @@ describe Mongoid::Criteria do
|
|
|
2533
2629
|
context "when provided a single field" do
|
|
2534
2630
|
|
|
2535
2631
|
let!(:depeche) do
|
|
2536
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
2632
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
2537
2633
|
end
|
|
2538
2634
|
|
|
2539
2635
|
let!(:tool) do
|
|
2540
|
-
Band.create(name: "Tool", likes: 500)
|
|
2636
|
+
Band.create!(name: "Tool", likes: 500)
|
|
2541
2637
|
end
|
|
2542
2638
|
|
|
2543
2639
|
let(:criteria) do
|
|
@@ -2573,11 +2669,11 @@ describe Mongoid::Criteria do
|
|
|
2573
2669
|
describe "#mod" do
|
|
2574
2670
|
|
|
2575
2671
|
let!(:match) do
|
|
2576
|
-
Band.create(member_count: 5)
|
|
2672
|
+
Band.create!(member_count: 5)
|
|
2577
2673
|
end
|
|
2578
2674
|
|
|
2579
2675
|
let!(:non_match) do
|
|
2580
|
-
Band.create(member_count: 2)
|
|
2676
|
+
Band.create!(member_count: 2)
|
|
2581
2677
|
end
|
|
2582
2678
|
|
|
2583
2679
|
let(:criteria) do
|
|
@@ -2592,11 +2688,11 @@ describe Mongoid::Criteria do
|
|
|
2592
2688
|
describe "#ne" do
|
|
2593
2689
|
|
|
2594
2690
|
let!(:match) do
|
|
2595
|
-
Band.create(name: "Depeche Mode")
|
|
2691
|
+
Band.create!(name: "Depeche Mode")
|
|
2596
2692
|
end
|
|
2597
2693
|
|
|
2598
2694
|
let!(:non_match) do
|
|
2599
|
-
Band.create(name: "Tool")
|
|
2695
|
+
Band.create!(name: "Tool")
|
|
2600
2696
|
end
|
|
2601
2697
|
|
|
2602
2698
|
let(:criteria) do
|
|
@@ -2615,7 +2711,7 @@ describe Mongoid::Criteria do
|
|
|
2615
2711
|
end
|
|
2616
2712
|
|
|
2617
2713
|
let!(:match) do
|
|
2618
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2714
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2619
2715
|
end
|
|
2620
2716
|
|
|
2621
2717
|
let(:criteria) do
|
|
@@ -2634,7 +2730,7 @@ describe Mongoid::Criteria do
|
|
|
2634
2730
|
end
|
|
2635
2731
|
|
|
2636
2732
|
let!(:match) do
|
|
2637
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2733
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2638
2734
|
end
|
|
2639
2735
|
|
|
2640
2736
|
let(:criteria) do
|
|
@@ -2649,11 +2745,11 @@ describe Mongoid::Criteria do
|
|
|
2649
2745
|
describe "#nin" do
|
|
2650
2746
|
|
|
2651
2747
|
let!(:match) do
|
|
2652
|
-
Band.create(name: "Depeche Mode")
|
|
2748
|
+
Band.create!(name: "Depeche Mode")
|
|
2653
2749
|
end
|
|
2654
2750
|
|
|
2655
2751
|
let!(:non_match) do
|
|
2656
|
-
Band.create(name: "Tool")
|
|
2752
|
+
Band.create!(name: "Tool")
|
|
2657
2753
|
end
|
|
2658
2754
|
|
|
2659
2755
|
let(:criteria) do
|
|
@@ -2668,11 +2764,11 @@ describe Mongoid::Criteria do
|
|
|
2668
2764
|
describe "#nor" do
|
|
2669
2765
|
|
|
2670
2766
|
let!(:match) do
|
|
2671
|
-
Band.create(name: "Depeche Mode")
|
|
2767
|
+
Band.create!(name: "Depeche Mode")
|
|
2672
2768
|
end
|
|
2673
2769
|
|
|
2674
2770
|
let!(:non_match) do
|
|
2675
|
-
Band.create(name: "Tool")
|
|
2771
|
+
Band.create!(name: "Tool")
|
|
2676
2772
|
end
|
|
2677
2773
|
|
|
2678
2774
|
let(:criteria) do
|
|
@@ -2684,230 +2780,16 @@ describe Mongoid::Criteria do
|
|
|
2684
2780
|
end
|
|
2685
2781
|
end
|
|
2686
2782
|
|
|
2687
|
-
describe "#only" do
|
|
2688
|
-
|
|
2689
|
-
let!(:band) do
|
|
2690
|
-
Band.create(name: "Depeche Mode", likes: 3, views: 10)
|
|
2691
|
-
end
|
|
2692
|
-
|
|
2693
|
-
context "when not using inheritance" do
|
|
2694
|
-
|
|
2695
|
-
context "when passing splat args" do
|
|
2696
|
-
|
|
2697
|
-
let(:criteria) do
|
|
2698
|
-
Band.only(:_id)
|
|
2699
|
-
end
|
|
2700
|
-
|
|
2701
|
-
it "limits the returned fields" do
|
|
2702
|
-
expect {
|
|
2703
|
-
criteria.first.name
|
|
2704
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
2705
|
-
end
|
|
2706
|
-
|
|
2707
|
-
it "does not add _type to the fields" do
|
|
2708
|
-
expect(criteria.options[:fields]["_type"]).to be_nil
|
|
2709
|
-
end
|
|
2710
|
-
end
|
|
2711
|
-
|
|
2712
|
-
context "when not including id" do
|
|
2713
|
-
|
|
2714
|
-
let(:criteria) do
|
|
2715
|
-
Band.only(:name)
|
|
2716
|
-
end
|
|
2717
|
-
|
|
2718
|
-
it "responds to id anyway" do
|
|
2719
|
-
expect {
|
|
2720
|
-
criteria.first.id
|
|
2721
|
-
}.to_not raise_error
|
|
2722
|
-
end
|
|
2723
|
-
end
|
|
2724
|
-
|
|
2725
|
-
context "when passing an array" do
|
|
2726
|
-
|
|
2727
|
-
let(:criteria) do
|
|
2728
|
-
Band.only([ :name, :likes ])
|
|
2729
|
-
end
|
|
2730
|
-
|
|
2731
|
-
it "includes the limited fields" do
|
|
2732
|
-
expect(criteria.first.name).to_not be_nil
|
|
2733
|
-
end
|
|
2734
|
-
|
|
2735
|
-
it "excludes the non included fields" do
|
|
2736
|
-
expect {
|
|
2737
|
-
criteria.first.active
|
|
2738
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
2739
|
-
end
|
|
2740
|
-
|
|
2741
|
-
it "does not add _type to the fields" do
|
|
2742
|
-
expect(criteria.options[:fields]["_type"]).to be_nil
|
|
2743
|
-
end
|
|
2744
|
-
end
|
|
2745
|
-
|
|
2746
|
-
context "when instantiating a class of another type inside the iteration" do
|
|
2747
|
-
|
|
2748
|
-
let(:criteria) do
|
|
2749
|
-
Band.only(:name)
|
|
2750
|
-
end
|
|
2751
|
-
|
|
2752
|
-
it "only limits the fields on the correct model" do
|
|
2753
|
-
criteria.each do |band|
|
|
2754
|
-
expect(Person.new.age).to eq(100)
|
|
2755
|
-
end
|
|
2756
|
-
end
|
|
2757
|
-
end
|
|
2758
|
-
|
|
2759
|
-
context "when instantiating a document not in the result set" do
|
|
2760
|
-
|
|
2761
|
-
let(:criteria) do
|
|
2762
|
-
Band.only(:name)
|
|
2763
|
-
end
|
|
2764
|
-
|
|
2765
|
-
it "only limits the fields on the correct criteria" do
|
|
2766
|
-
criteria.each do |band|
|
|
2767
|
-
expect(Band.new.active).to be true
|
|
2768
|
-
end
|
|
2769
|
-
end
|
|
2770
|
-
end
|
|
2771
|
-
|
|
2772
|
-
context "when nesting a criteria within a criteria" do
|
|
2773
|
-
|
|
2774
|
-
let(:criteria) do
|
|
2775
|
-
Band.only(:name)
|
|
2776
|
-
end
|
|
2777
|
-
|
|
2778
|
-
it "only limits the fields on the correct criteria" do
|
|
2779
|
-
criteria.each do |band|
|
|
2780
|
-
Band.all.each do |b|
|
|
2781
|
-
expect(b.active).to be true
|
|
2782
|
-
end
|
|
2783
|
-
end
|
|
2784
|
-
end
|
|
2785
|
-
end
|
|
2786
|
-
end
|
|
2787
|
-
|
|
2788
|
-
context "when using inheritance" do
|
|
2789
|
-
|
|
2790
|
-
let(:criteria) do
|
|
2791
|
-
Doctor.only(:_id)
|
|
2792
|
-
end
|
|
2793
|
-
|
|
2794
|
-
it "adds _type to the fields" do
|
|
2795
|
-
expect(criteria.options[:fields]["_type"]).to eq(1)
|
|
2796
|
-
end
|
|
2797
|
-
end
|
|
2798
|
-
|
|
2799
|
-
context "when limiting to embedded documents" do
|
|
2800
|
-
|
|
2801
|
-
context "when the embedded documents are aliased" do
|
|
2802
|
-
|
|
2803
|
-
let(:criteria) do
|
|
2804
|
-
Person.only(:phones)
|
|
2805
|
-
end
|
|
2806
|
-
|
|
2807
|
-
it "properly uses the database field name" do
|
|
2808
|
-
expect(criteria.options).to eq(fields: { "_id" => 1, "mobile_phones" => 1 })
|
|
2809
|
-
end
|
|
2810
|
-
end
|
|
2811
|
-
end
|
|
2812
|
-
|
|
2813
|
-
context 'when the field is localized' do
|
|
2814
|
-
|
|
2815
|
-
before do
|
|
2816
|
-
I18n.locale = :en
|
|
2817
|
-
d = Dictionary.create(description: 'english-text')
|
|
2818
|
-
I18n.locale = :de
|
|
2819
|
-
d.description = 'deutsch-text'
|
|
2820
|
-
d.save
|
|
2821
|
-
end
|
|
2822
|
-
|
|
2823
|
-
after do
|
|
2824
|
-
I18n.locale = :en
|
|
2825
|
-
end
|
|
2826
|
-
|
|
2827
|
-
context 'when entire field is included' do
|
|
2828
|
-
|
|
2829
|
-
let(:dictionary) do
|
|
2830
|
-
Dictionary.only(:description).first
|
|
2831
|
-
|
|
2832
|
-
end
|
|
2833
|
-
|
|
2834
|
-
it 'loads all translations' do
|
|
2835
|
-
expect(dictionary.description_translations.keys).to include('de', 'en')
|
|
2836
|
-
end
|
|
2837
|
-
|
|
2838
|
-
it 'returns the field value for the current locale' do
|
|
2839
|
-
I18n.locale = :en
|
|
2840
|
-
expect(dictionary.description).to eq('english-text')
|
|
2841
|
-
I18n.locale = :de
|
|
2842
|
-
expect(dictionary.description).to eq('deutsch-text')
|
|
2843
|
-
end
|
|
2844
|
-
end
|
|
2845
|
-
|
|
2846
|
-
context 'when a specific locale is included' do
|
|
2847
|
-
|
|
2848
|
-
let(:dictionary) do
|
|
2849
|
-
Dictionary.only(:'description.de').first
|
|
2850
|
-
end
|
|
2851
|
-
|
|
2852
|
-
it 'loads translations only for the included locale' do
|
|
2853
|
-
expect(dictionary.description_translations.keys).to include('de')
|
|
2854
|
-
expect(dictionary.description_translations.keys).to_not include('en')
|
|
2855
|
-
end
|
|
2856
|
-
|
|
2857
|
-
it 'returns the field value for the included locale' do
|
|
2858
|
-
I18n.locale = :en
|
|
2859
|
-
expect(dictionary.description).to be_nil
|
|
2860
|
-
I18n.locale = :de
|
|
2861
|
-
expect(dictionary.description).to eq('deutsch-text')
|
|
2862
|
-
end
|
|
2863
|
-
end
|
|
2864
|
-
|
|
2865
|
-
context 'when entire field is excluded' do
|
|
2866
|
-
|
|
2867
|
-
let(:dictionary) do
|
|
2868
|
-
Dictionary.without(:description).first
|
|
2869
|
-
end
|
|
2870
|
-
|
|
2871
|
-
it 'does not load all translations' do
|
|
2872
|
-
expect(dictionary.description_translations.keys).to_not include('de', 'en')
|
|
2873
|
-
end
|
|
2874
|
-
|
|
2875
|
-
it 'raises an ActiveModel::MissingAttributeError when attempting to access the field' do
|
|
2876
|
-
expect{dictionary.description}.to raise_error ActiveModel::MissingAttributeError
|
|
2877
|
-
end
|
|
2878
|
-
end
|
|
2879
|
-
|
|
2880
|
-
context 'when a specific locale is excluded' do
|
|
2881
|
-
|
|
2882
|
-
let(:dictionary) do
|
|
2883
|
-
Dictionary.without(:'description.de').first
|
|
2884
|
-
end
|
|
2885
|
-
|
|
2886
|
-
it 'does not load excluded translations' do
|
|
2887
|
-
expect(dictionary.description_translations.keys).to_not include('de')
|
|
2888
|
-
expect(dictionary.description_translations.keys).to include('en')
|
|
2889
|
-
end
|
|
2890
|
-
|
|
2891
|
-
it 'returns nil for excluded translations' do
|
|
2892
|
-
I18n.locale = :en
|
|
2893
|
-
expect(dictionary.description).to eq('english-text')
|
|
2894
|
-
I18n.locale = :de
|
|
2895
|
-
expect(dictionary.description).to be_nil
|
|
2896
|
-
end
|
|
2897
|
-
end
|
|
2898
|
-
end
|
|
2899
|
-
end
|
|
2900
|
-
|
|
2901
2783
|
[ :or, :any_of ].each do |method|
|
|
2902
2784
|
|
|
2903
2785
|
describe "\##{method}" do
|
|
2904
2786
|
|
|
2905
2787
|
let!(:match) do
|
|
2906
|
-
Band.create(name: "Depeche Mode")
|
|
2788
|
+
Band.create!(name: "Depeche Mode")
|
|
2907
2789
|
end
|
|
2908
2790
|
|
|
2909
2791
|
let!(:non_match) do
|
|
2910
|
-
Band.create(name: "Tool")
|
|
2792
|
+
Band.create!(name: "Tool")
|
|
2911
2793
|
end
|
|
2912
2794
|
|
|
2913
2795
|
context "when sending a normal $or criterion" do
|
|
@@ -2937,25 +2819,29 @@ describe Mongoid::Criteria do
|
|
|
2937
2819
|
describe "#pluck" do
|
|
2938
2820
|
|
|
2939
2821
|
let!(:depeche) do
|
|
2940
|
-
Band.create(name: "Depeche Mode", likes: 3)
|
|
2822
|
+
Band.create!(name: "Depeche Mode", likes: 3)
|
|
2941
2823
|
end
|
|
2942
2824
|
|
|
2943
2825
|
let!(:tool) do
|
|
2944
|
-
Band.create(name: "Tool", likes: 3)
|
|
2826
|
+
Band.create!(name: "Tool", likes: 3)
|
|
2945
2827
|
end
|
|
2946
2828
|
|
|
2947
2829
|
let!(:photek) do
|
|
2948
|
-
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")
|
|
2949
2835
|
end
|
|
2950
2836
|
|
|
2951
2837
|
context "when the field is aliased" do
|
|
2952
2838
|
|
|
2953
2839
|
let!(:expensive) do
|
|
2954
|
-
Product.create(price: 100000)
|
|
2840
|
+
Product.create!(price: 100000)
|
|
2955
2841
|
end
|
|
2956
2842
|
|
|
2957
2843
|
let!(:cheap) do
|
|
2958
|
-
Product.create(price: 1)
|
|
2844
|
+
Product.create!(price: 1)
|
|
2959
2845
|
end
|
|
2960
2846
|
|
|
2961
2847
|
context "when using alias_attribute" do
|
|
@@ -2964,8 +2850,10 @@ describe Mongoid::Criteria do
|
|
|
2964
2850
|
Product.pluck(:price)
|
|
2965
2851
|
end
|
|
2966
2852
|
|
|
2967
|
-
|
|
2968
|
-
|
|
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
|
|
2969
2857
|
end
|
|
2970
2858
|
end
|
|
2971
2859
|
end
|
|
@@ -2982,14 +2870,18 @@ describe Mongoid::Criteria do
|
|
|
2982
2870
|
criteria.pluck(:name)
|
|
2983
2871
|
end
|
|
2984
2872
|
|
|
2985
|
-
|
|
2986
|
-
|
|
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
|
|
2987
2877
|
end
|
|
2988
2878
|
|
|
2989
2879
|
context "when subsequently executing the criteria without a pluck" do
|
|
2990
2880
|
|
|
2991
|
-
|
|
2992
|
-
|
|
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
|
|
2993
2885
|
end
|
|
2994
2886
|
end
|
|
2995
2887
|
|
|
@@ -3000,51 +2892,83 @@ describe Mongoid::Criteria do
|
|
|
3000
2892
|
end
|
|
3001
2893
|
|
|
3002
2894
|
context 'when a top-level field and a subdocument field are plucked' do
|
|
3003
|
-
|
|
3004
2895
|
before do
|
|
3005
|
-
Band.create(name: 'FKA Twigs')
|
|
3006
|
-
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') ])
|
|
3007
2898
|
end
|
|
3008
2899
|
|
|
3009
2900
|
let(:embedded_pluck) do
|
|
3010
2901
|
criteria.pluck(:name, 'records.name')
|
|
3011
2902
|
end
|
|
3012
2903
|
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
[
|
|
3017
|
-
|
|
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
|
|
3018
2916
|
end
|
|
3019
2917
|
|
|
3020
|
-
|
|
3021
|
-
|
|
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
|
|
3022
2930
|
end
|
|
3023
2931
|
end
|
|
3024
2932
|
|
|
3025
2933
|
context 'when only a subdocument field is plucked' do
|
|
3026
2934
|
|
|
3027
2935
|
before do
|
|
3028
|
-
Band.create(name: 'FKA Twigs')
|
|
3029
|
-
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') ])
|
|
3030
2938
|
end
|
|
3031
2939
|
|
|
3032
2940
|
let(:embedded_pluck) do
|
|
3033
2941
|
criteria.pluck('records.name')
|
|
3034
2942
|
end
|
|
3035
2943
|
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
[
|
|
3040
|
-
|
|
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
|
|
3041
2956
|
end
|
|
3042
2957
|
|
|
3043
|
-
|
|
3044
|
-
|
|
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
|
|
3045
2970
|
end
|
|
3046
2971
|
end
|
|
3047
|
-
|
|
3048
2972
|
end
|
|
3049
2973
|
end
|
|
3050
2974
|
|
|
@@ -3054,8 +2978,10 @@ describe Mongoid::Criteria do
|
|
|
3054
2978
|
Band.where(:name.exists => true).pluck(:name, :likes)
|
|
3055
2979
|
end
|
|
3056
2980
|
|
|
3057
|
-
|
|
3058
|
-
|
|
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
|
|
3059
2985
|
end
|
|
3060
2986
|
end
|
|
3061
2987
|
|
|
@@ -3065,8 +2991,10 @@ describe Mongoid::Criteria do
|
|
|
3065
2991
|
Band.where(:name.exists => true).pluck(:likes)
|
|
3066
2992
|
end
|
|
3067
2993
|
|
|
3068
|
-
|
|
3069
|
-
|
|
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
|
|
3070
2998
|
end
|
|
3071
2999
|
end
|
|
3072
3000
|
end
|
|
@@ -3077,8 +3005,10 @@ describe Mongoid::Criteria do
|
|
|
3077
3005
|
Band.where(name: "New Order").pluck(:_id)
|
|
3078
3006
|
end
|
|
3079
3007
|
|
|
3080
|
-
|
|
3081
|
-
|
|
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
|
|
3082
3012
|
end
|
|
3083
3013
|
end
|
|
3084
3014
|
|
|
@@ -3088,8 +3018,10 @@ describe Mongoid::Criteria do
|
|
|
3088
3018
|
Band.all.pluck(:id)
|
|
3089
3019
|
end
|
|
3090
3020
|
|
|
3091
|
-
|
|
3092
|
-
|
|
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
|
|
3093
3025
|
end
|
|
3094
3026
|
end
|
|
3095
3027
|
|
|
@@ -3099,8 +3031,10 @@ describe Mongoid::Criteria do
|
|
|
3099
3031
|
Band.all.pluck(:id, :fooz)
|
|
3100
3032
|
end
|
|
3101
3033
|
|
|
3102
|
-
|
|
3103
|
-
|
|
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
|
|
3104
3038
|
end
|
|
3105
3039
|
end
|
|
3106
3040
|
|
|
@@ -3112,8 +3046,10 @@ describe Mongoid::Criteria do
|
|
|
3112
3046
|
Band.all.pluck(:foo)
|
|
3113
3047
|
end
|
|
3114
3048
|
|
|
3115
|
-
|
|
3116
|
-
|
|
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
|
|
3117
3053
|
end
|
|
3118
3054
|
end
|
|
3119
3055
|
|
|
@@ -3123,8 +3059,10 @@ describe Mongoid::Criteria do
|
|
|
3123
3059
|
Band.all.pluck(:foo, :bar)
|
|
3124
3060
|
end
|
|
3125
3061
|
|
|
3126
|
-
|
|
3127
|
-
|
|
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
|
|
3128
3066
|
end
|
|
3129
3067
|
end
|
|
3130
3068
|
end
|
|
@@ -3133,10 +3071,10 @@ describe Mongoid::Criteria do
|
|
|
3133
3071
|
|
|
3134
3072
|
before do
|
|
3135
3073
|
I18n.locale = :en
|
|
3136
|
-
d = Dictionary.create(description: 'english-text')
|
|
3074
|
+
d = Dictionary.create!(description: 'english-text')
|
|
3137
3075
|
I18n.locale = :de
|
|
3138
3076
|
d.description = 'deutsch-text'
|
|
3139
|
-
d.save
|
|
3077
|
+
d.save!
|
|
3140
3078
|
end
|
|
3141
3079
|
|
|
3142
3080
|
after do
|
|
@@ -3144,13 +3082,48 @@ describe Mongoid::Criteria do
|
|
|
3144
3082
|
end
|
|
3145
3083
|
|
|
3146
3084
|
context 'when plucking the entire field' do
|
|
3147
|
-
|
|
3148
3085
|
let(:plucked) do
|
|
3149
3086
|
Dictionary.all.pluck(:description)
|
|
3150
3087
|
end
|
|
3151
3088
|
|
|
3152
|
-
|
|
3153
|
-
|
|
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
|
|
3154
3127
|
end
|
|
3155
3128
|
end
|
|
3156
3129
|
|
|
@@ -3160,8 +3133,235 @@ describe Mongoid::Criteria do
|
|
|
3160
3133
|
Dictionary.all.pluck(:'description.de')
|
|
3161
3134
|
end
|
|
3162
3135
|
|
|
3163
|
-
|
|
3164
|
-
|
|
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)
|
|
3165
3365
|
end
|
|
3166
3366
|
end
|
|
3167
3367
|
end
|
|
@@ -3248,11 +3448,11 @@ describe Mongoid::Criteria do
|
|
|
3248
3448
|
describe "#sort" do
|
|
3249
3449
|
|
|
3250
3450
|
let!(:depeche) do
|
|
3251
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
3451
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
3252
3452
|
end
|
|
3253
3453
|
|
|
3254
3454
|
let!(:tool) do
|
|
3255
|
-
Band.create(name: "Tool", likes: 500)
|
|
3455
|
+
Band.create!(name: "Tool", likes: 500)
|
|
3256
3456
|
end
|
|
3257
3457
|
|
|
3258
3458
|
let(:sorted) do
|
|
@@ -3271,11 +3471,11 @@ describe Mongoid::Criteria do
|
|
|
3271
3471
|
context "when provided a single field" do
|
|
3272
3472
|
|
|
3273
3473
|
let!(:depeche) do
|
|
3274
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
3474
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
3275
3475
|
end
|
|
3276
3476
|
|
|
3277
3477
|
let!(:tool) do
|
|
3278
|
-
Band.create(name: "Tool", likes: 500)
|
|
3478
|
+
Band.create!(name: "Tool", likes: 500)
|
|
3279
3479
|
end
|
|
3280
3480
|
|
|
3281
3481
|
let(:criteria) do
|
|
@@ -3309,7 +3509,7 @@ describe Mongoid::Criteria do
|
|
|
3309
3509
|
describe "#to_ary" do
|
|
3310
3510
|
|
|
3311
3511
|
let!(:band) do
|
|
3312
|
-
Band.create(name: "Depeche Mode")
|
|
3512
|
+
Band.create!(name: "Depeche Mode")
|
|
3313
3513
|
end
|
|
3314
3514
|
|
|
3315
3515
|
let(:criteria) do
|
|
@@ -3325,11 +3525,11 @@ describe Mongoid::Criteria do
|
|
|
3325
3525
|
max_server_version '4.0'
|
|
3326
3526
|
|
|
3327
3527
|
let!(:band) do
|
|
3328
|
-
Band.create(name: "Depeche Mode")
|
|
3528
|
+
Band.create!(name: "Depeche Mode")
|
|
3329
3529
|
end
|
|
3330
3530
|
|
|
3331
3531
|
let!(:band2) do
|
|
3332
|
-
Band.create(name: "Tool")
|
|
3532
|
+
Band.create!(name: "Tool")
|
|
3333
3533
|
end
|
|
3334
3534
|
|
|
3335
3535
|
let(:criteria) do
|
|
@@ -3368,34 +3568,75 @@ describe Mongoid::Criteria do
|
|
|
3368
3568
|
end
|
|
3369
3569
|
|
|
3370
3570
|
describe "#type" do
|
|
3571
|
+
context "when using the default discriminator_key" do
|
|
3572
|
+
context "when the type is a string" do
|
|
3371
3573
|
|
|
3372
|
-
|
|
3574
|
+
let!(:browser) do
|
|
3575
|
+
Browser.create!
|
|
3576
|
+
end
|
|
3373
3577
|
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3578
|
+
let(:criteria) do
|
|
3579
|
+
Canvas.all.type("Browser")
|
|
3580
|
+
end
|
|
3377
3581
|
|
|
3378
|
-
|
|
3379
|
-
|
|
3582
|
+
it "returns documents with the provided type" do
|
|
3583
|
+
expect(criteria).to eq([ browser ])
|
|
3584
|
+
end
|
|
3380
3585
|
end
|
|
3381
3586
|
|
|
3382
|
-
|
|
3383
|
-
|
|
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
|
|
3384
3600
|
end
|
|
3385
3601
|
end
|
|
3386
3602
|
|
|
3387
|
-
context "when
|
|
3603
|
+
context "when using a custom discriminator_key" do
|
|
3604
|
+
before do
|
|
3605
|
+
Canvas.discriminator_key = "dkey"
|
|
3606
|
+
end
|
|
3388
3607
|
|
|
3389
|
-
|
|
3390
|
-
|
|
3608
|
+
after do
|
|
3609
|
+
Canvas.discriminator_key = nil
|
|
3391
3610
|
end
|
|
3392
3611
|
|
|
3393
|
-
|
|
3394
|
-
|
|
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
|
|
3395
3625
|
end
|
|
3396
3626
|
|
|
3397
|
-
|
|
3398
|
-
|
|
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
|
|
3399
3640
|
end
|
|
3400
3641
|
end
|
|
3401
3642
|
end
|
|
@@ -3403,11 +3644,43 @@ describe Mongoid::Criteria do
|
|
|
3403
3644
|
describe "#where" do
|
|
3404
3645
|
|
|
3405
3646
|
let!(:match) do
|
|
3406
|
-
Band.create(name: "Depeche Mode")
|
|
3647
|
+
Band.create!(name: "Depeche Mode")
|
|
3407
3648
|
end
|
|
3408
3649
|
|
|
3409
3650
|
let!(:non_match) do
|
|
3410
|
-
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
|
|
3411
3684
|
end
|
|
3412
3685
|
|
|
3413
3686
|
context "when provided a string" do
|
|
@@ -3472,7 +3745,7 @@ describe Mongoid::Criteria do
|
|
|
3472
3745
|
end
|
|
3473
3746
|
|
|
3474
3747
|
let!(:band) do
|
|
3475
|
-
Band.create(name: "Boards of Canada", sales: sales)
|
|
3748
|
+
Band.create!(name: "Boards of Canada", sales: sales)
|
|
3476
3749
|
end
|
|
3477
3750
|
|
|
3478
3751
|
let(:from_db) do
|
|
@@ -3484,14 +3757,15 @@ describe Mongoid::Criteria do
|
|
|
3484
3757
|
end
|
|
3485
3758
|
end
|
|
3486
3759
|
|
|
3487
|
-
context "when querying on a BSON::Decimal128"
|
|
3760
|
+
context "when querying on a BSON::Decimal128" do
|
|
3761
|
+
min_server_version '3.4'
|
|
3488
3762
|
|
|
3489
3763
|
let(:decimal) do
|
|
3490
3764
|
BSON::Decimal128.new("0.0005")
|
|
3491
3765
|
end
|
|
3492
3766
|
|
|
3493
3767
|
let!(:band) do
|
|
3494
|
-
Band.create(name: "Boards of Canada", decimal: decimal)
|
|
3768
|
+
Band.create!(name: "Boards of Canada", decimal: decimal)
|
|
3495
3769
|
end
|
|
3496
3770
|
|
|
3497
3771
|
let(:from_db) do
|
|
@@ -3506,7 +3780,7 @@ describe Mongoid::Criteria do
|
|
|
3506
3780
|
context 'when querying on a polymorphic relation' do
|
|
3507
3781
|
|
|
3508
3782
|
let(:movie) do
|
|
3509
|
-
Movie.create
|
|
3783
|
+
Movie.create!
|
|
3510
3784
|
end
|
|
3511
3785
|
|
|
3512
3786
|
let(:selector) do
|
|
@@ -3518,12 +3792,78 @@ describe Mongoid::Criteria do
|
|
|
3518
3792
|
end
|
|
3519
3793
|
end
|
|
3520
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
|
|
3521
3861
|
end
|
|
3522
3862
|
|
|
3523
3863
|
describe "#for_js" do
|
|
3524
3864
|
|
|
3525
3865
|
let!(:match) do
|
|
3526
|
-
Band.create(name: "Depeche Mode")
|
|
3866
|
+
Band.create!(name: "Depeche Mode")
|
|
3527
3867
|
end
|
|
3528
3868
|
|
|
3529
3869
|
context "when the code has no scope" do
|
|
@@ -3538,6 +3878,7 @@ describe Mongoid::Criteria do
|
|
|
3538
3878
|
end
|
|
3539
3879
|
|
|
3540
3880
|
context "when the code has scope" do
|
|
3881
|
+
max_server_version '4.2'
|
|
3541
3882
|
|
|
3542
3883
|
let(:criteria) do
|
|
3543
3884
|
Band.for_js("this.name == param", param: "Depeche Mode")
|
|
@@ -3559,10 +3900,14 @@ describe Mongoid::Criteria do
|
|
|
3559
3900
|
|
|
3560
3901
|
before do
|
|
3561
3902
|
expect(Person).to receive(:minor).and_call_original
|
|
3903
|
+
expect(Person).to receive(:older_than).and_call_original
|
|
3562
3904
|
end
|
|
3563
3905
|
|
|
3564
3906
|
it "calls the method on the class" do
|
|
3565
3907
|
expect(criteria.minor).to be_empty
|
|
3908
|
+
expect do
|
|
3909
|
+
criteria.older_than(age: 25)
|
|
3910
|
+
end.not_to raise_error
|
|
3566
3911
|
end
|
|
3567
3912
|
end
|
|
3568
3913
|
|
|
@@ -3605,11 +3950,11 @@ describe Mongoid::Criteria do
|
|
|
3605
3950
|
describe "#uniq" do
|
|
3606
3951
|
|
|
3607
3952
|
let!(:band_one) do
|
|
3608
|
-
Band.create(name: "New Order")
|
|
3953
|
+
Band.create!(name: "New Order")
|
|
3609
3954
|
end
|
|
3610
3955
|
|
|
3611
3956
|
let!(:band_two) do
|
|
3612
|
-
Band.create(name: "New Order")
|
|
3957
|
+
Band.create!(name: "New Order")
|
|
3613
3958
|
end
|
|
3614
3959
|
|
|
3615
3960
|
let(:criteria) do
|
|
@@ -3649,7 +3994,7 @@ describe Mongoid::Criteria do
|
|
|
3649
3994
|
end
|
|
3650
3995
|
end
|
|
3651
3996
|
|
|
3652
|
-
describe "#
|
|
3997
|
+
describe "#geo_spatial" do
|
|
3653
3998
|
|
|
3654
3999
|
context "when checking within a polygon" do
|
|
3655
4000
|
|
|
@@ -3658,11 +4003,11 @@ describe Mongoid::Criteria do
|
|
|
3658
4003
|
end
|
|
3659
4004
|
|
|
3660
4005
|
let!(:match) do
|
|
3661
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
4006
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
3662
4007
|
end
|
|
3663
4008
|
|
|
3664
4009
|
let(:criteria) do
|
|
3665
|
-
Bar.
|
|
4010
|
+
Bar.geo_spatial(
|
|
3666
4011
|
:location.within_polygon => [[[ 50, 10 ], [ 50, 20 ], [ 60, 20 ], [ 60, 10 ], [ 50, 10 ]]]
|
|
3667
4012
|
)
|
|
3668
4013
|
end
|
|
@@ -3676,11 +4021,11 @@ describe Mongoid::Criteria do
|
|
|
3676
4021
|
describe "#with_size" do
|
|
3677
4022
|
|
|
3678
4023
|
let!(:match) do
|
|
3679
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
4024
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
3680
4025
|
end
|
|
3681
4026
|
|
|
3682
4027
|
let!(:non_match) do
|
|
3683
|
-
Band.create(genres: [ "house" ])
|
|
4028
|
+
Band.create!(genres: [ "house" ])
|
|
3684
4029
|
end
|
|
3685
4030
|
|
|
3686
4031
|
let(:criteria) do
|
|
@@ -3695,7 +4040,7 @@ describe Mongoid::Criteria do
|
|
|
3695
4040
|
describe "#with_type" do
|
|
3696
4041
|
|
|
3697
4042
|
let!(:match) do
|
|
3698
|
-
Band.create(name: "Depeche Mode")
|
|
4043
|
+
Band.create!(name: "Depeche Mode")
|
|
3699
4044
|
end
|
|
3700
4045
|
|
|
3701
4046
|
let(:criteria) do
|
|
@@ -3707,73 +4052,76 @@ describe Mongoid::Criteria do
|
|
|
3707
4052
|
end
|
|
3708
4053
|
end
|
|
3709
4054
|
|
|
3710
|
-
describe "#
|
|
4055
|
+
describe "#type_selection" do
|
|
4056
|
+
context "when using the default discriminator_key" do
|
|
4057
|
+
context "when only one subclass exists" do
|
|
3711
4058
|
|
|
3712
|
-
|
|
3713
|
-
|
|
3714
|
-
|
|
4059
|
+
let(:criteria) do
|
|
4060
|
+
described_class.new(Firefox)
|
|
4061
|
+
end
|
|
3715
4062
|
|
|
3716
|
-
|
|
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
|
|
3717
4071
|
|
|
3718
|
-
context "when
|
|
4072
|
+
context "when more than one subclass exists" do
|
|
3719
4073
|
|
|
3720
4074
|
let(:criteria) do
|
|
3721
|
-
|
|
4075
|
+
described_class.new(Browser)
|
|
3722
4076
|
end
|
|
3723
4077
|
|
|
3724
|
-
|
|
3725
|
-
|
|
4078
|
+
let(:selection) do
|
|
4079
|
+
criteria.send(:type_selection)
|
|
3726
4080
|
end
|
|
3727
|
-
end
|
|
3728
|
-
end
|
|
3729
4081
|
|
|
3730
|
-
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
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
|
|
3734
4085
|
end
|
|
4086
|
+
end
|
|
3735
4087
|
|
|
3736
|
-
|
|
3737
|
-
|
|
3738
|
-
|
|
3739
|
-
}.to_not raise_error
|
|
4088
|
+
context "when using a custom discriminator_key" do
|
|
4089
|
+
before do
|
|
4090
|
+
Canvas.discriminator_key = "dkey"
|
|
3740
4091
|
end
|
|
3741
4092
|
|
|
3742
|
-
|
|
3743
|
-
|
|
4093
|
+
after do
|
|
4094
|
+
Canvas.discriminator_key = nil
|
|
3744
4095
|
end
|
|
3745
|
-
end
|
|
3746
|
-
end
|
|
3747
4096
|
|
|
3748
|
-
|
|
3749
|
-
|
|
3750
|
-
context "when only one subclass exists" do
|
|
4097
|
+
context "when only one subclass exists" do
|
|
3751
4098
|
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
4099
|
+
let(:criteria) do
|
|
4100
|
+
described_class.new(Firefox)
|
|
4101
|
+
end
|
|
3755
4102
|
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
4103
|
+
let(:selection) do
|
|
4104
|
+
criteria.send(:type_selection)
|
|
4105
|
+
end
|
|
3759
4106
|
|
|
3760
|
-
|
|
3761
|
-
|
|
4107
|
+
it "does not use an $in query" do
|
|
4108
|
+
expect(selection).to eq({ dkey: "Firefox" })
|
|
4109
|
+
end
|
|
3762
4110
|
end
|
|
3763
|
-
end
|
|
3764
4111
|
|
|
3765
|
-
|
|
4112
|
+
context "when more than one subclass exists" do
|
|
3766
4113
|
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
4114
|
+
let(:criteria) do
|
|
4115
|
+
described_class.new(Browser)
|
|
4116
|
+
end
|
|
3770
4117
|
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
4118
|
+
let(:selection) do
|
|
4119
|
+
criteria.send(:type_selection)
|
|
4120
|
+
end
|
|
3774
4121
|
|
|
3775
|
-
|
|
3776
|
-
|
|
4122
|
+
it "does not use an $in query" do
|
|
4123
|
+
expect(selection).to eq({ dkey: { "$in" => [ "Firefox", "Browser" ]}})
|
|
4124
|
+
end
|
|
3777
4125
|
end
|
|
3778
4126
|
end
|
|
3779
4127
|
end
|