mongoid 7.0.12 → 7.3.3
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 +13 -13
- data/README.md +32 -19
- data/Rakefile +49 -0
- data/lib/config/locales/en.yml +113 -55
- data/lib/mongoid/association/accessors.rb +143 -53
- data/lib/mongoid/association/bindable.rb +7 -5
- data/lib/mongoid/association/builders.rb +4 -3
- data/lib/mongoid/association/constrainable.rb +5 -3
- data/lib/mongoid/association/depending.rb +10 -12
- data/lib/mongoid/association/eager_loadable.rb +2 -0
- data/lib/mongoid/association/embedded/batchable.rb +5 -3
- data/lib/mongoid/association/embedded/cyclic.rb +8 -6
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +4 -1
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +8 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +15 -12
- data/lib/mongoid/association/embedded/embedded_in.rb +7 -4
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +9 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +60 -50
- data/lib/mongoid/association/embedded/embeds_many.rb +7 -4
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +5 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +10 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +17 -14
- data/lib/mongoid/association/embedded/embeds_one.rb +7 -4
- data/lib/mongoid/association/embedded.rb +3 -0
- data/lib/mongoid/association/macros.rb +38 -36
- data/lib/mongoid/association/many.rb +16 -13
- data/lib/mongoid/association/marshalable.rb +3 -1
- data/lib/mongoid/association/nested/many.rb +18 -16
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -3
- data/lib/mongoid/association/nested/one.rb +15 -11
- data/lib/mongoid/association/nested.rb +4 -1
- data/lib/mongoid/association/one.rb +3 -1
- data/lib/mongoid/association/options.rb +9 -6
- data/lib/mongoid/association/proxy.rb +37 -15
- data/lib/mongoid/association/referenced/auto_save.rb +6 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -2
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +7 -4
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -2
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -14
- data/lib/mongoid/association/referenced/belongs_to.rb +6 -3
- data/lib/mongoid/association/referenced/counter_cache.rb +2 -0
- data/lib/mongoid/association/referenced/eager.rb +37 -15
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -6
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +26 -19
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +13 -6
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -1
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -2
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +493 -457
- data/lib/mongoid/association/referenced/has_many/proxy.rb +57 -47
- data/lib/mongoid/association/referenced/has_many.rb +7 -4
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +17 -2
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -0
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -11
- data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -16
- data/lib/mongoid/association/referenced/has_one.rb +5 -2
- data/lib/mongoid/association/referenced/syncable.rb +7 -5
- data/lib/mongoid/association/referenced.rb +3 -0
- data/lib/mongoid/association/reflections.rb +7 -5
- data/lib/mongoid/association/relatable.rb +19 -14
- data/lib/mongoid/association.rb +9 -6
- data/lib/mongoid/atomic/modifiers.rb +25 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -2
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -2
- data/lib/mongoid/atomic/paths/embedded.rb +2 -0
- data/lib/mongoid/atomic/paths/root.rb +4 -2
- data/lib/mongoid/atomic/paths.rb +2 -0
- data/lib/mongoid/atomic.rb +28 -2
- data/lib/mongoid/attributes/dynamic.rb +3 -1
- data/lib/mongoid/attributes/nested.rb +7 -5
- data/lib/mongoid/attributes/processing.rb +8 -6
- data/lib/mongoid/attributes/projector.rb +120 -0
- data/lib/mongoid/attributes/readonly.rb +3 -1
- data/lib/mongoid/attributes.rb +46 -27
- data/lib/mongoid/cacheable.rb +5 -3
- data/lib/mongoid/changeable.rb +3 -1
- data/lib/mongoid/clients/factory.rb +42 -10
- data/lib/mongoid/clients/options.rb +10 -8
- data/lib/mongoid/clients/sessions.rb +3 -0
- data/lib/mongoid/clients/storage_options.rb +7 -5
- data/lib/mongoid/clients/validators/storage.rb +2 -0
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/clients.rb +3 -1
- data/lib/mongoid/composable.rb +5 -2
- data/lib/mongoid/config/environment.rb +11 -1
- data/lib/mongoid/config/options.rb +20 -12
- data/lib/mongoid/config/validators/client.rb +2 -0
- data/lib/mongoid/config/validators/option.rb +2 -0
- data/lib/mongoid/config/validators.rb +2 -0
- data/lib/mongoid/config.rb +75 -12
- data/lib/mongoid/contextual/aggregable/memory.rb +3 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +13 -9
- data/lib/mongoid/contextual/atomic.rb +31 -8
- data/lib/mongoid/contextual/command.rb +2 -0
- data/lib/mongoid/contextual/geo_near.rb +5 -3
- data/lib/mongoid/contextual/map_reduce.rb +5 -2
- data/lib/mongoid/contextual/memory.rb +4 -2
- data/lib/mongoid/contextual/mongo.rb +29 -5
- data/lib/mongoid/contextual/none.rb +5 -0
- data/lib/mongoid/contextual/queryable.rb +2 -0
- data/lib/mongoid/contextual.rb +7 -4
- data/lib/mongoid/copyable.rb +11 -5
- data/lib/mongoid/criteria/findable.rb +12 -2
- data/lib/mongoid/criteria/includable.rb +8 -6
- data/lib/mongoid/criteria/inspectable.rb +2 -0
- data/lib/mongoid/criteria/marshalable.rb +2 -0
- data/lib/mongoid/criteria/modifiable.rb +2 -0
- data/lib/mongoid/criteria/options.rb +2 -0
- data/lib/mongoid/criteria/permission.rb +2 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +69 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -4
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -3
- data/lib/mongoid/criteria/queryable/key.rb +35 -7
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +179 -11
- data/lib/mongoid/criteria/queryable/optional.rb +5 -3
- data/lib/mongoid/criteria/queryable/options.rb +2 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +397 -98
- data/lib/mongoid/criteria/queryable/selector.rb +37 -8
- data/lib/mongoid/criteria/queryable/smash.rb +2 -0
- data/lib/mongoid/criteria/queryable/storable.rb +233 -0
- data/lib/mongoid/criteria/queryable.rb +7 -2
- data/lib/mongoid/criteria/scopable.rb +2 -0
- data/lib/mongoid/criteria.rb +79 -15
- data/lib/mongoid/document.rb +21 -20
- data/lib/mongoid/equality.rb +3 -2
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -2
- data/lib/mongoid/errors/callback.rb +2 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +19 -0
- data/lib/mongoid/errors/delete_restriction.rb +10 -10
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -0
- data/lib/mongoid/errors/document_not_found.rb +2 -0
- data/lib/mongoid/errors/eager_load.rb +6 -2
- data/lib/mongoid/errors/empty_config_file.rb +26 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -0
- data/lib/mongoid/errors/invalid_collection.rb +2 -0
- data/lib/mongoid/errors/invalid_config_file.rb +26 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -0
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -0
- data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -0
- data/lib/mongoid/errors/invalid_includes.rb +2 -0
- data/lib/mongoid/errors/invalid_index.rb +2 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -2
- data/lib/mongoid/errors/invalid_path.rb +2 -0
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -0
- data/lib/mongoid/errors/invalid_query.rb +41 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -2
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -2
- data/lib/mongoid/errors/invalid_scope.rb +2 -0
- data/lib/mongoid/errors/invalid_session_use.rb +2 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -0
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/invalid_time.rb +2 -0
- data/lib/mongoid/errors/invalid_value.rb +2 -0
- data/lib/mongoid/errors/inverse_not_found.rb +3 -1
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -0
- data/lib/mongoid/errors/mixed_relations.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +3 -1
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -1
- data/lib/mongoid/errors/no_client_config.rb +4 -2
- data/lib/mongoid/errors/no_client_database.rb +2 -0
- data/lib/mongoid/errors/no_client_hosts.rb +2 -0
- data/lib/mongoid/errors/no_clients_config.rb +2 -0
- data/lib/mongoid/errors/no_default_client.rb +3 -1
- data/lib/mongoid/errors/no_environment.rb +2 -0
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -0
- data/lib/mongoid/errors/no_metadata.rb +2 -0
- data/lib/mongoid/errors/no_parent.rb +2 -0
- data/lib/mongoid/errors/readonly_attribute.rb +2 -0
- data/lib/mongoid/errors/readonly_document.rb +2 -0
- data/lib/mongoid/errors/scope_overwrite.rb +2 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -0
- data/lib/mongoid/errors/unknown_model.rb +2 -0
- data/lib/mongoid/errors/unsaved_document.rb +2 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -0
- data/lib/mongoid/errors/validations.rb +2 -0
- data/lib/mongoid/errors.rb +12 -0
- data/lib/mongoid/evolvable.rb +4 -2
- data/lib/mongoid/extensions/array.rb +23 -6
- data/lib/mongoid/extensions/big_decimal.rb +2 -0
- data/lib/mongoid/extensions/boolean.rb +3 -2
- data/lib/mongoid/extensions/date.rb +13 -3
- data/lib/mongoid/extensions/date_time.rb +4 -3
- data/lib/mongoid/extensions/decimal128.rb +2 -0
- data/lib/mongoid/extensions/false_class.rb +3 -1
- data/lib/mongoid/extensions/float.rb +5 -3
- data/lib/mongoid/extensions/hash.rb +49 -9
- data/lib/mongoid/extensions/integer.rb +5 -3
- data/lib/mongoid/extensions/module.rb +2 -0
- data/lib/mongoid/extensions/nil_class.rb +2 -0
- data/lib/mongoid/extensions/object.rb +16 -4
- data/lib/mongoid/extensions/object_id.rb +2 -0
- data/lib/mongoid/extensions/range.rb +2 -0
- data/lib/mongoid/extensions/regexp.rb +2 -0
- data/lib/mongoid/extensions/set.rb +2 -0
- data/lib/mongoid/extensions/string.rb +18 -9
- data/lib/mongoid/extensions/symbol.rb +2 -0
- data/lib/mongoid/extensions/time.rb +14 -0
- data/lib/mongoid/extensions/time_with_zone.rb +14 -0
- data/lib/mongoid/extensions/true_class.rb +3 -1
- data/lib/mongoid/extensions.rb +3 -0
- data/lib/mongoid/factory.rb +52 -12
- data/lib/mongoid/fields/foreign_key.rb +3 -1
- data/lib/mongoid/fields/localized.rb +2 -0
- data/lib/mongoid/fields/standard.rb +6 -3
- data/lib/mongoid/fields/validators/macro.rb +38 -11
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields.rb +49 -6
- data/lib/mongoid/findable.rb +59 -18
- data/lib/mongoid/indexable/specification.rb +3 -1
- data/lib/mongoid/indexable/validators/options.rb +2 -0
- data/lib/mongoid/indexable.rb +5 -3
- data/lib/mongoid/inspectable.rb +4 -2
- data/lib/mongoid/interceptable.rb +10 -4
- data/lib/mongoid/loggable.rb +13 -7
- data/lib/mongoid/matchable.rb +2 -148
- 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 +32 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -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 +3 -1
- data/lib/mongoid/persistable/deletable.rb +5 -4
- data/lib/mongoid/persistable/destroyable.rb +11 -3
- data/lib/mongoid/persistable/incrementable.rb +6 -2
- data/lib/mongoid/persistable/logical.rb +4 -1
- data/lib/mongoid/persistable/poppable.rb +3 -1
- data/lib/mongoid/persistable/pullable.rb +3 -1
- data/lib/mongoid/persistable/pushable.rb +3 -1
- data/lib/mongoid/persistable/renamable.rb +10 -3
- data/lib/mongoid/persistable/savable.rb +3 -1
- data/lib/mongoid/persistable/settable.rb +3 -1
- data/lib/mongoid/persistable/unsettable.rb +8 -3
- data/lib/mongoid/persistable/updatable.rb +30 -3
- data/lib/mongoid/persistable/upsertable.rb +3 -1
- data/lib/mongoid/persistable.rb +133 -15
- data/lib/mongoid/persistence_context.rb +24 -10
- data/lib/mongoid/positional.rb +2 -0
- data/lib/mongoid/query_cache.rb +118 -100
- data/lib/mongoid/railtie.rb +3 -1
- data/lib/mongoid/railties/controller_runtime.rb +4 -1
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +11 -4
- data/lib/mongoid/scopable.rb +2 -1
- data/lib/mongoid/selectable.rb +8 -8
- data/lib/mongoid/serializable.rb +24 -14
- data/lib/mongoid/shardable.rb +80 -10
- data/lib/mongoid/stateful.rb +3 -1
- data/lib/mongoid/stringified_symbol.rb +53 -0
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -0
- data/lib/mongoid/threaded/lifecycle.rb +2 -0
- data/lib/mongoid/threaded.rb +2 -0
- data/lib/mongoid/timestamps/created/short.rb +2 -0
- data/lib/mongoid/timestamps/created.rb +3 -1
- data/lib/mongoid/timestamps/short.rb +2 -0
- data/lib/mongoid/timestamps/timeless.rb +6 -2
- data/lib/mongoid/timestamps/updated/short.rb +2 -0
- data/lib/mongoid/timestamps/updated.rb +3 -1
- data/lib/mongoid/timestamps.rb +3 -1
- data/lib/mongoid/touchable.rb +53 -16
- data/lib/mongoid/traversable.rb +115 -6
- data/lib/mongoid/validatable/associated.rb +5 -3
- data/lib/mongoid/validatable/format.rb +2 -0
- data/lib/mongoid/validatable/length.rb +2 -0
- data/lib/mongoid/validatable/localizable.rb +2 -0
- data/lib/mongoid/validatable/macros.rb +2 -0
- data/lib/mongoid/validatable/presence.rb +7 -5
- data/lib/mongoid/validatable/queryable.rb +2 -0
- data/lib/mongoid/validatable/uniqueness.rb +5 -3
- data/lib/mongoid/validatable.rb +7 -5
- data/lib/mongoid/version.rb +2 -1
- data/lib/mongoid.rb +34 -2
- data/lib/rails/generators/mongoid/config/config_generator.rb +10 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -0
- data/lib/rails/mongoid.rb +4 -2
- data/lib/support/ruby_version.rb +3 -0
- data/spec/README.md +19 -4
- data/spec/config/mongoid.yml +1 -0
- data/spec/integration/app_spec.rb +246 -94
- data/spec/integration/associations/belongs_to_spec.rb +3 -0
- data/spec/integration/associations/embedded_spec.rb +207 -0
- data/spec/integration/associations/embeds_many_spec.rb +68 -0
- data/spec/integration/associations/embeds_one_spec.rb +24 -0
- data/spec/integration/associations/foreign_key_spec.rb +99 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +65 -0
- data/spec/integration/associations/has_many_spec.rb +129 -0
- data/spec/integration/associations/has_one_spec.rb +177 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
- data/spec/integration/associations/reverse_population_spec.rb +35 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +37 -0
- data/spec/integration/atomic/modifiers_spec.rb +117 -0
- data/spec/integration/bson_regexp_raw_spec.rb +20 -0
- data/spec/integration/contextual/empty_spec.rb +142 -0
- data/spec/integration/criteria/date_field_spec.rb +1 -1
- data/spec/integration/criteria/default_scope_spec.rb +21 -0
- data/spec/integration/criteria/logical_spec.rb +94 -0
- data/spec/integration/discriminator_key_spec.rb +354 -0
- data/spec/integration/discriminator_value_spec.rb +207 -0
- data/spec/integration/document_spec.rb +30 -0
- data/spec/integration/i18n_fallbacks_spec.rb +90 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
- 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 +100 -0
- data/spec/integration/matcher_spec.rb +189 -0
- data/spec/integration/server_query_spec.rb +142 -0
- data/spec/integration/shardable_spec.rb +149 -0
- data/spec/integration/stringified_symbol_field_spec.rb +190 -0
- data/spec/lite_spec_helper.rb +15 -5
- data/spec/mongoid/association/accessors_spec.rb +241 -63
- data/spec/mongoid/association/auto_save_spec.rb +3 -0
- data/spec/mongoid/association/builders_spec.rb +3 -0
- data/spec/mongoid/association/constrainable_spec.rb +3 -0
- data/spec/mongoid/association/counter_cache_spec.rb +3 -0
- data/spec/mongoid/association/depending_spec.rb +427 -333
- data/spec/mongoid/association/eager_spec.rb +3 -0
- data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +4 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +53 -4
- data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +52 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +4 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +4 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +29 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +4 -1
- data/spec/mongoid/association/macros_spec.rb +3 -0
- data/spec/mongoid/association/nested/many_spec.rb +3 -0
- data/spec/mongoid/association/nested/one_spec.rb +19 -12
- data/spec/mongoid/association/options_spec.rb +3 -0
- data/spec/mongoid/association/polymorphic_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +205 -10
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +45 -8
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +58 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +4 -1
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +16 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +26 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +37 -14
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +40 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +4 -1
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +18 -3
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +248 -93
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +463 -186
- data/spec/mongoid/association/referenced/has_many_models.rb +41 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -3
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +32 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +4 -1
- data/spec/mongoid/association/reflections_spec.rb +3 -0
- data/spec/mongoid/association/syncable_spec.rb +3 -0
- data/spec/mongoid/association_spec.rb +3 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +50 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +3 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +3 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +3 -0
- data/spec/mongoid/atomic/paths_spec.rb +67 -12
- data/spec/mongoid/atomic_spec.rb +26 -0
- data/spec/mongoid/attributes/nested_spec.rb +4 -1
- 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 +41 -0
- data/spec/mongoid/attributes/readonly_spec.rb +3 -0
- data/spec/mongoid/attributes_spec.rb +336 -0
- data/spec/mongoid/cacheable_spec.rb +3 -0
- data/spec/mongoid/changeable_spec.rb +26 -0
- data/spec/mongoid/clients/factory_spec.rb +137 -28
- data/spec/mongoid/clients/options_spec.rb +42 -23
- data/spec/mongoid/clients/sessions_spec.rb +4 -6
- data/spec/mongoid/clients/transactions_spec.rb +6 -3
- data/spec/mongoid/clients_spec.rb +3 -0
- data/spec/mongoid/composable_spec.rb +3 -0
- data/spec/mongoid/config/environment_spec.rb +89 -8
- data/spec/mongoid/config/options_spec.rb +23 -3
- data/spec/mongoid/config_spec.rb +172 -0
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +3 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +3 -0
- data/spec/mongoid/contextual/atomic_spec.rb +181 -29
- data/spec/mongoid/contextual/geo_near_spec.rb +4 -1
- data/spec/mongoid/contextual/map_reduce_spec.rb +3 -0
- data/spec/mongoid/contextual/memory_spec.rb +3 -0
- data/spec/mongoid/contextual/mongo_spec.rb +77 -18
- data/spec/mongoid/contextual/none_spec.rb +3 -0
- data/spec/mongoid/copyable_spec.rb +200 -18
- data/spec/mongoid/copyable_spec_models.rb +31 -0
- data/spec/mongoid/criteria/findable_spec.rb +58 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +3 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +3 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +8 -4
- data/spec/mongoid/criteria/options_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +62 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +4 -1
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +36 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +4 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +24 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +146 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1593 -285
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1048 -2773
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +190 -0
- data/spec/mongoid/criteria/scopable_spec.rb +3 -0
- data/spec/mongoid/criteria_projection_spec.rb +411 -0
- data/spec/mongoid/criteria_spec.rb +241 -278
- data/spec/mongoid/document_fields_spec.rb +26 -0
- data/spec/mongoid/document_query_spec.rb +90 -0
- data/spec/mongoid/document_spec.rb +113 -16
- data/spec/mongoid/equality_spec.rb +3 -1
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +6 -3
- data/spec/mongoid/errors/callback_spec.rb +3 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +5 -2
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +3 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +3 -0
- data/spec/mongoid/errors/eager_load_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_config_file_spec.rb +32 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +5 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +5 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +3 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +4 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +3 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +3 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +23 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +5 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +6 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +6 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +3 -0
- data/spec/mongoid/errors/no_environment_spec.rb +3 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +5 -2
- data/spec/mongoid/errors/no_parent_spec.rb +4 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +3 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -0
- data/spec/mongoid/errors/unsaved_document_spec.rb +4 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -0
- data/spec/mongoid/errors/validations_spec.rb +3 -0
- data/spec/mongoid/extensions/array_spec.rb +26 -43
- data/spec/mongoid/extensions/big_decimal_spec.rb +3 -0
- data/spec/mongoid/extensions/binary_spec.rb +3 -0
- data/spec/mongoid/extensions/boolean_spec.rb +3 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +336 -0
- data/spec/mongoid/extensions/date_spec.rb +9 -160
- data/spec/mongoid/extensions/date_time_spec.rb +18 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +3 -0
- data/spec/mongoid/extensions/false_class_spec.rb +4 -1
- data/spec/mongoid/extensions/float_spec.rb +18 -3
- data/spec/mongoid/extensions/hash_spec.rb +106 -0
- data/spec/mongoid/extensions/integer_spec.rb +15 -2
- data/spec/mongoid/extensions/module_spec.rb +3 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +3 -0
- data/spec/mongoid/extensions/object_id_spec.rb +3 -0
- data/spec/mongoid/extensions/object_spec.rb +14 -24
- data/spec/mongoid/extensions/range_spec.rb +3 -0
- data/spec/mongoid/extensions/regexp_spec.rb +3 -0
- data/spec/mongoid/extensions/set_spec.rb +3 -0
- data/spec/mongoid/extensions/string_spec.rb +59 -25
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
- data/spec/mongoid/extensions/symbol_spec.rb +3 -0
- data/spec/mongoid/extensions/time_spec.rb +30 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -0
- data/spec/mongoid/extensions/true_class_spec.rb +4 -1
- data/spec/mongoid/extensions_spec.rb +3 -0
- data/spec/mongoid/factory_spec.rb +287 -27
- data/spec/mongoid/fields/foreign_key_spec.rb +3 -0
- data/spec/mongoid/fields/localized_spec.rb +7 -4
- data/spec/mongoid/fields/standard_spec.rb +3 -0
- data/spec/mongoid/fields_spec.rb +93 -6
- data/spec/mongoid/findable_spec.rb +35 -0
- data/spec/mongoid/indexable/specification_spec.rb +3 -0
- data/spec/mongoid/indexable_spec.rb +31 -2
- data/spec/mongoid/inspectable_spec.rb +40 -2
- data/spec/mongoid/interceptable_spec.rb +67 -2
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +3 -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 +37 -0
- data/spec/mongoid/persistable/creatable_spec.rb +111 -25
- data/spec/mongoid/persistable/deletable_spec.rb +264 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +194 -3
- data/spec/mongoid/persistable/incrementable_spec.rb +17 -0
- data/spec/mongoid/persistable/logical_spec.rb +17 -0
- data/spec/mongoid/persistable/poppable_spec.rb +17 -0
- data/spec/mongoid/persistable/pullable_spec.rb +31 -0
- data/spec/mongoid/persistable/pushable_spec.rb +31 -0
- data/spec/mongoid/persistable/renamable_spec.rb +17 -0
- data/spec/mongoid/persistable/savable_spec.rb +175 -16
- data/spec/mongoid/persistable/settable_spec.rb +47 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +17 -0
- data/spec/mongoid/persistable/updatable_spec.rb +5 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +4 -1
- data/spec/mongoid/persistable_spec.rb +85 -8
- data/spec/mongoid/persistence_context_spec.rb +3 -0
- data/spec/mongoid/positional_spec.rb +3 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +69 -0
- data/spec/mongoid/query_cache_spec.rb +466 -82
- data/spec/mongoid/relations/proxy_spec.rb +3 -0
- data/spec/mongoid/reloadable_spec.rb +93 -1
- data/spec/mongoid/scopable_spec.rb +3 -0
- data/spec/mongoid/selectable_spec.rb +3 -0
- data/spec/mongoid/serializable_spec.rb +152 -20
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +116 -16
- data/spec/mongoid/stateful_spec.rb +3 -0
- data/spec/mongoid/tasks/database_rake_spec.rb +3 -0
- data/spec/mongoid/tasks/database_spec.rb +3 -0
- data/spec/mongoid/threaded_spec.rb +3 -0
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -0
- data/spec/mongoid/timestamps/created_spec.rb +3 -0
- data/spec/mongoid/timestamps/timeless_spec.rb +3 -0
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -0
- data/spec/mongoid/timestamps/updated_spec.rb +3 -0
- data/spec/mongoid/timestamps_spec.rb +3 -0
- data/spec/mongoid/touchable_spec.rb +171 -19
- data/spec/mongoid/touchable_spec_models.rb +54 -0
- data/spec/mongoid/traversable_spec.rb +1103 -0
- data/spec/mongoid/validatable/associated_spec.rb +3 -0
- data/spec/mongoid/validatable/format_spec.rb +3 -0
- data/spec/mongoid/validatable/length_spec.rb +3 -0
- data/spec/mongoid/validatable/numericality_spec.rb +3 -0
- data/spec/mongoid/validatable/presence_spec.rb +3 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +3 -0
- data/spec/mongoid/validatable_spec.rb +4 -1
- data/spec/mongoid_spec.rb +3 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +4 -1
- data/spec/rails/mongoid_spec.rb +5 -2
- 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/cluster_config.rb +19 -4
- data/spec/shared/lib/mrss/constraints.rb +67 -12
- data/spec/shared/lib/mrss/docker_runner.rb +10 -1
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +16 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +84 -33
- data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +126 -32
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/server.sh +123 -26
- data/spec/shared/shlib/set_env.sh +4 -1
- data/spec/spec_helper.rb +31 -17
- data/spec/support/authorization.rb +3 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +15 -233
- data/spec/support/expectations.rb +6 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +1 -0
- data/spec/{app → support}/models/account.rb +3 -0
- data/spec/{app → support}/models/acolyte.rb +3 -0
- data/spec/{app → support}/models/actor.rb +4 -1
- data/spec/support/models/actress.rb +5 -0
- data/spec/{app → support}/models/address.rb +7 -0
- data/spec/{app → support}/models/address_component.rb +3 -0
- data/spec/{app → support}/models/address_number.rb +3 -0
- data/spec/{app → support}/models/agency.rb +3 -0
- data/spec/{app → support}/models/agent.rb +3 -0
- data/spec/{app → support}/models/album.rb +3 -0
- data/spec/{app → support}/models/alert.rb +3 -0
- data/spec/{app → support}/models/animal.rb +3 -0
- data/spec/{app → support}/models/answer.rb +3 -0
- data/spec/{app → support}/models/appointment.rb +3 -0
- data/spec/support/models/armrest.rb +10 -0
- data/spec/{app → support}/models/array_field.rb +1 -0
- data/spec/{app → support}/models/article.rb +3 -0
- data/spec/{app → support}/models/artist.rb +3 -0
- data/spec/{app → support}/models/artwork.rb +3 -0
- data/spec/{app → support}/models/audio.rb +3 -0
- data/spec/{app → support}/models/augmentation.rb +3 -0
- data/spec/{app → support}/models/author.rb +3 -0
- data/spec/{app → support}/models/baby.rb +3 -0
- data/spec/{app → support}/models/band.rb +3 -0
- data/spec/{app → support}/models/bar.rb +3 -0
- data/spec/{app → support}/models/basic.rb +3 -0
- data/spec/support/models/bed.rb +4 -0
- data/spec/support/models/big_palette.rb +5 -0
- data/spec/{app → support}/models/birthday.rb +3 -0
- data/spec/support/models/bolt.rb +8 -0
- data/spec/{app → support}/models/bomb.rb +3 -0
- data/spec/{app → support}/models/book.rb +3 -0
- data/spec/{app → support}/models/breed.rb +3 -0
- data/spec/support/models/browser.rb +9 -0
- data/spec/{app → support}/models/building.rb +3 -0
- data/spec/{app → support}/models/building_address.rb +3 -0
- data/spec/{app → support}/models/bus.rb +3 -0
- data/spec/{app → support}/models/business.rb +3 -0
- data/spec/{app → support}/models/callback_test.rb +3 -0
- data/spec/{app → support}/models/canvas.rb +4 -1
- data/spec/support/models/car.rb +4 -0
- data/spec/{app → support}/models/cat.rb +3 -0
- data/spec/{app → support}/models/category.rb +3 -0
- data/spec/{app → support}/models/child.rb +3 -0
- data/spec/{app → support}/models/child_doc.rb +3 -0
- data/spec/{app → support}/models/church.rb +3 -0
- data/spec/{app → support}/models/circle.rb +3 -0
- data/spec/{app → support}/models/circuit.rb +3 -0
- data/spec/{app → support}/models/circus.rb +3 -0
- data/spec/{app → support}/models/code.rb +3 -0
- data/spec/support/models/coding/pull_request.rb +12 -0
- data/spec/support/models/coding.rb +4 -0
- data/spec/{app → support}/models/comment.rb +3 -0
- data/spec/{app → support}/models/company.rb +3 -0
- data/spec/{app → support}/models/consumption_period.rb +3 -0
- data/spec/{app → support}/models/contextable_item.rb +3 -0
- data/spec/{app → support}/models/contractor.rb +3 -0
- data/spec/{app → support}/models/cookie.rb +3 -0
- data/spec/{app → support}/models/country_code.rb +3 -0
- data/spec/{app → support}/models/courier_job.rb +3 -0
- data/spec/support/models/crate.rb +13 -0
- data/spec/{app → support}/models/customer.rb +0 -0
- data/spec/{app → support}/models/customer_address.rb +0 -0
- data/spec/support/models/deed.rb +8 -0
- data/spec/{app → support}/models/definition.rb +3 -0
- data/spec/{app → support}/models/delegating_patient.rb +0 -0
- data/spec/{app → support}/models/description.rb +3 -0
- data/spec/{app → support}/models/dictionary.rb +9 -0
- data/spec/{app → support}/models/division.rb +3 -0
- data/spec/{app → support}/models/doctor.rb +3 -0
- data/spec/{app → support}/models/dog.rb +3 -0
- data/spec/{app → support}/models/dokument.rb +3 -0
- data/spec/{app → support}/models/draft.rb +3 -0
- data/spec/{app → support}/models/dragon.rb +3 -0
- data/spec/{app → support}/models/driver.rb +4 -1
- data/spec/{app → support}/models/drug.rb +3 -0
- data/spec/{app → support}/models/dungeon.rb +3 -0
- data/spec/{app → support}/models/edit.rb +3 -0
- data/spec/{app → support}/models/email.rb +3 -0
- data/spec/support/models/employer.rb +8 -0
- data/spec/{app → support}/models/entry.rb +3 -0
- data/spec/support/models/eraser.rb +4 -0
- data/spec/{app → support}/models/even.rb +3 -0
- data/spec/{app → support}/models/event.rb +3 -0
- data/spec/{app → support}/models/exhibition.rb +3 -0
- data/spec/{app → support}/models/exhibitor.rb +3 -0
- data/spec/{app → support}/models/explosion.rb +3 -0
- data/spec/{app → support}/models/eye.rb +3 -0
- data/spec/{app → support}/models/eye_bowl.rb +3 -0
- data/spec/{app → support}/models/face.rb +3 -0
- data/spec/{app → support}/models/favorite.rb +3 -0
- data/spec/{app → support}/models/filesystem.rb +3 -0
- data/spec/{app → support}/models/fire_hydrant.rb +3 -0
- data/spec/{app → support}/models/firefox.rb +3 -0
- data/spec/{app → support}/models/fish.rb +3 -0
- data/spec/{app → support}/models/folder.rb +3 -0
- data/spec/{app → support}/models/folder_item.rb +3 -0
- data/spec/{app → support}/models/fruits.rb +3 -0
- data/spec/{app → support}/models/game.rb +3 -0
- data/spec/{app → support}/models/ghost.rb +3 -0
- data/spec/support/models/guitar.rb +5 -0
- data/spec/support/models/hole.rb +13 -0
- data/spec/{app → support}/models/home.rb +3 -0
- data/spec/{app → support}/models/house.rb +3 -0
- data/spec/support/models/html_writer.rb +6 -0
- data/spec/{app → support}/models/id_key.rb +3 -0
- data/spec/support/models/idnodef.rb +8 -0
- data/spec/{app → support}/models/image.rb +3 -0
- data/spec/{app → support}/models/implant.rb +3 -0
- data/spec/support/models/instrument.rb +9 -0
- data/spec/{app → support}/models/item.rb +4 -1
- data/spec/{app → support}/models/jar.rb +3 -0
- data/spec/{app → support}/models/kaleidoscope.rb +3 -0
- data/spec/{app → support}/models/kangaroo.rb +4 -1
- data/spec/{app → support}/models/label.rb +3 -0
- data/spec/{app → support}/models/language.rb +3 -0
- data/spec/{app → support}/models/lat_lng.rb +3 -0
- data/spec/{app → support}/models/league.rb +3 -0
- data/spec/support/models/learner.rb +5 -0
- data/spec/{app → support}/models/line_item.rb +3 -0
- data/spec/{app → support}/models/location.rb +3 -0
- data/spec/{app → support}/models/login.rb +3 -0
- data/spec/{app → support}/models/manufacturer.rb +3 -0
- data/spec/{app → support}/models/meat.rb +3 -0
- data/spec/{app → support}/models/membership.rb +3 -0
- data/spec/{app → support}/models/message.rb +3 -0
- data/spec/{app → support}/models/minim.rb +1 -1
- data/spec/{app → support}/models/mixed_drink.rb +3 -0
- data/spec/support/models/mop.rb +25 -0
- data/spec/{app → support}/models/movie.rb +3 -0
- data/spec/support/models/my_hash.rb +5 -0
- data/spec/{app → support}/models/name.rb +3 -0
- data/spec/support/models/name_only.rb +9 -0
- data/spec/{app → support}/models/node.rb +3 -0
- data/spec/{app → support}/models/note.rb +3 -0
- data/spec/support/models/nut.rb +8 -0
- data/spec/{app → support}/models/odd.rb +3 -0
- data/spec/support/models/order.rb +11 -0
- data/spec/{app → support}/models/ordered_post.rb +3 -0
- data/spec/{app → support}/models/ordered_preference.rb +3 -0
- data/spec/{app → support}/models/oscar.rb +3 -0
- data/spec/support/models/other_owner_object.rb +5 -0
- data/spec/{app → support}/models/override.rb +3 -0
- data/spec/{app → support}/models/ownable.rb +3 -0
- data/spec/{app → support}/models/owner.rb +5 -0
- data/spec/support/models/pack.rb +6 -0
- data/spec/{app → support}/models/page.rb +3 -0
- data/spec/{app → support}/models/page_question.rb +3 -0
- data/spec/{app → support}/models/palette.rb +4 -1
- data/spec/{app → support}/models/parent.rb +3 -0
- data/spec/{app → support}/models/parent_doc.rb +3 -0
- data/spec/{app → support}/models/passport.rb +4 -0
- data/spec/{app → support}/models/patient.rb +3 -0
- data/spec/support/models/pdf_writer.rb +6 -0
- data/spec/support/models/pencil.rb +4 -0
- data/spec/{app → support}/models/person.rb +21 -1
- data/spec/{app → support}/models/pet.rb +3 -0
- data/spec/{app → support}/models/pet_owner.rb +3 -0
- data/spec/{app → support}/models/phone.rb +4 -0
- data/spec/support/models/piano.rb +5 -0
- data/spec/{app → support}/models/pizza.rb +3 -0
- data/spec/{app → support}/models/player.rb +3 -0
- data/spec/{app → support}/models/post.rb +3 -0
- data/spec/{app → support}/models/post_genre.rb +3 -0
- data/spec/{app → support}/models/powerup.rb +3 -0
- data/spec/{app → support}/models/preference.rb +3 -0
- data/spec/{app → support}/models/princess.rb +3 -0
- data/spec/{app → support}/models/product.rb +3 -0
- data/spec/support/models/profile.rb +18 -0
- data/spec/{app → support}/models/pronunciation.rb +3 -0
- data/spec/{app → support}/models/pub.rb +3 -0
- data/spec/support/models/publication/encyclopedia.rb +12 -0
- data/spec/support/models/publication/review.rb +14 -0
- data/spec/support/models/publication.rb +5 -0
- data/spec/{app → support}/models/purchase.rb +3 -0
- data/spec/{app → support}/models/question.rb +3 -0
- data/spec/{app → support}/models/quiz.rb +3 -0
- data/spec/{app → support}/models/rating.rb +3 -0
- data/spec/{app → support}/models/record.rb +3 -0
- data/spec/{app → support}/models/registry.rb +3 -0
- data/spec/{app → support}/models/role.rb +3 -0
- data/spec/{app → support}/models/root_category.rb +3 -0
- data/spec/{app → support}/models/sandwich.rb +3 -0
- data/spec/{app → support}/models/scheduler.rb +3 -0
- data/spec/support/models/scribe.rb +8 -0
- data/spec/support/models/sealer.rb +8 -0
- data/spec/support/models/seat.rb +25 -0
- data/spec/{app → support}/models/seo.rb +3 -0
- data/spec/support/models/series.rb +8 -0
- data/spec/{app → support}/models/server.rb +3 -0
- data/spec/{app → support}/models/service.rb +3 -0
- data/spec/{app → support}/models/shape.rb +5 -2
- data/spec/{app → support}/models/shelf.rb +3 -0
- data/spec/{app → support}/models/shipment_address.rb +3 -0
- data/spec/{app → support}/models/shipping_container.rb +3 -0
- data/spec/{app → support}/models/shipping_pack.rb +3 -0
- data/spec/support/models/shirt.rb +12 -0
- data/spec/{app → support}/models/shop.rb +3 -0
- data/spec/{app → support}/models/short_agent.rb +3 -0
- data/spec/{app → support}/models/short_quiz.rb +3 -0
- data/spec/{app → support}/models/simple.rb +3 -0
- data/spec/{app → support}/models/slave.rb +3 -0
- data/spec/{app → support}/models/song.rb +3 -0
- data/spec/{app → support}/models/sound.rb +3 -0
- data/spec/support/models/spacer.rb +8 -0
- data/spec/{app → support}/models/square.rb +3 -0
- data/spec/{app → support}/models/staff.rb +3 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +3 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +3 -0
- data/spec/{app → support}/models/store_as_dup_test3.rb +1 -0
- data/spec/{app → support}/models/store_as_dup_test4.rb +1 -0
- data/spec/support/models/strategy.rb +6 -0
- data/spec/support/models/sub_item.rb +6 -0
- data/spec/{app → support}/models/subscription.rb +3 -0
- data/spec/{app → support}/models/survey.rb +3 -0
- data/spec/{app → support}/models/symptom.rb +3 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +3 -0
- data/spec/{app → support}/models/target.rb +3 -0
- data/spec/{app → support}/models/template.rb +3 -0
- data/spec/{app → support}/models/thing.rb +3 -0
- data/spec/support/models/threadlocker.rb +8 -0
- data/spec/support/models/title.rb +6 -0
- data/spec/support/models/tool.rb +11 -0
- data/spec/{app → support}/models/topping.rb +3 -0
- data/spec/support/models/toy.rb +10 -0
- data/spec/{app → support}/models/track.rb +3 -0
- data/spec/{app → support}/models/translation.rb +3 -0
- data/spec/{app → support}/models/tree.rb +3 -0
- data/spec/support/models/truck.rb +8 -0
- data/spec/{app → support}/models/updatable.rb +1 -0
- data/spec/{app → support}/models/user.rb +3 -0
- data/spec/{app → support}/models/user_account.rb +3 -0
- data/spec/{app → support}/models/validation_callback.rb +3 -0
- data/spec/support/models/vehicle.rb +19 -0
- data/spec/{app → support}/models/version.rb +3 -0
- data/spec/{app → support}/models/vertex.rb +4 -1
- data/spec/{app → support}/models/vet_visit.rb +3 -0
- data/spec/{app → support}/models/video.rb +3 -0
- data/spec/support/models/video_game.rb +4 -0
- data/spec/support/models/washer.rb +8 -0
- data/spec/{app → support}/models/weapon.rb +3 -0
- data/spec/{app → support}/models/wiki_page.rb +4 -0
- data/spec/{app → support}/models/word.rb +3 -0
- data/spec/{app → support}/models/word_origin.rb +3 -0
- data/spec/{app → support}/models/writer.rb +5 -2
- data/spec/support/shared/time.rb +54 -0
- data/spec/support/spec_config.rb +14 -3
- data.tar.gz.sig +0 -0
- metadata +1035 -732
- metadata.gz.sig +2 -2
- 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/spec/app/models/actress.rb +0 -2
- data/spec/app/models/bed.rb +0 -1
- data/spec/app/models/big_palette.rb +0 -2
- data/spec/app/models/browser.rb +0 -6
- data/spec/app/models/car.rb +0 -1
- data/spec/app/models/employer.rb +0 -5
- data/spec/app/models/eraser.rb +0 -1
- data/spec/app/models/html_writer.rb +0 -3
- 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/pack.rb +0 -3
- data/spec/app/models/pdf_writer.rb +0 -3
- 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/strategy.rb +0 -3
- data/spec/app/models/sub_item.rb +0 -3
- data/spec/app/models/title.rb +0 -3
- data/spec/app/models/tool.rb +0 -8
- 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
|
@@ -1,55 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
|
|
5
|
-
# This module contains all the
|
|
7
|
+
# This module contains all the behavior related to accessing associations
|
|
6
8
|
# through the getters and setters, and how to delegate to builders to
|
|
7
9
|
# create new ones.
|
|
8
10
|
module Accessors
|
|
9
11
|
extend ActiveSupport::Concern
|
|
10
12
|
|
|
11
|
-
# Builds the related document and creates the
|
|
12
|
-
# document is nil, then sets the
|
|
13
|
+
# Builds the related document and creates the association unless the
|
|
14
|
+
# document is nil, then sets the association on this document.
|
|
13
15
|
#
|
|
14
|
-
# @example Build the
|
|
16
|
+
# @example Build the association.
|
|
15
17
|
# person.__build__(:addresses, { :_id => 1 }, association)
|
|
16
18
|
#
|
|
17
|
-
# @param [ String, Symbol ] name The name of the
|
|
19
|
+
# @param [ String, Symbol ] name The name of the association.
|
|
18
20
|
# @param [ Hash, BSON::ObjectId ] object The id or attributes to use.
|
|
19
21
|
# @param [ Association ] association The association metadata.
|
|
22
|
+
# @param [ Hash ] selected_fields Fields which were retrieved via #only.
|
|
23
|
+
# If selected_fields is specified, fields not listed in it will not be
|
|
24
|
+
# accessible in the built document.
|
|
20
25
|
#
|
|
21
|
-
# @return [ Proxy ] The
|
|
26
|
+
# @return [ Proxy ] The association.
|
|
22
27
|
#
|
|
23
28
|
# @since 2.0.0.rc.1
|
|
24
|
-
def __build__(name, object, association)
|
|
25
|
-
relation = create_relation(object, association)
|
|
29
|
+
def __build__(name, object, association, selected_fields = nil)
|
|
30
|
+
relation = create_relation(object, association, selected_fields)
|
|
26
31
|
set_relation(name, relation)
|
|
27
32
|
end
|
|
28
33
|
|
|
29
|
-
# Create
|
|
34
|
+
# Create an association from an object and association metadata.
|
|
30
35
|
#
|
|
31
|
-
# @example Create the
|
|
36
|
+
# @example Create the association.
|
|
32
37
|
# person.create_relation(document, association)
|
|
33
38
|
#
|
|
34
|
-
# @param [ Document, Array<Document> ] object The
|
|
39
|
+
# @param [ Document, Array<Document> ] object The association target.
|
|
35
40
|
# @param [ Association ] association The association metadata.
|
|
41
|
+
# @param [ Hash ] selected_fields Fields which were retrieved via #only.
|
|
42
|
+
# If selected_fields is specified, fields not listed in it will not be
|
|
43
|
+
# accessible in the created association document.
|
|
36
44
|
#
|
|
37
|
-
# @return [ Proxy ] The
|
|
45
|
+
# @return [ Proxy ] The association.
|
|
38
46
|
#
|
|
39
47
|
# @since 2.0.0.rc.1
|
|
40
|
-
def create_relation(object, association)
|
|
48
|
+
def create_relation(object, association, selected_fields = nil)
|
|
41
49
|
type = @attributes[association.inverse_type]
|
|
42
|
-
target = association.build(self, object, type)
|
|
50
|
+
target = association.build(self, object, type, selected_fields)
|
|
43
51
|
target ? association.create_relation(self, target) : nil
|
|
44
52
|
end
|
|
45
53
|
|
|
46
|
-
# Resets the criteria inside the
|
|
47
|
-
#
|
|
54
|
+
# Resets the criteria inside the association proxy. Used by many-to-many
|
|
55
|
+
# associations to keep the underlying ids array in sync.
|
|
48
56
|
#
|
|
49
|
-
# @example Reset the
|
|
57
|
+
# @example Reset the association criteria.
|
|
50
58
|
# person.reset_relation_criteria(:preferences)
|
|
51
59
|
#
|
|
52
|
-
# @param [ Symbol ] name The name of the
|
|
60
|
+
# @param [ Symbol ] name The name of the association.
|
|
53
61
|
#
|
|
54
62
|
# @since 3.0.14
|
|
55
63
|
def reset_relation_criteria(name)
|
|
@@ -58,16 +66,16 @@ module Mongoid
|
|
|
58
66
|
end
|
|
59
67
|
end
|
|
60
68
|
|
|
61
|
-
# Set the supplied
|
|
69
|
+
# Set the supplied association to an instance variable on the class with the
|
|
62
70
|
# provided name. Used as a helper just for code cleanliness.
|
|
63
71
|
#
|
|
64
72
|
# @example Set the proxy on the document.
|
|
65
73
|
# person.set(:addresses, addresses)
|
|
66
74
|
#
|
|
67
|
-
# @param [ String, Symbol ] name The name of the
|
|
68
|
-
# @param [ Proxy ] relation The
|
|
75
|
+
# @param [ String, Symbol ] name The name of the association.
|
|
76
|
+
# @param [ Proxy ] relation The association to set.
|
|
69
77
|
#
|
|
70
|
-
# @return [ Proxy ] The
|
|
78
|
+
# @return [ Proxy ] The association.
|
|
71
79
|
#
|
|
72
80
|
# @since 2.0.0.rc.1
|
|
73
81
|
def set_relation(name, relation)
|
|
@@ -76,20 +84,20 @@ module Mongoid
|
|
|
76
84
|
|
|
77
85
|
private
|
|
78
86
|
|
|
79
|
-
# Get the
|
|
87
|
+
# Get the association. Extracted out from the getter method to avoid
|
|
80
88
|
# infinite recursion when overriding the getter.
|
|
81
89
|
#
|
|
82
90
|
# @api private
|
|
83
91
|
#
|
|
84
|
-
# @example Get the
|
|
92
|
+
# @example Get the association.
|
|
85
93
|
# document.get_relation(:name, association)
|
|
86
94
|
#
|
|
87
|
-
# @param [ Symbol ] name The name of the
|
|
95
|
+
# @param [ Symbol ] name The name of the association.
|
|
88
96
|
# @param [ Association ] association The association metadata.
|
|
89
|
-
# @param [ Object ] object The object used to build the
|
|
90
|
-
# @param [ true, false ] reload If the
|
|
97
|
+
# @param [ Object ] object The object used to build the association.
|
|
98
|
+
# @param [ true, false ] reload If the association is to be reloaded.
|
|
91
99
|
#
|
|
92
|
-
# @return [ Proxy ] The
|
|
100
|
+
# @return [ Proxy ] The association.
|
|
93
101
|
#
|
|
94
102
|
# @since 3.0.16
|
|
95
103
|
def get_relation(name, association, object, reload = false)
|
|
@@ -101,13 +109,95 @@ module Mongoid
|
|
|
101
109
|
if object && needs_no_database_query?(object, association)
|
|
102
110
|
__build__(name, object, association)
|
|
103
111
|
else
|
|
104
|
-
|
|
112
|
+
selected_fields = _mongoid_filter_selected_fields(association.key)
|
|
113
|
+
__build__(name, attributes[association.key], association, selected_fields)
|
|
105
114
|
end
|
|
106
115
|
end
|
|
107
116
|
end
|
|
108
117
|
end
|
|
109
118
|
end
|
|
110
119
|
|
|
120
|
+
# Returns a subset of __selected_fields attribute applicable to the
|
|
121
|
+
# (embedded) association with the given key, or nil if no projection
|
|
122
|
+
# is to be performed.
|
|
123
|
+
#
|
|
124
|
+
# Also returns nil if exclusionary projection was requested but it does
|
|
125
|
+
# not exclude the field of the association.
|
|
126
|
+
#
|
|
127
|
+
# For example, if __selected_fields is {'a' => 1, 'b.c' => 2, 'b.c.f' => 3},
|
|
128
|
+
# and assoc_key is 'b', return value would be {'c' => 2, 'c.f' => 3}.
|
|
129
|
+
#
|
|
130
|
+
# @param [ String ] assoc_key
|
|
131
|
+
#
|
|
132
|
+
# @return [ Hash | nil ]
|
|
133
|
+
#
|
|
134
|
+
# @api private
|
|
135
|
+
def _mongoid_filter_selected_fields(assoc_key)
|
|
136
|
+
return nil unless __selected_fields
|
|
137
|
+
|
|
138
|
+
# If the list of fields was specified using #without instead of #only
|
|
139
|
+
# and the provided list does not include the association, any of its
|
|
140
|
+
# fields should be allowed.
|
|
141
|
+
if __selected_fields.values.all? { |v| v == 0 } &&
|
|
142
|
+
__selected_fields.keys.none? { |k| k.split('.', 2).first == assoc_key }
|
|
143
|
+
then
|
|
144
|
+
return nil
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
projecting_assoc = false
|
|
148
|
+
|
|
149
|
+
filtered = {}
|
|
150
|
+
__selected_fields.each do |k, v|
|
|
151
|
+
bits = k.split('.')
|
|
152
|
+
|
|
153
|
+
# If we are asked to project an association, we need all of that
|
|
154
|
+
# association's fields. However, we may be asked to project
|
|
155
|
+
# an association *and* its fields in the same query. In this case
|
|
156
|
+
# behavior differs according to server version:
|
|
157
|
+
#
|
|
158
|
+
# 4.2 and lower take the most recent projection specification, meaning
|
|
159
|
+
# projecting foo followed by foo.bar effectively projects foo.bar and
|
|
160
|
+
# projecting foo.bar followed by foo effectively projects foo.
|
|
161
|
+
# To match this behavior we need to track when we are being asked
|
|
162
|
+
# to project the association and when we are asked to project a field,
|
|
163
|
+
# and if we are asked to project the association last we need to
|
|
164
|
+
# remove any field projections.
|
|
165
|
+
#
|
|
166
|
+
# 4.4 (and presumably higher) do not allow projection to be on an
|
|
167
|
+
# association and its field, so it doesn't matter what we do. Hence
|
|
168
|
+
# we just need to handle the 4.2 and lower case correctly.
|
|
169
|
+
if bits.first == assoc_key
|
|
170
|
+
# Projecting the entire association OR some of its fields
|
|
171
|
+
if bits.length > 1
|
|
172
|
+
# Projecting a field
|
|
173
|
+
bits.shift
|
|
174
|
+
filtered[bits.join('.')] = v
|
|
175
|
+
projecting_assoc = false
|
|
176
|
+
else
|
|
177
|
+
# Projecting the entire association
|
|
178
|
+
projecting_assoc = true
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
if projecting_assoc
|
|
184
|
+
# The last projection was of the entire association; we may have
|
|
185
|
+
# also been projecting fields, but discard the field projections
|
|
186
|
+
# and return nil indicating we want the entire association.
|
|
187
|
+
return nil
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Positional projection is specified as "foo.$". In this case the
|
|
191
|
+
# document that the $ is referring to should be retrieved with all
|
|
192
|
+
# fields. See https://docs.mongodb.com/manual/reference/operator/projection/positional/
|
|
193
|
+
# and https://jira.mongodb.org/browse/MONGOID-4769.
|
|
194
|
+
if filtered.keys == %w($)
|
|
195
|
+
filtered = nil
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
filtered
|
|
199
|
+
end
|
|
200
|
+
|
|
111
201
|
def needs_no_database_query?(object, association)
|
|
112
202
|
object.is_a?(Document) && !object.embedded? &&
|
|
113
203
|
object._id == attributes[association.key]
|
|
@@ -157,12 +247,12 @@ module Mongoid
|
|
|
157
247
|
[args.first || {}, args.size > 1 ? args[1] : {}]
|
|
158
248
|
end
|
|
159
249
|
|
|
160
|
-
# Adds the existence check for
|
|
250
|
+
# Adds the existence check for associations.
|
|
161
251
|
#
|
|
162
252
|
# @example Add the existence check.
|
|
163
253
|
# Person.define_existence_check!(association)
|
|
164
254
|
#
|
|
165
|
-
# @example Check if
|
|
255
|
+
# @example Check if an association exists.
|
|
166
256
|
# person = Person.new
|
|
167
257
|
# person.has_game?
|
|
168
258
|
# person.game?
|
|
@@ -184,14 +274,14 @@ module Mongoid
|
|
|
184
274
|
end
|
|
185
275
|
end
|
|
186
276
|
|
|
187
|
-
# Defines the getter for the
|
|
188
|
-
# return the instance variable for the
|
|
277
|
+
# Defines the getter for the association. Nothing too special here: just
|
|
278
|
+
# return the instance variable for the association if it exists or build
|
|
189
279
|
# the thing.
|
|
190
280
|
#
|
|
191
|
-
# @example Set up the getter for the
|
|
281
|
+
# @example Set up the getter for the association.
|
|
192
282
|
# Person.define_getter!(association)
|
|
193
283
|
#
|
|
194
|
-
# @param [ Association ] association The association metadata for the
|
|
284
|
+
# @param [ Association ] association The association metadata for the association.
|
|
195
285
|
#
|
|
196
286
|
# @return [ Class ] The class being set up.
|
|
197
287
|
#
|
|
@@ -209,33 +299,33 @@ module Mongoid
|
|
|
209
299
|
end
|
|
210
300
|
end
|
|
211
301
|
|
|
212
|
-
# Defines the getter for the ids of documents in the
|
|
213
|
-
# be specify only for referenced many
|
|
302
|
+
# Defines the getter for the ids of documents in the association. Should
|
|
303
|
+
# be specify only for referenced many associations.
|
|
214
304
|
#
|
|
215
|
-
# @example Set up the ids getter for the
|
|
305
|
+
# @example Set up the ids getter for the association.
|
|
216
306
|
# Person.define_ids_getter!(association)
|
|
217
307
|
#
|
|
218
|
-
# @param [ Association ] association The association metadata for the
|
|
308
|
+
# @param [ Association ] association The association metadata for the association.
|
|
219
309
|
#
|
|
220
310
|
# @return [ Class ] The class being set up.
|
|
221
311
|
def self.define_ids_getter!(association)
|
|
222
312
|
ids_method = "#{association.name.to_s.singularize}_ids"
|
|
223
313
|
association.inverse_class.tap do |klass|
|
|
224
314
|
klass.re_define_method(ids_method) do
|
|
225
|
-
send(association.name).only(:
|
|
315
|
+
send(association.name).only(:_id).map(&:_id)
|
|
226
316
|
end
|
|
227
317
|
end
|
|
228
318
|
end
|
|
229
319
|
|
|
230
|
-
# Defines the setter for the
|
|
320
|
+
# Defines the setter for the association. This does a few things based on
|
|
231
321
|
# some conditions. If there is an existing association, a target
|
|
232
|
-
# substitution will take place, otherwise a new
|
|
322
|
+
# substitution will take place, otherwise a new association will be
|
|
233
323
|
# created with the supplied target.
|
|
234
324
|
#
|
|
235
|
-
# @example Set up the setter for the
|
|
325
|
+
# @example Set up the setter for the association.
|
|
236
326
|
# Person.define_setter!(association)
|
|
237
327
|
#
|
|
238
|
-
# @param [ Association ] association The association metadata for the
|
|
328
|
+
# @param [ Association ] association The association metadata for the association.
|
|
239
329
|
#
|
|
240
330
|
# @return [ Class ] The class being set up.
|
|
241
331
|
#
|
|
@@ -261,15 +351,15 @@ module Mongoid
|
|
|
261
351
|
end
|
|
262
352
|
|
|
263
353
|
# Defines the setter method that allows you to set documents
|
|
264
|
-
# in this
|
|
265
|
-
# documents with given ids and invokes regular
|
|
354
|
+
# in this association by their ids. The defined setter, finds
|
|
355
|
+
# documents with given ids and invokes regular association setter
|
|
266
356
|
# with found documents. Ids setters should be defined only for
|
|
267
|
-
# referenced many
|
|
357
|
+
# referenced many associations.
|
|
268
358
|
#
|
|
269
|
-
# @example Set up the id_setter for the
|
|
359
|
+
# @example Set up the id_setter for the association.
|
|
270
360
|
# Person.define_ids_setter!(association)
|
|
271
361
|
#
|
|
272
|
-
# @param [ Association ] association The association for the
|
|
362
|
+
# @param [ Association ] association The association for the association.
|
|
273
363
|
#
|
|
274
364
|
# @return [ Class ] The class being set up.
|
|
275
365
|
def self.define_ids_setter!(association)
|
|
@@ -281,13 +371,13 @@ module Mongoid
|
|
|
281
371
|
end
|
|
282
372
|
end
|
|
283
373
|
|
|
284
|
-
# Defines a builder method for an embeds_one
|
|
374
|
+
# Defines a builder method for an embeds_one association. This is
|
|
285
375
|
# defined as #build_name.
|
|
286
376
|
#
|
|
287
377
|
# @example
|
|
288
378
|
# Person.define_builder!(association)
|
|
289
379
|
#
|
|
290
|
-
# @param [ Association ] association The association for the
|
|
380
|
+
# @param [ Association ] association The association for the association.
|
|
291
381
|
#
|
|
292
382
|
# @return [ Class ] The class being set up.
|
|
293
383
|
#
|
|
@@ -307,14 +397,14 @@ module Mongoid
|
|
|
307
397
|
end
|
|
308
398
|
end
|
|
309
399
|
|
|
310
|
-
# Defines a creator method for an embeds_one
|
|
400
|
+
# Defines a creator method for an embeds_one association. This is
|
|
311
401
|
# defined as #create_name. After the object is built it will
|
|
312
402
|
# immediately save.
|
|
313
403
|
#
|
|
314
404
|
# @example
|
|
315
405
|
# Person.define_creator!(association)
|
|
316
406
|
#
|
|
317
|
-
# @param [ Association ] association The association for the
|
|
407
|
+
# @param [ Association ] association The association for the association.
|
|
318
408
|
#
|
|
319
409
|
# @return [ Class ] The class being set up.
|
|
320
410
|
#
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
|
|
5
|
-
# Superclass for all objects that bind
|
|
7
|
+
# Superclass for all objects that bind associations together.
|
|
6
8
|
module Bindable
|
|
7
9
|
include Threaded::Lifecycle
|
|
8
10
|
|
|
@@ -84,7 +86,7 @@ module Mongoid
|
|
|
84
86
|
end
|
|
85
87
|
|
|
86
88
|
# Set the type of the related document on the foreign type field, used
|
|
87
|
-
# when
|
|
89
|
+
# when associations are polymorphic.
|
|
88
90
|
#
|
|
89
91
|
# @api private
|
|
90
92
|
#
|
|
@@ -102,7 +104,7 @@ module Mongoid
|
|
|
102
104
|
end
|
|
103
105
|
|
|
104
106
|
# Set the type of the related document on the foreign type field, used
|
|
105
|
-
# when
|
|
107
|
+
# when associations are polymorphic.
|
|
106
108
|
#
|
|
107
109
|
# @api private
|
|
108
110
|
#
|
|
@@ -137,7 +139,7 @@ module Mongoid
|
|
|
137
139
|
end
|
|
138
140
|
end
|
|
139
141
|
|
|
140
|
-
# Bind the provided document with the base from the parent
|
|
142
|
+
# Bind the provided document with the base from the parent association.
|
|
141
143
|
#
|
|
142
144
|
# @api private
|
|
143
145
|
#
|
|
@@ -177,7 +179,7 @@ module Mongoid
|
|
|
177
179
|
end
|
|
178
180
|
end
|
|
179
181
|
|
|
180
|
-
# Bind the provided document with the base from the parent
|
|
182
|
+
# Bind the provided document with the base from the parent association.
|
|
181
183
|
#
|
|
182
184
|
# @api private
|
|
183
185
|
#
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
2
3
|
|
|
3
4
|
module Mongoid
|
|
4
5
|
module Association
|
|
5
6
|
|
|
6
7
|
# This module is responsible for defining the build and create methods used
|
|
7
|
-
# in one to one
|
|
8
|
+
# in one to one associations.
|
|
8
9
|
#
|
|
9
10
|
# @example Methods that get created.
|
|
10
11
|
#
|
|
@@ -43,7 +44,7 @@ module Mongoid
|
|
|
43
44
|
# @example
|
|
44
45
|
# Person.define_builder!(association)
|
|
45
46
|
#
|
|
46
|
-
# @param [ Association ] association The association metadata for the
|
|
47
|
+
# @param [ Association ] association The association metadata for the association.
|
|
47
48
|
#
|
|
48
49
|
# @return [ Class ] The class being set up.
|
|
49
50
|
#
|
|
@@ -68,7 +69,7 @@ module Mongoid
|
|
|
68
69
|
# @example
|
|
69
70
|
# Person.define_creator!(association)
|
|
70
71
|
#
|
|
71
|
-
# @param [ Association ] association The association metadata for the
|
|
72
|
+
# @param [ Association ] association The association metadata for the association.
|
|
72
73
|
#
|
|
73
74
|
# @return [ Class ] The class being set up.
|
|
74
75
|
#
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
|
|
@@ -8,7 +10,7 @@ module Mongoid
|
|
|
8
10
|
module Constrainable
|
|
9
11
|
|
|
10
12
|
# Convert the supplied object to the appropriate type to set as the
|
|
11
|
-
# foreign key for
|
|
13
|
+
# foreign key for an association.
|
|
12
14
|
#
|
|
13
15
|
# @example Convert the object.
|
|
14
16
|
# constraint.convert("12345")
|
|
@@ -31,10 +33,10 @@ module Mongoid
|
|
|
31
33
|
end
|
|
32
34
|
|
|
33
35
|
private
|
|
34
|
-
|
|
36
|
+
|
|
35
37
|
def convert_polymorphic(object)
|
|
36
38
|
if object.is_a?(Mongoid::Document)
|
|
37
|
-
object.
|
|
39
|
+
object._id
|
|
38
40
|
else
|
|
39
41
|
BSON::ObjectId.mongoize(object)
|
|
40
42
|
end
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
1
4
|
module Mongoid
|
|
2
5
|
module Association
|
|
3
6
|
|
|
4
|
-
# This module defines the
|
|
5
|
-
# nullifies for
|
|
7
|
+
# This module defines the behavior for setting up cascading deletes and
|
|
8
|
+
# nullifies for associations, and how to delegate to the appropriate strategy.
|
|
6
9
|
module Depending
|
|
7
10
|
extend ActiveSupport::Concern
|
|
8
11
|
|
|
@@ -38,11 +41,6 @@ module Mongoid
|
|
|
38
41
|
:restrict_with_error
|
|
39
42
|
]
|
|
40
43
|
|
|
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
44
|
# Attempt to add the cascading information for the document to know how
|
|
47
45
|
# to handle associated documents on a removal.
|
|
48
46
|
#
|
|
@@ -80,13 +78,13 @@ module Mongoid
|
|
|
80
78
|
# the appropriate strategy to perform the operation.
|
|
81
79
|
#
|
|
82
80
|
# @example Execute cascades.
|
|
83
|
-
# document.
|
|
81
|
+
# document.apply_destroy_dependencies!
|
|
84
82
|
#
|
|
85
83
|
# @since 2.0.0.rc.1
|
|
86
|
-
def
|
|
84
|
+
def apply_destroy_dependencies!
|
|
87
85
|
self.class._all_dependents.each do |association|
|
|
88
|
-
if association.try(:dependent)
|
|
89
|
-
send("_dependent_#{
|
|
86
|
+
if dependent = association.try(:dependent)
|
|
87
|
+
send("_dependent_#{dependent}!", association)
|
|
90
88
|
end
|
|
91
89
|
end
|
|
92
90
|
end
|
|
@@ -128,7 +126,7 @@ module Mongoid
|
|
|
128
126
|
|
|
129
127
|
def _dependent_restrict_with_error!(association)
|
|
130
128
|
if (relation = send(association.name)) && !relation.blank?
|
|
131
|
-
errors.add(association.name,
|
|
129
|
+
errors.add(association.name, :destroy_restrict_with_error_dependencies_exist)
|
|
132
130
|
throw(:abort, false)
|
|
133
131
|
end
|
|
134
132
|
end
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
module Embedded
|
|
5
7
|
|
|
6
|
-
# Contains
|
|
8
|
+
# Contains behavior for executing operations in batch on embedded
|
|
7
9
|
# documents.
|
|
8
10
|
module Batchable
|
|
9
11
|
include Positional
|
|
@@ -24,7 +26,7 @@ module Mongoid
|
|
|
24
26
|
execute_batch_push(docs)
|
|
25
27
|
end
|
|
26
28
|
|
|
27
|
-
# Clear all of the docs out of the
|
|
29
|
+
# Clear all of the docs out of the association in a single swipe.
|
|
28
30
|
#
|
|
29
31
|
# @example Clear all docs.
|
|
30
32
|
# batchable.batch_clear(docs)
|
|
@@ -327,7 +329,7 @@ module Mongoid
|
|
|
327
329
|
self.path = doc.atomic_path unless path
|
|
328
330
|
execute_callback :before_remove, doc
|
|
329
331
|
unless _assigning?
|
|
330
|
-
doc.
|
|
332
|
+
doc.apply_destroy_dependencies!
|
|
331
333
|
doc.run_before_callbacks(:destroy) if method == :destroy
|
|
332
334
|
end
|
|
333
335
|
_target.delete_one(doc)
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
module Embedded
|
|
5
7
|
|
|
6
8
|
# This module provides convenience macros for using cyclic embedded
|
|
7
|
-
#
|
|
9
|
+
# associations.
|
|
8
10
|
module Cyclic
|
|
9
11
|
extend ActiveSupport::Concern
|
|
10
12
|
|
|
@@ -14,7 +16,7 @@ module Mongoid
|
|
|
14
16
|
|
|
15
17
|
module ClassMethods
|
|
16
18
|
|
|
17
|
-
# Create a cyclic embedded
|
|
19
|
+
# Create a cyclic embedded association that creates a tree hierarchy for
|
|
18
20
|
# the document and many embedded child documents.
|
|
19
21
|
#
|
|
20
22
|
# @example Set up a recursive embeds many.
|
|
@@ -44,7 +46,7 @@ module Mongoid
|
|
|
44
46
|
embedded_in cyclic_parent_name, class_name: self.name, cyclic: true
|
|
45
47
|
end
|
|
46
48
|
|
|
47
|
-
# Create a cyclic embedded
|
|
49
|
+
# Create a cyclic embedded association that creates a single self
|
|
48
50
|
# referencing relationship for a parent and a single child.
|
|
49
51
|
#
|
|
50
52
|
# @example Set up a recursive embeds one.
|
|
@@ -85,7 +87,7 @@ module Mongoid
|
|
|
85
87
|
#
|
|
86
88
|
# @since 2.0.0.rc.1
|
|
87
89
|
def cyclic_parent_name
|
|
88
|
-
("parent_
|
|
90
|
+
("parent_#{self.name.demodulize.underscore.singularize}").to_sym
|
|
89
91
|
end
|
|
90
92
|
|
|
91
93
|
# Determines the child name given the class.
|
|
@@ -93,14 +95,14 @@ module Mongoid
|
|
|
93
95
|
# @example Determine the child name.
|
|
94
96
|
# Role.cyclic_child_name
|
|
95
97
|
#
|
|
96
|
-
# @param [ true, false ] many Is the a many
|
|
98
|
+
# @param [ true, false ] many Is the a many association?
|
|
97
99
|
#
|
|
98
100
|
# @return [ String ] "child_" plus the class name underscored in
|
|
99
101
|
# singular or plural form.
|
|
100
102
|
#
|
|
101
103
|
# @since 2.0.0.rc.1
|
|
102
104
|
def cyclic_child_name(many = true)
|
|
103
|
-
("child_
|
|
105
|
+
("child_#{self.name.demodulize.underscore.send(many ? :pluralize : :singularize)}").to_sym
|
|
104
106
|
end
|
|
105
107
|
end
|
|
106
108
|
end
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
1
4
|
module Mongoid
|
|
2
5
|
module Association
|
|
3
6
|
module Embedded
|
|
@@ -9,7 +12,7 @@ module Mongoid
|
|
|
9
12
|
class Binding
|
|
10
13
|
include Bindable
|
|
11
14
|
|
|
12
|
-
# Binds the base object to the inverse of the
|
|
15
|
+
# Binds the base object to the inverse of the association. This is so we
|
|
13
16
|
# are referenced to the actual objects themselves on both sides.
|
|
14
17
|
#
|
|
15
18
|
# This case sets the association metadata on the inverse object as well as the
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
1
4
|
module Mongoid
|
|
2
5
|
module Association
|
|
3
6
|
module Embedded
|
|
@@ -18,12 +21,15 @@ module Mongoid
|
|
|
18
21
|
# @param [ Object ] base The object.
|
|
19
22
|
# @param [ Object ] object The parent hash or document.
|
|
20
23
|
# @param [ String ] type Not used in this context.
|
|
24
|
+
# @param [ Hash ] selected_fields Fields which were retrieved via
|
|
25
|
+
# #only. If selected_fields are specified, fields not listed in it
|
|
26
|
+
# will not be accessible in the built document.
|
|
21
27
|
#
|
|
22
28
|
# @return [ Document ] A single document.
|
|
23
|
-
def build(base, object, type = nil)
|
|
29
|
+
def build(base, object, type = nil, selected_fields = nil)
|
|
24
30
|
return object unless object.is_a?(Hash)
|
|
25
31
|
if _loading?
|
|
26
|
-
Factory.from_db(klass, object)
|
|
32
|
+
Factory.from_db(klass, object, nil, selected_fields)
|
|
27
33
|
else
|
|
28
34
|
Factory.build(klass, object)
|
|
29
35
|
end
|