mongoid 7.0.10 → 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/README.md +32 -19
- data/Rakefile +51 -7
- data/lib/config/locales/en.yml +129 -70
- data/lib/mongoid/association/accessors.rb +143 -80
- data/lib/mongoid/association/bindable.rb +7 -26
- data/lib/mongoid/association/builders.rb +4 -12
- data/lib/mongoid/association/constrainable.rb +5 -6
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +2 -3
- data/lib/mongoid/association/embedded/batchable.rb +16 -42
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +3 -7
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- data/lib/mongoid/association/embedded/embedded_in.rb +6 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +90 -93
- data/lib/mongoid/association/embedded/embeds_many.rb +6 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +42 -27
- data/lib/mongoid/association/embedded/embeds_one.rb +6 -30
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +44 -41
- data/lib/mongoid/association/many.rb +16 -30
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +18 -27
- data/lib/mongoid/association/nested/nested_buildable.rb +5 -11
- data/lib/mongoid/association/nested/one.rb +16 -27
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +4 -11
- data/lib/mongoid/association/options.rb +8 -38
- data/lib/mongoid/association/proxy.rb +37 -36
- data/lib/mongoid/association/referenced/auto_save.rb +5 -11
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -27
- data/lib/mongoid/association/referenced/belongs_to.rb +14 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +4 -15
- data/lib/mongoid/association/referenced/eager.rb +39 -38
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +37 -57
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -43
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +444 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +74 -107
- data/lib/mongoid/association/referenced/has_many.rb +18 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -26
- data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -25
- data/lib/mongoid/association/referenced/has_one.rb +13 -33
- data/lib/mongoid/association/referenced/syncable.rb +7 -22
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +18 -74
- data/lib/mongoid/association.rb +8 -22
- data/lib/mongoid/atomic/modifiers.rb +27 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +29 -44
- data/lib/mongoid/attributes/dynamic.rb +3 -18
- data/lib/mongoid/attributes/nested.rb +7 -10
- data/lib/mongoid/attributes/processing.rb +9 -24
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -6
- data/lib/mongoid/attributes.rb +46 -60
- data/lib/mongoid/cacheable.rb +6 -9
- data/lib/mongoid/changeable.rb +6 -60
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +10 -13
- data/lib/mongoid/clients/sessions.rb +2 -6
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- data/lib/mongoid/config/environment.rb +15 -6
- 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 -41
- data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
- data/lib/mongoid/contextual/aggregable/mongo.rb +25 -26
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +6 -37
- data/lib/mongoid/contextual/map_reduce.rb +5 -33
- data/lib/mongoid/contextual/memory.rb +8 -61
- data/lib/mongoid/contextual/mongo.rb +160 -82
- data/lib/mongoid/contextual/none.rb +44 -28
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +11 -10
- data/lib/mongoid/criteria/findable.rb +12 -15
- data/lib/mongoid/criteria/includable.rb +8 -15
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +2 -5
- data/lib/mongoid/criteria/modifiable.rb +2 -19
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -27
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -26
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -12
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -13
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -18
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
- data/lib/mongoid/criteria/queryable/extensions/time.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +36 -21
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +179 -40
- data/lib/mongoid/criteria/queryable/optional.rb +5 -48
- data/lib/mongoid/criteria/queryable/options.rb +2 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +414 -162
- data/lib/mongoid/criteria/queryable/selector.rb +36 -24
- data/lib/mongoid/criteria/queryable/smash.rb +2 -11
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +7 -9
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +79 -72
- data/lib/mongoid/document.rb +24 -73
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +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 +2 -3
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -9
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/invalid_value.rb +2 -1
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +3 -10
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +2 -3
- data/lib/mongoid/errors/no_client_hosts.rb +2 -3
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -3
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -3
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- 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 +12 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +28 -37
- data/lib/mongoid/extensions/big_decimal.rb +2 -11
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +13 -12
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +47 -34
- 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 +17 -44
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +2 -11
- data/lib/mongoid/extensions/regexp.rb +2 -3
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +19 -39
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +12 -9
- data/lib/mongoid/extensions/time_with_zone.rb +25 -7
- data/lib/mongoid/extensions/true_class.rb +4 -7
- data/lib/mongoid/extensions.rb +18 -3
- data/lib/mongoid/factory.rb +52 -13
- data/lib/mongoid/fields/foreign_key.rb +3 -22
- data/lib/mongoid/fields/localized.rb +2 -11
- data/lib/mongoid/fields/standard.rb +6 -36
- data/lib/mongoid/fields/validators/macro.rb +36 -18
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +113 -63
- data/lib/mongoid/findable.rb +59 -23
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +13 -30
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +2 -153
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +110 -0
- data/lib/mongoid/persistable/creatable.rb +4 -21
- data/lib/mongoid/persistable/deletable.rb +5 -21
- data/lib/mongoid/persistable/destroyable.rb +11 -10
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +3 -8
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +3 -8
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +32 -20
- data/lib/mongoid/persistable/upsertable.rb +3 -8
- data/lib/mongoid/persistable.rb +133 -38
- data/lib/mongoid/persistence_context.rb +23 -36
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +118 -103
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +3 -1
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +8 -35
- data/lib/mongoid/selectable.rb +8 -17
- data/lib/mongoid/serializable.rb +24 -29
- data/lib/mongoid/shardable.rb +80 -17
- data/lib/mongoid/stateful.rb +3 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -5
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +2 -55
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +3 -2
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +3 -4
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +53 -23
- data/lib/mongoid/traversable.rb +177 -57
- 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 +2 -7
- data/lib/mongoid/validatable/presence.rb +8 -13
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +20 -33
- data/lib/mongoid/validatable.rb +8 -27
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid.rb +32 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +1 -0
- data/spec/integration/app_spec.rb +246 -95
- data/spec/integration/associations/belongs_to_spec.rb +2 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
- data/spec/integration/associations/embedded_spec.rb +207 -1
- 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 +1 -2
- 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 +125 -15
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -42
- 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 +22 -5
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +34 -32
- data/spec/mongoid/association/depending_spec.rb +426 -333
- data/spec/mongoid/association/eager_spec.rb +6 -4
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +65 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +431 -133
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +3 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +57 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +99 -58
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +24 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +215 -167
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -2
- 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 +46 -2
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +306 -125
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +679 -339
- data/spec/mongoid/association/referenced/has_many_models.rb +58 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -7
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +28 -26
- data/spec/mongoid/association/referenced/has_one_models.rb +49 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +33 -31
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- 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 +31 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +69 -67
- 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 +24 -22
- data/spec/mongoid/attributes_spec.rb +363 -28
- data/spec/mongoid/cacheable_spec.rb +3 -1
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +136 -28
- data/spec/mongoid/clients/options_spec.rb +44 -26
- data/spec/mongoid/clients/sessions_spec.rb +25 -28
- data/spec/mongoid/clients/transactions_spec.rb +54 -29
- data/spec/mongoid/clients_spec.rb +8 -6
- data/spec/mongoid/composable_spec.rb +2 -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 +277 -1
- 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 +222 -71
- data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +4 -2
- data/spec/mongoid/contextual/memory_spec.rb +25 -23
- data/spec/mongoid/contextual/mongo_spec.rb +413 -92
- data/spec/mongoid/contextual/none_spec.rb +9 -81
- data/spec/mongoid/copyable_spec.rb +207 -26
- data/spec/mongoid/copyable_spec_models.rb +30 -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 +43 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +23 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1593 -286
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1010 -2736
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +782 -459
- data/spec/mongoid/document_fields_spec.rb +26 -1
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +123 -48
- 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 +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +2 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +25 -43
- data/spec/mongoid/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +2 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -160
- data/spec/mongoid/extensions/date_time_spec.rb +17 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +17 -3
- data/spec/mongoid/extensions/hash_spec.rb +105 -0
- data/spec/mongoid/extensions/integer_spec.rb +14 -2
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +2 -0
- data/spec/mongoid/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +60 -27
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/extensions/time_spec.rb +29 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +287 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +6 -4
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +418 -36
- data/spec/mongoid/findable_spec.rb +53 -19
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +30 -2
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +168 -96
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -27
- data/spec/mongoid/persistable/deletable_spec.rb +273 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +36 -6
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +54 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +2 -0
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +501 -81
- data/spec/mongoid/relations/proxy_spec.rb +8 -6
- data/spec/mongoid/reloadable_spec.rb +298 -20
- data/spec/mongoid/scopable_spec.rb +67 -21
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +116 -17
- data/spec/mongoid/stateful_spec.rb +3 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +2 -0
- data/spec/mongoid/tasks/database_spec.rb +2 -0
- data/spec/mongoid/threaded_spec.rb +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +8 -6
- data/spec/mongoid/touchable_spec.rb +180 -33
- data/spec/mongoid/touchable_spec_models.rb +53 -0
- data/spec/mongoid/traversable_spec.rb +1167 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- 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 +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +69 -67
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid_spec.rb +2 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -1
- data/spec/rails/mongoid_spec.rb +4 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +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 +39 -35
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +15 -234
- data/spec/support/expectations.rb +5 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +22 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -0
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/{app → support}/models/augmentation.rb +2 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +6 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +2 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +2 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/{app → support}/models/circus.rb +2 -0
- data/spec/{app → support}/models/code.rb +2 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -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/{app → support}/models/definition.rb +2 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +2 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +4 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +2 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +13 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +21 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +2 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/{app → support}/models/powerup.rb +2 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +2 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -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/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +2 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -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/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/{app → support}/models/weapon.rb +2 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +16 -3
- data.tar.gz.sig +0 -0
- metadata +1100 -738
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/matchable/all.rb +0 -28
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -119
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/eq.rb +0 -22
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/other_owner_object.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- 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 -137
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/eq_spec.rb +0 -48
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- data/spec/support/child_process_helper.rb +0 -76
- data/spec/support/cluster_config.rb +0 -158
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "spec_helper"
|
|
2
4
|
|
|
3
5
|
describe Mongoid::Criteria do
|
|
@@ -38,7 +40,7 @@ describe Mongoid::Criteria do
|
|
|
38
40
|
context "when the entries are the same" do
|
|
39
41
|
|
|
40
42
|
let!(:band) do
|
|
41
|
-
Band.create(name: "Depeche Mode")
|
|
43
|
+
Band.create!(name: "Depeche Mode")
|
|
42
44
|
end
|
|
43
45
|
|
|
44
46
|
let(:other) do
|
|
@@ -53,11 +55,11 @@ describe Mongoid::Criteria do
|
|
|
53
55
|
context "when the entries are not the same" do
|
|
54
56
|
|
|
55
57
|
let!(:band) do
|
|
56
|
-
Band.create(name: "Depeche Mode")
|
|
58
|
+
Band.create!(name: "Depeche Mode")
|
|
57
59
|
end
|
|
58
60
|
|
|
59
61
|
let!(:other_band) do
|
|
60
|
-
Band.create(name: "Tool")
|
|
62
|
+
Band.create!(name: "Tool")
|
|
61
63
|
end
|
|
62
64
|
|
|
63
65
|
let(:other) do
|
|
@@ -102,21 +104,21 @@ describe Mongoid::Criteria do
|
|
|
102
104
|
describe "#asc" do
|
|
103
105
|
|
|
104
106
|
let(:person) do
|
|
105
|
-
Person.create
|
|
107
|
+
Person.create!
|
|
106
108
|
end
|
|
107
109
|
|
|
108
110
|
context "when the documents are embedded" do
|
|
109
111
|
|
|
110
112
|
let!(:hobrecht) do
|
|
111
|
-
person.addresses.create(street: "hobrecht", name: "hobrecht")
|
|
113
|
+
person.addresses.create!(street: "hobrecht", name: "hobrecht")
|
|
112
114
|
end
|
|
113
115
|
|
|
114
116
|
let!(:friedel) do
|
|
115
|
-
person.addresses.create(street: "friedel", name: "friedel")
|
|
117
|
+
person.addresses.create!(street: "friedel", name: "friedel")
|
|
116
118
|
end
|
|
117
119
|
|
|
118
120
|
let!(:pfluger) do
|
|
119
|
-
person.addresses.create(street: "pfluger", name: "pfluger")
|
|
121
|
+
person.addresses.create!(street: "pfluger", name: "pfluger")
|
|
120
122
|
end
|
|
121
123
|
|
|
122
124
|
let(:criteria) do
|
|
@@ -132,7 +134,7 @@ describe Mongoid::Criteria do
|
|
|
132
134
|
describe "#batch_size" do
|
|
133
135
|
|
|
134
136
|
let(:person) do
|
|
135
|
-
Person.create
|
|
137
|
+
Person.create!
|
|
136
138
|
end
|
|
137
139
|
|
|
138
140
|
let(:criteria) do
|
|
@@ -151,7 +153,7 @@ describe Mongoid::Criteria do
|
|
|
151
153
|
describe "#read" do
|
|
152
154
|
|
|
153
155
|
let(:person) do
|
|
154
|
-
Person.create
|
|
156
|
+
Person.create!
|
|
155
157
|
end
|
|
156
158
|
|
|
157
159
|
let(:criteria) do
|
|
@@ -168,11 +170,11 @@ describe Mongoid::Criteria do
|
|
|
168
170
|
context "when provided a single field" do
|
|
169
171
|
|
|
170
172
|
let!(:depeche) do
|
|
171
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
173
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
172
174
|
end
|
|
173
175
|
|
|
174
176
|
let!(:tool) do
|
|
175
|
-
Band.create(name: "Tool", likes: 500)
|
|
177
|
+
Band.create!(name: "Tool", likes: 500)
|
|
176
178
|
end
|
|
177
179
|
|
|
178
180
|
let(:criteria) do
|
|
@@ -210,11 +212,11 @@ describe Mongoid::Criteria do
|
|
|
210
212
|
context "when provided a single field" do
|
|
211
213
|
|
|
212
214
|
let!(:depeche) do
|
|
213
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
215
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
214
216
|
end
|
|
215
217
|
|
|
216
218
|
let!(:tool) do
|
|
217
|
-
Band.create(name: "Tool", likes: 500)
|
|
219
|
+
Band.create!(name: "Tool", likes: 500)
|
|
218
220
|
end
|
|
219
221
|
|
|
220
222
|
let(:criteria) do
|
|
@@ -236,11 +238,11 @@ describe Mongoid::Criteria do
|
|
|
236
238
|
describe "\##{method}" do
|
|
237
239
|
|
|
238
240
|
let!(:match) do
|
|
239
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
241
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
240
242
|
end
|
|
241
243
|
|
|
242
244
|
let!(:non_match) do
|
|
243
|
-
Band.create(genres: [ "house" ])
|
|
245
|
+
Band.create!(genres: [ "house" ])
|
|
244
246
|
end
|
|
245
247
|
|
|
246
248
|
let(:criteria) do
|
|
@@ -258,11 +260,11 @@ describe Mongoid::Criteria do
|
|
|
258
260
|
describe "\##{method}" do
|
|
259
261
|
|
|
260
262
|
let!(:match) do
|
|
261
|
-
Band.create(name: "Depeche Mode", genres: [ "electro" ])
|
|
263
|
+
Band.create!(name: "Depeche Mode", genres: [ "electro" ])
|
|
262
264
|
end
|
|
263
265
|
|
|
264
266
|
let!(:non_match) do
|
|
265
|
-
Band.create(genres: [ "house" ])
|
|
267
|
+
Band.create!(genres: [ "house" ])
|
|
266
268
|
end
|
|
267
269
|
|
|
268
270
|
let(:criteria) do
|
|
@@ -278,7 +280,7 @@ 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
|
|
@@ -308,11 +310,11 @@ describe Mongoid::Criteria do
|
|
|
308
310
|
describe "#between" do
|
|
309
311
|
|
|
310
312
|
let!(:match) do
|
|
311
|
-
Band.create(member_count: 3)
|
|
313
|
+
Band.create!(member_count: 3)
|
|
312
314
|
end
|
|
313
315
|
|
|
314
316
|
let!(:non_match) do
|
|
315
|
-
Band.create(member_count: 10)
|
|
317
|
+
Band.create!(member_count: 10)
|
|
316
318
|
end
|
|
317
319
|
|
|
318
320
|
let(:criteria) do
|
|
@@ -378,7 +380,7 @@ describe Mongoid::Criteria do
|
|
|
378
380
|
describe "#cache" do
|
|
379
381
|
|
|
380
382
|
let!(:person) do
|
|
381
|
-
Person.create
|
|
383
|
+
Person.create!
|
|
382
384
|
end
|
|
383
385
|
|
|
384
386
|
context "when no eager loading is involved" do
|
|
@@ -530,11 +532,11 @@ describe Mongoid::Criteria do
|
|
|
530
532
|
describe "#delete" do
|
|
531
533
|
|
|
532
534
|
let(:depeche) do
|
|
533
|
-
Band.create(name: "Depeche Mode")
|
|
535
|
+
Band.create!(name: "Depeche Mode")
|
|
534
536
|
end
|
|
535
537
|
|
|
536
538
|
let(:tool) do
|
|
537
|
-
Band.create(name: "Tool")
|
|
539
|
+
Band.create!(name: "Tool")
|
|
538
540
|
end
|
|
539
541
|
|
|
540
542
|
context "when no selector is provided" do
|
|
@@ -588,7 +590,7 @@ describe Mongoid::Criteria do
|
|
|
588
590
|
describe "#each" do
|
|
589
591
|
|
|
590
592
|
let!(:band) do
|
|
591
|
-
Band.create(name: "Depeche Mode")
|
|
593
|
+
Band.create!(name: "Depeche Mode")
|
|
592
594
|
end
|
|
593
595
|
|
|
594
596
|
context "when provided a block" do
|
|
@@ -608,14 +610,14 @@ describe Mongoid::Criteria do
|
|
|
608
610
|
describe "#elem_match" do
|
|
609
611
|
|
|
610
612
|
let!(:match) do
|
|
611
|
-
Band.create(name: "Depeche Mode").tap do |band|
|
|
613
|
+
Band.create!(name: "Depeche Mode").tap do |band|
|
|
612
614
|
r = band.records
|
|
613
|
-
r.create(name: "101")
|
|
615
|
+
r.create!(name: "101")
|
|
614
616
|
end
|
|
615
617
|
end
|
|
616
618
|
|
|
617
619
|
let!(:non_match) do
|
|
618
|
-
Band.create(genres: [ "house" ])
|
|
620
|
+
Band.create!(genres: [ "house" ])
|
|
619
621
|
end
|
|
620
622
|
|
|
621
623
|
let(:criteria) do
|
|
@@ -661,7 +663,7 @@ describe Mongoid::Criteria do
|
|
|
661
663
|
context "when matching documents exist" do
|
|
662
664
|
|
|
663
665
|
let!(:match) do
|
|
664
|
-
Band.create(name: "Depeche Mode")
|
|
666
|
+
Band.create!(name: "Depeche Mode")
|
|
665
667
|
end
|
|
666
668
|
|
|
667
669
|
let(:criteria) do
|
|
@@ -676,7 +678,7 @@ describe Mongoid::Criteria do
|
|
|
676
678
|
context "when no matching documents exist" do
|
|
677
679
|
|
|
678
680
|
let!(:nonmatch) do
|
|
679
|
-
Band.create(name: "New Order")
|
|
681
|
+
Band.create!(name: "New Order")
|
|
680
682
|
end
|
|
681
683
|
|
|
682
684
|
let(:criteria) do
|
|
@@ -692,11 +694,11 @@ describe Mongoid::Criteria do
|
|
|
692
694
|
describe "#exists" do
|
|
693
695
|
|
|
694
696
|
let!(:match) do
|
|
695
|
-
Band.create(name: "Depeche Mode")
|
|
697
|
+
Band.create!(name: "Depeche Mode")
|
|
696
698
|
end
|
|
697
699
|
|
|
698
700
|
let!(:non_match) do
|
|
699
|
-
Band.create
|
|
701
|
+
Band.create!
|
|
700
702
|
end
|
|
701
703
|
|
|
702
704
|
let(:criteria) do
|
|
@@ -713,7 +715,7 @@ describe Mongoid::Criteria do
|
|
|
713
715
|
context "when matching documents exist" do
|
|
714
716
|
|
|
715
717
|
let!(:match) do
|
|
716
|
-
Band.create(name: "Depeche Mode")
|
|
718
|
+
Band.create!(name: "Depeche Mode")
|
|
717
719
|
end
|
|
718
720
|
|
|
719
721
|
let(:criteria) do
|
|
@@ -783,23 +785,83 @@ describe Mongoid::Criteria do
|
|
|
783
785
|
|
|
784
786
|
describe "#field_list" do
|
|
785
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
|
+
|
|
786
822
|
let(:criteria) do
|
|
787
|
-
Band.
|
|
823
|
+
Band.where(name: "Depeche Mode")
|
|
788
824
|
end
|
|
789
825
|
|
|
790
|
-
|
|
791
|
-
|
|
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
|
|
792
854
|
end
|
|
793
855
|
end
|
|
794
856
|
|
|
795
857
|
describe "#find_one_and_update" do
|
|
796
858
|
|
|
797
859
|
let!(:depeche) do
|
|
798
|
-
Band.create(name: "Depeche Mode")
|
|
860
|
+
Band.create!(name: "Depeche Mode")
|
|
799
861
|
end
|
|
800
862
|
|
|
801
863
|
let!(:tool) do
|
|
802
|
-
Band.create(name: "Tool")
|
|
864
|
+
Band.create!(name: "Tool")
|
|
803
865
|
end
|
|
804
866
|
|
|
805
867
|
context "when the selector matches" do
|
|
@@ -997,7 +1059,7 @@ describe Mongoid::Criteria do
|
|
|
997
1059
|
end
|
|
998
1060
|
|
|
999
1061
|
let!(:match) do
|
|
1000
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
1062
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
1001
1063
|
end
|
|
1002
1064
|
|
|
1003
1065
|
let(:criteria) do
|
|
@@ -1009,7 +1071,7 @@ describe Mongoid::Criteria do
|
|
|
1009
1071
|
end
|
|
1010
1072
|
end
|
|
1011
1073
|
|
|
1012
|
-
describe "#
|
|
1074
|
+
describe "#eq" do
|
|
1013
1075
|
|
|
1014
1076
|
let!(:match) do
|
|
1015
1077
|
Band.create(member_count: 5)
|
|
@@ -1019,6 +1081,25 @@ describe Mongoid::Criteria do
|
|
|
1019
1081
|
Band.create(member_count: 1)
|
|
1020
1082
|
end
|
|
1021
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
|
+
|
|
1022
1103
|
let(:criteria) do
|
|
1023
1104
|
Band.gt(member_count: 4)
|
|
1024
1105
|
end
|
|
@@ -1031,11 +1112,11 @@ describe Mongoid::Criteria do
|
|
|
1031
1112
|
describe "#gte" do
|
|
1032
1113
|
|
|
1033
1114
|
let!(:match) do
|
|
1034
|
-
Band.create(member_count: 5)
|
|
1115
|
+
Band.create!(member_count: 5)
|
|
1035
1116
|
end
|
|
1036
1117
|
|
|
1037
1118
|
let!(:non_match) do
|
|
1038
|
-
Band.create(member_count: 1)
|
|
1119
|
+
Band.create!(member_count: 1)
|
|
1039
1120
|
end
|
|
1040
1121
|
|
|
1041
1122
|
let(:criteria) do
|
|
@@ -1054,11 +1135,11 @@ describe Mongoid::Criteria do
|
|
|
1054
1135
|
context "when querying on a normal field" do
|
|
1055
1136
|
|
|
1056
1137
|
let!(:match) do
|
|
1057
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
1138
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
1058
1139
|
end
|
|
1059
1140
|
|
|
1060
1141
|
let!(:non_match) do
|
|
1061
|
-
Band.create(genres: [ "house" ])
|
|
1142
|
+
Band.create!(genres: [ "house" ])
|
|
1062
1143
|
end
|
|
1063
1144
|
|
|
1064
1145
|
let(:criteria) do
|
|
@@ -1077,7 +1158,7 @@ describe Mongoid::Criteria do
|
|
|
1077
1158
|
end
|
|
1078
1159
|
|
|
1079
1160
|
let!(:match_one) do
|
|
1080
|
-
Person.create(preference_ids: [ id ])
|
|
1161
|
+
Person.create!(preference_ids: [ id ])
|
|
1081
1162
|
end
|
|
1082
1163
|
|
|
1083
1164
|
context "when providing valid ids" do
|
|
@@ -1118,7 +1199,7 @@ describe Mongoid::Criteria do
|
|
|
1118
1199
|
context "when the relation is a one to one" do
|
|
1119
1200
|
|
|
1120
1201
|
let!(:game) do
|
|
1121
|
-
Game.create
|
|
1202
|
+
Game.create!
|
|
1122
1203
|
end
|
|
1123
1204
|
|
|
1124
1205
|
let(:criteria) do
|
|
@@ -1156,7 +1237,7 @@ describe Mongoid::Criteria do
|
|
|
1156
1237
|
describe "#includes" do
|
|
1157
1238
|
|
|
1158
1239
|
let!(:person) do
|
|
1159
|
-
Person.create(age: 1)
|
|
1240
|
+
Person.create!(age: 1)
|
|
1160
1241
|
end
|
|
1161
1242
|
|
|
1162
1243
|
context "when providing a name that is not a relation" do
|
|
@@ -1171,11 +1252,11 @@ describe Mongoid::Criteria do
|
|
|
1171
1252
|
context "when providing one association" do
|
|
1172
1253
|
|
|
1173
1254
|
let!(:user) do
|
|
1174
|
-
User.create(posts: [ post1 ])
|
|
1255
|
+
User.create!(posts: [ post1 ])
|
|
1175
1256
|
end
|
|
1176
1257
|
|
|
1177
1258
|
let!(:post1) do
|
|
1178
|
-
Post.create
|
|
1259
|
+
Post.create!
|
|
1179
1260
|
end
|
|
1180
1261
|
|
|
1181
1262
|
let(:result) do
|
|
@@ -1194,15 +1275,15 @@ describe Mongoid::Criteria do
|
|
|
1194
1275
|
context "when providing a list of associations" do
|
|
1195
1276
|
|
|
1196
1277
|
let!(:user) do
|
|
1197
|
-
User.create(posts: [ post1 ], descriptions: [ description1 ])
|
|
1278
|
+
User.create!(posts: [ post1 ], descriptions: [ description1 ])
|
|
1198
1279
|
end
|
|
1199
1280
|
|
|
1200
1281
|
let!(:post1) do
|
|
1201
|
-
Post.create
|
|
1282
|
+
Post.create!
|
|
1202
1283
|
end
|
|
1203
1284
|
|
|
1204
1285
|
let!(:description1) do
|
|
1205
|
-
Description.create(details: 1)
|
|
1286
|
+
Description.create!(details: 1)
|
|
1206
1287
|
end
|
|
1207
1288
|
|
|
1208
1289
|
let(:result) do
|
|
@@ -1222,13 +1303,13 @@ describe Mongoid::Criteria do
|
|
|
1222
1303
|
context "when providing a nested association" do
|
|
1223
1304
|
|
|
1224
1305
|
let!(:user) do
|
|
1225
|
-
User.create
|
|
1306
|
+
User.create!
|
|
1226
1307
|
end
|
|
1227
1308
|
|
|
1228
1309
|
before do
|
|
1229
|
-
p = Post.create(alerts: [ Alert.create ])
|
|
1310
|
+
p = Post.create!(alerts: [ Alert.create! ])
|
|
1230
1311
|
user.posts = [ p ]
|
|
1231
|
-
user.save
|
|
1312
|
+
user.save!
|
|
1232
1313
|
end
|
|
1233
1314
|
|
|
1234
1315
|
let(:result) do
|
|
@@ -1248,7 +1329,7 @@ describe Mongoid::Criteria do
|
|
|
1248
1329
|
context "when providing a deeply nested association" do
|
|
1249
1330
|
|
|
1250
1331
|
let!(:user) do
|
|
1251
|
-
User.create
|
|
1332
|
+
User.create!
|
|
1252
1333
|
end
|
|
1253
1334
|
|
|
1254
1335
|
let(:results) do
|
|
@@ -1286,15 +1367,15 @@ describe Mongoid::Criteria do
|
|
|
1286
1367
|
context "when the includes is on the subclass" do
|
|
1287
1368
|
|
|
1288
1369
|
let!(:c_one) do
|
|
1289
|
-
C.create
|
|
1370
|
+
C.create!
|
|
1290
1371
|
end
|
|
1291
1372
|
|
|
1292
1373
|
let!(:c_two) do
|
|
1293
|
-
C.create
|
|
1374
|
+
C.create!
|
|
1294
1375
|
end
|
|
1295
1376
|
|
|
1296
1377
|
let!(:b) do
|
|
1297
|
-
B.create(c: c_two)
|
|
1378
|
+
B.create!(c: c_two)
|
|
1298
1379
|
end
|
|
1299
1380
|
|
|
1300
1381
|
let!(:results) do
|
|
@@ -1349,19 +1430,19 @@ describe Mongoid::Criteria do
|
|
|
1349
1430
|
context "when the includes is on the several relations" do
|
|
1350
1431
|
|
|
1351
1432
|
let!(:d_one) do
|
|
1352
|
-
D.create
|
|
1433
|
+
D.create!
|
|
1353
1434
|
end
|
|
1354
1435
|
|
|
1355
1436
|
let!(:d_two) do
|
|
1356
|
-
D.create
|
|
1437
|
+
D.create!
|
|
1357
1438
|
end
|
|
1358
1439
|
|
|
1359
1440
|
let!(:b) do
|
|
1360
|
-
B.create(d: d_two)
|
|
1441
|
+
B.create!(d: d_two)
|
|
1361
1442
|
end
|
|
1362
1443
|
|
|
1363
1444
|
let!(:c) do
|
|
1364
|
-
C.create(d: d_two)
|
|
1445
|
+
C.create!(d: d_two)
|
|
1365
1446
|
end
|
|
1366
1447
|
|
|
1367
1448
|
let!(:results) do
|
|
@@ -1420,19 +1501,19 @@ describe Mongoid::Criteria do
|
|
|
1420
1501
|
context "when the includes is on the several relations" do
|
|
1421
1502
|
|
|
1422
1503
|
let!(:d_one) do
|
|
1423
|
-
D.create
|
|
1504
|
+
D.create!
|
|
1424
1505
|
end
|
|
1425
1506
|
|
|
1426
1507
|
let!(:d_two) do
|
|
1427
|
-
D.create
|
|
1508
|
+
D.create!
|
|
1428
1509
|
end
|
|
1429
1510
|
|
|
1430
1511
|
let!(:bs) do
|
|
1431
|
-
2.times.map { B.create(d: d_two) }
|
|
1512
|
+
2.times.map { B.create!(d: d_two) }
|
|
1432
1513
|
end
|
|
1433
1514
|
|
|
1434
1515
|
let!(:cs) do
|
|
1435
|
-
2.times.map { C.create(d: d_two) }
|
|
1516
|
+
2.times.map { C.create!(d: d_two) }
|
|
1436
1517
|
end
|
|
1437
1518
|
|
|
1438
1519
|
let!(:results) do
|
|
@@ -1478,7 +1559,7 @@ describe Mongoid::Criteria do
|
|
|
1478
1559
|
context "when mapping the results more than once" do
|
|
1479
1560
|
|
|
1480
1561
|
let!(:post) do
|
|
1481
|
-
person.posts.create(title: "one")
|
|
1562
|
+
person.posts.create!(title: "one")
|
|
1482
1563
|
end
|
|
1483
1564
|
|
|
1484
1565
|
let(:criteria) do
|
|
@@ -1500,15 +1581,15 @@ describe Mongoid::Criteria do
|
|
|
1500
1581
|
context "when the criteria is from the root" do
|
|
1501
1582
|
|
|
1502
1583
|
let!(:person_two) do
|
|
1503
|
-
Person.create(age: 2)
|
|
1584
|
+
Person.create!(age: 2)
|
|
1504
1585
|
end
|
|
1505
1586
|
|
|
1506
1587
|
let!(:post_one) do
|
|
1507
|
-
person.posts.create(title: "one")
|
|
1588
|
+
person.posts.create!(title: "one")
|
|
1508
1589
|
end
|
|
1509
1590
|
|
|
1510
1591
|
let!(:post_two) do
|
|
1511
|
-
person_two.posts.create(title: "two")
|
|
1592
|
+
person_two.posts.create!(title: "two")
|
|
1512
1593
|
end
|
|
1513
1594
|
|
|
1514
1595
|
context "when calling first" do
|
|
@@ -1557,15 +1638,15 @@ describe Mongoid::Criteria do
|
|
|
1557
1638
|
context "when the criteria is from an embedded relation" do
|
|
1558
1639
|
|
|
1559
1640
|
let(:peep) do
|
|
1560
|
-
Person.create
|
|
1641
|
+
Person.create!
|
|
1561
1642
|
end
|
|
1562
1643
|
|
|
1563
1644
|
let!(:address_one) do
|
|
1564
|
-
peep.addresses.create(street: "rosenthaler")
|
|
1645
|
+
peep.addresses.create!(street: "rosenthaler")
|
|
1565
1646
|
end
|
|
1566
1647
|
|
|
1567
1648
|
let!(:address_two) do
|
|
1568
|
-
peep.addresses.create(street: "weinmeister")
|
|
1649
|
+
peep.addresses.create!(street: "weinmeister")
|
|
1569
1650
|
end
|
|
1570
1651
|
|
|
1571
1652
|
let!(:depeche) do
|
|
@@ -1579,8 +1660,8 @@ describe Mongoid::Criteria do
|
|
|
1579
1660
|
before do
|
|
1580
1661
|
address_one.band = depeche
|
|
1581
1662
|
address_two.band = tool
|
|
1582
|
-
address_one.save
|
|
1583
|
-
address_two.save
|
|
1663
|
+
address_one.save!
|
|
1664
|
+
address_two.save!
|
|
1584
1665
|
end
|
|
1585
1666
|
|
|
1586
1667
|
context "when calling first" do
|
|
@@ -1677,11 +1758,11 @@ describe Mongoid::Criteria do
|
|
|
1677
1758
|
end
|
|
1678
1759
|
|
|
1679
1760
|
let!(:post_one) do
|
|
1680
|
-
person.posts.create(title: "one")
|
|
1761
|
+
person.posts.create!(title: "one")
|
|
1681
1762
|
end
|
|
1682
1763
|
|
|
1683
1764
|
let!(:post_two) do
|
|
1684
|
-
person.posts.create(title: "two")
|
|
1765
|
+
person.posts.create!(title: "two")
|
|
1685
1766
|
end
|
|
1686
1767
|
|
|
1687
1768
|
context "when the criteria has no options" do
|
|
@@ -1799,11 +1880,11 @@ describe Mongoid::Criteria do
|
|
|
1799
1880
|
context "when the criteria has limiting options" do
|
|
1800
1881
|
|
|
1801
1882
|
let!(:person_two) do
|
|
1802
|
-
Person.create
|
|
1883
|
+
Person.create!
|
|
1803
1884
|
end
|
|
1804
1885
|
|
|
1805
1886
|
let!(:post_three) do
|
|
1806
|
-
person_two.posts.create(title: "three")
|
|
1887
|
+
person_two.posts.create!(title: "three")
|
|
1807
1888
|
end
|
|
1808
1889
|
|
|
1809
1890
|
let!(:criteria) do
|
|
@@ -1835,11 +1916,11 @@ describe Mongoid::Criteria do
|
|
|
1835
1916
|
context "when including a has and belongs to many" do
|
|
1836
1917
|
|
|
1837
1918
|
let!(:preference_one) do
|
|
1838
|
-
person.preferences.create(name: "one")
|
|
1919
|
+
person.preferences.create!(name: "one")
|
|
1839
1920
|
end
|
|
1840
1921
|
|
|
1841
1922
|
let!(:preference_two) do
|
|
1842
|
-
person.preferences.create(name: "two")
|
|
1923
|
+
person.preferences.create!(name: "two")
|
|
1843
1924
|
end
|
|
1844
1925
|
|
|
1845
1926
|
context "when one of the related items is deleted" do
|
|
@@ -1943,11 +2024,11 @@ describe Mongoid::Criteria do
|
|
|
1943
2024
|
context "when including a has many" do
|
|
1944
2025
|
|
|
1945
2026
|
let!(:post_one) do
|
|
1946
|
-
person.posts.create(title: "one")
|
|
2027
|
+
person.posts.create!(title: "one")
|
|
1947
2028
|
end
|
|
1948
2029
|
|
|
1949
2030
|
let!(:post_two) do
|
|
1950
|
-
person.posts.create(title: "two")
|
|
2031
|
+
person.posts.create!(title: "two")
|
|
1951
2032
|
end
|
|
1952
2033
|
|
|
1953
2034
|
context "when the criteria has no options" do
|
|
@@ -2032,11 +2113,11 @@ describe Mongoid::Criteria do
|
|
|
2032
2113
|
context "when the criteria has limiting options" do
|
|
2033
2114
|
|
|
2034
2115
|
let!(:person_two) do
|
|
2035
|
-
Person.create
|
|
2116
|
+
Person.create!
|
|
2036
2117
|
end
|
|
2037
2118
|
|
|
2038
2119
|
let!(:post_three) do
|
|
2039
|
-
person_two.posts.create(title: "three")
|
|
2120
|
+
person_two.posts.create!(title: "three")
|
|
2040
2121
|
end
|
|
2041
2122
|
|
|
2042
2123
|
let!(:criteria) do
|
|
@@ -2097,7 +2178,7 @@ describe Mongoid::Criteria do
|
|
|
2097
2178
|
context "when the criteria has limiting options" do
|
|
2098
2179
|
|
|
2099
2180
|
let!(:person_two) do
|
|
2100
|
-
Person.create(age: 2)
|
|
2181
|
+
Person.create!(age: 2)
|
|
2101
2182
|
end
|
|
2102
2183
|
|
|
2103
2184
|
let!(:game_three) do
|
|
@@ -2129,7 +2210,7 @@ describe Mongoid::Criteria do
|
|
|
2129
2210
|
context "when including a belongs to" do
|
|
2130
2211
|
|
|
2131
2212
|
let(:person_two) do
|
|
2132
|
-
Person.create(age: 2)
|
|
2213
|
+
Person.create!(age: 2)
|
|
2133
2214
|
end
|
|
2134
2215
|
|
|
2135
2216
|
let!(:game_one) do
|
|
@@ -2190,11 +2271,11 @@ describe Mongoid::Criteria do
|
|
|
2190
2271
|
context "when including multiples in the same criteria" do
|
|
2191
2272
|
|
|
2192
2273
|
let!(:post_one) do
|
|
2193
|
-
person.posts.create(title: "one")
|
|
2274
|
+
person.posts.create!(title: "one")
|
|
2194
2275
|
end
|
|
2195
2276
|
|
|
2196
2277
|
let!(:post_two) do
|
|
2197
|
-
person.posts.create(title: "two")
|
|
2278
|
+
person.posts.create!(title: "two")
|
|
2198
2279
|
end
|
|
2199
2280
|
|
|
2200
2281
|
let!(:game_one) do
|
|
@@ -2264,11 +2345,11 @@ describe Mongoid::Criteria do
|
|
|
2264
2345
|
describe "#lt" do
|
|
2265
2346
|
|
|
2266
2347
|
let!(:match) do
|
|
2267
|
-
Band.create(member_count: 1)
|
|
2348
|
+
Band.create!(member_count: 1)
|
|
2268
2349
|
end
|
|
2269
2350
|
|
|
2270
2351
|
let!(:non_match) do
|
|
2271
|
-
Band.create(member_count: 5)
|
|
2352
|
+
Band.create!(member_count: 5)
|
|
2272
2353
|
end
|
|
2273
2354
|
|
|
2274
2355
|
let(:criteria) do
|
|
@@ -2283,11 +2364,11 @@ describe Mongoid::Criteria do
|
|
|
2283
2364
|
describe "#lte" do
|
|
2284
2365
|
|
|
2285
2366
|
let!(:match) do
|
|
2286
|
-
Band.create(member_count: 4)
|
|
2367
|
+
Band.create!(member_count: 4)
|
|
2287
2368
|
end
|
|
2288
2369
|
|
|
2289
2370
|
let!(:non_match) do
|
|
2290
|
-
Band.create(member_count: 5)
|
|
2371
|
+
Band.create!(member_count: 5)
|
|
2291
2372
|
end
|
|
2292
2373
|
|
|
2293
2374
|
let(:criteria) do
|
|
@@ -2320,11 +2401,11 @@ describe Mongoid::Criteria do
|
|
|
2320
2401
|
end
|
|
2321
2402
|
|
|
2322
2403
|
let!(:depeche_mode) do
|
|
2323
|
-
Band.create(name: "Depeche Mode", likes: 200)
|
|
2404
|
+
Band.create!(name: "Depeche Mode", likes: 200)
|
|
2324
2405
|
end
|
|
2325
2406
|
|
|
2326
2407
|
let!(:tool) do
|
|
2327
|
-
Band.create(name: "Tool", likes: 100)
|
|
2408
|
+
Band.create!(name: "Tool", likes: 100)
|
|
2328
2409
|
end
|
|
2329
2410
|
|
|
2330
2411
|
context "when no timeout options are provided" do
|
|
@@ -2347,11 +2428,11 @@ describe Mongoid::Criteria do
|
|
|
2347
2428
|
context "when provided a single field" do
|
|
2348
2429
|
|
|
2349
2430
|
let!(:depeche) do
|
|
2350
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
2431
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
2351
2432
|
end
|
|
2352
2433
|
|
|
2353
2434
|
let!(:tool) do
|
|
2354
|
-
Band.create(name: "Tool", likes: 500)
|
|
2435
|
+
Band.create!(name: "Tool", likes: 500)
|
|
2355
2436
|
end
|
|
2356
2437
|
|
|
2357
2438
|
let(:criteria) do
|
|
@@ -2391,11 +2472,11 @@ describe Mongoid::Criteria do
|
|
|
2391
2472
|
end
|
|
2392
2473
|
|
|
2393
2474
|
let!(:match) do
|
|
2394
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2475
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2395
2476
|
end
|
|
2396
2477
|
|
|
2397
2478
|
let!(:non_match) do
|
|
2398
|
-
Bar.create(location: [ 19.26, 99.70 ])
|
|
2479
|
+
Bar.create!(location: [ 19.26, 99.70 ])
|
|
2399
2480
|
end
|
|
2400
2481
|
|
|
2401
2482
|
let(:criteria) do
|
|
@@ -2548,11 +2629,11 @@ describe Mongoid::Criteria do
|
|
|
2548
2629
|
context "when provided a single field" do
|
|
2549
2630
|
|
|
2550
2631
|
let!(:depeche) do
|
|
2551
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
2632
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
2552
2633
|
end
|
|
2553
2634
|
|
|
2554
2635
|
let!(:tool) do
|
|
2555
|
-
Band.create(name: "Tool", likes: 500)
|
|
2636
|
+
Band.create!(name: "Tool", likes: 500)
|
|
2556
2637
|
end
|
|
2557
2638
|
|
|
2558
2639
|
let(:criteria) do
|
|
@@ -2588,11 +2669,11 @@ describe Mongoid::Criteria do
|
|
|
2588
2669
|
describe "#mod" do
|
|
2589
2670
|
|
|
2590
2671
|
let!(:match) do
|
|
2591
|
-
Band.create(member_count: 5)
|
|
2672
|
+
Band.create!(member_count: 5)
|
|
2592
2673
|
end
|
|
2593
2674
|
|
|
2594
2675
|
let!(:non_match) do
|
|
2595
|
-
Band.create(member_count: 2)
|
|
2676
|
+
Band.create!(member_count: 2)
|
|
2596
2677
|
end
|
|
2597
2678
|
|
|
2598
2679
|
let(:criteria) do
|
|
@@ -2607,11 +2688,11 @@ describe Mongoid::Criteria do
|
|
|
2607
2688
|
describe "#ne" do
|
|
2608
2689
|
|
|
2609
2690
|
let!(:match) do
|
|
2610
|
-
Band.create(name: "Depeche Mode")
|
|
2691
|
+
Band.create!(name: "Depeche Mode")
|
|
2611
2692
|
end
|
|
2612
2693
|
|
|
2613
2694
|
let!(:non_match) do
|
|
2614
|
-
Band.create(name: "Tool")
|
|
2695
|
+
Band.create!(name: "Tool")
|
|
2615
2696
|
end
|
|
2616
2697
|
|
|
2617
2698
|
let(:criteria) do
|
|
@@ -2630,7 +2711,7 @@ describe Mongoid::Criteria do
|
|
|
2630
2711
|
end
|
|
2631
2712
|
|
|
2632
2713
|
let!(:match) do
|
|
2633
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2714
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2634
2715
|
end
|
|
2635
2716
|
|
|
2636
2717
|
let(:criteria) do
|
|
@@ -2649,7 +2730,7 @@ describe Mongoid::Criteria do
|
|
|
2649
2730
|
end
|
|
2650
2731
|
|
|
2651
2732
|
let!(:match) do
|
|
2652
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
2733
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
2653
2734
|
end
|
|
2654
2735
|
|
|
2655
2736
|
let(:criteria) do
|
|
@@ -2664,11 +2745,11 @@ describe Mongoid::Criteria do
|
|
|
2664
2745
|
describe "#nin" do
|
|
2665
2746
|
|
|
2666
2747
|
let!(:match) do
|
|
2667
|
-
Band.create(name: "Depeche Mode")
|
|
2748
|
+
Band.create!(name: "Depeche Mode")
|
|
2668
2749
|
end
|
|
2669
2750
|
|
|
2670
2751
|
let!(:non_match) do
|
|
2671
|
-
Band.create(name: "Tool")
|
|
2752
|
+
Band.create!(name: "Tool")
|
|
2672
2753
|
end
|
|
2673
2754
|
|
|
2674
2755
|
let(:criteria) do
|
|
@@ -2683,11 +2764,11 @@ describe Mongoid::Criteria do
|
|
|
2683
2764
|
describe "#nor" do
|
|
2684
2765
|
|
|
2685
2766
|
let!(:match) do
|
|
2686
|
-
Band.create(name: "Depeche Mode")
|
|
2767
|
+
Band.create!(name: "Depeche Mode")
|
|
2687
2768
|
end
|
|
2688
2769
|
|
|
2689
2770
|
let!(:non_match) do
|
|
2690
|
-
Band.create(name: "Tool")
|
|
2771
|
+
Band.create!(name: "Tool")
|
|
2691
2772
|
end
|
|
2692
2773
|
|
|
2693
2774
|
let(:criteria) do
|
|
@@ -2699,230 +2780,16 @@ describe Mongoid::Criteria do
|
|
|
2699
2780
|
end
|
|
2700
2781
|
end
|
|
2701
2782
|
|
|
2702
|
-
describe "#only" do
|
|
2703
|
-
|
|
2704
|
-
let!(:band) do
|
|
2705
|
-
Band.create(name: "Depeche Mode", likes: 3, views: 10)
|
|
2706
|
-
end
|
|
2707
|
-
|
|
2708
|
-
context "when not using inheritance" do
|
|
2709
|
-
|
|
2710
|
-
context "when passing splat args" do
|
|
2711
|
-
|
|
2712
|
-
let(:criteria) do
|
|
2713
|
-
Band.only(:_id)
|
|
2714
|
-
end
|
|
2715
|
-
|
|
2716
|
-
it "limits the returned fields" do
|
|
2717
|
-
expect {
|
|
2718
|
-
criteria.first.name
|
|
2719
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
2720
|
-
end
|
|
2721
|
-
|
|
2722
|
-
it "does not add _type to the fields" do
|
|
2723
|
-
expect(criteria.options[:fields]["_type"]).to be_nil
|
|
2724
|
-
end
|
|
2725
|
-
end
|
|
2726
|
-
|
|
2727
|
-
context "when not including id" do
|
|
2728
|
-
|
|
2729
|
-
let(:criteria) do
|
|
2730
|
-
Band.only(:name)
|
|
2731
|
-
end
|
|
2732
|
-
|
|
2733
|
-
it "responds to id anyway" do
|
|
2734
|
-
expect {
|
|
2735
|
-
criteria.first.id
|
|
2736
|
-
}.to_not raise_error
|
|
2737
|
-
end
|
|
2738
|
-
end
|
|
2739
|
-
|
|
2740
|
-
context "when passing an array" do
|
|
2741
|
-
|
|
2742
|
-
let(:criteria) do
|
|
2743
|
-
Band.only([ :name, :likes ])
|
|
2744
|
-
end
|
|
2745
|
-
|
|
2746
|
-
it "includes the limited fields" do
|
|
2747
|
-
expect(criteria.first.name).to_not be_nil
|
|
2748
|
-
end
|
|
2749
|
-
|
|
2750
|
-
it "excludes the non included fields" do
|
|
2751
|
-
expect {
|
|
2752
|
-
criteria.first.active
|
|
2753
|
-
}.to raise_error(ActiveModel::MissingAttributeError)
|
|
2754
|
-
end
|
|
2755
|
-
|
|
2756
|
-
it "does not add _type to the fields" do
|
|
2757
|
-
expect(criteria.options[:fields]["_type"]).to be_nil
|
|
2758
|
-
end
|
|
2759
|
-
end
|
|
2760
|
-
|
|
2761
|
-
context "when instantiating a class of another type inside the iteration" do
|
|
2762
|
-
|
|
2763
|
-
let(:criteria) do
|
|
2764
|
-
Band.only(:name)
|
|
2765
|
-
end
|
|
2766
|
-
|
|
2767
|
-
it "only limits the fields on the correct model" do
|
|
2768
|
-
criteria.each do |band|
|
|
2769
|
-
expect(Person.new.age).to eq(100)
|
|
2770
|
-
end
|
|
2771
|
-
end
|
|
2772
|
-
end
|
|
2773
|
-
|
|
2774
|
-
context "when instantiating a document not in the result set" do
|
|
2775
|
-
|
|
2776
|
-
let(:criteria) do
|
|
2777
|
-
Band.only(:name)
|
|
2778
|
-
end
|
|
2779
|
-
|
|
2780
|
-
it "only limits the fields on the correct criteria" do
|
|
2781
|
-
criteria.each do |band|
|
|
2782
|
-
expect(Band.new.active).to be true
|
|
2783
|
-
end
|
|
2784
|
-
end
|
|
2785
|
-
end
|
|
2786
|
-
|
|
2787
|
-
context "when nesting a criteria within a criteria" do
|
|
2788
|
-
|
|
2789
|
-
let(:criteria) do
|
|
2790
|
-
Band.only(:name)
|
|
2791
|
-
end
|
|
2792
|
-
|
|
2793
|
-
it "only limits the fields on the correct criteria" do
|
|
2794
|
-
criteria.each do |band|
|
|
2795
|
-
Band.all.each do |b|
|
|
2796
|
-
expect(b.active).to be true
|
|
2797
|
-
end
|
|
2798
|
-
end
|
|
2799
|
-
end
|
|
2800
|
-
end
|
|
2801
|
-
end
|
|
2802
|
-
|
|
2803
|
-
context "when using inheritance" do
|
|
2804
|
-
|
|
2805
|
-
let(:criteria) do
|
|
2806
|
-
Doctor.only(:_id)
|
|
2807
|
-
end
|
|
2808
|
-
|
|
2809
|
-
it "adds _type to the fields" do
|
|
2810
|
-
expect(criteria.options[:fields]["_type"]).to eq(1)
|
|
2811
|
-
end
|
|
2812
|
-
end
|
|
2813
|
-
|
|
2814
|
-
context "when limiting to embedded documents" do
|
|
2815
|
-
|
|
2816
|
-
context "when the embedded documents are aliased" do
|
|
2817
|
-
|
|
2818
|
-
let(:criteria) do
|
|
2819
|
-
Person.only(:phones)
|
|
2820
|
-
end
|
|
2821
|
-
|
|
2822
|
-
it "properly uses the database field name" do
|
|
2823
|
-
expect(criteria.options).to eq(fields: { "_id" => 1, "mobile_phones" => 1 })
|
|
2824
|
-
end
|
|
2825
|
-
end
|
|
2826
|
-
end
|
|
2827
|
-
|
|
2828
|
-
context 'when the field is localized' do
|
|
2829
|
-
|
|
2830
|
-
before do
|
|
2831
|
-
I18n.locale = :en
|
|
2832
|
-
d = Dictionary.create(description: 'english-text')
|
|
2833
|
-
I18n.locale = :de
|
|
2834
|
-
d.description = 'deutsch-text'
|
|
2835
|
-
d.save
|
|
2836
|
-
end
|
|
2837
|
-
|
|
2838
|
-
after do
|
|
2839
|
-
I18n.locale = :en
|
|
2840
|
-
end
|
|
2841
|
-
|
|
2842
|
-
context 'when entire field is included' do
|
|
2843
|
-
|
|
2844
|
-
let(:dictionary) do
|
|
2845
|
-
Dictionary.only(:description).first
|
|
2846
|
-
|
|
2847
|
-
end
|
|
2848
|
-
|
|
2849
|
-
it 'loads all translations' do
|
|
2850
|
-
expect(dictionary.description_translations.keys).to include('de', 'en')
|
|
2851
|
-
end
|
|
2852
|
-
|
|
2853
|
-
it 'returns the field value for the current locale' do
|
|
2854
|
-
I18n.locale = :en
|
|
2855
|
-
expect(dictionary.description).to eq('english-text')
|
|
2856
|
-
I18n.locale = :de
|
|
2857
|
-
expect(dictionary.description).to eq('deutsch-text')
|
|
2858
|
-
end
|
|
2859
|
-
end
|
|
2860
|
-
|
|
2861
|
-
context 'when a specific locale is included' do
|
|
2862
|
-
|
|
2863
|
-
let(:dictionary) do
|
|
2864
|
-
Dictionary.only(:'description.de').first
|
|
2865
|
-
end
|
|
2866
|
-
|
|
2867
|
-
it 'loads translations only for the included locale' do
|
|
2868
|
-
expect(dictionary.description_translations.keys).to include('de')
|
|
2869
|
-
expect(dictionary.description_translations.keys).to_not include('en')
|
|
2870
|
-
end
|
|
2871
|
-
|
|
2872
|
-
it 'returns the field value for the included locale' do
|
|
2873
|
-
I18n.locale = :en
|
|
2874
|
-
expect(dictionary.description).to be_nil
|
|
2875
|
-
I18n.locale = :de
|
|
2876
|
-
expect(dictionary.description).to eq('deutsch-text')
|
|
2877
|
-
end
|
|
2878
|
-
end
|
|
2879
|
-
|
|
2880
|
-
context 'when entire field is excluded' do
|
|
2881
|
-
|
|
2882
|
-
let(:dictionary) do
|
|
2883
|
-
Dictionary.without(:description).first
|
|
2884
|
-
end
|
|
2885
|
-
|
|
2886
|
-
it 'does not load all translations' do
|
|
2887
|
-
expect(dictionary.description_translations.keys).to_not include('de', 'en')
|
|
2888
|
-
end
|
|
2889
|
-
|
|
2890
|
-
it 'raises an ActiveModel::MissingAttributeError when attempting to access the field' do
|
|
2891
|
-
expect{dictionary.description}.to raise_error ActiveModel::MissingAttributeError
|
|
2892
|
-
end
|
|
2893
|
-
end
|
|
2894
|
-
|
|
2895
|
-
context 'when a specific locale is excluded' do
|
|
2896
|
-
|
|
2897
|
-
let(:dictionary) do
|
|
2898
|
-
Dictionary.without(:'description.de').first
|
|
2899
|
-
end
|
|
2900
|
-
|
|
2901
|
-
it 'does not load excluded translations' do
|
|
2902
|
-
expect(dictionary.description_translations.keys).to_not include('de')
|
|
2903
|
-
expect(dictionary.description_translations.keys).to include('en')
|
|
2904
|
-
end
|
|
2905
|
-
|
|
2906
|
-
it 'returns nil for excluded translations' do
|
|
2907
|
-
I18n.locale = :en
|
|
2908
|
-
expect(dictionary.description).to eq('english-text')
|
|
2909
|
-
I18n.locale = :de
|
|
2910
|
-
expect(dictionary.description).to be_nil
|
|
2911
|
-
end
|
|
2912
|
-
end
|
|
2913
|
-
end
|
|
2914
|
-
end
|
|
2915
|
-
|
|
2916
2783
|
[ :or, :any_of ].each do |method|
|
|
2917
2784
|
|
|
2918
2785
|
describe "\##{method}" do
|
|
2919
2786
|
|
|
2920
2787
|
let!(:match) do
|
|
2921
|
-
Band.create(name: "Depeche Mode")
|
|
2788
|
+
Band.create!(name: "Depeche Mode")
|
|
2922
2789
|
end
|
|
2923
2790
|
|
|
2924
2791
|
let!(:non_match) do
|
|
2925
|
-
Band.create(name: "Tool")
|
|
2792
|
+
Band.create!(name: "Tool")
|
|
2926
2793
|
end
|
|
2927
2794
|
|
|
2928
2795
|
context "when sending a normal $or criterion" do
|
|
@@ -2952,25 +2819,29 @@ describe Mongoid::Criteria do
|
|
|
2952
2819
|
describe "#pluck" do
|
|
2953
2820
|
|
|
2954
2821
|
let!(:depeche) do
|
|
2955
|
-
Band.create(name: "Depeche Mode", likes: 3)
|
|
2822
|
+
Band.create!(name: "Depeche Mode", likes: 3)
|
|
2956
2823
|
end
|
|
2957
2824
|
|
|
2958
2825
|
let!(:tool) do
|
|
2959
|
-
Band.create(name: "Tool", likes: 3)
|
|
2826
|
+
Band.create!(name: "Tool", likes: 3)
|
|
2960
2827
|
end
|
|
2961
2828
|
|
|
2962
2829
|
let!(:photek) do
|
|
2963
|
-
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")
|
|
2964
2835
|
end
|
|
2965
2836
|
|
|
2966
2837
|
context "when the field is aliased" do
|
|
2967
2838
|
|
|
2968
2839
|
let!(:expensive) do
|
|
2969
|
-
Product.create(price: 100000)
|
|
2840
|
+
Product.create!(price: 100000)
|
|
2970
2841
|
end
|
|
2971
2842
|
|
|
2972
2843
|
let!(:cheap) do
|
|
2973
|
-
Product.create(price: 1)
|
|
2844
|
+
Product.create!(price: 1)
|
|
2974
2845
|
end
|
|
2975
2846
|
|
|
2976
2847
|
context "when using alias_attribute" do
|
|
@@ -2979,8 +2850,10 @@ describe Mongoid::Criteria do
|
|
|
2979
2850
|
Product.pluck(:price)
|
|
2980
2851
|
end
|
|
2981
2852
|
|
|
2982
|
-
|
|
2983
|
-
|
|
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
|
|
2984
2857
|
end
|
|
2985
2858
|
end
|
|
2986
2859
|
end
|
|
@@ -2997,14 +2870,18 @@ describe Mongoid::Criteria do
|
|
|
2997
2870
|
criteria.pluck(:name)
|
|
2998
2871
|
end
|
|
2999
2872
|
|
|
3000
|
-
|
|
3001
|
-
|
|
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
|
|
3002
2877
|
end
|
|
3003
2878
|
|
|
3004
2879
|
context "when subsequently executing the criteria without a pluck" do
|
|
3005
2880
|
|
|
3006
|
-
|
|
3007
|
-
|
|
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
|
|
3008
2885
|
end
|
|
3009
2886
|
end
|
|
3010
2887
|
|
|
@@ -3015,51 +2892,83 @@ describe Mongoid::Criteria do
|
|
|
3015
2892
|
end
|
|
3016
2893
|
|
|
3017
2894
|
context 'when a top-level field and a subdocument field are plucked' do
|
|
3018
|
-
|
|
3019
2895
|
before do
|
|
3020
|
-
Band.create(name: 'FKA Twigs')
|
|
3021
|
-
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') ])
|
|
3022
2898
|
end
|
|
3023
2899
|
|
|
3024
2900
|
let(:embedded_pluck) do
|
|
3025
2901
|
criteria.pluck(:name, 'records.name')
|
|
3026
2902
|
end
|
|
3027
2903
|
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
[
|
|
3032
|
-
|
|
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
|
|
3033
2916
|
end
|
|
3034
2917
|
|
|
3035
|
-
|
|
3036
|
-
|
|
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
|
|
3037
2930
|
end
|
|
3038
2931
|
end
|
|
3039
2932
|
|
|
3040
2933
|
context 'when only a subdocument field is plucked' do
|
|
3041
2934
|
|
|
3042
2935
|
before do
|
|
3043
|
-
Band.create(name: 'FKA Twigs')
|
|
3044
|
-
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') ])
|
|
3045
2938
|
end
|
|
3046
2939
|
|
|
3047
2940
|
let(:embedded_pluck) do
|
|
3048
2941
|
criteria.pluck('records.name')
|
|
3049
2942
|
end
|
|
3050
2943
|
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
[
|
|
3055
|
-
|
|
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
|
|
3056
2956
|
end
|
|
3057
2957
|
|
|
3058
|
-
|
|
3059
|
-
|
|
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
|
|
3060
2970
|
end
|
|
3061
2971
|
end
|
|
3062
|
-
|
|
3063
2972
|
end
|
|
3064
2973
|
end
|
|
3065
2974
|
|
|
@@ -3069,8 +2978,10 @@ describe Mongoid::Criteria do
|
|
|
3069
2978
|
Band.where(:name.exists => true).pluck(:name, :likes)
|
|
3070
2979
|
end
|
|
3071
2980
|
|
|
3072
|
-
|
|
3073
|
-
|
|
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
|
|
3074
2985
|
end
|
|
3075
2986
|
end
|
|
3076
2987
|
|
|
@@ -3080,8 +2991,10 @@ describe Mongoid::Criteria do
|
|
|
3080
2991
|
Band.where(:name.exists => true).pluck(:likes)
|
|
3081
2992
|
end
|
|
3082
2993
|
|
|
3083
|
-
|
|
3084
|
-
|
|
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
|
|
3085
2998
|
end
|
|
3086
2999
|
end
|
|
3087
3000
|
end
|
|
@@ -3092,8 +3005,10 @@ describe Mongoid::Criteria do
|
|
|
3092
3005
|
Band.where(name: "New Order").pluck(:_id)
|
|
3093
3006
|
end
|
|
3094
3007
|
|
|
3095
|
-
|
|
3096
|
-
|
|
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
|
|
3097
3012
|
end
|
|
3098
3013
|
end
|
|
3099
3014
|
|
|
@@ -3103,8 +3018,10 @@ describe Mongoid::Criteria do
|
|
|
3103
3018
|
Band.all.pluck(:id)
|
|
3104
3019
|
end
|
|
3105
3020
|
|
|
3106
|
-
|
|
3107
|
-
|
|
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
|
|
3108
3025
|
end
|
|
3109
3026
|
end
|
|
3110
3027
|
|
|
@@ -3114,8 +3031,10 @@ describe Mongoid::Criteria do
|
|
|
3114
3031
|
Band.all.pluck(:id, :fooz)
|
|
3115
3032
|
end
|
|
3116
3033
|
|
|
3117
|
-
|
|
3118
|
-
|
|
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
|
|
3119
3038
|
end
|
|
3120
3039
|
end
|
|
3121
3040
|
|
|
@@ -3127,8 +3046,10 @@ describe Mongoid::Criteria do
|
|
|
3127
3046
|
Band.all.pluck(:foo)
|
|
3128
3047
|
end
|
|
3129
3048
|
|
|
3130
|
-
|
|
3131
|
-
|
|
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
|
|
3132
3053
|
end
|
|
3133
3054
|
end
|
|
3134
3055
|
|
|
@@ -3138,8 +3059,10 @@ describe Mongoid::Criteria do
|
|
|
3138
3059
|
Band.all.pluck(:foo, :bar)
|
|
3139
3060
|
end
|
|
3140
3061
|
|
|
3141
|
-
|
|
3142
|
-
|
|
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
|
|
3143
3066
|
end
|
|
3144
3067
|
end
|
|
3145
3068
|
end
|
|
@@ -3148,10 +3071,10 @@ describe Mongoid::Criteria do
|
|
|
3148
3071
|
|
|
3149
3072
|
before do
|
|
3150
3073
|
I18n.locale = :en
|
|
3151
|
-
d = Dictionary.create(description: 'english-text')
|
|
3074
|
+
d = Dictionary.create!(description: 'english-text')
|
|
3152
3075
|
I18n.locale = :de
|
|
3153
3076
|
d.description = 'deutsch-text'
|
|
3154
|
-
d.save
|
|
3077
|
+
d.save!
|
|
3155
3078
|
end
|
|
3156
3079
|
|
|
3157
3080
|
after do
|
|
@@ -3159,13 +3082,48 @@ describe Mongoid::Criteria do
|
|
|
3159
3082
|
end
|
|
3160
3083
|
|
|
3161
3084
|
context 'when plucking the entire field' do
|
|
3162
|
-
|
|
3163
3085
|
let(:plucked) do
|
|
3164
3086
|
Dictionary.all.pluck(:description)
|
|
3165
3087
|
end
|
|
3166
3088
|
|
|
3167
|
-
|
|
3168
|
-
|
|
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
|
|
3169
3127
|
end
|
|
3170
3128
|
end
|
|
3171
3129
|
|
|
@@ -3175,8 +3133,227 @@ describe Mongoid::Criteria do
|
|
|
3175
3133
|
Dictionary.all.pluck(:'description.de')
|
|
3176
3134
|
end
|
|
3177
3135
|
|
|
3178
|
-
|
|
3179
|
-
|
|
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)
|
|
3180
3357
|
end
|
|
3181
3358
|
end
|
|
3182
3359
|
end
|
|
@@ -3263,11 +3440,11 @@ describe Mongoid::Criteria do
|
|
|
3263
3440
|
describe "#sort" do
|
|
3264
3441
|
|
|
3265
3442
|
let!(:depeche) do
|
|
3266
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
3443
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
3267
3444
|
end
|
|
3268
3445
|
|
|
3269
3446
|
let!(:tool) do
|
|
3270
|
-
Band.create(name: "Tool", likes: 500)
|
|
3447
|
+
Band.create!(name: "Tool", likes: 500)
|
|
3271
3448
|
end
|
|
3272
3449
|
|
|
3273
3450
|
let(:sorted) do
|
|
@@ -3286,11 +3463,11 @@ describe Mongoid::Criteria do
|
|
|
3286
3463
|
context "when provided a single field" do
|
|
3287
3464
|
|
|
3288
3465
|
let!(:depeche) do
|
|
3289
|
-
Band.create(name: "Depeche Mode", likes: 1000)
|
|
3466
|
+
Band.create!(name: "Depeche Mode", likes: 1000)
|
|
3290
3467
|
end
|
|
3291
3468
|
|
|
3292
3469
|
let!(:tool) do
|
|
3293
|
-
Band.create(name: "Tool", likes: 500)
|
|
3470
|
+
Band.create!(name: "Tool", likes: 500)
|
|
3294
3471
|
end
|
|
3295
3472
|
|
|
3296
3473
|
let(:criteria) do
|
|
@@ -3324,7 +3501,7 @@ describe Mongoid::Criteria do
|
|
|
3324
3501
|
describe "#to_ary" do
|
|
3325
3502
|
|
|
3326
3503
|
let!(:band) do
|
|
3327
|
-
Band.create(name: "Depeche Mode")
|
|
3504
|
+
Band.create!(name: "Depeche Mode")
|
|
3328
3505
|
end
|
|
3329
3506
|
|
|
3330
3507
|
let(:criteria) do
|
|
@@ -3340,11 +3517,11 @@ describe Mongoid::Criteria do
|
|
|
3340
3517
|
max_server_version '4.0'
|
|
3341
3518
|
|
|
3342
3519
|
let!(:band) do
|
|
3343
|
-
Band.create(name: "Depeche Mode")
|
|
3520
|
+
Band.create!(name: "Depeche Mode")
|
|
3344
3521
|
end
|
|
3345
3522
|
|
|
3346
3523
|
let!(:band2) do
|
|
3347
|
-
Band.create(name: "Tool")
|
|
3524
|
+
Band.create!(name: "Tool")
|
|
3348
3525
|
end
|
|
3349
3526
|
|
|
3350
3527
|
let(:criteria) do
|
|
@@ -3383,34 +3560,75 @@ describe Mongoid::Criteria do
|
|
|
3383
3560
|
end
|
|
3384
3561
|
|
|
3385
3562
|
describe "#type" do
|
|
3563
|
+
context "when using the default discriminator_key" do
|
|
3564
|
+
context "when the type is a string" do
|
|
3386
3565
|
|
|
3387
|
-
|
|
3566
|
+
let!(:browser) do
|
|
3567
|
+
Browser.create!
|
|
3568
|
+
end
|
|
3388
3569
|
|
|
3389
|
-
|
|
3390
|
-
|
|
3391
|
-
|
|
3570
|
+
let(:criteria) do
|
|
3571
|
+
Canvas.all.type("Browser")
|
|
3572
|
+
end
|
|
3392
3573
|
|
|
3393
|
-
|
|
3394
|
-
|
|
3574
|
+
it "returns documents with the provided type" do
|
|
3575
|
+
expect(criteria).to eq([ browser ])
|
|
3576
|
+
end
|
|
3395
3577
|
end
|
|
3396
3578
|
|
|
3397
|
-
|
|
3398
|
-
|
|
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
|
|
3399
3592
|
end
|
|
3400
3593
|
end
|
|
3401
3594
|
|
|
3402
|
-
context "when
|
|
3595
|
+
context "when using a custom discriminator_key" do
|
|
3596
|
+
before do
|
|
3597
|
+
Canvas.discriminator_key = "dkey"
|
|
3598
|
+
end
|
|
3403
3599
|
|
|
3404
|
-
|
|
3405
|
-
|
|
3600
|
+
after do
|
|
3601
|
+
Canvas.discriminator_key = nil
|
|
3406
3602
|
end
|
|
3407
3603
|
|
|
3408
|
-
|
|
3409
|
-
|
|
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
|
|
3410
3617
|
end
|
|
3411
3618
|
|
|
3412
|
-
|
|
3413
|
-
|
|
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
|
|
3414
3632
|
end
|
|
3415
3633
|
end
|
|
3416
3634
|
end
|
|
@@ -3418,11 +3636,43 @@ describe Mongoid::Criteria do
|
|
|
3418
3636
|
describe "#where" do
|
|
3419
3637
|
|
|
3420
3638
|
let!(:match) do
|
|
3421
|
-
Band.create(name: "Depeche Mode")
|
|
3639
|
+
Band.create!(name: "Depeche Mode")
|
|
3422
3640
|
end
|
|
3423
3641
|
|
|
3424
3642
|
let!(:non_match) do
|
|
3425
|
-
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
|
|
3426
3676
|
end
|
|
3427
3677
|
|
|
3428
3678
|
context "when provided a string" do
|
|
@@ -3487,7 +3737,7 @@ describe Mongoid::Criteria do
|
|
|
3487
3737
|
end
|
|
3488
3738
|
|
|
3489
3739
|
let!(:band) do
|
|
3490
|
-
Band.create(name: "Boards of Canada", sales: sales)
|
|
3740
|
+
Band.create!(name: "Boards of Canada", sales: sales)
|
|
3491
3741
|
end
|
|
3492
3742
|
|
|
3493
3743
|
let(:from_db) do
|
|
@@ -3507,7 +3757,7 @@ describe Mongoid::Criteria do
|
|
|
3507
3757
|
end
|
|
3508
3758
|
|
|
3509
3759
|
let!(:band) do
|
|
3510
|
-
Band.create(name: "Boards of Canada", decimal: decimal)
|
|
3760
|
+
Band.create!(name: "Boards of Canada", decimal: decimal)
|
|
3511
3761
|
end
|
|
3512
3762
|
|
|
3513
3763
|
let(:from_db) do
|
|
@@ -3522,7 +3772,7 @@ describe Mongoid::Criteria do
|
|
|
3522
3772
|
context 'when querying on a polymorphic relation' do
|
|
3523
3773
|
|
|
3524
3774
|
let(:movie) do
|
|
3525
|
-
Movie.create
|
|
3775
|
+
Movie.create!
|
|
3526
3776
|
end
|
|
3527
3777
|
|
|
3528
3778
|
let(:selector) do
|
|
@@ -3534,12 +3784,78 @@ describe Mongoid::Criteria do
|
|
|
3534
3784
|
end
|
|
3535
3785
|
end
|
|
3536
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
|
|
3537
3853
|
end
|
|
3538
3854
|
|
|
3539
3855
|
describe "#for_js" do
|
|
3540
3856
|
|
|
3541
3857
|
let!(:match) do
|
|
3542
|
-
Band.create(name: "Depeche Mode")
|
|
3858
|
+
Band.create!(name: "Depeche Mode")
|
|
3543
3859
|
end
|
|
3544
3860
|
|
|
3545
3861
|
context "when the code has no scope" do
|
|
@@ -3576,10 +3892,14 @@ describe Mongoid::Criteria do
|
|
|
3576
3892
|
|
|
3577
3893
|
before do
|
|
3578
3894
|
expect(Person).to receive(:minor).and_call_original
|
|
3895
|
+
expect(Person).to receive(:older_than).and_call_original
|
|
3579
3896
|
end
|
|
3580
3897
|
|
|
3581
3898
|
it "calls the method on the class" do
|
|
3582
3899
|
expect(criteria.minor).to be_empty
|
|
3900
|
+
expect do
|
|
3901
|
+
criteria.older_than(age: 25)
|
|
3902
|
+
end.not_to raise_error
|
|
3583
3903
|
end
|
|
3584
3904
|
end
|
|
3585
3905
|
|
|
@@ -3622,11 +3942,11 @@ describe Mongoid::Criteria do
|
|
|
3622
3942
|
describe "#uniq" do
|
|
3623
3943
|
|
|
3624
3944
|
let!(:band_one) do
|
|
3625
|
-
Band.create(name: "New Order")
|
|
3945
|
+
Band.create!(name: "New Order")
|
|
3626
3946
|
end
|
|
3627
3947
|
|
|
3628
3948
|
let!(:band_two) do
|
|
3629
|
-
Band.create(name: "New Order")
|
|
3949
|
+
Band.create!(name: "New Order")
|
|
3630
3950
|
end
|
|
3631
3951
|
|
|
3632
3952
|
let(:criteria) do
|
|
@@ -3666,7 +3986,7 @@ describe Mongoid::Criteria do
|
|
|
3666
3986
|
end
|
|
3667
3987
|
end
|
|
3668
3988
|
|
|
3669
|
-
describe "#
|
|
3989
|
+
describe "#geo_spatial" do
|
|
3670
3990
|
|
|
3671
3991
|
context "when checking within a polygon" do
|
|
3672
3992
|
|
|
@@ -3675,11 +3995,11 @@ describe Mongoid::Criteria do
|
|
|
3675
3995
|
end
|
|
3676
3996
|
|
|
3677
3997
|
let!(:match) do
|
|
3678
|
-
Bar.create(location: [ 52.30, 13.25 ])
|
|
3998
|
+
Bar.create!(location: [ 52.30, 13.25 ])
|
|
3679
3999
|
end
|
|
3680
4000
|
|
|
3681
4001
|
let(:criteria) do
|
|
3682
|
-
Bar.
|
|
4002
|
+
Bar.geo_spatial(
|
|
3683
4003
|
:location.within_polygon => [[[ 50, 10 ], [ 50, 20 ], [ 60, 20 ], [ 60, 10 ], [ 50, 10 ]]]
|
|
3684
4004
|
)
|
|
3685
4005
|
end
|
|
@@ -3693,11 +4013,11 @@ describe Mongoid::Criteria do
|
|
|
3693
4013
|
describe "#with_size" do
|
|
3694
4014
|
|
|
3695
4015
|
let!(:match) do
|
|
3696
|
-
Band.create(genres: [ "electro", "dub" ])
|
|
4016
|
+
Band.create!(genres: [ "electro", "dub" ])
|
|
3697
4017
|
end
|
|
3698
4018
|
|
|
3699
4019
|
let!(:non_match) do
|
|
3700
|
-
Band.create(genres: [ "house" ])
|
|
4020
|
+
Band.create!(genres: [ "house" ])
|
|
3701
4021
|
end
|
|
3702
4022
|
|
|
3703
4023
|
let(:criteria) do
|
|
@@ -3712,7 +4032,7 @@ describe Mongoid::Criteria do
|
|
|
3712
4032
|
describe "#with_type" do
|
|
3713
4033
|
|
|
3714
4034
|
let!(:match) do
|
|
3715
|
-
Band.create(name: "Depeche Mode")
|
|
4035
|
+
Band.create!(name: "Depeche Mode")
|
|
3716
4036
|
end
|
|
3717
4037
|
|
|
3718
4038
|
let(:criteria) do
|
|
@@ -3724,73 +4044,76 @@ describe Mongoid::Criteria do
|
|
|
3724
4044
|
end
|
|
3725
4045
|
end
|
|
3726
4046
|
|
|
3727
|
-
describe "#
|
|
4047
|
+
describe "#type_selection" do
|
|
4048
|
+
context "when using the default discriminator_key" do
|
|
4049
|
+
context "when only one subclass exists" do
|
|
3728
4050
|
|
|
3729
|
-
|
|
3730
|
-
|
|
3731
|
-
|
|
4051
|
+
let(:criteria) do
|
|
4052
|
+
described_class.new(Firefox)
|
|
4053
|
+
end
|
|
3732
4054
|
|
|
3733
|
-
|
|
4055
|
+
let(:selection) do
|
|
4056
|
+
criteria.send(:type_selection)
|
|
4057
|
+
end
|
|
3734
4058
|
|
|
3735
|
-
|
|
4059
|
+
it "does not use an $in query" do
|
|
4060
|
+
expect(selection).to eq({ _type: "Firefox" })
|
|
4061
|
+
end
|
|
4062
|
+
end
|
|
4063
|
+
|
|
4064
|
+
context "when more than one subclass exists" do
|
|
3736
4065
|
|
|
3737
4066
|
let(:criteria) do
|
|
3738
|
-
|
|
4067
|
+
described_class.new(Browser)
|
|
3739
4068
|
end
|
|
3740
4069
|
|
|
3741
|
-
|
|
3742
|
-
|
|
4070
|
+
let(:selection) do
|
|
4071
|
+
criteria.send(:type_selection)
|
|
3743
4072
|
end
|
|
3744
|
-
end
|
|
3745
|
-
end
|
|
3746
|
-
|
|
3747
|
-
context "when excluding id" do
|
|
3748
4073
|
|
|
3749
|
-
|
|
3750
|
-
|
|
4074
|
+
it "does not use an $in query" do
|
|
4075
|
+
expect(selection).to eq({ _type: { "$in" => [ "Firefox", "Browser" ]}})
|
|
4076
|
+
end
|
|
3751
4077
|
end
|
|
4078
|
+
end
|
|
3752
4079
|
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
}.to_not raise_error
|
|
4080
|
+
context "when using a custom discriminator_key" do
|
|
4081
|
+
before do
|
|
4082
|
+
Canvas.discriminator_key = "dkey"
|
|
3757
4083
|
end
|
|
3758
4084
|
|
|
3759
|
-
|
|
3760
|
-
|
|
4085
|
+
after do
|
|
4086
|
+
Canvas.discriminator_key = nil
|
|
3761
4087
|
end
|
|
3762
|
-
end
|
|
3763
|
-
end
|
|
3764
4088
|
|
|
3765
|
-
|
|
4089
|
+
context "when only one subclass exists" do
|
|
3766
4090
|
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
described_class.new(Firefox)
|
|
3771
|
-
end
|
|
4091
|
+
let(:criteria) do
|
|
4092
|
+
described_class.new(Firefox)
|
|
4093
|
+
end
|
|
3772
4094
|
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
|
|
4095
|
+
let(:selection) do
|
|
4096
|
+
criteria.send(:type_selection)
|
|
4097
|
+
end
|
|
3776
4098
|
|
|
3777
|
-
|
|
3778
|
-
|
|
4099
|
+
it "does not use an $in query" do
|
|
4100
|
+
expect(selection).to eq({ dkey: "Firefox" })
|
|
4101
|
+
end
|
|
3779
4102
|
end
|
|
3780
|
-
end
|
|
3781
4103
|
|
|
3782
|
-
|
|
4104
|
+
context "when more than one subclass exists" do
|
|
3783
4105
|
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
4106
|
+
let(:criteria) do
|
|
4107
|
+
described_class.new(Browser)
|
|
4108
|
+
end
|
|
3787
4109
|
|
|
3788
|
-
|
|
3789
|
-
|
|
3790
|
-
|
|
4110
|
+
let(:selection) do
|
|
4111
|
+
criteria.send(:type_selection)
|
|
4112
|
+
end
|
|
3791
4113
|
|
|
3792
|
-
|
|
3793
|
-
|
|
4114
|
+
it "does not use an $in query" do
|
|
4115
|
+
expect(selection).to eq({ dkey: { "$in" => [ "Firefox", "Browser" ]}})
|
|
4116
|
+
end
|
|
3794
4117
|
end
|
|
3795
4118
|
end
|
|
3796
4119
|
end
|