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