mongoid 7.0.5 → 8.1.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 +33 -33
- data/LICENSE +1 -0
- data/README.md +34 -20
- data/Rakefile +63 -5
- data/lib/config/locales/en.yml +220 -105
- data/lib/mongoid/association/accessors.rb +176 -84
- data/lib/mongoid/association/bindable.rb +57 -28
- data/lib/mongoid/association/builders.rb +9 -15
- data/lib/mongoid/association/constrainable.rb +5 -7
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +31 -10
- data/lib/mongoid/association/embedded/batchable.rb +68 -54
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +27 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +16 -25
- data/lib/mongoid/association/embedded/embedded_in.rb +9 -28
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +10 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +156 -135
- data/lib/mongoid/association/embedded/embeds_many.rb +10 -37
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +27 -10
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +64 -30
- data/lib/mongoid/association/embedded/embeds_one.rb +11 -34
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +65 -41
- data/lib/mongoid/association/many.rb +25 -35
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +22 -30
- data/lib/mongoid/association/nested/nested_buildable.rb +9 -15
- data/lib/mongoid/association/nested/one.rb +57 -30
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +5 -12
- data/lib/mongoid/association/options.rb +16 -46
- data/lib/mongoid/association/proxy.rb +52 -40
- data/lib/mongoid/association/referenced/auto_save.rb +9 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +5 -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 +19 -31
- data/lib/mongoid/association/referenced/belongs_to.rb +16 -38
- data/lib/mongoid/association/referenced/counter_cache.rb +14 -25
- data/lib/mongoid/association/referenced/eager.rb +41 -40
- 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 +105 -68
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +29 -46
- 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 +440 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +102 -125
- data/lib/mongoid/association/referenced/has_many.rb +21 -45
- 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 +16 -29
- data/lib/mongoid/association/referenced/has_one/proxy.rb +25 -30
- data/lib/mongoid/association/referenced/has_one.rb +16 -36
- data/lib/mongoid/association/referenced/syncable.rb +11 -26
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +62 -84
- data/lib/mongoid/association.rb +13 -27
- data/lib/mongoid/atomic/modifiers.rb +29 -53
- data/lib/mongoid/atomic/paths/embedded/many.rb +23 -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 +42 -47
- data/lib/mongoid/attributes/dynamic.rb +22 -36
- data/lib/mongoid/attributes/nested.rb +12 -15
- data/lib/mongoid/attributes/processing.rb +19 -27
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +6 -9
- data/lib/mongoid/attributes.rb +103 -100
- data/lib/mongoid/cacheable.rb +7 -10
- data/lib/mongoid/changeable.rb +151 -70
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +15 -14
- data/lib/mongoid/clients/sessions.rb +10 -10
- data/lib/mongoid/clients/storage_options.rb +9 -17
- data/lib/mongoid/clients/validators/storage.rb +5 -24
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +7 -9
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +51 -13
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +8 -23
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +3 -1
- data/lib/mongoid/config.rb +235 -48
- data/lib/mongoid/contextual/aggregable/memory.rb +40 -27
- data/lib/mongoid/contextual/aggregable/mongo.rb +32 -33
- 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 +13 -44
- data/lib/mongoid/contextual/map_reduce.rb +7 -35
- data/lib/mongoid/contextual/memory.rb +387 -81
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +641 -283
- data/lib/mongoid/contextual/none.rb +264 -31
- data/lib/mongoid/contextual/queryable.rb +3 -4
- data/lib/mongoid/contextual.rb +21 -11
- data/lib/mongoid/copyable.rb +42 -17
- data/lib/mongoid/criteria/findable.rb +20 -20
- data/lib/mongoid/criteria/includable.rb +32 -34
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +12 -7
- data/lib/mongoid/criteria/modifiable.rb +4 -20
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +3 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +4 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -41
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +28 -8
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +9 -9
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +11 -12
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -41
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/object.rb +6 -30
- data/lib/mongoid/criteria/queryable/extensions/range.rb +49 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +12 -19
- data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -5
- data/lib/mongoid/criteria/queryable/extensions/string.rb +7 -32
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +7 -22
- data/lib/mongoid/criteria/queryable/extensions/time.rb +10 -10
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +19 -7
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +40 -25
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +205 -44
- data/lib/mongoid/criteria/queryable/optional.rb +16 -65
- data/lib/mongoid/criteria/queryable/options.rb +4 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +453 -177
- data/lib/mongoid/criteria/queryable/selector.rb +126 -29
- data/lib/mongoid/criteria/queryable/smash.rb +42 -18
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +18 -15
- data/lib/mongoid/criteria/scopable.rb +29 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +106 -111
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +151 -99
- data/lib/mongoid/equality.rb +35 -18
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- 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 +35 -21
- data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/immutable_attribute.rb +26 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- 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 +3 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +3 -4
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -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 +8 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- 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 +5 -10
- 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 +3 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +4 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- 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 +6 -13
- 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 +3 -4
- data/lib/mongoid/errors/no_client_hosts.rb +3 -4
- 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 +3 -4
- 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 +3 -1
- data/lib/mongoid/errors/unknown_attribute.rb +3 -4
- 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 +18 -4
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +37 -44
- data/lib/mongoid/extensions/big_decimal.rb +35 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +10 -6
- data/lib/mongoid/extensions/date.rb +32 -25
- data/lib/mongoid/extensions/date_time.rb +5 -13
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +5 -8
- data/lib/mongoid/extensions/float.rb +12 -14
- data/lib/mongoid/extensions/hash.rb +64 -42
- data/lib/mongoid/extensions/integer.rb +12 -16
- data/lib/mongoid/extensions/module.rb +3 -4
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +27 -52
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +42 -20
- data/lib/mongoid/extensions/regexp.rb +14 -8
- data/lib/mongoid/extensions/set.rb +13 -11
- data/lib/mongoid/extensions/string.rb +30 -61
- data/lib/mongoid/extensions/symbol.rb +6 -22
- data/lib/mongoid/extensions/time.rb +38 -22
- data/lib/mongoid/extensions/time_with_zone.rb +26 -9
- data/lib/mongoid/extensions/true_class.rb +5 -8
- data/lib/mongoid/extensions.rb +19 -3
- data/lib/mongoid/factory.rb +104 -17
- data/lib/mongoid/fields/foreign_key.rb +14 -26
- data/lib/mongoid/fields/localized.rb +21 -15
- data/lib/mongoid/fields/standard.rb +23 -43
- data/lib/mongoid/fields/validators/macro.rb +32 -20
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +349 -76
- data/lib/mongoid/findable.rb +115 -34
- data/lib/mongoid/indexable/specification.rb +5 -18
- data/lib/mongoid/indexable/validators/options.rb +8 -9
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +85 -41
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +4 -156
- 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 +130 -0
- data/lib/mongoid/persistable/creatable.rb +23 -30
- data/lib/mongoid/persistable/deletable.rb +7 -23
- data/lib/mongoid/persistable/destroyable.rb +12 -11
- 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 +14 -10
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +16 -9
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +10 -10
- data/lib/mongoid/persistable/updatable.rb +99 -30
- data/lib/mongoid/persistable/upsertable.rb +23 -9
- data/lib/mongoid/persistable.rb +138 -40
- data/lib/mongoid/persistence_context.rb +91 -51
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +18 -238
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +4 -2
- data/lib/mongoid/railties/database.rake +16 -2
- data/lib/mongoid/reloadable.rb +21 -22
- data/lib/mongoid/scopable.rb +34 -57
- data/lib/mongoid/selectable.rb +8 -18
- data/lib/mongoid/serializable.rb +33 -34
- data/lib/mongoid/shardable.rb +108 -21
- data/lib/mongoid/stateful.rb +60 -20
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +24 -5
- data/lib/mongoid/tasks/database.rb +105 -7
- data/lib/mongoid/threaded/lifecycle.rb +7 -26
- data/lib/mongoid/threaded.rb +44 -67
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +4 -3
- 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 +5 -6
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +54 -25
- data/lib/mongoid/traversable.rb +185 -61
- data/lib/mongoid/utils.rb +22 -0
- 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 +3 -4
- data/lib/mongoid/validatable/macros.rb +7 -14
- data/lib/mongoid/validatable/presence.rb +10 -15
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +30 -42
- data/lib/mongoid/validatable.rb +16 -32
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +50 -17
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +53 -32
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +17 -0
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +345 -0
- data/spec/integration/associations/belongs_to_spec.rb +20 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +283 -0
- data/spec/integration/associations/embeds_many_spec.rb +219 -0
- data/spec/integration/associations/embeds_one_spec.rb +41 -0
- data/spec/integration/associations/foreign_key_spec.rb +107 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +272 -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 +192 -0
- data/spec/integration/callbacks_spec.rb +584 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +40 -0
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +142 -0
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +74 -0
- data/spec/integration/matcher_examples_spec.rb +765 -0
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +41 -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 +122 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/persistence/range_field_spec.rb +350 -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 +35 -8
- 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 +35 -33
- data/spec/mongoid/association/depending_spec.rb +431 -338
- data/spec/mongoid/association/eager_spec.rb +8 -5
- 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 +4 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +56 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +152 -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 +114 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +706 -197
- data/spec/mongoid/association/embedded/embeds_many_models.rb +227 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +63 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +81 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +27 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +38 -23
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +22 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +31 -3
- 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 +4 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +111 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +114 -58
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +28 -21
- 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 +559 -385
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +68 -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 +81 -4
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +132 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +415 -129
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +859 -502
- data/spec/mongoid/association/referenced/has_many_models.rb +61 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +48 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +55 -9
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +135 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +65 -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 +48 -32
- 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 +93 -12
- data/spec/mongoid/atomic_spec.rb +53 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +149 -78
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- 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 +40 -0
- data/spec/mongoid/attributes/readonly_spec.rb +24 -22
- data/spec/mongoid/attributes_spec.rb +895 -54
- data/spec/mongoid/cacheable_spec.rb +6 -4
- data/spec/mongoid/changeable_spec.rb +484 -67
- data/spec/mongoid/clients/factory_spec.rb +128 -28
- data/spec/mongoid/clients/options_spec.rb +49 -30
- data/spec/mongoid/clients/sessions_spec.rb +29 -66
- data/spec/mongoid/clients/transactions_spec.rb +74 -37
- data/spec/mongoid/clients_spec.rb +189 -23
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +126 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +504 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +433 -153
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +242 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +30 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +22 -19
- data/spec/mongoid/contextual/memory_spec.rb +1828 -303
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3504 -1270
- data/spec/mongoid/contextual/none_spec.rb +80 -67
- data/spec/mongoid/copyable_spec.rb +659 -36
- data/spec/mongoid/copyable_spec_models.rb +30 -0
- data/spec/mongoid/criteria/findable_spec.rb +161 -228
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +20 -1
- 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 +9 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +136 -26
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +13 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +46 -17
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -15
- 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 +73 -8
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +9 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +7 -70
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +53 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +41 -1
- 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 +18 -485
- data/spec/mongoid/criteria/queryable/options_spec.rb +3 -1
- 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 +2538 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1100 -2880
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +17 -3
- 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/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1320 -1723
- data/spec/mongoid/document_fields_spec.rb +262 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +153 -87
- 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 +78 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +7 -5
- 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 +3 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -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 +24 -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 +5 -3
- 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 +4 -2
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -1
- 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 +41 -45
- data/spec/mongoid/extensions/big_decimal_spec.rb +714 -212
- data/spec/mongoid/extensions/binary_spec.rb +46 -9
- data/spec/mongoid/extensions/boolean_spec.rb +70 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +339 -0
- data/spec/mongoid/extensions/date_spec.rb +58 -140
- data/spec/mongoid/extensions/date_time_spec.rb +32 -69
- 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 +66 -73
- data/spec/mongoid/extensions/hash_spec.rb +135 -0
- data/spec/mongoid/extensions/integer_spec.rb +61 -63
- 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 +257 -54
- data/spec/mongoid/extensions/regexp_spec.rb +60 -33
- data/spec/mongoid/extensions/set_spec.rb +108 -0
- data/spec/mongoid/extensions/string_spec.rb +111 -50
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +20 -25
- data/spec/mongoid/extensions/time_spec.rb +668 -106
- data/spec/mongoid/extensions/time_with_zone_spec.rb +57 -83
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +347 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +86 -41
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +869 -114
- data/spec/mongoid/findable_spec.rb +520 -64
- data/spec/mongoid/indexable/specification_spec.rb +4 -2
- data/spec/mongoid/indexable_spec.rb +87 -32
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +761 -98
- data/spec/mongoid/interceptable_spec_models.rb +307 -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 +36 -0
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +114 -29
- data/spec/mongoid/persistable/deletable_spec.rb +300 -18
- data/spec/mongoid/persistable/destroyable_spec.rb +228 -18
- data/spec/mongoid/persistable/incrementable_spec.rb +60 -7
- data/spec/mongoid/persistable/logical_spec.rb +56 -3
- data/spec/mongoid/persistable/poppable_spec.rb +55 -3
- data/spec/mongoid/persistable/pullable_spec.rb +108 -6
- data/spec/mongoid/persistable/pushable_spec.rb +163 -7
- data/spec/mongoid/persistable/renamable_spec.rb +54 -2
- data/spec/mongoid/persistable/savable_spec.rb +284 -25
- data/spec/mongoid/persistable/settable_spec.rb +91 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +55 -3
- data/spec/mongoid/persistable/updatable_spec.rb +63 -49
- data/spec/mongoid/persistable/upsertable_spec.rb +93 -3
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +59 -58
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +50 -0
- data/spec/mongoid/query_cache_spec.rb +410 -95
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +357 -26
- data/spec/mongoid/scopable_spec.rb +193 -38
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +148 -38
- data/spec/mongoid/shardable_models.rb +75 -0
- data/spec/mongoid/shardable_spec.rb +239 -34
- data/spec/mongoid/stateful_spec.rb +153 -9
- data/spec/mongoid/tasks/database_rake_spec.rb +89 -13
- data/spec/mongoid/tasks/database_spec.rb +130 -1
- data/spec/mongoid/threaded_spec.rb +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +400 -10
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +568 -33
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1145 -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 +159 -103
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +37 -9
- data/spec/rails/controller_extension/controller_runtime_spec.rb +5 -3
- data/spec/rails/mongoid_spec.rb +8 -18
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +378 -0
- data/spec/shared/lib/mrss/docker_runner.rb +298 -0
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +113 -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 +37 -0
- data/spec/shared/share/Dockerfile.erb +321 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +416 -0
- data/spec/shared/shlib/set_env.sh +169 -0
- data/spec/spec_helper.rb +44 -66
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +45 -69
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +109 -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 -1
- 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/support/models/augmentation.rb +25 -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 +10 -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 +3 -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 +4 -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/support/models/catalog.rb +24 -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/support/models/circus.rb +12 -0
- data/spec/{app → support}/models/code.rb +4 -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/cover.rb +10 -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/support/models/delegating_patient.rb +15 -0
- 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/support/models/fanatic.rb +8 -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 +11 -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 +6 -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 +3 -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 +22 -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 +22 -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 +4 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/support/models/powerup.rb +25 -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 +3 -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 +3 -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/school.rb +14 -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/support/models/shield.rb +18 -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/support/models/student.rb +14 -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/support/models/weapon.rb +25 -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/schema_maps/schema_map_aws.json +17 -0
- data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_azure.json +17 -0
- data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_gcp.json +17 -0
- data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_kmip.json +17 -0
- data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
- data/spec/support/schema_maps/schema_map_local.json +18 -0
- data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +30 -5
- data.tar.gz.sig +0 -0
- metadata +1240 -742
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/errors/eager_load.rb +0 -22
- data/lib/mongoid/errors/invalid_value.rb +0 -16
- data/lib/mongoid/matchable/all.rb +0 -27
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -72
- data/lib/mongoid/matchable/elem_match.rb +0 -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/augmentation.rb +0 -11
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/circus.rb +0 -7
- 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/powerup.rb +0 -11
- 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/app/models/weapon.rb +0 -11
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -58
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -58
- 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 -130
- 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/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,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
class Criteria
|
|
4
5
|
module Scopable
|
|
@@ -9,8 +10,6 @@ module Mongoid
|
|
|
9
10
|
# criteria.apply_default_scope
|
|
10
11
|
#
|
|
11
12
|
# @return [ Criteria ] The criteria.
|
|
12
|
-
#
|
|
13
|
-
# @since 3.0.0
|
|
14
13
|
def apply_default_scope
|
|
15
14
|
klass.without_default_scope do
|
|
16
15
|
merge!(klass.default_scoping.call)
|
|
@@ -18,6 +17,31 @@ module Mongoid
|
|
|
18
17
|
self.scoping_options = true, false
|
|
19
18
|
end
|
|
20
19
|
|
|
20
|
+
# Applies a scope to the current criteria.
|
|
21
|
+
#
|
|
22
|
+
# This method does not modify the receiver but it may return a new
|
|
23
|
+
# object or the receiver depending on the argument: if the +scope+
|
|
24
|
+
# argument is nil, the receiver is returned without modification,
|
|
25
|
+
# otherwise a new criteria object is returned.
|
|
26
|
+
#
|
|
27
|
+
# @param [ Proc | Symbol | Criteria | nil ] scope The scope to apply.
|
|
28
|
+
#
|
|
29
|
+
# @return [ Criteria ] The criteria with the scope applied.
|
|
30
|
+
#
|
|
31
|
+
# @api private
|
|
32
|
+
def apply_scope(scope)
|
|
33
|
+
case scope
|
|
34
|
+
when Proc
|
|
35
|
+
instance_exec(&scope)
|
|
36
|
+
when Symbol
|
|
37
|
+
send(scope)
|
|
38
|
+
when Criteria
|
|
39
|
+
merge(scope)
|
|
40
|
+
else
|
|
41
|
+
self
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
21
45
|
# Given another criteria, remove the other criteria's scoping from this
|
|
22
46
|
# criteria.
|
|
23
47
|
#
|
|
@@ -27,8 +51,6 @@ module Mongoid
|
|
|
27
51
|
# @param [ Criteria ] other The other criteria.
|
|
28
52
|
#
|
|
29
53
|
# @return [ Criteria ] The criteria with scoping removed.
|
|
30
|
-
#
|
|
31
|
-
# @since 3.0.0
|
|
32
54
|
def remove_scoping(other)
|
|
33
55
|
if other
|
|
34
56
|
reject_matching(other, :selector, :options)
|
|
@@ -47,8 +69,6 @@ module Mongoid
|
|
|
47
69
|
# @param [ Hash ] options Additional query options.
|
|
48
70
|
#
|
|
49
71
|
# @return [ Criteria ] The scoped criteria.
|
|
50
|
-
#
|
|
51
|
-
# @since 3.0.0
|
|
52
72
|
def scoped(options = nil)
|
|
53
73
|
crit = clone
|
|
54
74
|
crit.options.merge!(options || {})
|
|
@@ -63,9 +83,7 @@ module Mongoid
|
|
|
63
83
|
# @example Is the default scope applied?
|
|
64
84
|
# criteria.scoped?
|
|
65
85
|
#
|
|
66
|
-
# @return [ true
|
|
67
|
-
#
|
|
68
|
-
# @since 3.0.0
|
|
86
|
+
# @return [ true | false ] If the default scope is applied.
|
|
69
87
|
def scoped?
|
|
70
88
|
!!(defined?(@scoped) ? @scoped : nil)
|
|
71
89
|
end
|
|
@@ -76,8 +94,6 @@ module Mongoid
|
|
|
76
94
|
# criteria.unscoped
|
|
77
95
|
#
|
|
78
96
|
# @return [ Criteria ] The unscoped criteria.
|
|
79
|
-
#
|
|
80
|
-
# @since 3.0.0
|
|
81
97
|
def unscoped
|
|
82
98
|
crit = clone
|
|
83
99
|
unless unscoped?
|
|
@@ -92,9 +108,7 @@ module Mongoid
|
|
|
92
108
|
# @example Is the criteria unscoped?
|
|
93
109
|
# criteria.unscoped?
|
|
94
110
|
#
|
|
95
|
-
# @return [ true
|
|
96
|
-
#
|
|
97
|
-
# @since 3.0.0
|
|
111
|
+
# @return [ true | false ] If the criteria is force unscoped.
|
|
98
112
|
def unscoped?
|
|
99
113
|
!!(defined?(@unscoped) ? @unscoped : nil)
|
|
100
114
|
end
|
|
@@ -105,8 +119,6 @@ module Mongoid
|
|
|
105
119
|
# criteria.scoping_options
|
|
106
120
|
#
|
|
107
121
|
# @return [ Array ] Scoped, unscoped.
|
|
108
|
-
#
|
|
109
|
-
# @since 3.0.0
|
|
110
122
|
def scoping_options
|
|
111
123
|
[ (defined?(@scoped) ? @scoped : nil), (defined?(@unscoped) ? @unscoped : nil) ]
|
|
112
124
|
end
|
|
@@ -119,8 +131,6 @@ module Mongoid
|
|
|
119
131
|
# @param [ Array ] options Scoped, unscoped.
|
|
120
132
|
#
|
|
121
133
|
# @return [ Array ] The new scoping options.
|
|
122
|
-
#
|
|
123
|
-
# @since 3.0.0
|
|
124
134
|
def scoping_options=(options)
|
|
125
135
|
@scoped, @unscoped = options
|
|
126
136
|
end
|
|
@@ -134,8 +144,6 @@ module Mongoid
|
|
|
134
144
|
# criteria.with_default_scope
|
|
135
145
|
#
|
|
136
146
|
# @return [ Criteria ] The criteria.
|
|
137
|
-
#
|
|
138
|
-
# @since 3.0.0
|
|
139
147
|
def with_default_scope
|
|
140
148
|
crit = clone
|
|
141
149
|
if klass.default_scopable? && !unscoped? && !scoped?
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mongoid
|
|
4
|
+
class Criteria
|
|
5
|
+
|
|
6
|
+
# This is a helper module for translating atomic and composite
|
|
7
|
+
# Ruby values into corresponding query and option components.
|
|
8
|
+
# Originally implemented as patches to core classes, that approach
|
|
9
|
+
# has generally fallen into disfavor, as it bleeds too much into
|
|
10
|
+
# the public namespace.
|
|
11
|
+
#
|
|
12
|
+
# @api private
|
|
13
|
+
module Translator
|
|
14
|
+
extend self
|
|
15
|
+
|
|
16
|
+
# Converts the given value to a direction specification for use in
|
|
17
|
+
# sorting.
|
|
18
|
+
#
|
|
19
|
+
# @example Convert the value to a direction.
|
|
20
|
+
# Translator.to_direction(:desc)
|
|
21
|
+
# Translator.to_direction("1")
|
|
22
|
+
# Translator.to_direction(-1)
|
|
23
|
+
# Translator.to_direction(score: { "$meta": "textScore" })
|
|
24
|
+
#
|
|
25
|
+
# @param [ Hash | Numeric | String | Symbol ] value The value to convert.
|
|
26
|
+
#
|
|
27
|
+
# @return [ Hash | Numeric ] The direction.
|
|
28
|
+
def to_direction(value)
|
|
29
|
+
case value
|
|
30
|
+
when Hash then
|
|
31
|
+
value
|
|
32
|
+
when Numeric then
|
|
33
|
+
value
|
|
34
|
+
when String then
|
|
35
|
+
value =~ /desc/i ? -1 : 1
|
|
36
|
+
when Symbol then
|
|
37
|
+
to_direction(value.to_s)
|
|
38
|
+
else
|
|
39
|
+
raise ArgumentError, "cannot translate #{value.inspect} (#{value.class}) to a direction specification"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
data/lib/mongoid/criteria.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require "mongoid/criteria/findable"
|
|
3
4
|
require "mongoid/criteria/includable"
|
|
4
5
|
require "mongoid/criteria/inspectable"
|
|
@@ -7,6 +8,7 @@ require "mongoid/criteria/modifiable"
|
|
|
7
8
|
require "mongoid/criteria/queryable"
|
|
8
9
|
require "mongoid/criteria/scopable"
|
|
9
10
|
require "mongoid/criteria/options"
|
|
11
|
+
require "mongoid/criteria/translator"
|
|
10
12
|
|
|
11
13
|
module Mongoid
|
|
12
14
|
|
|
@@ -18,9 +20,17 @@ module Mongoid
|
|
|
18
20
|
# against the database.
|
|
19
21
|
class Criteria
|
|
20
22
|
include Enumerable
|
|
23
|
+
|
|
24
|
+
# @api private
|
|
25
|
+
alias :_enumerable_find :find
|
|
26
|
+
|
|
21
27
|
include Contextual
|
|
22
28
|
include Queryable
|
|
23
29
|
include Findable
|
|
30
|
+
|
|
31
|
+
# @api private
|
|
32
|
+
alias :_findable_find :find
|
|
33
|
+
|
|
24
34
|
include Inspectable
|
|
25
35
|
include Includable
|
|
26
36
|
include Marshalable
|
|
@@ -32,8 +42,6 @@ module Mongoid
|
|
|
32
42
|
|
|
33
43
|
# Static array used to check with method missing - we only need to ever
|
|
34
44
|
# instantiate once.
|
|
35
|
-
#
|
|
36
|
-
# @since 4.0.0
|
|
37
45
|
CHECK = []
|
|
38
46
|
|
|
39
47
|
attr_accessor :embedded, :klass, :parent_document, :association
|
|
@@ -45,14 +53,60 @@ module Mongoid
|
|
|
45
53
|
#
|
|
46
54
|
# @param [ Object ] other The other +Enumerable+ or +Criteria+ to compare to.
|
|
47
55
|
#
|
|
48
|
-
# @return [ true
|
|
49
|
-
#
|
|
50
|
-
# @since 1.0.0
|
|
56
|
+
# @return [ true | false ] If the objects are equal.
|
|
51
57
|
def ==(other)
|
|
52
58
|
return super if other.respond_to?(:selector)
|
|
53
59
|
entries == other
|
|
54
60
|
end
|
|
55
61
|
|
|
62
|
+
# Finds one or many documents given the provided _id values, or filters
|
|
63
|
+
# the documents in the current scope in the application process space
|
|
64
|
+
# after loading them if needed.
|
|
65
|
+
#
|
|
66
|
+
# If this method is not given a block, it delegates to +Findable#find+
|
|
67
|
+
# and finds one or many documents for the provided _id values.
|
|
68
|
+
#
|
|
69
|
+
# If this method is given a block, it delegates to +Enumerable#find+ and
|
|
70
|
+
# returns the first document of those found by the current Crieria object
|
|
71
|
+
# for which the block returns a truthy value.
|
|
72
|
+
#
|
|
73
|
+
# Note that the "default proc" argument of Enumerable is not specially
|
|
74
|
+
# treated by Mongoid - the decision between delegating to +Findable+ vs
|
|
75
|
+
# +Enumerable+ is made solely based on whether +find+ is passed a block.
|
|
76
|
+
#
|
|
77
|
+
# @note Each argument can be an individual id, an array of ids or
|
|
78
|
+
# a nested array. Each array will be flattened.
|
|
79
|
+
#
|
|
80
|
+
# @example Finds a document by its _id, invokes Findable#find.
|
|
81
|
+
# critera.find("1234")
|
|
82
|
+
#
|
|
83
|
+
# @example Finds the first matching document using a block, invokes Enumerable#find.
|
|
84
|
+
# criteria.find { |item| item.name == "Depeche Mode" }
|
|
85
|
+
#
|
|
86
|
+
# @example Finds the first matching document using a block using the default Proc, invokes Enumerable#find.
|
|
87
|
+
# criteria.find(-> { "Default Band" }) { |item| item.name == "Milwaukee Mode" }
|
|
88
|
+
#
|
|
89
|
+
# @example Tries to find a document whose _id is the stringification of the provided Proc, typically failing.
|
|
90
|
+
# enumerator = criteria.find(-> { "Default Band" })
|
|
91
|
+
#
|
|
92
|
+
# @param [ [ Object | Array<Object> ]... ] *args The id(s).
|
|
93
|
+
# @param [ Proc ] block Optional block to pass.
|
|
94
|
+
#
|
|
95
|
+
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
|
96
|
+
#
|
|
97
|
+
# @raise Errors::DocumentNotFound If the parameters were _id values and
|
|
98
|
+
# not all documents are found and the +raise_not_found_error+
|
|
99
|
+
# Mongoid configuration option is truthy.
|
|
100
|
+
#
|
|
101
|
+
# @see https://ruby-doc.org/core/Enumerable.html#method-i-find
|
|
102
|
+
def find(*args, &block)
|
|
103
|
+
if block_given?
|
|
104
|
+
_enumerable_find(*args, &block)
|
|
105
|
+
else
|
|
106
|
+
_findable_find(*args)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
56
110
|
# Needed to properly get a criteria back as json
|
|
57
111
|
#
|
|
58
112
|
# @example Get the criteria as json.
|
|
@@ -65,39 +119,12 @@ module Mongoid
|
|
|
65
119
|
entries.as_json(options)
|
|
66
120
|
end
|
|
67
121
|
|
|
68
|
-
# Tells the criteria that the cursor that gets returned needs to be
|
|
69
|
-
# cached. This is so multiple iterations don't hit the database multiple
|
|
70
|
-
# times, however this is not advisable when working with large data sets
|
|
71
|
-
# as the entire results will get stored in memory.
|
|
72
|
-
#
|
|
73
|
-
# @example Flag the criteria as cached.
|
|
74
|
-
# criteria.cache
|
|
75
|
-
#
|
|
76
|
-
# @return [ Criteria ] The cloned criteria.
|
|
77
|
-
def cache
|
|
78
|
-
crit = clone
|
|
79
|
-
crit.options.merge!(cache: true)
|
|
80
|
-
crit
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Will return true if the cache option has been set.
|
|
84
|
-
#
|
|
85
|
-
# @example Is the criteria cached?
|
|
86
|
-
# criteria.cached?
|
|
87
|
-
#
|
|
88
|
-
# @return [ true, false ] If the criteria is flagged as cached.
|
|
89
|
-
def cached?
|
|
90
|
-
options[:cache] == true
|
|
91
|
-
end
|
|
92
|
-
|
|
93
122
|
# Get the documents from the embedded criteria.
|
|
94
123
|
#
|
|
95
124
|
# @example Get the documents.
|
|
96
125
|
# criteria.documents
|
|
97
126
|
#
|
|
98
127
|
# @return [ Array<Document> ] The documents.
|
|
99
|
-
#
|
|
100
|
-
# @since 3.0.0
|
|
101
128
|
def documents
|
|
102
129
|
@documents ||= []
|
|
103
130
|
end
|
|
@@ -109,8 +136,6 @@ module Mongoid
|
|
|
109
136
|
# @param [ Array<Document> ] docs The embedded documents.
|
|
110
137
|
#
|
|
111
138
|
# @return [ Array<Document> ] The embedded documents.
|
|
112
|
-
#
|
|
113
|
-
# @since 3.0.0
|
|
114
139
|
def documents=(docs)
|
|
115
140
|
@documents = docs
|
|
116
141
|
end
|
|
@@ -120,9 +145,7 @@ module Mongoid
|
|
|
120
145
|
# @example Is the criteria for embedded documents?
|
|
121
146
|
# criteria.embedded?
|
|
122
147
|
#
|
|
123
|
-
# @return [ true
|
|
124
|
-
#
|
|
125
|
-
# @since 3.0.0
|
|
148
|
+
# @return [ true | false ] If the criteria is embedded.
|
|
126
149
|
def embedded?
|
|
127
150
|
!!@embedded
|
|
128
151
|
end
|
|
@@ -134,8 +157,6 @@ module Mongoid
|
|
|
134
157
|
# criteria.extract_id
|
|
135
158
|
#
|
|
136
159
|
# @return [ Object ] The id.
|
|
137
|
-
#
|
|
138
|
-
# @since 2.3.0
|
|
139
160
|
def extract_id
|
|
140
161
|
selector.extract_id
|
|
141
162
|
end
|
|
@@ -149,8 +170,6 @@ module Mongoid
|
|
|
149
170
|
# @param [ Hash ] extras The extra driver options.
|
|
150
171
|
#
|
|
151
172
|
# @return [ Criteria ] The cloned criteria.
|
|
152
|
-
#
|
|
153
|
-
# @since 2.0.0
|
|
154
173
|
def extras(extras)
|
|
155
174
|
crit = clone
|
|
156
175
|
crit.options.merge!(extras)
|
|
@@ -163,11 +182,9 @@ module Mongoid
|
|
|
163
182
|
# criteria.field_list
|
|
164
183
|
#
|
|
165
184
|
# @return [ Array<String> ] The fields.
|
|
166
|
-
#
|
|
167
|
-
# @since 2.0.0
|
|
168
185
|
def field_list
|
|
169
186
|
if options[:fields]
|
|
170
|
-
options[:fields].keys.reject{ |key| key ==
|
|
187
|
+
options[:fields].keys.reject{ |key| key == klass.discriminator_key }
|
|
171
188
|
else
|
|
172
189
|
[]
|
|
173
190
|
end
|
|
@@ -181,8 +198,6 @@ module Mongoid
|
|
|
181
198
|
# criteria.freeze
|
|
182
199
|
#
|
|
183
200
|
# @return [ Criteria ] The frozen criteria.
|
|
184
|
-
#
|
|
185
|
-
# @since 2.0.0
|
|
186
201
|
def freeze
|
|
187
202
|
context and inclusions and super
|
|
188
203
|
end
|
|
@@ -193,13 +208,11 @@ module Mongoid
|
|
|
193
208
|
# Criteria.new(Band)
|
|
194
209
|
#
|
|
195
210
|
# @param [ Class ] klass The model class.
|
|
196
|
-
#
|
|
197
|
-
# @since 1.0.0
|
|
198
211
|
def initialize(klass)
|
|
199
212
|
@klass = klass
|
|
200
213
|
@embedded = nil
|
|
201
214
|
@none = nil
|
|
202
|
-
klass ? super(klass.aliased_fields, klass.fields) : super({}, {})
|
|
215
|
+
klass ? super(klass.aliased_fields, klass.fields, klass.relations, klass.aliased_associations) : super({}, {}, {}, {})
|
|
203
216
|
end
|
|
204
217
|
|
|
205
218
|
# Merges another object with this +Criteria+ and returns a new criteria.
|
|
@@ -236,8 +249,6 @@ module Mongoid
|
|
|
236
249
|
# @param [ Criteria ] other The criteria to merge in.
|
|
237
250
|
#
|
|
238
251
|
# @return [ Criteria ] The merged criteria.
|
|
239
|
-
#
|
|
240
|
-
# @since 3.0.0
|
|
241
252
|
def merge!(other)
|
|
242
253
|
criteria = other.to_criteria
|
|
243
254
|
selector.merge!(criteria.selector)
|
|
@@ -255,8 +266,6 @@ module Mongoid
|
|
|
255
266
|
# criteria.none
|
|
256
267
|
#
|
|
257
268
|
# @return [ Criteria ] The none criteria.
|
|
258
|
-
#
|
|
259
|
-
# @since 4.0.0
|
|
260
269
|
def none
|
|
261
270
|
@none = true and self
|
|
262
271
|
end
|
|
@@ -266,9 +275,7 @@ module Mongoid
|
|
|
266
275
|
# @example Is the criteria a none criteria?
|
|
267
276
|
# criteria.empty_and_chainable?
|
|
268
277
|
#
|
|
269
|
-
# @return [ true
|
|
270
|
-
#
|
|
271
|
-
# @since 4.0.0
|
|
278
|
+
# @return [ true | false ] If the criteria is a none.
|
|
272
279
|
def empty_and_chainable?
|
|
273
280
|
!!@none
|
|
274
281
|
end
|
|
@@ -278,22 +285,19 @@ module Mongoid
|
|
|
278
285
|
# @example Limit the fields returned from the database.
|
|
279
286
|
# Band.only(:name)
|
|
280
287
|
#
|
|
281
|
-
# @param [ Array<Symbol> ] args The
|
|
288
|
+
# @param [ [ Symbol | Array<Symbol> ]... ] *args The field name(s).
|
|
282
289
|
#
|
|
283
290
|
# @return [ Criteria ] The cloned criteria.
|
|
284
|
-
#
|
|
285
|
-
# @since 1.0.0
|
|
286
291
|
def only(*args)
|
|
287
|
-
return clone if args.flatten.empty?
|
|
288
292
|
args = args.flatten
|
|
293
|
+
return clone if args.empty?
|
|
289
294
|
if (args & Fields::IDS).empty?
|
|
290
295
|
args.unshift(:_id)
|
|
291
296
|
end
|
|
292
297
|
if klass.hereditary?
|
|
293
|
-
|
|
294
|
-
else
|
|
295
|
-
super(*args)
|
|
298
|
+
args.push(klass.discriminator_key.to_sym)
|
|
296
299
|
end
|
|
300
|
+
super(*args)
|
|
297
301
|
end
|
|
298
302
|
|
|
299
303
|
# Set the read preference for the criteria.
|
|
@@ -304,8 +308,6 @@ module Mongoid
|
|
|
304
308
|
# @param [ Hash ] value The mode preference.
|
|
305
309
|
#
|
|
306
310
|
# @return [ Criteria ] The cloned criteria.
|
|
307
|
-
#
|
|
308
|
-
# @since 5.0.0
|
|
309
311
|
def read(value = nil)
|
|
310
312
|
clone.tap do |criteria|
|
|
311
313
|
criteria.options.merge!(read: value)
|
|
@@ -317,13 +319,11 @@ module Mongoid
|
|
|
317
319
|
# @example Exclude fields returned from the database.
|
|
318
320
|
# Band.without(:name)
|
|
319
321
|
#
|
|
320
|
-
# @param [
|
|
322
|
+
# @param [ Symbol... ] *args The field name(s).
|
|
321
323
|
#
|
|
322
324
|
# @return [ Criteria ] The cloned criteria.
|
|
323
|
-
#
|
|
324
|
-
# @since 4.0.3
|
|
325
325
|
def without(*args)
|
|
326
|
-
args -=
|
|
326
|
+
args -= id_fields
|
|
327
327
|
super(*args)
|
|
328
328
|
end
|
|
329
329
|
|
|
@@ -333,9 +333,9 @@ module Mongoid
|
|
|
333
333
|
# crtiteria.respond_to?(:each)
|
|
334
334
|
#
|
|
335
335
|
# @param [ Symbol ] name The name of the class method on the +Document+.
|
|
336
|
-
# @param [ true
|
|
336
|
+
# @param [ true | false ] include_private Whether to include privates.
|
|
337
337
|
#
|
|
338
|
-
# @return [ true
|
|
338
|
+
# @return [ true | false ] If the criteria responds to the method.
|
|
339
339
|
def respond_to?(name, include_private = false)
|
|
340
340
|
super || klass.respond_to?(name) || CHECK.respond_to?(name, include_private)
|
|
341
341
|
end
|
|
@@ -348,8 +348,6 @@ module Mongoid
|
|
|
348
348
|
# criteria.to_criteria
|
|
349
349
|
#
|
|
350
350
|
# @return [ Criteria ] self.
|
|
351
|
-
#
|
|
352
|
-
# @since 3.0.0
|
|
353
351
|
def to_criteria
|
|
354
352
|
self
|
|
355
353
|
end
|
|
@@ -360,8 +358,6 @@ module Mongoid
|
|
|
360
358
|
# criteria.to_proc
|
|
361
359
|
#
|
|
362
360
|
# @return [ Proc ] The wrapped criteria.
|
|
363
|
-
#
|
|
364
|
-
# @since 3.0.0
|
|
365
361
|
def to_proc
|
|
366
362
|
->{ self }
|
|
367
363
|
end
|
|
@@ -377,7 +373,7 @@ module Mongoid
|
|
|
377
373
|
#
|
|
378
374
|
# @return [ Criteria ] The cloned criteria.
|
|
379
375
|
def type(types)
|
|
380
|
-
any_in(
|
|
376
|
+
any_in(self.discriminator_key.to_sym => Array(types))
|
|
381
377
|
end
|
|
382
378
|
|
|
383
379
|
# This is the general entry point for most MongoDB queries. This either
|
|
@@ -390,30 +386,39 @@ module Mongoid
|
|
|
390
386
|
# @example Add a javascript selection.
|
|
391
387
|
# criteria.where("this.name == 'syd'")
|
|
392
388
|
#
|
|
393
|
-
# @param [
|
|
389
|
+
# @param [ [ Hash | String ]... ] *args The standard selection
|
|
390
|
+
# or javascript string.
|
|
394
391
|
#
|
|
395
392
|
# @raise [ UnsupportedJavascript ] If provided a string and the criteria
|
|
396
393
|
# is embedded.
|
|
397
394
|
#
|
|
398
395
|
# @return [ Criteria ] The cloned selectable.
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
396
|
+
def where(*args)
|
|
397
|
+
# Historically this method required exactly one argument.
|
|
398
|
+
# As of https://jira.mongodb.org/browse/MONGOID-4804 it also accepts
|
|
399
|
+
# zero arguments.
|
|
400
|
+
# The underlying where implemetation that super invokes supports
|
|
401
|
+
# any number of arguments, but we don't presently allow mutiple
|
|
402
|
+
# arguments through this method. This API can be reconsidered in the
|
|
403
|
+
# future.
|
|
404
|
+
if args.length > 1
|
|
405
|
+
raise ArgumentError, "Criteria#where requires zero or one arguments (given #{args.length})"
|
|
406
|
+
end
|
|
407
|
+
if args.length == 1
|
|
408
|
+
expression = args.first
|
|
409
|
+
if expression.is_a?(::String) && embedded?
|
|
410
|
+
raise Errors::UnsupportedJavascript.new(klass, expression)
|
|
411
|
+
end
|
|
404
412
|
end
|
|
405
413
|
super
|
|
406
414
|
end
|
|
407
415
|
|
|
408
|
-
|
|
409
416
|
# Get a version of this criteria without the options.
|
|
410
417
|
#
|
|
411
418
|
# @example Get the criteria without options.
|
|
412
419
|
# criteria.without_options
|
|
413
420
|
#
|
|
414
421
|
# @return [ Criteria ] The cloned criteria.
|
|
415
|
-
#
|
|
416
|
-
# @since 3.0.4
|
|
417
422
|
def without_options
|
|
418
423
|
crit = clone
|
|
419
424
|
crit.options.clear
|
|
@@ -432,10 +437,14 @@ module Mongoid
|
|
|
432
437
|
# @param [ Hash ] scope The scope for the code.
|
|
433
438
|
#
|
|
434
439
|
# @return [ Criteria ] The criteria.
|
|
435
|
-
#
|
|
436
|
-
# @since 3.1.0
|
|
437
440
|
def for_js(javascript, scope = {})
|
|
438
|
-
|
|
441
|
+
code = if scope.empty?
|
|
442
|
+
# CodeWithScope is not supported for $where as of MongoDB 4.4
|
|
443
|
+
BSON::Code.new(javascript)
|
|
444
|
+
else
|
|
445
|
+
BSON::CodeWithScope.new(javascript, scope)
|
|
446
|
+
end
|
|
447
|
+
js_query(code)
|
|
439
448
|
end
|
|
440
449
|
|
|
441
450
|
private
|
|
@@ -453,8 +462,6 @@ module Mongoid
|
|
|
453
462
|
#
|
|
454
463
|
# @raise [ Errors::DocumentNotFound ] If none are found and raising an
|
|
455
464
|
# error.
|
|
456
|
-
#
|
|
457
|
-
# @since 3.0.0
|
|
458
465
|
def check_for_missing_documents!(result, ids)
|
|
459
466
|
if (result.size < ids.size) && Mongoid.raise_not_found_error
|
|
460
467
|
raise Errors::DocumentNotFound.new(klass, ids, ids - result.map(&:_id))
|
|
@@ -475,8 +482,6 @@ module Mongoid
|
|
|
475
482
|
# @param [ Criteria ] other The criteria getting cloned.
|
|
476
483
|
#
|
|
477
484
|
# @return [ nil ] nil.
|
|
478
|
-
#
|
|
479
|
-
# @since 1.0.0
|
|
480
485
|
def initialize_copy(other)
|
|
481
486
|
@inclusions = other.inclusions.dup
|
|
482
487
|
@scoping_options = other.scoping_options
|
|
@@ -492,12 +497,10 @@ module Mongoid
|
|
|
492
497
|
# criteria.method_missing(:name)
|
|
493
498
|
#
|
|
494
499
|
# @param [ Symbol ] name The method name.
|
|
495
|
-
# @param [
|
|
500
|
+
# @param [ Object... ] *args The arguments.
|
|
496
501
|
#
|
|
497
502
|
# @return [ Object ] The result of the method call.
|
|
498
|
-
|
|
499
|
-
# @since 1.0.0
|
|
500
|
-
def method_missing(name, *args, &block)
|
|
503
|
+
ruby2_keywords def method_missing(name, *args, &block)
|
|
501
504
|
if klass.respond_to?(name)
|
|
502
505
|
klass.send(:with_scope, self) do
|
|
503
506
|
klass.send(name, *args, &block)
|
|
@@ -515,9 +518,7 @@ module Mongoid
|
|
|
515
518
|
# @example Add the type selection.
|
|
516
519
|
# criteria.merge_type_selection
|
|
517
520
|
#
|
|
518
|
-
# @return [ true
|
|
519
|
-
#
|
|
520
|
-
# @since 3.0.3
|
|
521
|
+
# @return [ true | false ] If type selection was added.
|
|
521
522
|
def merge_type_selection
|
|
522
523
|
selector.merge!(type_selection) if type_selectable?
|
|
523
524
|
end
|
|
@@ -529,13 +530,11 @@ module Mongoid
|
|
|
529
530
|
# @example If the criteria type selectable?
|
|
530
531
|
# criteria.type_selectable?
|
|
531
532
|
#
|
|
532
|
-
# @return [ true
|
|
533
|
-
#
|
|
534
|
-
# @since 3.0.3
|
|
533
|
+
# @return [ true | false ] If type selection should be added.
|
|
535
534
|
def type_selectable?
|
|
536
535
|
klass.hereditary? &&
|
|
537
|
-
!selector.keys.include?(
|
|
538
|
-
!selector.keys.include?(
|
|
536
|
+
!selector.keys.include?(self.discriminator_key) &&
|
|
537
|
+
!selector.keys.include?(self.discriminator_key.to_sym)
|
|
539
538
|
end
|
|
540
539
|
|
|
541
540
|
# Get the selector for type selection.
|
|
@@ -546,14 +545,12 @@ module Mongoid
|
|
|
546
545
|
# criteria.type_selection
|
|
547
546
|
#
|
|
548
547
|
# @return [ Hash ] The type selection.
|
|
549
|
-
#
|
|
550
|
-
# @since 3.0.3
|
|
551
548
|
def type_selection
|
|
552
549
|
klasses = klass._types
|
|
553
550
|
if klasses.size > 1
|
|
554
|
-
{
|
|
551
|
+
{ klass.discriminator_key.to_sym => { "$in" => klass._types }}
|
|
555
552
|
else
|
|
556
|
-
{
|
|
553
|
+
{ klass.discriminator_key.to_sym => klass._types[0] }
|
|
557
554
|
end
|
|
558
555
|
end
|
|
559
556
|
|
|
@@ -565,8 +562,6 @@ module Mongoid
|
|
|
565
562
|
# criteria.selector_with_type_selection
|
|
566
563
|
#
|
|
567
564
|
# @return [ Hash ] The selector.
|
|
568
|
-
#
|
|
569
|
-
# @since 3.0.3
|
|
570
565
|
def selector_with_type_selection
|
|
571
566
|
type_selectable? ? selector.merge(type_selection) : selector
|
|
572
567
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "mongoid/deprecation"
|
|
4
|
+
|
|
5
|
+
module Mongoid
|
|
6
|
+
|
|
7
|
+
# Adds ability to declare Mongoid-specific deprecations.
|
|
8
|
+
#
|
|
9
|
+
# @api private
|
|
10
|
+
module Deprecable
|
|
11
|
+
|
|
12
|
+
# Declares method(s) as deprecated.
|
|
13
|
+
#
|
|
14
|
+
# @example Deprecate a method.
|
|
15
|
+
# Mongoid.deprecate(Cat, :meow); Cat.new.meow
|
|
16
|
+
# #=> Mongoid.logger.warn("meow is deprecated and will be removed from Mongoid 8.0")
|
|
17
|
+
#
|
|
18
|
+
# @example Deprecate a method and declare the replacement method.
|
|
19
|
+
# Mongoid.deprecate(Cat, meow: :speak); Cat.new.meow
|
|
20
|
+
# #=> Mongoid.logger.warn("meow is deprecated and will be removed from Mongoid 8.0 (use speak instead)")
|
|
21
|
+
#
|
|
22
|
+
# @example Deprecate a method and give replacement instructions.
|
|
23
|
+
# Mongoid.deprecate(Cat, meow: 'eat :catnip instead'); Cat.new.meow
|
|
24
|
+
# #=> Mongoid.logger.warn("meow is deprecated and will be removed from Mongoid 8.0 (eat :catnip instead)")
|
|
25
|
+
#
|
|
26
|
+
# @param [ Module ] target_module The parent which contains the method.
|
|
27
|
+
# @param [ [ Symbol | Hash<Symbol, [ Symbol | String ]> ]... ] *method_descriptors
|
|
28
|
+
# The methods to deprecate, with optional replacement instructions.
|
|
29
|
+
def deprecate(target_module, *method_descriptors)
|
|
30
|
+
Mongoid::Deprecation.deprecate_methods(target_module, *method_descriptors)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Ensure Mongoid.deprecate can be used during initialization
|
|
36
|
+
Mongoid.extend(Mongoid::Deprecable)
|