mongoid 7.0.10 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +30 -30
- data/README.md +32 -19
- data/Rakefile +51 -7
- data/lib/config/locales/en.yml +129 -70
- data/lib/mongoid/association/accessors.rb +143 -80
- data/lib/mongoid/association/bindable.rb +7 -26
- data/lib/mongoid/association/builders.rb +4 -12
- data/lib/mongoid/association/constrainable.rb +5 -6
- data/lib/mongoid/association/depending.rb +9 -18
- data/lib/mongoid/association/eager_loadable.rb +2 -3
- data/lib/mongoid/association/embedded/batchable.rb +16 -42
- data/lib/mongoid/association/embedded/cyclic.rb +10 -17
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +3 -7
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +7 -4
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +14 -24
- data/lib/mongoid/association/embedded/embedded_in.rb +6 -26
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +8 -5
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +90 -93
- data/lib/mongoid/association/embedded/embeds_many.rb +6 -34
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +4 -8
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +9 -6
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +42 -27
- data/lib/mongoid/association/embedded/embeds_one.rb +6 -30
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +44 -41
- data/lib/mongoid/association/many.rb +16 -30
- data/lib/mongoid/association/marshalable.rb +3 -6
- data/lib/mongoid/association/nested/many.rb +18 -27
- data/lib/mongoid/association/nested/nested_buildable.rb +5 -11
- data/lib/mongoid/association/nested/one.rb +16 -27
- data/lib/mongoid/association/nested.rb +3 -3
- data/lib/mongoid/association/one.rb +4 -11
- data/lib/mongoid/association/options.rb +8 -38
- data/lib/mongoid/association/proxy.rb +37 -36
- data/lib/mongoid/association/referenced/auto_save.rb +5 -11
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -9
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +11 -9
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -3
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -27
- data/lib/mongoid/association/referenced/belongs_to.rb +14 -36
- data/lib/mongoid/association/referenced/counter_cache.rb +4 -15
- data/lib/mongoid/association/referenced/eager.rb +39 -38
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -11
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +37 -57
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -43
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -5
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +444 -456
- data/lib/mongoid/association/referenced/has_many/proxy.rb +74 -107
- data/lib/mongoid/association/referenced/has_many.rb +18 -42
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +20 -6
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -26
- data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -25
- data/lib/mongoid/association/referenced/has_one.rb +13 -33
- data/lib/mongoid/association/referenced/syncable.rb +7 -22
- data/lib/mongoid/association/referenced.rb +2 -0
- data/lib/mongoid/association/reflections.rb +7 -6
- data/lib/mongoid/association/relatable.rb +18 -74
- data/lib/mongoid/association.rb +8 -22
- data/lib/mongoid/atomic/modifiers.rb +27 -51
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -7
- data/lib/mongoid/atomic/paths/embedded.rb +2 -3
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +29 -44
- data/lib/mongoid/attributes/dynamic.rb +3 -18
- data/lib/mongoid/attributes/nested.rb +7 -10
- data/lib/mongoid/attributes/processing.rb +9 -24
- data/lib/mongoid/attributes/projector.rb +119 -0
- data/lib/mongoid/attributes/readonly.rb +3 -6
- data/lib/mongoid/attributes.rb +46 -60
- data/lib/mongoid/cacheable.rb +6 -9
- data/lib/mongoid/changeable.rb +6 -60
- data/lib/mongoid/clients/factory.rb +42 -17
- data/lib/mongoid/clients/options.rb +10 -13
- data/lib/mongoid/clients/sessions.rb +2 -6
- data/lib/mongoid/clients/storage_options.rb +7 -12
- data/lib/mongoid/clients/validators/storage.rb +2 -9
- data/lib/mongoid/clients/validators.rb +2 -1
- data/lib/mongoid/clients.rb +3 -10
- data/lib/mongoid/composable.rb +5 -9
- data/lib/mongoid/config/environment.rb +15 -6
- data/lib/mongoid/config/options.rb +20 -23
- data/lib/mongoid/config/validators/client.rb +2 -17
- data/lib/mongoid/config/validators/option.rb +2 -3
- data/lib/mongoid/config/validators.rb +2 -1
- data/lib/mongoid/config.rb +112 -41
- data/lib/mongoid/contextual/aggregable/memory.rb +17 -12
- data/lib/mongoid/contextual/aggregable/mongo.rb +25 -26
- data/lib/mongoid/contextual/aggregable/none.rb +65 -0
- data/lib/mongoid/contextual/aggregable.rb +17 -0
- data/lib/mongoid/contextual/atomic.rb +29 -31
- data/lib/mongoid/contextual/command.rb +2 -5
- data/lib/mongoid/contextual/geo_near.rb +6 -37
- data/lib/mongoid/contextual/map_reduce.rb +5 -33
- data/lib/mongoid/contextual/memory.rb +8 -61
- data/lib/mongoid/contextual/mongo.rb +160 -82
- data/lib/mongoid/contextual/none.rb +44 -28
- data/lib/mongoid/contextual/queryable.rb +2 -3
- data/lib/mongoid/contextual.rb +7 -9
- data/lib/mongoid/copyable.rb +11 -10
- data/lib/mongoid/criteria/findable.rb +12 -15
- data/lib/mongoid/criteria/includable.rb +8 -15
- data/lib/mongoid/criteria/inspectable.rb +2 -3
- data/lib/mongoid/criteria/marshalable.rb +2 -5
- data/lib/mongoid/criteria/modifiable.rb +2 -19
- data/lib/mongoid/criteria/options.rb +2 -3
- data/lib/mongoid/criteria/permission.rb +2 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -13
- data/lib/mongoid/criteria/queryable/expandable.rb +68 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -27
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -11
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -26
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -12
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -29
- data/lib/mongoid/criteria/queryable/extensions/range.rb +41 -17
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -13
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -4
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -18
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -10
- data/lib/mongoid/criteria/queryable/extensions/time.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -8
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +36 -21
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +179 -40
- data/lib/mongoid/criteria/queryable/optional.rb +5 -48
- data/lib/mongoid/criteria/queryable/options.rb +2 -19
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -15
- data/lib/mongoid/criteria/queryable/selectable.rb +414 -162
- data/lib/mongoid/criteria/queryable/selector.rb +36 -24
- data/lib/mongoid/criteria/queryable/smash.rb +2 -11
- data/lib/mongoid/criteria/queryable/storable.rb +237 -0
- data/lib/mongoid/criteria/queryable.rb +7 -9
- data/lib/mongoid/criteria/scopable.rb +27 -19
- data/lib/mongoid/criteria.rb +79 -72
- data/lib/mongoid/document.rb +24 -73
- data/lib/mongoid/equality.rb +29 -12
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -5
- data/lib/mongoid/errors/callback.rb +2 -3
- data/lib/mongoid/errors/criteria_argument_required.rb +18 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -13
- data/lib/mongoid/errors/document_not_destroyed.rb +4 -7
- data/lib/mongoid/errors/document_not_found.rb +2 -9
- data/lib/mongoid/errors/eager_load.rb +6 -5
- data/lib/mongoid/errors/empty_config_file.rb +25 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -3
- data/lib/mongoid/errors/invalid_collection.rb +2 -1
- data/lib/mongoid/errors/invalid_config_file.rb +25 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -3
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -3
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -5
- data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -3
- data/lib/mongoid/errors/invalid_find.rb +2 -3
- data/lib/mongoid/errors/invalid_includes.rb +2 -3
- data/lib/mongoid/errors/invalid_index.rb +2 -3
- data/lib/mongoid/errors/invalid_options.rb +4 -5
- data/lib/mongoid/errors/invalid_path.rb +2 -3
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -5
- data/lib/mongoid/errors/invalid_query.rb +40 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -9
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -5
- data/lib/mongoid/errors/invalid_scope.rb +2 -3
- data/lib/mongoid/errors/invalid_session_use.rb +3 -6
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -5
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -3
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
- data/lib/mongoid/errors/invalid_time.rb +2 -3
- data/lib/mongoid/errors/invalid_value.rb +2 -1
- data/lib/mongoid/errors/inverse_not_found.rb +3 -4
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -3
- data/lib/mongoid/errors/mixed_relations.rb +2 -3
- data/lib/mongoid/errors/mongoid_error.rb +3 -10
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -4
- data/lib/mongoid/errors/no_client_config.rb +4 -5
- data/lib/mongoid/errors/no_client_database.rb +2 -3
- data/lib/mongoid/errors/no_client_hosts.rb +2 -3
- data/lib/mongoid/errors/no_clients_config.rb +2 -3
- data/lib/mongoid/errors/no_default_client.rb +3 -4
- data/lib/mongoid/errors/no_environment.rb +2 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -3
- data/lib/mongoid/errors/no_metadata.rb +2 -3
- data/lib/mongoid/errors/no_parent.rb +2 -3
- data/lib/mongoid/errors/readonly_attribute.rb +2 -3
- data/lib/mongoid/errors/readonly_document.rb +3 -6
- data/lib/mongoid/errors/scope_overwrite.rb +2 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -3
- data/lib/mongoid/errors/unknown_model.rb +2 -3
- data/lib/mongoid/errors/unsaved_document.rb +3 -2
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -3
- data/lib/mongoid/errors/validations.rb +2 -1
- data/lib/mongoid/errors.rb +12 -1
- data/lib/mongoid/evolvable.rb +4 -5
- data/lib/mongoid/extensions/array.rb +28 -37
- data/lib/mongoid/extensions/big_decimal.rb +2 -11
- data/lib/mongoid/extensions/boolean.rb +3 -5
- data/lib/mongoid/extensions/date.rb +13 -12
- data/lib/mongoid/extensions/date_time.rb +4 -12
- data/lib/mongoid/extensions/decimal128.rb +2 -5
- data/lib/mongoid/extensions/false_class.rb +4 -7
- data/lib/mongoid/extensions/float.rb +5 -10
- data/lib/mongoid/extensions/hash.rb +47 -34
- data/lib/mongoid/extensions/integer.rb +5 -12
- data/lib/mongoid/extensions/module.rb +2 -3
- data/lib/mongoid/extensions/nil_class.rb +2 -5
- data/lib/mongoid/extensions/object.rb +17 -44
- data/lib/mongoid/extensions/object_id.rb +2 -7
- data/lib/mongoid/extensions/range.rb +2 -11
- data/lib/mongoid/extensions/regexp.rb +2 -3
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +19 -39
- data/lib/mongoid/extensions/symbol.rb +2 -7
- data/lib/mongoid/extensions/time.rb +12 -9
- data/lib/mongoid/extensions/time_with_zone.rb +25 -7
- data/lib/mongoid/extensions/true_class.rb +4 -7
- data/lib/mongoid/extensions.rb +18 -3
- data/lib/mongoid/factory.rb +52 -13
- data/lib/mongoid/fields/foreign_key.rb +3 -22
- data/lib/mongoid/fields/localized.rb +2 -11
- data/lib/mongoid/fields/standard.rb +6 -36
- data/lib/mongoid/fields/validators/macro.rb +36 -18
- data/lib/mongoid/fields/validators.rb +2 -1
- data/lib/mongoid/fields.rb +113 -63
- data/lib/mongoid/findable.rb +59 -23
- data/lib/mongoid/indexable/specification.rb +3 -16
- data/lib/mongoid/indexable/validators/options.rb +2 -7
- data/lib/mongoid/indexable.rb +6 -21
- data/lib/mongoid/inspectable.rb +4 -11
- data/lib/mongoid/interceptable.rb +13 -30
- data/lib/mongoid/loggable.rb +13 -16
- data/lib/mongoid/matchable.rb +2 -153
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/elem_match.rb +36 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +67 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +35 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +62 -0
- data/lib/mongoid/matcher/field_operator.rb +54 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +110 -0
- data/lib/mongoid/persistable/creatable.rb +4 -21
- data/lib/mongoid/persistable/deletable.rb +5 -21
- data/lib/mongoid/persistable/destroyable.rb +11 -10
- data/lib/mongoid/persistable/incrementable.rb +6 -7
- data/lib/mongoid/persistable/logical.rb +4 -6
- data/lib/mongoid/persistable/poppable.rb +3 -6
- data/lib/mongoid/persistable/pullable.rb +3 -8
- data/lib/mongoid/persistable/pushable.rb +3 -8
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +3 -8
- data/lib/mongoid/persistable/settable.rb +3 -6
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +32 -20
- data/lib/mongoid/persistable/upsertable.rb +3 -8
- data/lib/mongoid/persistable.rb +133 -38
- data/lib/mongoid/persistence_context.rb +23 -36
- data/lib/mongoid/positional.rb +2 -5
- data/lib/mongoid/query_cache.rb +118 -103
- data/lib/mongoid/railtie.rb +3 -16
- data/lib/mongoid/railties/controller_runtime.rb +3 -1
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +8 -35
- data/lib/mongoid/selectable.rb +8 -17
- data/lib/mongoid/serializable.rb +24 -29
- data/lib/mongoid/shardable.rb +80 -17
- data/lib/mongoid/stateful.rb +3 -10
- data/lib/mongoid/stringified_symbol.rb +52 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -5
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +2 -55
- data/lib/mongoid/timestamps/created/short.rb +2 -1
- data/lib/mongoid/timestamps/created.rb +3 -2
- data/lib/mongoid/timestamps/short.rb +2 -1
- data/lib/mongoid/timestamps/timeless.rb +6 -9
- data/lib/mongoid/timestamps/updated/short.rb +2 -1
- data/lib/mongoid/timestamps/updated.rb +3 -4
- data/lib/mongoid/timestamps.rb +3 -2
- data/lib/mongoid/touchable.rb +53 -23
- data/lib/mongoid/traversable.rb +177 -57
- data/lib/mongoid/validatable/associated.rb +5 -6
- data/lib/mongoid/validatable/format.rb +2 -1
- data/lib/mongoid/validatable/length.rb +2 -1
- data/lib/mongoid/validatable/localizable.rb +2 -3
- data/lib/mongoid/validatable/macros.rb +2 -7
- data/lib/mongoid/validatable/presence.rb +8 -13
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +20 -33
- data/lib/mongoid/validatable.rb +8 -27
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid.rb +32 -15
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -2
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -2
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +1 -0
- data/spec/integration/app_spec.rb +246 -95
- data/spec/integration/associations/belongs_to_spec.rb +2 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
- data/spec/integration/associations/embedded_spec.rb +207 -1
- data/spec/integration/associations/embeds_many_spec.rb +206 -0
- data/spec/integration/associations/embeds_one_spec.rb +23 -0
- data/spec/integration/associations/foreign_key_spec.rb +98 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +64 -0
- data/spec/integration/associations/has_many_spec.rb +128 -0
- data/spec/integration/associations/has_one_spec.rb +176 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
- data/spec/integration/associations/reverse_population_spec.rb +34 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +36 -0
- data/spec/integration/associations/scope_option_spec.rb +101 -0
- data/spec/integration/atomic/modifiers_spec.rb +116 -0
- data/spec/integration/bson_regexp_raw_spec.rb +19 -0
- data/spec/integration/callbacks_models.rb +61 -0
- data/spec/integration/callbacks_spec.rb +228 -0
- data/spec/integration/contextual/empty_spec.rb +141 -0
- data/spec/integration/criteria/alias_query_spec.rb +161 -0
- data/spec/integration/criteria/date_field_spec.rb +1 -2
- data/spec/integration/criteria/default_scope_spec.rb +72 -0
- data/spec/integration/criteria/logical_spec.rb +124 -0
- data/spec/integration/criteria/range_spec.rb +265 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +30 -1
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -42
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
- data/spec/integration/matcher_operator_data/in.yml +210 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/matcher_operator_spec.rb +124 -0
- data/spec/integration/matcher_spec.rb +283 -0
- data/spec/integration/server_query_spec.rb +141 -0
- data/spec/integration/shardable_spec.rb +148 -0
- data/spec/integration/stringified_symbol_field_spec.rb +203 -0
- data/spec/lite_spec_helper.rb +22 -5
- data/spec/mongoid/association/accessors_spec.rb +284 -77
- data/spec/mongoid/association/auto_save_spec.rb +74 -33
- data/spec/mongoid/association/builders_spec.rb +3 -1
- data/spec/mongoid/association/constrainable_spec.rb +2 -0
- data/spec/mongoid/association/counter_cache_spec.rb +34 -32
- data/spec/mongoid/association/depending_spec.rb +426 -333
- data/spec/mongoid/association/eager_spec.rb +6 -4
- data/spec/mongoid/association/embedded/cyclic_spec.rb +4 -2
- data/spec/mongoid/association/embedded/dirty_spec.rb +4 -2
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +65 -13
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +431 -133
- data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -1
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +3 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +23 -21
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +2 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +3 -1
- data/spec/mongoid/association/macros_spec.rb +11 -9
- data/spec/mongoid/association/nested/many_spec.rb +2 -0
- data/spec/mongoid/association/nested/one_spec.rb +18 -12
- data/spec/mongoid/association/options_spec.rb +2 -0
- data/spec/mongoid/association/polymorphic_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +57 -16
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +242 -12
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +99 -58
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +57 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +24 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +25 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +215 -167
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +39 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +46 -2
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +40 -9
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +306 -125
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +679 -339
- data/spec/mongoid/association/referenced/has_many_models.rb +58 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +2 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -7
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +34 -4
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +28 -26
- data/spec/mongoid/association/referenced/has_one_models.rb +49 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +24 -1
- data/spec/mongoid/association/reflections_spec.rb +2 -0
- data/spec/mongoid/association/syncable_spec.rb +33 -31
- data/spec/mongoid/association_spec.rb +2 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +49 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +2 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +2 -0
- data/spec/mongoid/atomic/paths_spec.rb +107 -12
- data/spec/mongoid/atomic_spec.rb +31 -6
- data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
- data/spec/mongoid/attributes/nested_spec.rb +69 -67
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +44 -0
- data/spec/mongoid/attributes/readonly_spec.rb +24 -22
- data/spec/mongoid/attributes_spec.rb +363 -28
- data/spec/mongoid/cacheable_spec.rb +3 -1
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +136 -28
- data/spec/mongoid/clients/options_spec.rb +44 -26
- data/spec/mongoid/clients/sessions_spec.rb +25 -28
- data/spec/mongoid/clients/transactions_spec.rb +54 -29
- data/spec/mongoid/clients_spec.rb +8 -6
- data/spec/mongoid/composable_spec.rb +2 -0
- data/spec/mongoid/config/environment_spec.rb +88 -8
- data/spec/mongoid/config/options_spec.rb +22 -3
- data/spec/mongoid/config_spec.rb +277 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +53 -11
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +122 -20
- data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
- data/spec/mongoid/contextual/atomic_spec.rb +222 -71
- data/spec/mongoid/contextual/geo_near_spec.rb +20 -18
- data/spec/mongoid/contextual/map_reduce_spec.rb +4 -2
- data/spec/mongoid/contextual/memory_spec.rb +25 -23
- data/spec/mongoid/contextual/mongo_spec.rb +413 -92
- data/spec/mongoid/contextual/none_spec.rb +9 -81
- data/spec/mongoid/copyable_spec.rb +207 -26
- data/spec/mongoid/copyable_spec_models.rb +30 -0
- data/spec/mongoid/criteria/findable_spec.rb +77 -20
- data/spec/mongoid/criteria/inspectable_spec.rb +2 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +2 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +43 -40
- data/spec/mongoid/criteria/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +61 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +35 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +239 -178
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +23 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +145 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/options_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1593 -286
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1010 -2736
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +226 -0
- data/spec/mongoid/criteria/scopable_spec.rb +129 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +782 -459
- data/spec/mongoid/document_fields_spec.rb +26 -1
- data/spec/mongoid/document_persistence_context_spec.rb +0 -1
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +123 -48
- data/spec/mongoid/equality_spec.rb +144 -41
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +5 -3
- data/spec/mongoid/errors/callback_spec.rb +2 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +4 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +2 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +2 -0
- data/spec/mongoid/errors/eager_load_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +4 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -1
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +2 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +2 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +2 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +2 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +22 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +4 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +5 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +5 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +2 -0
- data/spec/mongoid/errors/no_environment_spec.rb +2 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +2 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +4 -2
- data/spec/mongoid/errors/no_parent_spec.rb +3 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +2 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +2 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +2 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +4 -2
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +2 -0
- data/spec/mongoid/errors/validations_spec.rb +2 -0
- data/spec/mongoid/extensions/array_spec.rb +25 -43
- data/spec/mongoid/extensions/big_decimal_spec.rb +2 -0
- data/spec/mongoid/extensions/binary_spec.rb +2 -0
- data/spec/mongoid/extensions/boolean_spec.rb +2 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +335 -0
- data/spec/mongoid/extensions/date_spec.rb +8 -160
- data/spec/mongoid/extensions/date_time_spec.rb +17 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +2 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -1
- data/spec/mongoid/extensions/float_spec.rb +17 -3
- data/spec/mongoid/extensions/hash_spec.rb +105 -0
- data/spec/mongoid/extensions/integer_spec.rb +14 -2
- data/spec/mongoid/extensions/module_spec.rb +2 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +2 -0
- data/spec/mongoid/extensions/object_id_spec.rb +2 -0
- data/spec/mongoid/extensions/object_spec.rb +13 -24
- data/spec/mongoid/extensions/range_spec.rb +2 -0
- data/spec/mongoid/extensions/regexp_spec.rb +2 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +60 -27
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
- data/spec/mongoid/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/extensions/time_spec.rb +29 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +33 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -1
- data/spec/mongoid/extensions_spec.rb +16 -2
- data/spec/mongoid/factory_spec.rb +287 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +2 -0
- data/spec/mongoid/fields/localized_spec.rb +6 -4
- data/spec/mongoid/fields/standard_spec.rb +2 -0
- data/spec/mongoid/fields_spec.rb +418 -36
- data/spec/mongoid/findable_spec.rb +53 -19
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +30 -2
- data/spec/mongoid/inspectable_spec.rb +39 -2
- data/spec/mongoid/interceptable_spec.rb +168 -96
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +2 -0
- data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +40 -0
- data/spec/mongoid/persistable/creatable_spec.rb +112 -27
- data/spec/mongoid/persistable/deletable_spec.rb +273 -11
- data/spec/mongoid/persistable/destroyable_spec.rb +201 -11
- data/spec/mongoid/persistable/incrementable_spec.rb +23 -7
- data/spec/mongoid/persistable/logical_spec.rb +19 -3
- data/spec/mongoid/persistable/poppable_spec.rb +19 -3
- data/spec/mongoid/persistable/pullable_spec.rb +36 -6
- data/spec/mongoid/persistable/pushable_spec.rb +36 -6
- data/spec/mongoid/persistable/renamable_spec.rb +18 -2
- data/spec/mongoid/persistable/savable_spec.rb +188 -25
- data/spec/mongoid/persistable/settable_spec.rb +54 -8
- data/spec/mongoid/persistable/unsettable_spec.rb +19 -3
- data/spec/mongoid/persistable/updatable_spec.rb +45 -23
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -2
- data/spec/mongoid/persistable_spec.rb +85 -9
- data/spec/mongoid/persistence_context_spec.rb +2 -0
- data/spec/mongoid/positional_spec.rb +2 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +68 -0
- data/spec/mongoid/query_cache_spec.rb +501 -81
- data/spec/mongoid/relations/proxy_spec.rb +8 -6
- data/spec/mongoid/reloadable_spec.rb +298 -20
- data/spec/mongoid/scopable_spec.rb +67 -21
- data/spec/mongoid/selectable_spec.rb +8 -6
- data/spec/mongoid/serializable_spec.rb +160 -29
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +116 -17
- data/spec/mongoid/stateful_spec.rb +3 -1
- data/spec/mongoid/tasks/database_rake_spec.rb +2 -0
- data/spec/mongoid/tasks/database_spec.rb +2 -0
- data/spec/mongoid/threaded_spec.rb +4 -2
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -1
- data/spec/mongoid/timestamps/created_spec.rb +3 -1
- data/spec/mongoid/timestamps/timeless_spec.rb +4 -2
- data/spec/mongoid/timestamps/updated/short_spec.rb +5 -3
- data/spec/mongoid/timestamps/updated_spec.rb +5 -3
- data/spec/mongoid/timestamps_spec.rb +8 -6
- data/spec/mongoid/touchable_spec.rb +180 -33
- data/spec/mongoid/touchable_spec_models.rb +53 -0
- data/spec/mongoid/traversable_spec.rb +1167 -1
- data/spec/mongoid/validatable/associated_spec.rb +2 -0
- data/spec/mongoid/validatable/format_spec.rb +2 -0
- data/spec/mongoid/validatable/length_spec.rb +2 -0
- data/spec/mongoid/validatable/numericality_spec.rb +2 -0
- data/spec/mongoid/validatable/presence_spec.rb +28 -22
- data/spec/mongoid/validatable/uniqueness_spec.rb +69 -67
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid_spec.rb +2 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -1
- data/spec/rails/mongoid_spec.rb +4 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +386 -0
- data/spec/shared/lib/mrss/docker_runner.rb +271 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +199 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +339 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +379 -0
- data/spec/shared/shlib/set_env.sh +132 -0
- data/spec/spec_helper.rb +39 -35
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +15 -234
- data/spec/support/expectations.rb +5 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +22 -0
- data/spec/{app → support}/models/account.rb +3 -1
- data/spec/{app → support}/models/acolyte.rb +2 -0
- data/spec/{app → support}/models/actor.rb +3 -1
- data/spec/support/models/actress.rb +4 -0
- data/spec/{app → support}/models/address.rb +6 -0
- data/spec/{app → support}/models/address_component.rb +2 -0
- data/spec/{app → support}/models/address_number.rb +2 -0
- data/spec/{app → support}/models/agency.rb +2 -0
- data/spec/{app → support}/models/agent.rb +2 -0
- data/spec/{app → support}/models/album.rb +2 -0
- data/spec/{app → support}/models/alert.rb +2 -0
- data/spec/{app → support}/models/animal.rb +2 -0
- data/spec/{app → support}/models/answer.rb +2 -0
- data/spec/{app → support}/models/appointment.rb +2 -0
- data/spec/support/models/armrest.rb +9 -0
- data/spec/{app → support}/models/article.rb +2 -0
- data/spec/{app → support}/models/artist.rb +4 -0
- data/spec/{app → support}/models/artwork.rb +2 -0
- data/spec/support/models/audible_sound.rb +3 -0
- data/spec/{app → support}/models/audio.rb +2 -0
- data/spec/{app → support}/models/augmentation.rb +2 -0
- data/spec/{app → support}/models/author.rb +2 -0
- data/spec/{app → support}/models/baby.rb +2 -0
- data/spec/{app → support}/models/band.rb +6 -0
- data/spec/{app → support}/models/bar.rb +2 -0
- data/spec/{app → support}/models/basic.rb +2 -0
- data/spec/support/models/bed.rb +3 -0
- data/spec/{app → support}/models/big_palette.rb +2 -0
- data/spec/{app → support}/models/birthday.rb +2 -0
- data/spec/support/models/bolt.rb +7 -0
- data/spec/{app → support}/models/bomb.rb +2 -0
- data/spec/{app → support}/models/book.rb +2 -0
- data/spec/{app → support}/models/breed.rb +2 -0
- data/spec/{app → support}/models/browser.rb +3 -1
- data/spec/{app → support}/models/building.rb +2 -0
- data/spec/{app → support}/models/building_address.rb +2 -0
- data/spec/{app → support}/models/bus.rb +2 -0
- data/spec/{app → support}/models/business.rb +2 -0
- data/spec/{app → support}/models/callback_test.rb +2 -0
- data/spec/{app → support}/models/canvas.rb +3 -1
- data/spec/support/models/car.rb +3 -0
- data/spec/{app → support}/models/cat.rb +2 -0
- data/spec/{app → support}/models/category.rb +2 -0
- data/spec/{app → support}/models/child.rb +2 -0
- data/spec/{app → support}/models/child_doc.rb +5 -3
- data/spec/{app → support}/models/church.rb +2 -0
- data/spec/{app → support}/models/circle.rb +2 -0
- data/spec/{app → support}/models/circuit.rb +2 -0
- data/spec/{app → support}/models/circus.rb +2 -0
- data/spec/{app → support}/models/code.rb +2 -0
- data/spec/support/models/coding/pull_request.rb +11 -0
- data/spec/support/models/coding.rb +3 -0
- data/spec/{app → support}/models/comment.rb +2 -0
- data/spec/{app → support}/models/company.rb +2 -0
- data/spec/{app → support}/models/consumption_period.rb +2 -0
- data/spec/{app → support}/models/contextable_item.rb +2 -0
- data/spec/{app → support}/models/contractor.rb +2 -0
- data/spec/{app → support}/models/cookie.rb +2 -0
- data/spec/{app → support}/models/country_code.rb +4 -0
- data/spec/{app → support}/models/courier_job.rb +2 -0
- data/spec/support/models/crate.rb +12 -0
- data/spec/support/models/customer.rb +10 -0
- data/spec/support/models/customer_address.rb +11 -0
- data/spec/support/models/deed.rb +7 -0
- data/spec/{app → support}/models/definition.rb +2 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -1
- data/spec/{app → support}/models/description.rb +2 -0
- data/spec/{app → support}/models/dictionary.rb +8 -0
- data/spec/{app → support}/models/division.rb +2 -0
- data/spec/{app → support}/models/doctor.rb +2 -0
- data/spec/{app → support}/models/dog.rb +2 -0
- data/spec/{app → support}/models/dokument.rb +2 -0
- data/spec/{app → support}/models/draft.rb +2 -0
- data/spec/{app → support}/models/dragon.rb +2 -0
- data/spec/{app → support}/models/driver.rb +3 -1
- data/spec/{app → support}/models/drug.rb +2 -0
- data/spec/{app → support}/models/dungeon.rb +2 -0
- data/spec/{app → support}/models/edit.rb +2 -0
- data/spec/{app → support}/models/email.rb +2 -0
- data/spec/{app → support}/models/employer.rb +2 -0
- data/spec/{app → support}/models/entry.rb +2 -0
- data/spec/support/models/eraser.rb +3 -0
- data/spec/{app → support}/models/even.rb +2 -0
- data/spec/{app → support}/models/event.rb +2 -0
- data/spec/{app → support}/models/exhibition.rb +2 -0
- data/spec/{app → support}/models/exhibitor.rb +2 -0
- data/spec/{app → support}/models/explosion.rb +2 -0
- data/spec/{app → support}/models/eye.rb +2 -0
- data/spec/{app → support}/models/eye_bowl.rb +2 -0
- data/spec/{app → support}/models/face.rb +2 -0
- data/spec/{app → support}/models/favorite.rb +2 -0
- data/spec/{app → support}/models/filesystem.rb +2 -0
- data/spec/{app → support}/models/fire_hydrant.rb +2 -0
- data/spec/{app → support}/models/firefox.rb +2 -0
- data/spec/{app → support}/models/fish.rb +2 -0
- data/spec/{app → support}/models/folder.rb +2 -0
- data/spec/{app → support}/models/folder_item.rb +2 -0
- data/spec/{app → support}/models/fruits.rb +2 -0
- data/spec/{app → support}/models/game.rb +2 -0
- data/spec/{app → support}/models/ghost.rb +2 -0
- data/spec/support/models/guitar.rb +4 -0
- data/spec/support/models/hole.rb +12 -0
- data/spec/{app → support}/models/home.rb +2 -0
- data/spec/{app → support}/models/house.rb +2 -0
- data/spec/{app → support}/models/html_writer.rb +2 -0
- data/spec/{app → support}/models/id_key.rb +2 -0
- data/spec/support/models/idnodef.rb +7 -0
- data/spec/{app → support}/models/image.rb +2 -0
- data/spec/{app → support}/models/implant.rb +2 -0
- data/spec/support/models/instrument.rb +8 -0
- data/spec/{app → support}/models/item.rb +3 -1
- data/spec/{app → support}/models/jar.rb +2 -0
- data/spec/{app → support}/models/kaleidoscope.rb +2 -0
- data/spec/{app → support}/models/kangaroo.rb +3 -1
- data/spec/{app → support}/models/label.rb +4 -1
- data/spec/{app → support}/models/language.rb +2 -0
- data/spec/{app → support}/models/lat_lng.rb +2 -0
- data/spec/{app → support}/models/league.rb +2 -0
- data/spec/support/models/learner.rb +4 -0
- data/spec/{app → support}/models/line_item.rb +2 -0
- data/spec/{app → support}/models/location.rb +2 -0
- data/spec/{app → support}/models/login.rb +2 -0
- data/spec/{app → support}/models/manufacturer.rb +2 -0
- data/spec/{app → support}/models/meat.rb +2 -0
- data/spec/{app → support}/models/membership.rb +2 -0
- data/spec/{app → support}/models/message.rb +2 -0
- data/spec/{app → support}/models/minim.rb +0 -1
- data/spec/{app → support}/models/mixed_drink.rb +2 -0
- data/spec/support/models/mop.rb +24 -0
- data/spec/{app → support}/models/movie.rb +2 -0
- data/spec/support/models/my_hash.rb +4 -0
- data/spec/{app → support}/models/name.rb +2 -0
- data/spec/support/models/name_only.rb +8 -0
- data/spec/{app → support}/models/node.rb +2 -0
- data/spec/{app → support}/models/note.rb +2 -0
- data/spec/support/models/nut.rb +7 -0
- data/spec/{app → support}/models/odd.rb +2 -0
- data/spec/support/models/order.rb +12 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -1
- data/spec/{app → support}/models/ordered_preference.rb +2 -0
- data/spec/{app → support}/models/oscar.rb +2 -0
- data/spec/support/models/other_owner_object.rb +4 -0
- data/spec/{app → support}/models/override.rb +2 -0
- data/spec/{app → support}/models/ownable.rb +2 -0
- data/spec/{app → support}/models/owner.rb +4 -0
- data/spec/{app → support}/models/pack.rb +2 -0
- data/spec/{app → support}/models/page.rb +2 -0
- data/spec/{app → support}/models/page_question.rb +2 -0
- data/spec/{app → support}/models/palette.rb +3 -1
- data/spec/{app → support}/models/parent.rb +2 -0
- data/spec/{app → support}/models/parent_doc.rb +2 -0
- data/spec/support/models/passport.rb +13 -0
- data/spec/{app → support}/models/patient.rb +2 -0
- data/spec/{app → support}/models/pdf_writer.rb +2 -0
- data/spec/support/models/pencil.rb +3 -0
- data/spec/{app → support}/models/person.rb +21 -1
- data/spec/{app → support}/models/pet.rb +2 -0
- data/spec/{app → support}/models/pet_owner.rb +2 -0
- data/spec/{app → support}/models/phone.rb +5 -1
- data/spec/support/models/piano.rb +4 -0
- data/spec/{app → support}/models/pizza.rb +2 -0
- data/spec/{app → support}/models/player.rb +2 -0
- data/spec/{app → support}/models/post.rb +2 -0
- data/spec/{app → support}/models/post_genre.rb +2 -0
- data/spec/{app → support}/models/powerup.rb +2 -0
- data/spec/{app → support}/models/preference.rb +2 -0
- data/spec/{app → support}/models/princess.rb +2 -0
- data/spec/{app → support}/models/product.rb +2 -0
- data/spec/support/models/profile.rb +17 -0
- data/spec/{app → support}/models/pronunciation.rb +2 -0
- data/spec/{app → support}/models/pub.rb +2 -0
- data/spec/support/models/publication/encyclopedia.rb +11 -0
- data/spec/support/models/publication/review.rb +13 -0
- data/spec/support/models/publication.rb +4 -0
- data/spec/{app → support}/models/purchase.rb +2 -0
- data/spec/support/models/purchased_item.rb +10 -0
- data/spec/{app → support}/models/question.rb +2 -0
- data/spec/{app → support}/models/quiz.rb +2 -0
- data/spec/{app → support}/models/rating.rb +2 -0
- data/spec/{app → support}/models/record.rb +2 -0
- data/spec/{app → support}/models/registry.rb +2 -0
- data/spec/{app → support}/models/role.rb +2 -0
- data/spec/{app → support}/models/root_category.rb +2 -0
- data/spec/{app → support}/models/sandwich.rb +2 -0
- data/spec/{app → support}/models/scheduler.rb +2 -0
- data/spec/support/models/scribe.rb +7 -0
- data/spec/support/models/sealer.rb +7 -0
- data/spec/support/models/seat.rb +24 -0
- data/spec/{app → support}/models/seo.rb +2 -0
- data/spec/support/models/series.rb +7 -0
- data/spec/{app → support}/models/server.rb +2 -0
- data/spec/{app → support}/models/service.rb +2 -0
- data/spec/{app → support}/models/shape.rb +4 -2
- data/spec/{app → support}/models/shelf.rb +2 -0
- data/spec/{app → support}/models/shipment_address.rb +2 -0
- data/spec/{app → support}/models/shipping_container.rb +2 -0
- data/spec/{app → support}/models/shipping_pack.rb +2 -0
- data/spec/support/models/shirt.rb +11 -0
- data/spec/{app → support}/models/shop.rb +2 -0
- data/spec/{app → support}/models/short_agent.rb +2 -0
- data/spec/{app → support}/models/short_quiz.rb +2 -0
- data/spec/{app → support}/models/simple.rb +2 -0
- data/spec/{app → support}/models/slave.rb +2 -0
- data/spec/{app → support}/models/song.rb +2 -0
- data/spec/{app → support}/models/sound.rb +2 -0
- data/spec/support/models/spacer.rb +7 -0
- data/spec/{app → support}/models/square.rb +2 -0
- data/spec/{app → support}/models/staff.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +2 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +2 -0
- data/spec/{app → support}/models/strategy.rb +2 -0
- data/spec/{app → support}/models/sub_item.rb +2 -0
- data/spec/{app → support}/models/subscription.rb +2 -0
- data/spec/{app → support}/models/survey.rb +2 -0
- data/spec/{app → support}/models/symptom.rb +2 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +2 -0
- data/spec/{app → support}/models/target.rb +2 -0
- data/spec/{app → support}/models/template.rb +2 -0
- data/spec/{app → support}/models/thing.rb +2 -0
- data/spec/support/models/threadlocker.rb +7 -0
- data/spec/{app → support}/models/title.rb +2 -0
- data/spec/{app → support}/models/tool.rb +4 -2
- data/spec/{app → support}/models/topping.rb +2 -0
- data/spec/support/models/toy.rb +9 -0
- data/spec/{app → support}/models/track.rb +2 -0
- data/spec/{app → support}/models/translation.rb +2 -0
- data/spec/{app → support}/models/tree.rb +2 -0
- data/spec/support/models/truck.rb +7 -0
- data/spec/{app → support}/models/user.rb +2 -0
- data/spec/{app → support}/models/user_account.rb +2 -0
- data/spec/{app → support}/models/validation_callback.rb +2 -0
- data/spec/support/models/vehicle.rb +18 -0
- data/spec/{app → support}/models/version.rb +2 -0
- data/spec/{app → support}/models/vertex.rb +3 -1
- data/spec/{app → support}/models/vet_visit.rb +2 -0
- data/spec/{app → support}/models/video.rb +2 -0
- data/spec/support/models/video_game.rb +3 -0
- data/spec/support/models/washer.rb +7 -0
- data/spec/{app → support}/models/weapon.rb +2 -0
- data/spec/{app → support}/models/wiki_page.rb +3 -0
- data/spec/{app → support}/models/word.rb +2 -0
- data/spec/{app → support}/models/word_origin.rb +2 -0
- data/spec/{app → support}/models/writer.rb +4 -2
- data/spec/support/shared/time.rb +53 -0
- data/spec/support/spec_config.rb +16 -3
- data.tar.gz.sig +0 -0
- metadata +1100 -738
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/matchable/all.rb +0 -28
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -119
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- data/lib/mongoid/matchable/eq.rb +0 -22
- data/lib/mongoid/matchable/exists.rb +0 -23
- data/lib/mongoid/matchable/gt.rb +0 -23
- data/lib/mongoid/matchable/gte.rb +0 -23
- data/lib/mongoid/matchable/in.rb +0 -24
- data/lib/mongoid/matchable/lt.rb +0 -23
- data/lib/mongoid/matchable/lte.rb +0 -23
- data/lib/mongoid/matchable/ne.rb +0 -21
- data/lib/mongoid/matchable/nin.rb +0 -22
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/matchable/or.rb +0 -33
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/lib/mongoid/matchable/size.rb +0 -21
- data/lib/support/ruby_version.rb +0 -26
- data/spec/app/models/actress.rb +0 -2
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/learner.rb +0 -2
- data/spec/app/models/my_hash.rb +0 -2
- data/spec/app/models/other_owner_object.rb +0 -2
- data/spec/app/models/passport.rb +0 -5
- data/spec/app/models/pencil.rb +0 -1
- data/spec/app/models/profile.rb +0 -5
- data/spec/app/models/series.rb +0 -4
- data/spec/app/models/truck.rb +0 -3
- data/spec/app/models/vehicle.rb +0 -11
- data/spec/app/models/video_game.rb +0 -1
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/matchable/all_spec.rb +0 -31
- data/spec/mongoid/matchable/and_spec.rb +0 -187
- data/spec/mongoid/matchable/default_spec.rb +0 -137
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- data/spec/mongoid/matchable/eq_spec.rb +0 -48
- data/spec/mongoid/matchable/exists_spec.rb +0 -57
- data/spec/mongoid/matchable/gt_spec.rb +0 -86
- data/spec/mongoid/matchable/gte_spec.rb +0 -84
- data/spec/mongoid/matchable/in_spec.rb +0 -49
- data/spec/mongoid/matchable/lt_spec.rb +0 -85
- data/spec/mongoid/matchable/lte_spec.rb +0 -85
- data/spec/mongoid/matchable/ne_spec.rb +0 -46
- data/spec/mongoid/matchable/nin_spec.rb +0 -48
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/matchable/or_spec.rb +0 -131
- data/spec/mongoid/matchable/regexp_spec.rb +0 -59
- data/spec/mongoid/matchable/size_spec.rb +0 -25
- data/spec/mongoid/matchable_spec.rb +0 -853
- data/spec/support/child_process_helper.rb +0 -76
- data/spec/support/cluster_config.rb +0 -158
- /data/spec/{app → support}/models/array_field.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- /data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- /data/spec/{app → support}/models/updatable.rb +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Mongoid
|
|
2
4
|
module Association
|
|
3
5
|
|
|
4
|
-
# This module defines the
|
|
5
|
-
# nullifies for
|
|
6
|
+
# This module defines the behavior for setting up cascading deletes and
|
|
7
|
+
# nullifies for associations, and how to delegate to the appropriate strategy.
|
|
6
8
|
module Depending
|
|
7
9
|
extend ActiveSupport::Concern
|
|
8
10
|
|
|
@@ -28,8 +30,6 @@ module Mongoid
|
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
# The valid dependent strategies.
|
|
31
|
-
#
|
|
32
|
-
# @since 7.0
|
|
33
33
|
STRATEGIES = [
|
|
34
34
|
:delete_all,
|
|
35
35
|
:destroy,
|
|
@@ -38,11 +38,6 @@ module Mongoid
|
|
|
38
38
|
:restrict_with_error
|
|
39
39
|
]
|
|
40
40
|
|
|
41
|
-
# The error message when a strategy cannot delete objects because there are associated objects.
|
|
42
|
-
#
|
|
43
|
-
# @since 7.0
|
|
44
|
-
RESTRICT_ERROR_MSG = 'Cannot delete record because associated objects exist.'.freeze
|
|
45
|
-
|
|
46
41
|
# Attempt to add the cascading information for the document to know how
|
|
47
42
|
# to handle associated documents on a removal.
|
|
48
43
|
#
|
|
@@ -52,8 +47,6 @@ module Mongoid
|
|
|
52
47
|
# @param [ Association ] association The association metadata.
|
|
53
48
|
#
|
|
54
49
|
# @return [ Class ] The class of the document.
|
|
55
|
-
#
|
|
56
|
-
# @since 2.0.0.rc.1
|
|
57
50
|
def self.define_dependency!(association)
|
|
58
51
|
validate!(association)
|
|
59
52
|
association.inverse_class.tap do |klass|
|
|
@@ -80,13 +73,11 @@ module Mongoid
|
|
|
80
73
|
# the appropriate strategy to perform the operation.
|
|
81
74
|
#
|
|
82
75
|
# @example Execute cascades.
|
|
83
|
-
# document.
|
|
84
|
-
|
|
85
|
-
# @since 2.0.0.rc.1
|
|
86
|
-
def apply_delete_dependencies!
|
|
76
|
+
# document.apply_destroy_dependencies!
|
|
77
|
+
def apply_destroy_dependencies!
|
|
87
78
|
self.class._all_dependents.each do |association|
|
|
88
|
-
if association.try(:dependent)
|
|
89
|
-
send("_dependent_#{
|
|
79
|
+
if dependent = association.try(:dependent)
|
|
80
|
+
send("_dependent_#{dependent}!", association)
|
|
90
81
|
end
|
|
91
82
|
end
|
|
92
83
|
end
|
|
@@ -128,7 +119,7 @@ module Mongoid
|
|
|
128
119
|
|
|
129
120
|
def _dependent_restrict_with_error!(association)
|
|
130
121
|
if (relation = send(association.name)) && !relation.blank?
|
|
131
|
-
errors.add(association.name,
|
|
122
|
+
errors.add(association.name, :destroy_restrict_with_error_dependencies_exist)
|
|
132
123
|
throw(:abort, false)
|
|
133
124
|
end
|
|
134
125
|
end
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require "mongoid/association/referenced/eager"
|
|
3
4
|
|
|
4
5
|
module Mongoid
|
|
5
6
|
module Association
|
|
6
7
|
|
|
7
8
|
# This module defines the eager loading behavior for criteria.
|
|
8
|
-
#
|
|
9
|
-
# @since 7.0
|
|
10
9
|
module EagerLoadable
|
|
11
10
|
|
|
12
11
|
def eager_loadable?
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Association
|
|
4
5
|
module Embedded
|
|
5
6
|
|
|
6
|
-
# Contains
|
|
7
|
+
# Contains behavior for executing operations in batch on embedded
|
|
7
8
|
# documents.
|
|
8
9
|
module Batchable
|
|
9
10
|
include Positional
|
|
@@ -18,13 +19,11 @@ module Mongoid
|
|
|
18
19
|
# @param [ Array<Document> ] docs The docs to add.
|
|
19
20
|
#
|
|
20
21
|
# @return [ Array<Hash> ] The inserts.
|
|
21
|
-
#
|
|
22
|
-
# @since 3.0.0
|
|
23
22
|
def batch_insert(docs)
|
|
24
23
|
execute_batch_push(docs)
|
|
25
24
|
end
|
|
26
25
|
|
|
27
|
-
# Clear all of the docs out of the
|
|
26
|
+
# Clear all of the docs out of the association in a single swipe.
|
|
28
27
|
#
|
|
29
28
|
# @example Clear all docs.
|
|
30
29
|
# batchable.batch_clear(docs)
|
|
@@ -32,15 +31,20 @@ module Mongoid
|
|
|
32
31
|
# @param [ Array<Document> ] docs The docs to clear.
|
|
33
32
|
#
|
|
34
33
|
# @return [ Array ] The empty array.
|
|
35
|
-
#
|
|
36
|
-
# @since 3.0.0
|
|
37
34
|
def batch_clear(docs)
|
|
38
35
|
pre_process_batch_remove(docs, :delete)
|
|
39
36
|
unless docs.empty?
|
|
40
37
|
collection.find(selector).update_one(
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
positionally(selector, "$unset" => { path => true }),
|
|
39
|
+
session: _session
|
|
43
40
|
)
|
|
41
|
+
unless Mongoid.broken_updates
|
|
42
|
+
# This solves the case in which a user sets, clears and resets an
|
|
43
|
+
# embedded document. Previously, since the embedded document was
|
|
44
|
+
# already marked not a "new_record", it wouldn't be persisted to
|
|
45
|
+
# the second time. This change fixes that and allows it to be persisted.
|
|
46
|
+
docs.each { |doc| doc.new_record = true }
|
|
47
|
+
end
|
|
44
48
|
post_process_batch_remove(docs, :delete)
|
|
45
49
|
end
|
|
46
50
|
_unscoped.clear
|
|
@@ -53,8 +57,6 @@ module Mongoid
|
|
|
53
57
|
#
|
|
54
58
|
# @param [ Array<Document> ] docs The docs to remove.
|
|
55
59
|
# @param [ Symbol ] method Delete or destroy.
|
|
56
|
-
#
|
|
57
|
-
# @since 3.0.0
|
|
58
60
|
def batch_remove(docs, method = :delete)
|
|
59
61
|
removals = pre_process_batch_remove(docs, method)
|
|
60
62
|
if !docs.empty?
|
|
@@ -75,11 +77,10 @@ module Mongoid
|
|
|
75
77
|
# @param [ Array<Document> ] docs The docs to replace with.
|
|
76
78
|
#
|
|
77
79
|
# @return [ Array<Hash> ] The inserts.
|
|
78
|
-
#
|
|
79
|
-
# @since 3.0.0
|
|
80
80
|
def batch_replace(docs)
|
|
81
81
|
if docs.blank?
|
|
82
82
|
if _assigning? && !empty?
|
|
83
|
+
_base.delayed_atomic_sets.clear
|
|
83
84
|
_base.add_atomic_unset(first)
|
|
84
85
|
target_duplicate = _target.dup
|
|
85
86
|
pre_process_batch_remove(target_duplicate, :delete)
|
|
@@ -91,6 +92,7 @@ module Mongoid
|
|
|
91
92
|
_base.delayed_atomic_sets.clear unless _assigning?
|
|
92
93
|
docs = normalize_docs(docs).compact
|
|
93
94
|
_target.clear and _unscoped.clear
|
|
95
|
+
_base.delayed_atomic_unsets.clear
|
|
94
96
|
inserts = execute_batch_set(docs)
|
|
95
97
|
add_atomic_sets(inserts)
|
|
96
98
|
end
|
|
@@ -106,8 +108,6 @@ module Mongoid
|
|
|
106
108
|
# batchable.add_atomic_sets([{ field: value }])
|
|
107
109
|
#
|
|
108
110
|
# @param [ Array<Hash> ] sets The atomic sets.
|
|
109
|
-
#
|
|
110
|
-
# @since 3.0.0
|
|
111
111
|
def add_atomic_sets(sets)
|
|
112
112
|
if _assigning?
|
|
113
113
|
_base.delayed_atomic_sets[path].try(:clear)
|
|
@@ -128,8 +128,6 @@ module Mongoid
|
|
|
128
128
|
# @param [ Array<Document> ] docs The docs to persist.
|
|
129
129
|
#
|
|
130
130
|
# @return [ Array<Hash> ] The inserts.
|
|
131
|
-
#
|
|
132
|
-
# @since 7.0.0
|
|
133
131
|
def execute_batch_set(docs)
|
|
134
132
|
self.inserts_valid = true
|
|
135
133
|
inserts = pre_process_batch_insert(docs)
|
|
@@ -153,8 +151,6 @@ module Mongoid
|
|
|
153
151
|
# @param [ Array<Document> ] docs The docs to persist.
|
|
154
152
|
#
|
|
155
153
|
# @return [ Array<Hash> ] The inserts.
|
|
156
|
-
#
|
|
157
|
-
# @since 7.0.0
|
|
158
154
|
def execute_batch_push(docs)
|
|
159
155
|
self.inserts_valid = true
|
|
160
156
|
pushes = pre_process_batch_insert(docs)
|
|
@@ -176,8 +172,6 @@ module Mongoid
|
|
|
176
172
|
# batchable.insertable?
|
|
177
173
|
#
|
|
178
174
|
# @return [ true, false ] If inserts can be performed.
|
|
179
|
-
#
|
|
180
|
-
# @since 3.0.0
|
|
181
175
|
def insertable?
|
|
182
176
|
persistable? && !_assigning? && inserts_valid
|
|
183
177
|
end
|
|
@@ -190,8 +184,6 @@ module Mongoid
|
|
|
190
184
|
# batchable.inserts_valid
|
|
191
185
|
#
|
|
192
186
|
# @return [ true, false ] If inserts are currently valid.
|
|
193
|
-
#
|
|
194
|
-
# @since 3.0.0
|
|
195
187
|
def inserts_valid
|
|
196
188
|
@inserts_valid
|
|
197
189
|
end
|
|
@@ -206,8 +198,6 @@ module Mongoid
|
|
|
206
198
|
# @param [ true, false ] value The flag.
|
|
207
199
|
#
|
|
208
200
|
# @return [ true, false ] The flag.
|
|
209
|
-
#
|
|
210
|
-
# @since 3.0.0
|
|
211
201
|
def inserts_valid=(value)
|
|
212
202
|
@inserts_valid = value
|
|
213
203
|
end
|
|
@@ -223,8 +213,6 @@ module Mongoid
|
|
|
223
213
|
# @param [ Array<Hash, Document> ] docs The docs to normalize.
|
|
224
214
|
#
|
|
225
215
|
# @return [ Array<Document> ] The docs.
|
|
226
|
-
#
|
|
227
|
-
# @since 3.0.0
|
|
228
216
|
def normalize_docs(docs)
|
|
229
217
|
if docs.first.is_a?(::Hash)
|
|
230
218
|
docs.map do |doc|
|
|
@@ -245,8 +233,6 @@ module Mongoid
|
|
|
245
233
|
# batchable.path
|
|
246
234
|
#
|
|
247
235
|
# @return [ String ] The atomic path.
|
|
248
|
-
#
|
|
249
|
-
# @since 3.0.0
|
|
250
236
|
def path
|
|
251
237
|
@path ||= _unscoped.first.atomic_path
|
|
252
238
|
end
|
|
@@ -261,8 +247,6 @@ module Mongoid
|
|
|
261
247
|
# @param [ String ] value The path.
|
|
262
248
|
#
|
|
263
249
|
# @return [ String ] The path.
|
|
264
|
-
#
|
|
265
|
-
# @since 3.0.0
|
|
266
250
|
def path=(value)
|
|
267
251
|
@path = value
|
|
268
252
|
end
|
|
@@ -275,8 +259,6 @@ module Mongoid
|
|
|
275
259
|
# batchable.selector
|
|
276
260
|
#
|
|
277
261
|
# @return [ Hash ] The atomic selector.
|
|
278
|
-
#
|
|
279
|
-
# @since 3.0.0
|
|
280
262
|
def selector
|
|
281
263
|
@selector ||= _base.atomic_selector
|
|
282
264
|
end
|
|
@@ -291,8 +273,6 @@ module Mongoid
|
|
|
291
273
|
# @param [ Array<Document> ] docs The documents.
|
|
292
274
|
#
|
|
293
275
|
# @return [ Array<Hash> ] The documents as an array of hashes.
|
|
294
|
-
#
|
|
295
|
-
# @since 3.0.0
|
|
296
276
|
def pre_process_batch_insert(docs)
|
|
297
277
|
docs.map do |doc|
|
|
298
278
|
next unless doc
|
|
@@ -320,14 +300,12 @@ module Mongoid
|
|
|
320
300
|
# @param [ Symbol ] method Delete or destroy.
|
|
321
301
|
#
|
|
322
302
|
# @return [ Array<Hash> ] The documents as hashes.
|
|
323
|
-
#
|
|
324
|
-
# @since 3.0.0
|
|
325
303
|
def pre_process_batch_remove(docs, method)
|
|
326
304
|
docs.map do |doc|
|
|
327
305
|
self.path = doc.atomic_path unless path
|
|
328
306
|
execute_callback :before_remove, doc
|
|
329
307
|
unless _assigning?
|
|
330
|
-
doc.
|
|
308
|
+
doc.apply_destroy_dependencies!
|
|
331
309
|
doc.run_before_callbacks(:destroy) if method == :destroy
|
|
332
310
|
end
|
|
333
311
|
_target.delete_one(doc)
|
|
@@ -348,8 +326,6 @@ module Mongoid
|
|
|
348
326
|
# @param [ Array<Documents> ] docs The inserted docs.
|
|
349
327
|
#
|
|
350
328
|
# @return [ Enumerable ] The document enum.
|
|
351
|
-
#
|
|
352
|
-
# @since 3.0.0
|
|
353
329
|
def post_process_batch_insert(docs)
|
|
354
330
|
docs.each do |doc|
|
|
355
331
|
doc.new_record = false
|
|
@@ -369,8 +345,6 @@ module Mongoid
|
|
|
369
345
|
# @param [ Symbol ] method Delete or destroy.
|
|
370
346
|
#
|
|
371
347
|
# @return [ Array<Document> ] The documents.
|
|
372
|
-
#
|
|
373
|
-
# @since 3.0.0
|
|
374
348
|
def post_process_batch_remove(docs, method)
|
|
375
349
|
docs.each do |doc|
|
|
376
350
|
doc.run_after_callbacks(:destroy) if method == :destroy
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Association
|
|
4
5
|
module Embedded
|
|
5
6
|
|
|
6
7
|
# This module provides convenience macros for using cyclic embedded
|
|
7
|
-
#
|
|
8
|
+
# associations.
|
|
8
9
|
module Cyclic
|
|
9
10
|
extend ActiveSupport::Concern
|
|
10
11
|
|
|
@@ -14,7 +15,7 @@ module Mongoid
|
|
|
14
15
|
|
|
15
16
|
module ClassMethods
|
|
16
17
|
|
|
17
|
-
# Create a cyclic embedded
|
|
18
|
+
# Create a cyclic embedded association that creates a tree hierarchy for
|
|
18
19
|
# the document and many embedded child documents.
|
|
19
20
|
#
|
|
20
21
|
# @example Set up a recursive embeds many.
|
|
@@ -24,7 +25,7 @@ module Mongoid
|
|
|
24
25
|
# recursively_embeds_many
|
|
25
26
|
# end
|
|
26
27
|
#
|
|
27
|
-
# @example The previous example is a
|
|
28
|
+
# @example The previous example is a shortcut for this.
|
|
28
29
|
#
|
|
29
30
|
# class Role
|
|
30
31
|
# include Mongoid::Document
|
|
@@ -34,8 +35,6 @@ module Mongoid
|
|
|
34
35
|
#
|
|
35
36
|
# This provides the default nomenclature for accessing a parent document
|
|
36
37
|
# or its children.
|
|
37
|
-
#
|
|
38
|
-
# @since 2.0.0.rc.1
|
|
39
38
|
def recursively_embeds_many(options = {})
|
|
40
39
|
embeds_many(
|
|
41
40
|
cyclic_child_name,
|
|
@@ -44,7 +43,7 @@ module Mongoid
|
|
|
44
43
|
embedded_in cyclic_parent_name, class_name: self.name, cyclic: true
|
|
45
44
|
end
|
|
46
45
|
|
|
47
|
-
# Create a cyclic embedded
|
|
46
|
+
# Create a cyclic embedded association that creates a single self
|
|
48
47
|
# referencing relationship for a parent and a single child.
|
|
49
48
|
#
|
|
50
49
|
# @example Set up a recursive embeds one.
|
|
@@ -54,7 +53,7 @@ module Mongoid
|
|
|
54
53
|
# recursively_embeds_one
|
|
55
54
|
# end
|
|
56
55
|
#
|
|
57
|
-
# @example The previous example is a
|
|
56
|
+
# @example The previous example is a shortcut for this.
|
|
58
57
|
#
|
|
59
58
|
# class Role
|
|
60
59
|
# include Mongoid::Document
|
|
@@ -64,8 +63,6 @@ module Mongoid
|
|
|
64
63
|
#
|
|
65
64
|
# This provides the default nomenclature for accessing a parent document
|
|
66
65
|
# or its children.
|
|
67
|
-
#
|
|
68
|
-
# @since 2.0.0.rc.1
|
|
69
66
|
def recursively_embeds_one(options = {})
|
|
70
67
|
embeds_one(
|
|
71
68
|
cyclic_child_name(false),
|
|
@@ -82,10 +79,8 @@ module Mongoid
|
|
|
82
79
|
# Role.cyclic_parent_name
|
|
83
80
|
#
|
|
84
81
|
# @return [ String ] "parent_" plus the class name underscored.
|
|
85
|
-
#
|
|
86
|
-
# @since 2.0.0.rc.1
|
|
87
82
|
def cyclic_parent_name
|
|
88
|
-
("parent_
|
|
83
|
+
("parent_#{self.name.demodulize.underscore.singularize}").to_sym
|
|
89
84
|
end
|
|
90
85
|
|
|
91
86
|
# Determines the child name given the class.
|
|
@@ -93,14 +88,12 @@ module Mongoid
|
|
|
93
88
|
# @example Determine the child name.
|
|
94
89
|
# Role.cyclic_child_name
|
|
95
90
|
#
|
|
96
|
-
# @param [ true, false ] many Is the a many
|
|
91
|
+
# @param [ true, false ] many Is the a many association?
|
|
97
92
|
#
|
|
98
93
|
# @return [ String ] "child_" plus the class name underscored in
|
|
99
94
|
# singular or plural form.
|
|
100
|
-
#
|
|
101
|
-
# @since 2.0.0.rc.1
|
|
102
95
|
def cyclic_child_name(many = true)
|
|
103
|
-
("child_
|
|
96
|
+
("child_#{self.name.demodulize.underscore.send(many ? :pluralize : :singularize)}").to_sym
|
|
104
97
|
end
|
|
105
98
|
end
|
|
106
99
|
end
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Mongoid
|
|
2
4
|
module Association
|
|
3
5
|
module Embedded
|
|
4
6
|
class EmbeddedIn
|
|
5
7
|
|
|
6
8
|
# The Binding object for embedded_in associations.
|
|
7
|
-
#
|
|
8
|
-
# @since 7.0
|
|
9
9
|
class Binding
|
|
10
10
|
include Bindable
|
|
11
11
|
|
|
12
|
-
# Binds the base object to the inverse of the
|
|
12
|
+
# Binds the base object to the inverse of the association. This is so we
|
|
13
13
|
# are referenced to the actual objects themselves on both sides.
|
|
14
14
|
#
|
|
15
15
|
# This case sets the association metadata on the inverse object as well as the
|
|
@@ -18,8 +18,6 @@ module Mongoid
|
|
|
18
18
|
# @example Bind the documents.
|
|
19
19
|
# name.person.bind(:continue => true)
|
|
20
20
|
# name.person = Person.new
|
|
21
|
-
#
|
|
22
|
-
# @since 2.0.0.rc.1
|
|
23
21
|
def bind_one
|
|
24
22
|
_base._association = _association.inverse_association(_target) unless _base._association
|
|
25
23
|
_base.parentize(_target)
|
|
@@ -38,8 +36,6 @@ module Mongoid
|
|
|
38
36
|
# @example Unbind the document.
|
|
39
37
|
# name.person.unbind(:continue => true)
|
|
40
38
|
# name.person = nil
|
|
41
|
-
#
|
|
42
|
-
# @since 2.0.0.rc.1
|
|
43
39
|
def unbind_one
|
|
44
40
|
binding do
|
|
45
41
|
if _base.embedded_many?
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Mongoid
|
|
2
4
|
module Association
|
|
3
5
|
module Embedded
|
|
4
6
|
class EmbeddedIn
|
|
5
7
|
|
|
6
8
|
# The Builder behavior for embedded_in associations.
|
|
7
|
-
#
|
|
8
|
-
# @since 7.0
|
|
9
9
|
module Buildable
|
|
10
10
|
include Threaded::Lifecycle
|
|
11
11
|
|
|
@@ -18,12 +18,15 @@ module Mongoid
|
|
|
18
18
|
# @param [ Object ] base The object.
|
|
19
19
|
# @param [ Object ] object The parent hash or document.
|
|
20
20
|
# @param [ String ] type Not used in this context.
|
|
21
|
+
# @param [ Hash ] selected_fields Fields which were retrieved via
|
|
22
|
+
# #only. If selected_fields are specified, fields not listed in it
|
|
23
|
+
# will not be accessible in the built document.
|
|
21
24
|
#
|
|
22
25
|
# @return [ Document ] A single document.
|
|
23
|
-
def build(base, object, type = nil)
|
|
26
|
+
def build(base, object, type = nil, selected_fields = nil)
|
|
24
27
|
return object unless object.is_a?(Hash)
|
|
25
28
|
if _loading?
|
|
26
|
-
Factory.from_db(klass, object)
|
|
29
|
+
Factory.from_db(klass, object, nil, selected_fields)
|
|
27
30
|
else
|
|
28
31
|
Factory.build(klass, object)
|
|
29
32
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Mongoid
|
|
2
4
|
module Association
|
|
3
5
|
module Embedded
|
|
@@ -5,13 +7,13 @@ module Mongoid
|
|
|
5
7
|
|
|
6
8
|
class Proxy < Association::One
|
|
7
9
|
|
|
8
|
-
# Instantiate a new embedded_in
|
|
10
|
+
# Instantiate a new embedded_in association.
|
|
9
11
|
#
|
|
10
|
-
# @example Create the new
|
|
12
|
+
# @example Create the new association.
|
|
11
13
|
# Association::Embedded::EmbeddedIn.new(person, address, association)
|
|
12
14
|
#
|
|
13
|
-
# @param [ Document ] base The document the
|
|
14
|
-
# @param [ Document ] target The target (parent) of the
|
|
15
|
+
# @param [ Document ] base The document the association hangs off of.
|
|
16
|
+
# @param [ Document ] target The target (parent) of the association.
|
|
15
17
|
# @param [ Association ] association The association metadata.
|
|
16
18
|
#
|
|
17
19
|
# @return [ In ] The proxy.
|
|
@@ -23,16 +25,14 @@ module Mongoid
|
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
# Substitutes the supplied target documents for the existing document
|
|
26
|
-
# in the
|
|
28
|
+
# in the association.
|
|
27
29
|
#
|
|
28
30
|
# @example Substitute the new document.
|
|
29
31
|
# person.name.substitute(new_name)
|
|
30
32
|
#
|
|
31
33
|
# @param [ Document ] replacement A document to replace the target.
|
|
32
34
|
#
|
|
33
|
-
# @return [ Document, nil ] The
|
|
34
|
-
#
|
|
35
|
-
# @since 2.0.0.rc.1
|
|
35
|
+
# @return [ Document, nil ] The association or nil.
|
|
36
36
|
def substitute(replacement)
|
|
37
37
|
unbind_one
|
|
38
38
|
unless replacement
|
|
@@ -47,14 +47,12 @@ module Mongoid
|
|
|
47
47
|
|
|
48
48
|
private
|
|
49
49
|
|
|
50
|
-
# Instantiate the binding associated with this
|
|
50
|
+
# Instantiate the binding associated with this association.
|
|
51
51
|
#
|
|
52
52
|
# @example Get the binding.
|
|
53
53
|
# binding([ address ])
|
|
54
54
|
#
|
|
55
55
|
# @return [ Binding ] A binding object.
|
|
56
|
-
#
|
|
57
|
-
# @since 2.0.0.rc.1
|
|
58
56
|
def binding
|
|
59
57
|
Binding.new(_base, _target, _association)
|
|
60
58
|
end
|
|
@@ -65,37 +63,31 @@ module Mongoid
|
|
|
65
63
|
# object.characterize_one(document)
|
|
66
64
|
#
|
|
67
65
|
# @param [ Document ] document The document to set the association metadata on.
|
|
68
|
-
#
|
|
69
|
-
# @since 2.1.0
|
|
70
66
|
def characterize_one(document)
|
|
71
67
|
unless _base._association
|
|
72
68
|
_base._association = _association.inverse_association(document)
|
|
73
69
|
end
|
|
74
70
|
end
|
|
75
71
|
|
|
76
|
-
# Are we able to persist this
|
|
72
|
+
# Are we able to persist this association?
|
|
77
73
|
#
|
|
78
|
-
# @example Can we persist the
|
|
74
|
+
# @example Can we persist the association?
|
|
79
75
|
# relation.persistable?
|
|
80
76
|
#
|
|
81
|
-
# @return [ true, false ] If the
|
|
82
|
-
#
|
|
83
|
-
# @since 2.1.0
|
|
77
|
+
# @return [ true, false ] If the association is persistable.
|
|
84
78
|
def persistable?
|
|
85
79
|
_target.persisted? && !_binding? && !_building?
|
|
86
80
|
end
|
|
87
81
|
|
|
88
82
|
class << self
|
|
89
83
|
|
|
90
|
-
# Returns true if the
|
|
84
|
+
# Returns true if the association is an embedded one. In this case
|
|
91
85
|
# always true.
|
|
92
86
|
#
|
|
93
|
-
# @example Is this
|
|
87
|
+
# @example Is this association embedded?
|
|
94
88
|
# Association::Embedded::EmbeddedIn.embedded?
|
|
95
89
|
#
|
|
96
90
|
# @return [ true ] true.
|
|
97
|
-
#
|
|
98
|
-
# @since 2.0.0.rc.1
|
|
99
91
|
def embedded?
|
|
100
92
|
true
|
|
101
93
|
end
|
|
@@ -108,8 +100,6 @@ module Mongoid
|
|
|
108
100
|
# @param [ Document ] document The document to calculate on.
|
|
109
101
|
#
|
|
110
102
|
# @return [ Root ] The root atomic path calculator.
|
|
111
|
-
#
|
|
112
|
-
# @since 2.1.0
|
|
113
103
|
def path(document)
|
|
114
104
|
Mongoid::Atomic::Paths::Root.new(document)
|
|
115
105
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mongoid/association/embedded/embedded_in/binding'
|
|
2
4
|
require 'mongoid/association/embedded/embedded_in/buildable'
|
|
3
5
|
require 'mongoid/association/embedded/embedded_in/proxy'
|
|
@@ -7,8 +9,6 @@ module Mongoid
|
|
|
7
9
|
module Embedded
|
|
8
10
|
|
|
9
11
|
# The EmbeddedIn type association.
|
|
10
|
-
#
|
|
11
|
-
# @since 7.0
|
|
12
12
|
class EmbeddedIn
|
|
13
13
|
include Relatable
|
|
14
14
|
include Buildable
|
|
@@ -17,28 +17,22 @@ module Mongoid
|
|
|
17
17
|
# common ones.
|
|
18
18
|
#
|
|
19
19
|
# @return [ Array<Symbol> ] The extra valid options.
|
|
20
|
-
#
|
|
21
|
-
# @since 7.0
|
|
22
20
|
ASSOCIATION_OPTIONS = [
|
|
23
21
|
:autobuild,
|
|
24
22
|
:cyclic,
|
|
25
23
|
:polymorphic,
|
|
26
|
-
:touch
|
|
24
|
+
:touch,
|
|
27
25
|
].freeze
|
|
28
26
|
|
|
29
27
|
# The complete list of valid options for this association, including
|
|
30
28
|
# the shared ones.
|
|
31
29
|
#
|
|
32
30
|
# @return [ Array<Symbol> ] The valid options.
|
|
33
|
-
#
|
|
34
|
-
# @since 7.0
|
|
35
31
|
VALID_OPTIONS = (ASSOCIATION_OPTIONS + SHARED_OPTIONS).freeze
|
|
36
32
|
|
|
37
33
|
# Setup the instance methods, fields, etc. on the association owning class.
|
|
38
34
|
#
|
|
39
35
|
# @return [ self ]
|
|
40
|
-
#
|
|
41
|
-
# @since 7.0
|
|
42
36
|
def setup!
|
|
43
37
|
setup_instance_methods!
|
|
44
38
|
@owner_class.embedded = true
|
|
@@ -48,43 +42,33 @@ module Mongoid
|
|
|
48
42
|
# Is this association type embedded?
|
|
49
43
|
#
|
|
50
44
|
# @return [ true ] Always true.
|
|
51
|
-
#
|
|
52
|
-
# @since 7.0
|
|
53
45
|
def embedded?; true; end
|
|
54
46
|
|
|
55
47
|
# The primary key
|
|
56
48
|
#
|
|
57
|
-
# @return [ nil ] Not relevant for this
|
|
49
|
+
# @return [ nil ] Not relevant for this association
|
|
58
50
|
def primary_key; end
|
|
59
51
|
|
|
60
52
|
# Does this association type store the foreign key?
|
|
61
53
|
#
|
|
62
54
|
# @return [ false ] Always false.
|
|
63
|
-
#
|
|
64
|
-
# @since 7.0
|
|
65
55
|
def stores_foreign_key?; false; end
|
|
66
56
|
|
|
67
57
|
# The default for validating the association object.
|
|
68
58
|
#
|
|
69
59
|
# @return [ false ] Always false.
|
|
70
|
-
#
|
|
71
|
-
# @since 7.0
|
|
72
60
|
def validation_default; false; end
|
|
73
61
|
|
|
74
62
|
# The key that is used to get the attributes for the associated object.
|
|
75
63
|
#
|
|
76
|
-
# @return [ String ] The name of the
|
|
77
|
-
#
|
|
78
|
-
# @since 7.0
|
|
64
|
+
# @return [ String ] The name of the association.
|
|
79
65
|
def key
|
|
80
66
|
@key ||= name.to_s
|
|
81
67
|
end
|
|
82
68
|
|
|
83
|
-
# Get the
|
|
69
|
+
# Get the association proxy class for this association type.
|
|
84
70
|
#
|
|
85
71
|
# @return [ Association::Embedded::EmbeddedIn::Proxy ] The proxy class.
|
|
86
|
-
#
|
|
87
|
-
# @since 7.0
|
|
88
72
|
def relation
|
|
89
73
|
Proxy
|
|
90
74
|
end
|
|
@@ -92,8 +76,6 @@ module Mongoid
|
|
|
92
76
|
# Is this association polymorphic?
|
|
93
77
|
#
|
|
94
78
|
# @return [ true, false ] Whether this association is polymorphic.
|
|
95
|
-
#
|
|
96
|
-
# @since 7.0
|
|
97
79
|
def polymorphic?
|
|
98
80
|
!!@options[:polymorphic]
|
|
99
81
|
end
|
|
@@ -104,8 +86,6 @@ module Mongoid
|
|
|
104
86
|
# @param [ Hash ] options The options for the association.
|
|
105
87
|
#
|
|
106
88
|
# @return [ Association::Nested::One ] The Nested Builder object.
|
|
107
|
-
#
|
|
108
|
-
# @since 7.0
|
|
109
89
|
def nested_builder(attributes, options)
|
|
110
90
|
Nested::One.new(self, attributes, options)
|
|
111
91
|
end
|