mongoid 7.0.6 → 7.1.2
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.tar.gz.sig +0 -0
- data/CHANGELOG.md +13 -13
- data/README.md +23 -17
- data/Rakefile +2 -0
- data/lib/config/locales/en.yml +60 -51
- data/lib/mongoid.rb +10 -2
- data/lib/mongoid/association.rb +9 -6
- data/lib/mongoid/association/accessors.rb +95 -52
- data/lib/mongoid/association/bindable.rb +7 -5
- data/lib/mongoid/association/builders.rb +4 -3
- data/lib/mongoid/association/constrainable.rb +4 -2
- data/lib/mongoid/association/depending.rb +5 -2
- data/lib/mongoid/association/eager_loadable.rb +2 -0
- data/lib/mongoid/association/embedded.rb +3 -0
- data/lib/mongoid/association/embedded/batchable.rb +4 -2
- data/lib/mongoid/association/embedded/cyclic.rb +8 -6
- data/lib/mongoid/association/embedded/embedded_in.rb +6 -3
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +4 -1
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +8 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +15 -12
- data/lib/mongoid/association/embedded/embeds_many.rb +9 -5
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -2
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +9 -3
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +50 -47
- data/lib/mongoid/association/embedded/embeds_one.rb +9 -5
- data/lib/mongoid/association/embedded/embeds_one/binding.rb +5 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +10 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +17 -14
- data/lib/mongoid/association/macros.rb +38 -36
- data/lib/mongoid/association/many.rb +14 -11
- data/lib/mongoid/association/marshalable.rb +3 -1
- data/lib/mongoid/association/nested.rb +4 -1
- data/lib/mongoid/association/nested/many.rb +17 -15
- data/lib/mongoid/association/nested/nested_buildable.rb +6 -3
- data/lib/mongoid/association/nested/one.rb +11 -9
- data/lib/mongoid/association/one.rb +3 -1
- data/lib/mongoid/association/options.rb +9 -6
- data/lib/mongoid/association/proxy.rb +31 -14
- data/lib/mongoid/association/referenced.rb +3 -0
- data/lib/mongoid/association/referenced/auto_save.rb +4 -1
- data/lib/mongoid/association/referenced/belongs_to.rb +6 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +3 -1
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +6 -3
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -2
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -14
- data/lib/mongoid/association/referenced/counter_cache.rb +2 -0
- data/lib/mongoid/association/referenced/eager.rb +37 -15
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +13 -6
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -6
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +25 -18
- data/lib/mongoid/association/referenced/has_many.rb +7 -4
- data/lib/mongoid/association/referenced/has_many/binding.rb +3 -1
- data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -2
- data/lib/mongoid/association/referenced/has_many/eager.rb +2 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +11 -4
- data/lib/mongoid/association/referenced/has_many/proxy.rb +46 -43
- data/lib/mongoid/association/referenced/has_one.rb +5 -2
- data/lib/mongoid/association/referenced/has_one/binding.rb +4 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +8 -1
- data/lib/mongoid/association/referenced/has_one/eager.rb +2 -0
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +11 -9
- data/lib/mongoid/association/referenced/has_one/proxy.rb +17 -15
- data/lib/mongoid/association/referenced/syncable.rb +7 -5
- data/lib/mongoid/association/reflections.rb +7 -5
- data/lib/mongoid/association/relatable.rb +17 -14
- data/lib/mongoid/atomic.rb +15 -3
- data/lib/mongoid/atomic/modifiers.rb +24 -1
- data/lib/mongoid/atomic/paths.rb +2 -0
- data/lib/mongoid/atomic/paths/embedded.rb +2 -0
- data/lib/mongoid/atomic/paths/embedded/many.rb +4 -2
- data/lib/mongoid/atomic/paths/embedded/one.rb +4 -2
- data/lib/mongoid/atomic/paths/root.rb +4 -2
- data/lib/mongoid/attributes.rb +14 -13
- data/lib/mongoid/attributes/dynamic.rb +2 -0
- data/lib/mongoid/attributes/nested.rb +7 -5
- data/lib/mongoid/attributes/processing.rb +8 -6
- data/lib/mongoid/attributes/readonly.rb +3 -1
- data/lib/mongoid/cacheable.rb +3 -1
- data/lib/mongoid/changeable.rb +3 -1
- data/lib/mongoid/clients.rb +2 -0
- data/lib/mongoid/clients/factory.rb +1 -0
- data/lib/mongoid/clients/options.rb +2 -0
- data/lib/mongoid/clients/sessions.rb +3 -0
- data/lib/mongoid/clients/storage_options.rb +2 -0
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/clients/validators/storage.rb +2 -0
- data/lib/mongoid/composable.rb +4 -2
- data/lib/mongoid/config.rb +53 -10
- data/lib/mongoid/config/environment.rb +2 -0
- data/lib/mongoid/config/options.rb +20 -12
- data/lib/mongoid/config/validators.rb +2 -0
- data/lib/mongoid/config/validators/client.rb +2 -0
- data/lib/mongoid/config/validators/option.rb +2 -0
- data/lib/mongoid/contextual.rb +7 -4
- data/lib/mongoid/contextual/aggregable/memory.rb +3 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +3 -1
- data/lib/mongoid/contextual/atomic.rb +24 -6
- data/lib/mongoid/contextual/command.rb +2 -0
- data/lib/mongoid/contextual/geo_near.rb +5 -3
- data/lib/mongoid/contextual/map_reduce.rb +5 -2
- data/lib/mongoid/contextual/memory.rb +4 -2
- data/lib/mongoid/contextual/mongo.rb +6 -1
- data/lib/mongoid/contextual/none.rb +2 -0
- data/lib/mongoid/contextual/queryable.rb +2 -0
- data/lib/mongoid/copyable.rb +3 -1
- data/lib/mongoid/criteria.rb +25 -4
- data/lib/mongoid/criteria/findable.rb +11 -1
- data/lib/mongoid/criteria/includable.rb +8 -6
- data/lib/mongoid/criteria/inspectable.rb +2 -0
- data/lib/mongoid/criteria/marshalable.rb +2 -0
- data/lib/mongoid/criteria/modifiable.rb +4 -1
- data/lib/mongoid/criteria/options.rb +2 -0
- data/lib/mongoid/criteria/permission.rb +2 -0
- data/lib/mongoid/criteria/queryable.rb +7 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +93 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +2 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -2
- data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +7 -5
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -2
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -1
- data/lib/mongoid/criteria/queryable/key.rb +34 -6
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +153 -11
- data/lib/mongoid/criteria/queryable/optional.rb +5 -3
- data/lib/mongoid/criteria/queryable/options.rb +2 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +5 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +374 -90
- data/lib/mongoid/criteria/queryable/selector.rb +38 -5
- data/lib/mongoid/criteria/queryable/smash.rb +2 -0
- data/lib/mongoid/criteria/queryable/storable.rb +233 -0
- data/lib/mongoid/criteria/scopable.rb +2 -0
- data/lib/mongoid/document.rb +2 -0
- data/lib/mongoid/equality.rb +3 -2
- data/lib/mongoid/errors.rb +3 -0
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -2
- data/lib/mongoid/errors/callback.rb +2 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +19 -0
- data/lib/mongoid/errors/delete_restriction.rb +3 -2
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -0
- data/lib/mongoid/errors/document_not_found.rb +2 -0
- data/lib/mongoid/errors/eager_load.rb +6 -2
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -0
- data/lib/mongoid/errors/invalid_collection.rb +2 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -0
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -0
- data/lib/mongoid/errors/invalid_includes.rb +2 -0
- data/lib/mongoid/errors/invalid_index.rb +2 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -2
- data/lib/mongoid/errors/invalid_path.rb +2 -0
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -2
- data/lib/mongoid/errors/invalid_relation_option.rb +4 -2
- data/lib/mongoid/errors/invalid_scope.rb +2 -0
- data/lib/mongoid/errors/invalid_session_use.rb +2 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -0
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/invalid_time.rb +2 -0
- data/lib/mongoid/errors/invalid_value.rb +2 -0
- data/lib/mongoid/errors/inverse_not_found.rb +3 -1
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -0
- data/lib/mongoid/errors/mixed_relations.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +2 -0
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -1
- data/lib/mongoid/errors/no_client_config.rb +2 -0
- data/lib/mongoid/errors/no_client_database.rb +2 -0
- data/lib/mongoid/errors/no_client_hosts.rb +2 -0
- data/lib/mongoid/errors/no_clients_config.rb +2 -0
- data/lib/mongoid/errors/no_default_client.rb +2 -0
- data/lib/mongoid/errors/no_environment.rb +2 -0
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -0
- data/lib/mongoid/errors/no_metadata.rb +2 -0
- data/lib/mongoid/errors/no_parent.rb +2 -0
- data/lib/mongoid/errors/readonly_attribute.rb +2 -0
- data/lib/mongoid/errors/readonly_document.rb +2 -0
- data/lib/mongoid/errors/scope_overwrite.rb +2 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -0
- data/lib/mongoid/errors/unknown_model.rb +2 -0
- data/lib/mongoid/errors/unsaved_document.rb +2 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -0
- data/lib/mongoid/errors/validations.rb +2 -0
- data/lib/mongoid/evolvable.rb +3 -1
- data/lib/mongoid/extensions.rb +2 -0
- data/lib/mongoid/extensions/array.rb +23 -6
- data/lib/mongoid/extensions/big_decimal.rb +2 -0
- data/lib/mongoid/extensions/boolean.rb +2 -0
- data/lib/mongoid/extensions/date.rb +13 -3
- data/lib/mongoid/extensions/date_time.rb +4 -3
- data/lib/mongoid/extensions/decimal128.rb +2 -0
- data/lib/mongoid/extensions/false_class.rb +2 -0
- data/lib/mongoid/extensions/float.rb +5 -3
- data/lib/mongoid/extensions/hash.rb +51 -9
- data/lib/mongoid/extensions/integer.rb +5 -3
- data/lib/mongoid/extensions/module.rb +2 -0
- data/lib/mongoid/extensions/nil_class.rb +2 -0
- data/lib/mongoid/extensions/object.rb +16 -4
- data/lib/mongoid/extensions/object_id.rb +2 -0
- data/lib/mongoid/extensions/range.rb +2 -0
- data/lib/mongoid/extensions/regexp.rb +3 -1
- data/lib/mongoid/extensions/set.rb +2 -0
- data/lib/mongoid/extensions/string.rb +18 -9
- data/lib/mongoid/extensions/symbol.rb +2 -0
- data/lib/mongoid/extensions/time.rb +14 -0
- data/lib/mongoid/extensions/time_with_zone.rb +14 -0
- data/lib/mongoid/extensions/true_class.rb +2 -0
- data/lib/mongoid/factory.rb +28 -5
- data/lib/mongoid/fields.rb +5 -2
- data/lib/mongoid/fields/foreign_key.rb +3 -1
- data/lib/mongoid/fields/localized.rb +2 -0
- data/lib/mongoid/fields/standard.rb +6 -3
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields/validators/macro.rb +13 -2
- data/lib/mongoid/findable.rb +9 -4
- data/lib/mongoid/indexable.rb +3 -1
- data/lib/mongoid/indexable/specification.rb +3 -1
- data/lib/mongoid/indexable/validators/options.rb +2 -0
- data/lib/mongoid/inspectable.rb +3 -1
- data/lib/mongoid/interceptable.rb +9 -3
- data/lib/mongoid/loggable.rb +13 -7
- data/lib/mongoid/matchable.rb +2 -0
- data/lib/mongoid/matchable/all.rb +2 -0
- data/lib/mongoid/matchable/and.rb +2 -0
- data/lib/mongoid/matchable/default.rb +2 -0
- data/lib/mongoid/matchable/elem_match.rb +2 -0
- data/lib/mongoid/matchable/eq.rb +1 -0
- data/lib/mongoid/matchable/exists.rb +2 -0
- data/lib/mongoid/matchable/gt.rb +2 -0
- data/lib/mongoid/matchable/gte.rb +2 -0
- data/lib/mongoid/matchable/in.rb +2 -0
- data/lib/mongoid/matchable/lt.rb +2 -0
- data/lib/mongoid/matchable/lte.rb +2 -0
- data/lib/mongoid/matchable/ne.rb +2 -0
- data/lib/mongoid/matchable/nin.rb +2 -0
- data/lib/mongoid/matchable/nor.rb +2 -1
- data/lib/mongoid/matchable/or.rb +2 -0
- data/lib/mongoid/matchable/regexp.rb +5 -2
- data/lib/mongoid/matchable/size.rb +2 -0
- data/lib/mongoid/persistable.rb +133 -15
- data/lib/mongoid/persistable/creatable.rb +3 -1
- data/lib/mongoid/persistable/deletable.rb +3 -1
- data/lib/mongoid/persistable/destroyable.rb +3 -1
- data/lib/mongoid/persistable/incrementable.rb +6 -2
- data/lib/mongoid/persistable/logical.rb +4 -1
- data/lib/mongoid/persistable/poppable.rb +3 -1
- data/lib/mongoid/persistable/pullable.rb +3 -1
- data/lib/mongoid/persistable/pushable.rb +14 -3
- data/lib/mongoid/persistable/renamable.rb +10 -3
- data/lib/mongoid/persistable/savable.rb +3 -1
- data/lib/mongoid/persistable/settable.rb +3 -1
- data/lib/mongoid/persistable/unsettable.rb +8 -3
- data/lib/mongoid/persistable/updatable.rb +3 -1
- data/lib/mongoid/persistable/upsertable.rb +3 -1
- data/lib/mongoid/persistence_context.rb +27 -15
- data/lib/mongoid/positional.rb +2 -0
- data/lib/mongoid/query_cache.rb +10 -9
- data/lib/mongoid/railtie.rb +3 -1
- data/lib/mongoid/railties/controller_runtime.rb +4 -1
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +4 -2
- data/lib/mongoid/scopable.rb +2 -1
- data/lib/mongoid/selectable.rb +3 -1
- data/lib/mongoid/serializable.rb +23 -13
- data/lib/mongoid/shardable.rb +59 -5
- data/lib/mongoid/stateful.rb +3 -1
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +50 -0
- data/lib/mongoid/threaded.rb +2 -0
- data/lib/mongoid/threaded/lifecycle.rb +2 -0
- data/lib/mongoid/timestamps.rb +3 -1
- data/lib/mongoid/timestamps/created.rb +3 -1
- data/lib/mongoid/timestamps/created/short.rb +2 -0
- data/lib/mongoid/timestamps/short.rb +2 -0
- data/lib/mongoid/timestamps/timeless.rb +6 -2
- data/lib/mongoid/timestamps/updated.rb +3 -1
- data/lib/mongoid/timestamps/updated/short.rb +2 -0
- data/lib/mongoid/touchable.rb +20 -12
- data/lib/mongoid/traversable.rb +4 -2
- data/lib/mongoid/validatable.rb +7 -5
- data/lib/mongoid/validatable/associated.rb +4 -2
- data/lib/mongoid/validatable/format.rb +2 -0
- data/lib/mongoid/validatable/length.rb +2 -0
- data/lib/mongoid/validatable/localizable.rb +2 -0
- data/lib/mongoid/validatable/macros.rb +2 -0
- data/lib/mongoid/validatable/presence.rb +4 -2
- data/lib/mongoid/validatable/queryable.rb +2 -0
- data/lib/mongoid/validatable/uniqueness.rb +5 -3
- data/lib/mongoid/version.rb +2 -1
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +44 -29
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -0
- data/lib/rails/mongoid.rb +4 -2
- data/lib/support/ruby_version.rb +3 -0
- data/spec/app/models/account.rb +3 -0
- data/spec/app/models/acolyte.rb +3 -0
- data/spec/app/models/actor.rb +3 -0
- data/spec/app/models/actress.rb +3 -0
- data/spec/app/models/address.rb +3 -0
- data/spec/app/models/address_component.rb +3 -0
- data/spec/app/models/address_number.rb +3 -0
- data/spec/app/models/agency.rb +3 -0
- data/spec/app/models/agent.rb +3 -0
- data/spec/app/models/album.rb +3 -0
- data/spec/app/models/alert.rb +3 -0
- data/spec/app/models/animal.rb +3 -0
- data/spec/app/models/answer.rb +3 -0
- data/spec/app/models/appointment.rb +3 -0
- data/spec/app/models/array_field.rb +1 -0
- data/spec/app/models/article.rb +3 -0
- data/spec/app/models/artist.rb +3 -0
- data/spec/app/models/artwork.rb +3 -0
- data/spec/app/models/audio.rb +3 -0
- data/spec/app/models/augmentation.rb +3 -0
- data/spec/app/models/author.rb +3 -0
- data/spec/app/models/baby.rb +3 -0
- data/spec/app/models/band.rb +3 -0
- data/spec/app/models/bar.rb +3 -0
- data/spec/app/models/basic.rb +3 -0
- data/spec/app/models/bed.rb +3 -0
- data/spec/app/models/big_palette.rb +3 -0
- data/spec/app/models/birthday.rb +3 -0
- data/spec/app/models/bomb.rb +3 -0
- data/spec/app/models/book.rb +3 -0
- data/spec/app/models/breed.rb +3 -0
- data/spec/app/models/browser.rb +3 -0
- data/spec/app/models/building.rb +3 -0
- data/spec/app/models/building_address.rb +3 -0
- data/spec/app/models/bus.rb +3 -0
- data/spec/app/models/business.rb +3 -0
- data/spec/app/models/callback_test.rb +3 -0
- data/spec/app/models/canvas.rb +3 -0
- data/spec/app/models/car.rb +3 -0
- data/spec/app/models/cat.rb +3 -0
- data/spec/app/models/category.rb +3 -0
- data/spec/app/models/child.rb +3 -0
- data/spec/app/models/child_doc.rb +3 -0
- data/spec/app/models/church.rb +3 -0
- data/spec/app/models/circle.rb +3 -0
- data/spec/app/models/circuit.rb +3 -0
- data/spec/app/models/circus.rb +3 -0
- data/spec/app/models/code.rb +3 -0
- data/spec/app/models/coding.rb +4 -0
- data/spec/app/models/coding/pull_request.rb +12 -0
- data/spec/app/models/comment.rb +3 -0
- data/spec/app/models/company.rb +3 -0
- data/spec/app/models/consumption_period.rb +3 -0
- data/spec/app/models/contextable_item.rb +3 -0
- data/spec/app/models/contractor.rb +3 -0
- data/spec/app/models/cookie.rb +3 -0
- data/spec/app/models/country_code.rb +3 -0
- data/spec/app/models/courier_job.rb +3 -0
- data/spec/app/models/definition.rb +3 -0
- data/spec/app/models/delegating_patient.rb +16 -0
- data/spec/app/models/description.rb +3 -0
- data/spec/app/models/dictionary.rb +3 -0
- data/spec/app/models/division.rb +3 -0
- data/spec/app/models/doctor.rb +3 -0
- data/spec/app/models/dog.rb +3 -0
- data/spec/app/models/dokument.rb +3 -0
- data/spec/app/models/draft.rb +3 -0
- data/spec/app/models/dragon.rb +3 -0
- data/spec/app/models/driver.rb +3 -0
- data/spec/app/models/drug.rb +3 -0
- data/spec/app/models/dungeon.rb +3 -0
- data/spec/app/models/edit.rb +3 -0
- data/spec/app/models/email.rb +3 -0
- data/spec/app/models/employer.rb +3 -0
- data/spec/app/models/entry.rb +3 -0
- data/spec/app/models/eraser.rb +3 -0
- data/spec/app/models/even.rb +3 -0
- data/spec/app/models/event.rb +3 -0
- data/spec/app/models/exhibition.rb +3 -0
- data/spec/app/models/exhibitor.rb +3 -0
- data/spec/app/models/explosion.rb +3 -0
- data/spec/app/models/eye.rb +3 -0
- data/spec/app/models/eye_bowl.rb +3 -0
- data/spec/app/models/face.rb +3 -0
- data/spec/app/models/favorite.rb +3 -0
- data/spec/app/models/filesystem.rb +3 -0
- data/spec/app/models/fire_hydrant.rb +3 -0
- data/spec/app/models/firefox.rb +3 -0
- data/spec/app/models/fish.rb +3 -0
- data/spec/app/models/folder.rb +3 -0
- data/spec/app/models/folder_item.rb +3 -0
- data/spec/app/models/fruits.rb +3 -0
- data/spec/app/models/game.rb +3 -0
- data/spec/app/models/ghost.rb +3 -0
- data/spec/app/models/home.rb +3 -0
- data/spec/app/models/house.rb +3 -0
- data/spec/app/models/html_writer.rb +3 -0
- data/spec/app/models/id_key.rb +3 -0
- data/spec/app/models/image.rb +3 -0
- data/spec/app/models/implant.rb +3 -0
- data/spec/app/models/item.rb +3 -0
- data/spec/app/models/jar.rb +3 -0
- data/spec/app/models/kaleidoscope.rb +3 -0
- data/spec/app/models/kangaroo.rb +4 -1
- data/spec/app/models/label.rb +3 -0
- data/spec/app/models/language.rb +3 -0
- data/spec/app/models/lat_lng.rb +3 -0
- data/spec/app/models/league.rb +3 -0
- data/spec/app/models/learner.rb +3 -0
- data/spec/app/models/line_item.rb +3 -0
- data/spec/app/models/location.rb +3 -0
- data/spec/app/models/login.rb +3 -0
- data/spec/app/models/manufacturer.rb +3 -0
- data/spec/app/models/meat.rb +3 -0
- data/spec/app/models/membership.rb +3 -0
- data/spec/app/models/message.rb +3 -0
- data/spec/app/models/minim.rb +1 -1
- data/spec/app/models/mixed_drink.rb +3 -0
- data/spec/app/models/movie.rb +3 -0
- data/spec/app/models/my_hash.rb +3 -0
- data/spec/app/models/name.rb +3 -0
- data/spec/app/models/name_only.rb +9 -0
- data/spec/app/models/node.rb +3 -0
- data/spec/app/models/note.rb +3 -0
- data/spec/app/models/odd.rb +3 -0
- data/spec/app/models/ordered_post.rb +3 -0
- data/spec/app/models/ordered_preference.rb +3 -0
- data/spec/app/models/oscar.rb +3 -0
- data/spec/app/models/other_owner_object.rb +3 -0
- data/spec/app/models/override.rb +3 -0
- data/spec/app/models/ownable.rb +3 -0
- data/spec/app/models/owner.rb +3 -0
- data/spec/app/models/pack.rb +3 -0
- data/spec/app/models/page.rb +3 -0
- data/spec/app/models/page_question.rb +3 -0
- data/spec/app/models/palette.rb +3 -0
- data/spec/app/models/parent.rb +3 -0
- data/spec/app/models/parent_doc.rb +3 -0
- data/spec/app/models/passport.rb +3 -0
- data/spec/app/models/patient.rb +3 -0
- data/spec/app/models/pdf_writer.rb +3 -0
- data/spec/app/models/pencil.rb +3 -0
- data/spec/app/models/person.rb +3 -0
- data/spec/app/models/pet.rb +3 -0
- data/spec/app/models/pet_owner.rb +3 -0
- data/spec/app/models/phone.rb +3 -0
- data/spec/app/models/pizza.rb +3 -0
- data/spec/app/models/player.rb +3 -0
- data/spec/app/models/post.rb +3 -0
- data/spec/app/models/post_genre.rb +3 -0
- data/spec/app/models/powerup.rb +3 -0
- data/spec/app/models/preference.rb +3 -0
- data/spec/app/models/princess.rb +3 -0
- data/spec/app/models/product.rb +3 -0
- data/spec/app/models/profile.rb +3 -0
- data/spec/app/models/pronunciation.rb +3 -0
- data/spec/app/models/pub.rb +3 -0
- data/spec/app/models/publication.rb +5 -0
- data/spec/app/models/publication/encyclopedia.rb +12 -0
- data/spec/app/models/publication/review.rb +14 -0
- data/spec/app/models/purchase.rb +3 -0
- data/spec/app/models/question.rb +3 -0
- data/spec/app/models/quiz.rb +3 -0
- data/spec/app/models/rating.rb +3 -0
- data/spec/app/models/record.rb +3 -0
- data/spec/app/models/registry.rb +3 -0
- data/spec/app/models/role.rb +3 -0
- data/spec/app/models/root_category.rb +3 -0
- data/spec/app/models/sandwich.rb +3 -0
- data/spec/app/models/scheduler.rb +3 -0
- data/spec/app/models/seo.rb +3 -0
- data/spec/app/models/series.rb +3 -0
- data/spec/app/models/server.rb +3 -0
- data/spec/app/models/service.rb +3 -0
- data/spec/app/models/shape.rb +3 -0
- data/spec/app/models/shelf.rb +3 -0
- data/spec/app/models/shipment_address.rb +3 -0
- data/spec/app/models/shipping_container.rb +3 -0
- data/spec/app/models/shipping_pack.rb +3 -0
- data/spec/app/models/shop.rb +3 -0
- data/spec/app/models/short_agent.rb +3 -0
- data/spec/app/models/short_quiz.rb +3 -0
- data/spec/app/models/simple.rb +3 -0
- data/spec/app/models/slave.rb +3 -0
- data/spec/app/models/song.rb +3 -0
- data/spec/app/models/sound.rb +3 -0
- data/spec/app/models/square.rb +3 -0
- data/spec/app/models/staff.rb +3 -0
- data/spec/app/models/store_as_dup_test1.rb +3 -0
- data/spec/app/models/store_as_dup_test2.rb +3 -0
- data/spec/app/models/store_as_dup_test3.rb +1 -0
- data/spec/app/models/store_as_dup_test4.rb +1 -0
- data/spec/app/models/strategy.rb +3 -0
- data/spec/app/models/sub_item.rb +3 -0
- data/spec/app/models/subscription.rb +3 -0
- data/spec/app/models/survey.rb +3 -0
- data/spec/app/models/symptom.rb +3 -0
- data/spec/app/models/tag.rb +3 -0
- data/spec/app/models/target.rb +3 -0
- data/spec/app/models/template.rb +3 -0
- data/spec/app/models/thing.rb +3 -0
- data/spec/app/models/title.rb +3 -0
- data/spec/app/models/tool.rb +3 -0
- data/spec/app/models/topping.rb +3 -0
- data/spec/app/models/track.rb +3 -0
- data/spec/app/models/translation.rb +3 -0
- data/spec/app/models/tree.rb +3 -0
- data/spec/app/models/truck.rb +3 -0
- data/spec/app/models/updatable.rb +1 -0
- data/spec/app/models/user.rb +3 -0
- data/spec/app/models/user_account.rb +3 -0
- data/spec/app/models/validation_callback.rb +3 -0
- data/spec/app/models/vehicle.rb +3 -0
- data/spec/app/models/version.rb +3 -0
- data/spec/app/models/vertex.rb +4 -1
- data/spec/app/models/vet_visit.rb +3 -0
- data/spec/app/models/video.rb +3 -0
- data/spec/app/models/video_game.rb +3 -0
- data/spec/app/models/weapon.rb +3 -0
- data/spec/app/models/wiki_page.rb +3 -0
- data/spec/app/models/word.rb +3 -0
- data/spec/app/models/word_origin.rb +3 -0
- data/spec/app/models/writer.rb +3 -0
- data/spec/config/mongoid.yml +1 -0
- data/spec/integration/app_spec.rb +192 -0
- data/spec/integration/associations/belongs_to_spec.rb +3 -0
- data/spec/integration/associations/embedded_spec.rb +175 -0
- data/spec/integration/associations/foreign_key_spec.rb +99 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +65 -0
- data/spec/integration/associations/reverse_population_spec.rb +35 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +37 -0
- data/spec/integration/criteria/default_scope_spec.rb +21 -0
- data/spec/integration/criteria/logical_spec.rb +94 -0
- data/spec/integration/document_spec.rb +22 -0
- data/spec/integration/i18n_fallbacks_spec.rb +90 -0
- data/spec/integration/shardable_spec.rb +133 -0
- data/spec/lite_spec_helper.rb +20 -5
- data/spec/mongoid/association/accessors_spec.rb +3 -0
- data/spec/mongoid/association/auto_save_spec.rb +3 -0
- data/spec/mongoid/association/builders_spec.rb +3 -0
- data/spec/mongoid/association/constrainable_spec.rb +3 -0
- data/spec/mongoid/association/counter_cache_spec.rb +3 -0
- data/spec/mongoid/association/depending_spec.rb +3 -0
- data/spec/mongoid/association/eager_spec.rb +3 -0
- data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -0
- data/spec/mongoid/association/embedded/dirty_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +4 -1
- data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +53 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +52 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +14 -1
- data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +3 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +29 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +4 -3
- data/spec/mongoid/association/macros_spec.rb +3 -0
- data/spec/mongoid/association/nested/many_spec.rb +3 -0
- data/spec/mongoid/association/nested/one_spec.rb +3 -0
- data/spec/mongoid/association/options_spec.rb +3 -0
- data/spec/mongoid/association/polymorphic_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +205 -10
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +3 -0
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +16 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +26 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +39 -15
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +40 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +26 -2
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_many/eager_spec.rb +18 -3
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +5 -1
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one/binding_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -3
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +3 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +3 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +3 -0
- data/spec/mongoid/association/reflections_spec.rb +3 -0
- data/spec/mongoid/association/syncable_spec.rb +3 -0
- data/spec/mongoid/association_spec.rb +3 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +3 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +3 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +3 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +3 -0
- data/spec/mongoid/atomic/paths_spec.rb +3 -0
- data/spec/mongoid/atomic_spec.rb +3 -0
- data/spec/mongoid/attributes/nested_spec.rb +3 -0
- data/spec/mongoid/attributes/readonly_spec.rb +3 -0
- data/spec/mongoid/attributes_spec.rb +3 -0
- data/spec/mongoid/cacheable_spec.rb +3 -0
- data/spec/mongoid/changeable_spec.rb +26 -0
- data/spec/mongoid/clients/factory_spec.rb +38 -20
- data/spec/mongoid/clients/options_spec.rb +26 -15
- data/spec/mongoid/clients/sessions_spec.rb +11 -4
- data/spec/mongoid/clients/transactions_spec.rb +26 -11
- data/spec/mongoid/clients_spec.rb +5 -2
- data/spec/mongoid/composable_spec.rb +3 -0
- data/spec/mongoid/config/environment_spec.rb +3 -0
- data/spec/mongoid/config/options_spec.rb +23 -3
- data/spec/mongoid/config_spec.rb +39 -0
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +3 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +3 -0
- data/spec/mongoid/contextual/atomic_spec.rb +120 -10
- data/spec/mongoid/contextual/geo_near_spec.rb +3 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +23 -5
- data/spec/mongoid/contextual/memory_spec.rb +3 -0
- data/spec/mongoid/contextual/mongo_spec.rb +81 -53
- data/spec/mongoid/contextual/none_spec.rb +3 -0
- data/spec/mongoid/copyable_spec.rb +3 -0
- data/spec/mongoid/copyable_spec_models.rb +3 -0
- data/spec/mongoid/criteria/findable_spec.rb +58 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +3 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +3 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +7 -3
- data/spec/mongoid/criteria/options_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +135 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +36 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +10 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +24 -16
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +48 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1348 -281
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +996 -2159
- data/spec/mongoid/criteria/queryable/selector_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +190 -0
- data/spec/mongoid/criteria/scopable_spec.rb +3 -0
- data/spec/mongoid/criteria_spec.rb +73 -2
- data/spec/mongoid/document_persistence_context_spec.rb +33 -0
- data/spec/mongoid/document_query_spec.rb +39 -0
- data/spec/mongoid/document_spec.rb +3 -0
- data/spec/mongoid/equality_spec.rb +3 -0
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +6 -3
- data/spec/mongoid/errors/callback_spec.rb +3 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +3 -0
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +3 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +3 -0
- data/spec/mongoid/errors/eager_load_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +5 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +5 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +3 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +4 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +3 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +3 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -0
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +3 -0
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -0
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -0
- data/spec/mongoid/errors/no_clients_config_spec.rb +3 -0
- data/spec/mongoid/errors/no_environment_spec.rb +3 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +5 -2
- data/spec/mongoid/errors/no_parent_spec.rb +4 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +3 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -0
- data/spec/mongoid/errors/unsaved_document_spec.rb +4 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -0
- data/spec/mongoid/errors/validations_spec.rb +3 -0
- data/spec/mongoid/extensions/array_spec.rb +26 -43
- data/spec/mongoid/extensions/big_decimal_spec.rb +3 -0
- data/spec/mongoid/extensions/binary_spec.rb +3 -0
- data/spec/mongoid/extensions/boolean_spec.rb +3 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +336 -0
- data/spec/mongoid/extensions/date_spec.rb +9 -160
- data/spec/mongoid/extensions/date_time_spec.rb +18 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +3 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -0
- data/spec/mongoid/extensions/float_spec.rb +18 -3
- data/spec/mongoid/extensions/hash_spec.rb +106 -0
- data/spec/mongoid/extensions/integer_spec.rb +15 -2
- data/spec/mongoid/extensions/module_spec.rb +3 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +3 -0
- data/spec/mongoid/extensions/object_id_spec.rb +3 -0
- data/spec/mongoid/extensions/object_spec.rb +14 -24
- data/spec/mongoid/extensions/range_spec.rb +3 -0
- data/spec/mongoid/extensions/regexp_spec.rb +3 -0
- data/spec/mongoid/extensions/set_spec.rb +3 -0
- data/spec/mongoid/extensions/string_spec.rb +60 -26
- data/spec/mongoid/extensions/symbol_spec.rb +3 -0
- data/spec/mongoid/extensions/time_spec.rb +30 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -0
- data/spec/mongoid/extensions_spec.rb +3 -0
- data/spec/mongoid/factory_spec.rb +27 -0
- data/spec/mongoid/fields/foreign_key_spec.rb +3 -0
- data/spec/mongoid/fields/localized_spec.rb +3 -0
- data/spec/mongoid/fields/standard_spec.rb +3 -0
- data/spec/mongoid/fields_spec.rb +18 -0
- data/spec/mongoid/findable_spec.rb +3 -0
- data/spec/mongoid/indexable/specification_spec.rb +3 -0
- data/spec/mongoid/indexable_spec.rb +9 -4
- data/spec/mongoid/inspectable_spec.rb +3 -0
- data/spec/mongoid/interceptable_spec.rb +65 -0
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +3 -0
- data/spec/mongoid/matchable/all_spec.rb +3 -0
- data/spec/mongoid/matchable/and_spec.rb +3 -0
- data/spec/mongoid/matchable/default_spec.rb +4 -1
- data/spec/mongoid/matchable/elem_match_spec.rb +3 -0
- data/spec/mongoid/matchable/eq_spec.rb +1 -0
- data/spec/mongoid/matchable/exists_spec.rb +3 -0
- data/spec/mongoid/matchable/gt_spec.rb +3 -0
- data/spec/mongoid/matchable/gte_spec.rb +3 -0
- data/spec/mongoid/matchable/in_spec.rb +3 -0
- data/spec/mongoid/matchable/lt_spec.rb +3 -0
- data/spec/mongoid/matchable/lte_spec.rb +3 -0
- data/spec/mongoid/matchable/ne_spec.rb +3 -0
- data/spec/mongoid/matchable/nin_spec.rb +3 -0
- data/spec/mongoid/matchable/nor_spec.rb +1 -0
- data/spec/mongoid/matchable/or_spec.rb +3 -0
- data/spec/mongoid/matchable/regexp_spec.rb +5 -2
- data/spec/mongoid/matchable/size_spec.rb +3 -0
- data/spec/mongoid/matchable_spec.rb +5 -2
- data/spec/mongoid/persistable/creatable_spec.rb +3 -0
- data/spec/mongoid/persistable/deletable_spec.rb +3 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +3 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +17 -0
- data/spec/mongoid/persistable/logical_spec.rb +17 -0
- data/spec/mongoid/persistable/poppable_spec.rb +17 -0
- data/spec/mongoid/persistable/pullable_spec.rb +31 -0
- data/spec/mongoid/persistable/pushable_spec.rb +86 -1
- data/spec/mongoid/persistable/renamable_spec.rb +17 -0
- data/spec/mongoid/persistable/savable_spec.rb +3 -0
- data/spec/mongoid/persistable/settable_spec.rb +17 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +17 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +3 -0
- data/spec/mongoid/persistable_spec.rb +85 -8
- data/spec/mongoid/persistence_context_spec.rb +3 -0
- data/spec/mongoid/positional_spec.rb +3 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +48 -0
- data/spec/mongoid/query_cache_spec.rb +5 -45
- data/spec/mongoid/relations/proxy_spec.rb +4 -1
- data/spec/mongoid/reloadable_spec.rb +3 -0
- data/spec/mongoid/scopable_spec.rb +5 -1
- data/spec/mongoid/selectable_spec.rb +3 -0
- data/spec/mongoid/serializable_spec.rb +132 -18
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +72 -16
- data/spec/mongoid/stateful_spec.rb +3 -0
- data/spec/mongoid/tasks/database_rake_spec.rb +16 -13
- data/spec/mongoid/tasks/database_spec.rb +4 -1
- data/spec/mongoid/threaded_spec.rb +3 -0
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -0
- data/spec/mongoid/timestamps/created_spec.rb +3 -0
- data/spec/mongoid/timestamps/timeless_spec.rb +3 -0
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -0
- data/spec/mongoid/timestamps/updated_spec.rb +3 -0
- data/spec/mongoid/timestamps_spec.rb +3 -0
- data/spec/mongoid/touchable_spec.rb +49 -3
- data/spec/mongoid/traversable_spec.rb +3 -0
- data/spec/mongoid/validatable/associated_spec.rb +3 -0
- data/spec/mongoid/validatable/format_spec.rb +3 -0
- data/spec/mongoid/validatable/length_spec.rb +3 -0
- data/spec/mongoid/validatable/numericality_spec.rb +3 -0
- data/spec/mongoid/validatable/presence_spec.rb +3 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +3 -0
- data/spec/mongoid/validatable_spec.rb +3 -0
- data/spec/mongoid_spec.rb +3 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +4 -1
- data/spec/rails/mongoid_spec.rb +5 -2
- data/spec/spec_helper.rb +21 -44
- data/spec/support/authorization.rb +3 -0
- data/spec/support/child_process_helper.rb +76 -0
- data/spec/support/cluster_config.rb +3 -3
- data/spec/support/constraints.rb +185 -30
- data/spec/support/expectations.rb +6 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/lite_constraints.rb +22 -0
- data/spec/support/macros.rb +1 -0
- data/spec/support/shared/time.rb +54 -0
- data/spec/support/spec_config.rb +15 -4
- metadata +544 -472
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
module Referenced
|
|
@@ -8,7 +10,7 @@ module Mongoid
|
|
|
8
10
|
class Binding
|
|
9
11
|
include Bindable
|
|
10
12
|
|
|
11
|
-
# Binds the base object to the inverse of the
|
|
13
|
+
# Binds the base object to the inverse of the association. This is so we
|
|
12
14
|
# are referenced to the actual objects themselves on both sides.
|
|
13
15
|
#
|
|
14
16
|
# This case sets the association on the inverse object as well as the
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
module Referenced
|
|
@@ -16,11 +18,12 @@ module Mongoid
|
|
|
16
18
|
# relation.build(meta, attrs)
|
|
17
19
|
#
|
|
18
20
|
# @param [ Object ] base The base object.
|
|
19
|
-
# @param [ Object ] object The object to use to build the
|
|
20
|
-
# @param [ String ] type The type of the
|
|
21
|
+
# @param [ Object ] object The object to use to build the association.
|
|
22
|
+
# @param [ String ] type The type of the association.
|
|
23
|
+
# @param [ nil ] selected_fields Must be nil.
|
|
21
24
|
#
|
|
22
25
|
# @return [ Document ] A single document.
|
|
23
|
-
def build(base, object, type = nil)
|
|
26
|
+
def build(base, object, type = nil, selected_fields = nil)
|
|
24
27
|
return object unless query?(object)
|
|
25
28
|
execute_query(object, type)
|
|
26
29
|
end
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
module Referenced
|
|
@@ -10,8 +12,6 @@ module Mongoid
|
|
|
10
12
|
private
|
|
11
13
|
|
|
12
14
|
def preload
|
|
13
|
-
raise Errors::EagerLoad.new(@association.name) if @association.polymorphic?
|
|
14
|
-
|
|
15
15
|
@docs.each do |d|
|
|
16
16
|
set_relation(d, nil)
|
|
17
17
|
end
|
|
@@ -22,6 +22,44 @@ module Mongoid
|
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
# Retrieves the documents referenced by the association, and
|
|
26
|
+
# yields each one sequentially to the provided block. If the
|
|
27
|
+
# association is not polymorphic, all documents are retrieved in
|
|
28
|
+
# a single query. If the association is polymorphic, one query is
|
|
29
|
+
# issued per association target class.
|
|
30
|
+
def each_loaded_document(&block)
|
|
31
|
+
if @association.polymorphic?
|
|
32
|
+
keys_by_type_from_docs.each do |type, keys|
|
|
33
|
+
each_loaded_document_of_class(Object.const_get(type), keys, &block)
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
super
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Returns a map from association target class name to foreign key
|
|
41
|
+
# values for the documents of that association target class,
|
|
42
|
+
# as referenced by this association.
|
|
43
|
+
def keys_by_type_from_docs
|
|
44
|
+
inverse_type_field = @association.inverse_type
|
|
45
|
+
|
|
46
|
+
@docs.each_with_object({}) do |doc, keys_by_type|
|
|
47
|
+
next unless doc.respond_to?(inverse_type_field) && doc.respond_to?(group_by_key)
|
|
48
|
+
inverse_type_name = doc.send(inverse_type_field)
|
|
49
|
+
# If a particular document does not have a value for this
|
|
50
|
+
# association, inverse_type_name will be nil.
|
|
51
|
+
next if inverse_type_name.nil?
|
|
52
|
+
|
|
53
|
+
key_value = doc.send(group_by_key)
|
|
54
|
+
# If a document has the *_type field set but the corresponding
|
|
55
|
+
# *_id field not set, the key value here will be nil.
|
|
56
|
+
next unless key_value
|
|
57
|
+
|
|
58
|
+
keys_by_type[inverse_type_name] ||= []
|
|
59
|
+
keys_by_type[inverse_type_name].push(key_value)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
25
63
|
def group_by_key
|
|
26
64
|
@association.foreign_key
|
|
27
65
|
end
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
module Referenced
|
|
5
7
|
class BelongsTo
|
|
6
8
|
|
|
7
|
-
# This class handles all
|
|
9
|
+
# This class handles all behavior for associations that are either
|
|
8
10
|
# one-to-many or one-to-one, where the foreign key is stored on this side
|
|
9
|
-
# of the
|
|
11
|
+
# of the association and the reference is to document(s) in another
|
|
10
12
|
# collection.
|
|
11
13
|
class Proxy < Association::One
|
|
12
14
|
include Evolvable
|
|
@@ -16,9 +18,9 @@ module Mongoid
|
|
|
16
18
|
# @example Create the new proxy.
|
|
17
19
|
# Association::BelongsTo::Proxy.new(game, person, association)
|
|
18
20
|
#
|
|
19
|
-
# @param [ Document ] base The document this
|
|
21
|
+
# @param [ Document ] base The document this association hangs off of.
|
|
20
22
|
# @param [ Document, Array<Document> ] target The target (parent) of the
|
|
21
|
-
#
|
|
23
|
+
# association.
|
|
22
24
|
# @param [ Association ] association The association object.
|
|
23
25
|
def initialize(base, target, association)
|
|
24
26
|
init(base, target, association) do
|
|
@@ -31,7 +33,7 @@ module Mongoid
|
|
|
31
33
|
# document by deleting the foreign key and the reference, orphaning
|
|
32
34
|
# the target document in the process.
|
|
33
35
|
#
|
|
34
|
-
# @example Nullify the
|
|
36
|
+
# @example Nullify the association.
|
|
35
37
|
# person.game.nullify
|
|
36
38
|
#
|
|
37
39
|
def nullify
|
|
@@ -40,14 +42,14 @@ module Mongoid
|
|
|
40
42
|
end
|
|
41
43
|
|
|
42
44
|
# Substitutes the supplied target documents for the existing document
|
|
43
|
-
# in the
|
|
45
|
+
# in the association.
|
|
44
46
|
#
|
|
45
|
-
# @example Substitute the
|
|
47
|
+
# @example Substitute the association.
|
|
46
48
|
# name.substitute(new_name)
|
|
47
49
|
#
|
|
48
50
|
# @param [ Document, Array<Document> ] replacement The replacement.
|
|
49
51
|
#
|
|
50
|
-
# @return [ self, nil ] The
|
|
52
|
+
# @return [ self, nil ] The association or nil.
|
|
51
53
|
#
|
|
52
54
|
# @since 2.0.0.rc.1
|
|
53
55
|
def substitute(replacement)
|
|
@@ -61,7 +63,7 @@ module Mongoid
|
|
|
61
63
|
|
|
62
64
|
private
|
|
63
65
|
|
|
64
|
-
# Instantiate the binding associated with this
|
|
66
|
+
# Instantiate the binding associated with this association.
|
|
65
67
|
#
|
|
66
68
|
# @example Get the binding object.
|
|
67
69
|
# binding([ address ])
|
|
@@ -90,12 +92,12 @@ module Mongoid
|
|
|
90
92
|
_association.build(klass, replacement)
|
|
91
93
|
end
|
|
92
94
|
|
|
93
|
-
# Are we able to persist this
|
|
95
|
+
# Are we able to persist this association?
|
|
94
96
|
#
|
|
95
|
-
# @example Can we persist the
|
|
97
|
+
# @example Can we persist the association?
|
|
96
98
|
# relation.persistable?
|
|
97
99
|
#
|
|
98
|
-
# @return [ true, false ] If the
|
|
100
|
+
# @return [ true, false ] If the association is persistable.
|
|
99
101
|
#
|
|
100
102
|
# @since 2.1.0
|
|
101
103
|
def persistable?
|
|
@@ -116,10 +118,10 @@ module Mongoid
|
|
|
116
118
|
Eager.new(association, docs)
|
|
117
119
|
end
|
|
118
120
|
|
|
119
|
-
# Returns true if the
|
|
121
|
+
# Returns true if the association is an embedded one. In this case
|
|
120
122
|
# always false.
|
|
121
123
|
#
|
|
122
|
-
# @example Is this
|
|
124
|
+
# @example Is this association embedded?
|
|
123
125
|
# Association::BelongsTo::Proxy.embedded?
|
|
124
126
|
#
|
|
125
127
|
# @return [ false ] Always false.
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
module Referenced
|
|
@@ -15,7 +17,7 @@ module Mongoid
|
|
|
15
17
|
# BelongsTo.new(association, parent_docs)
|
|
16
18
|
#
|
|
17
19
|
# @param [ Array<Association> ] associations Associations to eager load
|
|
18
|
-
# @param [ Array<Document> ] docs Documents to preload the
|
|
20
|
+
# @param [ Array<Document> ] docs Documents to preload the associations
|
|
19
21
|
#
|
|
20
22
|
# @return [ Base ] The eager load preloader
|
|
21
23
|
#
|
|
@@ -28,7 +30,7 @@ module Mongoid
|
|
|
28
30
|
|
|
29
31
|
# Run the preloader.
|
|
30
32
|
#
|
|
31
|
-
# @example Preload the
|
|
33
|
+
# @example Preload the associations into the documents.
|
|
32
34
|
# loader.run
|
|
33
35
|
#
|
|
34
36
|
# @return [ Array ] The list of documents given.
|
|
@@ -45,11 +47,11 @@ module Mongoid
|
|
|
45
47
|
|
|
46
48
|
protected
|
|
47
49
|
|
|
48
|
-
# Preload the current
|
|
50
|
+
# Preload the current association.
|
|
49
51
|
#
|
|
50
52
|
# This method should be implemented in the subclass
|
|
51
53
|
#
|
|
52
|
-
# @example Preload the current
|
|
54
|
+
# @example Preload the current association into the documents.
|
|
53
55
|
# loader.preload
|
|
54
56
|
#
|
|
55
57
|
# @since 4.0.0
|
|
@@ -57,17 +59,29 @@ module Mongoid
|
|
|
57
59
|
raise NotImplementedError
|
|
58
60
|
end
|
|
59
61
|
|
|
60
|
-
#
|
|
61
|
-
#
|
|
62
|
-
#
|
|
63
|
-
#
|
|
62
|
+
# Retrieves the documents referenced by the association, and
|
|
63
|
+
# yields each one sequentially to the provided block. If the
|
|
64
|
+
# association is not polymorphic, all documents are retrieved in
|
|
65
|
+
# a single query. If the association is polymorphic, one query is
|
|
66
|
+
# issued per association target class.
|
|
64
67
|
#
|
|
65
68
|
# @since 4.0.0
|
|
66
|
-
def each_loaded_document
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
def each_loaded_document(&block)
|
|
70
|
+
each_loaded_document_of_class(@association.klass, keys_from_docs, &block)
|
|
71
|
+
end
|
|
69
72
|
|
|
70
|
-
|
|
73
|
+
# Retrieves the documents of the specified class, that have the
|
|
74
|
+
# foreign key included in the specified list of keys.
|
|
75
|
+
#
|
|
76
|
+
# When the documents are retrieved, the set of inclusions applied
|
|
77
|
+
# is the set of inclusions applied to the host document minus the
|
|
78
|
+
# association that is being eagerly loaded.
|
|
79
|
+
private def each_loaded_document_of_class(cls, keys)
|
|
80
|
+
# Note: keys should not include nil elements.
|
|
81
|
+
# Upstream code is responsible for eliminating nils from keys.
|
|
82
|
+
return cls.none if keys.empty?
|
|
83
|
+
|
|
84
|
+
criteria = cls.any_in(key => keys)
|
|
71
85
|
criteria.inclusions = criteria.inclusions - [@association]
|
|
72
86
|
criteria.each do |doc|
|
|
73
87
|
yield doc
|
|
@@ -91,6 +105,9 @@ module Mongoid
|
|
|
91
105
|
|
|
92
106
|
# Return a hash with the current documents grouped by key.
|
|
93
107
|
#
|
|
108
|
+
# Documents that do not have a value for the association being loaded
|
|
109
|
+
# are not returned.
|
|
110
|
+
#
|
|
94
111
|
# @example Return a hash with the current documents grouped by key.
|
|
95
112
|
# loader.grouped_docs
|
|
96
113
|
#
|
|
@@ -100,10 +117,15 @@ module Mongoid
|
|
|
100
117
|
def grouped_docs
|
|
101
118
|
@grouped_docs[@association.name] ||= @docs.group_by do |doc|
|
|
102
119
|
doc.send(group_by_key) if doc.respond_to?(group_by_key)
|
|
120
|
+
end.reject do |k, v|
|
|
121
|
+
k.nil?
|
|
103
122
|
end
|
|
104
123
|
end
|
|
105
124
|
|
|
106
|
-
# Group the documents and return the keys
|
|
125
|
+
# Group the documents and return the keys.
|
|
126
|
+
#
|
|
127
|
+
# This method omits nil keys (i.e. keys from documents that do not
|
|
128
|
+
# have a value for the association being loaded).
|
|
107
129
|
#
|
|
108
130
|
# @example
|
|
109
131
|
# loader.keys_from_docs
|
|
@@ -131,10 +153,10 @@ module Mongoid
|
|
|
131
153
|
|
|
132
154
|
# Set the pre-loaded document into its parent.
|
|
133
155
|
#
|
|
134
|
-
# @example Set docs into parent using the current
|
|
156
|
+
# @example Set docs into parent using the current association name.
|
|
135
157
|
# loader.set_relation(doc, docs)
|
|
136
158
|
#
|
|
137
|
-
# @param [ Document ] doc The object to set the
|
|
159
|
+
# @param [ Document ] doc The object to set the association on
|
|
138
160
|
# @param [ Document, Array ] element to set into the parent
|
|
139
161
|
#
|
|
140
162
|
# @since 4.0.0
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
1
4
|
require 'mongoid/association/referenced/has_and_belongs_to_many/binding'
|
|
2
5
|
require 'mongoid/association/referenced/has_and_belongs_to_many/buildable'
|
|
3
6
|
require 'mongoid/association/referenced/has_and_belongs_to_many/proxy'
|
|
@@ -31,7 +34,9 @@ module Mongoid
|
|
|
31
34
|
:foreign_key,
|
|
32
35
|
:index,
|
|
33
36
|
:order,
|
|
34
|
-
:primary_key
|
|
37
|
+
:primary_key,
|
|
38
|
+
:inverse_primary_key,
|
|
39
|
+
:inverse_foreign_key,
|
|
35
40
|
].freeze
|
|
36
41
|
|
|
37
42
|
# The complete list of valid options for this association, including
|
|
@@ -89,7 +94,7 @@ module Mongoid
|
|
|
89
94
|
# @since 7.0
|
|
90
95
|
def validation_default; true; end
|
|
91
96
|
|
|
92
|
-
# Are ids only saved on this side of the
|
|
97
|
+
# Are ids only saved on this side of the association?
|
|
93
98
|
#
|
|
94
99
|
# @return [ true, false ] Whether this association has a forced nil inverse.
|
|
95
100
|
#
|
|
@@ -105,7 +110,7 @@ module Mongoid
|
|
|
105
110
|
# @since 7.0
|
|
106
111
|
def stores_foreign_key?; true; end
|
|
107
112
|
|
|
108
|
-
# Get the
|
|
113
|
+
# Get the association proxy class for this association type.
|
|
109
114
|
#
|
|
110
115
|
# @return [ Association::HasAndBelongsToMany::Proxy ] The proxy class.
|
|
111
116
|
#
|
|
@@ -124,9 +129,9 @@ module Mongoid
|
|
|
124
129
|
default_foreign_key_field
|
|
125
130
|
end
|
|
126
131
|
|
|
127
|
-
# The criteria used for querying this
|
|
132
|
+
# The criteria used for querying this association.
|
|
128
133
|
#
|
|
129
|
-
# @return [ Mongoid::Criteria ] The criteria used for querying this
|
|
134
|
+
# @return [ Mongoid::Criteria ] The criteria used for querying this association.
|
|
130
135
|
#
|
|
131
136
|
# @since 7.0
|
|
132
137
|
def criteria(base, id_list = nil)
|
|
@@ -140,7 +145,9 @@ module Mongoid
|
|
|
140
145
|
#
|
|
141
146
|
# @since 7.0
|
|
142
147
|
def inverse_foreign_key
|
|
143
|
-
if @options.key?(:
|
|
148
|
+
if @options.key?(:inverse_foreign_key)
|
|
149
|
+
@options[:inverse_foreign_key]
|
|
150
|
+
elsif @options.key?(:inverse_of)
|
|
144
151
|
inverse_of ? "#{inverse_of.to_s.singularize}#{FOREIGN_KEY_SUFFIX}" : nil
|
|
145
152
|
else
|
|
146
153
|
"#{inverse_class_name.demodulize.underscore}#{FOREIGN_KEY_SUFFIX}"
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
module Referenced
|
|
5
7
|
class HasAndBelongsToMany
|
|
6
8
|
|
|
7
|
-
# Binding class for all has_and_belongs_to_many
|
|
9
|
+
# Binding class for all has_and_belongs_to_many associations.
|
|
8
10
|
class Binding
|
|
9
11
|
include Bindable
|
|
10
12
|
|
|
11
|
-
# Binds a single document with the inverse
|
|
13
|
+
# Binds a single document with the inverse association. Used
|
|
12
14
|
# specifically when appending to the proxy.
|
|
13
15
|
#
|
|
14
16
|
# @example Bind one document.
|
|
@@ -53,11 +55,15 @@ module Mongoid
|
|
|
53
55
|
|
|
54
56
|
# Find the inverse id referenced by inverse_keys
|
|
55
57
|
def inverse_record_id(doc)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
_base.__send__(inverse_association.primary_key)
|
|
58
|
+
if pk = _association.options[:inverse_primary_key]
|
|
59
|
+
_base.send(pk)
|
|
59
60
|
else
|
|
60
|
-
|
|
61
|
+
inverse_association = determine_inverse_association(doc)
|
|
62
|
+
if inverse_association
|
|
63
|
+
_base.__send__(inverse_association.primary_key)
|
|
64
|
+
else
|
|
65
|
+
_base._id
|
|
66
|
+
end
|
|
61
67
|
end
|
|
62
68
|
end
|
|
63
69
|
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
module Referenced
|
|
@@ -16,11 +18,12 @@ module Mongoid
|
|
|
16
18
|
# relation.build(association, attrs)
|
|
17
19
|
#
|
|
18
20
|
# @param [ Object ] base The base object.
|
|
19
|
-
# @param [ Object ] object The object to use to build the
|
|
21
|
+
# @param [ Object ] object The object to use to build the association.
|
|
20
22
|
# @param [ String ] type Not used in this context.
|
|
23
|
+
# @param [ nil ] selected_fields Must be nil.
|
|
21
24
|
#
|
|
22
25
|
# @return [ Array<Document> ] The documents.
|
|
23
|
-
def build(base, object, type = nil)
|
|
26
|
+
def build(base, object, type = nil, selected_fields = nil)
|
|
24
27
|
if query?(object)
|
|
25
28
|
query_criteria(object)
|
|
26
29
|
else
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
module Association
|
|
4
6
|
module Referenced
|
|
5
7
|
class HasAndBelongsToMany
|
|
6
8
|
|
|
7
|
-
# This class defines the
|
|
9
|
+
# This class defines the behavior for all associations that are a
|
|
8
10
|
# many-to-many between documents in different collections.
|
|
9
11
|
class Proxy < Referenced::HasMany::Proxy
|
|
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.
|
|
@@ -40,7 +42,7 @@ module Mongoid
|
|
|
40
42
|
|
|
41
43
|
alias :push :<<
|
|
42
44
|
|
|
43
|
-
# Appends an array of documents to the
|
|
45
|
+
# Appends an array of documents to the association. Performs a batch
|
|
44
46
|
# insert of the documents instead of persisting one at a time.
|
|
45
47
|
#
|
|
46
48
|
# @example Concat with other documents.
|
|
@@ -74,9 +76,9 @@ module Mongoid
|
|
|
74
76
|
end
|
|
75
77
|
|
|
76
78
|
# Build a new document from the attributes and append it to this
|
|
77
|
-
#
|
|
79
|
+
# association without saving.
|
|
78
80
|
#
|
|
79
|
-
# @example Build a new document on the
|
|
81
|
+
# @example Build a new document on the association.
|
|
80
82
|
# person.posts.build(:title => "A new post")
|
|
81
83
|
#
|
|
82
84
|
# @param [ Hash ] attributes The attributes of the new document.
|
|
@@ -97,8 +99,8 @@ module Mongoid
|
|
|
97
99
|
|
|
98
100
|
alias :new :build
|
|
99
101
|
|
|
100
|
-
# Delete the document from the
|
|
101
|
-
# on the document to nil. If the dependent options on the
|
|
102
|
+
# Delete the document from the association. This will set the foreign key
|
|
103
|
+
# on the document to nil. If the dependent options on the association are
|
|
102
104
|
# :delete or :destroy the appropriate removal will occur.
|
|
103
105
|
#
|
|
104
106
|
# @example Delete the document.
|
|
@@ -123,7 +125,7 @@ module Mongoid
|
|
|
123
125
|
# documents by deleting the foreign keys and the references, orphaning
|
|
124
126
|
# the target documents in the process.
|
|
125
127
|
#
|
|
126
|
-
# @example Nullify the
|
|
128
|
+
# @example Nullify the association.
|
|
127
129
|
# person.preferences.nullify
|
|
128
130
|
#
|
|
129
131
|
# @param [ Array<Document> ] replacement The replacement documents.
|
|
@@ -134,13 +136,18 @@ module Mongoid
|
|
|
134
136
|
execute_callback :before_remove, doc
|
|
135
137
|
end
|
|
136
138
|
unless _association.forced_nil_inverse?
|
|
139
|
+
if field = _association.options[:inverse_primary_key]
|
|
140
|
+
ipk = _base.send(field)
|
|
141
|
+
else
|
|
142
|
+
ipk = _base._id
|
|
143
|
+
end
|
|
137
144
|
if replacement
|
|
138
145
|
objects_to_clear = _base.send(foreign_key) - replacement.collect do |object|
|
|
139
146
|
object.send(_association.primary_key)
|
|
140
147
|
end
|
|
141
|
-
criteria(objects_to_clear).pull(inverse_foreign_key =>
|
|
148
|
+
criteria(objects_to_clear).pull(inverse_foreign_key => ipk)
|
|
142
149
|
else
|
|
143
|
-
criteria.pull(inverse_foreign_key =>
|
|
150
|
+
criteria.pull(inverse_foreign_key => ipk)
|
|
144
151
|
end
|
|
145
152
|
end
|
|
146
153
|
if persistable?
|
|
@@ -167,15 +174,15 @@ module Mongoid
|
|
|
167
174
|
alias :purge :nullify
|
|
168
175
|
|
|
169
176
|
# Substitutes the supplied target documents for the existing documents
|
|
170
|
-
# in the
|
|
177
|
+
# in the association. If the new target is nil, perform the necessary
|
|
171
178
|
# deletion.
|
|
172
179
|
#
|
|
173
|
-
# @example Replace the
|
|
180
|
+
# @example Replace the association.
|
|
174
181
|
# person.preferences.substitute([ new_post ])
|
|
175
182
|
#
|
|
176
183
|
# @param [ Array<Document> ] replacement The replacement target.
|
|
177
184
|
#
|
|
178
|
-
# @return [ Many ] The
|
|
185
|
+
# @return [ Many ] The association.
|
|
179
186
|
#
|
|
180
187
|
# @since 2.0.0.rc.1
|
|
181
188
|
def substitute(replacement)
|
|
@@ -206,7 +213,7 @@ module Mongoid
|
|
|
206
213
|
# Appends the document to the target array, updating the index on the
|
|
207
214
|
# document at the same time.
|
|
208
215
|
#
|
|
209
|
-
# @example Append the document to the
|
|
216
|
+
# @example Append the document to the association.
|
|
210
217
|
# relation.append(document)
|
|
211
218
|
#
|
|
212
219
|
# @param [ Document ] document The document to append to the target.
|
|
@@ -220,7 +227,7 @@ module Mongoid
|
|
|
220
227
|
execute_callback :after_add, document
|
|
221
228
|
end
|
|
222
229
|
|
|
223
|
-
# Instantiate the binding associated with this
|
|
230
|
+
# Instantiate the binding associated with this association.
|
|
224
231
|
#
|
|
225
232
|
# @example Get the binding.
|
|
226
233
|
# relation.binding([ address ])
|
|
@@ -252,7 +259,7 @@ module Mongoid
|
|
|
252
259
|
# Returns the criteria object for the target class with its documents set
|
|
253
260
|
# to target.
|
|
254
261
|
#
|
|
255
|
-
# @example Get a criteria for the
|
|
262
|
+
# @example Get a criteria for the association.
|
|
256
263
|
# relation.criteria
|
|
257
264
|
#
|
|
258
265
|
# @return [ Criteria ] A new criteria.
|
|
@@ -292,10 +299,10 @@ module Mongoid
|
|
|
292
299
|
Eager.new(association, docs)
|
|
293
300
|
end
|
|
294
301
|
|
|
295
|
-
# Returns true if the
|
|
302
|
+
# Returns true if the association is an embedded one. In this case
|
|
296
303
|
# always false.
|
|
297
304
|
#
|
|
298
|
-
# @example Is this
|
|
305
|
+
# @example Is this association embedded?
|
|
299
306
|
# Referenced::ManyToMany.embedded?
|
|
300
307
|
#
|
|
301
308
|
# @return [ false ] Always false.
|