mongoid 7.3.5 → 7.5.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 +17 -17
- data/README.md +3 -3
- data/lib/config/locales/en.yml +28 -20
- data/lib/mongoid/association/accessors.rb +0 -27
- data/lib/mongoid/association/bindable.rb +0 -21
- data/lib/mongoid/association/builders.rb +0 -9
- data/lib/mongoid/association/constrainable.rb +0 -3
- data/lib/mongoid/association/depending.rb +0 -7
- data/lib/mongoid/association/eager_loadable.rb +0 -3
- data/lib/mongoid/association/embedded/batchable.rb +12 -59
- data/lib/mongoid/association/embedded/cyclic.rb +2 -11
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +0 -3
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +0 -13
- data/lib/mongoid/association/embedded/embedded_in.rb +0 -23
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +0 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +31 -44
- data/lib/mongoid/association/embedded/embeds_many.rb +0 -31
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +0 -3
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +26 -14
- data/lib/mongoid/association/embedded/embeds_one.rb +0 -27
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +26 -5
- data/lib/mongoid/association/many.rb +0 -17
- data/lib/mongoid/association/marshalable.rb +0 -5
- data/lib/mongoid/association/nested/many.rb +0 -11
- data/lib/mongoid/association/nested/nested_buildable.rb +0 -9
- data/lib/mongoid/association/nested/one.rb +1 -16
- data/lib/mongoid/association/nested.rb +0 -3
- data/lib/mongoid/association/one.rb +1 -10
- data/lib/mongoid/association/options.rb +0 -33
- data/lib/mongoid/association/proxy.rb +0 -21
- data/lib/mongoid/association/referenced/auto_save.rb +0 -9
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +0 -7
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +4 -5
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +0 -13
- data/lib/mongoid/association/referenced/belongs_to.rb +9 -34
- data/lib/mongoid/association/referenced/counter_cache.rb +2 -15
- data/lib/mongoid/association/referenced/eager.rb +3 -24
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +12 -39
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +11 -38
- data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
- data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -64
- data/lib/mongoid/association/referenced/has_many/proxy.rb +20 -63
- data/lib/mongoid/association/referenced/has_many.rb +12 -39
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +3 -4
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -15
- data/lib/mongoid/association/referenced/has_one/proxy.rb +0 -9
- data/lib/mongoid/association/referenced/has_one.rb +9 -32
- data/lib/mongoid/association/referenced/syncable.rb +0 -17
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +0 -1
- data/lib/mongoid/association/relatable.rb +0 -61
- data/lib/mongoid/association.rb +0 -17
- data/lib/mongoid/atomic/modifiers.rb +4 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +0 -24
- data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
- data/lib/mongoid/atomic/paths/embedded.rb +0 -3
- data/lib/mongoid/atomic/paths/root.rb +0 -5
- data/lib/mongoid/atomic/paths.rb +0 -1
- data/lib/mongoid/atomic.rb +1 -42
- data/lib/mongoid/attributes/dynamic.rb +0 -17
- data/lib/mongoid/attributes/nested.rb +0 -5
- data/lib/mongoid/attributes/processing.rb +1 -18
- data/lib/mongoid/attributes/projector.rb +0 -1
- data/lib/mongoid/attributes/readonly.rb +0 -5
- data/lib/mongoid/attributes.rb +0 -33
- data/lib/mongoid/cacheable.rb +1 -6
- data/lib/mongoid/changeable.rb +3 -59
- data/lib/mongoid/clients/factory.rb +0 -7
- data/lib/mongoid/clients/options.rb +0 -5
- data/lib/mongoid/clients/sessions.rb +0 -7
- data/lib/mongoid/clients/storage_options.rb +0 -7
- data/lib/mongoid/clients/validators/storage.rb +0 -9
- data/lib/mongoid/clients/validators.rb +0 -1
- data/lib/mongoid/clients.rb +0 -9
- data/lib/mongoid/composable.rb +0 -7
- data/lib/mongoid/config/environment.rb +21 -6
- data/lib/mongoid/config/options.rb +0 -11
- data/lib/mongoid/config/validators/client.rb +0 -17
- data/lib/mongoid/config/validators/option.rb +0 -3
- data/lib/mongoid/config/validators.rb +0 -1
- data/lib/mongoid/config.rb +43 -30
- data/lib/mongoid/contextual/aggregable/memory.rb +14 -11
- data/lib/mongoid/contextual/aggregable/mongo.rb +15 -20
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +0 -25
- data/lib/mongoid/contextual/command.rb +0 -5
- data/lib/mongoid/contextual/geo_near.rb +1 -34
- data/lib/mongoid/contextual/map_reduce.rb +0 -31
- data/lib/mongoid/contextual/memory.rb +147 -70
- data/lib/mongoid/contextual/mongo.rb +249 -103
- data/lib/mongoid/contextual/none.rb +83 -28
- data/lib/mongoid/contextual/queryable.rb +0 -3
- data/lib/mongoid/contextual.rb +0 -5
- data/lib/mongoid/copyable.rb +0 -5
- data/lib/mongoid/criteria/findable.rb +0 -13
- data/lib/mongoid/criteria/includable.rb +0 -9
- data/lib/mongoid/criteria/inspectable.rb +0 -3
- data/lib/mongoid/criteria/marshalable.rb +0 -5
- data/lib/mongoid/criteria/modifiable.rb +0 -19
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +0 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +0 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -1
- data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -25
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +0 -3
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +0 -3
- data/lib/mongoid/criteria/queryable/extensions/date.rb +0 -7
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +0 -5
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -24
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +0 -11
- data/lib/mongoid/criteria/queryable/extensions/object.rb +1 -28
- data/lib/mongoid/criteria/queryable/extensions/range.rb +38 -16
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +0 -9
- data/lib/mongoid/criteria/queryable/extensions/set.rb +0 -3
- data/lib/mongoid/criteria/queryable/extensions/string.rb +0 -17
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +0 -9
- data/lib/mongoid/criteria/queryable/extensions/time.rb +0 -7
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +0 -7
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -1
- data/lib/mongoid/criteria/queryable/key.rb +1 -14
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +22 -30
- data/lib/mongoid/criteria/queryable/optional.rb +0 -45
- data/lib/mongoid/criteria/queryable/options.rb +0 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +0 -13
- data/lib/mongoid/criteria/queryable/selectable.rb +45 -76
- data/lib/mongoid/criteria/queryable/selector.rb +0 -17
- data/lib/mongoid/criteria/queryable/smash.rb +0 -11
- data/lib/mongoid/criteria/queryable/storable.rb +6 -2
- data/lib/mongoid/criteria/queryable.rb +0 -7
- data/lib/mongoid/criteria/scopable.rb +25 -19
- data/lib/mongoid/criteria.rb +2 -57
- data/lib/mongoid/document.rb +1 -50
- data/lib/mongoid/equality.rb +26 -10
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/callback.rb +0 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
- data/lib/mongoid/errors/delete_restriction.rb +0 -3
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
- data/lib/mongoid/errors/document_not_found.rb +23 -15
- data/lib/mongoid/errors/eager_load.rb +0 -3
- data/lib/mongoid/errors/empty_config_file.rb +0 -1
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
- data/lib/mongoid/errors/invalid_collection.rb +0 -1
- data/lib/mongoid/errors/invalid_config_file.rb +0 -1
- data/lib/mongoid/errors/invalid_config_option.rb +0 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +0 -3
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +0 -1
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +0 -1
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +0 -1
- data/lib/mongoid/errors/invalid_expression_operator.rb +0 -1
- data/lib/mongoid/errors/invalid_field.rb +0 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +0 -1
- data/lib/mongoid/errors/invalid_field_option.rb +0 -3
- data/lib/mongoid/errors/invalid_find.rb +0 -3
- data/lib/mongoid/errors/invalid_includes.rb +0 -3
- data/lib/mongoid/errors/invalid_index.rb +0 -3
- data/lib/mongoid/errors/invalid_options.rb +0 -3
- data/lib/mongoid/errors/invalid_path.rb +0 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
- data/lib/mongoid/errors/invalid_query.rb +0 -1
- data/lib/mongoid/errors/invalid_relation.rb +0 -7
- data/lib/mongoid/errors/invalid_relation_option.rb +0 -3
- data/lib/mongoid/errors/invalid_scope.rb +0 -3
- data/lib/mongoid/errors/invalid_session_use.rb +1 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +0 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +0 -3
- data/lib/mongoid/errors/invalid_time.rb +0 -3
- data/lib/mongoid/errors/invalid_value.rb +0 -1
- data/lib/mongoid/errors/inverse_not_found.rb +0 -3
- data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
- data/lib/mongoid/errors/mixed_relations.rb +0 -3
- data/lib/mongoid/errors/mongoid_error.rb +0 -9
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +0 -3
- data/lib/mongoid/errors/no_client_config.rb +0 -3
- data/lib/mongoid/errors/no_client_database.rb +0 -3
- data/lib/mongoid/errors/no_client_hosts.rb +0 -3
- data/lib/mongoid/errors/no_clients_config.rb +0 -3
- data/lib/mongoid/errors/no_default_client.rb +0 -3
- data/lib/mongoid/errors/no_environment.rb +0 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
- data/lib/mongoid/errors/no_metadata.rb +0 -3
- data/lib/mongoid/errors/no_parent.rb +0 -3
- data/lib/mongoid/errors/readonly_attribute.rb +0 -3
- data/lib/mongoid/errors/readonly_document.rb +1 -6
- data/lib/mongoid/errors/scope_overwrite.rb +0 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +0 -1
- data/lib/mongoid/errors/unknown_attribute.rb +0 -3
- data/lib/mongoid/errors/unknown_model.rb +0 -3
- data/lib/mongoid/errors/unsaved_document.rb +1 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
- data/lib/mongoid/errors/validations.rb +0 -1
- data/lib/mongoid/errors.rb +0 -1
- data/lib/mongoid/evolvable.rb +0 -3
- data/lib/mongoid/extensions/array.rb +3 -29
- data/lib/mongoid/extensions/big_decimal.rb +0 -11
- data/lib/mongoid/extensions/boolean.rb +0 -3
- data/lib/mongoid/extensions/date.rb +0 -9
- data/lib/mongoid/extensions/date_time.rb +0 -9
- data/lib/mongoid/extensions/decimal128.rb +0 -5
- data/lib/mongoid/extensions/false_class.rb +1 -6
- data/lib/mongoid/extensions/float.rb +0 -7
- data/lib/mongoid/extensions/hash.rb +0 -27
- data/lib/mongoid/extensions/integer.rb +0 -9
- data/lib/mongoid/extensions/module.rb +0 -3
- data/lib/mongoid/extensions/nil_class.rb +0 -5
- data/lib/mongoid/extensions/object.rb +1 -40
- data/lib/mongoid/extensions/object_id.rb +0 -7
- data/lib/mongoid/extensions/range.rb +0 -11
- data/lib/mongoid/extensions/regexp.rb +0 -3
- data/lib/mongoid/extensions/set.rb +0 -7
- data/lib/mongoid/extensions/string.rb +1 -30
- data/lib/mongoid/extensions/symbol.rb +0 -7
- data/lib/mongoid/extensions/time.rb +0 -11
- data/lib/mongoid/extensions/time_with_zone.rb +13 -9
- data/lib/mongoid/extensions/true_class.rb +1 -6
- data/lib/mongoid/extensions.rb +15 -3
- data/lib/mongoid/factory.rb +1 -2
- data/lib/mongoid/fields/foreign_key.rb +0 -21
- data/lib/mongoid/fields/localized.rb +0 -11
- data/lib/mongoid/fields/standard.rb +0 -33
- data/lib/mongoid/fields/validators/macro.rb +0 -9
- data/lib/mongoid/fields/validators.rb +0 -1
- data/lib/mongoid/fields.rb +191 -60
- data/lib/mongoid/findable.rb +20 -10
- data/lib/mongoid/indexable/specification.rb +0 -15
- data/lib/mongoid/indexable/validators/options.rb +0 -7
- data/lib/mongoid/indexable.rb +1 -18
- data/lib/mongoid/inspectable.rb +1 -10
- data/lib/mongoid/interceptable.rb +0 -25
- data/lib/mongoid/loggable.rb +0 -9
- data/lib/mongoid/matchable.rb +0 -5
- data/lib/mongoid/matcher/eq_impl.rb +37 -2
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +6 -1
- data/lib/mongoid/persistable/creatable.rb +1 -20
- data/lib/mongoid/persistable/deletable.rb +0 -17
- data/lib/mongoid/persistable/destroyable.rb +0 -7
- data/lib/mongoid/persistable/incrementable.rb +0 -5
- data/lib/mongoid/persistable/logical.rb +0 -5
- data/lib/mongoid/persistable/poppable.rb +0 -5
- data/lib/mongoid/persistable/pullable.rb +0 -7
- data/lib/mongoid/persistable/pushable.rb +0 -7
- data/lib/mongoid/persistable/renamable.rb +0 -5
- data/lib/mongoid/persistable/savable.rb +0 -7
- data/lib/mongoid/persistable/settable.rb +0 -5
- data/lib/mongoid/persistable/unsettable.rb +0 -5
- data/lib/mongoid/persistable/updatable.rb +2 -17
- data/lib/mongoid/persistable/upsertable.rb +0 -7
- data/lib/mongoid/persistable.rb +0 -23
- data/lib/mongoid/persistence_context.rb +0 -27
- data/lib/mongoid/positional.rb +0 -5
- data/lib/mongoid/query_cache.rb +0 -33
- data/lib/mongoid/railtie.rb +0 -15
- data/lib/mongoid/railties/controller_runtime.rb +0 -1
- data/lib/mongoid/reloadable.rb +4 -16
- data/lib/mongoid/scopable.rb +6 -34
- data/lib/mongoid/selectable.rb +0 -9
- data/lib/mongoid/serializable.rb +0 -15
- data/lib/mongoid/shardable.rb +0 -7
- data/lib/mongoid/stateful.rb +0 -9
- data/lib/mongoid/stringified_symbol.rb +2 -3
- data/lib/mongoid/tasks/database.rb +0 -5
- data/lib/mongoid/threaded/lifecycle.rb +0 -21
- data/lib/mongoid/threaded.rb +0 -55
- data/lib/mongoid/timestamps/created/short.rb +0 -1
- data/lib/mongoid/timestamps/created.rb +0 -1
- data/lib/mongoid/timestamps/short.rb +0 -1
- data/lib/mongoid/timestamps/timeless.rb +0 -7
- data/lib/mongoid/timestamps/updated/short.rb +0 -1
- data/lib/mongoid/timestamps/updated.rb +0 -3
- data/lib/mongoid/timestamps.rb +0 -1
- data/lib/mongoid/touchable.rb +0 -7
- data/lib/mongoid/traversable.rb +67 -53
- data/lib/mongoid/validatable/associated.rb +0 -3
- data/lib/mongoid/validatable/format.rb +0 -1
- data/lib/mongoid/validatable/length.rb +0 -1
- data/lib/mongoid/validatable/localizable.rb +0 -3
- data/lib/mongoid/validatable/macros.rb +0 -7
- data/lib/mongoid/validatable/presence.rb +1 -8
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +15 -30
- data/lib/mongoid/validatable.rb +1 -22
- data/lib/mongoid/version.rb +1 -2
- data/lib/mongoid/warnings.rb +29 -0
- data/lib/mongoid.rb +1 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +0 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -3
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid_generator.rb +0 -1
- data/lib/rails/mongoid.rb +0 -3
- data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
- data/spec/integration/app_spec.rb +20 -15
- data/spec/integration/associations/belongs_to_spec.rb +0 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +0 -1
- data/spec/integration/associations/embeds_many_spec.rb +0 -1
- data/spec/integration/associations/embeds_one_spec.rb +0 -1
- data/spec/integration/associations/foreign_key_spec.rb +0 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
- data/spec/integration/associations/has_many_spec.rb +0 -1
- data/spec/integration/associations/has_one_spec.rb +0 -1
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +0 -1
- data/spec/integration/associations/reverse_population_spec.rb +0 -1
- data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +0 -1
- data/spec/integration/bson_regexp_raw_spec.rb +0 -1
- data/spec/integration/callbacks_models.rb +12 -0
- data/spec/integration/callbacks_spec.rb +18 -6
- data/spec/integration/contextual/empty_spec.rb +0 -1
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +0 -1
- data/spec/integration/criteria/default_scope_spec.rb +51 -0
- data/spec/integration/criteria/logical_spec.rb +30 -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 +0 -1
- data/spec/integration/discriminator_value_spec.rb +0 -1
- data/spec/integration/document_spec.rb +0 -1
- data/spec/integration/i18n_fallbacks_spec.rb +15 -2
- data/spec/integration/matcher_examples_spec.rb +0 -1
- data/spec/integration/matcher_operator_spec.rb +27 -3
- data/spec/integration/matcher_spec.rb +95 -1
- data/spec/integration/server_query_spec.rb +0 -1
- data/spec/integration/shardable_spec.rb +0 -1
- data/spec/integration/stringified_symbol_field_spec.rb +14 -1
- data/spec/lite_spec_helper.rb +1 -2
- data/spec/mongoid/association/accessors_spec.rb +44 -15
- data/spec/mongoid/association/auto_save_spec.rb +72 -34
- data/spec/mongoid/association/builders_spec.rb +1 -2
- data/spec/mongoid/association/constrainable_spec.rb +0 -1
- data/spec/mongoid/association/counter_cache_spec.rb +32 -33
- data/spec/mongoid/association/depending_spec.rb +12 -13
- data/spec/mongoid/association/eager_spec.rb +4 -5
- data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
- data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +13 -14
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +384 -156
- data/spec/mongoid/association/embedded/embeds_many_models.rb +0 -122
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +21 -22
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -1
- data/spec/mongoid/association/macros_spec.rb +9 -10
- data/spec/mongoid/association/nested/many_spec.rb +0 -1
- data/spec/mongoid/association/nested/one_spec.rb +0 -1
- data/spec/mongoid/association/options_spec.rb +0 -1
- data/spec/mongoid/association/polymorphic_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +55 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +57 -53
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +22 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +179 -162
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +18 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +21 -1
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +21 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +113 -33
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +225 -178
- data/spec/mongoid/association/referenced/has_many_models.rb +18 -1
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +21 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +51 -8
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +26 -27
- data/spec/mongoid/association/referenced/has_one_models.rb +18 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +21 -1
- data/spec/mongoid/association/reflections_spec.rb +0 -1
- data/spec/mongoid/association/syncable_spec.rb +31 -32
- data/spec/mongoid/association_spec.rb +0 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
- data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
- data/spec/mongoid/atomic/paths_spec.rb +0 -1
- data/spec/mongoid/atomic_spec.rb +28 -7
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +66 -67
- data/spec/mongoid/attributes/projector_spec.rb +5 -2
- data/spec/mongoid/attributes/readonly_spec.rb +22 -23
- data/spec/mongoid/attributes_spec.rb +32 -33
- data/spec/mongoid/cacheable_spec.rb +1 -2
- data/spec/mongoid/changeable_spec.rb +35 -36
- data/spec/mongoid/clients/factory_spec.rb +11 -13
- data/spec/mongoid/clients/options_spec.rb +5 -5
- data/spec/mongoid/clients/sessions_spec.rb +22 -23
- data/spec/mongoid/clients/transactions_spec.rb +49 -27
- data/spec/mongoid/clients_spec.rb +6 -7
- data/spec/mongoid/composable_spec.rb +0 -1
- data/spec/mongoid/config/environment_spec.rb +39 -2
- data/spec/mongoid/config/options_spec.rb +0 -1
- data/spec/mongoid/config_spec.rb +154 -4
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +51 -12
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +46 -47
- data/spec/mongoid/contextual/geo_near_spec.rb +17 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -3
- data/spec/mongoid/contextual/memory_spec.rb +849 -89
- data/spec/mongoid/contextual/mongo_spec.rb +1185 -160
- data/spec/mongoid/contextual/none_spec.rb +43 -72
- data/spec/mongoid/copyable_spec.rb +12 -13
- data/spec/mongoid/copyable_spec_models.rb +0 -1
- data/spec/mongoid/criteria/findable_spec.rb +23 -24
- data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +0 -1
- data/spec/mongoid/criteria/modifiable_spec.rb +36 -37
- data/spec/mongoid/criteria/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/options_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +0 -1
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +227 -55
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/selector_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
- data/spec/mongoid/criteria/scopable_spec.rb +127 -1
- data/spec/mongoid/criteria_projection_spec.rb +3 -4
- data/spec/mongoid/criteria_spec.rb +523 -187
- data/spec/mongoid/document_fields_spec.rb +0 -1
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +0 -1
- data/spec/mongoid/document_spec.rb +11 -33
- data/spec/mongoid/equality_spec.rb +142 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
- data/spec/mongoid/errors/callback_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +49 -1
- data/spec/mongoid/errors/eager_load_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_field_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
- data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
- data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
- data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +1 -2
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_database_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_hosts_spec.rb +0 -1
- data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_environment_spec.rb +0 -1
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
- data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
- data/spec/mongoid/errors/no_parent_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
- data/spec/mongoid/errors/readonly_document_spec.rb +0 -1
- data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +0 -1
- data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
- data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
- data/spec/mongoid/errors/validations_spec.rb +0 -1
- data/spec/mongoid/extensions/array_spec.rb +0 -1
- data/spec/mongoid/extensions/big_decimal_spec.rb +0 -1
- data/spec/mongoid/extensions/binary_spec.rb +0 -1
- data/spec/mongoid/extensions/boolean_spec.rb +0 -1
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +0 -1
- data/spec/mongoid/extensions/date_spec.rb +0 -1
- data/spec/mongoid/extensions/date_time_spec.rb +0 -1
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
- data/spec/mongoid/extensions/false_class_spec.rb +0 -1
- data/spec/mongoid/extensions/float_spec.rb +0 -1
- data/spec/mongoid/extensions/hash_spec.rb +0 -1
- data/spec/mongoid/extensions/integer_spec.rb +0 -1
- data/spec/mongoid/extensions/module_spec.rb +0 -1
- data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
- data/spec/mongoid/extensions/object_id_spec.rb +0 -1
- data/spec/mongoid/extensions/object_spec.rb +0 -1
- data/spec/mongoid/extensions/range_spec.rb +0 -1
- data/spec/mongoid/extensions/regexp_spec.rb +0 -1
- data/spec/mongoid/extensions/set_spec.rb +0 -1
- data/spec/mongoid/extensions/string_spec.rb +2 -3
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +0 -1
- data/spec/mongoid/extensions/symbol_spec.rb +0 -1
- data/spec/mongoid/extensions/time_spec.rb +0 -1
- data/spec/mongoid/extensions/time_with_zone_spec.rb +0 -1
- data/spec/mongoid/extensions/true_class_spec.rb +0 -1
- data/spec/mongoid/extensions_spec.rb +14 -3
- data/spec/mongoid/factory_spec.rb +1 -1
- data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
- data/spec/mongoid/fields/localized_spec.rb +0 -1
- data/spec/mongoid/fields/standard_spec.rb +0 -1
- data/spec/mongoid/fields_spec.rb +326 -31
- data/spec/mongoid/findable_spec.rb +51 -22
- data/spec/mongoid/indexable/specification_spec.rb +0 -1
- data/spec/mongoid/indexable_spec.rb +0 -1
- data/spec/mongoid/inspectable_spec.rb +0 -1
- data/spec/mongoid/interceptable_spec.rb +102 -95
- data/spec/mongoid/loggable_spec.rb +0 -1
- data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -2
- data/spec/mongoid/persistable/creatable_spec.rb +2 -3
- data/spec/mongoid/persistable/deletable_spec.rb +18 -19
- data/spec/mongoid/persistable/destroyable_spec.rb +8 -9
- data/spec/mongoid/persistable/incrementable_spec.rb +8 -9
- data/spec/mongoid/persistable/logical_spec.rb +4 -5
- data/spec/mongoid/persistable/poppable_spec.rb +4 -5
- data/spec/mongoid/persistable/pullable_spec.rb +8 -9
- data/spec/mongoid/persistable/pushable_spec.rb +8 -9
- data/spec/mongoid/persistable/renamable_spec.rb +3 -4
- data/spec/mongoid/persistable/savable_spec.rb +15 -11
- data/spec/mongoid/persistable/settable_spec.rb +9 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +4 -5
- data/spec/mongoid/persistable/updatable_spec.rb +41 -24
- data/spec/mongoid/persistable/upsertable_spec.rb +1 -2
- data/spec/mongoid/persistable_spec.rb +1 -2
- data/spec/mongoid/persistence_context_spec.rb +0 -1
- data/spec/mongoid/positional_spec.rb +0 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +1 -2
- data/spec/mongoid/query_cache_spec.rb +30 -8
- data/spec/mongoid/relations/proxy_spec.rb +6 -7
- data/spec/mongoid/reloadable_spec.rb +209 -23
- data/spec/mongoid/scopable_spec.rb +54 -22
- data/spec/mongoid/selectable_spec.rb +6 -7
- data/spec/mongoid/serializable_spec.rb +9 -10
- data/spec/mongoid/shardable_spec.rb +2 -3
- data/spec/mongoid/stateful_spec.rb +1 -2
- data/spec/mongoid/tasks/database_rake_spec.rb +0 -1
- data/spec/mongoid/tasks/database_spec.rb +0 -1
- data/spec/mongoid/threaded_spec.rb +2 -3
- data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
- data/spec/mongoid/timestamps/created_spec.rb +1 -2
- data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
- data/spec/mongoid/timestamps/updated_spec.rb +3 -4
- data/spec/mongoid/timestamps_spec.rb +6 -7
- data/spec/mongoid/touchable_spec.rb +15 -20
- data/spec/mongoid/touchable_spec_models.rb +0 -1
- data/spec/mongoid/traversable_spec.rb +65 -2
- data/spec/mongoid/validatable/associated_spec.rb +0 -1
- data/spec/mongoid/validatable/format_spec.rb +0 -1
- data/spec/mongoid/validatable/length_spec.rb +0 -1
- data/spec/mongoid/validatable/numericality_spec.rb +0 -1
- data/spec/mongoid/validatable/presence_spec.rb +26 -23
- data/spec/mongoid/validatable/uniqueness_spec.rb +67 -68
- data/spec/mongoid/validatable_spec.rb +2 -3
- data/spec/mongoid_spec.rb +0 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -1
- data/spec/rails/mongoid_spec.rb +0 -1
- data/spec/shared/lib/mrss/constraints.rb +10 -17
- data/spec/shared/lib/mrss/docker_runner.rb +23 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
- data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
- data/spec/shared/share/Dockerfile.erb +56 -54
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/distro.sh +2 -1
- data/spec/shared/shlib/server.sh +46 -21
- data/spec/shared/shlib/set_env.sh +43 -5
- data/spec/spec_helper.rb +12 -22
- data/spec/support/authorization.rb +0 -1
- data/spec/support/constraints.rb +0 -1
- data/spec/support/expectations.rb +0 -1
- data/spec/support/macros.rb +31 -1
- data/spec/support/models/account.rb +1 -2
- data/spec/support/models/acolyte.rb +0 -1
- data/spec/support/models/actor.rb +0 -1
- data/spec/support/models/actress.rb +0 -1
- data/spec/support/models/address.rb +0 -1
- data/spec/support/models/address_component.rb +0 -1
- data/spec/support/models/address_number.rb +0 -1
- data/spec/support/models/agency.rb +0 -1
- data/spec/support/models/agent.rb +0 -1
- data/spec/support/models/album.rb +0 -1
- data/spec/support/models/alert.rb +0 -1
- data/spec/support/models/animal.rb +0 -1
- data/spec/support/models/answer.rb +0 -1
- data/spec/support/models/appointment.rb +0 -1
- data/spec/support/models/armrest.rb +0 -1
- data/spec/support/models/array_field.rb +0 -1
- data/spec/support/models/article.rb +0 -1
- data/spec/support/models/artist.rb +2 -1
- data/spec/support/models/artwork.rb +0 -1
- data/spec/support/models/audio.rb +0 -1
- data/spec/support/models/augmentation.rb +0 -1
- data/spec/support/models/author.rb +0 -1
- data/spec/support/models/baby.rb +0 -1
- data/spec/support/models/band.rb +4 -1
- data/spec/support/models/bar.rb +0 -1
- data/spec/support/models/basic.rb +0 -1
- data/spec/support/models/bed.rb +0 -1
- data/spec/support/models/big_palette.rb +0 -1
- data/spec/support/models/birthday.rb +0 -1
- data/spec/support/models/bolt.rb +0 -1
- data/spec/support/models/bomb.rb +0 -1
- data/spec/support/models/book.rb +0 -1
- data/spec/support/models/breed.rb +0 -1
- data/spec/support/models/browser.rb +0 -1
- data/spec/support/models/building.rb +0 -1
- data/spec/support/models/building_address.rb +0 -1
- data/spec/support/models/bus.rb +0 -1
- data/spec/support/models/business.rb +0 -1
- data/spec/support/models/callback_test.rb +0 -1
- data/spec/support/models/canvas.rb +0 -1
- data/spec/support/models/car.rb +0 -1
- data/spec/support/models/cat.rb +0 -1
- data/spec/support/models/category.rb +0 -1
- data/spec/support/models/child.rb +0 -1
- data/spec/support/models/child_doc.rb +3 -4
- data/spec/support/models/church.rb +0 -1
- data/spec/support/models/circle.rb +0 -1
- data/spec/support/models/circuit.rb +0 -1
- data/spec/support/models/circus.rb +0 -1
- data/spec/support/models/code.rb +2 -1
- data/spec/support/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +0 -1
- data/spec/support/models/comment.rb +0 -1
- data/spec/support/models/company.rb +0 -1
- data/spec/support/models/consumption_period.rb +0 -1
- data/spec/support/models/contextable_item.rb +0 -1
- data/spec/support/models/contractor.rb +0 -1
- data/spec/support/models/cookie.rb +0 -1
- data/spec/support/models/country_code.rb +2 -1
- data/spec/support/models/courier_job.rb +0 -1
- data/spec/support/models/crate.rb +0 -1
- data/spec/support/models/customer.rb +0 -1
- data/spec/support/models/customer_address.rb +0 -1
- data/spec/support/models/deed.rb +0 -1
- data/spec/support/models/definition.rb +0 -1
- data/spec/support/models/delegating_patient.rb +0 -1
- data/spec/support/models/description.rb +0 -1
- data/spec/support/models/dictionary.rb +0 -1
- data/spec/support/models/division.rb +0 -1
- data/spec/support/models/doctor.rb +0 -1
- data/spec/support/models/dog.rb +0 -1
- data/spec/support/models/dokument.rb +0 -1
- data/spec/support/models/draft.rb +0 -1
- data/spec/support/models/dragon.rb +0 -1
- data/spec/support/models/driver.rb +0 -1
- data/spec/support/models/drug.rb +0 -1
- data/spec/support/models/dungeon.rb +0 -1
- data/spec/support/models/edit.rb +0 -1
- data/spec/support/models/email.rb +0 -1
- data/spec/support/models/employer.rb +0 -1
- data/spec/support/models/entry.rb +0 -1
- data/spec/support/models/eraser.rb +0 -1
- data/spec/support/models/even.rb +0 -1
- data/spec/support/models/event.rb +0 -1
- data/spec/support/models/exhibition.rb +0 -1
- data/spec/support/models/exhibitor.rb +0 -1
- data/spec/support/models/explosion.rb +0 -1
- data/spec/support/models/eye.rb +0 -1
- data/spec/support/models/eye_bowl.rb +0 -1
- data/spec/support/models/face.rb +0 -1
- data/spec/support/models/favorite.rb +0 -1
- data/spec/support/models/filesystem.rb +0 -1
- data/spec/support/models/fire_hydrant.rb +0 -1
- data/spec/support/models/firefox.rb +0 -1
- data/spec/support/models/fish.rb +0 -1
- data/spec/support/models/folder.rb +0 -1
- data/spec/support/models/folder_item.rb +0 -1
- data/spec/support/models/fruits.rb +0 -1
- data/spec/support/models/game.rb +0 -1
- data/spec/support/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +0 -1
- data/spec/support/models/hole.rb +0 -1
- data/spec/support/models/home.rb +0 -1
- data/spec/support/models/house.rb +0 -1
- data/spec/support/models/html_writer.rb +0 -1
- data/spec/support/models/id_key.rb +0 -1
- data/spec/support/models/idnodef.rb +0 -1
- data/spec/support/models/image.rb +0 -1
- data/spec/support/models/implant.rb +0 -1
- data/spec/support/models/instrument.rb +0 -1
- data/spec/support/models/item.rb +0 -1
- data/spec/support/models/jar.rb +0 -1
- data/spec/support/models/kaleidoscope.rb +0 -1
- data/spec/support/models/kangaroo.rb +0 -1
- data/spec/support/models/label.rb +2 -2
- data/spec/support/models/language.rb +0 -1
- data/spec/support/models/lat_lng.rb +0 -1
- data/spec/support/models/league.rb +0 -1
- data/spec/support/models/learner.rb +0 -1
- data/spec/support/models/line_item.rb +0 -1
- data/spec/support/models/location.rb +0 -1
- data/spec/support/models/login.rb +0 -1
- data/spec/support/models/manufacturer.rb +0 -1
- data/spec/support/models/meat.rb +0 -1
- data/spec/support/models/membership.rb +1 -1
- data/spec/support/models/message.rb +0 -1
- data/spec/support/models/minim.rb +0 -1
- data/spec/support/models/mixed_drink.rb +0 -1
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/movie.rb +0 -1
- data/spec/support/models/my_hash.rb +0 -1
- data/spec/support/models/name.rb +0 -1
- data/spec/support/models/name_only.rb +0 -1
- data/spec/support/models/node.rb +0 -1
- data/spec/support/models/note.rb +0 -1
- data/spec/support/models/nut.rb +0 -1
- data/spec/support/models/odd.rb +0 -1
- data/spec/support/models/order.rb +2 -1
- data/spec/support/models/ordered_post.rb +1 -2
- data/spec/support/models/ordered_preference.rb +0 -1
- data/spec/support/models/oscar.rb +0 -1
- data/spec/support/models/other_owner_object.rb +0 -1
- data/spec/support/models/override.rb +0 -1
- data/spec/support/models/ownable.rb +0 -1
- data/spec/support/models/owner.rb +0 -1
- data/spec/support/models/pack.rb +0 -1
- data/spec/support/models/page.rb +0 -1
- data/spec/support/models/page_question.rb +0 -1
- data/spec/support/models/palette.rb +0 -1
- data/spec/support/models/parent.rb +0 -1
- data/spec/support/models/parent_doc.rb +0 -1
- data/spec/support/models/passport.rb +5 -1
- data/spec/support/models/patient.rb +0 -1
- data/spec/support/models/pdf_writer.rb +0 -1
- data/spec/support/models/pencil.rb +0 -1
- data/spec/support/models/person.rb +1 -1
- data/spec/support/models/pet.rb +0 -1
- data/spec/support/models/pet_owner.rb +0 -1
- data/spec/support/models/phone.rb +2 -2
- data/spec/support/models/piano.rb +0 -1
- data/spec/support/models/pizza.rb +0 -1
- data/spec/support/models/player.rb +0 -1
- data/spec/support/models/post.rb +0 -1
- data/spec/support/models/post_genre.rb +0 -1
- data/spec/support/models/powerup.rb +0 -1
- data/spec/support/models/preference.rb +0 -1
- data/spec/support/models/princess.rb +0 -1
- data/spec/support/models/product.rb +0 -1
- data/spec/support/models/profile.rb +0 -1
- data/spec/support/models/pronunciation.rb +0 -1
- data/spec/support/models/pub.rb +0 -1
- data/spec/support/models/publication/encyclopedia.rb +0 -1
- data/spec/support/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +0 -1
- data/spec/support/models/purchase.rb +0 -1
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/support/models/question.rb +0 -1
- data/spec/support/models/quiz.rb +0 -1
- data/spec/support/models/rating.rb +0 -1
- data/spec/support/models/record.rb +0 -1
- data/spec/support/models/registry.rb +0 -1
- data/spec/support/models/role.rb +0 -1
- data/spec/support/models/root_category.rb +0 -1
- data/spec/support/models/sandwich.rb +0 -1
- data/spec/support/models/scheduler.rb +0 -1
- data/spec/support/models/scribe.rb +0 -1
- data/spec/support/models/sealer.rb +0 -1
- data/spec/support/models/seat.rb +0 -1
- data/spec/support/models/seo.rb +0 -1
- data/spec/support/models/series.rb +0 -1
- data/spec/support/models/server.rb +0 -1
- data/spec/support/models/service.rb +0 -1
- data/spec/support/models/shape.rb +0 -1
- data/spec/support/models/shelf.rb +0 -1
- data/spec/support/models/shipment_address.rb +0 -1
- data/spec/support/models/shipping_container.rb +0 -1
- data/spec/support/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +0 -1
- data/spec/support/models/shop.rb +0 -1
- data/spec/support/models/short_agent.rb +0 -1
- data/spec/support/models/short_quiz.rb +0 -1
- data/spec/support/models/simple.rb +0 -1
- data/spec/support/models/slave.rb +0 -1
- data/spec/support/models/song.rb +0 -1
- data/spec/support/models/sound.rb +0 -1
- data/spec/support/models/spacer.rb +0 -1
- data/spec/support/models/square.rb +0 -1
- data/spec/support/models/staff.rb +0 -1
- data/spec/support/models/store_as_dup_test1.rb +0 -1
- data/spec/support/models/store_as_dup_test2.rb +0 -1
- data/spec/support/models/store_as_dup_test3.rb +0 -1
- data/spec/support/models/store_as_dup_test4.rb +0 -1
- data/spec/support/models/strategy.rb +0 -1
- data/spec/support/models/sub_item.rb +0 -1
- data/spec/support/models/subscription.rb +0 -1
- data/spec/support/models/survey.rb +0 -1
- data/spec/support/models/symptom.rb +0 -1
- data/spec/support/models/tag.rb +0 -1
- data/spec/support/models/target.rb +0 -1
- data/spec/support/models/template.rb +0 -1
- data/spec/support/models/thing.rb +0 -1
- data/spec/support/models/threadlocker.rb +0 -1
- data/spec/support/models/title.rb +0 -1
- data/spec/support/models/tool.rb +0 -1
- data/spec/support/models/topping.rb +0 -1
- data/spec/support/models/toy.rb +0 -1
- data/spec/support/models/track.rb +0 -1
- data/spec/support/models/translation.rb +0 -1
- data/spec/support/models/tree.rb +0 -1
- data/spec/support/models/truck.rb +0 -1
- data/spec/support/models/updatable.rb +0 -1
- data/spec/support/models/user.rb +0 -1
- data/spec/support/models/user_account.rb +0 -1
- data/spec/support/models/validation_callback.rb +0 -1
- data/spec/support/models/vehicle.rb +0 -1
- data/spec/support/models/version.rb +0 -1
- data/spec/support/models/vertex.rb +0 -1
- data/spec/support/models/vet_visit.rb +0 -1
- data/spec/support/models/video.rb +0 -1
- data/spec/support/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +0 -1
- data/spec/support/models/weapon.rb +0 -1
- data/spec/support/models/wiki_page.rb +0 -1
- data/spec/support/models/word.rb +0 -1
- data/spec/support/models/word_origin.rb +0 -1
- data/spec/support/models/writer.rb +0 -1
- 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 +0 -1
- data/spec/support/spec_config.rb +7 -1
- data.tar.gz.sig +0 -0
- metadata +51 -11
- metadata.gz.sig +0 -0
- data/lib/support/ruby_version.rb +0 -29
data/lib/mongoid/fields.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require "mongoid/fields/standard"
|
|
5
4
|
require "mongoid/fields/foreign_key"
|
|
@@ -16,8 +15,6 @@ module Mongoid
|
|
|
16
15
|
Boolean = Mongoid::Boolean
|
|
17
16
|
|
|
18
17
|
# For fields defined with symbols use the correct class.
|
|
19
|
-
#
|
|
20
|
-
# @since 4.0.0
|
|
21
18
|
TYPE_MAPPINGS = {
|
|
22
19
|
array: Array,
|
|
23
20
|
big_decimal: BigDecimal,
|
|
@@ -79,6 +76,42 @@ module Mongoid
|
|
|
79
76
|
end
|
|
80
77
|
nil
|
|
81
78
|
end
|
|
79
|
+
|
|
80
|
+
# Removes the _translations from the given field name. This is done only
|
|
81
|
+
# when there doesn't already exist a field name or relation with the
|
|
82
|
+
# same name (i.e. with the _translations suffix). This check for an
|
|
83
|
+
# existing field is done recursively
|
|
84
|
+
#
|
|
85
|
+
# @param [ String | Symbol ] name The name of the field to cleanse.
|
|
86
|
+
#
|
|
87
|
+
# @return [ Field ] The field name without _translations
|
|
88
|
+
def cleanse_localized_field_names(name)
|
|
89
|
+
name = database_field_name(name.to_s)
|
|
90
|
+
|
|
91
|
+
klass = self
|
|
92
|
+
[].tap do |res|
|
|
93
|
+
ar = name.split('.')
|
|
94
|
+
ar.each_with_index do |fn, i|
|
|
95
|
+
key = fn
|
|
96
|
+
unless klass.fields.key?(fn) || klass.relations.key?(fn)
|
|
97
|
+
if tr = fn.match(/(.*)_translations\z/)&.captures&.first
|
|
98
|
+
key = tr
|
|
99
|
+
else
|
|
100
|
+
key = fn
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
res.push(key)
|
|
105
|
+
|
|
106
|
+
if klass.fields.key?(fn)
|
|
107
|
+
res.push(ar.drop(i+1).join('.')) unless i == ar.length - 1
|
|
108
|
+
break
|
|
109
|
+
elsif klass.relations.key?(fn)
|
|
110
|
+
klass = klass.relations[key].klass
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end.join('.')
|
|
114
|
+
end
|
|
82
115
|
end
|
|
83
116
|
|
|
84
117
|
included do
|
|
@@ -110,8 +143,6 @@ module Mongoid
|
|
|
110
143
|
# model.apply_pre_processed_defaults
|
|
111
144
|
#
|
|
112
145
|
# @return [ Array<String ] The names of the non-proc defaults.
|
|
113
|
-
#
|
|
114
|
-
# @since 2.4.0
|
|
115
146
|
def apply_pre_processed_defaults
|
|
116
147
|
pre_processed_defaults.each do |name|
|
|
117
148
|
apply_default(name)
|
|
@@ -124,8 +155,6 @@ module Mongoid
|
|
|
124
155
|
# model.apply_post_processed_defaults
|
|
125
156
|
#
|
|
126
157
|
# @return [ Array<String ] The names of the proc defaults.
|
|
127
|
-
#
|
|
128
|
-
# @since 2.4.0
|
|
129
158
|
def apply_post_processed_defaults
|
|
130
159
|
post_processed_defaults.each do |name|
|
|
131
160
|
apply_default(name)
|
|
@@ -138,8 +167,6 @@ module Mongoid
|
|
|
138
167
|
# model.apply_default("name")
|
|
139
168
|
#
|
|
140
169
|
# @param [ String ] name The name of the field.
|
|
141
|
-
#
|
|
142
|
-
# @since 2.4.0
|
|
143
170
|
def apply_default(name)
|
|
144
171
|
unless attributes.key?(name)
|
|
145
172
|
if field = fields[name]
|
|
@@ -156,8 +183,6 @@ module Mongoid
|
|
|
156
183
|
#
|
|
157
184
|
# @example Apply all the defaults.
|
|
158
185
|
# model.apply_defaults
|
|
159
|
-
#
|
|
160
|
-
# @since 2.4.0
|
|
161
186
|
def apply_defaults
|
|
162
187
|
apply_pre_processed_defaults
|
|
163
188
|
apply_post_processed_defaults
|
|
@@ -169,11 +194,9 @@ module Mongoid
|
|
|
169
194
|
# method to automatically wrap params in JSON requests.
|
|
170
195
|
#
|
|
171
196
|
# @example Get the field names
|
|
172
|
-
#
|
|
197
|
+
# document.attribute_names
|
|
173
198
|
#
|
|
174
199
|
# @return [ Array<String> ] The field names
|
|
175
|
-
#
|
|
176
|
-
# @since 3.0.0
|
|
177
200
|
def attribute_names
|
|
178
201
|
self.class.attribute_names
|
|
179
202
|
end
|
|
@@ -187,8 +210,6 @@ module Mongoid
|
|
|
187
210
|
# @param [ String, Symbol ] name The name to get.
|
|
188
211
|
#
|
|
189
212
|
# @return [ String ] The name of the field as it's stored in the db.
|
|
190
|
-
#
|
|
191
|
-
# @since 3.0.7
|
|
192
213
|
def database_field_name(name)
|
|
193
214
|
self.class.database_field_name(name)
|
|
194
215
|
end
|
|
@@ -202,8 +223,6 @@ module Mongoid
|
|
|
202
223
|
# @param [ Object ] value The current value.
|
|
203
224
|
#
|
|
204
225
|
# @return [ true, false ] If we set the field lazily.
|
|
205
|
-
#
|
|
206
|
-
# @since 3.1.0
|
|
207
226
|
def lazy_settable?(field, value)
|
|
208
227
|
!frozen? && value.nil? && field.lazy?
|
|
209
228
|
end
|
|
@@ -225,7 +244,7 @@ module Mongoid
|
|
|
225
244
|
# Stores the provided block to be run when the option name specified is
|
|
226
245
|
# defined on a field.
|
|
227
246
|
#
|
|
228
|
-
# No assumptions are made about what
|
|
247
|
+
# No assumptions are made about what functionality the handler might
|
|
229
248
|
# perform, so it will always be called if the `option_name` key is
|
|
230
249
|
# provided in the field definition -- even if it is false or nil.
|
|
231
250
|
#
|
|
@@ -237,8 +256,6 @@ module Mongoid
|
|
|
237
256
|
# @param [ Symbol ] option_name the option name to match against
|
|
238
257
|
# @param [ Proc ] block the handler to execute when the option is
|
|
239
258
|
# provided.
|
|
240
|
-
#
|
|
241
|
-
# @since 2.1.0
|
|
242
259
|
def option(option_name, &block)
|
|
243
260
|
options[option_name] = block
|
|
244
261
|
end
|
|
@@ -250,11 +267,141 @@ module Mongoid
|
|
|
250
267
|
# # => { :required => #<Proc:0x00000100976b38> }
|
|
251
268
|
#
|
|
252
269
|
# @return [ Hash ] the option map
|
|
253
|
-
#
|
|
254
|
-
# @since 2.1.0
|
|
255
270
|
def options
|
|
256
271
|
@options ||= {}
|
|
257
272
|
end
|
|
273
|
+
|
|
274
|
+
# Traverse down the association tree and search for the field for the
|
|
275
|
+
# given key. To do this, split the key by '.' and for each part (meth) of
|
|
276
|
+
# the key:
|
|
277
|
+
#
|
|
278
|
+
# - If the meth is a field, yield the meth, field, and is_field as true.
|
|
279
|
+
# - If the meth is an association, update the klass to the association's
|
|
280
|
+
# klass, and yield the meth, klass, and is_field as false.
|
|
281
|
+
#
|
|
282
|
+
# The next iteration will use klass's fields and associations to continue
|
|
283
|
+
# traversing the tree.
|
|
284
|
+
#
|
|
285
|
+
# @param [ String ] key The key used to search the association tree.
|
|
286
|
+
# @param [ Hash ] fields The fields to begin the search with.
|
|
287
|
+
# @param [ Hash ] associations The associations to begin the search with.
|
|
288
|
+
# @param [ Hash ] aliased_associations The alaised associations to begin
|
|
289
|
+
# the search with.
|
|
290
|
+
# @param [ Proc ] block The block takes in three paramaters, the current
|
|
291
|
+
# meth, the field or the relation, and whether the second parameter is a
|
|
292
|
+
# field or not.
|
|
293
|
+
#
|
|
294
|
+
# @return [ Field ] The field found for the given key at the end of the
|
|
295
|
+
# search. This will return nil if the last thing found is an association
|
|
296
|
+
# or no field was found for the given key.
|
|
297
|
+
#
|
|
298
|
+
# @api private
|
|
299
|
+
def traverse_association_tree(key, fields, associations, aliased_associations)
|
|
300
|
+
klass = nil
|
|
301
|
+
field = nil
|
|
302
|
+
key.split('.').each_with_index do |meth, i|
|
|
303
|
+
fs = i == 0 ? fields : klass&.fields
|
|
304
|
+
rs = i == 0 ? associations : klass&.relations
|
|
305
|
+
as = i == 0 ? aliased_associations : klass&.aliased_associations
|
|
306
|
+
|
|
307
|
+
# Associations can possibly have two "keys", their name and their alias.
|
|
308
|
+
# The fields name is what is used to store it in the klass's relations
|
|
309
|
+
# and field hashes, and the alias is what's used to store that field
|
|
310
|
+
# in the database. The key inputted to this function is the aliased
|
|
311
|
+
# key. We can convert them back to their names by looking in the
|
|
312
|
+
# aliased_associations hash.
|
|
313
|
+
aliased = meth
|
|
314
|
+
if as && a = as.fetch(meth, nil)
|
|
315
|
+
aliased = a.to_s
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
field = nil
|
|
319
|
+
klass = nil
|
|
320
|
+
if fs && f = fs[aliased]
|
|
321
|
+
field = f
|
|
322
|
+
yield(meth, f, true) if block_given?
|
|
323
|
+
elsif rs && rel = rs[aliased]
|
|
324
|
+
klass = rel.klass
|
|
325
|
+
yield(meth, rel, false) if block_given?
|
|
326
|
+
else
|
|
327
|
+
yield(meth, nil, false) if block_given?
|
|
328
|
+
end
|
|
329
|
+
end
|
|
330
|
+
field
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
# Get the name of the provided field as it is stored in the database.
|
|
334
|
+
# Used in determining if the field is aliased or not. Recursively
|
|
335
|
+
# finds aliases for embedded documents and fields, delimited with
|
|
336
|
+
# period "." character.
|
|
337
|
+
#
|
|
338
|
+
# Note that this method returns the name of associations as they're
|
|
339
|
+
# stored in the database, whereas the `relations` hash uses their in-code
|
|
340
|
+
# aliases. In order to check for membership in the relations hash, you
|
|
341
|
+
# would first have to look up the string returned from this method in
|
|
342
|
+
# the aliased_associations hash.
|
|
343
|
+
#
|
|
344
|
+
# This method will not expand the alias of a belongs_to association that
|
|
345
|
+
# is not the last item. For example, if we had a School that has_many
|
|
346
|
+
# Students, and the field name passed was (from the Student's perspective):
|
|
347
|
+
#
|
|
348
|
+
# school._id
|
|
349
|
+
#
|
|
350
|
+
# The alias for a belongs_to association is that association's _id field.
|
|
351
|
+
# Therefore, expanding out this association would yield:
|
|
352
|
+
#
|
|
353
|
+
# school_id._id
|
|
354
|
+
#
|
|
355
|
+
# This is not the correct field name, because the intention here was not
|
|
356
|
+
# to get a property of the _id field. The intention was to get a property
|
|
357
|
+
# of the referenced document. Therefore, if a part of the name passed is
|
|
358
|
+
# a belongs_to association that is not the last part of the name, we
|
|
359
|
+
# won't expand its alias, and return:
|
|
360
|
+
#
|
|
361
|
+
# school._id
|
|
362
|
+
#
|
|
363
|
+
# If the belongs_to association is the last part of the name, we will
|
|
364
|
+
# pass back the _id field.
|
|
365
|
+
#
|
|
366
|
+
# @param [ String, Symbol ] name The name to get.
|
|
367
|
+
# @param [ Hash ] relations The associations.
|
|
368
|
+
# @param [ Hash ] alaiased_fields The aliased fields.
|
|
369
|
+
# @param [ Hash ] alaiased_associations The aliased associations.
|
|
370
|
+
#
|
|
371
|
+
# @return [ String ] The name of the field as stored in the database.
|
|
372
|
+
#
|
|
373
|
+
# @api private
|
|
374
|
+
def database_field_name(name, relations, aliased_fields, aliased_associations)
|
|
375
|
+
if Mongoid.broken_alias_handling
|
|
376
|
+
return nil unless name
|
|
377
|
+
normalized = name.to_s
|
|
378
|
+
aliased_fields[normalized] || normalized
|
|
379
|
+
else
|
|
380
|
+
return nil unless name.present?
|
|
381
|
+
key = name.to_s
|
|
382
|
+
segment, remaining = key.split('.', 2)
|
|
383
|
+
|
|
384
|
+
# Don't get the alias for the field when a belongs_to association
|
|
385
|
+
# is not the last item. Therefore, get the alias when one of the
|
|
386
|
+
# following is true:
|
|
387
|
+
# 1. This is the last item, i.e. there is no remaining.
|
|
388
|
+
# 2. It is not an association.
|
|
389
|
+
# 3. It is not a belongs association
|
|
390
|
+
if !remaining || !relations.key?(segment) || !relations[segment].is_a?(Association::Referenced::BelongsTo)
|
|
391
|
+
segment = aliased_fields[segment]&.dup || segment
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
return segment unless remaining
|
|
395
|
+
|
|
396
|
+
relation = relations[aliased_associations[segment] || segment]
|
|
397
|
+
if relation
|
|
398
|
+
k = relation.klass
|
|
399
|
+
"#{segment}.#{database_field_name(remaining, k.relations, k.aliased_fields, k.aliased_associations)}"
|
|
400
|
+
else
|
|
401
|
+
"#{segment}.#{remaining}"
|
|
402
|
+
end
|
|
403
|
+
end
|
|
404
|
+
end
|
|
258
405
|
end
|
|
259
406
|
|
|
260
407
|
module ClassMethods
|
|
@@ -268,8 +415,6 @@ module Mongoid
|
|
|
268
415
|
# Model.attribute_names
|
|
269
416
|
#
|
|
270
417
|
# @return [ Array<String> ] The field names
|
|
271
|
-
#
|
|
272
|
-
# @since 3.0.0
|
|
273
418
|
def attribute_names
|
|
274
419
|
fields.keys
|
|
275
420
|
end
|
|
@@ -277,18 +422,11 @@ module Mongoid
|
|
|
277
422
|
# Get the name of the provided field as it is stored in the database.
|
|
278
423
|
# Used in determining if the field is aliased or not.
|
|
279
424
|
#
|
|
280
|
-
# @example Get the database field name.
|
|
281
|
-
# Model.database_field_name(:authorization)
|
|
282
|
-
#
|
|
283
425
|
# @param [ String, Symbol ] name The name to get.
|
|
284
426
|
#
|
|
285
427
|
# @return [ String ] The name of the field as it's stored in the db.
|
|
286
|
-
#
|
|
287
|
-
# @since 3.0.7
|
|
288
428
|
def database_field_name(name)
|
|
289
|
-
|
|
290
|
-
normalized = name.to_s
|
|
291
|
-
aliased_fields[normalized] || normalized
|
|
429
|
+
Fields.database_field_name(name, relations, aliased_fields, aliased_associations)
|
|
292
430
|
end
|
|
293
431
|
|
|
294
432
|
# Defines all the fields that are accessible on the Document
|
|
@@ -296,14 +434,14 @@ module Mongoid
|
|
|
296
434
|
# added as an instance method to the Document.
|
|
297
435
|
#
|
|
298
436
|
# @example Define a field.
|
|
299
|
-
# field :score, :
|
|
437
|
+
# field :score, type: Integer, default: 0
|
|
300
438
|
#
|
|
301
439
|
# @param [ Symbol ] name The name of the field.
|
|
302
440
|
# @param [ Hash ] options The options to pass to the field.
|
|
303
441
|
#
|
|
304
|
-
# @option options [ Class ] :type The type of the field.
|
|
442
|
+
# @option options [ Class | Symbol | String ] :type The type of the field.
|
|
305
443
|
# @option options [ String ] :label The label for the field.
|
|
306
|
-
# @option options [ Object
|
|
444
|
+
# @option options [ Object | Proc ] :default The field's default.
|
|
307
445
|
#
|
|
308
446
|
# @return [ Field ] The generated field
|
|
309
447
|
def field(name, options = {})
|
|
@@ -325,8 +463,6 @@ module Mongoid
|
|
|
325
463
|
# @param [ Class ] type The new type of field.
|
|
326
464
|
#
|
|
327
465
|
# @return [ Serializable ] The new field.
|
|
328
|
-
#
|
|
329
|
-
# @since 2.1.0
|
|
330
466
|
def replace_field(name, type)
|
|
331
467
|
remove_defaults(name)
|
|
332
468
|
add_field(name, fields[name].options.merge(type: type))
|
|
@@ -339,12 +475,27 @@ module Mongoid
|
|
|
339
475
|
# person.using_object_ids?
|
|
340
476
|
#
|
|
341
477
|
# @return [ true, false ] If the class uses BSON::ObjectIds for the id.
|
|
342
|
-
#
|
|
343
|
-
# @since 1.0.0
|
|
344
478
|
def using_object_ids?
|
|
345
479
|
fields["_id"].object_id_field?
|
|
346
480
|
end
|
|
347
481
|
|
|
482
|
+
# Traverse down the association tree and search for the field for the
|
|
483
|
+
# given key.
|
|
484
|
+
#
|
|
485
|
+
# @param [ String ] key The key used to search the association tree.
|
|
486
|
+
# @param [ Proc ] block The block takes in three paramaters, the current
|
|
487
|
+
# meth, the field or the relation, and whether the second parameter is a
|
|
488
|
+
# field or not.
|
|
489
|
+
#
|
|
490
|
+
# @return [ Field ] The field found for the given key at the end of the
|
|
491
|
+
# search. This will return nil if the last thing found is an association
|
|
492
|
+
# or no field was found for the given key.
|
|
493
|
+
#
|
|
494
|
+
# @api private
|
|
495
|
+
def traverse_association_tree(key, &block)
|
|
496
|
+
Fields.traverse_association_tree(key, fields, relations, aliased_associations, &block)
|
|
497
|
+
end
|
|
498
|
+
|
|
348
499
|
protected
|
|
349
500
|
|
|
350
501
|
# Add the defaults to the model. This breaks them up between ones that
|
|
@@ -354,8 +505,6 @@ module Mongoid
|
|
|
354
505
|
# Model.add_defaults(field)
|
|
355
506
|
#
|
|
356
507
|
# @param [ Field ] field The field to add for.
|
|
357
|
-
#
|
|
358
|
-
# @since 2.4.0
|
|
359
508
|
def add_defaults(field)
|
|
360
509
|
default, name = field.default_val, field.name.to_s
|
|
361
510
|
remove_defaults(name)
|
|
@@ -424,8 +573,6 @@ module Mongoid
|
|
|
424
573
|
# @param [ Symbol ] name The name of the field.
|
|
425
574
|
# @param [ Symbol ] meth The name of the accessor.
|
|
426
575
|
# @param [ Hash ] options The options.
|
|
427
|
-
#
|
|
428
|
-
# @since 2.0.0
|
|
429
576
|
def create_accessors(name, meth, options = {})
|
|
430
577
|
field = fields[name]
|
|
431
578
|
|
|
@@ -449,8 +596,6 @@ module Mongoid
|
|
|
449
596
|
# @param [ String ] name The name of the attribute.
|
|
450
597
|
# @param [ String ] meth The name of the method.
|
|
451
598
|
# @param [ Field ] field The field.
|
|
452
|
-
#
|
|
453
|
-
# @since 2.4.0
|
|
454
599
|
def create_field_getter(name, meth, field)
|
|
455
600
|
generated_methods.module_eval do
|
|
456
601
|
re_define_method(meth) do
|
|
@@ -475,8 +620,6 @@ module Mongoid
|
|
|
475
620
|
#
|
|
476
621
|
# @param [ String ] name The name of the attribute.
|
|
477
622
|
# @param [ String ] meth The name of the method.
|
|
478
|
-
#
|
|
479
|
-
# @since 3.1.0
|
|
480
623
|
def create_field_getter_before_type_cast(name, meth)
|
|
481
624
|
generated_methods.module_eval do
|
|
482
625
|
re_define_method("#{meth}_before_type_cast") do
|
|
@@ -497,8 +640,6 @@ module Mongoid
|
|
|
497
640
|
# @param [ String ] name The name of the attribute.
|
|
498
641
|
# @param [ String ] meth The name of the method.
|
|
499
642
|
# @param [ Field ] field The field.
|
|
500
|
-
#
|
|
501
|
-
# @since 2.4.0
|
|
502
643
|
def create_field_setter(name, meth, field)
|
|
503
644
|
generated_methods.module_eval do
|
|
504
645
|
re_define_method("#{meth}=") do |value|
|
|
@@ -518,8 +659,6 @@ module Mongoid
|
|
|
518
659
|
#
|
|
519
660
|
# @param [ String ] name The name of the attribute.
|
|
520
661
|
# @param [ String ] meth The name of the method.
|
|
521
|
-
#
|
|
522
|
-
# @since 2.4.0
|
|
523
662
|
def create_field_check(name, meth)
|
|
524
663
|
generated_methods.module_eval do
|
|
525
664
|
re_define_method("#{meth}?") do
|
|
@@ -536,8 +675,6 @@ module Mongoid
|
|
|
536
675
|
#
|
|
537
676
|
# @param [ String ] name The name of the attribute.
|
|
538
677
|
# @param [ String ] meth The name of the method.
|
|
539
|
-
#
|
|
540
|
-
# @since 2.4.0
|
|
541
678
|
def create_translations_getter(name, meth)
|
|
542
679
|
generated_methods.module_eval do
|
|
543
680
|
re_define_method("#{meth}_translations") do
|
|
@@ -556,8 +693,6 @@ module Mongoid
|
|
|
556
693
|
# @param [ String ] name The name of the attribute.
|
|
557
694
|
# @param [ String ] meth The name of the method.
|
|
558
695
|
# @param [ Field ] field The field.
|
|
559
|
-
#
|
|
560
|
-
# @since 2.4.0
|
|
561
696
|
def create_translations_setter(name, meth, field)
|
|
562
697
|
generated_methods.module_eval do
|
|
563
698
|
re_define_method("#{meth}_translations=") do |value|
|
|
@@ -579,8 +714,6 @@ module Mongoid
|
|
|
579
714
|
# Person.generated_methods
|
|
580
715
|
#
|
|
581
716
|
# @return [ Module ] The module of generated methods.
|
|
582
|
-
#
|
|
583
|
-
# @since 2.0.0
|
|
584
717
|
def generated_methods
|
|
585
718
|
@generated_methods ||= begin
|
|
586
719
|
mod = Module.new
|
|
@@ -595,8 +728,6 @@ module Mongoid
|
|
|
595
728
|
# Model.remove_defaults(name)
|
|
596
729
|
#
|
|
597
730
|
# @param [ String ] name The field name.
|
|
598
|
-
#
|
|
599
|
-
# @since 2.4.0
|
|
600
731
|
def remove_defaults(name)
|
|
601
732
|
pre_processed_defaults.delete_one(name)
|
|
602
733
|
post_processed_defaults.delete_one(name)
|
data/lib/mongoid/findable.rb
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
|
|
6
5
|
# This module defines the finder methods that hang off the document at the
|
|
7
6
|
# class level.
|
|
8
|
-
#
|
|
9
|
-
# @since 4.0.0
|
|
10
7
|
module Findable
|
|
11
8
|
extend Forwardable
|
|
12
9
|
|
|
@@ -44,9 +41,12 @@ module Mongoid
|
|
|
44
41
|
:pluck,
|
|
45
42
|
:read,
|
|
46
43
|
:sum,
|
|
44
|
+
:take,
|
|
45
|
+
:take!,
|
|
46
|
+
:tally,
|
|
47
47
|
:text_search,
|
|
48
48
|
:update,
|
|
49
|
-
:update_all
|
|
49
|
+
:update_all,
|
|
50
50
|
|
|
51
51
|
# Returns a count of records in the database.
|
|
52
52
|
# If you want to specify conditions use where.
|
|
@@ -149,8 +149,6 @@ module Mongoid
|
|
|
149
149
|
# and Mongoid.raise_not_found_error is true.
|
|
150
150
|
#
|
|
151
151
|
# @return [ Document, nil ] A matching document.
|
|
152
|
-
#
|
|
153
|
-
# @since 3.0.0
|
|
154
152
|
def find_by(attrs = {})
|
|
155
153
|
result = where(attrs).find_first
|
|
156
154
|
if result.nil? && Mongoid.raise_not_found_error
|
|
@@ -184,9 +182,15 @@ module Mongoid
|
|
|
184
182
|
# @example Find the first document.
|
|
185
183
|
# Person.first
|
|
186
184
|
#
|
|
185
|
+
# @param [ Integer | Hash ] limit_or_opts The number of documents to
|
|
186
|
+
# return, or a hash of options.
|
|
187
|
+
#
|
|
188
|
+
# @option limit_or_opts [ :none ] :id_sort This option is deprecated.
|
|
189
|
+
# Don't apply a sort on _id if no other sort is defined on the criteria.
|
|
190
|
+
#
|
|
187
191
|
# @return [ Document ] The first matching document.
|
|
188
|
-
def first
|
|
189
|
-
with_default_scope.first
|
|
192
|
+
def first(limit_or_opts = nil)
|
|
193
|
+
with_default_scope.first(limit_or_opts)
|
|
190
194
|
end
|
|
191
195
|
alias :one :first
|
|
192
196
|
|
|
@@ -195,9 +199,15 @@ module Mongoid
|
|
|
195
199
|
# @example Find the last document.
|
|
196
200
|
# Person.last
|
|
197
201
|
#
|
|
202
|
+
# @param [ Integer | Hash ] limit_or_opts The number of documents to
|
|
203
|
+
# return, or a hash of options.
|
|
204
|
+
#
|
|
205
|
+
# @option limit_or_opts [ :none ] :id_sort This option is deprecated.
|
|
206
|
+
# Don't apply a sort on _id if no other sort is defined on the criteria.
|
|
207
|
+
#
|
|
198
208
|
# @return [ Document ] The last matching document.
|
|
199
|
-
def last
|
|
200
|
-
with_default_scope.last
|
|
209
|
+
def last(limit_or_opts = nil)
|
|
210
|
+
with_default_scope.last(limit_or_opts)
|
|
201
211
|
end
|
|
202
212
|
end
|
|
203
213
|
end
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Indexable
|
|
6
5
|
|
|
7
6
|
# Encapsulates behavior around an index specification.
|
|
8
|
-
#
|
|
9
|
-
# @since 4.0.0
|
|
10
7
|
class Specification
|
|
11
8
|
|
|
12
9
|
# The mappings of nice Ruby-style names to the corresponding driver
|
|
13
10
|
# option name.
|
|
14
|
-
#
|
|
15
|
-
# @since 4.0.0
|
|
16
11
|
MAPPINGS = {
|
|
17
12
|
expire_after_seconds: :expire_after
|
|
18
13
|
}
|
|
@@ -33,8 +28,6 @@ module Mongoid
|
|
|
33
28
|
# @param [ Specification ] other The spec to compare against.
|
|
34
29
|
#
|
|
35
30
|
# @return [ true, false ] If the specs are equal.
|
|
36
|
-
#
|
|
37
|
-
# @since 4.0.0
|
|
38
31
|
def ==(other)
|
|
39
32
|
fields == other.fields && key == other.key
|
|
40
33
|
end
|
|
@@ -47,8 +40,6 @@ module Mongoid
|
|
|
47
40
|
# @param [ Class ] klass The class the index is defined on.
|
|
48
41
|
# @param [ Hash ] key The hash of name/direction pairs.
|
|
49
42
|
# @param [ Hash ] opts the index options.
|
|
50
|
-
#
|
|
51
|
-
# @since 4.0.0
|
|
52
43
|
def initialize(klass, key, opts = nil)
|
|
53
44
|
options = opts || {}
|
|
54
45
|
Validators::Options.validate(klass, key, options)
|
|
@@ -64,8 +55,6 @@ module Mongoid
|
|
|
64
55
|
# specification.name
|
|
65
56
|
#
|
|
66
57
|
# @return [ String ] name The index name.
|
|
67
|
-
#
|
|
68
|
-
# @since 5.0.2
|
|
69
58
|
def name
|
|
70
59
|
@name ||= key.reduce([]) do |n, (k,v)|
|
|
71
60
|
n << "#{k}_#{v}"
|
|
@@ -84,8 +73,6 @@ module Mongoid
|
|
|
84
73
|
# @param [ Hash ] key The index key(s).
|
|
85
74
|
#
|
|
86
75
|
# @return [ Hash ] The normalized specification.
|
|
87
|
-
#
|
|
88
|
-
# @since 4.0.0
|
|
89
76
|
def normalize_key(key)
|
|
90
77
|
normalized = {}
|
|
91
78
|
key.each_pair do |name, direction|
|
|
@@ -104,8 +91,6 @@ module Mongoid
|
|
|
104
91
|
# @param [ Hash ] opts The index options.
|
|
105
92
|
#
|
|
106
93
|
# @return [ Hash ] The normalized options.
|
|
107
|
-
#
|
|
108
|
-
# @since 4.0.0
|
|
109
94
|
def normalize_options(opts)
|
|
110
95
|
options = {}
|
|
111
96
|
opts.each_pair do |option, value|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Indexable
|
|
@@ -53,8 +52,6 @@ module Mongoid
|
|
|
53
52
|
# @param [ Hash ] options The index options.
|
|
54
53
|
#
|
|
55
54
|
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
56
|
-
#
|
|
57
|
-
# @since 3.0.0
|
|
58
55
|
def validate(klass, spec, options)
|
|
59
56
|
validate_spec(klass, spec, options)
|
|
60
57
|
validate_options(klass, spec, options)
|
|
@@ -74,8 +71,6 @@ module Mongoid
|
|
|
74
71
|
# @param [ Hash ] options The index options.
|
|
75
72
|
#
|
|
76
73
|
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
77
|
-
#
|
|
78
|
-
# @since 3.0.0
|
|
79
74
|
def validate_options(klass, spec, options)
|
|
80
75
|
options.each_pair do |name, value|
|
|
81
76
|
unless VALID_OPTIONS.include?(name)
|
|
@@ -96,8 +91,6 @@ module Mongoid
|
|
|
96
91
|
# @param [ Hash ] options The index options.
|
|
97
92
|
#
|
|
98
93
|
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
99
|
-
#
|
|
100
|
-
# @since 3.0.0
|
|
101
94
|
def validate_spec(klass, spec, options)
|
|
102
95
|
raise Errors::InvalidIndex.new(klass, spec, options) if !spec.is_a?(::Hash)
|
|
103
96
|
spec.each_pair do |name, value|
|
data/lib/mongoid/indexable.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require "mongoid/indexable/specification"
|
|
5
4
|
require "mongoid/indexable/validators/options"
|
|
@@ -8,8 +7,6 @@ require "ostruct"
|
|
|
8
7
|
module Mongoid
|
|
9
8
|
|
|
10
9
|
# Encapsulates behavior around defining indexes.
|
|
11
|
-
#
|
|
12
|
-
# @since 4.0.0
|
|
13
10
|
module Indexable
|
|
14
11
|
extend ActiveSupport::Concern
|
|
15
12
|
|
|
@@ -26,8 +23,6 @@ module Mongoid
|
|
|
26
23
|
# Person.create_indexes
|
|
27
24
|
#
|
|
28
25
|
# @return [ true ] If the operation succeeded.
|
|
29
|
-
#
|
|
30
|
-
# @since 1.0.0
|
|
31
26
|
def create_indexes
|
|
32
27
|
return unless index_specifications
|
|
33
28
|
|
|
@@ -52,8 +47,6 @@ module Mongoid
|
|
|
52
47
|
# Person.remove_indexes
|
|
53
48
|
#
|
|
54
49
|
# @return [ true ] If the operation succeeded.
|
|
55
|
-
#
|
|
56
|
-
# @since 3.0.0
|
|
57
50
|
def remove_indexes
|
|
58
51
|
indexed_database_names.each do |database|
|
|
59
52
|
with(database: database) do |klass|
|
|
@@ -79,8 +72,6 @@ module Mongoid
|
|
|
79
72
|
# Person.add_indexes
|
|
80
73
|
#
|
|
81
74
|
# @return [ true ] If the operation succeeded.
|
|
82
|
-
#
|
|
83
|
-
# @since 1.0.0
|
|
84
75
|
def add_indexes
|
|
85
76
|
if hereditary? && !index_keys.include?(self.discriminator_key.to_sym => 1)
|
|
86
77
|
index({ self.discriminator_key.to_sym => 1 }, unique: false, background: true)
|
|
@@ -97,12 +88,10 @@ module Mongoid
|
|
|
97
88
|
# index({ name: 1 }, { background: true })
|
|
98
89
|
# end
|
|
99
90
|
#
|
|
100
|
-
# @param [
|
|
91
|
+
# @param [ Hash ] spec The index spec.
|
|
101
92
|
# @param [ Hash ] options The index options.
|
|
102
93
|
#
|
|
103
94
|
# @return [ Hash ] The index options.
|
|
104
|
-
#
|
|
105
|
-
# @since 1.0.0
|
|
106
95
|
def index(spec, options = nil)
|
|
107
96
|
specification = Specification.new(self, spec, options)
|
|
108
97
|
if !index_specifications.include?(specification)
|
|
@@ -119,8 +108,6 @@ module Mongoid
|
|
|
119
108
|
# @param [ String ] index_name The index name.
|
|
120
109
|
#
|
|
121
110
|
# @return [ Specification ] The found specification.
|
|
122
|
-
#
|
|
123
|
-
# @since 4.0.0
|
|
124
111
|
def index_specification(index_hash, index_name = nil)
|
|
125
112
|
index = OpenStruct.new(fields: index_hash.keys, key: index_hash)
|
|
126
113
|
index_specifications.detect do |spec|
|
|
@@ -139,8 +126,6 @@ module Mongoid
|
|
|
139
126
|
# Model.indexed_database_names
|
|
140
127
|
#
|
|
141
128
|
# @return [ Array<String> ] The names.
|
|
142
|
-
#
|
|
143
|
-
# @since 3.1.0
|
|
144
129
|
def indexed_database_names
|
|
145
130
|
index_specifications.map do |spec|
|
|
146
131
|
spec.options[:database] || database_name
|
|
@@ -155,8 +140,6 @@ module Mongoid
|
|
|
155
140
|
# Model.index_keys
|
|
156
141
|
#
|
|
157
142
|
# @return [ Array<Hash> ] The specification keys.
|
|
158
|
-
#
|
|
159
|
-
# @since 4.0.0
|
|
160
143
|
def index_keys
|
|
161
144
|
index_specifications.map(&:key)
|
|
162
145
|
end
|