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
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require 'mongoid/association/constrainable'
|
|
5
4
|
require 'mongoid/association/options'
|
|
@@ -8,8 +7,6 @@ module Mongoid
|
|
|
8
7
|
module Association
|
|
9
8
|
|
|
10
9
|
# This module provides behaviors shared between Association types.
|
|
11
|
-
#
|
|
12
|
-
# @since 7.0
|
|
13
10
|
module Relatable
|
|
14
11
|
include Constrainable
|
|
15
12
|
include Options
|
|
@@ -17,8 +14,6 @@ module Mongoid
|
|
|
17
14
|
# The options shared between all association types.
|
|
18
15
|
#
|
|
19
16
|
# @return [ Array<Symbol> ] The shared options.
|
|
20
|
-
#
|
|
21
|
-
# @since 7.0
|
|
22
17
|
SHARED_OPTIONS = [
|
|
23
18
|
:class_name,
|
|
24
19
|
:inverse_of,
|
|
@@ -29,22 +24,16 @@ module Mongoid
|
|
|
29
24
|
# The primary key default.
|
|
30
25
|
#
|
|
31
26
|
# @return [ String ] The primary key field default.
|
|
32
|
-
#
|
|
33
|
-
# @since 7.0
|
|
34
27
|
PRIMARY_KEY_DEFAULT = '_id'.freeze
|
|
35
28
|
|
|
36
29
|
# The name of the association.
|
|
37
30
|
#
|
|
38
31
|
# @return [ Symbol ] The name of the association.
|
|
39
|
-
#
|
|
40
|
-
# @since 7.0
|
|
41
32
|
attr_reader :name
|
|
42
33
|
|
|
43
34
|
# The options on this association.
|
|
44
35
|
#
|
|
45
36
|
# @return [ Hash ] The options.
|
|
46
|
-
#
|
|
47
|
-
# @since 7.0
|
|
48
37
|
attr_reader :options
|
|
49
38
|
|
|
50
39
|
# Initialize the Association.
|
|
@@ -53,8 +42,6 @@ module Mongoid
|
|
|
53
42
|
# @param [ Symbol ] name The name of the association.
|
|
54
43
|
# @param [ Hash ] opts The association options.
|
|
55
44
|
# @param [ Block ] block The optional block.
|
|
56
|
-
#
|
|
57
|
-
# @since 7.0
|
|
58
45
|
def initialize(_class, name, opts = {}, &block)
|
|
59
46
|
@owner_class = _class
|
|
60
47
|
@name = name
|
|
@@ -71,8 +58,6 @@ module Mongoid
|
|
|
71
58
|
# Compare this association to another.
|
|
72
59
|
#
|
|
73
60
|
# @return [ Object ] The object to compare to this association.
|
|
74
|
-
#
|
|
75
|
-
# @since 7.0
|
|
76
61
|
def ==(other)
|
|
77
62
|
relation_class_name == other.relation_class_name &&
|
|
78
63
|
inverse_class_name == other.inverse_class_name &&
|
|
@@ -84,10 +69,8 @@ module Mongoid
|
|
|
84
69
|
#
|
|
85
70
|
# @param [ Symbol ] callback_type The type of callback type.
|
|
86
71
|
#
|
|
87
|
-
# @return [ Array<Proc
|
|
72
|
+
# @return [ Array<Proc | Symbol> ] A list of the callbacks, either method
|
|
88
73
|
# names or Procs.
|
|
89
|
-
#
|
|
90
|
-
# @since 7.0
|
|
91
74
|
def get_callbacks(callback_type)
|
|
92
75
|
Array(options[callback_type])
|
|
93
76
|
end
|
|
@@ -96,8 +79,6 @@ module Mongoid
|
|
|
96
79
|
# @note Only relevant for polymorphic associations that take the :as option.
|
|
97
80
|
#
|
|
98
81
|
# @return [ String ] The type setter method.
|
|
99
|
-
#
|
|
100
|
-
# @since 7.0
|
|
101
82
|
def type_setter
|
|
102
83
|
@type_setter ||= type.__setter__
|
|
103
84
|
end
|
|
@@ -107,9 +88,7 @@ module Mongoid
|
|
|
107
88
|
#
|
|
108
89
|
# @param [ Document ] doc The document to be bound.
|
|
109
90
|
#
|
|
110
|
-
# @return [ true
|
|
111
|
-
#
|
|
112
|
-
# @since 7.0
|
|
91
|
+
# @return [ true | false ] Whether the document can be bound.
|
|
113
92
|
def bindable?(doc); false; end
|
|
114
93
|
|
|
115
94
|
# Get the inverse names.
|
|
@@ -118,10 +97,10 @@ module Mongoid
|
|
|
118
97
|
# determining inverses.
|
|
119
98
|
#
|
|
120
99
|
# @return [ Array<Symbol> ] The list of inverse names.
|
|
121
|
-
#
|
|
122
|
-
# @since 7.0
|
|
123
100
|
def inverses(other = nil)
|
|
124
101
|
return [ inverse_of ] if inverse_of
|
|
102
|
+
return [] if @options.key?(:inverse_of) && !inverse_of
|
|
103
|
+
|
|
125
104
|
if polymorphic?
|
|
126
105
|
polymorphic_inverses(other)
|
|
127
106
|
else
|
|
@@ -135,8 +114,6 @@ module Mongoid
|
|
|
135
114
|
# determining inverses.
|
|
136
115
|
#
|
|
137
116
|
# @return [ Association ] The inverse's association metadata.
|
|
138
|
-
#
|
|
139
|
-
# @since 7.0
|
|
140
117
|
def inverse_association(other = nil)
|
|
141
118
|
(other || relation_class).relations[inverse(other)]
|
|
142
119
|
end
|
|
@@ -144,8 +121,6 @@ module Mongoid
|
|
|
144
121
|
# Get the inverse type.
|
|
145
122
|
#
|
|
146
123
|
# @return [ nil ] Default is nil for an association.
|
|
147
|
-
#
|
|
148
|
-
# @since 7.0
|
|
149
124
|
def inverse_type; end
|
|
150
125
|
|
|
151
126
|
# The class name, possibly unqualified or :: prefixed, of the association
|
|
@@ -169,8 +144,6 @@ module Mongoid
|
|
|
169
144
|
# the +relation_class+ method.
|
|
170
145
|
#
|
|
171
146
|
# @return [ String ] The association objects' class name.
|
|
172
|
-
#
|
|
173
|
-
# @since 7.0
|
|
174
147
|
def relation_class_name
|
|
175
148
|
@class_name ||= @options[:class_name] || ActiveSupport::Inflector.classify(name)
|
|
176
149
|
end
|
|
@@ -190,8 +163,6 @@ module Mongoid
|
|
|
190
163
|
# happen to be defined with the same name as the association name).
|
|
191
164
|
#
|
|
192
165
|
# @return [ String ] The association objects' class.
|
|
193
|
-
#
|
|
194
|
-
# @since 7.0
|
|
195
166
|
def relation_class
|
|
196
167
|
@klass ||= begin
|
|
197
168
|
cls_name = @options[:class_name] || ActiveSupport::Inflector.classify(name)
|
|
@@ -203,8 +174,6 @@ module Mongoid
|
|
|
203
174
|
# The class name of the object owning this association.
|
|
204
175
|
#
|
|
205
176
|
# @return [ String ] The owning objects' class name.
|
|
206
|
-
#
|
|
207
|
-
# @since 7.0
|
|
208
177
|
def inverse_class_name
|
|
209
178
|
@inverse_class_name ||= @owner_class.name
|
|
210
179
|
end
|
|
@@ -212,8 +181,6 @@ module Mongoid
|
|
|
212
181
|
# The class of the object owning this association.
|
|
213
182
|
#
|
|
214
183
|
# @return [ String ] The owning objects' class.
|
|
215
|
-
#
|
|
216
|
-
# @since 7.0
|
|
217
184
|
def inverse_class
|
|
218
185
|
@owner_class
|
|
219
186
|
end
|
|
@@ -222,9 +189,7 @@ module Mongoid
|
|
|
222
189
|
# The foreign key field if this association stores a foreign key.
|
|
223
190
|
# Otherwise, the primary key.
|
|
224
191
|
#
|
|
225
|
-
# @return [ Symbol
|
|
226
|
-
#
|
|
227
|
-
# @since 7.0
|
|
192
|
+
# @return [ Symbol | String ] The primary key.
|
|
228
193
|
def key
|
|
229
194
|
stores_foreign_key? ? foreign_key : primary_key
|
|
230
195
|
end
|
|
@@ -232,8 +197,6 @@ module Mongoid
|
|
|
232
197
|
# The name of the setter on this object for assigning an associated object.
|
|
233
198
|
#
|
|
234
199
|
# @return [ String ] The setter name.
|
|
235
|
-
#
|
|
236
|
-
# @since 7.0
|
|
237
200
|
def setter
|
|
238
201
|
@setter ||= "#{name}="
|
|
239
202
|
end
|
|
@@ -241,8 +204,6 @@ module Mongoid
|
|
|
241
204
|
# The name of the inverse setter method.
|
|
242
205
|
#
|
|
243
206
|
# @return [ String ] The name of the inverse setter.
|
|
244
|
-
#
|
|
245
|
-
# @since 7.0
|
|
246
207
|
def inverse_setter(other = nil)
|
|
247
208
|
@inverse_setter ||= "#{inverses(other).first}=" unless inverses(other).blank?
|
|
248
209
|
end
|
|
@@ -250,8 +211,6 @@ module Mongoid
|
|
|
250
211
|
# The name of the foreign key setter method.
|
|
251
212
|
#
|
|
252
213
|
# @return [ String ] The name of the foreign key setter.
|
|
253
|
-
#
|
|
254
|
-
# @since 7.0
|
|
255
214
|
def foreign_key_setter
|
|
256
215
|
# note: You can't check if this association stores foreign key
|
|
257
216
|
# See HasOne and HasMany binding, they referenced foreign_key_setter
|
|
@@ -261,8 +220,6 @@ module Mongoid
|
|
|
261
220
|
# The atomic path for this association.
|
|
262
221
|
#
|
|
263
222
|
# @return [ Mongoid::Atomic::Paths::Root ] The atomic path object.
|
|
264
|
-
#
|
|
265
|
-
# @since 7.0
|
|
266
223
|
def path(document)
|
|
267
224
|
relation.path(document)
|
|
268
225
|
end
|
|
@@ -274,8 +231,6 @@ module Mongoid
|
|
|
274
231
|
# association.inverse_type_setter
|
|
275
232
|
#
|
|
276
233
|
# @return [ String ] The name of the setter.
|
|
277
|
-
#
|
|
278
|
-
# @since 7.0
|
|
279
234
|
def inverse_type_setter
|
|
280
235
|
@inverse_type_setter ||= inverse_type.__setter__
|
|
281
236
|
end
|
|
@@ -286,30 +241,24 @@ module Mongoid
|
|
|
286
241
|
# association.foreign_key_check
|
|
287
242
|
#
|
|
288
243
|
# @return [ String ] The foreign key check.
|
|
289
|
-
#
|
|
290
|
-
# @since 7.0
|
|
291
244
|
def foreign_key_check
|
|
292
|
-
@foreign_key_check ||= "#{foreign_key}
|
|
245
|
+
@foreign_key_check ||= "#{foreign_key}_previously_changed?" if (stores_foreign_key? && foreign_key)
|
|
293
246
|
end
|
|
294
247
|
|
|
295
248
|
# Create an association proxy object using the owner and target.
|
|
296
249
|
#
|
|
297
250
|
# @param [ Document ] owner The document this association hangs off of.
|
|
298
|
-
# @param [ Document
|
|
251
|
+
# @param [ Document | Array<Document> ] target The target (parent) of the
|
|
299
252
|
# association.
|
|
300
253
|
#
|
|
301
254
|
# @return [ Proxy ]
|
|
302
|
-
#
|
|
303
|
-
# @since 7.0
|
|
304
255
|
def create_relation(owner, target)
|
|
305
256
|
relation.new(owner, target, self)
|
|
306
257
|
end
|
|
307
258
|
|
|
308
259
|
# Whether the dependent method is destructive.
|
|
309
260
|
#
|
|
310
|
-
# @return [ true
|
|
311
|
-
#
|
|
312
|
-
# @since 7.0
|
|
261
|
+
# @return [ true | false ] If the dependent method is destructive.
|
|
313
262
|
def destructive?
|
|
314
263
|
@destructive ||= !!(dependent && (dependent == :delete_all || dependent == :destroy))
|
|
315
264
|
end
|
|
@@ -317,8 +266,6 @@ module Mongoid
|
|
|
317
266
|
# Get the counter cache column name.
|
|
318
267
|
#
|
|
319
268
|
# @return [ String ] The counter cache column name.
|
|
320
|
-
#
|
|
321
|
-
# @since 7.0
|
|
322
269
|
def counter_cache_column_name
|
|
323
270
|
@counter_cache_column_name ||= (@options[:counter_cache].is_a?(String) ||
|
|
324
271
|
@options[:counter_cache].is_a?(Symbol)) ?
|
|
@@ -328,8 +275,6 @@ module Mongoid
|
|
|
328
275
|
# Get the extension.
|
|
329
276
|
#
|
|
330
277
|
# @return [ Module ] The extension module, if one has been defined.
|
|
331
|
-
#
|
|
332
|
-
# @since 7.0
|
|
333
278
|
def extension
|
|
334
279
|
@extension ||= @options[:extend]
|
|
335
280
|
end
|
|
@@ -337,8 +282,6 @@ module Mongoid
|
|
|
337
282
|
# Get the inverse name.
|
|
338
283
|
#
|
|
339
284
|
# @return [ Symbol ] The inverse name.
|
|
340
|
-
#
|
|
341
|
-
# @since 7.0
|
|
342
285
|
def inverse(other = nil)
|
|
343
286
|
candidates = inverses(other)
|
|
344
287
|
candidates.detect { |c| c } if candidates
|
|
@@ -346,10 +289,8 @@ module Mongoid
|
|
|
346
289
|
|
|
347
290
|
# Whether the associated object(s) should be validated.
|
|
348
291
|
#
|
|
349
|
-
# @return [ true
|
|
292
|
+
# @return [ true | false ] If the associated object(s)
|
|
350
293
|
# should be validated.
|
|
351
|
-
#
|
|
352
|
-
# @since 7.0
|
|
353
294
|
def validate?
|
|
354
295
|
@validate ||= if @options[:validate].nil?
|
|
355
296
|
validation_default
|
|
@@ -358,6 +299,35 @@ module Mongoid
|
|
|
358
299
|
end
|
|
359
300
|
end
|
|
360
301
|
|
|
302
|
+
# @return [ Array<String> ] The associations above this one in the inclusion tree.
|
|
303
|
+
attr_accessor :parent_inclusions
|
|
304
|
+
|
|
305
|
+
def parent_inclusions
|
|
306
|
+
@parent_inclusions ||= []
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
# Is this association an embeds_many or has_many association?
|
|
310
|
+
#
|
|
311
|
+
# @return [ true | false ] true if it is a *_many association, false if not.
|
|
312
|
+
def many?
|
|
313
|
+
[Referenced::HasMany, Embedded::EmbedsMany].any? { |a| self.is_a?(a) }
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
# Is this association an embeds_one or has_one association?
|
|
317
|
+
#
|
|
318
|
+
# @return [ true | false ] true if it is a *_one association, false if not.
|
|
319
|
+
def one?
|
|
320
|
+
[Referenced::HasOne, Embedded::EmbedsOne].any? { |a| self.is_a?(a) }
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
# Is this association an embedded_in or belongs_to association?
|
|
324
|
+
#
|
|
325
|
+
# @return [ true | false ] true if it is an embedded_in or belongs_to
|
|
326
|
+
# association, false if not.
|
|
327
|
+
def in_to?
|
|
328
|
+
[Referenced::BelongsTo, Embedded::EmbeddedIn].any? { |a| self.is_a?(a) }
|
|
329
|
+
end
|
|
330
|
+
|
|
361
331
|
private
|
|
362
332
|
|
|
363
333
|
# Gets the model classes with inverse associations of this model. This is used to determine
|
|
@@ -463,10 +433,15 @@ module Mongoid
|
|
|
463
433
|
def namespace_hierarchy(mod)
|
|
464
434
|
parent = Object
|
|
465
435
|
hier = [parent]
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
436
|
+
|
|
437
|
+
# name is not present on anonymous modules
|
|
438
|
+
if mod.name
|
|
439
|
+
mod.name.split('::').each do |part|
|
|
440
|
+
parent = parent.const_get(part)
|
|
441
|
+
hier << parent
|
|
442
|
+
end
|
|
469
443
|
end
|
|
444
|
+
|
|
470
445
|
hier.reverse
|
|
471
446
|
end
|
|
472
447
|
|
data/lib/mongoid/association.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
require 'mongoid/association/accessors'
|
|
5
4
|
require 'mongoid/association/builders'
|
|
@@ -34,8 +33,6 @@ module Mongoid
|
|
|
34
33
|
# Map the macros to their corresponding Association classes.
|
|
35
34
|
#
|
|
36
35
|
# @return [ Hash ] The mapping from macros to their Association class.
|
|
37
|
-
#
|
|
38
|
-
# @since 7.0
|
|
39
36
|
MACRO_MAPPING = {
|
|
40
37
|
embeds_one: Association::Embedded::EmbedsOne,
|
|
41
38
|
embeds_many: Association::Embedded::EmbedsMany,
|
|
@@ -59,9 +56,7 @@ module Mongoid
|
|
|
59
56
|
# @example Is the document embedded?
|
|
60
57
|
# address.embedded?
|
|
61
58
|
#
|
|
62
|
-
# @return [ true
|
|
63
|
-
#
|
|
64
|
-
# @since 2.0.0.rc.1
|
|
59
|
+
# @return [ true | false ] True if the document has a parent document.
|
|
65
60
|
def embedded?
|
|
66
61
|
@embedded ||= (cyclic ? _parent.present? : self.class.embedded?)
|
|
67
62
|
end
|
|
@@ -71,9 +66,7 @@ module Mongoid
|
|
|
71
66
|
# @example Is the document in an embeds many?
|
|
72
67
|
# address.embedded_many?
|
|
73
68
|
#
|
|
74
|
-
# @return [ true
|
|
75
|
-
#
|
|
76
|
-
# @since 2.0.0.rc.1
|
|
69
|
+
# @return [ true | false ] True if in an embeds many.
|
|
77
70
|
def embedded_many?
|
|
78
71
|
_association && _association.is_a?(Association::Embedded::EmbedsMany)
|
|
79
72
|
end
|
|
@@ -83,9 +76,7 @@ module Mongoid
|
|
|
83
76
|
# @example Is the document in an embeds one?
|
|
84
77
|
# address.embedded_one?
|
|
85
78
|
#
|
|
86
|
-
# @return [ true
|
|
87
|
-
#
|
|
88
|
-
# @since 2.0.0.rc.1
|
|
79
|
+
# @return [ true | false ] True if in an embeds one.
|
|
89
80
|
def embedded_one?
|
|
90
81
|
_association && _association.is_a?(Association::Embedded::EmbedsOne)
|
|
91
82
|
end
|
|
@@ -99,8 +90,6 @@ module Mongoid
|
|
|
99
90
|
# @raise [ Errors::NoMetadata ] If no association metadata is present.
|
|
100
91
|
#
|
|
101
92
|
# @return [ Symbol ] The association name.
|
|
102
|
-
#
|
|
103
|
-
# @since 3.0.0
|
|
104
93
|
def association_name
|
|
105
94
|
raise Errors::NoMetadata.new(self.class.name) unless _association
|
|
106
95
|
_association.name
|
|
@@ -111,9 +100,7 @@ module Mongoid
|
|
|
111
100
|
# @example Is the document in a references many?
|
|
112
101
|
# post.referenced_many?
|
|
113
102
|
#
|
|
114
|
-
# @return [ true
|
|
115
|
-
#
|
|
116
|
-
# @since 2.0.0.rc.1
|
|
103
|
+
# @return [ true | false ] True if in a references many.
|
|
117
104
|
def referenced_many?
|
|
118
105
|
_association && _association.is_a?(Association::Referenced::HasMany)
|
|
119
106
|
end
|
|
@@ -123,9 +110,7 @@ module Mongoid
|
|
|
123
110
|
# @example Is the document in a references one?
|
|
124
111
|
# address.referenced_one?
|
|
125
112
|
#
|
|
126
|
-
# @return [ true
|
|
127
|
-
#
|
|
128
|
-
# @since 2.0.0.rc.1
|
|
113
|
+
# @return [ true | false ] True if in a references one.
|
|
129
114
|
def referenced_one?
|
|
130
115
|
_association && _association.is_a?(Association::Referenced::HasOne)
|
|
131
116
|
end
|
|
@@ -137,8 +122,6 @@ module Mongoid
|
|
|
137
122
|
# document.reload_relations
|
|
138
123
|
#
|
|
139
124
|
# @return [ Hash ] The association metadata.
|
|
140
|
-
#
|
|
141
|
-
# @since 2.1.6
|
|
142
125
|
def reload_relations
|
|
143
126
|
relations.each_pair do |name, meta|
|
|
144
127
|
if instance_variable_defined?("@_#{name}")
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Atomic
|
|
@@ -14,8 +13,6 @@ module Mongoid
|
|
|
14
13
|
# modifiers.add_to_set({ "preference_ids" => [ "one" ] })
|
|
15
14
|
#
|
|
16
15
|
# @param [ Hash ] modifications The add to set modifiers.
|
|
17
|
-
#
|
|
18
|
-
# @since 2.4.0
|
|
19
16
|
def add_to_set(modifications)
|
|
20
17
|
modifications.each_pair do |field, value|
|
|
21
18
|
if add_to_sets.has_key?(field)
|
|
@@ -34,8 +31,6 @@ module Mongoid
|
|
|
34
31
|
# modifiers.pull_all({ "addresses" => { "street" => "Bond" }})
|
|
35
32
|
#
|
|
36
33
|
# @param [ Hash ] modifications The pull all modifiers.
|
|
37
|
-
#
|
|
38
|
-
# @since 3.0.0
|
|
39
34
|
def pull_all(modifications)
|
|
40
35
|
modifications.each_pair do |field, value|
|
|
41
36
|
add_operation(pull_alls, field, value)
|
|
@@ -49,8 +44,6 @@ module Mongoid
|
|
|
49
44
|
# modifiers.pull({ "addresses" => { "_id" => { "$in" => [ 1, 2, 3 ]}}})
|
|
50
45
|
#
|
|
51
46
|
# @param [ Hash ] modifications The pull all modifiers.
|
|
52
|
-
#
|
|
53
|
-
# @since 3.0.0
|
|
54
47
|
def pull(modifications)
|
|
55
48
|
modifications.each_pair do |field, value|
|
|
56
49
|
pulls[field] = value
|
|
@@ -64,8 +57,6 @@ module Mongoid
|
|
|
64
57
|
# modifiers.push({ "addresses" => { "street" => "Bond" }})
|
|
65
58
|
#
|
|
66
59
|
# @param [ Hash ] modifications The push modifiers.
|
|
67
|
-
#
|
|
68
|
-
# @since 2.1.0
|
|
69
60
|
def push(modifications)
|
|
70
61
|
modifications.each_pair do |field, value|
|
|
71
62
|
push_fields[field] = field
|
|
@@ -80,8 +71,6 @@ module Mongoid
|
|
|
80
71
|
# modifiers.set({ "title" => "sir" })
|
|
81
72
|
#
|
|
82
73
|
# @param [ Hash ] modifications The set modifiers.
|
|
83
|
-
#
|
|
84
|
-
# @since 2.1.0
|
|
85
74
|
def set(modifications)
|
|
86
75
|
modifications.each_pair do |field, value|
|
|
87
76
|
next if field == "_id"
|
|
@@ -97,8 +86,6 @@ module Mongoid
|
|
|
97
86
|
# modifiers.unset([ "addresses" ])
|
|
98
87
|
#
|
|
99
88
|
# @param [ Array<String> ] modifications The unset association names.
|
|
100
|
-
#
|
|
101
|
-
# @since 2.2.0
|
|
102
89
|
def unset(modifications)
|
|
103
90
|
modifications.each do |field|
|
|
104
91
|
unsets.update(field => true)
|
|
@@ -116,8 +103,6 @@ module Mongoid
|
|
|
116
103
|
# @param [ Hash ] mods The modifications.
|
|
117
104
|
# @param [ String ] field The field.
|
|
118
105
|
# @param [ Hash ] value The atomic op.
|
|
119
|
-
#
|
|
120
|
-
# @since 2.2.0
|
|
121
106
|
def add_operation(mods, field, value)
|
|
122
107
|
if mods.has_key?(field)
|
|
123
108
|
if mods[field].is_a?(Array)
|
|
@@ -141,8 +126,6 @@ module Mongoid
|
|
|
141
126
|
# @param [ Hash ] mods The modifications.
|
|
142
127
|
# @param [ String ] field The field.
|
|
143
128
|
# @param [ Hash ] value The atomic op.
|
|
144
|
-
#
|
|
145
|
-
# @since 7.0.0
|
|
146
129
|
def add_each_operation(mods, field, value)
|
|
147
130
|
if mods.has_key?(field)
|
|
148
131
|
value.each do |val|
|
|
@@ -153,14 +136,12 @@ module Mongoid
|
|
|
153
136
|
end
|
|
154
137
|
end
|
|
155
138
|
|
|
156
|
-
# Get the $addToSet operations or
|
|
139
|
+
# Get the $addToSet operations or initialize a new one.
|
|
157
140
|
#
|
|
158
141
|
# @example Get the $addToSet operations.
|
|
159
142
|
# modifiers.add_to_sets
|
|
160
143
|
#
|
|
161
144
|
# @return [ Hash ] The $addToSet operations.
|
|
162
|
-
#
|
|
163
|
-
# @since 2.4.0
|
|
164
145
|
def add_to_sets
|
|
165
146
|
self["$addToSet"] ||= {}
|
|
166
147
|
end
|
|
@@ -172,9 +153,7 @@ module Mongoid
|
|
|
172
153
|
#
|
|
173
154
|
# @param [ String ] field The field.
|
|
174
155
|
#
|
|
175
|
-
# @return [ true
|
|
176
|
-
#
|
|
177
|
-
# @since 2.2.0
|
|
156
|
+
# @return [ true | false ] If this field is a conflict.
|
|
178
157
|
def set_conflict?(field)
|
|
179
158
|
name = field.split(".", 2)[0]
|
|
180
159
|
pull_fields.has_key?(name) || push_fields.has_key?(name)
|
|
@@ -187,13 +166,11 @@ module Mongoid
|
|
|
187
166
|
#
|
|
188
167
|
# @param [ String ] field The field.
|
|
189
168
|
#
|
|
190
|
-
# @return [ true
|
|
191
|
-
#
|
|
192
|
-
# @since 2.2.0
|
|
169
|
+
# @return [ true | false ] If this field is a conflict.
|
|
193
170
|
def push_conflict?(field)
|
|
194
171
|
name = field.split(".", 2)[0]
|
|
195
172
|
set_fields.has_key?(name) || pull_fields.has_key?(name) ||
|
|
196
|
-
(push_fields.keys.count { |item| item
|
|
173
|
+
(push_fields.keys.count { |item| item.split('.', 2).first == name } > 1)
|
|
197
174
|
end
|
|
198
175
|
|
|
199
176
|
# Get the conflicting pull modifications.
|
|
@@ -202,8 +179,6 @@ module Mongoid
|
|
|
202
179
|
# modifiers.conflicting_pulls
|
|
203
180
|
#
|
|
204
181
|
# @return [ Hash ] The conflicting pull operations.
|
|
205
|
-
#
|
|
206
|
-
# @since 2.2.0
|
|
207
182
|
def conflicting_pulls
|
|
208
183
|
conflicts["$pullAll"] ||= {}
|
|
209
184
|
end
|
|
@@ -214,8 +189,6 @@ module Mongoid
|
|
|
214
189
|
# modifiers.conflicting_pushs
|
|
215
190
|
#
|
|
216
191
|
# @return [ Hash ] The conflicting push operations.
|
|
217
|
-
#
|
|
218
|
-
# @since 2.2.0
|
|
219
192
|
def conflicting_pushes
|
|
220
193
|
conflicts["$push"] ||= {}
|
|
221
194
|
end
|
|
@@ -226,8 +199,6 @@ module Mongoid
|
|
|
226
199
|
# modifiers.conflicting_sets
|
|
227
200
|
#
|
|
228
201
|
# @return [ Hash ] The conflicting set operations.
|
|
229
|
-
#
|
|
230
|
-
# @since 2.2.0
|
|
231
202
|
def conflicting_sets
|
|
232
203
|
conflicts["$set"] ||= {}
|
|
233
204
|
end
|
|
@@ -238,8 +209,6 @@ module Mongoid
|
|
|
238
209
|
# modifiers.conflicts
|
|
239
210
|
#
|
|
240
211
|
# @return [ Hash ] The conflicting modifications.
|
|
241
|
-
#
|
|
242
|
-
# @since 2.1.0
|
|
243
212
|
def conflicts
|
|
244
213
|
self[:conflicts] ||= {}
|
|
245
214
|
end
|
|
@@ -250,8 +219,6 @@ module Mongoid
|
|
|
250
219
|
# modifiers.pull_fields
|
|
251
220
|
#
|
|
252
221
|
# @return [ Array<String> ] The pull fields.
|
|
253
|
-
#
|
|
254
|
-
# @since 2.2.0
|
|
255
222
|
def pull_fields
|
|
256
223
|
@pull_fields ||= {}
|
|
257
224
|
end
|
|
@@ -262,8 +229,6 @@ module Mongoid
|
|
|
262
229
|
# modifiers.push_fields
|
|
263
230
|
#
|
|
264
231
|
# @return [ Array<String> ] The push fields.
|
|
265
|
-
#
|
|
266
|
-
# @since 2.2.0
|
|
267
232
|
def push_fields
|
|
268
233
|
@push_fields ||= {}
|
|
269
234
|
end
|
|
@@ -274,32 +239,26 @@ module Mongoid
|
|
|
274
239
|
# modifiers.set_fields
|
|
275
240
|
#
|
|
276
241
|
# @return [ Array<String> ] The set fields.
|
|
277
|
-
#
|
|
278
|
-
# @since 2.2.0
|
|
279
242
|
def set_fields
|
|
280
243
|
@set_fields ||= {}
|
|
281
244
|
end
|
|
282
245
|
|
|
283
|
-
# Get the $pullAll operations or
|
|
246
|
+
# Get the $pullAll operations or initialize a new one.
|
|
284
247
|
#
|
|
285
248
|
# @example Get the $pullAll operations.
|
|
286
249
|
# modifiers.pull_alls
|
|
287
250
|
#
|
|
288
251
|
# @return [ Hash ] The $pullAll operations.
|
|
289
|
-
#
|
|
290
|
-
# @since 3.0.0
|
|
291
252
|
def pull_alls
|
|
292
253
|
self["$pullAll"] ||= {}
|
|
293
254
|
end
|
|
294
255
|
|
|
295
|
-
# Get the $pull operations or
|
|
256
|
+
# Get the $pull operations or initialize a new one.
|
|
296
257
|
#
|
|
297
258
|
# @example Get the $pull operations.
|
|
298
259
|
# modifiers.pulls
|
|
299
260
|
#
|
|
300
261
|
# @return [ Hash ] The $pull operations.
|
|
301
|
-
#
|
|
302
|
-
# @since 3.0.0
|
|
303
262
|
def pulls
|
|
304
263
|
self["$pull"] ||= {}
|
|
305
264
|
end
|
|
@@ -310,20 +269,16 @@ module Mongoid
|
|
|
310
269
|
# modifiers.pushes
|
|
311
270
|
#
|
|
312
271
|
# @return [ Hash ] The $push/$each operations.
|
|
313
|
-
#
|
|
314
|
-
# @since 2.1.0
|
|
315
272
|
def pushes
|
|
316
273
|
self["$push"] ||= {}
|
|
317
274
|
end
|
|
318
275
|
|
|
319
|
-
# Get the $set operations or
|
|
276
|
+
# Get the $set operations or initialize a new one.
|
|
320
277
|
#
|
|
321
278
|
# @example Get the $set operations.
|
|
322
279
|
# modifiers.sets
|
|
323
280
|
#
|
|
324
281
|
# @return [ Hash ] The $set operations.
|
|
325
|
-
#
|
|
326
|
-
# @since 2.1.0
|
|
327
282
|
def sets
|
|
328
283
|
self["$set"] ||= {}
|
|
329
284
|
end
|
|
@@ -334,8 +289,6 @@ module Mongoid
|
|
|
334
289
|
# modifiers.unsets
|
|
335
290
|
#
|
|
336
291
|
# @return [ Hash ] The $unset operations.
|
|
337
|
-
#
|
|
338
|
-
# @since 2.2.0
|
|
339
292
|
def unsets
|
|
340
293
|
self["$unset"] ||= {}
|
|
341
294
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
# encoding: utf-8
|
|
3
2
|
|
|
4
3
|
module Mongoid
|
|
5
4
|
module Atomic
|
|
@@ -17,8 +16,6 @@ module Mongoid
|
|
|
17
16
|
# Many.new(document)
|
|
18
17
|
#
|
|
19
18
|
# @param [ Document ] document The document to generate the paths for.
|
|
20
|
-
#
|
|
21
|
-
# @since 2.1.0
|
|
22
19
|
def initialize(document)
|
|
23
20
|
@document, @parent = document, document._parent
|
|
24
21
|
@insert_modifier, @delete_modifier ="$push", "$pull"
|
|
@@ -32,13 +29,30 @@ module Mongoid
|
|
|
32
29
|
# many.position
|
|
33
30
|
#
|
|
34
31
|
# @return [ String ] The position of the document.
|
|
35
|
-
#
|
|
36
|
-
# @since 2.1.0
|
|
37
32
|
def position
|
|
38
33
|
pos = parent.atomic_position
|
|
39
34
|
locator = document.new_record? ? "" : ".#{document._index}"
|
|
40
35
|
"#{pos}#{"." unless pos.blank?}#{document._association.store_as}#{locator}"
|
|
41
36
|
end
|
|
37
|
+
|
|
38
|
+
class << self
|
|
39
|
+
|
|
40
|
+
# Get the position of where the document would go for the given
|
|
41
|
+
# association. The use case for this function is when trying to
|
|
42
|
+
# persist an empty list for an embedded association. All of the
|
|
43
|
+
# existing functions for getting the position to store a document
|
|
44
|
+
# require passing in a document to store, which we don't have when
|
|
45
|
+
# trying to store the empty list.
|
|
46
|
+
#
|
|
47
|
+
# @param [ Document ] parent The parent document to store in.
|
|
48
|
+
# @param [ Association ] association The association.
|
|
49
|
+
#
|
|
50
|
+
# @return [ String ] The position string.
|
|
51
|
+
def position_without_document(parent, association)
|
|
52
|
+
pos = parent.atomic_position
|
|
53
|
+
"#{pos}#{"." unless pos.blank?}#{association.store_as}"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
42
56
|
end
|
|
43
57
|
end
|
|
44
58
|
end
|