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,17 +1,19 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Mongoid
|
|
3
4
|
module Association
|
|
4
5
|
module Referenced
|
|
5
6
|
class HasMany
|
|
6
7
|
|
|
7
|
-
# This class defines the
|
|
8
|
+
# This class defines the behavior for all associations that are a
|
|
8
9
|
# one-to-many between documents in different collections.
|
|
9
10
|
class Proxy < Association::Many
|
|
11
|
+
extend Forwardable
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
def_delegator :criteria, :count
|
|
14
|
+
def_delegators :_target, :first, :in_memory, :last, :reset, :uniq
|
|
13
15
|
|
|
14
|
-
# Appends a document or array of documents to the
|
|
16
|
+
# Appends a document or array of documents to the association. Will set
|
|
15
17
|
# the parent and update the index in the process.
|
|
16
18
|
#
|
|
17
19
|
# @example Append a document.
|
|
@@ -26,8 +28,6 @@ module Mongoid
|
|
|
26
28
|
# @param [ Document, Array<Document> ] args Any number of documents.
|
|
27
29
|
#
|
|
28
30
|
# @return [ Array<Document> ] The loaded docs.
|
|
29
|
-
#
|
|
30
|
-
# @since 2.0.0.beta.1
|
|
31
31
|
def <<(*args)
|
|
32
32
|
docs = args.flatten
|
|
33
33
|
return concat(docs) if docs.size > 1
|
|
@@ -40,7 +40,7 @@ module Mongoid
|
|
|
40
40
|
|
|
41
41
|
alias :push :<<
|
|
42
42
|
|
|
43
|
-
# Appends an array of documents to the
|
|
43
|
+
# Appends an array of documents to the association. Performs a batch
|
|
44
44
|
# insert of the documents instead of persisting one at a time.
|
|
45
45
|
#
|
|
46
46
|
# @example Concat with other documents.
|
|
@@ -49,8 +49,6 @@ module Mongoid
|
|
|
49
49
|
# @param [ Array<Document> ] documents The docs to add.
|
|
50
50
|
#
|
|
51
51
|
# @return [ Array<Document> ] The documents.
|
|
52
|
-
#
|
|
53
|
-
# @since 2.4.0
|
|
54
52
|
def concat(documents)
|
|
55
53
|
docs, inserts = [], []
|
|
56
54
|
documents.each do |doc|
|
|
@@ -63,17 +61,15 @@ module Mongoid
|
|
|
63
61
|
end
|
|
64
62
|
|
|
65
63
|
# Build a new document from the attributes and append it to this
|
|
66
|
-
#
|
|
64
|
+
# association without saving.
|
|
67
65
|
#
|
|
68
|
-
# @example Build a new document on the
|
|
66
|
+
# @example Build a new document on the association.
|
|
69
67
|
# person.posts.build(:title => "A new post")
|
|
70
68
|
#
|
|
71
69
|
# @param [ Hash ] attributes The attributes of the new document.
|
|
72
70
|
# @param [ Class ] type The optional subclass to build.
|
|
73
71
|
#
|
|
74
72
|
# @return [ Document ] The new document.
|
|
75
|
-
#
|
|
76
|
-
# @since 2.0.0.beta.1
|
|
77
73
|
def build(attributes = {}, type = nil)
|
|
78
74
|
doc = Factory.build(type || klass, attributes)
|
|
79
75
|
append(doc)
|
|
@@ -85,9 +81,9 @@ module Mongoid
|
|
|
85
81
|
|
|
86
82
|
alias :new :build
|
|
87
83
|
|
|
88
|
-
# Delete the document from the
|
|
89
|
-
# on the document to nil. If the dependent options on the
|
|
90
|
-
# :
|
|
84
|
+
# Delete the document from the association. This will set the foreign key
|
|
85
|
+
# on the document to nil. If the dependent options on the association are
|
|
86
|
+
# :delete_all or :destroy the appropriate removal will occur.
|
|
91
87
|
#
|
|
92
88
|
# @example Delete the document.
|
|
93
89
|
# person.posts.delete(post)
|
|
@@ -95,8 +91,6 @@ module Mongoid
|
|
|
95
91
|
# @param [ Document ] document The document to remove.
|
|
96
92
|
#
|
|
97
93
|
# @return [ Document ] The matching document.
|
|
98
|
-
#
|
|
99
|
-
# @since 2.1.0
|
|
100
94
|
def delete(document)
|
|
101
95
|
execute_callback :before_remove, document
|
|
102
96
|
_target.delete(document) do |doc|
|
|
@@ -111,17 +105,15 @@ module Mongoid
|
|
|
111
105
|
# Deletes all related documents from the database given the supplied
|
|
112
106
|
# conditions.
|
|
113
107
|
#
|
|
114
|
-
# @example Delete all documents in the
|
|
108
|
+
# @example Delete all documents in the association.
|
|
115
109
|
# person.posts.delete_all
|
|
116
110
|
#
|
|
117
|
-
# @example Conditonally delete all documents in the
|
|
111
|
+
# @example Conditonally delete all documents in the association.
|
|
118
112
|
# person.posts.delete_all({ :title => "Testing" })
|
|
119
113
|
#
|
|
120
114
|
# @param [ Hash ] conditions Optional conditions to delete with.
|
|
121
115
|
#
|
|
122
116
|
# @return [ Integer ] The number of documents deleted.
|
|
123
|
-
#
|
|
124
|
-
# @since 2.0.0.beta.1
|
|
125
117
|
def delete_all(conditions = nil)
|
|
126
118
|
remove_all(conditions, :delete_all)
|
|
127
119
|
end
|
|
@@ -129,25 +121,23 @@ module Mongoid
|
|
|
129
121
|
# Destroys all related documents from the database given the supplied
|
|
130
122
|
# conditions.
|
|
131
123
|
#
|
|
132
|
-
# @example Destroy all documents in the
|
|
124
|
+
# @example Destroy all documents in the association.
|
|
133
125
|
# person.posts.destroy_all
|
|
134
126
|
#
|
|
135
|
-
# @example
|
|
127
|
+
# @example Conditionally destroy all documents in the association.
|
|
136
128
|
# person.posts.destroy_all({ :title => "Testing" })
|
|
137
129
|
#
|
|
138
130
|
# @param [ Hash ] conditions Optional conditions to destroy with.
|
|
139
131
|
#
|
|
140
|
-
# @return [ Integer ] The number of documents
|
|
141
|
-
#
|
|
142
|
-
# @since 2.0.0.beta.1
|
|
132
|
+
# @return [ Integer ] The number of documents destroyed.
|
|
143
133
|
def destroy_all(conditions = nil)
|
|
144
134
|
remove_all(conditions, :destroy_all)
|
|
145
135
|
end
|
|
146
136
|
|
|
147
|
-
# Iterate over each document in the
|
|
137
|
+
# Iterate over each document in the association and yield to the provided
|
|
148
138
|
# block.
|
|
149
139
|
#
|
|
150
|
-
# @note This will load the entire
|
|
140
|
+
# @note This will load the entire association into memory.
|
|
151
141
|
#
|
|
152
142
|
# @example Iterate over the documents.
|
|
153
143
|
# person.posts.each do |post|
|
|
@@ -155,8 +145,6 @@ module Mongoid
|
|
|
155
145
|
# end
|
|
156
146
|
#
|
|
157
147
|
# @return [ Array<Document> ] The loaded docs.
|
|
158
|
-
#
|
|
159
|
-
# @since 2.1.0
|
|
160
148
|
def each
|
|
161
149
|
if block_given?
|
|
162
150
|
_target.each { |doc| yield(doc) }
|
|
@@ -165,7 +153,14 @@ module Mongoid
|
|
|
165
153
|
end
|
|
166
154
|
end
|
|
167
155
|
|
|
168
|
-
# Determine if any documents in this
|
|
156
|
+
# Determine if any documents in this association exist in the database.
|
|
157
|
+
#
|
|
158
|
+
# If the association contains documents but all of the documents
|
|
159
|
+
# exist only in the application, i.e. have not been persisted to the
|
|
160
|
+
# database, this method returns false.
|
|
161
|
+
#
|
|
162
|
+
# This method queries the database on each invocation even if the
|
|
163
|
+
# association is already loaded into memory.
|
|
169
164
|
#
|
|
170
165
|
# @example Are there persisted documents?
|
|
171
166
|
# person.posts.exists?
|
|
@@ -175,42 +170,50 @@ module Mongoid
|
|
|
175
170
|
criteria.exists?
|
|
176
171
|
end
|
|
177
172
|
|
|
178
|
-
# Find the
|
|
173
|
+
# Find the matching document on the association, either based on id or
|
|
179
174
|
# conditions.
|
|
180
175
|
#
|
|
176
|
+
# This method delegates to +Mongoid::Criteria#find+. If this method is
|
|
177
|
+
# not given a block, it returns one or many documents for the provided
|
|
178
|
+
# _id values.
|
|
179
|
+
#
|
|
180
|
+
# If this method is given a block, it returns the first document
|
|
181
|
+
# of those found by the current Criteria object for which the block
|
|
182
|
+
# returns a truthy value.
|
|
183
|
+
#
|
|
181
184
|
# @example Find by an id.
|
|
182
185
|
# person.posts.find(BSON::ObjectId.new)
|
|
183
186
|
#
|
|
184
187
|
# @example Find by multiple ids.
|
|
185
188
|
# person.posts.find([ BSON::ObjectId.new, BSON::ObjectId.new ])
|
|
186
189
|
#
|
|
190
|
+
# @example Finds the first matching document using a block.
|
|
191
|
+
# person.addresses.find { |addr| addr.state == 'CA' }
|
|
192
|
+
#
|
|
187
193
|
# @note This will keep matching documents in memory for iteration
|
|
188
194
|
# later.
|
|
189
195
|
#
|
|
190
196
|
# @param [ BSON::ObjectId, Array<BSON::ObjectId> ] args The ids.
|
|
197
|
+
# @param [ Proc ] block Optional block to pass.
|
|
191
198
|
#
|
|
192
|
-
# @return [ Document
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
def find(*args)
|
|
196
|
-
matching = criteria.find(*args)
|
|
199
|
+
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
|
200
|
+
def find(*args, &block)
|
|
201
|
+
matching = criteria.find(*args, &block)
|
|
197
202
|
Array(matching).each { |doc| _target.push(doc) }
|
|
198
203
|
matching
|
|
199
204
|
end
|
|
200
205
|
|
|
201
|
-
# Instantiate a new references_many
|
|
206
|
+
# Instantiate a new references_many association. Will set the foreign key
|
|
202
207
|
# and the base on the inverse object.
|
|
203
208
|
#
|
|
204
|
-
# @example Create the new
|
|
209
|
+
# @example Create the new association.
|
|
205
210
|
# Referenced::Many.new(base, target, association)
|
|
206
211
|
#
|
|
207
|
-
# @param [ Document ] base The document this
|
|
208
|
-
# @param [ Array<Document> ] target The target of the
|
|
212
|
+
# @param [ Document ] base The document this association hangs off of.
|
|
213
|
+
# @param [ Array<Document> ] target The target of the association.
|
|
209
214
|
# @param [ Association ] association The association metadata.
|
|
210
|
-
#
|
|
211
|
-
# @since 2.0.0.beta.1
|
|
212
215
|
def initialize(base, target, association)
|
|
213
|
-
enum = HasMany::
|
|
216
|
+
enum = HasMany::Enumerable.new(target, base, association)
|
|
214
217
|
init(base, enum, association) do
|
|
215
218
|
raise_mixed if klass.embedded? && !klass.cyclic?
|
|
216
219
|
end
|
|
@@ -220,10 +223,8 @@ module Mongoid
|
|
|
220
223
|
# documents by deleting the foreign keys and the references, orphaning
|
|
221
224
|
# the target documents in the process.
|
|
222
225
|
#
|
|
223
|
-
# @example Nullify the
|
|
226
|
+
# @example Nullify the association.
|
|
224
227
|
# person.posts.nullify
|
|
225
|
-
#
|
|
226
|
-
# @since 2.0.0.rc.1
|
|
227
228
|
def nullify
|
|
228
229
|
criteria.update_all(foreign_key => nil)
|
|
229
230
|
_target.clear do |doc|
|
|
@@ -234,15 +235,13 @@ module Mongoid
|
|
|
234
235
|
|
|
235
236
|
alias :nullify_all :nullify
|
|
236
237
|
|
|
237
|
-
# Clear the
|
|
238
|
+
# Clear the association. Will delete the documents from the db if they are
|
|
238
239
|
# already persisted.
|
|
239
240
|
#
|
|
240
|
-
# @example Clear the
|
|
241
|
+
# @example Clear the association.
|
|
241
242
|
# person.posts.clear
|
|
242
243
|
#
|
|
243
|
-
# @return [ Many ] The
|
|
244
|
-
#
|
|
245
|
-
# @since 2.0.0.beta.1
|
|
244
|
+
# @return [ Many ] The association emptied.
|
|
246
245
|
def purge
|
|
247
246
|
unless _association.destructive?
|
|
248
247
|
nullify
|
|
@@ -267,17 +266,15 @@ module Mongoid
|
|
|
267
266
|
alias :clear :purge
|
|
268
267
|
|
|
269
268
|
# Substitutes the supplied target documents for the existing documents
|
|
270
|
-
# in the
|
|
269
|
+
# in the association. If the new target is nil, perform the necessary
|
|
271
270
|
# deletion.
|
|
272
271
|
#
|
|
273
|
-
# @example Replace the
|
|
272
|
+
# @example Replace the association.
|
|
274
273
|
# person.posts.substitute([ new_post ])
|
|
275
274
|
#
|
|
276
275
|
# @param [ Array<Document> ] replacement The replacement target.
|
|
277
276
|
#
|
|
278
|
-
# @return [ Many ] The
|
|
279
|
-
#
|
|
280
|
-
# @since 2.0.0.rc.1
|
|
277
|
+
# @return [ Many ] The association.
|
|
281
278
|
def substitute(replacement)
|
|
282
279
|
if replacement
|
|
283
280
|
new_docs, docs = replacement.compact, []
|
|
@@ -300,8 +297,6 @@ module Mongoid
|
|
|
300
297
|
# person.posts.unscoped
|
|
301
298
|
#
|
|
302
299
|
# @return [ Criteria ] The unscoped criteria.
|
|
303
|
-
#
|
|
304
|
-
# @since 2.4.0
|
|
305
300
|
def unscoped
|
|
306
301
|
klass.unscoped.where(foreign_key => _base.send(_association.primary_key))
|
|
307
302
|
end
|
|
@@ -311,12 +306,10 @@ module Mongoid
|
|
|
311
306
|
# Appends the document to the target array, updating the index on the
|
|
312
307
|
# document at the same time.
|
|
313
308
|
#
|
|
314
|
-
# @example Append the document to the
|
|
309
|
+
# @example Append the document to the association.
|
|
315
310
|
# relation.append(document)
|
|
316
311
|
#
|
|
317
312
|
# @param [ Document ] document The document to append to the target.
|
|
318
|
-
#
|
|
319
|
-
# @since 2.0.0.rc.1
|
|
320
313
|
def append(document)
|
|
321
314
|
with_add_callbacks(document, already_related?(document)) do
|
|
322
315
|
_target.push(document)
|
|
@@ -326,7 +319,7 @@ module Mongoid
|
|
|
326
319
|
end
|
|
327
320
|
|
|
328
321
|
# Execute before/after add callbacks around the block unless the objects
|
|
329
|
-
# already have a persisted
|
|
322
|
+
# already have a persisted association.
|
|
330
323
|
#
|
|
331
324
|
# @example Execute before/after add callbacks around the block.
|
|
332
325
|
# relation.with_add_callbacks(document, false)
|
|
@@ -334,15 +327,13 @@ module Mongoid
|
|
|
334
327
|
# @param [ Document ] document The document to append to the target.
|
|
335
328
|
# @param [ true, false ] already_related Whether the document is already related
|
|
336
329
|
# to the target.
|
|
337
|
-
#
|
|
338
|
-
# @since 5.1.0
|
|
339
330
|
def with_add_callbacks(document, already_related)
|
|
340
331
|
execute_callback :before_add, document unless already_related
|
|
341
332
|
yield
|
|
342
333
|
execute_callback :after_add, document unless already_related
|
|
343
334
|
end
|
|
344
335
|
|
|
345
|
-
# Whether the document and the base already have a persisted
|
|
336
|
+
# Whether the document and the base already have a persisted association.
|
|
346
337
|
#
|
|
347
338
|
# @example Is the document already related to the base.
|
|
348
339
|
# relation.already_related?(document)
|
|
@@ -350,36 +341,30 @@ module Mongoid
|
|
|
350
341
|
# @param [ Document ] document The document to possibly append to the target.
|
|
351
342
|
#
|
|
352
343
|
# @return [ true, false ] Whether the document is already related to the base and the
|
|
353
|
-
#
|
|
354
|
-
#
|
|
355
|
-
# @since 5.1.0
|
|
344
|
+
# association is persisted.
|
|
356
345
|
def already_related?(document)
|
|
357
346
|
document.persisted? &&
|
|
358
347
|
document._association &&
|
|
359
348
|
document.respond_to?(document._association.foreign_key) &&
|
|
360
|
-
document.__send__(document._association.foreign_key) == _base.
|
|
349
|
+
document.__send__(document._association.foreign_key) == _base._id
|
|
361
350
|
end
|
|
362
351
|
|
|
363
|
-
# Instantiate the binding associated with this
|
|
352
|
+
# Instantiate the binding associated with this association.
|
|
364
353
|
#
|
|
365
354
|
# @example Get the binding.
|
|
366
355
|
# relation.binding([ address ])
|
|
367
356
|
#
|
|
368
357
|
# @return [ Binding ] The binding.
|
|
369
|
-
#
|
|
370
|
-
# @since 2.0.0.rc.1
|
|
371
358
|
def binding
|
|
372
359
|
HasMany::Binding.new(_base, _target, _association)
|
|
373
360
|
end
|
|
374
361
|
|
|
375
|
-
# Get the collection of the
|
|
362
|
+
# Get the collection of the association in question.
|
|
376
363
|
#
|
|
377
|
-
# @example Get the collection of the
|
|
364
|
+
# @example Get the collection of the association.
|
|
378
365
|
# relation.collection
|
|
379
366
|
#
|
|
380
|
-
# @return [ Collection ] The collection of the
|
|
381
|
-
#
|
|
382
|
-
# @since 2.0.2
|
|
367
|
+
# @return [ Collection ] The collection of the association.
|
|
383
368
|
def collection
|
|
384
369
|
klass.collection
|
|
385
370
|
end
|
|
@@ -387,12 +372,10 @@ module Mongoid
|
|
|
387
372
|
# Returns the criteria object for the target class with its documents set
|
|
388
373
|
# to target.
|
|
389
374
|
#
|
|
390
|
-
# @example Get a criteria for the
|
|
375
|
+
# @example Get a criteria for the association.
|
|
391
376
|
# relation.criteria
|
|
392
377
|
#
|
|
393
378
|
# @return [ Criteria ] A new criteria.
|
|
394
|
-
#
|
|
395
|
-
# @since 2.0.0.beta.1
|
|
396
379
|
def criteria
|
|
397
380
|
@criteria ||= _association.criteria(_base)
|
|
398
381
|
end
|
|
@@ -406,8 +389,6 @@ module Mongoid
|
|
|
406
389
|
# @param [ Document ] document The document to cascade on.
|
|
407
390
|
#
|
|
408
391
|
# @return [ true, false ] If the association is destructive.
|
|
409
|
-
#
|
|
410
|
-
# @since 2.1.0
|
|
411
392
|
def cascade!(document)
|
|
412
393
|
if persistable?
|
|
413
394
|
case _association.dependent
|
|
@@ -431,9 +412,7 @@ module Mongoid
|
|
|
431
412
|
# @param [ Proc ] block Optional block to pass.
|
|
432
413
|
#
|
|
433
414
|
# @return [ Criteria, Object ] A Criteria or return value from the target.
|
|
434
|
-
|
|
435
|
-
# @since 2.0.0.beta.1
|
|
436
|
-
def method_missing(name, *args, &block)
|
|
415
|
+
ruby2_keywords def method_missing(name, *args, &block)
|
|
437
416
|
if _target.respond_to?(name)
|
|
438
417
|
_target.send(name, *args, &block)
|
|
439
418
|
else
|
|
@@ -452,8 +431,6 @@ module Mongoid
|
|
|
452
431
|
#
|
|
453
432
|
# @param [ Array<Document> ] docs The delayed inserts.
|
|
454
433
|
# @param [ Array<Hash> ] inserts The raw insert document.
|
|
455
|
-
#
|
|
456
|
-
# @since 3.0.0
|
|
457
434
|
def persist_delayed(docs, inserts)
|
|
458
435
|
unless docs.empty?
|
|
459
436
|
collection.insert_many(inserts, session: _session)
|
|
@@ -465,14 +442,12 @@ module Mongoid
|
|
|
465
442
|
end
|
|
466
443
|
end
|
|
467
444
|
|
|
468
|
-
# Are we able to persist this
|
|
445
|
+
# Are we able to persist this association?
|
|
469
446
|
#
|
|
470
|
-
# @example Can we persist the
|
|
447
|
+
# @example Can we persist the association?
|
|
471
448
|
# relation.persistable?
|
|
472
449
|
#
|
|
473
|
-
# @return [ true, false ] If the
|
|
474
|
-
#
|
|
475
|
-
# @since 2.1.0
|
|
450
|
+
# @return [ true, false ] If the association is persistable.
|
|
476
451
|
def persistable?
|
|
477
452
|
!_binding? && (_creating? || _base.persisted? && !_building?)
|
|
478
453
|
end
|
|
@@ -480,18 +455,16 @@ module Mongoid
|
|
|
480
455
|
# Deletes all related documents from the database given the supplied
|
|
481
456
|
# conditions.
|
|
482
457
|
#
|
|
483
|
-
# @example Delete all documents in the
|
|
458
|
+
# @example Delete all documents in the association.
|
|
484
459
|
# person.posts.delete_all
|
|
485
460
|
#
|
|
486
|
-
# @example Conditonally delete all documents in the
|
|
461
|
+
# @example Conditonally delete all documents in the association.
|
|
487
462
|
# person.posts.delete_all({ :title => "Testing" })
|
|
488
463
|
#
|
|
489
464
|
# @param [ Hash ] conditions Optional conditions to delete with.
|
|
490
465
|
# @param [ Symbol ] method The deletion method to call.
|
|
491
466
|
#
|
|
492
467
|
# @return [ Integer ] The number of documents deleted.
|
|
493
|
-
#
|
|
494
|
-
# @since 2.1.0
|
|
495
468
|
def remove_all(conditions = nil, method = :delete_all)
|
|
496
469
|
selector = conditions || {}
|
|
497
470
|
removed = klass.send(method, selector.merge!(criteria.selector))
|
|
@@ -510,8 +483,6 @@ module Mongoid
|
|
|
510
483
|
# proxy.remove_not_in([ id ])
|
|
511
484
|
#
|
|
512
485
|
# @param [ Array<Object> ] ids The ids.
|
|
513
|
-
#
|
|
514
|
-
# @since 2.4.0
|
|
515
486
|
def remove_not_in(ids)
|
|
516
487
|
removed = criteria.not_in(_id: ids)
|
|
517
488
|
if _association.destructive?
|
|
@@ -540,8 +511,6 @@ module Mongoid
|
|
|
540
511
|
#
|
|
541
512
|
# @param [ Document ] doc The document.
|
|
542
513
|
# @param [ Array<Document> ] inserts The inserts.
|
|
543
|
-
#
|
|
544
|
-
# @since 3.0.0
|
|
545
514
|
def save_or_delay(doc, docs, inserts)
|
|
546
515
|
if doc.new_record? && doc.valid?(:create)
|
|
547
516
|
doc.run_before_callbacks(:save, :create)
|
|
@@ -558,15 +527,13 @@ module Mongoid
|
|
|
558
527
|
Eager.new(association, docs)
|
|
559
528
|
end
|
|
560
529
|
|
|
561
|
-
# Returns true if the
|
|
530
|
+
# Returns true if the association is an embedded one. In this case
|
|
562
531
|
# always false.
|
|
563
532
|
#
|
|
564
|
-
# @example Is this
|
|
533
|
+
# @example Is this association embedded?
|
|
565
534
|
# Referenced::Many.embedded?
|
|
566
535
|
#
|
|
567
536
|
# @return [ false ] Always false.
|
|
568
|
-
#
|
|
569
|
-
# @since 2.0.0.rc.1
|
|
570
537
|
def embedded?
|
|
571
538
|
false
|
|
572
539
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mongoid/association/referenced/has_many/binding'
|
|
2
4
|
require 'mongoid/association/referenced/has_many/buildable'
|
|
3
5
|
require 'mongoid/association/referenced/has_many/proxy'
|
|
@@ -9,8 +11,6 @@ module Mongoid
|
|
|
9
11
|
module Referenced
|
|
10
12
|
|
|
11
13
|
# The has_many association.
|
|
12
|
-
#
|
|
13
|
-
# @since 7.0
|
|
14
14
|
class HasMany
|
|
15
15
|
include Relatable
|
|
16
16
|
include Buildable
|
|
@@ -19,8 +19,6 @@ module Mongoid
|
|
|
19
19
|
# common ones.
|
|
20
20
|
#
|
|
21
21
|
# @return [ Array<Symbol> ] The extra valid options.
|
|
22
|
-
#
|
|
23
|
-
# @since 7.0
|
|
24
22
|
ASSOCIATION_OPTIONS = [
|
|
25
23
|
:after_add,
|
|
26
24
|
:after_remove,
|
|
@@ -31,29 +29,24 @@ module Mongoid
|
|
|
31
29
|
:dependent,
|
|
32
30
|
:foreign_key,
|
|
33
31
|
:order,
|
|
34
|
-
:primary_key
|
|
32
|
+
:primary_key,
|
|
33
|
+
:scope,
|
|
35
34
|
].freeze
|
|
36
35
|
|
|
37
36
|
# The complete list of valid options for this association, including
|
|
38
37
|
# the shared ones.
|
|
39
38
|
#
|
|
40
39
|
# @return [ Array<Symbol> ] The valid options.
|
|
41
|
-
#
|
|
42
|
-
# @since 7.0
|
|
43
40
|
VALID_OPTIONS = (ASSOCIATION_OPTIONS + SHARED_OPTIONS).freeze
|
|
44
41
|
|
|
45
42
|
# The default foreign key suffix.
|
|
46
43
|
#
|
|
47
44
|
# @return [ String ] '_id'
|
|
48
|
-
#
|
|
49
|
-
# @since 7.0
|
|
50
45
|
FOREIGN_KEY_SUFFIX = '_id'.freeze
|
|
51
46
|
|
|
52
47
|
# The list of association complements.
|
|
53
48
|
#
|
|
54
49
|
# @return [ Array<Association> ] The association complements.
|
|
55
|
-
#
|
|
56
|
-
# @since 7.0
|
|
57
50
|
def relation_complements
|
|
58
51
|
@relation_complements ||= [ Referenced::BelongsTo ].freeze
|
|
59
52
|
end
|
|
@@ -61,8 +54,6 @@ module Mongoid
|
|
|
61
54
|
# Setup the instance methods, fields, etc. on the association owning class.
|
|
62
55
|
#
|
|
63
56
|
# @return [ self ]
|
|
64
|
-
#
|
|
65
|
-
# @since 7.0
|
|
66
57
|
def setup!
|
|
67
58
|
setup_instance_methods!
|
|
68
59
|
self
|
|
@@ -71,8 +62,6 @@ module Mongoid
|
|
|
71
62
|
# Setup the instance methods on the class having this association type.
|
|
72
63
|
#
|
|
73
64
|
# @return [ self ]
|
|
74
|
-
#
|
|
75
|
-
# @since 7.0
|
|
76
65
|
def setup_instance_methods!
|
|
77
66
|
define_getter!
|
|
78
67
|
define_ids_getter!
|
|
@@ -91,8 +80,6 @@ module Mongoid
|
|
|
91
80
|
#
|
|
92
81
|
# @return [ String ] The foreign key field on the inverse for saving the
|
|
93
82
|
# association reference.
|
|
94
|
-
#
|
|
95
|
-
# @since 7.0
|
|
96
83
|
def foreign_key
|
|
97
84
|
@foreign_key ||= @options[:foreign_key] ? @options[:foreign_key].to_s :
|
|
98
85
|
default_foreign_key_field
|
|
@@ -101,49 +88,37 @@ module Mongoid
|
|
|
101
88
|
# Is this association type embedded?
|
|
102
89
|
#
|
|
103
90
|
# @return [ false ] Always false.
|
|
104
|
-
#
|
|
105
|
-
# @since 7.0
|
|
106
91
|
def embedded?; false; end
|
|
107
92
|
|
|
108
93
|
# The default for validation the association object.
|
|
109
94
|
#
|
|
110
95
|
# @return [ true ] Always true.
|
|
111
|
-
#
|
|
112
|
-
# @since 7.0
|
|
113
96
|
def validation_default; true; end
|
|
114
97
|
|
|
115
98
|
# Does this association type store the foreign key?
|
|
116
99
|
#
|
|
117
100
|
# @return [ true ] Always true.
|
|
118
|
-
#
|
|
119
|
-
# @since 7.0
|
|
120
101
|
def stores_foreign_key?; false; end
|
|
121
102
|
|
|
122
|
-
# Get the
|
|
103
|
+
# Get the association proxy class for this association type.
|
|
123
104
|
#
|
|
124
105
|
# @return [ Association::HasMany::Proxy ] The proxy class.
|
|
125
|
-
#
|
|
126
|
-
# @since 7.0
|
|
127
106
|
def relation
|
|
128
107
|
Proxy
|
|
129
108
|
end
|
|
130
109
|
|
|
131
|
-
# The criteria used for querying this
|
|
132
|
-
#
|
|
133
|
-
# @return [ Mongoid::Criteria ] The criteria used for querying this relation.
|
|
110
|
+
# The criteria used for querying this association.
|
|
134
111
|
#
|
|
135
|
-
# @
|
|
112
|
+
# @return [ Mongoid::Criteria ] The criteria used for querying this association.
|
|
136
113
|
def criteria(base)
|
|
137
114
|
query_criteria(base.send(primary_key), base)
|
|
138
115
|
end
|
|
139
116
|
|
|
140
117
|
# The type of this association if it's polymorphic.
|
|
141
118
|
#
|
|
142
|
-
# @note Only relevant for polymorphic
|
|
119
|
+
# @note Only relevant for polymorphic associations.
|
|
143
120
|
#
|
|
144
121
|
# @return [ String, nil ] The type field.
|
|
145
|
-
#
|
|
146
|
-
# @since 7.0
|
|
147
122
|
def type
|
|
148
123
|
@type ||= "#{as}_type" if polymorphic?
|
|
149
124
|
end
|
|
@@ -155,8 +130,6 @@ module Mongoid
|
|
|
155
130
|
# @param [ Class ] object_class The object class.
|
|
156
131
|
#
|
|
157
132
|
# @return [ Mongoid::Criteria ] The criteria object.
|
|
158
|
-
#
|
|
159
|
-
# @since 7.0
|
|
160
133
|
def add_polymorphic_criterion(criteria, object_class)
|
|
161
134
|
if polymorphic?
|
|
162
135
|
criteria.where(type => object_class.name)
|
|
@@ -168,8 +141,6 @@ module Mongoid
|
|
|
168
141
|
# Is this association polymorphic?
|
|
169
142
|
#
|
|
170
143
|
# @return [ true, false ] Whether this association is polymorphic.
|
|
171
|
-
#
|
|
172
|
-
# @since 7.0
|
|
173
144
|
def polymorphic?
|
|
174
145
|
@polymorphic ||= !!as
|
|
175
146
|
end
|
|
@@ -190,8 +161,6 @@ module Mongoid
|
|
|
190
161
|
# @param [ Hash ] options The options for the association.
|
|
191
162
|
#
|
|
192
163
|
# @return [ Association::Nested::Many ] The Nested Builder object.
|
|
193
|
-
#
|
|
194
|
-
# @since 7.0
|
|
195
164
|
def nested_builder(attributes, options)
|
|
196
165
|
Nested::Many.new(self, attributes, options)
|
|
197
166
|
end
|
|
@@ -204,12 +173,17 @@ module Mongoid
|
|
|
204
173
|
# @param [ Document ] document The document to calculate on.
|
|
205
174
|
#
|
|
206
175
|
# @return [ Root ] The root atomic path calculator.
|
|
207
|
-
#
|
|
208
|
-
# @since 2.1.0
|
|
209
176
|
def path(document)
|
|
210
177
|
Mongoid::Atomic::Paths::Root.new(document)
|
|
211
178
|
end
|
|
212
179
|
|
|
180
|
+
# Get the scope to be applied when querying the association.
|
|
181
|
+
#
|
|
182
|
+
# @return [ Proc | Symbol | nil ] The association scope, if any.
|
|
183
|
+
def scope
|
|
184
|
+
@options[:scope]
|
|
185
|
+
end
|
|
186
|
+
|
|
213
187
|
private
|
|
214
188
|
|
|
215
189
|
def default_foreign_key_field
|
|
@@ -238,7 +212,9 @@ module Mongoid
|
|
|
238
212
|
end
|
|
239
213
|
|
|
240
214
|
def query_criteria(object, base)
|
|
241
|
-
crit = klass.
|
|
215
|
+
crit = klass.criteria
|
|
216
|
+
crit = crit.apply_scope(scope)
|
|
217
|
+
crit = crit.where(foreign_key => object)
|
|
242
218
|
crit = with_polymorphic_criterion(crit, base)
|
|
243
219
|
crit.association = self
|
|
244
220
|
crit.parent_document = base
|