mongoid 5.4.1 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +30 -30
- data/LICENSE +1 -0
- data/README.md +33 -19
- data/Rakefile +75 -5
- data/lib/config/locales/en.yml +180 -64
- data/lib/mongoid/association/accessors.rb +402 -0
- data/lib/mongoid/association/bindable.rb +179 -0
- data/lib/mongoid/association/builders.rb +84 -0
- data/lib/mongoid/association/constrainable.rb +43 -0
- data/lib/mongoid/association/depending.rb +128 -0
- data/lib/mongoid/association/eager_loadable.rb +35 -0
- data/lib/mongoid/association/embedded/batchable.rb +358 -0
- data/lib/mongoid/association/embedded/cyclic.rb +102 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +52 -0
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +38 -0
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +111 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +134 -0
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +41 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +45 -0
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +549 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +183 -0
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +43 -0
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +39 -0
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +145 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +150 -0
- data/lib/mongoid/association/embedded.rb +6 -0
- data/lib/mongoid/association/macros.rb +207 -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 +498 -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 +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +5 -8
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -8
- data/lib/mongoid/atomic/paths/embedded.rb +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +47 -52
- 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 +24 -7
- data/lib/mongoid/attributes.rb +110 -106
- data/lib/mongoid/cacheable.rb +33 -0
- data/lib/mongoid/changeable.rb +39 -57
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +62 -258
- data/lib/mongoid/clients/sessions.rb +125 -0
- data/lib/mongoid/clients/storage_options.rb +9 -81
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +13 -73
- data/lib/mongoid/composable.rb +33 -10
- data/lib/mongoid/config/environment.rb +36 -14
- 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 +112 -39
- data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
- data/lib/mongoid/contextual/aggregable/mongo.rb +26 -27
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +31 -33
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +7 -38
- data/lib/mongoid/contextual/map_reduce.rb +12 -36
- data/lib/mongoid/contextual/memory.rb +34 -64
- data/lib/mongoid/contextual/mongo.rb +228 -113
- data/lib/mongoid/contextual/none.rb +51 -23
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +32 -19
- 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 +4 -7
- data/lib/mongoid/criteria/modifiable.rb +38 -24
- data/lib/mongoid/criteria/options.rb +24 -0
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +109 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +162 -0
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +36 -0
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +33 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +58 -0
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +47 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +177 -0
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +75 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +81 -0
- data/lib/mongoid/criteria/queryable/extensions/object.rb +181 -0
- data/lib/mongoid/criteria/queryable/extensions/range.rb +94 -0
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +72 -0
- data/lib/mongoid/criteria/queryable/extensions/set.rb +33 -0
- data/lib/mongoid/criteria/queryable/extensions/string.rb +122 -0
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +72 -0
- data/lib/mongoid/criteria/queryable/extensions/time.rb +55 -0
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +61 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +25 -0
- data/lib/mongoid/criteria/queryable/key.rb +177 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +26 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +413 -0
- data/lib/mongoid/criteria/queryable/optional.rb +386 -0
- data/lib/mongoid/criteria/queryable/options.rb +136 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +106 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +943 -0
- data/lib/mongoid/criteria/queryable/selector.rb +202 -0
- data/lib/mongoid/criteria/queryable/smash.rb +95 -0
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +85 -0
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +93 -76
- data/lib/mongoid/document.rb +62 -109
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +5 -6
- 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 +2 -9
- 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 +4 -7
- 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 +26 -0
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +61 -0
- 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 +21 -0
- 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 +18 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +33 -42
- data/lib/mongoid/extensions/big_decimal.rb +17 -17
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +17 -13
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +3 -6
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +57 -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 +4 -4
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +27 -44
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +16 -10
- 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 -11
- data/lib/mongoid/factory.rb +60 -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 +50 -14
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +118 -67
- data/lib/mongoid/findable.rb +60 -24
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +26 -36
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +27 -57
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +5 -146
- 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 +9 -24
- data/lib/mongoid/persistable/deletable.rb +16 -29
- data/lib/mongoid/persistable/destroyable.rb +12 -15
- 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 +61 -19
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +38 -33
- data/lib/mongoid/persistable/upsertable.rb +5 -9
- data/lib/mongoid/persistable.rb +137 -45
- data/lib/mongoid/persistence_context.rb +222 -0
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +141 -110
- data/lib/mongoid/railtie.rb +20 -17
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +11 -38
- data/lib/mongoid/selectable.rb +8 -17
- data/lib/mongoid/serializable.rb +29 -34
- data/lib/mongoid/shardable.rb +80 -17
- data/lib/mongoid/stateful.rb +4 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +88 -7
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +70 -49
- 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 +181 -61
- 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 +26 -40
- data/lib/mongoid/validatable.rb +16 -35
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid.rb +35 -17
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +54 -21
- 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 +28 -2
- data/spec/integration/app_spec.rb +343 -0
- data/spec/integration/associations/belongs_to_spec.rb +15 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
- data/spec/integration/associations/embedded_spec.rb +268 -0
- data/spec/integration/associations/embeds_many_spec.rb +206 -0
- data/spec/integration/associations/embeds_one_spec.rb +23 -0
- data/spec/integration/associations/foreign_key_spec.rb +98 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +176 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +61 -0
- data/spec/integration/callbacks_spec.rb +228 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/matcher_examples_spec.rb +758 -0
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +124 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +83 -0
- data/spec/mongoid/association/accessors_spec.rb +1067 -0
- data/spec/mongoid/association/auto_save_spec.rb +403 -0
- data/spec/mongoid/association/builders_spec.rb +255 -0
- data/spec/mongoid/association/constrainable_spec.rb +117 -0
- data/spec/mongoid/association/counter_cache_spec.rb +452 -0
- data/spec/mongoid/association/depending_spec.rb +959 -0
- data/spec/mongoid/association/eager_spec.rb +281 -0
- data/spec/mongoid/association/embedded/cyclic_spec.rb +180 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +67 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +173 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +36 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +559 -0
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +903 -0
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +106 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4652 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +69 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +864 -0
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +79 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +81 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1025 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +956 -0
- data/spec/mongoid/association/macros_spec.rb +1116 -0
- data/spec/mongoid/association/nested/many_spec.rb +232 -0
- data/spec/mongoid/association/nested/one_spec.rb +253 -0
- data/spec/mongoid/association/options_spec.rb +1323 -0
- data/spec/mongoid/association/polymorphic_spec.rb +162 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +243 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +238 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +412 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1373 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2046 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +180 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +148 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +196 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +3773 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +67 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1071 -0
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +155 -0
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +142 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +290 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2232 -0
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +4092 -0
- data/spec/mongoid/association/referenced/has_many_models.rb +95 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +1248 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +133 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +159 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +193 -0
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1142 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +97 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1383 -0
- data/spec/mongoid/association/reflections_spec.rb +92 -0
- data/spec/mongoid/association/syncable_spec.rb +499 -0
- data/spec/mongoid/association_spec.rb +191 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +52 -3
- 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 +36 -11
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +115 -91
- 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 +111 -111
- data/spec/mongoid/attributes_spec.rb +501 -33
- data/spec/mongoid/cacheable_spec.rb +114 -0
- data/spec/mongoid/changeable_spec.rb +118 -35
- data/spec/mongoid/clients/factory_spec.rb +176 -34
- data/spec/mongoid/clients/options_spec.rb +431 -98
- data/spec/mongoid/clients/sessions_spec.rb +335 -0
- data/spec/mongoid/clients/transactions_spec.rb +415 -0
- data/spec/mongoid/clients_spec.rb +318 -114
- data/spec/mongoid/composable_spec.rb +9 -0
- data/spec/mongoid/config/environment_spec.rb +88 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +371 -13
- 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 +245 -84
- data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +24 -7
- data/spec/mongoid/contextual/memory_spec.rb +44 -23
- data/spec/mongoid/contextual/mongo_spec.rb +780 -155
- data/spec/mongoid/contextual/none_spec.rb +14 -71
- data/spec/mongoid/copyable_spec.rb +297 -23
- 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 +506 -50
- data/spec/mongoid/criteria/options_spec.rb +31 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +372 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +525 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +60 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +215 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +332 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +423 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +60 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +67 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +329 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +67 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +79 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +53 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +110 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +370 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +91 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +92 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +41 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +347 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +169 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +395 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +376 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +96 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +182 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1801 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +362 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +214 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +139 -0
- 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 +2297 -0
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +883 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +32 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +210 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +876 -402
- 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 +214 -104
- 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 +2 -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 +39 -0
- 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 +28 -11
- 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 +323 -19
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +16 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -164
- data/spec/mongoid/extensions/date_time_spec.rb +19 -66
- data/spec/mongoid/extensions/decimal128_spec.rb +3 -1
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +25 -4
- data/spec/mongoid/extensions/hash_spec.rb +138 -1
- data/spec/mongoid/extensions/integer_spec.rb +22 -3
- 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 +27 -31
- data/spec/mongoid/extensions/range_spec.rb +9 -0
- data/spec/mongoid/extensions/regexp_spec.rb +25 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +113 -31
- 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 +31 -6
- data/spec/mongoid/extensions/time_with_zone_spec.rb +35 -6
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +304 -15
- 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 +420 -38
- data/spec/mongoid/findable_spec.rb +98 -19
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +69 -17
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +273 -114
- 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 +119 -29
- data/spec/mongoid/persistable/deletable_spec.rb +307 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +225 -12
- data/spec/mongoid/persistable/incrementable_spec.rb +29 -13
- 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 +218 -50
- data/spec/mongoid/persistable/settable_spec.rb +213 -32
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +222 -21
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +116 -25
- data/spec/mongoid/persistence_context_spec.rb +696 -0
- data/spec/mongoid/positional_spec.rb +3 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +647 -45
- data/spec/mongoid/relations/proxy_spec.rb +126 -98
- data/spec/mongoid/reloadable_spec.rb +346 -17
- data/spec/mongoid/scopable_spec.rb +82 -22
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -79
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +145 -26
- data/spec/mongoid/stateful_spec.rb +3 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +15 -13
- data/spec/mongoid/tasks/database_spec.rb +3 -1
- data/spec/mongoid/threaded_spec.rb +72 -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 +119 -81
- data/spec/mongoid/validatable_spec.rb +21 -3
- data/spec/mongoid_spec.rb +2 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- 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 +386 -0
- data/spec/shared/lib/mrss/docker_runner.rb +271 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +199 -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 +339 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +379 -0
- data/spec/shared/shlib/set_env.sh +132 -0
- data/spec/spec_helper.rb +133 -53
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +53 -0
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +42 -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/array_field.rb +7 -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 +13 -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 +6 -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/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +60 -0
- data.tar.gz.sig +0 -0
- metadata +1347 -813
- metadata.gz.sig +0 -0
- data/lib/mongoid/clients/thread_options.rb +0 -19
- data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
- 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/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -21
- data/lib/mongoid/matchable/gte.rb +0 -21
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -21
- data/lib/mongoid/matchable/lte.rb +0 -21
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- 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/railties/document.rb +0 -12
- data/lib/mongoid/relations/accessors.rb +0 -264
- data/lib/mongoid/relations/auto_save.rb +0 -86
- 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 -150
- 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 -41
- data/lib/mongoid/relations/embedded/batchable.rb +0 -382
- data/lib/mongoid/relations/embedded/in.rb +0 -229
- data/lib/mongoid/relations/embedded/many.rb +0 -642
- data/lib/mongoid/relations/embedded/one.rb +0 -222
- data/lib/mongoid/relations/macros.rb +0 -359
- data/lib/mongoid/relations/many.rb +0 -238
- 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 -245
- data/lib/mongoid/relations/referenced/in.rb +0 -295
- data/lib/mongoid/relations/referenced/many.rb +0 -808
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -472
- data/lib/mongoid/relations/referenced/one.rb +0 -276
- data/lib/mongoid/relations/reflections.rb +0 -64
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets/enumerable.rb +0 -473
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -94
- 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 -14
- data/spec/app/models/album.rb +0 -14
- 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 -66
- 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 -28
- 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 -15
- data/spec/app/models/breed.rb +0 -4
- data/spec/app/models/browser.rb +0 -6
- data/spec/app/models/building.rb +0 -6
- data/spec/app/models/building_address.rb +0 -7
- data/spec/app/models/bus.rb +0 -7
- data/spec/app/models/business.rb +0 -5
- data/spec/app/models/callback_test.rb +0 -9
- data/spec/app/models/canvas.rb +0 -25
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/cat.rb +0 -8
- data/spec/app/models/category.rb +0 -8
- data/spec/app/models/child.rb +0 -4
- data/spec/app/models/child_doc.rb +0 -22
- data/spec/app/models/church.rb +0 -6
- data/spec/app/models/circle.rb +0 -3
- data/spec/app/models/circuit.rb +0 -4
- data/spec/app/models/circus.rb +0 -7
- data/spec/app/models/code.rb +0 -11
- data/spec/app/models/comment.rb +0 -16
- data/spec/app/models/company.rb +0 -5
- data/spec/app/models/consumption_period.rb +0 -7
- data/spec/app/models/contextable_item.rb +0 -5
- data/spec/app/models/contractor.rb +0 -5
- data/spec/app/models/cookie.rb +0 -6
- data/spec/app/models/country_code.rb +0 -8
- data/spec/app/models/courier_job.rb +0 -4
- data/spec/app/models/definition.rb +0 -9
- data/spec/app/models/description.rb +0 -11
- data/spec/app/models/dictionary.rb +0 -10
- data/spec/app/models/division.rb +0 -10
- data/spec/app/models/doctor.rb +0 -12
- data/spec/app/models/dog.rb +0 -7
- data/spec/app/models/dokument.rb +0 -5
- 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 -6
- data/spec/app/models/ordered_preference.rb +0 -6
- data/spec/app/models/oscar.rb +0 -15
- 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 -8
- 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 -51
- 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 -4
- 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/extensions/origin/regexp_raw_spec.rb +0 -89
- 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/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -75
- data/spec/mongoid/matchable/gte_spec.rb +0 -74
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -74
- data/spec/mongoid/matchable/lte_spec.rb +0 -74
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- 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 -708
- data/spec/mongoid/railties/document_spec.rb +0 -24
- data/spec/mongoid/relations/accessors_spec.rb +0 -821
- data/spec/mongoid/relations/auto_save_spec.rb +0 -281
- 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 -226
- 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 -389
- 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 -117
- 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 -239
- 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 -4166
- data/spec/mongoid/relations/embedded/one_spec.rb +0 -1067
- data/spec/mongoid/relations/macros_spec.rb +0 -631
- data/spec/mongoid/relations/metadata_spec.rb +0 -1971
- 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 -1326
- data/spec/mongoid/relations/referenced/many_spec.rb +0 -3806
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +0 -3589
- 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 -449
- data/spec/mongoid/relations/targets/enumerable_spec.rb +0 -1717
- data/spec/mongoid/relations/touchable_spec.rb +0 -362
- data/spec/mongoid/relations_spec.rb +0 -189
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
2
4
|
|
|
3
5
|
describe Mongoid::Criteria do
|
|
@@ -38,7 +40,7 @@ describe Mongoid::Criteria do
|
|
|
38
40
|
context "when the entries are the same" do
|
|
39
41
|
|
|
40
42
|
let!(:band) do
|
|
41
|
-
Band.create(name: "Depeche Mode")
|
|
43
|
+
Band.create!(name: "Depeche Mode")
|
|
42
44
|
end
|
|
43
45
|
|
|
44
46
|
let(:other) do
|
|
@@ -53,11 +55,11 @@ describe Mongoid::Criteria do
|
|
|
53
55
|
context "when the entries are not the same" do
|
|
54
56
|
|
|
55
57
|
let!(:band) do
|
|
56
|
-
Band.create(name: "Depeche Mode")
|
|
58
|
+
Band.create!(name: "Depeche Mode")
|
|
57
59
|
end
|
|
58
60
|
|
|
59
61
|
let!(:other_band) do
|
|
60
|
-
Band.create(name: "Tool")
|
|
62
|
+
Band.create!(name: "Tool")
|
|
61
63
|
end
|
|
62
64
|
|
|
63
65
|
let(:other) do
|
|
@@ -102,21 +104,21 @@ describe Mongoid::Criteria do
|
|
|
102
104
|
describe "#asc" do
|
|
103
105
|
|
|
104
106
|
let(:person) do
|
|
105
|
-
Person.create
|
|
107
|
+
Person.create!
|
|
106
108
|
end
|
|
107
109
|
|
|
108
110
|
context "when the documents are embedded" do
|
|
109
111
|
|
|
110
112
|
let!(:hobrecht) do
|
|
111
|
-
person.addresses.create(street: "hobrecht", name: "hobrecht")
|
|
113
|
+
person.addresses.create!(street: "hobrecht", name: "hobrecht")
|
|
112
114
|
end
|
|
113
115
|
|
|
114
116
|
let!(:friedel) do
|
|
115
|
-
person.addresses.create(street: "friedel", name: "friedel")
|
|
117
|
+
person.addresses.create!(street: "friedel", name: "friedel")
|
|
116
118
|
end
|
|
117
119
|
|
|
118
120
|
let!(:pfluger) do
|
|
119
|
-
person.addresses.create(street: "pfluger", name: "pfluger")
|
|
121
|
+
person.addresses.create!(street: "pfluger", name: "pfluger")
|
|
120
122
|
end
|
|
121
123
|
|
|
122
124
|
let(:criteria) do
|
|
@@ -132,7 +134,7 @@ describe Mongoid::Criteria do
|
|
|
132
134
|
describe "#batch_size" do
|
|
133
135
|
|
|
134
136
|
let(:person) do
|
|
135
|
-
Person.create
|
|
137
|
+
Person.create!
|
|
136
138
|
end
|
|
137
139
|
|
|
138
140
|
let(:criteria) do
|
|
@@ -151,7 +153,7 @@ describe Mongoid::Criteria do
|
|
|
151
153
|
describe "#read" do
|
|
152
154
|
|
|
153
155
|
let(:person) do
|
|
154
|
-
Person.create
|
|
156
|
+
Person.create!
|
|
155
157
|
end
|
|
156
158
|
|
|
157
159
|
let(:criteria) do
|
|
@@ -168,11 +170,11 @@ describe Mongoid::Criteria do
|
|
|
168
170
|
context "when provided a single field" do
|
|
169
171
|
|
|
170
172
|
let!(:depeche) do
|
|
171
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
173
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
172
174
|
end
|
|
173
175
|
|
|
174
176
|
let!(:tool) do
|
|
175
|
-
Band.create(name: "Tool", likes: 500)
|
|
177
|
+
Band.create!(name: "Tool", likes: 500)
|
|
176
178
|
end
|
|
177
179
|
|
|
178
180
|
let(:criteria) do
|
|
@@ -210,11 +212,11 @@ describe Mongoid::Criteria do
|
|
|
210
212
|
context "when provided a single field" do
|
|
211
213
|
|
|
212
214
|
let!(:depeche) do
|
|
213
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
215
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
214
216
|
end
|
|
215
217
|
|
|
216
218
|
let!(:tool) do
|
|
217
|
-
Band.create(name: "Tool", likes: 500)
|
|
219
|
+
Band.create!(name: "Tool", likes: 500)
|
|
218
220
|
end
|
|
219
221
|
|
|
220
222
|
let(:criteria) do
|
|
@@ -236,11 +238,11 @@ describe Mongoid::Criteria do
|
|
|
236
238
|
describe "\##{method}" do
|
|
237
239
|
|
|
238
240
|
let!(:match) do
|
|
239
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
241
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
240
242
|
end
|
|
241
243
|
|
|
242
244
|
let!(:non_match) do
|
|
243
|
-
Band.create(genres: [ "house" ])
|
|
245
|
+
Band.create!(genres: [ "house" ])
|
|
244
246
|
end
|
|
245
247
|
|
|
246
248
|
let(:criteria) do
|
|
@@ -258,11 +260,11 @@ describe Mongoid::Criteria do
|
|
|
258
260
|
describe "\##{method}" do
|
|
259
261
|
|
|
260
262
|
let!(:match) do
|
|
261
|
-
Band.create(name: "Depeche Mode", genres: [ "electro" ])
|
|
263
|
+
Band.create!(name: "Depeche Mode", genres: [ "electro" ])
|
|
262
264
|
end
|
|
263
265
|
|
|
264
266
|
let!(:non_match) do
|
|
265
|
-
Band.create(genres: [ "house" ])
|
|
267
|
+
Band.create!(genres: [ "house" ])
|
|
266
268
|
end
|
|
267
269
|
|
|
268
270
|
let(:criteria) do
|
|
@@ -278,26 +280,41 @@ describe Mongoid::Criteria do
|
|
|
278
280
|
describe "#as_json" do
|
|
279
281
|
|
|
280
282
|
let!(:band) do
|
|
281
|
-
Band.create(name: "Depeche Mode")
|
|
283
|
+
Band.create!(name: "Depeche Mode")
|
|
282
284
|
end
|
|
283
285
|
|
|
284
286
|
let(:criteria) do
|
|
285
287
|
Band.where(name: "Depeche Mode")
|
|
286
288
|
end
|
|
287
289
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
+
# as_json changed in rails 6 to call as_json on serializable_hash.
|
|
291
|
+
# https://github.com/rails/rails/commit/2e5cb980a448e7f4ab00df6e9ad4c1cc456616aa
|
|
292
|
+
|
|
293
|
+
context 'rails < 6' do
|
|
294
|
+
max_rails_version '5.2'
|
|
295
|
+
|
|
296
|
+
it "returns the criteria as a json hash" do
|
|
297
|
+
expect(criteria.as_json).to eq([ band.serializable_hash ])
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
context 'rails >= 6' do
|
|
302
|
+
min_rails_version '6.0'
|
|
303
|
+
|
|
304
|
+
it "returns the criteria as a json hash" do
|
|
305
|
+
expect(criteria.as_json).to eq([ band.serializable_hash.as_json ])
|
|
306
|
+
end
|
|
290
307
|
end
|
|
291
308
|
end
|
|
292
309
|
|
|
293
310
|
describe "#between" do
|
|
294
311
|
|
|
295
312
|
let!(:match) do
|
|
296
|
-
Band.create(member_count: 3)
|
|
313
|
+
Band.create!(member_count: 3)
|
|
297
314
|
end
|
|
298
315
|
|
|
299
316
|
let!(:non_match) do
|
|
300
|
-
Band.create(member_count: 10)
|
|
317
|
+
Band.create!(member_count: 10)
|
|
301
318
|
end
|
|
302
319
|
|
|
303
320
|
let(:criteria) do
|
|
@@ -363,7 +380,7 @@ describe Mongoid::Criteria do
|
|
|
363
380
|
describe "#cache" do
|
|
364
381
|
|
|
365
382
|
let!(:person) do
|
|
366
|
-
Person.create
|
|
383
|
+
Person.create!
|
|
367
384
|
end
|
|
368
385
|
|
|
369
386
|
context "when no eager loading is involved" do
|
|
@@ -412,7 +429,7 @@ describe Mongoid::Criteria do
|
|
|
412
429
|
end
|
|
413
430
|
|
|
414
431
|
let(:criteria) do
|
|
415
|
-
Band.where(name: "Depeche Mode").asc(:name).includes(:records)
|
|
432
|
+
Band.where(name: "Depeche Mode").asc(:name).includes(:records).read(mode: :secondary)
|
|
416
433
|
end
|
|
417
434
|
|
|
418
435
|
before do
|
|
@@ -433,7 +450,7 @@ describe Mongoid::Criteria do
|
|
|
433
450
|
end
|
|
434
451
|
|
|
435
452
|
it "contains equal options" do
|
|
436
|
-
expect(clone.options).to eq({ sort: { "name" => 1 }})
|
|
453
|
+
expect(clone.options).to eq({ sort: { "name" => 1 }, read: { mode: :secondary } })
|
|
437
454
|
end
|
|
438
455
|
|
|
439
456
|
it "clones the options" do
|
|
@@ -467,6 +484,10 @@ describe Mongoid::Criteria do
|
|
|
467
484
|
it "sets the context to nil" do
|
|
468
485
|
expect(clone.instance_variable_get(:@context)).to be_nil
|
|
469
486
|
end
|
|
487
|
+
|
|
488
|
+
it 'does not convert the option keys to string from symbols' do
|
|
489
|
+
expect(clone.options[:read][:mode]).to eq(:secondary)
|
|
490
|
+
end
|
|
470
491
|
end
|
|
471
492
|
end
|
|
472
493
|
|
|
@@ -511,11 +532,11 @@ describe Mongoid::Criteria do
|
|
|
511
532
|
describe "#delete" do
|
|
512
533
|
|
|
513
534
|
let(:depeche) do
|
|
514
|
-
Band.create(name: "Depeche Mode")
|
|
535
|
+
Band.create!(name: "Depeche Mode")
|
|
515
536
|
end
|
|
516
537
|
|
|
517
538
|
let(:tool) do
|
|
518
|
-
Band.create(name: "Tool")
|
|
539
|
+
Band.create!(name: "Tool")
|
|
519
540
|
end
|
|
520
541
|
|
|
521
542
|
context "when no selector is provided" do
|
|
@@ -569,7 +590,7 @@ describe Mongoid::Criteria do
|
|
|
569
590
|
describe "#each" do
|
|
570
591
|
|
|
571
592
|
let!(:band) do
|
|
572
|
-
Band.create(name: "Depeche Mode")
|
|
593
|
+
Band.create!(name: "Depeche Mode")
|
|
573
594
|
end
|
|
574
595
|
|
|
575
596
|
context "when provided a block" do
|
|
@@ -589,13 +610,14 @@ describe Mongoid::Criteria do
|
|
|
589
610
|
describe "#elem_match" do
|
|
590
611
|
|
|
591
612
|
let!(:match) do
|
|
592
|
-
Band.create(name: "Depeche Mode").tap do |band|
|
|
593
|
-
band.records
|
|
613
|
+
Band.create!(name: "Depeche Mode").tap do |band|
|
|
614
|
+
r = band.records
|
|
615
|
+
r.create!(name: "101")
|
|
594
616
|
end
|
|
595
617
|
end
|
|
596
618
|
|
|
597
619
|
let!(:non_match) do
|
|
598
|
-
Band.create(genres: [ "house" ])
|
|
620
|
+
Band.create!(genres: [ "house" ])
|
|
599
621
|
end
|
|
600
622
|
|
|
601
623
|
let(:criteria) do
|
|
@@ -641,7 +663,7 @@ describe Mongoid::Criteria do
|
|
|
641
663
|
context "when matching documents exist" do
|
|
642
664
|
|
|
643
665
|
let!(:match) do
|
|
644
|
-
Band.create(name: "Depeche Mode")
|
|
666
|
+
Band.create!(name: "Depeche Mode")
|
|
645
667
|
end
|
|
646
668
|
|
|
647
669
|
let(:criteria) do
|
|
@@ -656,7 +678,7 @@ describe Mongoid::Criteria do
|
|
|
656
678
|
context "when no matching documents exist" do
|
|
657
679
|
|
|
658
680
|
let!(:nonmatch) do
|
|
659
|
-
Band.create(name: "New Order")
|
|
681
|
+
Band.create!(name: "New Order")
|
|
660
682
|
end
|
|
661
683
|
|
|
662
684
|
let(:criteria) do
|
|
@@ -672,11 +694,11 @@ describe Mongoid::Criteria do
|
|
|
672
694
|
describe "#exists" do
|
|
673
695
|
|
|
674
696
|
let!(:match) do
|
|
675
|
-
Band.create(name: "Depeche Mode")
|
|
697
|
+
Band.create!(name: "Depeche Mode")
|
|
676
698
|
end
|
|
677
699
|
|
|
678
700
|
let!(:non_match) do
|
|
679
|
-
Band.create
|
|
701
|
+
Band.create!
|
|
680
702
|
end
|
|
681
703
|
|
|
682
704
|
let(:criteria) do
|
|
@@ -693,7 +715,7 @@ describe Mongoid::Criteria do
|
|
|
693
715
|
context "when matching documents exist" do
|
|
694
716
|
|
|
695
717
|
let!(:match) do
|
|
696
|
-
Band.create(name: "Depeche Mode")
|
|
718
|
+
Band.create!(name: "Depeche Mode")
|
|
697
719
|
end
|
|
698
720
|
|
|
699
721
|
let(:criteria) do
|
|
@@ -763,23 +785,83 @@ describe Mongoid::Criteria do
|
|
|
763
785
|
|
|
764
786
|
describe "#field_list" do
|
|
765
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
|
+
|
|
766
822
|
let(:criteria) do
|
|
767
|
-
Band.
|
|
823
|
+
Band.where(name: "Depeche Mode")
|
|
768
824
|
end
|
|
769
825
|
|
|
770
|
-
|
|
771
|
-
|
|
826
|
+
context "when given a block" do
|
|
827
|
+
it "behaves as Enumerable" do
|
|
828
|
+
result = criteria.find { |c| c.name == "Depeche Mode" }
|
|
829
|
+
expect(result).to eq(depeche)
|
|
830
|
+
end
|
|
831
|
+
end
|
|
832
|
+
|
|
833
|
+
context "when given a Proc and a block" do
|
|
834
|
+
it "behaves as Enumerable" do
|
|
835
|
+
result = criteria.find(-> {"default"}) { |c| c.name == "Not Depeche Mode" }
|
|
836
|
+
expect(result).to eq("default")
|
|
837
|
+
end
|
|
838
|
+
end
|
|
839
|
+
|
|
840
|
+
context "when given a Proc" do
|
|
841
|
+
it "behaves as Enumerable" do
|
|
842
|
+
lambda do
|
|
843
|
+
criteria.find(-> {"default"})
|
|
844
|
+
# Proc is not serializable to a BSON type
|
|
845
|
+
end.should raise_error(BSON::Error::UnserializableClass)
|
|
846
|
+
end
|
|
847
|
+
end
|
|
848
|
+
|
|
849
|
+
context "when given an id" do
|
|
850
|
+
it "behaves as Findable" do
|
|
851
|
+
result = criteria.find(depeche.id)
|
|
852
|
+
expect(result).to eq(depeche)
|
|
853
|
+
end
|
|
772
854
|
end
|
|
773
855
|
end
|
|
774
856
|
|
|
775
857
|
describe "#find_one_and_update" do
|
|
776
858
|
|
|
777
859
|
let!(:depeche) do
|
|
778
|
-
Band.create(name: "Depeche Mode")
|
|
860
|
+
Band.create!(name: "Depeche Mode")
|
|
779
861
|
end
|
|
780
862
|
|
|
781
863
|
let!(:tool) do
|
|
782
|
-
Band.create(name: "Tool")
|
|
864
|
+
Band.create!(name: "Tool")
|
|
783
865
|
end
|
|
784
866
|
|
|
785
867
|
context "when the selector matches" do
|
|
@@ -970,13 +1052,14 @@ describe Mongoid::Criteria do
|
|
|
970
1052
|
end
|
|
971
1053
|
|
|
972
1054
|
describe "#geo_near" do
|
|
1055
|
+
max_server_version '4.0'
|
|
973
1056
|
|
|
974
1057
|
before do
|
|
975
1058
|
Bar.create_indexes
|
|
976
1059
|
end
|
|
977
1060
|
|
|
978
1061
|
let!(:match) do
|
|
979
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
1062
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
980
1063
|
end
|
|
981
1064
|
|
|
982
1065
|
let(:criteria) do
|
|
@@ -988,7 +1071,7 @@ describe Mongoid::Criteria do
|
|
|
988
1071
|
end
|
|
989
1072
|
end
|
|
990
1073
|
|
|
991
|
-
describe "#
|
|
1074
|
+
describe "#eq" do
|
|
992
1075
|
|
|
993
1076
|
let!(:match) do
|
|
994
1077
|
Band.create(member_count: 5)
|
|
@@ -998,6 +1081,25 @@ describe Mongoid::Criteria do
|
|
|
998
1081
|
Band.create(member_count: 1)
|
|
999
1082
|
end
|
|
1000
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
|
+
|
|
1001
1103
|
let(:criteria) do
|
|
1002
1104
|
Band.gt(member_count: 4)
|
|
1003
1105
|
end
|
|
@@ -1010,11 +1112,11 @@ describe Mongoid::Criteria do
|
|
|
1010
1112
|
describe "#gte" do
|
|
1011
1113
|
|
|
1012
1114
|
let!(:match) do
|
|
1013
|
-
Band.create(member_count: 5)
|
|
1115
|
+
Band.create!(member_count: 5)
|
|
1014
1116
|
end
|
|
1015
1117
|
|
|
1016
1118
|
let!(:non_match) do
|
|
1017
|
-
Band.create(member_count: 1)
|
|
1119
|
+
Band.create!(member_count: 1)
|
|
1018
1120
|
end
|
|
1019
1121
|
|
|
1020
1122
|
let(:criteria) do
|
|
@@ -1033,11 +1135,11 @@ describe Mongoid::Criteria do
|
|
|
1033
1135
|
context "when querying on a normal field" do
|
|
1034
1136
|
|
|
1035
1137
|
let!(:match) do
|
|
1036
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
1138
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
1037
1139
|
end
|
|
1038
1140
|
|
|
1039
1141
|
let!(:non_match) do
|
|
1040
|
-
Band.create(genres: [ "house" ])
|
|
1142
|
+
Band.create!(genres: [ "house" ])
|
|
1041
1143
|
end
|
|
1042
1144
|
|
|
1043
1145
|
let(:criteria) do
|
|
@@ -1056,7 +1158,7 @@ describe Mongoid::Criteria do
|
|
|
1056
1158
|
end
|
|
1057
1159
|
|
|
1058
1160
|
let!(:match_one) do
|
|
1059
|
-
Person.create(preference_ids: [ id ])
|
|
1161
|
+
Person.create!(preference_ids: [ id ])
|
|
1060
1162
|
end
|
|
1061
1163
|
|
|
1062
1164
|
context "when providing valid ids" do
|
|
@@ -1097,7 +1199,7 @@ describe Mongoid::Criteria do
|
|
|
1097
1199
|
context "when the relation is a one to one" do
|
|
1098
1200
|
|
|
1099
1201
|
let!(:game) do
|
|
1100
|
-
Game.create
|
|
1202
|
+
Game.create!
|
|
1101
1203
|
end
|
|
1102
1204
|
|
|
1103
1205
|
let(:criteria) do
|
|
@@ -1135,7 +1237,7 @@ describe Mongoid::Criteria do
|
|
|
1135
1237
|
describe "#includes" do
|
|
1136
1238
|
|
|
1137
1239
|
let!(:person) do
|
|
1138
|
-
Person.create(age: 1)
|
|
1240
|
+
Person.create!(age: 1)
|
|
1139
1241
|
end
|
|
1140
1242
|
|
|
1141
1243
|
context "when providing a name that is not a relation" do
|
|
@@ -1150,11 +1252,11 @@ describe Mongoid::Criteria do
|
|
|
1150
1252
|
context "when providing one association" do
|
|
1151
1253
|
|
|
1152
1254
|
let!(:user) do
|
|
1153
|
-
User.create(posts: [ post1 ])
|
|
1255
|
+
User.create!(posts: [ post1 ])
|
|
1154
1256
|
end
|
|
1155
1257
|
|
|
1156
1258
|
let!(:post1) do
|
|
1157
|
-
Post.create
|
|
1259
|
+
Post.create!
|
|
1158
1260
|
end
|
|
1159
1261
|
|
|
1160
1262
|
let(:result) do
|
|
@@ -1173,15 +1275,15 @@ describe Mongoid::Criteria do
|
|
|
1173
1275
|
context "when providing a list of associations" do
|
|
1174
1276
|
|
|
1175
1277
|
let!(:user) do
|
|
1176
|
-
User.create(posts: [ post1 ], descriptions: [ description1 ])
|
|
1278
|
+
User.create!(posts: [ post1 ], descriptions: [ description1 ])
|
|
1177
1279
|
end
|
|
1178
1280
|
|
|
1179
1281
|
let!(:post1) do
|
|
1180
|
-
Post.create
|
|
1282
|
+
Post.create!
|
|
1181
1283
|
end
|
|
1182
1284
|
|
|
1183
1285
|
let!(:description1) do
|
|
1184
|
-
Description.create(details: 1)
|
|
1286
|
+
Description.create!(details: 1)
|
|
1185
1287
|
end
|
|
1186
1288
|
|
|
1187
1289
|
let(:result) do
|
|
@@ -1201,13 +1303,13 @@ describe Mongoid::Criteria do
|
|
|
1201
1303
|
context "when providing a nested association" do
|
|
1202
1304
|
|
|
1203
1305
|
let!(:user) do
|
|
1204
|
-
User.create
|
|
1306
|
+
User.create!
|
|
1205
1307
|
end
|
|
1206
1308
|
|
|
1207
1309
|
before do
|
|
1208
|
-
p = Post.create(alerts: [ Alert.create ])
|
|
1310
|
+
p = Post.create!(alerts: [ Alert.create! ])
|
|
1209
1311
|
user.posts = [ p ]
|
|
1210
|
-
user.save
|
|
1312
|
+
user.save!
|
|
1211
1313
|
end
|
|
1212
1314
|
|
|
1213
1315
|
let(:result) do
|
|
@@ -1227,7 +1329,7 @@ describe Mongoid::Criteria do
|
|
|
1227
1329
|
context "when providing a deeply nested association" do
|
|
1228
1330
|
|
|
1229
1331
|
let!(:user) do
|
|
1230
|
-
User.create
|
|
1332
|
+
User.create!
|
|
1231
1333
|
end
|
|
1232
1334
|
|
|
1233
1335
|
let(:results) do
|
|
@@ -1265,15 +1367,15 @@ describe Mongoid::Criteria do
|
|
|
1265
1367
|
context "when the includes is on the subclass" do
|
|
1266
1368
|
|
|
1267
1369
|
let!(:c_one) do
|
|
1268
|
-
C.create
|
|
1370
|
+
C.create!
|
|
1269
1371
|
end
|
|
1270
1372
|
|
|
1271
1373
|
let!(:c_two) do
|
|
1272
|
-
C.create
|
|
1374
|
+
C.create!
|
|
1273
1375
|
end
|
|
1274
1376
|
|
|
1275
1377
|
let!(:b) do
|
|
1276
|
-
B.create(c: c_two)
|
|
1378
|
+
B.create!(c: c_two)
|
|
1277
1379
|
end
|
|
1278
1380
|
|
|
1279
1381
|
let!(:results) do
|
|
@@ -1328,19 +1430,19 @@ describe Mongoid::Criteria do
|
|
|
1328
1430
|
context "when the includes is on the several relations" do
|
|
1329
1431
|
|
|
1330
1432
|
let!(:d_one) do
|
|
1331
|
-
D.create
|
|
1433
|
+
D.create!
|
|
1332
1434
|
end
|
|
1333
1435
|
|
|
1334
1436
|
let!(:d_two) do
|
|
1335
|
-
D.create
|
|
1437
|
+
D.create!
|
|
1336
1438
|
end
|
|
1337
1439
|
|
|
1338
1440
|
let!(:b) do
|
|
1339
|
-
B.create(d: d_two)
|
|
1441
|
+
B.create!(d: d_two)
|
|
1340
1442
|
end
|
|
1341
1443
|
|
|
1342
1444
|
let!(:c) do
|
|
1343
|
-
C.create(d: d_two)
|
|
1445
|
+
C.create!(d: d_two)
|
|
1344
1446
|
end
|
|
1345
1447
|
|
|
1346
1448
|
let!(:results) do
|
|
@@ -1399,19 +1501,19 @@ describe Mongoid::Criteria do
|
|
|
1399
1501
|
context "when the includes is on the several relations" do
|
|
1400
1502
|
|
|
1401
1503
|
let!(:d_one) do
|
|
1402
|
-
D.create
|
|
1504
|
+
D.create!
|
|
1403
1505
|
end
|
|
1404
1506
|
|
|
1405
1507
|
let!(:d_two) do
|
|
1406
|
-
D.create
|
|
1508
|
+
D.create!
|
|
1407
1509
|
end
|
|
1408
1510
|
|
|
1409
1511
|
let!(:bs) do
|
|
1410
|
-
2.times.map { B.create(d: d_two) }
|
|
1512
|
+
2.times.map { B.create!(d: d_two) }
|
|
1411
1513
|
end
|
|
1412
1514
|
|
|
1413
1515
|
let!(:cs) do
|
|
1414
|
-
2.times.map { C.create(d: d_two) }
|
|
1516
|
+
2.times.map { C.create!(d: d_two) }
|
|
1415
1517
|
end
|
|
1416
1518
|
|
|
1417
1519
|
let!(:results) do
|
|
@@ -1439,25 +1541,25 @@ describe Mongoid::Criteria do
|
|
|
1439
1541
|
end
|
|
1440
1542
|
end
|
|
1441
1543
|
|
|
1442
|
-
context "when including the same
|
|
1544
|
+
context "when including the same association multiple times" do
|
|
1443
1545
|
|
|
1444
1546
|
let(:criteria) do
|
|
1445
1547
|
Person.all.includes(:posts, :posts).includes(:posts)
|
|
1446
1548
|
end
|
|
1447
1549
|
|
|
1448
|
-
let(:
|
|
1550
|
+
let(:association) do
|
|
1449
1551
|
Person.reflect_on_association(:posts)
|
|
1450
1552
|
end
|
|
1451
1553
|
|
|
1452
|
-
it "does not duplicate the
|
|
1453
|
-
expect(criteria.inclusions).to eq([
|
|
1554
|
+
it "does not duplicate the association in the inclusions" do
|
|
1555
|
+
expect(criteria.inclusions).to eq([ association ])
|
|
1454
1556
|
end
|
|
1455
1557
|
end
|
|
1456
1558
|
|
|
1457
1559
|
context "when mapping the results more than once" do
|
|
1458
1560
|
|
|
1459
1561
|
let!(:post) do
|
|
1460
|
-
person.posts.create(title: "one")
|
|
1562
|
+
person.posts.create!(title: "one")
|
|
1461
1563
|
end
|
|
1462
1564
|
|
|
1463
1565
|
let(:criteria) do
|
|
@@ -1479,15 +1581,15 @@ describe Mongoid::Criteria do
|
|
|
1479
1581
|
context "when the criteria is from the root" do
|
|
1480
1582
|
|
|
1481
1583
|
let!(:person_two) do
|
|
1482
|
-
Person.create(age: 2)
|
|
1584
|
+
Person.create!(age: 2)
|
|
1483
1585
|
end
|
|
1484
1586
|
|
|
1485
1587
|
let!(:post_one) do
|
|
1486
|
-
person.posts.create(title: "one")
|
|
1588
|
+
person.posts.create!(title: "one")
|
|
1487
1589
|
end
|
|
1488
1590
|
|
|
1489
1591
|
let!(:post_two) do
|
|
1490
|
-
person_two.posts.create(title: "two")
|
|
1592
|
+
person_two.posts.create!(title: "two")
|
|
1491
1593
|
end
|
|
1492
1594
|
|
|
1493
1595
|
context "when calling first" do
|
|
@@ -1536,15 +1638,15 @@ describe Mongoid::Criteria do
|
|
|
1536
1638
|
context "when the criteria is from an embedded relation" do
|
|
1537
1639
|
|
|
1538
1640
|
let(:peep) do
|
|
1539
|
-
Person.create
|
|
1641
|
+
Person.create!
|
|
1540
1642
|
end
|
|
1541
1643
|
|
|
1542
1644
|
let!(:address_one) do
|
|
1543
|
-
peep.addresses.create(street: "rosenthaler")
|
|
1645
|
+
peep.addresses.create!(street: "rosenthaler")
|
|
1544
1646
|
end
|
|
1545
1647
|
|
|
1546
1648
|
let!(:address_two) do
|
|
1547
|
-
peep.addresses.create(street: "weinmeister")
|
|
1649
|
+
peep.addresses.create!(street: "weinmeister")
|
|
1548
1650
|
end
|
|
1549
1651
|
|
|
1550
1652
|
let!(:depeche) do
|
|
@@ -1558,8 +1660,8 @@ describe Mongoid::Criteria do
|
|
|
1558
1660
|
before do
|
|
1559
1661
|
address_one.band = depeche
|
|
1560
1662
|
address_two.band = tool
|
|
1561
|
-
address_one.save
|
|
1562
|
-
address_two.save
|
|
1663
|
+
address_one.save!
|
|
1664
|
+
address_two.save!
|
|
1563
1665
|
end
|
|
1564
1666
|
|
|
1565
1667
|
context "when calling first" do
|
|
@@ -1656,11 +1758,11 @@ describe Mongoid::Criteria do
|
|
|
1656
1758
|
end
|
|
1657
1759
|
|
|
1658
1760
|
let!(:post_one) do
|
|
1659
|
-
person.posts.create(title: "one")
|
|
1761
|
+
person.posts.create!(title: "one")
|
|
1660
1762
|
end
|
|
1661
1763
|
|
|
1662
1764
|
let!(:post_two) do
|
|
1663
|
-
person.posts.create(title: "two")
|
|
1765
|
+
person.posts.create!(title: "two")
|
|
1664
1766
|
end
|
|
1665
1767
|
|
|
1666
1768
|
context "when the criteria has no options" do
|
|
@@ -1778,11 +1880,11 @@ describe Mongoid::Criteria do
|
|
|
1778
1880
|
context "when the criteria has limiting options" do
|
|
1779
1881
|
|
|
1780
1882
|
let!(:person_two) do
|
|
1781
|
-
Person.create
|
|
1883
|
+
Person.create!
|
|
1782
1884
|
end
|
|
1783
1885
|
|
|
1784
1886
|
let!(:post_three) do
|
|
1785
|
-
person_two.posts.create(title: "three")
|
|
1887
|
+
person_two.posts.create!(title: "three")
|
|
1786
1888
|
end
|
|
1787
1889
|
|
|
1788
1890
|
let!(:criteria) do
|
|
@@ -1814,11 +1916,11 @@ describe Mongoid::Criteria do
|
|
|
1814
1916
|
context "when including a has and belongs to many" do
|
|
1815
1917
|
|
|
1816
1918
|
let!(:preference_one) do
|
|
1817
|
-
person.preferences.create(name: "one")
|
|
1919
|
+
person.preferences.create!(name: "one")
|
|
1818
1920
|
end
|
|
1819
1921
|
|
|
1820
1922
|
let!(:preference_two) do
|
|
1821
|
-
person.preferences.create(name: "two")
|
|
1923
|
+
person.preferences.create!(name: "two")
|
|
1822
1924
|
end
|
|
1823
1925
|
|
|
1824
1926
|
context "when one of the related items is deleted" do
|
|
@@ -1922,11 +2024,11 @@ describe Mongoid::Criteria do
|
|
|
1922
2024
|
context "when including a has many" do
|
|
1923
2025
|
|
|
1924
2026
|
let!(:post_one) do
|
|
1925
|
-
person.posts.create(title: "one")
|
|
2027
|
+
person.posts.create!(title: "one")
|
|
1926
2028
|
end
|
|
1927
2029
|
|
|
1928
2030
|
let!(:post_two) do
|
|
1929
|
-
person.posts.create(title: "two")
|
|
2031
|
+
person.posts.create!(title: "two")
|
|
1930
2032
|
end
|
|
1931
2033
|
|
|
1932
2034
|
context "when the criteria has no options" do
|
|
@@ -2011,11 +2113,11 @@ describe Mongoid::Criteria do
|
|
|
2011
2113
|
context "when the criteria has limiting options" do
|
|
2012
2114
|
|
|
2013
2115
|
let!(:person_two) do
|
|
2014
|
-
Person.create
|
|
2116
|
+
Person.create!
|
|
2015
2117
|
end
|
|
2016
2118
|
|
|
2017
2119
|
let!(:post_three) do
|
|
2018
|
-
person_two.posts.create(title: "three")
|
|
2120
|
+
person_two.posts.create!(title: "three")
|
|
2019
2121
|
end
|
|
2020
2122
|
|
|
2021
2123
|
let!(:criteria) do
|
|
@@ -2076,7 +2178,7 @@ describe Mongoid::Criteria do
|
|
|
2076
2178
|
context "when the criteria has limiting options" do
|
|
2077
2179
|
|
|
2078
2180
|
let!(:person_two) do
|
|
2079
|
-
Person.create(age: 2)
|
|
2181
|
+
Person.create!(age: 2)
|
|
2080
2182
|
end
|
|
2081
2183
|
|
|
2082
2184
|
let!(:game_three) do
|
|
@@ -2108,7 +2210,7 @@ describe Mongoid::Criteria do
|
|
|
2108
2210
|
context "when including a belongs to" do
|
|
2109
2211
|
|
|
2110
2212
|
let(:person_two) do
|
|
2111
|
-
Person.create(age: 2)
|
|
2213
|
+
Person.create!(age: 2)
|
|
2112
2214
|
end
|
|
2113
2215
|
|
|
2114
2216
|
let!(:game_one) do
|
|
@@ -2169,11 +2271,11 @@ describe Mongoid::Criteria do
|
|
|
2169
2271
|
context "when including multiples in the same criteria" do
|
|
2170
2272
|
|
|
2171
2273
|
let!(:post_one) do
|
|
2172
|
-
person.posts.create(title: "one")
|
|
2274
|
+
person.posts.create!(title: "one")
|
|
2173
2275
|
end
|
|
2174
2276
|
|
|
2175
2277
|
let!(:post_two) do
|
|
2176
|
-
person.posts.create(title: "two")
|
|
2278
|
+
person.posts.create!(title: "two")
|
|
2177
2279
|
end
|
|
2178
2280
|
|
|
2179
2281
|
let!(:game_one) do
|
|
@@ -2212,12 +2314,12 @@ describe Mongoid::Criteria do
|
|
|
2212
2314
|
Band.includes(:records)
|
|
2213
2315
|
end
|
|
2214
2316
|
|
|
2215
|
-
let(:
|
|
2317
|
+
let(:association) do
|
|
2216
2318
|
Band.relations["records"]
|
|
2217
2319
|
end
|
|
2218
2320
|
|
|
2219
2321
|
it "returns the inclusions" do
|
|
2220
|
-
expect(criteria.inclusions).to eq([
|
|
2322
|
+
expect(criteria.inclusions).to eq([ association ])
|
|
2221
2323
|
end
|
|
2222
2324
|
end
|
|
2223
2325
|
|
|
@@ -2227,27 +2329,27 @@ describe Mongoid::Criteria do
|
|
|
2227
2329
|
Band.all
|
|
2228
2330
|
end
|
|
2229
2331
|
|
|
2230
|
-
let(:
|
|
2332
|
+
let(:association) do
|
|
2231
2333
|
Band.relations["records"]
|
|
2232
2334
|
end
|
|
2233
2335
|
|
|
2234
2336
|
before do
|
|
2235
|
-
criteria.inclusions = [
|
|
2337
|
+
criteria.inclusions = [ association ]
|
|
2236
2338
|
end
|
|
2237
2339
|
|
|
2238
2340
|
it "sets the inclusions" do
|
|
2239
|
-
expect(criteria.inclusions).to eq([
|
|
2341
|
+
expect(criteria.inclusions).to eq([ association ])
|
|
2240
2342
|
end
|
|
2241
2343
|
end
|
|
2242
2344
|
|
|
2243
2345
|
describe "#lt" do
|
|
2244
2346
|
|
|
2245
2347
|
let!(:match) do
|
|
2246
|
-
Band.create(member_count: 1)
|
|
2348
|
+
Band.create!(member_count: 1)
|
|
2247
2349
|
end
|
|
2248
2350
|
|
|
2249
2351
|
let!(:non_match) do
|
|
2250
|
-
Band.create(member_count: 5)
|
|
2352
|
+
Band.create!(member_count: 5)
|
|
2251
2353
|
end
|
|
2252
2354
|
|
|
2253
2355
|
let(:criteria) do
|
|
@@ -2262,11 +2364,11 @@ describe Mongoid::Criteria do
|
|
|
2262
2364
|
describe "#lte" do
|
|
2263
2365
|
|
|
2264
2366
|
let!(:match) do
|
|
2265
|
-
Band.create(member_count: 4)
|
|
2367
|
+
Band.create!(member_count: 4)
|
|
2266
2368
|
end
|
|
2267
2369
|
|
|
2268
2370
|
let!(:non_match) do
|
|
2269
|
-
Band.create(member_count: 5)
|
|
2371
|
+
Band.create!(member_count: 5)
|
|
2270
2372
|
end
|
|
2271
2373
|
|
|
2272
2374
|
let(:criteria) do
|
|
@@ -2299,11 +2401,11 @@ describe Mongoid::Criteria do
|
|
|
2299
2401
|
end
|
|
2300
2402
|
|
|
2301
2403
|
let!(:depeche_mode) do
|
|
2302
|
-
Band.create(name: "Depeche Mode", likes: 200)
|
|
2404
|
+
Band.create!(name: "Depeche Mode", likes: 200)
|
|
2303
2405
|
end
|
|
2304
2406
|
|
|
2305
2407
|
let!(:tool) do
|
|
2306
|
-
Band.create(name: "Tool", likes: 100)
|
|
2408
|
+
Band.create!(name: "Tool", likes: 100)
|
|
2307
2409
|
end
|
|
2308
2410
|
|
|
2309
2411
|
context "when no timeout options are provided" do
|
|
@@ -2313,7 +2415,7 @@ describe Mongoid::Criteria do
|
|
|
2313
2415
|
end
|
|
2314
2416
|
|
|
2315
2417
|
it "returns the map/reduce results" do
|
|
2316
|
-
expect(map_reduce).to eq([
|
|
2418
|
+
expect(map_reduce.sort_by { |doc| doc['_id'] }).to eq([
|
|
2317
2419
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
|
2318
2420
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
|
2319
2421
|
])
|
|
@@ -2326,11 +2428,11 @@ describe Mongoid::Criteria do
|
|
|
2326
2428
|
context "when provided a single field" do
|
|
2327
2429
|
|
|
2328
2430
|
let!(:depeche) do
|
|
2329
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
2431
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
2330
2432
|
end
|
|
2331
2433
|
|
|
2332
2434
|
let!(:tool) do
|
|
2333
|
-
Band.create(name: "Tool", likes: 500)
|
|
2435
|
+
Band.create!(name: "Tool", likes: 500)
|
|
2334
2436
|
end
|
|
2335
2437
|
|
|
2336
2438
|
let(:criteria) do
|
|
@@ -2370,11 +2472,11 @@ describe Mongoid::Criteria do
|
|
|
2370
2472
|
end
|
|
2371
2473
|
|
|
2372
2474
|
let!(:match) do
|
|
2373
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2475
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2374
2476
|
end
|
|
2375
2477
|
|
|
2376
2478
|
let!(:non_match) do
|
|
2377
|
-
Bar.create(location: [ 19.26, 99.70 ])
|
|
2479
|
+
Bar.create!(location: [ 19.26, 99.70 ])
|
|
2378
2480
|
end
|
|
2379
2481
|
|
|
2380
2482
|
let(:criteria) do
|
|
@@ -2404,7 +2506,7 @@ describe Mongoid::Criteria do
|
|
|
2404
2506
|
end
|
|
2405
2507
|
end
|
|
2406
2508
|
|
|
2407
|
-
let(:
|
|
2509
|
+
let(:association) do
|
|
2408
2510
|
Band.relations["records"]
|
|
2409
2511
|
end
|
|
2410
2512
|
|
|
@@ -2429,7 +2531,7 @@ describe Mongoid::Criteria do
|
|
|
2429
2531
|
end
|
|
2430
2532
|
|
|
2431
2533
|
it "merges the inclusions" do
|
|
2432
|
-
expect(merged.inclusions).to eq([
|
|
2534
|
+
expect(merged.inclusions).to eq([ association ])
|
|
2433
2535
|
end
|
|
2434
2536
|
|
|
2435
2537
|
it "returns a new criteria" do
|
|
@@ -2443,7 +2545,7 @@ describe Mongoid::Criteria do
|
|
|
2443
2545
|
{ klass: Band, includes: [ :records ] }
|
|
2444
2546
|
end
|
|
2445
2547
|
|
|
2446
|
-
let(:
|
|
2548
|
+
let(:association) do
|
|
2447
2549
|
Band.relations["records"]
|
|
2448
2550
|
end
|
|
2449
2551
|
|
|
@@ -2464,7 +2566,7 @@ describe Mongoid::Criteria do
|
|
|
2464
2566
|
end
|
|
2465
2567
|
|
|
2466
2568
|
it "merges the inclusions" do
|
|
2467
|
-
expect(merged.inclusions).to eq([
|
|
2569
|
+
expect(merged.inclusions).to eq([ association ])
|
|
2468
2570
|
end
|
|
2469
2571
|
|
|
2470
2572
|
it "returns a new criteria" do
|
|
@@ -2489,7 +2591,7 @@ describe Mongoid::Criteria do
|
|
|
2489
2591
|
end
|
|
2490
2592
|
end
|
|
2491
2593
|
|
|
2492
|
-
let(:
|
|
2594
|
+
let(:association) do
|
|
2493
2595
|
Band.relations["records"]
|
|
2494
2596
|
end
|
|
2495
2597
|
|
|
@@ -2514,7 +2616,7 @@ describe Mongoid::Criteria do
|
|
|
2514
2616
|
end
|
|
2515
2617
|
|
|
2516
2618
|
it "merges the inclusions" do
|
|
2517
|
-
expect(merged.inclusions).to eq([
|
|
2619
|
+
expect(merged.inclusions).to eq([ association ])
|
|
2518
2620
|
end
|
|
2519
2621
|
|
|
2520
2622
|
it "returns the same criteria" do
|
|
@@ -2527,11 +2629,11 @@ describe Mongoid::Criteria do
|
|
|
2527
2629
|
context "when provided a single field" do
|
|
2528
2630
|
|
|
2529
2631
|
let!(:depeche) do
|
|
2530
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
2632
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
2531
2633
|
end
|
|
2532
2634
|
|
|
2533
2635
|
let!(:tool) do
|
|
2534
|
-
Band.create(name: "Tool", likes: 500)
|
|
2636
|
+
Band.create!(name: "Tool", likes: 500)
|
|
2535
2637
|
end
|
|
2536
2638
|
|
|
2537
2639
|
let(:criteria) do
|
|
@@ -2567,11 +2669,11 @@ describe Mongoid::Criteria do
|
|
|
2567
2669
|
describe "#mod" do
|
|
2568
2670
|
|
|
2569
2671
|
let!(:match) do
|
|
2570
|
-
Band.create(member_count: 5)
|
|
2672
|
+
Band.create!(member_count: 5)
|
|
2571
2673
|
end
|
|
2572
2674
|
|
|
2573
2675
|
let!(:non_match) do
|
|
2574
|
-
Band.create(member_count: 2)
|
|
2676
|
+
Band.create!(member_count: 2)
|
|
2575
2677
|
end
|
|
2576
2678
|
|
|
2577
2679
|
let(:criteria) do
|
|
@@ -2586,11 +2688,11 @@ describe Mongoid::Criteria do
|
|
|
2586
2688
|
describe "#ne" do
|
|
2587
2689
|
|
|
2588
2690
|
let!(:match) do
|
|
2589
|
-
Band.create(name: "Depeche Mode")
|
|
2691
|
+
Band.create!(name: "Depeche Mode")
|
|
2590
2692
|
end
|
|
2591
2693
|
|
|
2592
2694
|
let!(:non_match) do
|
|
2593
|
-
Band.create(name: "Tool")
|
|
2695
|
+
Band.create!(name: "Tool")
|
|
2594
2696
|
end
|
|
2595
2697
|
|
|
2596
2698
|
let(:criteria) do
|
|
@@ -2609,7 +2711,7 @@ describe Mongoid::Criteria do
|
|
|
2609
2711
|
end
|
|
2610
2712
|
|
|
2611
2713
|
let!(:match) do
|
|
2612
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2714
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2613
2715
|
end
|
|
2614
2716
|
|
|
2615
2717
|
let(:criteria) do
|
|
@@ -2628,7 +2730,7 @@ describe Mongoid::Criteria do
|
|
|
2628
2730
|
end
|
|
2629
2731
|
|
|
2630
2732
|
let!(:match) do
|
|
2631
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2733
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2632
2734
|
end
|
|
2633
2735
|
|
|
2634
2736
|
let(:criteria) do
|
|
@@ -2643,11 +2745,11 @@ describe Mongoid::Criteria do
|
|
|
2643
2745
|
describe "#nin" do
|
|
2644
2746
|
|
|
2645
2747
|
let!(:match) do
|
|
2646
|
-
Band.create(name: "Depeche Mode")
|
|
2748
|
+
Band.create!(name: "Depeche Mode")
|
|
2647
2749
|
end
|
|
2648
2750
|
|
|
2649
2751
|
let!(:non_match) do
|
|
2650
|
-
Band.create(name: "Tool")
|
|
2752
|
+
Band.create!(name: "Tool")
|
|
2651
2753
|
end
|
|
2652
2754
|
|
|
2653
2755
|
let(:criteria) do
|
|
@@ -2662,11 +2764,11 @@ describe Mongoid::Criteria do
|
|
|
2662
2764
|
describe "#nor" do
|
|
2663
2765
|
|
|
2664
2766
|
let!(:match) do
|
|
2665
|
-
Band.create(name: "Depeche Mode")
|
|
2767
|
+
Band.create!(name: "Depeche Mode")
|
|
2666
2768
|
end
|
|
2667
2769
|
|
|
2668
2770
|
let!(:non_match) do
|
|
2669
|
-
Band.create(name: "Tool")
|
|
2771
|
+
Band.create!(name: "Tool")
|
|
2670
2772
|
end
|
|
2671
2773
|
|
|
2672
2774
|
let(:criteria) do
|
|
@@ -2678,143 +2780,16 @@ describe Mongoid::Criteria do
|
|
|
2678
2780
|
end
|
|
2679
2781
|
end
|
|
2680
2782
|
|
|
2681
|
-
describe "#only" do
|
|
2682
|
-
|
|
2683
|
-
let!(:band) do
|
|
2684
|
-
Band.create(name: "Depeche Mode", likes: 3, views: 10)
|
|
2685
|
-
end
|
|
2686
|
-
|
|
2687
|
-
context "when not using inheritance" do
|
|
2688
|
-
|
|
2689
|
-
context "when passing splat args" do
|
|
2690
|
-
|
|
2691
|
-
let(:criteria) do
|
|
2692
|
-
Band.only(:_id)
|
|
2693
|
-
end
|
|
2694
|
-
|
|
2695
|
-
it "limits the returned fields" do
|
|
2696
|
-
expect {
|
|
2697
|
-
criteria.first.name
|
|
2698
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
2699
|
-
end
|
|
2700
|
-
|
|
2701
|
-
it "does not add _type to the fields" do
|
|
2702
|
-
expect(criteria.options[:fields]["_type"]).to be_nil
|
|
2703
|
-
end
|
|
2704
|
-
end
|
|
2705
|
-
|
|
2706
|
-
context "when not including id" do
|
|
2707
|
-
|
|
2708
|
-
let(:criteria) do
|
|
2709
|
-
Band.only(:name)
|
|
2710
|
-
end
|
|
2711
|
-
|
|
2712
|
-
it "responds to id anyway" do
|
|
2713
|
-
expect {
|
|
2714
|
-
criteria.first.id
|
|
2715
|
-
}.to_not raise_error
|
|
2716
|
-
end
|
|
2717
|
-
end
|
|
2718
|
-
|
|
2719
|
-
context "when passing an array" do
|
|
2720
|
-
|
|
2721
|
-
let(:criteria) do
|
|
2722
|
-
Band.only([ :name, :likes ])
|
|
2723
|
-
end
|
|
2724
|
-
|
|
2725
|
-
it "includes the limited fields" do
|
|
2726
|
-
expect(criteria.first.name).to_not be_nil
|
|
2727
|
-
end
|
|
2728
|
-
|
|
2729
|
-
it "excludes the non included fields" do
|
|
2730
|
-
expect {
|
|
2731
|
-
criteria.first.active
|
|
2732
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
2733
|
-
end
|
|
2734
|
-
|
|
2735
|
-
it "does not add _type to the fields" do
|
|
2736
|
-
expect(criteria.options[:fields]["_type"]).to be_nil
|
|
2737
|
-
end
|
|
2738
|
-
end
|
|
2739
|
-
|
|
2740
|
-
context "when instantiating a class of another type inside the iteration" do
|
|
2741
|
-
|
|
2742
|
-
let(:criteria) do
|
|
2743
|
-
Band.only(:name)
|
|
2744
|
-
end
|
|
2745
|
-
|
|
2746
|
-
it "only limits the fields on the correct model" do
|
|
2747
|
-
criteria.each do |band|
|
|
2748
|
-
expect(Person.new.age).to eq(100)
|
|
2749
|
-
end
|
|
2750
|
-
end
|
|
2751
|
-
end
|
|
2752
|
-
|
|
2753
|
-
context "when instantiating a document not in the result set" do
|
|
2754
|
-
|
|
2755
|
-
let(:criteria) do
|
|
2756
|
-
Band.only(:name)
|
|
2757
|
-
end
|
|
2758
|
-
|
|
2759
|
-
it "only limits the fields on the correct criteria" do
|
|
2760
|
-
criteria.each do |band|
|
|
2761
|
-
expect(Band.new.active).to be true
|
|
2762
|
-
end
|
|
2763
|
-
end
|
|
2764
|
-
end
|
|
2765
|
-
|
|
2766
|
-
context "when nesting a criteria within a criteria" do
|
|
2767
|
-
|
|
2768
|
-
let(:criteria) do
|
|
2769
|
-
Band.only(:name)
|
|
2770
|
-
end
|
|
2771
|
-
|
|
2772
|
-
it "only limits the fields on the correct criteria" do
|
|
2773
|
-
criteria.each do |band|
|
|
2774
|
-
Band.all.each do |b|
|
|
2775
|
-
expect(b.active).to be true
|
|
2776
|
-
end
|
|
2777
|
-
end
|
|
2778
|
-
end
|
|
2779
|
-
end
|
|
2780
|
-
end
|
|
2781
|
-
|
|
2782
|
-
context "when using inheritance" do
|
|
2783
|
-
|
|
2784
|
-
let(:criteria) do
|
|
2785
|
-
Doctor.only(:_id)
|
|
2786
|
-
end
|
|
2787
|
-
|
|
2788
|
-
it "adds _type to the fields" do
|
|
2789
|
-
expect(criteria.options[:fields]["_type"]).to eq(1)
|
|
2790
|
-
end
|
|
2791
|
-
end
|
|
2792
|
-
|
|
2793
|
-
context "when limiting to embedded documents" do
|
|
2794
|
-
|
|
2795
|
-
context "when the embedded documents are aliased" do
|
|
2796
|
-
|
|
2797
|
-
let(:criteria) do
|
|
2798
|
-
Person.only(:phones)
|
|
2799
|
-
end
|
|
2800
|
-
|
|
2801
|
-
it "properly uses the database field name" do
|
|
2802
|
-
expect(criteria.options).to eq(fields: { "_id" => 1, "mobile_phones" => 1 })
|
|
2803
|
-
end
|
|
2804
|
-
end
|
|
2805
|
-
end
|
|
2806
|
-
end
|
|
2807
|
-
|
|
2808
2783
|
[ :or, :any_of ].each do |method|
|
|
2809
2784
|
|
|
2810
2785
|
describe "\##{method}" do
|
|
2811
2786
|
|
|
2812
2787
|
let!(:match) do
|
|
2813
|
-
Band.create(name: "Depeche Mode")
|
|
2788
|
+
Band.create!(name: "Depeche Mode")
|
|
2814
2789
|
end
|
|
2815
2790
|
|
|
2816
2791
|
let!(:non_match) do
|
|
2817
|
-
Band.create(name: "Tool")
|
|
2792
|
+
Band.create!(name: "Tool")
|
|
2818
2793
|
end
|
|
2819
2794
|
|
|
2820
2795
|
context "when sending a normal $or criterion" do
|
|
@@ -2844,25 +2819,29 @@ describe Mongoid::Criteria do
|
|
|
2844
2819
|
describe "#pluck" do
|
|
2845
2820
|
|
|
2846
2821
|
let!(:depeche) do
|
|
2847
|
-
Band.create(name: "Depeche Mode", likes: 3)
|
|
2822
|
+
Band.create!(name: "Depeche Mode", likes: 3)
|
|
2848
2823
|
end
|
|
2849
2824
|
|
|
2850
2825
|
let!(:tool) do
|
|
2851
|
-
Band.create(name: "Tool", likes: 3)
|
|
2826
|
+
Band.create!(name: "Tool", likes: 3)
|
|
2852
2827
|
end
|
|
2853
2828
|
|
|
2854
2829
|
let!(:photek) do
|
|
2855
|
-
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")
|
|
2856
2835
|
end
|
|
2857
2836
|
|
|
2858
2837
|
context "when the field is aliased" do
|
|
2859
2838
|
|
|
2860
2839
|
let!(:expensive) do
|
|
2861
|
-
Product.create(price: 100000)
|
|
2840
|
+
Product.create!(price: 100000)
|
|
2862
2841
|
end
|
|
2863
2842
|
|
|
2864
2843
|
let!(:cheap) do
|
|
2865
|
-
Product.create(price: 1)
|
|
2844
|
+
Product.create!(price: 1)
|
|
2866
2845
|
end
|
|
2867
2846
|
|
|
2868
2847
|
context "when using alias_attribute" do
|
|
@@ -2871,8 +2850,10 @@ describe Mongoid::Criteria do
|
|
|
2871
2850
|
Product.pluck(:price)
|
|
2872
2851
|
end
|
|
2873
2852
|
|
|
2874
|
-
|
|
2875
|
-
|
|
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
|
|
2876
2857
|
end
|
|
2877
2858
|
end
|
|
2878
2859
|
end
|
|
@@ -2889,14 +2870,18 @@ describe Mongoid::Criteria do
|
|
|
2889
2870
|
criteria.pluck(:name)
|
|
2890
2871
|
end
|
|
2891
2872
|
|
|
2892
|
-
|
|
2893
|
-
|
|
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
|
|
2894
2877
|
end
|
|
2895
2878
|
|
|
2896
2879
|
context "when subsequently executing the criteria without a pluck" do
|
|
2897
2880
|
|
|
2898
|
-
|
|
2899
|
-
|
|
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
|
|
2900
2885
|
end
|
|
2901
2886
|
end
|
|
2902
2887
|
|
|
@@ -2907,62 +2892,96 @@ describe Mongoid::Criteria do
|
|
|
2907
2892
|
end
|
|
2908
2893
|
|
|
2909
2894
|
context 'when a top-level field and a subdocument field are plucked' do
|
|
2910
|
-
|
|
2911
2895
|
before do
|
|
2912
|
-
Band.create(name: 'FKA Twigs')
|
|
2913
|
-
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') ])
|
|
2914
2898
|
end
|
|
2915
2899
|
|
|
2916
2900
|
let(:embedded_pluck) do
|
|
2917
2901
|
criteria.pluck(:name, 'records.name')
|
|
2918
2902
|
end
|
|
2919
2903
|
|
|
2920
|
-
|
|
2921
|
-
|
|
2922
|
-
|
|
2923
|
-
[
|
|
2924
|
-
|
|
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
|
|
2925
2916
|
end
|
|
2926
2917
|
|
|
2927
|
-
|
|
2928
|
-
|
|
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
|
|
2929
2930
|
end
|
|
2930
2931
|
end
|
|
2931
2932
|
|
|
2932
2933
|
context 'when only a subdocument field is plucked' do
|
|
2933
2934
|
|
|
2934
2935
|
before do
|
|
2935
|
-
Band.create(name: 'FKA Twigs')
|
|
2936
|
-
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') ])
|
|
2937
2938
|
end
|
|
2938
2939
|
|
|
2939
2940
|
let(:embedded_pluck) do
|
|
2940
2941
|
criteria.pluck('records.name')
|
|
2941
2942
|
end
|
|
2942
2943
|
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
[
|
|
2947
|
-
|
|
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
|
|
2948
2956
|
end
|
|
2949
2957
|
|
|
2950
|
-
|
|
2951
|
-
|
|
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
|
|
2952
2970
|
end
|
|
2953
2971
|
end
|
|
2954
|
-
|
|
2955
2972
|
end
|
|
2956
2973
|
end
|
|
2957
2974
|
|
|
2958
|
-
context "when plucking
|
|
2975
|
+
context "when plucking multi-fields" do
|
|
2959
2976
|
|
|
2960
2977
|
let(:plucked) do
|
|
2961
2978
|
Band.where(:name.exists => true).pluck(:name, :likes)
|
|
2962
2979
|
end
|
|
2963
2980
|
|
|
2964
|
-
|
|
2965
|
-
|
|
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
|
|
2966
2985
|
end
|
|
2967
2986
|
end
|
|
2968
2987
|
|
|
@@ -2972,8 +2991,10 @@ describe Mongoid::Criteria do
|
|
|
2972
2991
|
Band.where(:name.exists => true).pluck(:likes)
|
|
2973
2992
|
end
|
|
2974
2993
|
|
|
2975
|
-
|
|
2976
|
-
|
|
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
|
|
2977
2998
|
end
|
|
2978
2999
|
end
|
|
2979
3000
|
end
|
|
@@ -2984,8 +3005,10 @@ describe Mongoid::Criteria do
|
|
|
2984
3005
|
Band.where(name: "New Order").pluck(:_id)
|
|
2985
3006
|
end
|
|
2986
3007
|
|
|
2987
|
-
|
|
2988
|
-
|
|
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
|
|
2989
3012
|
end
|
|
2990
3013
|
end
|
|
2991
3014
|
|
|
@@ -2995,8 +3018,10 @@ describe Mongoid::Criteria do
|
|
|
2995
3018
|
Band.all.pluck(:id)
|
|
2996
3019
|
end
|
|
2997
3020
|
|
|
2998
|
-
|
|
2999
|
-
|
|
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
|
|
3000
3025
|
end
|
|
3001
3026
|
end
|
|
3002
3027
|
|
|
@@ -3006,8 +3031,10 @@ describe Mongoid::Criteria do
|
|
|
3006
3031
|
Band.all.pluck(:id, :fooz)
|
|
3007
3032
|
end
|
|
3008
3033
|
|
|
3009
|
-
|
|
3010
|
-
|
|
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
|
|
3011
3038
|
end
|
|
3012
3039
|
end
|
|
3013
3040
|
|
|
@@ -3019,8 +3046,10 @@ describe Mongoid::Criteria do
|
|
|
3019
3046
|
Band.all.pluck(:foo)
|
|
3020
3047
|
end
|
|
3021
3048
|
|
|
3022
|
-
|
|
3023
|
-
|
|
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
|
|
3024
3053
|
end
|
|
3025
3054
|
end
|
|
3026
3055
|
|
|
@@ -3030,8 +3059,301 @@ describe Mongoid::Criteria do
|
|
|
3030
3059
|
Band.all.pluck(:foo, :bar)
|
|
3031
3060
|
end
|
|
3032
3061
|
|
|
3033
|
-
|
|
3034
|
-
|
|
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
|
|
3066
|
+
end
|
|
3067
|
+
end
|
|
3068
|
+
end
|
|
3069
|
+
|
|
3070
|
+
context 'when plucking a localized field' do
|
|
3071
|
+
|
|
3072
|
+
before do
|
|
3073
|
+
I18n.locale = :en
|
|
3074
|
+
d = Dictionary.create!(description: 'english-text')
|
|
3075
|
+
I18n.locale = :de
|
|
3076
|
+
d.description = 'deutsch-text'
|
|
3077
|
+
d.save!
|
|
3078
|
+
end
|
|
3079
|
+
|
|
3080
|
+
after do
|
|
3081
|
+
I18n.locale = :en
|
|
3082
|
+
end
|
|
3083
|
+
|
|
3084
|
+
context 'when plucking the entire field' do
|
|
3085
|
+
let(:plucked) do
|
|
3086
|
+
Dictionary.all.pluck(:description)
|
|
3087
|
+
end
|
|
3088
|
+
|
|
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
|
|
3127
|
+
end
|
|
3128
|
+
end
|
|
3129
|
+
|
|
3130
|
+
context 'when plucking a specific locale' do
|
|
3131
|
+
|
|
3132
|
+
let(:plucked) do
|
|
3133
|
+
Dictionary.all.pluck(:'description.de')
|
|
3134
|
+
end
|
|
3135
|
+
|
|
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
|
+
let(:plucked) do
|
|
3187
|
+
Dictionary.all.pluck(:description).first
|
|
3188
|
+
end
|
|
3189
|
+
|
|
3190
|
+
context "when legacy_pluck_distinct is set" do
|
|
3191
|
+
config_override :legacy_pluck_distinct, true
|
|
3192
|
+
|
|
3193
|
+
it "does not correctly use the fallback" do
|
|
3194
|
+
plucked.should == {"de"=>"deutsch-text", "en"=>"english-text"}
|
|
3195
|
+
end
|
|
3196
|
+
end
|
|
3197
|
+
|
|
3198
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3199
|
+
config_override :legacy_pluck_distinct, false
|
|
3200
|
+
|
|
3201
|
+
it "correctly uses the fallback" do
|
|
3202
|
+
I18n.locale = :en
|
|
3203
|
+
d = Dictionary.create!(description: 'english-text')
|
|
3204
|
+
I18n.locale = :he
|
|
3205
|
+
plucked.should == "english-text"
|
|
3206
|
+
end
|
|
3207
|
+
end
|
|
3208
|
+
end
|
|
3209
|
+
|
|
3210
|
+
context "when the localized field is embedded" do
|
|
3211
|
+
before do
|
|
3212
|
+
p = Passport.new
|
|
3213
|
+
I18n.locale = :en
|
|
3214
|
+
p.name = "Neil"
|
|
3215
|
+
I18n.locale = :he
|
|
3216
|
+
p.name = "Nissim"
|
|
3217
|
+
|
|
3218
|
+
Person.create!(passport: p, employer_id: 12345)
|
|
3219
|
+
end
|
|
3220
|
+
|
|
3221
|
+
let(:plucked) do
|
|
3222
|
+
Person.where(employer_id: 12345).pluck("pass.name").first
|
|
3223
|
+
end
|
|
3224
|
+
|
|
3225
|
+
let(:plucked_translations) do
|
|
3226
|
+
Person.where(employer_id: 12345).pluck("pass.name_translations").first
|
|
3227
|
+
end
|
|
3228
|
+
|
|
3229
|
+
let(:plucked_translations_field) do
|
|
3230
|
+
Person.where(employer_id: 12345).pluck("pass.name_translations.en").first
|
|
3231
|
+
end
|
|
3232
|
+
|
|
3233
|
+
context "when legacy_pluck_distinct is set" do
|
|
3234
|
+
config_override :legacy_pluck_distinct, true
|
|
3235
|
+
|
|
3236
|
+
it "returns the full hash embedded" do
|
|
3237
|
+
expect(plucked).to eq({ "name" => { "en" => "Neil", "he" => "Nissim" } })
|
|
3238
|
+
end
|
|
3239
|
+
|
|
3240
|
+
it "returns the empty hash" do
|
|
3241
|
+
expect(plucked_translations).to eq({})
|
|
3242
|
+
end
|
|
3243
|
+
|
|
3244
|
+
it "returns the empty hash" do
|
|
3245
|
+
expect(plucked_translations_field).to eq({})
|
|
3246
|
+
end
|
|
3247
|
+
end
|
|
3248
|
+
|
|
3249
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3250
|
+
config_override :legacy_pluck_distinct, false
|
|
3251
|
+
|
|
3252
|
+
it "returns the translation for the current locale" do
|
|
3253
|
+
expect(plucked).to eq("Nissim")
|
|
3254
|
+
end
|
|
3255
|
+
|
|
3256
|
+
it "returns the full _translation hash" do
|
|
3257
|
+
expect(plucked_translations).to eq({ "en" => "Neil", "he" => "Nissim" })
|
|
3258
|
+
end
|
|
3259
|
+
|
|
3260
|
+
it "returns the translation for the requested locale" do
|
|
3261
|
+
expect(plucked_translations_field).to eq("Neil")
|
|
3262
|
+
end
|
|
3263
|
+
end
|
|
3264
|
+
end
|
|
3265
|
+
end
|
|
3266
|
+
|
|
3267
|
+
context 'when plucking a field to be demongoized' do
|
|
3268
|
+
|
|
3269
|
+
let(:plucked) do
|
|
3270
|
+
Band.where(name: maniacs.name).pluck(:sales)
|
|
3271
|
+
end
|
|
3272
|
+
|
|
3273
|
+
context "when legacy_pluck_distinct is set" do
|
|
3274
|
+
config_override :legacy_pluck_distinct, true
|
|
3275
|
+
|
|
3276
|
+
it "does not demongoize the field" do
|
|
3277
|
+
expect(plucked.first).to be_a(String)
|
|
3278
|
+
expect(plucked.first).to eq("1E2")
|
|
3279
|
+
end
|
|
3280
|
+
end
|
|
3281
|
+
|
|
3282
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3283
|
+
config_override :legacy_pluck_distinct, false
|
|
3284
|
+
|
|
3285
|
+
it "demongoizes the field" do
|
|
3286
|
+
expect(plucked.first).to be_a(BigDecimal)
|
|
3287
|
+
expect(plucked.first).to eq(BigDecimal("1E2"))
|
|
3288
|
+
end
|
|
3289
|
+
end
|
|
3290
|
+
end
|
|
3291
|
+
|
|
3292
|
+
context "when plucking an embedded field" do
|
|
3293
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
3294
|
+
let!(:band) { Band.create!(label: label) }
|
|
3295
|
+
|
|
3296
|
+
let(:plucked) { Band.where(_id: band.id).pluck("label.sales") }
|
|
3297
|
+
|
|
3298
|
+
context "when legacy_pluck_distinct is set" do
|
|
3299
|
+
config_override :legacy_pluck_distinct, true
|
|
3300
|
+
|
|
3301
|
+
it "returns a hash with a non-demongoized field" do
|
|
3302
|
+
expect(plucked.first).to eq({ 'sales' => "1E2" })
|
|
3303
|
+
end
|
|
3304
|
+
end
|
|
3305
|
+
|
|
3306
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3307
|
+
config_override :legacy_pluck_distinct, false
|
|
3308
|
+
|
|
3309
|
+
it "demongoizes the field" do
|
|
3310
|
+
expect(plucked.first).to eq(BigDecimal("1E2"))
|
|
3311
|
+
end
|
|
3312
|
+
end
|
|
3313
|
+
end
|
|
3314
|
+
|
|
3315
|
+
context "when plucking an embeds_many field" do
|
|
3316
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
3317
|
+
let!(:band) { Band.create!(labels: [label]) }
|
|
3318
|
+
|
|
3319
|
+
let(:plucked) { Band.where(_id: band.id).pluck("labels.sales") }
|
|
3320
|
+
|
|
3321
|
+
context "when legacy_pluck_distinct is set" do
|
|
3322
|
+
config_override :legacy_pluck_distinct, true
|
|
3323
|
+
|
|
3324
|
+
it "returns a hash with a non-demongoized field" do
|
|
3325
|
+
expect(plucked.first).to eq([{ 'sales' => "1E2" }])
|
|
3326
|
+
end
|
|
3327
|
+
end
|
|
3328
|
+
|
|
3329
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3330
|
+
config_override :legacy_pluck_distinct, false
|
|
3331
|
+
|
|
3332
|
+
it "demongoizes the field" do
|
|
3333
|
+
expect(plucked.first).to eq([BigDecimal("1E2")])
|
|
3334
|
+
end
|
|
3335
|
+
end
|
|
3336
|
+
end
|
|
3337
|
+
|
|
3338
|
+
context "when plucking a nonexistent embedded field" do
|
|
3339
|
+
let(:label) { Label.new(sales: "1E2") }
|
|
3340
|
+
let!(:band) { Band.create!(label: label) }
|
|
3341
|
+
|
|
3342
|
+
let(:plucked) { Band.where(_id: band.id).pluck("label.qwerty") }
|
|
3343
|
+
|
|
3344
|
+
context "when legacy_pluck_distinct is set" do
|
|
3345
|
+
config_override :legacy_pluck_distinct, true
|
|
3346
|
+
|
|
3347
|
+
it "returns an empty hash" do
|
|
3348
|
+
expect(plucked.first).to eq({})
|
|
3349
|
+
end
|
|
3350
|
+
end
|
|
3351
|
+
|
|
3352
|
+
context "when legacy_pluck_distinct is not set" do
|
|
3353
|
+
config_override :legacy_pluck_distinct, false
|
|
3354
|
+
|
|
3355
|
+
it "returns nil" do
|
|
3356
|
+
expect(plucked.first).to eq(nil)
|
|
3035
3357
|
end
|
|
3036
3358
|
end
|
|
3037
3359
|
end
|
|
@@ -3118,11 +3440,11 @@ describe Mongoid::Criteria do
|
|
|
3118
3440
|
describe "#sort" do
|
|
3119
3441
|
|
|
3120
3442
|
let!(:depeche) do
|
|
3121
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
3443
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
3122
3444
|
end
|
|
3123
3445
|
|
|
3124
3446
|
let!(:tool) do
|
|
3125
|
-
Band.create(name: "Tool", likes: 500)
|
|
3447
|
+
Band.create!(name: "Tool", likes: 500)
|
|
3126
3448
|
end
|
|
3127
3449
|
|
|
3128
3450
|
let(:sorted) do
|
|
@@ -3141,11 +3463,11 @@ describe Mongoid::Criteria do
|
|
|
3141
3463
|
context "when provided a single field" do
|
|
3142
3464
|
|
|
3143
3465
|
let!(:depeche) do
|
|
3144
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
3466
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
3145
3467
|
end
|
|
3146
3468
|
|
|
3147
3469
|
let!(:tool) do
|
|
3148
|
-
Band.create(name: "Tool", likes: 500)
|
|
3470
|
+
Band.create!(name: "Tool", likes: 500)
|
|
3149
3471
|
end
|
|
3150
3472
|
|
|
3151
3473
|
let(:criteria) do
|
|
@@ -3179,7 +3501,7 @@ describe Mongoid::Criteria do
|
|
|
3179
3501
|
describe "#to_ary" do
|
|
3180
3502
|
|
|
3181
3503
|
let!(:band) do
|
|
3182
|
-
Band.create(name: "Depeche Mode")
|
|
3504
|
+
Band.create!(name: "Depeche Mode")
|
|
3183
3505
|
end
|
|
3184
3506
|
|
|
3185
3507
|
let(:criteria) do
|
|
@@ -3192,12 +3514,14 @@ describe Mongoid::Criteria do
|
|
|
3192
3514
|
end
|
|
3193
3515
|
|
|
3194
3516
|
describe "#max_scan" do
|
|
3517
|
+
max_server_version '4.0'
|
|
3518
|
+
|
|
3195
3519
|
let!(:band) do
|
|
3196
|
-
Band.create(name: "Depeche Mode")
|
|
3520
|
+
Band.create!(name: "Depeche Mode")
|
|
3197
3521
|
end
|
|
3198
3522
|
|
|
3199
3523
|
let!(:band2) do
|
|
3200
|
-
Band.create(name: "Tool")
|
|
3524
|
+
Band.create!(name: "Tool")
|
|
3201
3525
|
end
|
|
3202
3526
|
|
|
3203
3527
|
let(:criteria) do
|
|
@@ -3236,34 +3560,75 @@ describe Mongoid::Criteria do
|
|
|
3236
3560
|
end
|
|
3237
3561
|
|
|
3238
3562
|
describe "#type" do
|
|
3563
|
+
context "when using the default discriminator_key" do
|
|
3564
|
+
context "when the type is a string" do
|
|
3239
3565
|
|
|
3240
|
-
|
|
3566
|
+
let!(:browser) do
|
|
3567
|
+
Browser.create!
|
|
3568
|
+
end
|
|
3241
3569
|
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3570
|
+
let(:criteria) do
|
|
3571
|
+
Canvas.all.type("Browser")
|
|
3572
|
+
end
|
|
3245
3573
|
|
|
3246
|
-
|
|
3247
|
-
|
|
3574
|
+
it "returns documents with the provided type" do
|
|
3575
|
+
expect(criteria).to eq([ browser ])
|
|
3576
|
+
end
|
|
3248
3577
|
end
|
|
3249
3578
|
|
|
3250
|
-
|
|
3251
|
-
|
|
3579
|
+
context "when the type is an Array of type" do
|
|
3580
|
+
|
|
3581
|
+
let!(:browser) do
|
|
3582
|
+
Firefox.create!
|
|
3583
|
+
end
|
|
3584
|
+
|
|
3585
|
+
let(:criteria) do
|
|
3586
|
+
Canvas.all.type([ "Browser", "Firefox" ])
|
|
3587
|
+
end
|
|
3588
|
+
|
|
3589
|
+
it "returns documents with the provided types" do
|
|
3590
|
+
expect(criteria).to eq([ browser ])
|
|
3591
|
+
end
|
|
3252
3592
|
end
|
|
3253
3593
|
end
|
|
3254
3594
|
|
|
3255
|
-
context "when
|
|
3595
|
+
context "when using a custom discriminator_key" do
|
|
3596
|
+
before do
|
|
3597
|
+
Canvas.discriminator_key = "dkey"
|
|
3598
|
+
end
|
|
3256
3599
|
|
|
3257
|
-
|
|
3258
|
-
|
|
3600
|
+
after do
|
|
3601
|
+
Canvas.discriminator_key = nil
|
|
3259
3602
|
end
|
|
3260
3603
|
|
|
3261
|
-
|
|
3262
|
-
|
|
3604
|
+
context "when the type is a string" do
|
|
3605
|
+
|
|
3606
|
+
let!(:browser) do
|
|
3607
|
+
Browser.create!
|
|
3608
|
+
end
|
|
3609
|
+
|
|
3610
|
+
let(:criteria) do
|
|
3611
|
+
Canvas.all.type("Browser")
|
|
3612
|
+
end
|
|
3613
|
+
|
|
3614
|
+
it "returns documents with the provided type" do
|
|
3615
|
+
expect(criteria).to eq([ browser ])
|
|
3616
|
+
end
|
|
3263
3617
|
end
|
|
3264
3618
|
|
|
3265
|
-
|
|
3266
|
-
|
|
3619
|
+
context "when the type is an Array of type" do
|
|
3620
|
+
|
|
3621
|
+
let!(:browser) do
|
|
3622
|
+
Firefox.create!
|
|
3623
|
+
end
|
|
3624
|
+
|
|
3625
|
+
let(:criteria) do
|
|
3626
|
+
Canvas.all.type([ "Browser", "Firefox" ])
|
|
3627
|
+
end
|
|
3628
|
+
|
|
3629
|
+
it "returns documents with the provided types" do
|
|
3630
|
+
expect(criteria).to eq([ browser ])
|
|
3631
|
+
end
|
|
3267
3632
|
end
|
|
3268
3633
|
end
|
|
3269
3634
|
end
|
|
@@ -3271,11 +3636,43 @@ describe Mongoid::Criteria do
|
|
|
3271
3636
|
describe "#where" do
|
|
3272
3637
|
|
|
3273
3638
|
let!(:match) do
|
|
3274
|
-
Band.create(name: "Depeche Mode")
|
|
3639
|
+
Band.create!(name: "Depeche Mode")
|
|
3275
3640
|
end
|
|
3276
3641
|
|
|
3277
3642
|
let!(:non_match) do
|
|
3278
|
-
Band.create(name: "Tool")
|
|
3643
|
+
Band.create!(name: "Tool")
|
|
3644
|
+
end
|
|
3645
|
+
|
|
3646
|
+
context 'when provided no arguments' do
|
|
3647
|
+
context 'on a model class' do
|
|
3648
|
+
it 'returns an empty criteria' do
|
|
3649
|
+
Band.where.selector.should == {}
|
|
3650
|
+
end
|
|
3651
|
+
end
|
|
3652
|
+
|
|
3653
|
+
context 'on an association' do
|
|
3654
|
+
it 'returns an empty criteria' do
|
|
3655
|
+
match.records.where.selector.should == {}
|
|
3656
|
+
end
|
|
3657
|
+
end
|
|
3658
|
+
end
|
|
3659
|
+
|
|
3660
|
+
context 'when provided multiple arguments' do
|
|
3661
|
+
context 'on a model class' do
|
|
3662
|
+
it 'raises ArgumentError' do
|
|
3663
|
+
lambda do
|
|
3664
|
+
Band.where({foo: 1}, {bar: 2})
|
|
3665
|
+
end.should raise_error(ArgumentError, /where requires zero or one arguments/)
|
|
3666
|
+
end
|
|
3667
|
+
end
|
|
3668
|
+
|
|
3669
|
+
context 'on an association' do
|
|
3670
|
+
it 'raises ArgumentError' do
|
|
3671
|
+
lambda do
|
|
3672
|
+
match.records.where({foo: 1}, {bar: 2})
|
|
3673
|
+
end.should raise_error(ArgumentError, /where requires zero or one arguments/)
|
|
3674
|
+
end
|
|
3675
|
+
end
|
|
3279
3676
|
end
|
|
3280
3677
|
|
|
3281
3678
|
context "when provided a string" do
|
|
@@ -3314,17 +3711,6 @@ describe Mongoid::Criteria do
|
|
|
3314
3711
|
end
|
|
3315
3712
|
end
|
|
3316
3713
|
|
|
3317
|
-
context 'when the criteria contains a BSON::Regexp::Raw' do
|
|
3318
|
-
|
|
3319
|
-
let(:criteria) do
|
|
3320
|
-
Band.where(name: BSON::Regexp::Raw.new("^Depeche"))
|
|
3321
|
-
end
|
|
3322
|
-
|
|
3323
|
-
it "returns the matching documents" do
|
|
3324
|
-
expect(criteria).to eq([ match ])
|
|
3325
|
-
end
|
|
3326
|
-
end
|
|
3327
|
-
|
|
3328
3714
|
context "when the criteria is an exact fk array match" do
|
|
3329
3715
|
|
|
3330
3716
|
let(:id_one) do
|
|
@@ -3347,11 +3733,11 @@ describe Mongoid::Criteria do
|
|
|
3347
3733
|
context "when querying on a big decimal" do
|
|
3348
3734
|
|
|
3349
3735
|
let(:sales) do
|
|
3350
|
-
BigDecimal
|
|
3736
|
+
BigDecimal('0.1')
|
|
3351
3737
|
end
|
|
3352
3738
|
|
|
3353
3739
|
let!(:band) do
|
|
3354
|
-
Band.create(name: "Boards of Canada", sales: sales)
|
|
3740
|
+
Band.create!(name: "Boards of Canada", sales: sales)
|
|
3355
3741
|
end
|
|
3356
3742
|
|
|
3357
3743
|
let(:from_db) do
|
|
@@ -3363,14 +3749,15 @@ describe Mongoid::Criteria do
|
|
|
3363
3749
|
end
|
|
3364
3750
|
end
|
|
3365
3751
|
|
|
3366
|
-
context "when querying on a BSON::Decimal128"
|
|
3752
|
+
context "when querying on a BSON::Decimal128" do
|
|
3753
|
+
min_server_version '3.4'
|
|
3367
3754
|
|
|
3368
3755
|
let(:decimal) do
|
|
3369
3756
|
BSON::Decimal128.new("0.0005")
|
|
3370
3757
|
end
|
|
3371
3758
|
|
|
3372
3759
|
let!(:band) do
|
|
3373
|
-
Band.create(name: "Boards of Canada", decimal: decimal)
|
|
3760
|
+
Band.create!(name: "Boards of Canada", decimal: decimal)
|
|
3374
3761
|
end
|
|
3375
3762
|
|
|
3376
3763
|
let(:from_db) do
|
|
@@ -3385,7 +3772,7 @@ describe Mongoid::Criteria do
|
|
|
3385
3772
|
context 'when querying on a polymorphic relation' do
|
|
3386
3773
|
|
|
3387
3774
|
let(:movie) do
|
|
3388
|
-
Movie.create
|
|
3775
|
+
Movie.create!
|
|
3389
3776
|
end
|
|
3390
3777
|
|
|
3391
3778
|
let(:selector) do
|
|
@@ -3397,12 +3784,78 @@ describe Mongoid::Criteria do
|
|
|
3397
3784
|
end
|
|
3398
3785
|
end
|
|
3399
3786
|
end
|
|
3787
|
+
|
|
3788
|
+
context 'when given multiple keys in separate calls' do
|
|
3789
|
+
let(:criteria) { Band.where(foo: 1).where(bar: 2) }
|
|
3790
|
+
|
|
3791
|
+
it 'combines criteria' do
|
|
3792
|
+
expect(criteria.selector).to eq('foo' => 1, 'bar' => 2)
|
|
3793
|
+
end
|
|
3794
|
+
end
|
|
3795
|
+
|
|
3796
|
+
context 'when given same key in separate calls' do
|
|
3797
|
+
let(:criteria) { Band.where(foo: 1).where(foo: 2) }
|
|
3798
|
+
|
|
3799
|
+
it 'combines criteria' do
|
|
3800
|
+
expect(criteria.selector).to eq('foo' => 1, '$and' => [{'foo' => 2}])
|
|
3801
|
+
end
|
|
3802
|
+
end
|
|
3803
|
+
|
|
3804
|
+
context 'when given same key in separate calls and there are other criteria' do
|
|
3805
|
+
let(:criteria) { Band.where(foo: 1, bar: 3).where(foo: 2) }
|
|
3806
|
+
|
|
3807
|
+
it 'combines criteria' do
|
|
3808
|
+
expect(criteria.selector).to eq(
|
|
3809
|
+
'foo' => 1, '$and' => [{'foo' => 2}], 'bar' => 3)
|
|
3810
|
+
end
|
|
3811
|
+
end
|
|
3812
|
+
|
|
3813
|
+
context 'when given same key in separate calls and other criteria are added later' do
|
|
3814
|
+
let(:criteria) { Band.where(foo: 1).where(foo: 2).where(bar: 3) }
|
|
3815
|
+
|
|
3816
|
+
it 'combines criteria' do
|
|
3817
|
+
expect(criteria.selector).to eq(
|
|
3818
|
+
'foo' => 1, '$and' => [{'foo' => 2}], 'bar' => 3)
|
|
3819
|
+
end
|
|
3820
|
+
end
|
|
3821
|
+
|
|
3822
|
+
context "when duplicating where conditions" do
|
|
3823
|
+
let(:criteria) { Sound.where(active: true).where(active: true) }
|
|
3824
|
+
|
|
3825
|
+
it 'does not duplicate criteria' do
|
|
3826
|
+
expect(criteria.selector).to eq('active' => true)
|
|
3827
|
+
end
|
|
3828
|
+
end
|
|
3829
|
+
|
|
3830
|
+
context "when duplicating where conditions with different values" do
|
|
3831
|
+
let(:criteria) { Sound.where(active: true).where(active: false).where(active: true).where(active: false) }
|
|
3832
|
+
|
|
3833
|
+
it 'does not duplicate criteria' do
|
|
3834
|
+
expect(criteria.selector).to eq(
|
|
3835
|
+
'active' => true, '$and' => [{'active' => false}])
|
|
3836
|
+
end
|
|
3837
|
+
end
|
|
3838
|
+
|
|
3839
|
+
# Used to test MONGOID-5251 where the find command was adding unnecessary
|
|
3840
|
+
# and clauses. Since the find command creates the criteria and executes it,
|
|
3841
|
+
# it is difficult to analyze the criteria used. For this reason, I have
|
|
3842
|
+
# extracted the crux of the issue, adding an _id to the the criteria twice,
|
|
3843
|
+
# and used that for the test case.
|
|
3844
|
+
context "when searching by _id twice" do
|
|
3845
|
+
let(:_id) { BSON::ObjectId.new }
|
|
3846
|
+
let(:criteria) { Band.where(_id: _id) }
|
|
3847
|
+
let(:dup_criteria) { criteria.where(_id: _id)}
|
|
3848
|
+
|
|
3849
|
+
it "does not duplicate the criteria" do
|
|
3850
|
+
expect(dup_criteria.selector).to eq({ "_id" => _id })
|
|
3851
|
+
end
|
|
3852
|
+
end
|
|
3400
3853
|
end
|
|
3401
3854
|
|
|
3402
3855
|
describe "#for_js" do
|
|
3403
3856
|
|
|
3404
3857
|
let!(:match) do
|
|
3405
|
-
Band.create(name: "Depeche Mode")
|
|
3858
|
+
Band.create!(name: "Depeche Mode")
|
|
3406
3859
|
end
|
|
3407
3860
|
|
|
3408
3861
|
context "when the code has no scope" do
|
|
@@ -3417,6 +3870,7 @@ describe Mongoid::Criteria do
|
|
|
3417
3870
|
end
|
|
3418
3871
|
|
|
3419
3872
|
context "when the code has scope" do
|
|
3873
|
+
max_server_version '4.2'
|
|
3420
3874
|
|
|
3421
3875
|
let(:criteria) do
|
|
3422
3876
|
Band.for_js("this.name == param", param: "Depeche Mode")
|
|
@@ -3438,10 +3892,14 @@ describe Mongoid::Criteria do
|
|
|
3438
3892
|
|
|
3439
3893
|
before do
|
|
3440
3894
|
expect(Person).to receive(:minor).and_call_original
|
|
3895
|
+
expect(Person).to receive(:older_than).and_call_original
|
|
3441
3896
|
end
|
|
3442
3897
|
|
|
3443
3898
|
it "calls the method on the class" do
|
|
3444
3899
|
expect(criteria.minor).to be_empty
|
|
3900
|
+
expect do
|
|
3901
|
+
criteria.older_than(age: 25)
|
|
3902
|
+
end.not_to raise_error
|
|
3445
3903
|
end
|
|
3446
3904
|
end
|
|
3447
3905
|
|
|
@@ -3484,11 +3942,11 @@ describe Mongoid::Criteria do
|
|
|
3484
3942
|
describe "#uniq" do
|
|
3485
3943
|
|
|
3486
3944
|
let!(:band_one) do
|
|
3487
|
-
Band.create(name: "New Order")
|
|
3945
|
+
Band.create!(name: "New Order")
|
|
3488
3946
|
end
|
|
3489
3947
|
|
|
3490
3948
|
let!(:band_two) do
|
|
3491
|
-
Band.create(name: "New Order")
|
|
3949
|
+
Band.create!(name: "New Order")
|
|
3492
3950
|
end
|
|
3493
3951
|
|
|
3494
3952
|
let(:criteria) do
|
|
@@ -3502,8 +3960,21 @@ describe Mongoid::Criteria do
|
|
|
3502
3960
|
|
|
3503
3961
|
describe "#with" do
|
|
3504
3962
|
|
|
3505
|
-
let!(:
|
|
3506
|
-
|
|
3963
|
+
let!(:criteria_and_collection) do
|
|
3964
|
+
collection = nil
|
|
3965
|
+
criteria = Band.where(name: "Depeche Mode").with(collection: "artists") do |crit|
|
|
3966
|
+
collection = crit.collection
|
|
3967
|
+
crit
|
|
3968
|
+
end
|
|
3969
|
+
[ criteria, collection ]
|
|
3970
|
+
end
|
|
3971
|
+
|
|
3972
|
+
let(:criteria) do
|
|
3973
|
+
criteria_and_collection[0]
|
|
3974
|
+
end
|
|
3975
|
+
|
|
3976
|
+
let(:collection) do
|
|
3977
|
+
criteria_and_collection[1]
|
|
3507
3978
|
end
|
|
3508
3979
|
|
|
3509
3980
|
it "retains the criteria selection" do
|
|
@@ -3511,11 +3982,11 @@ describe Mongoid::Criteria do
|
|
|
3511
3982
|
end
|
|
3512
3983
|
|
|
3513
3984
|
it "sets the persistence options" do
|
|
3514
|
-
expect(
|
|
3985
|
+
expect(collection.name).to eq("artists")
|
|
3515
3986
|
end
|
|
3516
3987
|
end
|
|
3517
3988
|
|
|
3518
|
-
describe "#
|
|
3989
|
+
describe "#geo_spatial" do
|
|
3519
3990
|
|
|
3520
3991
|
context "when checking within a polygon" do
|
|
3521
3992
|
|
|
@@ -3524,11 +3995,11 @@ describe Mongoid::Criteria do
|
|
|
3524
3995
|
end
|
|
3525
3996
|
|
|
3526
3997
|
let!(:match) do
|
|
3527
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
3998
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
3528
3999
|
end
|
|
3529
4000
|
|
|
3530
4001
|
let(:criteria) do
|
|
3531
|
-
Bar.
|
|
4002
|
+
Bar.geo_spatial(
|
|
3532
4003
|
:location.within_polygon => [[[ 50, 10 ], [ 50, 20 ], [ 60, 20 ], [ 60, 10 ], [ 50, 10 ]]]
|
|
3533
4004
|
)
|
|
3534
4005
|
end
|
|
@@ -3542,11 +4013,11 @@ describe Mongoid::Criteria do
|
|
|
3542
4013
|
describe "#with_size" do
|
|
3543
4014
|
|
|
3544
4015
|
let!(:match) do
|
|
3545
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
4016
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
3546
4017
|
end
|
|
3547
4018
|
|
|
3548
4019
|
let!(:non_match) do
|
|
3549
|
-
Band.create(genres: [ "house" ])
|
|
4020
|
+
Band.create!(genres: [ "house" ])
|
|
3550
4021
|
end
|
|
3551
4022
|
|
|
3552
4023
|
let(:criteria) do
|
|
@@ -3561,7 +4032,7 @@ describe Mongoid::Criteria do
|
|
|
3561
4032
|
describe "#with_type" do
|
|
3562
4033
|
|
|
3563
4034
|
let!(:match) do
|
|
3564
|
-
Band.create(name: "Depeche Mode")
|
|
4035
|
+
Band.create!(name: "Depeche Mode")
|
|
3565
4036
|
end
|
|
3566
4037
|
|
|
3567
4038
|
let(:criteria) do
|
|
@@ -3573,73 +4044,76 @@ describe Mongoid::Criteria do
|
|
|
3573
4044
|
end
|
|
3574
4045
|
end
|
|
3575
4046
|
|
|
3576
|
-
describe "#
|
|
4047
|
+
describe "#type_selection" do
|
|
4048
|
+
context "when using the default discriminator_key" do
|
|
4049
|
+
context "when only one subclass exists" do
|
|
3577
4050
|
|
|
3578
|
-
|
|
3579
|
-
|
|
3580
|
-
|
|
4051
|
+
let(:criteria) do
|
|
4052
|
+
described_class.new(Firefox)
|
|
4053
|
+
end
|
|
4054
|
+
|
|
4055
|
+
let(:selection) do
|
|
4056
|
+
criteria.send(:type_selection)
|
|
4057
|
+
end
|
|
3581
4058
|
|
|
3582
|
-
|
|
4059
|
+
it "does not use an $in query" do
|
|
4060
|
+
expect(selection).to eq({ _type: "Firefox" })
|
|
4061
|
+
end
|
|
4062
|
+
end
|
|
3583
4063
|
|
|
3584
|
-
context "when
|
|
4064
|
+
context "when more than one subclass exists" do
|
|
3585
4065
|
|
|
3586
4066
|
let(:criteria) do
|
|
3587
|
-
|
|
4067
|
+
described_class.new(Browser)
|
|
3588
4068
|
end
|
|
3589
4069
|
|
|
3590
|
-
|
|
3591
|
-
|
|
4070
|
+
let(:selection) do
|
|
4071
|
+
criteria.send(:type_selection)
|
|
3592
4072
|
end
|
|
3593
|
-
end
|
|
3594
|
-
end
|
|
3595
|
-
|
|
3596
|
-
context "when excluding id" do
|
|
3597
4073
|
|
|
3598
|
-
|
|
3599
|
-
|
|
4074
|
+
it "does not use an $in query" do
|
|
4075
|
+
expect(selection).to eq({ _type: { "$in" => [ "Firefox", "Browser" ]}})
|
|
4076
|
+
end
|
|
3600
4077
|
end
|
|
4078
|
+
end
|
|
3601
4079
|
|
|
3602
|
-
|
|
3603
|
-
|
|
3604
|
-
|
|
3605
|
-
}.to_not raise_error
|
|
4080
|
+
context "when using a custom discriminator_key" do
|
|
4081
|
+
before do
|
|
4082
|
+
Canvas.discriminator_key = "dkey"
|
|
3606
4083
|
end
|
|
3607
4084
|
|
|
3608
|
-
|
|
3609
|
-
|
|
4085
|
+
after do
|
|
4086
|
+
Canvas.discriminator_key = nil
|
|
3610
4087
|
end
|
|
3611
|
-
end
|
|
3612
|
-
end
|
|
3613
4088
|
|
|
3614
|
-
|
|
4089
|
+
context "when only one subclass exists" do
|
|
3615
4090
|
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
described_class.new(Firefox)
|
|
3620
|
-
end
|
|
4091
|
+
let(:criteria) do
|
|
4092
|
+
described_class.new(Firefox)
|
|
4093
|
+
end
|
|
3621
4094
|
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
4095
|
+
let(:selection) do
|
|
4096
|
+
criteria.send(:type_selection)
|
|
4097
|
+
end
|
|
3625
4098
|
|
|
3626
|
-
|
|
3627
|
-
|
|
4099
|
+
it "does not use an $in query" do
|
|
4100
|
+
expect(selection).to eq({ dkey: "Firefox" })
|
|
4101
|
+
end
|
|
3628
4102
|
end
|
|
3629
|
-
end
|
|
3630
4103
|
|
|
3631
|
-
|
|
4104
|
+
context "when more than one subclass exists" do
|
|
3632
4105
|
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
4106
|
+
let(:criteria) do
|
|
4107
|
+
described_class.new(Browser)
|
|
4108
|
+
end
|
|
3636
4109
|
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
4110
|
+
let(:selection) do
|
|
4111
|
+
criteria.send(:type_selection)
|
|
4112
|
+
end
|
|
3640
4113
|
|
|
3641
|
-
|
|
3642
|
-
|
|
4114
|
+
it "does not use an $in query" do
|
|
4115
|
+
expect(selection).to eq({ dkey: { "$in" => [ "Firefox", "Browser" ]}})
|
|
4116
|
+
end
|
|
3643
4117
|
end
|
|
3644
4118
|
end
|
|
3645
4119
|
end
|