mongoid 7.0.0 → 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/LICENSE +1 -0
- data/README.md +34 -20
- data/Rakefile +75 -5
- 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 +31 -19
- data/lib/mongoid/association/eager_loadable.rb +2 -3
- data/lib/mongoid/association/embedded/batchable.rb +19 -45
- 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 +113 -93
- data/lib/mongoid/association/embedded/embeds_many.rb +8 -35
- 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 +45 -30
- data/lib/mongoid/association/embedded/embeds_one.rb +8 -31
- data/lib/mongoid/association/embedded.rb +2 -0
- data/lib/mongoid/association/macros.rb +44 -41
- data/lib/mongoid/association/many.rb +18 -32
- 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 +40 -36
- 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 +38 -56
- 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 +78 -111
- 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 +118 -78
- data/lib/mongoid/association.rb +8 -23
- 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 +3 -4
- data/lib/mongoid/atomic/paths/root.rb +4 -7
- data/lib/mongoid/atomic/paths.rb +2 -1
- data/lib/mongoid/atomic.rb +42 -47
- data/lib/mongoid/attributes/dynamic.rb +18 -32
- data/lib/mongoid/attributes/nested.rb +21 -13
- 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 +75 -81
- 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 +16 -17
- data/lib/mongoid/clients/sessions.rb +24 -12
- 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 +36 -14
- 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 +26 -27
- 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 +9 -37
- data/lib/mongoid/contextual/memory.rb +12 -65
- data/lib/mongoid/contextual/mongo.rb +163 -85
- 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 +16 -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 +15 -21
- data/lib/mongoid/criteria/options.rb +4 -5
- 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 +4 -13
- 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 +9 -16
- 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 +4 -9
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +13 -6
- data/lib/mongoid/criteria/queryable/extensions.rb +1 -4
- data/lib/mongoid/criteria/queryable/key.rb +101 -27
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +184 -44
- 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 +436 -158
- data/lib/mongoid/criteria/queryable/selector.rb +45 -55
- 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 +86 -73
- data/lib/mongoid/document.rb +37 -77
- 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 +3 -12
- 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 +51 -36
- 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 +4 -4
- data/lib/mongoid/extensions/set.rb +2 -7
- data/lib/mongoid/extensions/string.rb +24 -42
- 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 +115 -64
- 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 +10 -25
- 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 +3 -150
- 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 +6 -23
- data/lib/mongoid/persistable/deletable.rb +7 -23
- 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 +14 -10
- data/lib/mongoid/persistable/renamable.rb +10 -8
- data/lib/mongoid/persistable/savable.rb +3 -8
- data/lib/mongoid/persistable/settable.rb +61 -19
- data/lib/mongoid/persistable/unsettable.rb +8 -8
- data/lib/mongoid/persistable/updatable.rb +33 -21
- data/lib/mongoid/persistable/upsertable.rb +4 -9
- data/lib/mongoid/persistable.rb +134 -39
- data/lib/mongoid/persistence_context.rb +51 -45
- data/lib/mongoid/positional.rb +3 -6
- data/lib/mongoid/query_cache.rb +138 -106
- data/lib/mongoid/railtie.rb +20 -16
- data/lib/mongoid/railties/controller_runtime.rb +88 -0
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +14 -19
- data/lib/mongoid/scopable.rb +11 -38
- 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 +87 -7
- data/lib/mongoid/threaded/lifecycle.rb +2 -21
- data/lib/mongoid/threaded.rb +38 -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 +132 -0
- 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 +3 -8
- data/lib/mongoid/validatable/presence.rb +8 -13
- data/lib/mongoid/validatable/queryable.rb +2 -3
- data/lib/mongoid/validatable/uniqueness.rb +21 -34
- data/lib/mongoid/validatable.rb +8 -27
- data/lib/mongoid/version.rb +3 -2
- data/lib/mongoid.rb +33 -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/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -1
- data/lib/rails/mongoid.rb +4 -5
- data/spec/README.md +33 -0
- data/spec/config/mongoid.yml +13 -3
- data/spec/integration/app_spec.rb +343 -0
- data/spec/integration/associations/belongs_to_spec.rb +15 -0
- data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
- data/spec/integration/associations/embedded_spec.rb +268 -0
- 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 +40 -0
- 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 +142 -0
- data/spec/integration/discriminator_key_spec.rb +353 -0
- data/spec/integration/discriminator_value_spec.rb +206 -0
- data/spec/integration/document_spec.rb +51 -0
- data/spec/integration/i18n_fallbacks_spec.rb +89 -0
- data/spec/integration/matcher_examples_spec.rb +758 -0
- 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 +83 -0
- data/spec/mongoid/association/accessors_spec.rb +323 -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 +678 -332
- 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 +61 -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 +672 -144
- data/spec/mongoid/association/embedded/embeds_many_models.rb +69 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +51 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +13 -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 +8 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +28 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +49 -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 +61 -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 +266 -17
- 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 +95 -12
- 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 +67 -4
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +76 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +351 -164
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +67 -0
- 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 +49 -5
- 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 +407 -121
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +681 -340
- data/spec/mongoid/association/referenced/has_many_models.rb +95 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +26 -3
- 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 +97 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +37 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +144 -5
- 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 +152 -0
- data/spec/mongoid/attributes/nested_spec.rb +87 -69
- 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 +382 -35
- data/spec/mongoid/cacheable_spec.rb +3 -1
- data/spec/mongoid/changeable_spec.rb +60 -35
- data/spec/mongoid/clients/factory_spec.rb +148 -34
- data/spec/mongoid/clients/options_spec.rb +102 -66
- data/spec/mongoid/clients/sessions_spec.rb +39 -29
- data/spec/mongoid/clients/transactions_spec.rb +415 -0
- data/spec/mongoid/clients_spec.rb +78 -16
- 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 +280 -2
- 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 +242 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +31 -19
- data/spec/mongoid/contextual/map_reduce_spec.rb +24 -7
- data/spec/mongoid/contextual/memory_spec.rb +25 -23
- data/spec/mongoid/contextual/mongo_spec.rb +491 -144
- data/spec/mongoid/contextual/none_spec.rb +9 -81
- data/spec/mongoid/copyable_spec.rb +261 -30
- data/spec/mongoid/copyable_spec_models.rb +47 -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 +100 -48
- 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 +5 -3
- 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 +53 -0
- 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 +9 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +3 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +2 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +42 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +30 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +50 -6
- 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 +2069 -0
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +994 -2900
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +41 -2
- 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 +210 -0
- data/spec/mongoid/criteria_projection_spec.rb +410 -0
- data/spec/mongoid/criteria_spec.rb +807 -464
- data/spec/mongoid/document_fields_spec.rb +113 -0
- data/spec/mongoid/document_persistence_context_spec.rb +32 -0
- data/spec/mongoid/document_query_spec.rb +89 -0
- data/spec/mongoid/document_spec.rb +182 -28
- 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 +11 -9
- 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 +25 -0
- data/spec/mongoid/extensions/set_spec.rb +2 -0
- data/spec/mongoid/extensions/string_spec.rb +95 -34
- 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 +419 -37
- data/spec/mongoid/findable_spec.rb +54 -20
- data/spec/mongoid/indexable/specification_spec.rb +2 -0
- data/spec/mongoid/indexable_spec.rb +36 -6
- 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 +29 -13
- 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 +91 -7
- 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 +182 -17
- 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 +3 -1
- 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 +575 -48
- data/spec/mongoid/relations/proxy_spec.rb +9 -7
- data/spec/mongoid/reloadable_spec.rb +298 -20
- data/spec/mongoid/scopable_spec.rb +82 -22
- 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 +15 -13
- data/spec/mongoid/tasks/database_spec.rb +3 -1
- data/spec/mongoid/threaded_spec.rb +72 -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/{association/touchable_spec.rb → touchable_spec.rb} +206 -38
- 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 +102 -73
- data/spec/mongoid/validatable_spec.rb +5 -3
- data/spec/mongoid_spec.rb +2 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +112 -0
- 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 +69 -80
- data/spec/support/authorization.rb +2 -0
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/constraints.rb +53 -0
- data/spec/support/expectations.rb +21 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/macros.rb +42 -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/support/models/array_field.rb +7 -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/support/models/delegating_patient.rb +15 -0
- 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/support/models/minim.rb +6 -0
- 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/support/models/store_as_dup_test3.rb +7 -0
- data/spec/support/models/store_as_dup_test4.rb +7 -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/support/models/updatable.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 +60 -0
- data.tar.gz.sig +0 -0
- metadata +1131 -686
- metadata.gz.sig +0 -0
- data/lib/mongoid/association/touchable.rb +0 -97
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/matchable/all.rb +0 -27
- data/lib/mongoid/matchable/and.rb +0 -30
- data/lib/mongoid/matchable/default.rb +0 -72
- data/lib/mongoid/matchable/elem_match.rb +0 -34
- 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/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/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 -130
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
- 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/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 -828
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mongoid/association/embedded/embedded_in/binding'
|
|
2
4
|
require 'mongoid/association/embedded/embedded_in/buildable'
|
|
3
5
|
require 'mongoid/association/embedded/embedded_in/proxy'
|
|
@@ -7,8 +9,6 @@ module Mongoid
|
|
|
7
9
|
module Embedded
|
|
8
10
|
|
|
9
11
|
# The EmbeddedIn type association.
|
|
10
|
-
#
|
|
11
|
-
# @since 7.0
|
|
12
12
|
class EmbeddedIn
|
|
13
13
|
include Relatable
|
|
14
14
|
include Buildable
|
|
@@ -17,28 +17,22 @@ module Mongoid
|
|
|
17
17
|
# common ones.
|
|
18
18
|
#
|
|
19
19
|
# @return [ Array<Symbol> ] The extra valid options.
|
|
20
|
-
#
|
|
21
|
-
# @since 7.0
|
|
22
20
|
ASSOCIATION_OPTIONS = [
|
|
23
21
|
:autobuild,
|
|
24
22
|
:cyclic,
|
|
25
23
|
:polymorphic,
|
|
26
|
-
:touch
|
|
24
|
+
:touch,
|
|
27
25
|
].freeze
|
|
28
26
|
|
|
29
27
|
# The complete list of valid options for this association, including
|
|
30
28
|
# the shared ones.
|
|
31
29
|
#
|
|
32
30
|
# @return [ Array<Symbol> ] The valid options.
|
|
33
|
-
#
|
|
34
|
-
# @since 7.0
|
|
35
31
|
VALID_OPTIONS = (ASSOCIATION_OPTIONS + SHARED_OPTIONS).freeze
|
|
36
32
|
|
|
37
33
|
# Setup the instance methods, fields, etc. on the association owning class.
|
|
38
34
|
#
|
|
39
35
|
# @return [ self ]
|
|
40
|
-
#
|
|
41
|
-
# @since 7.0
|
|
42
36
|
def setup!
|
|
43
37
|
setup_instance_methods!
|
|
44
38
|
@owner_class.embedded = true
|
|
@@ -48,43 +42,33 @@ module Mongoid
|
|
|
48
42
|
# Is this association type embedded?
|
|
49
43
|
#
|
|
50
44
|
# @return [ true ] Always true.
|
|
51
|
-
#
|
|
52
|
-
# @since 7.0
|
|
53
45
|
def embedded?; true; end
|
|
54
46
|
|
|
55
47
|
# The primary key
|
|
56
48
|
#
|
|
57
|
-
# @return [ nil ] Not relevant for this
|
|
49
|
+
# @return [ nil ] Not relevant for this association
|
|
58
50
|
def primary_key; end
|
|
59
51
|
|
|
60
52
|
# Does this association type store the foreign key?
|
|
61
53
|
#
|
|
62
54
|
# @return [ false ] Always false.
|
|
63
|
-
#
|
|
64
|
-
# @since 7.0
|
|
65
55
|
def stores_foreign_key?; false; end
|
|
66
56
|
|
|
67
57
|
# The default for validating the association object.
|
|
68
58
|
#
|
|
69
59
|
# @return [ false ] Always false.
|
|
70
|
-
#
|
|
71
|
-
# @since 7.0
|
|
72
60
|
def validation_default; false; end
|
|
73
61
|
|
|
74
62
|
# The key that is used to get the attributes for the associated object.
|
|
75
63
|
#
|
|
76
|
-
# @return [ String ] The name of the
|
|
77
|
-
#
|
|
78
|
-
# @since 7.0
|
|
64
|
+
# @return [ String ] The name of the association.
|
|
79
65
|
def key
|
|
80
66
|
@key ||= name.to_s
|
|
81
67
|
end
|
|
82
68
|
|
|
83
|
-
# Get the
|
|
69
|
+
# Get the association proxy class for this association type.
|
|
84
70
|
#
|
|
85
71
|
# @return [ Association::Embedded::EmbeddedIn::Proxy ] The proxy class.
|
|
86
|
-
#
|
|
87
|
-
# @since 7.0
|
|
88
72
|
def relation
|
|
89
73
|
Proxy
|
|
90
74
|
end
|
|
@@ -92,8 +76,6 @@ module Mongoid
|
|
|
92
76
|
# Is this association polymorphic?
|
|
93
77
|
#
|
|
94
78
|
# @return [ true, false ] Whether this association is polymorphic.
|
|
95
|
-
#
|
|
96
|
-
# @since 7.0
|
|
97
79
|
def polymorphic?
|
|
98
80
|
!!@options[:polymorphic]
|
|
99
81
|
end
|
|
@@ -104,8 +86,6 @@ module Mongoid
|
|
|
104
86
|
# @param [ Hash ] options The options for the association.
|
|
105
87
|
#
|
|
106
88
|
# @return [ Association::Nested::One ] The Nested Builder object.
|
|
107
|
-
#
|
|
108
|
-
# @since 7.0
|
|
109
89
|
def nested_builder(attributes, options)
|
|
110
90
|
Nested::One.new(self, attributes, options)
|
|
111
91
|
end
|
|
@@ -1,23 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Mongoid
|
|
2
4
|
module Association
|
|
3
5
|
module Embedded
|
|
4
6
|
class EmbedsMany
|
|
5
7
|
|
|
6
|
-
# Binding class for all embeds_many
|
|
7
|
-
#
|
|
8
|
-
# @since 7.0
|
|
8
|
+
# Binding class for all embeds_many associations.
|
|
9
9
|
class Binding
|
|
10
10
|
include Bindable
|
|
11
11
|
|
|
12
|
-
# Binds a single document with the inverse
|
|
12
|
+
# Binds a single document with the inverse association. Used
|
|
13
13
|
# specifically when appending to the proxy.
|
|
14
14
|
#
|
|
15
15
|
# @example Bind one document.
|
|
16
16
|
# person.addresses.bind_one(address)
|
|
17
17
|
#
|
|
18
18
|
# @param [ Document ] doc The single document to bind.
|
|
19
|
-
#
|
|
20
|
-
# @since 2.0.0.rc.1
|
|
21
19
|
def bind_one(doc)
|
|
22
20
|
doc.parentize(_base)
|
|
23
21
|
binding do
|
|
@@ -31,8 +29,6 @@ module Mongoid
|
|
|
31
29
|
# person.addresses.unbind_one(document)
|
|
32
30
|
#
|
|
33
31
|
# @param [ Document ] doc The single document to unbind.
|
|
34
|
-
#
|
|
35
|
-
# @since 2.0.0.rc.1
|
|
36
32
|
def unbind_one(doc)
|
|
37
33
|
binding do
|
|
38
34
|
doc.do_or_do_not(_association.inverse_setter(_target), nil)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Mongoid
|
|
2
4
|
module Association
|
|
3
5
|
module Embedded
|
|
4
6
|
class EmbedsMany
|
|
5
7
|
|
|
6
8
|
# Builder class for embeds_many associations.
|
|
7
|
-
#
|
|
8
|
-
# @since 7.0
|
|
9
9
|
module Buildable
|
|
10
10
|
include Threaded::Lifecycle
|
|
11
11
|
|
|
@@ -18,17 +18,20 @@ module Mongoid
|
|
|
18
18
|
# Builder.new(meta, attrs).build
|
|
19
19
|
#
|
|
20
20
|
# @param [ Object ] base The base object.
|
|
21
|
-
# @param [ Object ] object The object to use to build the
|
|
21
|
+
# @param [ Object ] object The object to use to build the association.
|
|
22
22
|
# @param [ String ] type Not used in this context.
|
|
23
|
+
# @param [ Hash ] selected_fields Fields which were retrieved via
|
|
24
|
+
# #only. If selected_fields are specified, fields not listed in it
|
|
25
|
+
# will not be accessible in the built documents.
|
|
23
26
|
#
|
|
24
27
|
# @return [ Array<Document ] The documents.
|
|
25
|
-
def build(base, object, type = nil)
|
|
28
|
+
def build(base, object, type = nil, selected_fields = nil)
|
|
26
29
|
return [] if object.blank?
|
|
27
30
|
return object if object.first.is_a?(Document)
|
|
28
31
|
docs = []
|
|
29
32
|
object.each do |attrs|
|
|
30
33
|
if _loading? && base.persisted?
|
|
31
|
-
docs.push(Factory.from_db(klass, attrs))
|
|
34
|
+
docs.push(Factory.from_db(klass, attrs, nil, selected_fields))
|
|
32
35
|
else
|
|
33
36
|
docs.push(Factory.build(klass, attrs))
|
|
34
37
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'mongoid/association/embedded/batchable'
|
|
2
4
|
|
|
3
5
|
module Mongoid
|
|
@@ -8,7 +10,7 @@ module Mongoid
|
|
|
8
10
|
class Proxy < Association::Many
|
|
9
11
|
include Batchable
|
|
10
12
|
|
|
11
|
-
# Appends a document or array of documents to the
|
|
13
|
+
# Appends a document or array of documents to the association. Will set
|
|
12
14
|
# the parent and update the index in the process.
|
|
13
15
|
#
|
|
14
16
|
# @example Append a document.
|
|
@@ -30,19 +32,17 @@ module Mongoid
|
|
|
30
32
|
|
|
31
33
|
alias :push :<<
|
|
32
34
|
|
|
33
|
-
# Get this
|
|
35
|
+
# Get this association as as its representation in the database.
|
|
34
36
|
#
|
|
35
|
-
# @example Convert the
|
|
37
|
+
# @example Convert the association to an attributes hash.
|
|
36
38
|
# person.addresses.as_document
|
|
37
39
|
#
|
|
38
|
-
# @return [ Array<Hash> ] The
|
|
39
|
-
#
|
|
40
|
-
# @since 2.0.0.rc.1
|
|
40
|
+
# @return [ Array<Hash> ] The association as stored in the db.
|
|
41
41
|
def as_document
|
|
42
42
|
as_attributes.collect { |attrs| BSON::Document.new(attrs) }
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
# Appends an array of documents to the
|
|
45
|
+
# Appends an array of documents to the association. Performs a batch
|
|
46
46
|
# insert of the documents instead of persisting one at a time.
|
|
47
47
|
#
|
|
48
48
|
# @example Concat with other documents.
|
|
@@ -51,17 +51,15 @@ module Mongoid
|
|
|
51
51
|
# @param [ Array<Document> ] docs The docs to add.
|
|
52
52
|
#
|
|
53
53
|
# @return [ Array<Document> ] The documents.
|
|
54
|
-
#
|
|
55
|
-
# @since 2.4.0
|
|
56
54
|
def concat(docs)
|
|
57
55
|
batch_insert(docs) unless docs.empty?
|
|
58
56
|
self
|
|
59
57
|
end
|
|
60
58
|
|
|
61
|
-
# Builds a new document in the
|
|
59
|
+
# Builds a new document in the association and appends it to the target.
|
|
62
60
|
# Takes an optional type if you want to specify a subclass.
|
|
63
61
|
#
|
|
64
|
-
# @example Build a new document on the
|
|
62
|
+
# @example Build a new document on the association.
|
|
65
63
|
# person.people.build(:name => "Bozo")
|
|
66
64
|
#
|
|
67
65
|
# @param [ Hash ] attributes The attributes to build the document with.
|
|
@@ -74,19 +72,26 @@ module Mongoid
|
|
|
74
72
|
doc.apply_post_processed_defaults
|
|
75
73
|
yield(doc) if block_given?
|
|
76
74
|
doc.run_callbacks(:build) { doc }
|
|
77
|
-
_base.
|
|
75
|
+
_base._reset_memoized_descendants!
|
|
78
76
|
doc
|
|
79
77
|
end
|
|
80
78
|
|
|
81
79
|
alias :new :build
|
|
82
80
|
|
|
83
|
-
# Clear the
|
|
84
|
-
# already persisted.
|
|
81
|
+
# Clear the association. Will delete the documents from the db
|
|
82
|
+
# if they are already persisted.
|
|
85
83
|
#
|
|
86
|
-
#
|
|
84
|
+
# If the host document is not persisted but its _id matches a
|
|
85
|
+
# persisted document, calling #clear on an association will remove
|
|
86
|
+
# the association's documents from the database even though the
|
|
87
|
+
# set of documents in the application (as loaded in the host)
|
|
88
|
+
# is different from what is in the database, and the host may
|
|
89
|
+
# not contain any persisted documents in the association either.
|
|
90
|
+
#
|
|
91
|
+
# @example Clear the association.
|
|
87
92
|
# person.addresses.clear
|
|
88
93
|
#
|
|
89
|
-
# @return [ self ] The empty
|
|
94
|
+
# @return [ self ] The empty association.
|
|
90
95
|
def clear
|
|
91
96
|
batch_clear(_target.dup)
|
|
92
97
|
self
|
|
@@ -97,26 +102,38 @@ module Mongoid
|
|
|
97
102
|
#
|
|
98
103
|
# Use #size if you want the total number of documents.
|
|
99
104
|
#
|
|
105
|
+
# If args or block are present, #count will delegate to the
|
|
106
|
+
# #count method on +target+ and will include both persisted
|
|
107
|
+
# and non-persisted documents.
|
|
108
|
+
#
|
|
100
109
|
# @example Get the count of persisted documents.
|
|
101
110
|
# person.addresses.count
|
|
102
111
|
#
|
|
112
|
+
# @example Get the count of all documents matching a block.
|
|
113
|
+
# person.addresses.count { |a| a.country == "FR" }
|
|
114
|
+
#
|
|
115
|
+
# @example Use #persisted? inside block to count persisted documents.
|
|
116
|
+
# person.addresses.count { |a| a.persisted? && a.country == "FR" }
|
|
117
|
+
#
|
|
118
|
+
# @param [ Object, Array<Object> ] args Args to delegate to the target.
|
|
119
|
+
#
|
|
103
120
|
# @return [ Integer ] The total number of persisted embedded docs, as
|
|
104
121
|
# flagged by the #persisted? method.
|
|
105
|
-
def count
|
|
122
|
+
def count(*args, &block)
|
|
123
|
+
return _target.count(*args, &block) if args.any? || block
|
|
124
|
+
|
|
106
125
|
_target.select { |doc| doc.persisted? }.size
|
|
107
126
|
end
|
|
108
127
|
|
|
109
128
|
# Delete the supplied document from the target. This method is proxied
|
|
110
129
|
# in order to reindex the array after the operation occurs.
|
|
111
130
|
#
|
|
112
|
-
# @example Delete the document from the
|
|
131
|
+
# @example Delete the document from the association.
|
|
113
132
|
# person.addresses.delete(address)
|
|
114
133
|
#
|
|
115
134
|
# @param [ Document ] document The document to be deleted.
|
|
116
135
|
#
|
|
117
136
|
# @return [ Document, nil ] The deleted document or nil if nothing deleted.
|
|
118
|
-
#
|
|
119
|
-
# @since 2.0.0.rc.1
|
|
120
137
|
def delete(document)
|
|
121
138
|
execute_callback :before_remove, document
|
|
122
139
|
doc = _target.delete_one(document)
|
|
@@ -136,10 +153,10 @@ module Mongoid
|
|
|
136
153
|
|
|
137
154
|
# Delete all the documents in the association without running callbacks.
|
|
138
155
|
#
|
|
139
|
-
# @example Delete all documents from the
|
|
156
|
+
# @example Delete all documents from the association.
|
|
140
157
|
# person.addresses.delete_all
|
|
141
158
|
#
|
|
142
|
-
# @example Conditionally delete documents from the
|
|
159
|
+
# @example Conditionally delete documents from the association.
|
|
143
160
|
# person.addresses.delete_all({ :street => "Bond" })
|
|
144
161
|
#
|
|
145
162
|
# @param [ Hash ] conditions Conditions on which documents to delete.
|
|
@@ -156,10 +173,8 @@ module Mongoid
|
|
|
156
173
|
# doc.state == "GA"
|
|
157
174
|
# end
|
|
158
175
|
#
|
|
159
|
-
# @return [ Many, Enumerator ] The
|
|
176
|
+
# @return [ Many, Enumerator ] The association or an enumerator if no
|
|
160
177
|
# block was provided.
|
|
161
|
-
#
|
|
162
|
-
# @since 3.1.0
|
|
163
178
|
def delete_if
|
|
164
179
|
if block_given?
|
|
165
180
|
dup_target = _target.dup
|
|
@@ -174,10 +189,10 @@ module Mongoid
|
|
|
174
189
|
|
|
175
190
|
# Destroy all the documents in the association whilst running callbacks.
|
|
176
191
|
#
|
|
177
|
-
# @example Destroy all documents from the
|
|
192
|
+
# @example Destroy all documents from the association.
|
|
178
193
|
# person.addresses.destroy_all
|
|
179
194
|
#
|
|
180
|
-
# @example Conditionally destroy documents from the
|
|
195
|
+
# @example Conditionally destroy documents from the association.
|
|
181
196
|
# person.addresses.destroy_all({ :street => "Bond" })
|
|
182
197
|
#
|
|
183
198
|
# @param [ Hash ] conditions Conditions on which documents to destroy.
|
|
@@ -187,7 +202,7 @@ module Mongoid
|
|
|
187
202
|
remove_all(conditions, :destroy)
|
|
188
203
|
end
|
|
189
204
|
|
|
190
|
-
# Determine if any documents in this
|
|
205
|
+
# Determine if any documents in this association exist in the database.
|
|
191
206
|
#
|
|
192
207
|
# @example Are there persisted documents?
|
|
193
208
|
# person.posts.exists?
|
|
@@ -200,26 +215,38 @@ module Mongoid
|
|
|
200
215
|
# Finds a document in this association through several different
|
|
201
216
|
# methods.
|
|
202
217
|
#
|
|
218
|
+
# This method delegates to +Mongoid::Criteria#find+. If this method is
|
|
219
|
+
# not given a block, it returns one or many documents for the provided
|
|
220
|
+
# _id values.
|
|
221
|
+
#
|
|
222
|
+
# If this method is given a block, it returns the first document
|
|
223
|
+
# of those found by the current Criteria object for which the block
|
|
224
|
+
# returns a truthy value.
|
|
225
|
+
#
|
|
203
226
|
# @example Find a document by its id.
|
|
204
227
|
# person.addresses.find(BSON::ObjectId.new)
|
|
205
228
|
#
|
|
206
229
|
# @example Find documents for multiple ids.
|
|
207
230
|
# person.addresses.find([ BSON::ObjectId.new, BSON::ObjectId.new ])
|
|
208
231
|
#
|
|
232
|
+
# @example Finds the first matching document using a block.
|
|
233
|
+
# person.addresses.find { |addr| addr.state == 'CA' }
|
|
234
|
+
#
|
|
209
235
|
# @param [ Array<Object> ] args Various arguments.
|
|
236
|
+
# @param [ Proc ] block Optional block to pass.
|
|
210
237
|
#
|
|
211
|
-
# @return [ Array<Document
|
|
212
|
-
def find(*args)
|
|
213
|
-
criteria.find(*args)
|
|
238
|
+
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
|
239
|
+
def find(*args, &block)
|
|
240
|
+
criteria.find(*args, &block)
|
|
214
241
|
end
|
|
215
242
|
|
|
216
|
-
# Instantiate a new embeds_many
|
|
243
|
+
# Instantiate a new embeds_many association.
|
|
217
244
|
#
|
|
218
|
-
# @example Create the new
|
|
245
|
+
# @example Create the new association.
|
|
219
246
|
# Many.new(person, addresses, association)
|
|
220
247
|
#
|
|
221
|
-
# @param [ Document ] base The document this
|
|
222
|
-
# @param [ Array<Document> ] target The child documents of the
|
|
248
|
+
# @param [ Document ] base The document this association hangs off of.
|
|
249
|
+
# @param [ Array<Document> ] target The child documents of the association.
|
|
223
250
|
# @param [ Association ] association The association metadata
|
|
224
251
|
#
|
|
225
252
|
# @return [ Many ] The proxy.
|
|
@@ -234,19 +261,17 @@ module Mongoid
|
|
|
234
261
|
end
|
|
235
262
|
end
|
|
236
263
|
|
|
237
|
-
# Get all the documents in the
|
|
264
|
+
# Get all the documents in the association that are loaded into memory.
|
|
238
265
|
#
|
|
239
266
|
# @example Get the in memory documents.
|
|
240
267
|
# relation.in_memory
|
|
241
268
|
#
|
|
242
269
|
# @return [ Array<Document> ] The documents in memory.
|
|
243
|
-
#
|
|
244
|
-
# @since 2.1.0
|
|
245
270
|
def in_memory
|
|
246
271
|
_target
|
|
247
272
|
end
|
|
248
273
|
|
|
249
|
-
# Pop documents off the
|
|
274
|
+
# Pop documents off the association. This can be a single document or
|
|
250
275
|
# multiples, and will automatically persist the changes.
|
|
251
276
|
#
|
|
252
277
|
# @example Pop a single document.
|
|
@@ -259,8 +284,6 @@ module Mongoid
|
|
|
259
284
|
# provided.
|
|
260
285
|
#
|
|
261
286
|
# @return [ Document, Array<Document> ] The popped document(s).
|
|
262
|
-
#
|
|
263
|
-
# @since 3.0.0
|
|
264
287
|
def pop(count = nil)
|
|
265
288
|
if count
|
|
266
289
|
if docs = _target[_target.size - count, _target.size]
|
|
@@ -271,31 +294,50 @@ module Mongoid
|
|
|
271
294
|
end
|
|
272
295
|
end
|
|
273
296
|
|
|
297
|
+
# Shift documents off the association. This can be a single document or
|
|
298
|
+
# multiples, and will automatically persist the changes.
|
|
299
|
+
#
|
|
300
|
+
# @example Shift a single document.
|
|
301
|
+
# relation.shift
|
|
302
|
+
#
|
|
303
|
+
# @example Shift multiple documents.
|
|
304
|
+
# relation.shift(3)
|
|
305
|
+
#
|
|
306
|
+
# @param [ Integer ] count The number of documents to shift, or 1 if not
|
|
307
|
+
# provided.
|
|
308
|
+
#
|
|
309
|
+
# @return [ Document, Array<Document> ] The shifted document(s).
|
|
310
|
+
def shift(count = nil)
|
|
311
|
+
if count
|
|
312
|
+
if _target.size > 0 && docs = _target[0, count]
|
|
313
|
+
docs.each { |doc| delete(doc) }
|
|
314
|
+
end
|
|
315
|
+
else
|
|
316
|
+
delete(_target[0])
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
|
|
274
320
|
# Substitutes the supplied target documents for the existing documents
|
|
275
321
|
# in the relation.
|
|
276
322
|
#
|
|
277
|
-
# @example Substitute the
|
|
323
|
+
# @example Substitute the association's target.
|
|
278
324
|
# person.addresses.substitute([ address ])
|
|
279
325
|
#
|
|
280
326
|
# @param [ Array<Document> ] docs The replacement docs.
|
|
281
327
|
#
|
|
282
|
-
# @return [ Many ] The proxied
|
|
283
|
-
#
|
|
284
|
-
# @since 2.0.0.rc.1
|
|
328
|
+
# @return [ Many ] The proxied association.
|
|
285
329
|
def substitute(docs)
|
|
286
330
|
batch_replace(docs)
|
|
287
331
|
self
|
|
288
332
|
end
|
|
289
333
|
|
|
290
|
-
# Return the
|
|
334
|
+
# Return the association with all previous scoping removed. This is the
|
|
291
335
|
# exact representation of the docs in the database.
|
|
292
336
|
#
|
|
293
337
|
# @example Get the unscoped documents.
|
|
294
338
|
# person.addresses.unscoped
|
|
295
339
|
#
|
|
296
|
-
# @return [ Criteria ] The unscoped
|
|
297
|
-
#
|
|
298
|
-
# @since 2.4.0
|
|
340
|
+
# @return [ Criteria ] The unscoped association.
|
|
299
341
|
def unscoped
|
|
300
342
|
criterion = klass.unscoped
|
|
301
343
|
criterion.embedded = true
|
|
@@ -306,7 +348,7 @@ module Mongoid
|
|
|
306
348
|
private
|
|
307
349
|
|
|
308
350
|
def object_already_related?(document)
|
|
309
|
-
_target.any? { |existing| existing.
|
|
351
|
+
_target.any? { |existing| existing._id && existing === document }
|
|
310
352
|
end
|
|
311
353
|
|
|
312
354
|
# Appends the document to the target array, updating the index on the
|
|
@@ -316,8 +358,6 @@ module Mongoid
|
|
|
316
358
|
# relation.append(document)
|
|
317
359
|
#
|
|
318
360
|
# @param [ Document ] document The document to append to the target.
|
|
319
|
-
#
|
|
320
|
-
# @since 2.0.0.rc.1
|
|
321
361
|
def append(document)
|
|
322
362
|
execute_callback :before_add, document
|
|
323
363
|
unless object_already_related?(document)
|
|
@@ -329,27 +369,22 @@ module Mongoid
|
|
|
329
369
|
execute_callback :after_add, document
|
|
330
370
|
end
|
|
331
371
|
|
|
332
|
-
# Instantiate the binding associated with this
|
|
372
|
+
# Instantiate the binding associated with this association.
|
|
333
373
|
#
|
|
334
374
|
# @example Create the binding.
|
|
335
375
|
# relation.binding([ address ])
|
|
336
376
|
#
|
|
337
377
|
# @return [ Binding ] The many binding.
|
|
338
|
-
#
|
|
339
|
-
# @since 2.0.0.rc.1
|
|
340
378
|
def binding
|
|
341
379
|
Binding.new(_base, _target, _association)
|
|
342
380
|
end
|
|
343
381
|
|
|
344
|
-
# Returns the
|
|
345
|
-
# to target.
|
|
346
|
-
#
|
|
347
|
-
# @example Get a criteria for the relation.
|
|
348
|
-
# relation.criteria
|
|
382
|
+
# Returns the +Criteria+ object for the target class with its
|
|
383
|
+
# documents set to the list of target documents in the association.
|
|
349
384
|
#
|
|
350
385
|
# @return [ Criteria ] A new criteria.
|
|
351
386
|
def criteria
|
|
352
|
-
|
|
387
|
+
_association.criteria(_base, _target)
|
|
353
388
|
end
|
|
354
389
|
|
|
355
390
|
# Deletes one document from the target and unscoped.
|
|
@@ -360,23 +395,19 @@ module Mongoid
|
|
|
360
395
|
# relation.delete_one(doc)
|
|
361
396
|
#
|
|
362
397
|
# @param [ Document ] document The document to delete.
|
|
363
|
-
#
|
|
364
|
-
# @since 2.4.7
|
|
365
398
|
def delete_one(document)
|
|
366
399
|
_target.delete_one(document)
|
|
367
400
|
_unscoped.delete_one(document)
|
|
368
401
|
reindex
|
|
369
402
|
end
|
|
370
403
|
|
|
371
|
-
# Integrate the document into the
|
|
404
|
+
# Integrate the document into the association. will set its metadata and
|
|
372
405
|
# attempt to bind the inverse.
|
|
373
406
|
#
|
|
374
407
|
# @example Integrate the document.
|
|
375
408
|
# relation.integrate(document)
|
|
376
409
|
#
|
|
377
410
|
# @param [ Document ] document The document to integrate.
|
|
378
|
-
#
|
|
379
|
-
# @since 2.1.0
|
|
380
411
|
def integrate(document)
|
|
381
412
|
characterize_one(document)
|
|
382
413
|
bind_one(document)
|
|
@@ -392,21 +423,19 @@ module Mongoid
|
|
|
392
423
|
# @param [ Proc ] block Optional block to pass.
|
|
393
424
|
#
|
|
394
425
|
# @return [ Criteria, Object ] A Criteria or return value from the target.
|
|
395
|
-
def method_missing(name, *args, &block)
|
|
426
|
+
ruby2_keywords def method_missing(name, *args, &block)
|
|
396
427
|
return super if _target.respond_to?(name)
|
|
397
428
|
klass.send(:with_scope, criteria) do
|
|
398
429
|
criteria.public_send(name, *args, &block)
|
|
399
430
|
end
|
|
400
431
|
end
|
|
401
432
|
|
|
402
|
-
# Are we able to persist this
|
|
433
|
+
# Are we able to persist this association?
|
|
403
434
|
#
|
|
404
|
-
# @example Can we persist the
|
|
435
|
+
# @example Can we persist the association?
|
|
405
436
|
# relation.persistable?
|
|
406
437
|
#
|
|
407
|
-
# @return [ true, false ] If the
|
|
408
|
-
#
|
|
409
|
-
# @since 2.1.0
|
|
438
|
+
# @return [ true, false ] If the association is persistable.
|
|
410
439
|
def persistable?
|
|
411
440
|
_base.persisted? && !_binding?
|
|
412
441
|
end
|
|
@@ -415,18 +444,16 @@ module Mongoid
|
|
|
415
444
|
# operations on the proxied target directly and the indices need to
|
|
416
445
|
# match that on the database side.
|
|
417
446
|
#
|
|
418
|
-
# @example Reindex the
|
|
447
|
+
# @example Reindex the association.
|
|
419
448
|
# person.addresses.reindex
|
|
420
|
-
#
|
|
421
|
-
# @since 2.0.0.rc.1
|
|
422
449
|
def reindex
|
|
423
450
|
_unscoped.each_with_index do |doc, index|
|
|
424
451
|
doc._index = index
|
|
425
452
|
end
|
|
426
453
|
end
|
|
427
454
|
|
|
428
|
-
# Apply the association ordering
|
|
429
|
-
# documents.
|
|
455
|
+
# Apply the association ordering and default scoping (defined on
|
|
456
|
+
# association's target class) to the provided documents.
|
|
430
457
|
#
|
|
431
458
|
# @example Apply scoping.
|
|
432
459
|
# person.addresses.scope(target)
|
|
@@ -434,20 +461,21 @@ module Mongoid
|
|
|
434
461
|
# @param [ Array<Document> ] docs The documents to scope.
|
|
435
462
|
#
|
|
436
463
|
# @return [ Array<Document> ] The scoped docs.
|
|
437
|
-
#
|
|
438
|
-
# @since 2.4.0
|
|
439
464
|
def scope(docs)
|
|
440
|
-
|
|
465
|
+
unless _association.order || _association.klass.default_scoping?
|
|
466
|
+
return docs
|
|
467
|
+
end
|
|
468
|
+
|
|
441
469
|
crit = _association.klass.order_by(_association.order)
|
|
442
470
|
crit.embedded = true
|
|
443
471
|
crit.documents = docs
|
|
444
472
|
crit.entries
|
|
445
473
|
end
|
|
446
474
|
|
|
447
|
-
# Remove all documents from the
|
|
475
|
+
# Remove all documents from the association, either with a delete or a
|
|
448
476
|
# destroy depending on what this was called through.
|
|
449
477
|
#
|
|
450
|
-
# @example Destroy documents from the
|
|
478
|
+
# @example Destroy documents from the association.
|
|
451
479
|
# relation.remove_all({ :num => 1 }, true)
|
|
452
480
|
#
|
|
453
481
|
# @param [ Hash ] conditions Conditions to filter by.
|
|
@@ -467,8 +495,6 @@ module Mongoid
|
|
|
467
495
|
# relation._unscoped
|
|
468
496
|
#
|
|
469
497
|
# @return [ Array<Document> ] The unscoped documents.
|
|
470
|
-
#
|
|
471
|
-
# @since 2.4.0
|
|
472
498
|
def _unscoped
|
|
473
499
|
@_unscoped ||= []
|
|
474
500
|
end
|
|
@@ -481,8 +507,6 @@ module Mongoid
|
|
|
481
507
|
# @param [ Array<Document> ] docs The documents.
|
|
482
508
|
#
|
|
483
509
|
# @return [ Array<Document ] The unscoped docs.
|
|
484
|
-
#
|
|
485
|
-
# @since 2.4.0
|
|
486
510
|
def _unscoped=(docs)
|
|
487
511
|
@_unscoped = docs
|
|
488
512
|
end
|
|
@@ -497,15 +521,13 @@ module Mongoid
|
|
|
497
521
|
|
|
498
522
|
class << self
|
|
499
523
|
|
|
500
|
-
# Returns true if the
|
|
524
|
+
# Returns true if the association is an embedded one. In this case
|
|
501
525
|
# always true.
|
|
502
526
|
#
|
|
503
|
-
# @example Is the
|
|
527
|
+
# @example Is the association embedded?
|
|
504
528
|
# Association::Embedded::EmbedsMany.embedded?
|
|
505
529
|
#
|
|
506
530
|
# @return [ true ] true.
|
|
507
|
-
#
|
|
508
|
-
# @since 2.0.0.rc.1
|
|
509
531
|
def embedded?
|
|
510
532
|
true
|
|
511
533
|
end
|
|
@@ -516,8 +538,6 @@ module Mongoid
|
|
|
516
538
|
# Association::Embedded::EmbedsMany.foreign_key_suffix
|
|
517
539
|
#
|
|
518
540
|
# @return [ nil ] nil.
|
|
519
|
-
#
|
|
520
|
-
# @since 3.0.0
|
|
521
541
|
def foreign_key_suffix
|
|
522
542
|
nil
|
|
523
543
|
end
|
|
@@ -526,4 +546,4 @@ module Mongoid
|
|
|
526
546
|
end
|
|
527
547
|
end
|
|
528
548
|
end
|
|
529
|
-
end
|
|
549
|
+
end
|