mongoid 7.1.1 → 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 +20 -20
- data/README.md +15 -8
- data/Rakefile +61 -5
- data/lib/config/locales/en.yml +162 -56
- data/lib/mongoid/association/accessors.rb +89 -40
- data/lib/mongoid/association/bindable.rb +50 -23
- data/lib/mongoid/association/builders.rb +5 -12
- data/lib/mongoid/association/constrainable.rb +1 -5
- data/lib/mongoid/association/depending.rb +5 -17
- data/lib/mongoid/association/eager_loadable.rb +29 -10
- data/lib/mongoid/association/embedded/batchable.rb +64 -52
- data/lib/mongoid/association/embedded/cyclic.rb +3 -12
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -9
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -5
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -16
- data/lib/mongoid/association/embedded/embedded_in.rb +4 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -7
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +110 -92
- data/lib/mongoid/association/embedded/embeds_many.rb +4 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -8
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +50 -19
- data/lib/mongoid/association/embedded/embeds_one.rb +5 -31
- data/lib/mongoid/association/embedded.rb +0 -1
- data/lib/mongoid/association/macros.rb +27 -5
- data/lib/mongoid/association/many.rb +14 -27
- data/lib/mongoid/association/marshalable.rb +0 -5
- data/lib/mongoid/association/nested/many.rb +6 -16
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -13
- data/lib/mongoid/association/nested/one.rb +48 -23
- data/lib/mongoid/association/nested.rb +0 -3
- data/lib/mongoid/association/one.rb +2 -11
- data/lib/mongoid/association/options.rb +9 -42
- data/lib/mongoid/association/proxy.rb +22 -27
- data/lib/mongoid/association/referenced/auto_save.rb +6 -14
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -8
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -19
- data/lib/mongoid/association/referenced/belongs_to.rb +11 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +12 -25
- data/lib/mongoid/association/referenced/eager.rb +5 -26
- 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 +81 -51
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +17 -41
- 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 +438 -461
- data/lib/mongoid/association/referenced/has_many/proxy.rb +58 -84
- data/lib/mongoid/association/referenced/has_many.rb +15 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
- data/lib/mongoid/association/referenced/has_one/buildable.rb +12 -5
- data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +7 -22
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -16
- data/lib/mongoid/association/referenced/has_one.rb +12 -35
- data/lib/mongoid/association/referenced/syncable.rb +4 -21
- data/lib/mongoid/association/referenced.rb +0 -1
- data/lib/mongoid/association/reflections.rb +4 -5
- data/lib/mongoid/association/relatable.rb +46 -71
- data/lib/mongoid/association.rb +5 -22
- data/lib/mongoid/atomic/modifiers.rb +7 -54
- data/lib/mongoid/atomic/paths/embedded/many.rb +19 -5
- 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 +40 -47
- data/lib/mongoid/attributes/dynamic.rb +5 -22
- data/lib/mongoid/attributes/nested.rb +6 -11
- data/lib/mongoid/attributes/processing.rb +11 -21
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -8
- data/lib/mongoid/attributes.rb +82 -88
- data/lib/mongoid/cacheable.rb +4 -9
- data/lib/mongoid/changeable.rb +148 -69
- data/lib/mongoid/clients/factory.rb +41 -17
- data/lib/mongoid/clients/options.rb +13 -14
- data/lib/mongoid/clients/sessions.rb +8 -11
- data/lib/mongoid/clients/storage_options.rb +7 -17
- data/lib/mongoid/clients/validators/storage.rb +3 -24
- data/lib/mongoid/clients/validators.rb +0 -1
- data/lib/mongoid/clients.rb +1 -10
- data/lib/mongoid/collection_configurable.rb +58 -0
- data/lib/mongoid/composable.rb +3 -7
- data/lib/mongoid/config/defaults.rb +60 -0
- data/lib/mongoid/config/environment.rb +28 -5
- data/lib/mongoid/config/options.rb +0 -11
- data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
- data/lib/mongoid/config/validators/client.rb +6 -23
- data/lib/mongoid/config/validators/option.rb +0 -3
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config.rb +183 -39
- data/lib/mongoid/contextual/aggregable/memory.rb +37 -26
- data/lib/mongoid/contextual/aggregable/mongo.rb +29 -32
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +7 -27
- data/lib/mongoid/contextual/command.rb +0 -5
- data/lib/mongoid/contextual/geo_near.rb +8 -41
- data/lib/mongoid/contextual/map_reduce.rb +2 -33
- data/lib/mongoid/contextual/memory.rb +383 -79
- data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
- data/lib/mongoid/contextual/mongo.rb +636 -283
- data/lib/mongoid/contextual/none.rb +262 -31
- data/lib/mongoid/contextual/queryable.rb +1 -4
- data/lib/mongoid/contextual.rb +14 -7
- data/lib/mongoid/copyable.rb +39 -16
- data/lib/mongoid/criteria/findable.rb +9 -19
- data/lib/mongoid/criteria/includable.rb +27 -31
- data/lib/mongoid/criteria/inspectable.rb +0 -3
- data/lib/mongoid/criteria/marshalable.rb +10 -7
- data/lib/mongoid/criteria/modifiable.rb +2 -20
- data/lib/mongoid/criteria/options.rb +0 -3
- data/lib/mongoid/criteria/permission.rb +1 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -15
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -25
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -40
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -7
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -6
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -6
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -40
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -20
- data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +46 -16
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -18
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -31
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -21
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +16 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -5
- data/lib/mongoid/criteria/queryable/key.rb +6 -19
- data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +123 -38
- data/lib/mongoid/criteria/queryable/optional.rb +11 -62
- data/lib/mongoid/criteria/queryable/options.rb +2 -21
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -14
- data/lib/mongoid/criteria/queryable/selectable.rb +138 -125
- data/lib/mongoid/criteria/queryable/selector.rb +94 -30
- data/lib/mongoid/criteria/queryable/smash.rb +40 -18
- data/lib/mongoid/criteria/queryable/storable.rb +14 -10
- data/lib/mongoid/criteria/queryable.rb +11 -13
- data/lib/mongoid/criteria/scopable.rb +27 -21
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +88 -108
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +149 -99
- data/lib/mongoid/equality.rb +32 -16
- data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
- data/lib/mongoid/errors/callback.rb +0 -3
- data/lib/mongoid/errors/create_collection_failure.rb +33 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
- data/lib/mongoid/errors/delete_restriction.rb +8 -12
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
- data/lib/mongoid/errors/document_not_found.rb +33 -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 +0 -3
- data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +0 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +1 -4
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -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 +6 -7
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +0 -3
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_find.rb +0 -3
- data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
- 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 +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -8
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -4
- 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 +1 -4
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +0 -3
- 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 +4 -13
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
- data/lib/mongoid/errors/no_client_config.rb +2 -5
- data/lib/mongoid/errors/no_client_database.rb +1 -4
- data/lib/mongoid/errors/no_client_hosts.rb +1 -4
- data/lib/mongoid/errors/no_clients_config.rb +0 -3
- data/lib/mongoid/errors/no_default_client.rb +1 -4
- 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 +1 -4
- 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 +1 -2
- data/lib/mongoid/errors/unknown_attribute.rb +1 -4
- 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 +15 -4
- data/lib/mongoid/evolvable.rb +1 -4
- data/lib/mongoid/extensions/array.rb +12 -36
- data/lib/mongoid/extensions/big_decimal.rb +33 -21
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -6
- data/lib/mongoid/extensions/date.rb +26 -29
- data/lib/mongoid/extensions/date_time.rb +1 -10
- data/lib/mongoid/extensions/decimal128.rb +0 -5
- data/lib/mongoid/extensions/false_class.rb +3 -8
- data/lib/mongoid/extensions/float.rb +7 -11
- data/lib/mongoid/extensions/hash.rb +19 -37
- data/lib/mongoid/extensions/integer.rb +7 -13
- data/lib/mongoid/extensions/module.rb +1 -4
- data/lib/mongoid/extensions/nil_class.rb +0 -5
- data/lib/mongoid/extensions/object.rb +11 -48
- data/lib/mongoid/extensions/object_id.rb +0 -7
- data/lib/mongoid/extensions/range.rb +40 -20
- data/lib/mongoid/extensions/regexp.rb +12 -8
- data/lib/mongoid/extensions/set.rb +11 -11
- data/lib/mongoid/extensions/string.rb +12 -52
- data/lib/mongoid/extensions/symbol.rb +4 -22
- data/lib/mongoid/extensions/time.rb +28 -26
- data/lib/mongoid/extensions/time_with_zone.rb +14 -11
- data/lib/mongoid/extensions/true_class.rb +3 -8
- data/lib/mongoid/extensions.rb +17 -3
- data/lib/mongoid/factory.rb +80 -16
- data/lib/mongoid/fields/foreign_key.rb +11 -25
- data/lib/mongoid/fields/localized.rb +19 -15
- data/lib/mongoid/fields/standard.rb +17 -40
- data/lib/mongoid/fields/validators/macro.rb +25 -24
- data/lib/mongoid/fields/validators.rb +0 -1
- data/lib/mongoid/fields.rb +346 -75
- data/lib/mongoid/findable.rb +107 -31
- data/lib/mongoid/indexable/specification.rb +2 -17
- data/lib/mongoid/indexable/validators/options.rb +6 -9
- data/lib/mongoid/indexable.rb +3 -20
- data/lib/mongoid/inspectable.rb +2 -11
- data/lib/mongoid/interceptable.rb +79 -41
- data/lib/mongoid/loggable.rb +0 -9
- data/lib/mongoid/matchable.rb +2 -155
- 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 +20 -29
- data/lib/mongoid/persistable/deletable.rb +4 -22
- data/lib/mongoid/persistable/destroyable.rb +9 -10
- 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 +4 -8
- data/lib/mongoid/persistable/renamable.rb +0 -5
- data/lib/mongoid/persistable/savable.rb +13 -8
- data/lib/mongoid/persistable/settable.rb +0 -5
- data/lib/mongoid/persistable/unsettable.rb +2 -7
- data/lib/mongoid/persistable/updatable.rb +96 -29
- data/lib/mongoid/persistable/upsertable.rb +20 -8
- data/lib/mongoid/persistable.rb +6 -26
- data/lib/mongoid/persistence_context.rb +71 -43
- data/lib/mongoid/positional.rb +0 -5
- data/lib/mongoid/query_cache.rb +16 -236
- data/lib/mongoid/railtie.rb +0 -15
- data/lib/mongoid/railties/controller_runtime.rb +1 -2
- data/lib/mongoid/railties/database.rake +7 -2
- data/lib/mongoid/reloadable.rb +17 -20
- data/lib/mongoid/scopable.rb +32 -56
- data/lib/mongoid/selectable.rb +5 -17
- data/lib/mongoid/serializable.rb +11 -22
- data/lib/mongoid/shardable.rb +49 -16
- data/lib/mongoid/stateful.rb +57 -19
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -0
- data/lib/mongoid/tasks/database.rb +59 -11
- data/lib/mongoid/threaded/lifecycle.rb +5 -26
- data/lib/mongoid/threaded.rb +42 -67
- data/lib/mongoid/timestamps/created/short.rb +0 -1
- data/lib/mongoid/timestamps/created.rb +1 -2
- 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 +2 -5
- data/lib/mongoid/timestamps.rb +0 -1
- data/lib/mongoid/touchable.rb +34 -13
- data/lib/mongoid/traversable.rb +181 -59
- data/lib/mongoid/utils.rb +22 -0
- data/lib/mongoid/validatable/associated.rb +1 -4
- data/lib/mongoid/validatable/format.rb +0 -1
- data/lib/mongoid/validatable/length.rb +0 -1
- data/lib/mongoid/validatable/localizable.rb +1 -4
- data/lib/mongoid/validatable/macros.rb +5 -14
- data/lib/mongoid/validatable/presence.rb +6 -13
- data/lib/mongoid/validatable/queryable.rb +0 -3
- data/lib/mongoid/validatable/uniqueness.rb +26 -40
- data/lib/mongoid/validatable.rb +9 -27
- data/lib/mongoid/version.rb +1 -2
- data/lib/mongoid/warnings.rb +44 -0
- data/lib/mongoid.rb +42 -18
- data/lib/rails/generators/mongoid/config/config_generator.rb +8 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -6
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +0 -1
- data/lib/rails/mongoid.rb +0 -3
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +16 -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 +18 -1
- data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
- data/spec/integration/associations/embedded_spec.rb +163 -1
- 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 +9 -1
- data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
- 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 +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 +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 +51 -0
- data/spec/integration/criteria/logical_spec.rb +43 -0
- data/spec/integration/criteria/range_spec.rb +359 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +391 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +3 -19
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
- 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 +20 -5
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +25 -9
- data/spec/mongoid/association/accessors_spec.rb +282 -78
- 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 +33 -34
- data/spec/mongoid/association/depending_spec.rb +429 -339
- data/spec/mongoid/association/eager_spec.rb +6 -6
- 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 +2 -2
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -1
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +150 -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 +112 -1
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +704 -198
- data/spec/mongoid/association/embedded/embeds_many_models.rb +194 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -1
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +78 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -1
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +36 -24
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_models.rb +20 -1
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -3
- 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 +16 -13
- 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 +2 -2
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +109 -17
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +112 -59
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +20 -1
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +26 -22
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -2
- 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 +523 -372
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -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 +56 -3
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +130 -1
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +413 -130
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +857 -503
- data/spec/mongoid/association/referenced/has_many_models.rb +59 -2
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +46 -1
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -10
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +133 -28
- data/spec/mongoid/association/referenced/has_one_models.rb +63 -1
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
- data/spec/mongoid/association/referenced/has_one_spec.rb +22 -2
- data/spec/mongoid/association/reflections_spec.rb +0 -1
- data/spec/mongoid/association/syncable_spec.rb +46 -33
- data/spec/mongoid/association_spec.rb +0 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -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 +91 -13
- data/spec/mongoid/atomic_spec.rb +51 -7
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +147 -79
- 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 +22 -23
- data/spec/mongoid/attributes_spec.rb +888 -62
- data/spec/mongoid/cacheable_spec.rb +4 -5
- data/spec/mongoid/changeable_spec.rb +464 -73
- data/spec/mongoid/clients/factory_spec.rb +91 -9
- data/spec/mongoid/clients/options_spec.rb +27 -19
- data/spec/mongoid/clients/sessions_spec.rb +27 -67
- data/spec/mongoid/clients/transactions_spec.rb +69 -35
- data/spec/mongoid/clients_spec.rb +187 -24
- data/spec/mongoid/collection_configurable_spec.rb +158 -0
- data/spec/mongoid/composable_spec.rb +0 -1
- data/spec/mongoid/config/defaults_spec.rb +160 -0
- data/spec/mongoid/config/environment_spec.rb +124 -9
- data/spec/mongoid/config/options_spec.rb +0 -1
- data/spec/mongoid/config_spec.rb +465 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +431 -154
- 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 +120 -21
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +148 -86
- data/spec/mongoid/contextual/geo_near_spec.rb +28 -20
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -20
- data/spec/mongoid/contextual/memory_spec.rb +1826 -304
- data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
- data/spec/mongoid/contextual/mongo_spec.rb +3501 -1272
- data/spec/mongoid/contextual/none_spec.rb +78 -68
- data/spec/mongoid/copyable_spec.rb +657 -37
- data/spec/mongoid/copyable_spec_models.rb +28 -1
- data/spec/mongoid/criteria/findable_spec.rb +109 -234
- 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 +0 -1
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +37 -38
- 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 -74
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -20
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -27
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -2
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -1
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -16
- 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 +73 -8
- 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 +1 -2
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -8
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +5 -71
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -60
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +30 -8
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +39 -2
- data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +143 -13
- data/spec/mongoid/criteria/queryable/optional_spec.rb +16 -486
- data/spec/mongoid/criteria/queryable/options_spec.rb +1 -2
- 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 +1186 -195
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +307 -705
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -4
- 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/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +406 -0
- data/spec/mongoid/criteria_spec.rb +1267 -1739
- data/spec/mongoid/document_fields_spec.rb +179 -5
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +51 -1
- data/spec/mongoid/document_spec.rb +151 -88
- data/spec/mongoid/equality_spec.rb +142 -42
- 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 +2 -3
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -1
- data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
- data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +5 -6
- 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 +1 -2
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- 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 +22 -9
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -3
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -4
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -4
- data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -4
- 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 +2 -3
- data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -2
- 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 +16 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -213
- data/spec/mongoid/extensions/binary_spec.rb +44 -10
- data/spec/mongoid/extensions/boolean_spec.rb +68 -83
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -4
- data/spec/mongoid/extensions/date_spec.rb +71 -2
- data/spec/mongoid/extensions/date_time_spec.rb +15 -10
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
- data/spec/mongoid/extensions/false_class_spec.rb +1 -2
- data/spec/mongoid/extensions/float_spec.rb +53 -75
- data/spec/mongoid/extensions/hash_spec.rb +30 -1
- data/spec/mongoid/extensions/integer_spec.rb +50 -65
- 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 +255 -55
- data/spec/mongoid/extensions/regexp_spec.rb +58 -34
- data/spec/mongoid/extensions/set_spec.rb +106 -1
- data/spec/mongoid/extensions/string_spec.rb +58 -31
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +18 -26
- data/spec/mongoid/extensions/time_spec.rb +639 -107
- data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -84
- data/spec/mongoid/extensions/true_class_spec.rb +1 -2
- data/spec/mongoid/extensions_spec.rb +14 -3
- data/spec/mongoid/factory_spec.rb +323 -30
- data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
- data/spec/mongoid/fields/localized_spec.rb +84 -42
- data/spec/mongoid/fields/standard_spec.rb +0 -1
- data/spec/mongoid/fields_spec.rb +855 -118
- data/spec/mongoid/findable_spec.rb +518 -65
- data/spec/mongoid/indexable/specification_spec.rb +2 -3
- data/spec/mongoid/indexable_spec.rb +85 -33
- data/spec/mongoid/inspectable_spec.rb +37 -3
- data/spec/mongoid/interceptable_spec.rb +702 -104
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/loggable_spec.rb +0 -1
- 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 +112 -30
- data/spec/mongoid/persistable/deletable_spec.rb +298 -19
- data/spec/mongoid/persistable/destroyable_spec.rb +226 -19
- data/spec/mongoid/persistable/incrementable_spec.rb +45 -9
- data/spec/mongoid/persistable/logical_spec.rb +41 -5
- data/spec/mongoid/persistable/poppable_spec.rb +40 -5
- data/spec/mongoid/persistable/pullable_spec.rb +80 -9
- data/spec/mongoid/persistable/pushable_spec.rb +80 -9
- data/spec/mongoid/persistable/renamable_spec.rb +39 -4
- data/spec/mongoid/persistable/savable_spec.rb +282 -26
- data/spec/mongoid/persistable/settable_spec.rb +76 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +40 -5
- data/spec/mongoid/persistable/updatable_spec.rb +61 -50
- data/spec/mongoid/persistable/upsertable_spec.rb +91 -4
- data/spec/mongoid/persistable_spec.rb +3 -4
- data/spec/mongoid/persistence_context_spec.rb +57 -59
- data/spec/mongoid/positional_spec.rb +0 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +7 -5
- data/spec/mongoid/query_cache_spec.rb +424 -68
- data/spec/mongoid/relations/proxy_spec.rb +7 -8
- data/spec/mongoid/reloadable_spec.rb +355 -27
- data/spec/mongoid/scopable_spec.rb +191 -39
- data/spec/mongoid/selectable_spec.rb +6 -7
- data/spec/mongoid/serializable_spec.rb +35 -39
- data/spec/mongoid/shardable_models.rb +15 -1
- data/spec/mongoid/shardable_spec.rb +181 -32
- data/spec/mongoid/stateful_spec.rb +151 -10
- data/spec/mongoid/tasks/database_rake_spec.rb +87 -14
- data/spec/mongoid/tasks/database_spec.rb +128 -2
- 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 +398 -11
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +525 -36
- data/spec/mongoid/touchable_spec_models.rb +59 -0
- data/spec/mongoid/traversable_spec.rb +1143 -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 +125 -99
- data/spec/mongoid/validatable_spec.rb +3 -4
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +35 -10
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -3
- data/spec/rails/mongoid_spec.rb +4 -17
- 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 +24 -54
- data/spec/support/authorization.rb +0 -1
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +34 -197
- data/spec/support/expectations.rb +0 -1
- data/spec/support/helpers.rb +1 -1
- data/spec/support/immutable_ids.rb +118 -0
- data/spec/support/macros.rb +109 -1
- data/spec/{app → support}/models/account.rb +1 -2
- data/spec/{app → support}/models/acolyte.rb +0 -1
- data/spec/{app → support}/models/actor.rb +1 -2
- data/spec/{app → support}/models/actress.rb +0 -1
- data/spec/{app → support}/models/address.rb +4 -1
- data/spec/{app → support}/models/address_component.rb +0 -1
- data/spec/{app → support}/models/address_number.rb +0 -1
- data/spec/{app → support}/models/agency.rb +0 -1
- data/spec/{app → support}/models/agent.rb +0 -1
- data/spec/{app → support}/models/album.rb +0 -1
- data/spec/{app → support}/models/alert.rb +0 -1
- data/spec/{app → support}/models/animal.rb +0 -1
- data/spec/{app → support}/models/answer.rb +0 -1
- data/spec/{app → support}/models/appointment.rb +0 -1
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/array_field.rb +0 -1
- data/spec/{app → support}/models/article.rb +0 -1
- data/spec/{app → support}/models/artist.rb +2 -2
- data/spec/{app → support}/models/artwork.rb +0 -1
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +0 -1
- data/spec/support/models/augmentation.rb +25 -0
- data/spec/{app → support}/models/author.rb +0 -1
- data/spec/{app → support}/models/baby.rb +0 -1
- data/spec/{app → support}/models/band.rb +8 -1
- data/spec/{app → support}/models/bar.rb +0 -1
- data/spec/{app → support}/models/basic.rb +0 -1
- data/spec/{app → support}/models/bed.rb +0 -1
- data/spec/{app → support}/models/big_palette.rb +0 -1
- data/spec/{app → support}/models/birthday.rb +0 -1
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +0 -1
- data/spec/{app → support}/models/book.rb +1 -1
- data/spec/{app → support}/models/breed.rb +0 -1
- data/spec/{app → support}/models/browser.rb +1 -2
- data/spec/{app → support}/models/building.rb +2 -1
- data/spec/{app → support}/models/building_address.rb +0 -1
- data/spec/{app → support}/models/bus.rb +0 -1
- data/spec/{app → support}/models/business.rb +0 -1
- data/spec/{app → support}/models/callback_test.rb +0 -1
- data/spec/{app → support}/models/canvas.rb +1 -2
- data/spec/{app → support}/models/car.rb +0 -1
- data/spec/{app → support}/models/cat.rb +0 -1
- data/spec/support/models/catalog.rb +24 -0
- data/spec/{app → support}/models/category.rb +0 -1
- data/spec/{app → support}/models/child.rb +0 -1
- data/spec/{app → support}/models/child_doc.rb +3 -4
- data/spec/{app → support}/models/church.rb +0 -1
- data/spec/{app → support}/models/circle.rb +0 -1
- data/spec/{app → support}/models/circuit.rb +0 -1
- data/spec/{app → support}/models/circus.rb +3 -1
- data/spec/{app → support}/models/code.rb +2 -1
- data/spec/{app → support}/models/coding/pull_request.rb +0 -1
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +0 -1
- data/spec/{app → support}/models/company.rb +0 -1
- data/spec/{app → support}/models/consumption_period.rb +0 -1
- data/spec/{app → support}/models/contextable_item.rb +0 -1
- data/spec/{app → support}/models/contractor.rb +0 -1
- data/spec/{app → support}/models/cookie.rb +0 -1
- data/spec/{app → support}/models/country_code.rb +2 -1
- data/spec/{app → support}/models/courier_job.rb +0 -1
- 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 +0 -1
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +0 -1
- data/spec/{app → support}/models/dictionary.rb +6 -1
- data/spec/{app → support}/models/division.rb +0 -1
- data/spec/{app → support}/models/doctor.rb +0 -1
- data/spec/{app → support}/models/dog.rb +0 -1
- data/spec/{app → support}/models/dokument.rb +0 -1
- data/spec/{app → support}/models/draft.rb +0 -1
- data/spec/{app → support}/models/dragon.rb +0 -1
- data/spec/{app → support}/models/driver.rb +1 -2
- data/spec/{app → support}/models/drug.rb +0 -1
- data/spec/{app → support}/models/dungeon.rb +0 -1
- data/spec/{app → support}/models/edit.rb +0 -1
- data/spec/{app → support}/models/email.rb +0 -1
- data/spec/{app → support}/models/employer.rb +0 -1
- data/spec/{app → support}/models/entry.rb +0 -1
- data/spec/{app → support}/models/eraser.rb +0 -1
- data/spec/{app → support}/models/even.rb +0 -1
- data/spec/{app → support}/models/event.rb +0 -1
- data/spec/{app → support}/models/exhibition.rb +0 -1
- data/spec/{app → support}/models/exhibitor.rb +0 -1
- data/spec/{app → support}/models/explosion.rb +0 -1
- data/spec/{app → support}/models/eye.rb +0 -1
- data/spec/{app → support}/models/eye_bowl.rb +0 -1
- data/spec/{app → support}/models/face.rb +0 -1
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/{app → support}/models/favorite.rb +0 -1
- data/spec/{app → support}/models/filesystem.rb +0 -1
- data/spec/{app → support}/models/fire_hydrant.rb +0 -1
- data/spec/{app → support}/models/firefox.rb +0 -1
- data/spec/{app → support}/models/fish.rb +0 -1
- data/spec/{app → support}/models/folder.rb +0 -1
- data/spec/{app → support}/models/folder_item.rb +0 -1
- data/spec/{app → support}/models/fruits.rb +0 -1
- data/spec/{app → support}/models/game.rb +0 -1
- data/spec/{app → support}/models/ghost.rb +0 -1
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +0 -1
- data/spec/{app → support}/models/house.rb +0 -1
- data/spec/{app → support}/models/html_writer.rb +0 -1
- data/spec/{app → support}/models/id_key.rb +0 -1
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +0 -1
- data/spec/{app → support}/models/implant.rb +9 -1
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +1 -2
- data/spec/{app → support}/models/jar.rb +0 -1
- data/spec/{app → support}/models/kaleidoscope.rb +0 -1
- data/spec/{app → support}/models/kangaroo.rb +0 -1
- data/spec/{app → support}/models/label.rb +4 -2
- data/spec/{app → support}/models/language.rb +0 -1
- data/spec/{app → support}/models/lat_lng.rb +0 -1
- data/spec/{app → support}/models/league.rb +0 -1
- data/spec/{app → support}/models/learner.rb +0 -1
- data/spec/{app → support}/models/line_item.rb +0 -1
- data/spec/{app → support}/models/location.rb +0 -1
- data/spec/{app → support}/models/login.rb +0 -1
- data/spec/{app → support}/models/manufacturer.rb +0 -1
- data/spec/{app → support}/models/meat.rb +0 -1
- data/spec/{app → support}/models/membership.rb +1 -1
- data/spec/{app → support}/models/message.rb +0 -1
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +0 -1
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +0 -1
- data/spec/{app → support}/models/my_hash.rb +0 -1
- data/spec/{app → support}/models/name.rb +0 -1
- data/spec/{app → support}/models/name_only.rb +0 -1
- data/spec/{app → support}/models/node.rb +0 -1
- data/spec/{app → support}/models/note.rb +0 -1
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +0 -1
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +1 -2
- data/spec/{app → support}/models/ordered_preference.rb +0 -1
- data/spec/{app → support}/models/oscar.rb +0 -1
- data/spec/{app → support}/models/other_owner_object.rb +0 -1
- data/spec/{app → support}/models/override.rb +0 -1
- data/spec/{app → support}/models/ownable.rb +0 -1
- data/spec/{app → support}/models/owner.rb +2 -1
- data/spec/{app → support}/models/pack.rb +0 -1
- data/spec/{app → support}/models/page.rb +0 -1
- data/spec/{app → support}/models/page_question.rb +0 -1
- data/spec/{app → support}/models/palette.rb +1 -2
- data/spec/{app → support}/models/parent.rb +0 -1
- data/spec/{app → support}/models/parent_doc.rb +0 -1
- data/spec/support/models/passport.rb +22 -0
- data/spec/{app → support}/models/patient.rb +0 -1
- data/spec/{app → support}/models/pdf_writer.rb +0 -1
- data/spec/{app → support}/models/pencil.rb +0 -1
- data/spec/{app → support}/models/person.rb +20 -2
- data/spec/{app → support}/models/pet.rb +0 -1
- data/spec/{app → support}/models/pet_owner.rb +0 -1
- data/spec/{app → support}/models/phone.rb +3 -2
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +0 -1
- data/spec/{app → support}/models/player.rb +2 -1
- data/spec/{app → support}/models/post.rb +0 -1
- data/spec/{app → support}/models/post_genre.rb +0 -1
- data/spec/support/models/powerup.rb +25 -0
- data/spec/{app → support}/models/preference.rb +0 -1
- data/spec/{app → support}/models/princess.rb +0 -1
- data/spec/{app → support}/models/product.rb +1 -1
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -1
- data/spec/{app → support}/models/pub.rb +0 -1
- data/spec/{app → support}/models/publication/encyclopedia.rb +0 -1
- data/spec/{app → support}/models/publication/review.rb +0 -1
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +0 -1
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +0 -1
- data/spec/{app → support}/models/quiz.rb +0 -1
- data/spec/{app → support}/models/rating.rb +0 -1
- data/spec/{app → support}/models/record.rb +0 -1
- data/spec/{app → support}/models/registry.rb +1 -1
- data/spec/{app → support}/models/role.rb +0 -1
- data/spec/{app → support}/models/root_category.rb +0 -1
- data/spec/{app → support}/models/sandwich.rb +0 -1
- data/spec/{app → support}/models/scheduler.rb +0 -1
- data/spec/support/models/school.rb +14 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -3
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +0 -1
- data/spec/{app → support}/models/series.rb +1 -1
- data/spec/{app → support}/models/server.rb +0 -1
- data/spec/{app → support}/models/service.rb +0 -1
- data/spec/{app → support}/models/shape.rb +2 -3
- data/spec/{app → support}/models/shelf.rb +0 -1
- data/spec/support/models/shield.rb +18 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -1
- data/spec/{app → support}/models/shipping_container.rb +0 -1
- data/spec/{app → support}/models/shipping_pack.rb +0 -1
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +0 -1
- data/spec/{app → support}/models/short_agent.rb +0 -1
- data/spec/{app → support}/models/short_quiz.rb +0 -1
- data/spec/{app → support}/models/simple.rb +0 -1
- data/spec/{app → support}/models/slave.rb +0 -1
- data/spec/{app → support}/models/song.rb +0 -1
- data/spec/{app → support}/models/sound.rb +0 -1
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +0 -1
- data/spec/{app → support}/models/staff.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -1
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -1
- data/spec/{app → support}/models/strategy.rb +0 -1
- data/spec/support/models/student.rb +14 -0
- data/spec/{app → support}/models/sub_item.rb +0 -1
- data/spec/{app → support}/models/subscription.rb +0 -1
- data/spec/{app → support}/models/survey.rb +0 -1
- data/spec/{app → support}/models/symptom.rb +0 -1
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -1
- data/spec/{app → support}/models/target.rb +0 -1
- data/spec/{app → support}/models/template.rb +0 -1
- data/spec/{app → support}/models/thing.rb +0 -1
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +0 -1
- data/spec/{app → support}/models/tool.rb +2 -3
- data/spec/{app → support}/models/topping.rb +0 -1
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +0 -1
- data/spec/{app → support}/models/translation.rb +0 -1
- data/spec/{app → support}/models/tree.rb +0 -1
- data/spec/{app → support}/models/truck.rb +2 -1
- data/spec/{app → support}/models/updatable.rb +0 -1
- data/spec/{app → support}/models/user.rb +0 -1
- data/spec/{app → support}/models/user_account.rb +0 -1
- data/spec/{app → support}/models/validation_callback.rb +0 -1
- data/spec/{app → support}/models/vehicle.rb +7 -3
- data/spec/{app → support}/models/version.rb +0 -1
- data/spec/{app → support}/models/vertex.rb +0 -1
- data/spec/{app → support}/models/vet_visit.rb +0 -1
- data/spec/{app → support}/models/video.rb +0 -1
- data/spec/{app → support}/models/video_game.rb +0 -1
- data/spec/support/models/washer.rb +7 -0
- data/spec/support/models/weapon.rb +25 -0
- data/spec/{app → support}/models/wiki_page.rb +1 -1
- data/spec/{app → support}/models/word.rb +0 -1
- data/spec/{app → support}/models/word_origin.rb +0 -1
- data/spec/{app → support}/models/writer.rb +2 -3
- 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 +28 -6
- data.tar.gz.sig +0 -0
- metadata +1216 -799
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -26
- data/lib/mongoid/errors/invalid_value.rb +0 -18
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/lib/support/ruby_version.rb +0 -29
- data/spec/app/models/augmentation.rb +0 -14
- data/spec/app/models/coding.rb +0 -4
- data/spec/app/models/passport.rb +0 -8
- data/spec/app/models/powerup.rb +0 -14
- data/spec/app/models/publication.rb +0 -5
- data/spec/app/models/weapon.rb +0 -14
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -61
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -61
- data/spec/mongoid/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/lite_constraints.rb +0 -22
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"
|
|
@@ -12,9 +11,10 @@ module Mongoid
|
|
|
12
11
|
module Fields
|
|
13
12
|
extend ActiveSupport::Concern
|
|
14
13
|
|
|
14
|
+
StringifiedSymbol = Mongoid::StringifiedSymbol
|
|
15
|
+
Boolean = Mongoid::Boolean
|
|
16
|
+
|
|
15
17
|
# For fields defined with symbols use the correct class.
|
|
16
|
-
#
|
|
17
|
-
# @since 4.0.0
|
|
18
18
|
TYPE_MAPPINGS = {
|
|
19
19
|
array: Array,
|
|
20
20
|
big_decimal: BigDecimal,
|
|
@@ -30,14 +30,94 @@ module Mongoid
|
|
|
30
30
|
regexp: Regexp,
|
|
31
31
|
set: Set,
|
|
32
32
|
string: String,
|
|
33
|
+
stringified_symbol: StringifiedSymbol,
|
|
33
34
|
symbol: Symbol,
|
|
34
35
|
time: Time
|
|
35
36
|
}.with_indifferent_access
|
|
36
37
|
|
|
37
|
-
# Constant for all names of the
|
|
38
|
+
# Constant for all names of the _id field in a document.
|
|
38
39
|
#
|
|
39
|
-
#
|
|
40
|
-
|
|
40
|
+
# This does not include aliases of _id field.
|
|
41
|
+
#
|
|
42
|
+
# @api private
|
|
43
|
+
IDS = [ :_id, '_id', ].freeze
|
|
44
|
+
|
|
45
|
+
# BSON classes that are not supported as field types
|
|
46
|
+
#
|
|
47
|
+
# @api private
|
|
48
|
+
INVALID_BSON_CLASSES = [ BSON::Decimal128, BSON::Int32, BSON::Int64 ].freeze
|
|
49
|
+
|
|
50
|
+
module ClassMethods
|
|
51
|
+
# Returns the list of id fields for this model class, as both strings
|
|
52
|
+
# and symbols.
|
|
53
|
+
#
|
|
54
|
+
# @return [ Array<Symbol | String> ] List of id fields.
|
|
55
|
+
#
|
|
56
|
+
# @api private
|
|
57
|
+
def id_fields
|
|
58
|
+
IDS.dup.tap do |id_fields|
|
|
59
|
+
aliased_fields.each do |k, v|
|
|
60
|
+
if v == '_id'
|
|
61
|
+
id_fields << k.to_sym
|
|
62
|
+
id_fields << k
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Extracts the id field from the specified attributes hash based on
|
|
69
|
+
# aliases defined in this class.
|
|
70
|
+
#
|
|
71
|
+
# @param [ Hash ] attributes The attributes to inspect.
|
|
72
|
+
#
|
|
73
|
+
# @return [ Object ] The id value.
|
|
74
|
+
#
|
|
75
|
+
# @api private
|
|
76
|
+
def extract_id_field(attributes)
|
|
77
|
+
id_fields.each do |k|
|
|
78
|
+
if v = attributes[k]
|
|
79
|
+
return v
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
nil
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Removes the _translations from the given field name. This is done only
|
|
86
|
+
# when there doesn't already exist a field name or relation with the
|
|
87
|
+
# same name (i.e. with the _translations suffix). This check for an
|
|
88
|
+
# existing field is done recursively
|
|
89
|
+
#
|
|
90
|
+
# @param [ String | Symbol ] name The name of the field to cleanse.
|
|
91
|
+
#
|
|
92
|
+
# @return [ Field ] The field name without _translations
|
|
93
|
+
def cleanse_localized_field_names(name)
|
|
94
|
+
name = database_field_name(name.to_s)
|
|
95
|
+
|
|
96
|
+
klass = self
|
|
97
|
+
[].tap do |res|
|
|
98
|
+
ar = name.split('.')
|
|
99
|
+
ar.each_with_index do |fn, i|
|
|
100
|
+
key = fn
|
|
101
|
+
unless klass.fields.key?(fn) || klass.relations.key?(fn)
|
|
102
|
+
if tr = fn.match(/(.*)_translations\z/)&.captures&.first
|
|
103
|
+
key = tr
|
|
104
|
+
else
|
|
105
|
+
key = fn
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
res.push(key)
|
|
110
|
+
|
|
111
|
+
if klass.fields.key?(fn)
|
|
112
|
+
res.push(ar.drop(i+1).join('.')) unless i == ar.length - 1
|
|
113
|
+
break
|
|
114
|
+
elsif klass.relations.key?(fn)
|
|
115
|
+
klass = klass.relations[key].klass
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end.join('.')
|
|
119
|
+
end
|
|
120
|
+
end
|
|
41
121
|
|
|
42
122
|
included do
|
|
43
123
|
class_attribute :aliased_fields
|
|
@@ -59,8 +139,7 @@ module Mongoid
|
|
|
59
139
|
type: BSON::ObjectId
|
|
60
140
|
)
|
|
61
141
|
|
|
62
|
-
|
|
63
|
-
alias :id= :_id=
|
|
142
|
+
alias_attribute(:id, :_id)
|
|
64
143
|
end
|
|
65
144
|
|
|
66
145
|
# Apply all default values to the document which are not procs.
|
|
@@ -68,9 +147,7 @@ module Mongoid
|
|
|
68
147
|
# @example Apply all the non-proc defaults.
|
|
69
148
|
# model.apply_pre_processed_defaults
|
|
70
149
|
#
|
|
71
|
-
# @return [ Array<String ] The names of the non-proc defaults.
|
|
72
|
-
#
|
|
73
|
-
# @since 2.4.0
|
|
150
|
+
# @return [ Array<String> ] The names of the non-proc defaults.
|
|
74
151
|
def apply_pre_processed_defaults
|
|
75
152
|
pre_processed_defaults.each do |name|
|
|
76
153
|
apply_default(name)
|
|
@@ -82,10 +159,9 @@ module Mongoid
|
|
|
82
159
|
# @example Apply all the proc defaults.
|
|
83
160
|
# model.apply_post_processed_defaults
|
|
84
161
|
#
|
|
85
|
-
# @return [ Array<String ] The names of the proc defaults.
|
|
86
|
-
#
|
|
87
|
-
# @since 2.4.0
|
|
162
|
+
# @return [ Array<String> ] The names of the proc defaults.
|
|
88
163
|
def apply_post_processed_defaults
|
|
164
|
+
pending_callbacks.delete(:apply_post_processed_defaults)
|
|
89
165
|
post_processed_defaults.each do |name|
|
|
90
166
|
apply_default(name)
|
|
91
167
|
end
|
|
@@ -97,8 +173,6 @@ module Mongoid
|
|
|
97
173
|
# model.apply_default("name")
|
|
98
174
|
#
|
|
99
175
|
# @param [ String ] name The name of the field.
|
|
100
|
-
#
|
|
101
|
-
# @since 2.4.0
|
|
102
176
|
def apply_default(name)
|
|
103
177
|
unless attributes.key?(name)
|
|
104
178
|
if field = fields[name]
|
|
@@ -115,9 +189,8 @@ module Mongoid
|
|
|
115
189
|
#
|
|
116
190
|
# @example Apply all the defaults.
|
|
117
191
|
# model.apply_defaults
|
|
118
|
-
#
|
|
119
|
-
# @since 2.4.0
|
|
120
192
|
def apply_defaults
|
|
193
|
+
pending_callbacks.delete(:apply_defaults)
|
|
121
194
|
apply_pre_processed_defaults
|
|
122
195
|
apply_post_processed_defaults
|
|
123
196
|
end
|
|
@@ -128,11 +201,9 @@ module Mongoid
|
|
|
128
201
|
# method to automatically wrap params in JSON requests.
|
|
129
202
|
#
|
|
130
203
|
# @example Get the field names
|
|
131
|
-
#
|
|
204
|
+
# document.attribute_names
|
|
132
205
|
#
|
|
133
206
|
# @return [ Array<String> ] The field names
|
|
134
|
-
#
|
|
135
|
-
# @since 3.0.0
|
|
136
207
|
def attribute_names
|
|
137
208
|
self.class.attribute_names
|
|
138
209
|
end
|
|
@@ -143,11 +214,9 @@ module Mongoid
|
|
|
143
214
|
# @example Get the database field name.
|
|
144
215
|
# model.database_field_name(:authorization)
|
|
145
216
|
#
|
|
146
|
-
# @param [ String
|
|
217
|
+
# @param [ String | Symbol ] name The name to get.
|
|
147
218
|
#
|
|
148
219
|
# @return [ String ] The name of the field as it's stored in the db.
|
|
149
|
-
#
|
|
150
|
-
# @since 3.0.7
|
|
151
220
|
def database_field_name(name)
|
|
152
221
|
self.class.database_field_name(name)
|
|
153
222
|
end
|
|
@@ -160,9 +229,7 @@ module Mongoid
|
|
|
160
229
|
# @param [ Field ] field The field.
|
|
161
230
|
# @param [ Object ] value The current value.
|
|
162
231
|
#
|
|
163
|
-
# @return [ true
|
|
164
|
-
#
|
|
165
|
-
# @since 3.1.0
|
|
232
|
+
# @return [ true | false ] If we set the field lazily.
|
|
166
233
|
def lazy_settable?(field, value)
|
|
167
234
|
!frozen? && value.nil? && field.lazy?
|
|
168
235
|
end
|
|
@@ -174,17 +241,43 @@ module Mongoid
|
|
|
174
241
|
# @example Is the document using object ids?
|
|
175
242
|
# model.using_object_ids?
|
|
176
243
|
#
|
|
177
|
-
# @return [ true
|
|
244
|
+
# @return [ true | false ] Using object ids.
|
|
178
245
|
def using_object_ids?
|
|
179
246
|
self.class.using_object_ids?
|
|
180
247
|
end
|
|
181
248
|
|
|
249
|
+
# Does this field start with a dollar sign ($) or contain a dot/period (.)?
|
|
250
|
+
#
|
|
251
|
+
# @api private
|
|
252
|
+
#
|
|
253
|
+
# @param [ String ] name The field name.
|
|
254
|
+
#
|
|
255
|
+
# @return [ true | false ] If this field is dotted or dollared.
|
|
256
|
+
def dot_dollar_field?(name)
|
|
257
|
+
n = aliased_fields[name] || name
|
|
258
|
+
fields.key?(n) && (n.include?('.') || n.start_with?('$'))
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
# Validate whether or not the field starts with a dollar sign ($) or
|
|
262
|
+
# contains a dot/period (.).
|
|
263
|
+
#
|
|
264
|
+
# @api private
|
|
265
|
+
#
|
|
266
|
+
# @raise [ InvalidDotDollarAssignment ] If contains dots or starts with a dollar.
|
|
267
|
+
#
|
|
268
|
+
# @param [ String ] name The field name.
|
|
269
|
+
def validate_writable_field_name!(name)
|
|
270
|
+
if dot_dollar_field?(name)
|
|
271
|
+
raise Errors::InvalidDotDollarAssignment.new(self.class, name)
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
182
275
|
class << self
|
|
183
276
|
|
|
184
277
|
# Stores the provided block to be run when the option name specified is
|
|
185
278
|
# defined on a field.
|
|
186
279
|
#
|
|
187
|
-
# No assumptions are made about what
|
|
280
|
+
# No assumptions are made about what functionality the handler might
|
|
188
281
|
# perform, so it will always be called if the `option_name` key is
|
|
189
282
|
# provided in the field definition -- even if it is false or nil.
|
|
190
283
|
#
|
|
@@ -196,8 +289,6 @@ module Mongoid
|
|
|
196
289
|
# @param [ Symbol ] option_name the option name to match against
|
|
197
290
|
# @param [ Proc ] block the handler to execute when the option is
|
|
198
291
|
# provided.
|
|
199
|
-
#
|
|
200
|
-
# @since 2.1.0
|
|
201
292
|
def option(option_name, &block)
|
|
202
293
|
options[option_name] = block
|
|
203
294
|
end
|
|
@@ -209,11 +300,141 @@ module Mongoid
|
|
|
209
300
|
# # => { :required => #<Proc:0x00000100976b38> }
|
|
210
301
|
#
|
|
211
302
|
# @return [ Hash ] the option map
|
|
212
|
-
#
|
|
213
|
-
# @since 2.1.0
|
|
214
303
|
def options
|
|
215
304
|
@options ||= {}
|
|
216
305
|
end
|
|
306
|
+
|
|
307
|
+
# Traverse down the association tree and search for the field for the
|
|
308
|
+
# given key. To do this, split the key by '.' and for each part (meth) of
|
|
309
|
+
# the key:
|
|
310
|
+
#
|
|
311
|
+
# - If the meth is a field, yield the meth, field, and is_field as true.
|
|
312
|
+
# - If the meth is an association, update the klass to the association's
|
|
313
|
+
# klass, and yield the meth, klass, and is_field as false.
|
|
314
|
+
#
|
|
315
|
+
# The next iteration will use klass's fields and associations to continue
|
|
316
|
+
# traversing the tree.
|
|
317
|
+
#
|
|
318
|
+
# @param [ String ] key The key used to search the association tree.
|
|
319
|
+
# @param [ Hash ] fields The fields to begin the search with.
|
|
320
|
+
# @param [ Hash ] associations The associations to begin the search with.
|
|
321
|
+
# @param [ Hash ] aliased_associations The alaised associations to begin
|
|
322
|
+
# the search with.
|
|
323
|
+
# @param [ Proc ] block The block takes in three paramaters, the current
|
|
324
|
+
# meth, the field or the relation, and whether the second parameter is a
|
|
325
|
+
# field or not.
|
|
326
|
+
#
|
|
327
|
+
# @return [ Field ] The field found for the given key at the end of the
|
|
328
|
+
# search. This will return nil if the last thing found is an association
|
|
329
|
+
# or no field was found for the given key.
|
|
330
|
+
#
|
|
331
|
+
# @api private
|
|
332
|
+
def traverse_association_tree(key, fields, associations, aliased_associations)
|
|
333
|
+
klass = nil
|
|
334
|
+
field = nil
|
|
335
|
+
key.split('.').each_with_index do |meth, i|
|
|
336
|
+
fs = i == 0 ? fields : klass&.fields
|
|
337
|
+
rs = i == 0 ? associations : klass&.relations
|
|
338
|
+
as = i == 0 ? aliased_associations : klass&.aliased_associations
|
|
339
|
+
|
|
340
|
+
# Associations can possibly have two "keys", their name and their alias.
|
|
341
|
+
# The fields name is what is used to store it in the klass's relations
|
|
342
|
+
# and field hashes, and the alias is what's used to store that field
|
|
343
|
+
# in the database. The key inputted to this function is the aliased
|
|
344
|
+
# key. We can convert them back to their names by looking in the
|
|
345
|
+
# aliased_associations hash.
|
|
346
|
+
aliased = meth
|
|
347
|
+
if as && a = as.fetch(meth, nil)
|
|
348
|
+
aliased = a.to_s
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
field = nil
|
|
352
|
+
klass = nil
|
|
353
|
+
if fs && f = fs[aliased]
|
|
354
|
+
field = f
|
|
355
|
+
yield(meth, f, true) if block_given?
|
|
356
|
+
elsif rs && rel = rs[aliased]
|
|
357
|
+
klass = rel.klass
|
|
358
|
+
yield(meth, rel, false) if block_given?
|
|
359
|
+
else
|
|
360
|
+
yield(meth, nil, false) if block_given?
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
field
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
# Get the name of the provided field as it is stored in the database.
|
|
367
|
+
# Used in determining if the field is aliased or not. Recursively
|
|
368
|
+
# finds aliases for embedded documents and fields, delimited with
|
|
369
|
+
# period "." character.
|
|
370
|
+
#
|
|
371
|
+
# Note that this method returns the name of associations as they're
|
|
372
|
+
# stored in the database, whereas the `relations` hash uses their in-code
|
|
373
|
+
# aliases. In order to check for membership in the relations hash, you
|
|
374
|
+
# would first have to look up the string returned from this method in
|
|
375
|
+
# the aliased_associations hash.
|
|
376
|
+
#
|
|
377
|
+
# This method will not expand the alias of a belongs_to association that
|
|
378
|
+
# is not the last item. For example, if we had a School that has_many
|
|
379
|
+
# Students, and the field name passed was (from the Student's perspective):
|
|
380
|
+
#
|
|
381
|
+
# school._id
|
|
382
|
+
#
|
|
383
|
+
# The alias for a belongs_to association is that association's _id field.
|
|
384
|
+
# Therefore, expanding out this association would yield:
|
|
385
|
+
#
|
|
386
|
+
# school_id._id
|
|
387
|
+
#
|
|
388
|
+
# This is not the correct field name, because the intention here was not
|
|
389
|
+
# to get a property of the _id field. The intention was to get a property
|
|
390
|
+
# of the referenced document. Therefore, if a part of the name passed is
|
|
391
|
+
# a belongs_to association that is not the last part of the name, we
|
|
392
|
+
# won't expand its alias, and return:
|
|
393
|
+
#
|
|
394
|
+
# school._id
|
|
395
|
+
#
|
|
396
|
+
# If the belongs_to association is the last part of the name, we will
|
|
397
|
+
# pass back the _id field.
|
|
398
|
+
#
|
|
399
|
+
# @param [ String | Symbol ] name The name to get.
|
|
400
|
+
# @param [ Hash ] relations The associations.
|
|
401
|
+
# @param [ Hash ] alaiased_fields The aliased fields.
|
|
402
|
+
# @param [ Hash ] alaiased_associations The aliased associations.
|
|
403
|
+
#
|
|
404
|
+
# @return [ String ] The name of the field as stored in the database.
|
|
405
|
+
#
|
|
406
|
+
# @api private
|
|
407
|
+
def database_field_name(name, relations, aliased_fields, aliased_associations)
|
|
408
|
+
if Mongoid.broken_alias_handling
|
|
409
|
+
return nil unless name
|
|
410
|
+
normalized = name.to_s
|
|
411
|
+
aliased_fields[normalized] || normalized
|
|
412
|
+
else
|
|
413
|
+
return nil unless name.present?
|
|
414
|
+
key = name.to_s
|
|
415
|
+
segment, remaining = key.split('.', 2)
|
|
416
|
+
|
|
417
|
+
# Don't get the alias for the field when a belongs_to association
|
|
418
|
+
# is not the last item. Therefore, get the alias when one of the
|
|
419
|
+
# following is true:
|
|
420
|
+
# 1. This is the last item, i.e. there is no remaining.
|
|
421
|
+
# 2. It is not an association.
|
|
422
|
+
# 3. It is not a belongs association
|
|
423
|
+
if !remaining || !relations.key?(segment) || !relations[segment].is_a?(Association::Referenced::BelongsTo)
|
|
424
|
+
segment = aliased_fields[segment]&.dup || segment
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
return segment unless remaining
|
|
428
|
+
|
|
429
|
+
relation = relations[aliased_associations[segment] || segment]
|
|
430
|
+
if relation
|
|
431
|
+
k = relation.klass
|
|
432
|
+
"#{segment}.#{database_field_name(remaining, k.relations, k.aliased_fields, k.aliased_associations)}"
|
|
433
|
+
else
|
|
434
|
+
"#{segment}.#{remaining}"
|
|
435
|
+
end
|
|
436
|
+
end
|
|
437
|
+
end
|
|
217
438
|
end
|
|
218
439
|
|
|
219
440
|
module ClassMethods
|
|
@@ -227,8 +448,6 @@ module Mongoid
|
|
|
227
448
|
# Model.attribute_names
|
|
228
449
|
#
|
|
229
450
|
# @return [ Array<String> ] The field names
|
|
230
|
-
#
|
|
231
|
-
# @since 3.0.0
|
|
232
451
|
def attribute_names
|
|
233
452
|
fields.keys
|
|
234
453
|
end
|
|
@@ -236,18 +455,11 @@ module Mongoid
|
|
|
236
455
|
# Get the name of the provided field as it is stored in the database.
|
|
237
456
|
# Used in determining if the field is aliased or not.
|
|
238
457
|
#
|
|
239
|
-
# @
|
|
240
|
-
# Model.database_field_name(:authorization)
|
|
241
|
-
#
|
|
242
|
-
# @param [ String, Symbol ] name The name to get.
|
|
458
|
+
# @param [ String | Symbol ] name The name to get.
|
|
243
459
|
#
|
|
244
460
|
# @return [ String ] The name of the field as it's stored in the db.
|
|
245
|
-
#
|
|
246
|
-
# @since 3.0.7
|
|
247
461
|
def database_field_name(name)
|
|
248
|
-
|
|
249
|
-
normalized = name.to_s
|
|
250
|
-
aliased_fields[normalized] || normalized
|
|
462
|
+
Fields.database_field_name(name, relations, aliased_fields, aliased_associations)
|
|
251
463
|
end
|
|
252
464
|
|
|
253
465
|
# Defines all the fields that are accessible on the Document
|
|
@@ -255,14 +467,14 @@ module Mongoid
|
|
|
255
467
|
# added as an instance method to the Document.
|
|
256
468
|
#
|
|
257
469
|
# @example Define a field.
|
|
258
|
-
# field :score, :
|
|
470
|
+
# field :score, type: Integer, default: 0
|
|
259
471
|
#
|
|
260
472
|
# @param [ Symbol ] name The name of the field.
|
|
261
473
|
# @param [ Hash ] options The options to pass to the field.
|
|
262
474
|
#
|
|
263
|
-
# @option options [ Class ] :type The type of the field.
|
|
475
|
+
# @option options [ Class | Symbol | String ] :type The type of the field.
|
|
264
476
|
# @option options [ String ] :label The label for the field.
|
|
265
|
-
# @option options [ Object
|
|
477
|
+
# @option options [ Object | Proc ] :default The field's default.
|
|
266
478
|
#
|
|
267
479
|
# @return [ Field ] The generated field
|
|
268
480
|
def field(name, options = {})
|
|
@@ -284,8 +496,6 @@ module Mongoid
|
|
|
284
496
|
# @param [ Class ] type The new type of field.
|
|
285
497
|
#
|
|
286
498
|
# @return [ Serializable ] The new field.
|
|
287
|
-
#
|
|
288
|
-
# @since 2.1.0
|
|
289
499
|
def replace_field(name, type)
|
|
290
500
|
remove_defaults(name)
|
|
291
501
|
add_field(name, fields[name].options.merge(type: type))
|
|
@@ -297,13 +507,28 @@ module Mongoid
|
|
|
297
507
|
# @example Does this class use object ids?
|
|
298
508
|
# person.using_object_ids?
|
|
299
509
|
#
|
|
300
|
-
# @return [ true
|
|
301
|
-
#
|
|
302
|
-
# @since 1.0.0
|
|
510
|
+
# @return [ true | false ] If the class uses BSON::ObjectIds for the id.
|
|
303
511
|
def using_object_ids?
|
|
304
512
|
fields["_id"].object_id_field?
|
|
305
513
|
end
|
|
306
514
|
|
|
515
|
+
# Traverse down the association tree and search for the field for the
|
|
516
|
+
# given key.
|
|
517
|
+
#
|
|
518
|
+
# @param [ String ] key The key used to search the association tree.
|
|
519
|
+
# @param [ Proc ] block The block takes in three paramaters, the current
|
|
520
|
+
# meth, the field or the relation, and whether the second parameter is a
|
|
521
|
+
# field or not.
|
|
522
|
+
#
|
|
523
|
+
# @return [ Field ] The field found for the given key at the end of the
|
|
524
|
+
# search. This will return nil if the last thing found is an association
|
|
525
|
+
# or no field was found for the given key.
|
|
526
|
+
#
|
|
527
|
+
# @api private
|
|
528
|
+
def traverse_association_tree(key, &block)
|
|
529
|
+
Fields.traverse_association_tree(key, fields, relations, aliased_associations, &block)
|
|
530
|
+
end
|
|
531
|
+
|
|
307
532
|
protected
|
|
308
533
|
|
|
309
534
|
# Add the defaults to the model. This breaks them up between ones that
|
|
@@ -314,7 +539,7 @@ module Mongoid
|
|
|
314
539
|
#
|
|
315
540
|
# @param [ Field ] field The field to add for.
|
|
316
541
|
#
|
|
317
|
-
# @
|
|
542
|
+
# @api private
|
|
318
543
|
def add_defaults(field)
|
|
319
544
|
default, name = field.default_val, field.name.to_s
|
|
320
545
|
remove_defaults(name)
|
|
@@ -334,6 +559,8 @@ module Mongoid
|
|
|
334
559
|
#
|
|
335
560
|
# @param [ Symbol ] name The name of the field.
|
|
336
561
|
# @param [ Hash ] options The hash of options.
|
|
562
|
+
#
|
|
563
|
+
# @api private
|
|
337
564
|
def add_field(name, options = {})
|
|
338
565
|
aliased = options[:as]
|
|
339
566
|
aliased_fields[aliased.to_s] = name if aliased
|
|
@@ -361,6 +588,8 @@ module Mongoid
|
|
|
361
588
|
# # => "called"
|
|
362
589
|
#
|
|
363
590
|
# @param [ Field ] field the field to process
|
|
591
|
+
#
|
|
592
|
+
# @api private
|
|
364
593
|
def process_options(field)
|
|
365
594
|
field_options = field.options
|
|
366
595
|
|
|
@@ -384,7 +613,7 @@ module Mongoid
|
|
|
384
613
|
# @param [ Symbol ] meth The name of the accessor.
|
|
385
614
|
# @param [ Hash ] options The options.
|
|
386
615
|
#
|
|
387
|
-
# @
|
|
616
|
+
# @api private
|
|
388
617
|
def create_accessors(name, meth, options = {})
|
|
389
618
|
field = fields[name]
|
|
390
619
|
|
|
@@ -409,7 +638,7 @@ module Mongoid
|
|
|
409
638
|
# @param [ String ] meth The name of the method.
|
|
410
639
|
# @param [ Field ] field The field.
|
|
411
640
|
#
|
|
412
|
-
# @
|
|
641
|
+
# @api private
|
|
413
642
|
def create_field_getter(name, meth, field)
|
|
414
643
|
generated_methods.module_eval do
|
|
415
644
|
re_define_method(meth) do
|
|
@@ -417,9 +646,7 @@ module Mongoid
|
|
|
417
646
|
if lazy_settable?(field, raw)
|
|
418
647
|
write_attribute(name, field.eval_default(self))
|
|
419
648
|
else
|
|
420
|
-
|
|
421
|
-
attribute_will_change!(name) if value.resizable?
|
|
422
|
-
value
|
|
649
|
+
process_raw_attribute(name.to_s, raw, field)
|
|
423
650
|
end
|
|
424
651
|
end
|
|
425
652
|
end
|
|
@@ -435,7 +662,7 @@ module Mongoid
|
|
|
435
662
|
# @param [ String ] name The name of the attribute.
|
|
436
663
|
# @param [ String ] meth The name of the method.
|
|
437
664
|
#
|
|
438
|
-
# @
|
|
665
|
+
# @api private
|
|
439
666
|
def create_field_getter_before_type_cast(name, meth)
|
|
440
667
|
generated_methods.module_eval do
|
|
441
668
|
re_define_method("#{meth}_before_type_cast") do
|
|
@@ -457,7 +684,7 @@ module Mongoid
|
|
|
457
684
|
# @param [ String ] meth The name of the method.
|
|
458
685
|
# @param [ Field ] field The field.
|
|
459
686
|
#
|
|
460
|
-
# @
|
|
687
|
+
# @api private
|
|
461
688
|
def create_field_setter(name, meth, field)
|
|
462
689
|
generated_methods.module_eval do
|
|
463
690
|
re_define_method("#{meth}=") do |value|
|
|
@@ -478,7 +705,7 @@ module Mongoid
|
|
|
478
705
|
# @param [ String ] name The name of the attribute.
|
|
479
706
|
# @param [ String ] meth The name of the method.
|
|
480
707
|
#
|
|
481
|
-
# @
|
|
708
|
+
# @api private
|
|
482
709
|
def create_field_check(name, meth)
|
|
483
710
|
generated_methods.module_eval do
|
|
484
711
|
re_define_method("#{meth}?") do
|
|
@@ -496,11 +723,12 @@ module Mongoid
|
|
|
496
723
|
# @param [ String ] name The name of the attribute.
|
|
497
724
|
# @param [ String ] meth The name of the method.
|
|
498
725
|
#
|
|
499
|
-
# @
|
|
726
|
+
# @api private
|
|
500
727
|
def create_translations_getter(name, meth)
|
|
501
728
|
generated_methods.module_eval do
|
|
502
729
|
re_define_method("#{meth}_translations") do
|
|
503
|
-
|
|
730
|
+
attributes[name] ||= {}
|
|
731
|
+
attributes[name].with_indifferent_access
|
|
504
732
|
end
|
|
505
733
|
alias_method :"#{meth}_t", :"#{meth}_translations"
|
|
506
734
|
end
|
|
@@ -515,15 +743,13 @@ module Mongoid
|
|
|
515
743
|
# @param [ String ] meth The name of the method.
|
|
516
744
|
# @param [ Field ] field The field.
|
|
517
745
|
#
|
|
518
|
-
# @
|
|
746
|
+
# @api private
|
|
519
747
|
def create_translations_setter(name, meth, field)
|
|
520
748
|
generated_methods.module_eval do
|
|
521
749
|
re_define_method("#{meth}_translations=") do |value|
|
|
522
750
|
attribute_will_change!(name)
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
field.type.mongoize(_value)
|
|
526
|
-
end
|
|
751
|
+
value&.transform_values! do |_value|
|
|
752
|
+
field.type.mongoize(_value)
|
|
527
753
|
end
|
|
528
754
|
attributes[name] = value
|
|
529
755
|
end
|
|
@@ -538,7 +764,7 @@ module Mongoid
|
|
|
538
764
|
#
|
|
539
765
|
# @return [ Module ] The module of generated methods.
|
|
540
766
|
#
|
|
541
|
-
# @
|
|
767
|
+
# @api private
|
|
542
768
|
def generated_methods
|
|
543
769
|
@generated_methods ||= begin
|
|
544
770
|
mod = Module.new
|
|
@@ -554,26 +780,71 @@ module Mongoid
|
|
|
554
780
|
#
|
|
555
781
|
# @param [ String ] name The field name.
|
|
556
782
|
#
|
|
557
|
-
# @
|
|
783
|
+
# @api private
|
|
558
784
|
def remove_defaults(name)
|
|
559
785
|
pre_processed_defaults.delete_one(name)
|
|
560
786
|
post_processed_defaults.delete_one(name)
|
|
561
787
|
end
|
|
562
788
|
|
|
789
|
+
# Create a field for the given name and options.
|
|
790
|
+
#
|
|
791
|
+
# @param [ Symbol ] name The name of the field.
|
|
792
|
+
# @param [ Hash ] options The hash of options.
|
|
793
|
+
#
|
|
794
|
+
# @return [ Field ] The created field.
|
|
795
|
+
#
|
|
796
|
+
# @api private
|
|
563
797
|
def field_for(name, options)
|
|
564
798
|
opts = options.merge(klass: self)
|
|
565
|
-
|
|
566
|
-
opts[:type] = type_mapping || unmapped_type(options)
|
|
799
|
+
opts[:type] = retrieve_and_validate_type(name, options[:type])
|
|
567
800
|
return Fields::Localized.new(name, opts) if options[:localize]
|
|
568
801
|
return Fields::ForeignKey.new(name, opts) if options[:identity]
|
|
569
802
|
Fields::Standard.new(name, opts)
|
|
570
803
|
end
|
|
571
804
|
|
|
572
|
-
|
|
573
|
-
|
|
805
|
+
# Get the class for the given type.
|
|
806
|
+
#
|
|
807
|
+
# @param [ Symbol ] name The name of the field.
|
|
808
|
+
# @param [ Symbol | Class ] type The type of the field.
|
|
809
|
+
#
|
|
810
|
+
# @return [ Class ] The type of the field.
|
|
811
|
+
#
|
|
812
|
+
# @raises [ Mongoid::Errors::InvalidFieldType ] if given an invalid field
|
|
813
|
+
# type.
|
|
814
|
+
#
|
|
815
|
+
# @api private
|
|
816
|
+
def retrieve_and_validate_type(name, type)
|
|
817
|
+
type_mapping = TYPE_MAPPINGS[type]
|
|
818
|
+
result = type_mapping || unmapped_type(type)
|
|
819
|
+
if !result.is_a?(Class)
|
|
820
|
+
raise Errors::InvalidFieldType.new(self, name, type)
|
|
821
|
+
else
|
|
822
|
+
if INVALID_BSON_CLASSES.include?(result)
|
|
823
|
+
warn_message = "Using #{result} as the field type is not supported. "
|
|
824
|
+
if result == BSON::Decimal128
|
|
825
|
+
warn_message += "In BSON <= 4, the BSON::Decimal128 type will work as expected for both storing and querying, but will return a BigDecimal on query in BSON 5+."
|
|
826
|
+
else
|
|
827
|
+
warn_message += "Saving values of this type to the database will work as expected, however, querying them will return a value of the native Ruby Integer type."
|
|
828
|
+
end
|
|
829
|
+
Mongoid.logger.warn(warn_message)
|
|
830
|
+
end
|
|
831
|
+
end
|
|
832
|
+
result
|
|
833
|
+
end
|
|
834
|
+
|
|
835
|
+
# Returns the type of the field if the type was not in the TYPE_MAPPINGS
|
|
836
|
+
# hash.
|
|
837
|
+
#
|
|
838
|
+
# @param [ Symbol | Class ] type The type of the field.
|
|
839
|
+
#
|
|
840
|
+
# @return [ Class ] The type of the field.
|
|
841
|
+
#
|
|
842
|
+
# @api private
|
|
843
|
+
def unmapped_type(type)
|
|
844
|
+
if "Boolean" == type.to_s
|
|
574
845
|
Mongoid::Boolean
|
|
575
846
|
else
|
|
576
|
-
|
|
847
|
+
type || Object
|
|
577
848
|
end
|
|
578
849
|
end
|
|
579
850
|
end
|