mongoid 6.4.4 → 7.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +13 -13
- data/LICENSE +1 -0
- data/README.md +25 -18
- data/Rakefile +28 -5
- data/lib/config/locales/en.yml +76 -50
- data/lib/mongoid/association/accessors.rb +417 -0
- data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +39 -57
- data/lib/mongoid/association/builders.rb +93 -0
- data/lib/mongoid/association/constrainable.rb +46 -0
- data/lib/mongoid/association/depending.rb +140 -0
- data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +13 -11
- data/lib/mongoid/{relations → association}/embedded/batchable.rb +23 -21
- data/lib/mongoid/association/embedded/cyclic.rb +111 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +59 -0
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +41 -0
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +124 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +157 -0
- data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +14 -9
- data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +19 -7
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +555 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +214 -0
- data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +15 -10
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +42 -0
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +133 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +177 -0
- data/lib/mongoid/association/embedded.rb +7 -0
- data/lib/mongoid/association/macros.rb +206 -0
- data/lib/mongoid/{relations → association}/many.rb +32 -59
- data/lib/mongoid/{relations → association}/marshalable.rb +9 -5
- data/lib/mongoid/association/nested/many.rb +202 -0
- data/lib/mongoid/association/nested/nested_buildable.rb +75 -0
- data/lib/mongoid/association/nested/one.rb +129 -0
- data/lib/mongoid/association/nested.rb +18 -0
- data/lib/mongoid/{relations → association}/one.rb +9 -7
- data/lib/mongoid/association/options.rb +155 -0
- data/lib/mongoid/{relations → association}/proxy.rb +59 -69
- data/lib/mongoid/association/referenced/auto_save.rb +82 -0
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +89 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +49 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +74 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +138 -0
- data/lib/mongoid/association/referenced/belongs_to.rb +251 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +165 -0
- data/lib/mongoid/association/referenced/eager.rb +184 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +77 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +43 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +54 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +319 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +297 -0
- data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +9 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +41 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +45 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +517 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +581 -0
- data/lib/mongoid/association/referenced/has_many.rb +278 -0
- data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +14 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +67 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +37 -0
- data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +20 -18
- data/lib/mongoid/association/referenced/has_one/proxy.rb +120 -0
- data/lib/mongoid/association/referenced/has_one.rb +207 -0
- data/lib/mongoid/association/referenced/syncable.rb +172 -0
- data/lib/mongoid/association/referenced.rb +10 -0
- data/lib/mongoid/association/reflections.rb +70 -0
- data/lib/mongoid/association/relatable.rb +514 -0
- data/lib/mongoid/association.rb +152 -0
- data/lib/mongoid/atomic/modifiers.rb +24 -1
- data/lib/mongoid/atomic/paths/embedded/many.rb +5 -3
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -3
- data/lib/mongoid/atomic/paths/embedded.rb +3 -1
- data/lib/mongoid/atomic/paths/root.rb +4 -2
- data/lib/mongoid/atomic/paths.rb +2 -0
- data/lib/mongoid/atomic.rb +16 -4
- data/lib/mongoid/attributes/dynamic.rb +18 -15
- data/lib/mongoid/attributes/nested.rb +29 -16
- data/lib/mongoid/attributes/processing.rb +10 -8
- data/lib/mongoid/attributes/readonly.rb +5 -5
- data/lib/mongoid/attributes.rb +62 -44
- data/lib/mongoid/cacheable.rb +3 -1
- data/lib/mongoid/changeable.rb +4 -2
- data/lib/mongoid/clients/factory.rb +3 -2
- data/lib/mongoid/clients/options.rb +17 -13
- data/lib/mongoid/clients/sessions.rb +23 -4
- data/lib/mongoid/clients/storage_options.rb +7 -5
- data/lib/mongoid/clients/validators/storage.rb +2 -0
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/clients.rb +2 -0
- data/lib/mongoid/composable.rb +8 -6
- data/lib/mongoid/config/environment.rb +23 -8
- data/lib/mongoid/config/options.rb +20 -12
- data/lib/mongoid/config/validators/client.rb +2 -0
- data/lib/mongoid/config/validators/option.rb +2 -0
- data/lib/mongoid/config/validators.rb +2 -0
- data/lib/mongoid/config.rb +53 -9
- 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 +6 -4
- data/lib/mongoid/contextual/map_reduce.rb +5 -2
- data/lib/mongoid/contextual/memory.rb +23 -3
- data/lib/mongoid/contextual/mongo.rb +16 -9
- data/lib/mongoid/contextual/none.rb +2 -0
- data/lib/mongoid/contextual/queryable.rb +2 -0
- data/lib/mongoid/contextual.rb +7 -4
- data/lib/mongoid/copyable.rb +14 -7
- data/lib/mongoid/criteria/findable.rb +11 -1
- data/lib/mongoid/criteria/includable.rb +21 -19
- data/lib/mongoid/criteria/inspectable.rb +2 -0
- data/lib/mongoid/criteria/marshalable.rb +2 -0
- data/lib/mongoid/criteria/modifiable.rb +10 -3
- data/lib/mongoid/criteria/options.rb +4 -2
- data/lib/mongoid/criteria/permission.rb +2 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +93 -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 +9 -7
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -2
- 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 +15 -1
- data/lib/mongoid/criteria/queryable/extensions.rb +2 -0
- data/lib/mongoid/criteria/queryable/key.rb +101 -14
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +158 -15
- 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 +14 -6
- data/lib/mongoid/criteria/queryable/selectable.rb +376 -90
- data/lib/mongoid/criteria/queryable/selector.rb +43 -36
- data/lib/mongoid/criteria/queryable/smash.rb +2 -0
- data/lib/mongoid/criteria/queryable/storable.rb +233 -0
- data/lib/mongoid/criteria/queryable.rb +7 -2
- data/lib/mongoid/criteria/scopable.rb +2 -0
- data/lib/mongoid/criteria.rb +27 -6
- data/lib/mongoid/document.rb +16 -4
- data/lib/mongoid/equality.rb +3 -2
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -2
- data/lib/mongoid/errors/callback.rb +2 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +19 -0
- data/lib/mongoid/errors/delete_restriction.rb +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 +34 -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 +31 -0
- 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 +4 -2
- data/lib/mongoid/errors/no_client_database.rb +2 -0
- data/lib/mongoid/errors/no_client_hosts.rb +2 -0
- data/lib/mongoid/errors/no_clients_config.rb +2 -0
- data/lib/mongoid/errors/no_default_client.rb +3 -1
- data/lib/mongoid/errors/no_environment.rb +2 -0
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -0
- data/lib/mongoid/errors/no_metadata.rb +2 -0
- data/lib/mongoid/errors/no_parent.rb +2 -0
- data/lib/mongoid/errors/readonly_attribute.rb +2 -0
- data/lib/mongoid/errors/readonly_document.rb +2 -0
- data/lib/mongoid/errors/scope_overwrite.rb +2 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -0
- data/lib/mongoid/errors/unknown_model.rb +27 -0
- data/lib/mongoid/errors/unsaved_document.rb +2 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -0
- data/lib/mongoid/errors/validations.rb +2 -0
- data/lib/mongoid/errors.rb +6 -0
- data/lib/mongoid/evolvable.rb +3 -1
- data/lib/mongoid/extensions/array.rb +28 -11
- 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 +56 -11
- 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 +20 -8
- data/lib/mongoid/extensions/object_id.rb +2 -0
- data/lib/mongoid/extensions/range.rb +3 -0
- data/lib/mongoid/extensions/regexp.rb +3 -1
- data/lib/mongoid/extensions/set.rb +2 -0
- data/lib/mongoid/extensions/string.rb +23 -12
- 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/extensions.rb +2 -4
- data/lib/mongoid/factory.rb +38 -5
- data/lib/mongoid/fields/foreign_key.rb +8 -6
- data/lib/mongoid/fields/localized.rb +2 -0
- data/lib/mongoid/fields/standard.rb +8 -17
- data/lib/mongoid/fields/validators/macro.rb +17 -3
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields.rb +8 -5
- data/lib/mongoid/findable.rb +9 -4
- data/lib/mongoid/indexable/specification.rb +3 -1
- data/lib/mongoid/indexable/validators/options.rb +2 -0
- data/lib/mongoid/indexable.rb +7 -2
- data/lib/mongoid/inspectable.rb +3 -1
- data/lib/mongoid/interceptable.rb +17 -9
- data/lib/mongoid/loggable.rb +13 -7
- data/lib/mongoid/matchable/all.rb +6 -3
- data/lib/mongoid/matchable/and.rb +3 -1
- data/lib/mongoid/matchable/default.rb +73 -24
- data/lib/mongoid/matchable/elem_match.rb +11 -3
- data/lib/mongoid/matchable/eq.rb +23 -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 +3 -1
- 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/matchable.rb +19 -16
- data/lib/mongoid/persistable/creatable.rb +3 -1
- data/lib/mongoid/persistable/deletable.rb +10 -7
- data/lib/mongoid/persistable/destroyable.rb +3 -1
- data/lib/mongoid/persistable/incrementable.rb +7 -3
- data/lib/mongoid/persistable/logical.rb +5 -2
- 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 +60 -13
- 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/persistable.rb +136 -19
- data/lib/mongoid/persistence_context.rb +47 -20
- data/lib/mongoid/positional.rb +3 -1
- data/lib/mongoid/query_cache.rb +76 -29
- 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 +27 -17
- data/lib/mongoid/shardable.rb +60 -6
- data/lib/mongoid/stateful.rb +3 -1
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -0
- data/lib/mongoid/threaded/lifecycle.rb +2 -0
- data/lib/mongoid/threaded.rb +2 -0
- data/lib/mongoid/timestamps/created/short.rb +2 -0
- data/lib/mongoid/timestamps/created.rb +3 -1
- data/lib/mongoid/timestamps/short.rb +2 -0
- data/lib/mongoid/timestamps/timeless.rb +6 -2
- data/lib/mongoid/timestamps/updated/short.rb +2 -0
- data/lib/mongoid/timestamps/updated.rb +3 -1
- data/lib/mongoid/timestamps.rb +3 -1
- data/lib/mongoid/touchable.rb +110 -0
- data/lib/mongoid/traversable.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 +3 -1
- data/lib/mongoid/validatable/presence.rb +6 -4
- data/lib/mongoid/validatable/queryable.rb +2 -0
- data/lib/mongoid/validatable/uniqueness.rb +9 -7
- data/lib/mongoid/validatable.rb +15 -13
- data/lib/mongoid/version.rb +3 -1
- data/lib/mongoid.rb +11 -2
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +44 -26
- 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/README.md +18 -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 +5 -1
- 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 +4 -1
- 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/pull_request.rb +12 -0
- data/spec/app/models/coding.rb +4 -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/customer.rb +11 -0
- data/spec/app/models/customer_address.rb +12 -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 +9 -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 +4 -1
- data/spec/app/models/minim.rb +7 -0
- 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 +5 -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 +4 -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 +10 -2
- data/spec/app/models/pet.rb +3 -0
- data/spec/app/models/pet_owner.rb +3 -0
- data/spec/app/models/phone.rb +4 -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/encyclopedia.rb +12 -0
- data/spec/app/models/publication/review.rb +14 -0
- data/spec/app/models/publication.rb +5 -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 +4 -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 +4 -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 +8 -0
- data/spec/app/models/store_as_dup_test4.rb +8 -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 +8 -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 +9 -0
- 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 +5 -1
- 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 +14 -3
- data/spec/integration/app_spec.rb +287 -0
- data/spec/integration/associations/belongs_to_spec.rb +16 -0
- data/spec/integration/associations/embedded_spec.rb +175 -0
- data/spec/integration/associations/embeds_many_spec.rb +24 -0
- data/spec/integration/associations/embeds_one_spec.rb +24 -0
- data/spec/integration/associations/foreign_key_spec.rb +99 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +65 -0
- data/spec/integration/associations/has_many_spec.rb +76 -0
- data/spec/integration/associations/has_one_spec.rb +76 -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/bson_regexp_raw_spec.rb +20 -0
- data/spec/integration/callbacks_models.rb +49 -0
- data/spec/integration/callbacks_spec.rb +216 -0
- data/spec/integration/criteria/date_field_spec.rb +41 -0
- data/spec/integration/criteria/default_scope_spec.rb +21 -0
- data/spec/integration/criteria/logical_spec.rb +94 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +32 -0
- data/spec/integration/document_spec.rb +22 -0
- data/spec/integration/i18n_fallbacks_spec.rb +90 -0
- data/spec/integration/matchable_spec.rb +680 -0
- data/spec/integration/shardable_spec.rb +149 -0
- data/spec/lite_spec_helper.rb +75 -0
- data/spec/mongoid/{relations → association}/accessors_spec.rb +281 -64
- data/spec/mongoid/{relations → association}/auto_save_spec.rb +63 -12
- data/spec/mongoid/{relations → association}/builders_spec.rb +4 -1
- data/spec/mongoid/association/constrainable_spec.rb +118 -0
- data/spec/mongoid/{relations → association}/counter_cache_spec.rb +4 -1
- data/spec/mongoid/association/depending_spec.rb +869 -0
- data/spec/mongoid/{relations → association}/eager_spec.rb +15 -12
- data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +4 -1
- data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +3 -0
- data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +16 -13
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +37 -0
- data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +58 -77
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +904 -0
- data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +6 -3
- data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +20 -45
- data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +127 -182
- 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 +865 -0
- data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +7 -4
- data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +17 -34
- data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +42 -84
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +9 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +29 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +957 -0
- data/spec/mongoid/{relations → association}/macros_spec.rb +151 -73
- data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +19 -19
- data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +20 -20
- data/spec/mongoid/association/options_spec.rb +1324 -0
- data/spec/mongoid/{relations → association}/polymorphic_spec.rb +69 -34
- data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +10 -7
- data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +49 -79
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +377 -0
- data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +60 -91
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2026 -0
- data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +8 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +124 -0
- data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +42 -7
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +77 -0
- data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +283 -112
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +50 -0
- 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 +1051 -0
- data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +8 -5
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +122 -0
- data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +43 -13
- data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +230 -1
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +24 -0
- data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +33 -94
- data/spec/mongoid/association/referenced/has_many_models.rb +40 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +1228 -0
- data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +7 -4
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +116 -0
- data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +27 -12
- data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +12 -109
- data/spec/mongoid/association/referenced/has_one_models.rb +51 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1363 -0
- data/spec/mongoid/{relations → association}/reflections_spec.rb +4 -12
- data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +7 -2
- data/spec/mongoid/{relations_spec.rb → association_spec.rb} +4 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +5 -2
- 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 +44 -0
- data/spec/mongoid/atomic_spec.rb +7 -4
- data/spec/mongoid/attributes/dynamic_spec.rb +153 -0
- data/spec/mongoid/attributes/nested_spec.rb +32 -11
- data/spec/mongoid/attributes/readonly_spec.rb +83 -125
- data/spec/mongoid/attributes_spec.rb +60 -9
- data/spec/mongoid/cacheable_spec.rb +3 -0
- data/spec/mongoid/changeable_spec.rb +26 -0
- data/spec/mongoid/clients/factory_spec.rb +57 -33
- data/spec/mongoid/clients/options_spec.rb +81 -56
- data/spec/mongoid/clients/sessions_spec.rb +24 -8
- data/spec/mongoid/clients/transactions_spec.rb +393 -0
- data/spec/mongoid/clients_spec.rb +73 -10
- 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 +66 -1
- 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 +15 -2
- data/spec/mongoid/contextual/map_reduce_spec.rb +23 -5
- data/spec/mongoid/contextual/memory_spec.rb +22 -0
- data/spec/mongoid/contextual/mongo_spec.rb +113 -57
- data/spec/mongoid/contextual/none_spec.rb +3 -0
- data/spec/mongoid/copyable_spec.rb +93 -6
- data/spec/mongoid/copyable_spec_models.rb +20 -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 +180 -4
- data/spec/mongoid/criteria/options_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +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/numeric_spec.rb +54 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +4 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +10 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +47 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +43 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +31 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +51 -6
- 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 +15 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1865 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1007 -2389
- data/spec/mongoid/criteria/queryable/selector_spec.rb +40 -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 +108 -19
- data/spec/mongoid/document_fields_spec.rb +88 -0
- 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 +32 -4
- 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 +5 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +6 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +6 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +3 -0
- data/spec/mongoid/errors/no_environment_spec.rb +3 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +5 -2
- data/spec/mongoid/errors/no_parent_spec.rb +4 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +3 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -0
- data/spec/mongoid/errors/unsaved_document_spec.rb +4 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -0
- data/spec/mongoid/errors/validations_spec.rb +3 -0
- data/spec/mongoid/extensions/array_spec.rb +37 -58
- 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 +124 -1
- 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 +21 -35
- data/spec/mongoid/extensions/range_spec.rb +10 -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 +95 -33
- 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 +46 -1
- data/spec/mongoid/fields/foreign_key_spec.rb +27 -32
- data/spec/mongoid/fields/localized_spec.rb +3 -0
- data/spec/mongoid/fields/standard_spec.rb +3 -0
- data/spec/mongoid/fields_spec.rb +42 -1
- data/spec/mongoid/findable_spec.rb +4 -1
- data/spec/mongoid/indexable/specification_spec.rb +3 -0
- data/spec/mongoid/indexable_spec.rb +27 -12
- data/spec/mongoid/inspectable_spec.rb +3 -0
- data/spec/mongoid/interceptable_spec.rb +87 -1
- 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 +13 -3
- data/spec/mongoid/matchable/elem_match_spec.rb +23 -0
- data/spec/mongoid/matchable/eq_spec.rb +49 -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 +5 -2
- data/spec/mongoid/persistable/settable_spec.rb +112 -10
- 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 +106 -14
- data/spec/mongoid/persistence_context_spec.rb +4 -1
- 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 +131 -65
- data/spec/mongoid/relations/proxy_spec.rb +127 -124
- 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 +104 -28
- 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/{relations/touchable_spec.rb → touchable_spec.rb} +89 -4
- data/spec/mongoid/traversable_spec.rb +3 -0
- data/spec/mongoid/validatable/associated_spec.rb +4 -1
- 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 +10 -6
- data/spec/mongoid/validatable/uniqueness_spec.rb +36 -6
- data/spec/mongoid/validatable_spec.rb +4 -1
- data/spec/mongoid_spec.rb +3 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +4 -1
- data/spec/rails/mongoid_spec.rb +5 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +211 -0
- data/spec/shared/lib/mrss/constraints.rb +330 -0
- data/spec/shared/lib/mrss/docker_runner.rb +262 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +69 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/shared/share/Dockerfile.erb +229 -0
- data/spec/shared/shlib/distro.sh +73 -0
- data/spec/shared/shlib/server.sh +270 -0
- data/spec/shared/shlib/set_env.sh +128 -0
- data/spec/spec_helper.rb +56 -55
- data/spec/support/authorization.rb +3 -0
- data/spec/support/child_process_helper.rb +76 -0
- data/spec/support/cluster_config.rb +158 -0
- data/spec/support/constraints.rb +256 -0
- data/spec/support/expectations.rb +22 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/lite_constraints.rb +22 -0
- data/spec/support/macros.rb +21 -0
- data/spec/support/session_registry.rb +50 -0
- data/spec/support/shared/time.rb +54 -0
- data/spec/support/spec_config.rb +50 -0
- data.tar.gz.sig +2 -1
- metadata +737 -550
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/relations/accessors.rb +0 -267
- data/lib/mongoid/relations/auto_save.rb +0 -94
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
- data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
- data/lib/mongoid/relations/bindings.rb +0 -9
- data/lib/mongoid/relations/builder.rb +0 -57
- data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
- data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
- data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
- data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
- data/lib/mongoid/relations/builders.rb +0 -106
- data/lib/mongoid/relations/cascading/delete.rb +0 -44
- data/lib/mongoid/relations/cascading/destroy.rb +0 -43
- data/lib/mongoid/relations/cascading/nullify.rb +0 -35
- data/lib/mongoid/relations/cascading/restrict.rb +0 -39
- data/lib/mongoid/relations/cascading.rb +0 -56
- data/lib/mongoid/relations/constraint.rb +0 -55
- data/lib/mongoid/relations/conversions.rb +0 -34
- data/lib/mongoid/relations/counter_cache.rb +0 -160
- data/lib/mongoid/relations/cyclic.rb +0 -107
- data/lib/mongoid/relations/eager/base.rb +0 -153
- data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
- data/lib/mongoid/relations/eager/has_many.rb +0 -38
- data/lib/mongoid/relations/eager/has_one.rb +0 -30
- data/lib/mongoid/relations/embedded/in.rb +0 -241
- data/lib/mongoid/relations/embedded/many.rb +0 -683
- data/lib/mongoid/relations/embedded/one.rb +0 -235
- data/lib/mongoid/relations/macros.rb +0 -367
- data/lib/mongoid/relations/metadata.rb +0 -1179
- data/lib/mongoid/relations/nested_builder.rb +0 -74
- data/lib/mongoid/relations/options.rb +0 -49
- data/lib/mongoid/relations/polymorphic.rb +0 -39
- data/lib/mongoid/relations/referenced/in.rb +0 -304
- data/lib/mongoid/relations/referenced/many.rb +0 -812
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
- data/lib/mongoid/relations/referenced/one.rb +0 -290
- data/lib/mongoid/relations/reflections.rb +0 -64
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets/enumerable.rb +0 -493
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -97
- data/lib/mongoid/relations.rb +0 -148
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
- data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
- data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
- data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
- data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
- data/spec/mongoid/relations/cascading_spec.rb +0 -355
- data/spec/mongoid/relations/constraint_spec.rb +0 -75
- data/spec/mongoid/relations/conversions_spec.rb +0 -128
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +0 -163
- data/spec/mongoid/relations/metadata_spec.rb +0 -1985
- data/spec/mongoid/relations/options_spec.rb +0 -35
@@ -1,6 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
1
4
|
require "spec_helper"
|
2
5
|
|
3
|
-
describe Mongoid::
|
6
|
+
describe Mongoid::Association::Referenced::HasAndBelongsToMany::Binding do
|
4
7
|
|
5
8
|
let(:person) do
|
6
9
|
Person.new
|
@@ -11,17 +14,17 @@ describe Mongoid::Relations::Bindings::Referenced::ManyToMany do
|
|
11
14
|
end
|
12
15
|
|
13
16
|
let(:target) do
|
14
|
-
Mongoid::
|
17
|
+
Mongoid::Association::Referenced::HasMany::Targets::Enumerable.new([ preference ])
|
15
18
|
end
|
16
19
|
|
17
|
-
let(:
|
20
|
+
let(:association) do
|
18
21
|
Person.relations["preferences"]
|
19
22
|
end
|
20
23
|
|
21
24
|
describe "#bind_one" do
|
22
25
|
|
23
26
|
let(:binding) do
|
24
|
-
described_class.new(person, target,
|
27
|
+
described_class.new(person, target, association)
|
25
28
|
end
|
26
29
|
|
27
30
|
context "when the document is bindable" do
|
@@ -77,7 +80,7 @@ describe Mongoid::Relations::Bindings::Referenced::ManyToMany do
|
|
77
80
|
describe "#unbind_one" do
|
78
81
|
|
79
82
|
let(:binding) do
|
80
|
-
described_class.new(person, target,
|
83
|
+
described_class.new(person, target, association)
|
81
84
|
end
|
82
85
|
|
83
86
|
context "when the documents are unbindable" do
|
@@ -0,0 +1,124 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require "spec_helper"
|
5
|
+
|
6
|
+
describe Mongoid::Association::Referenced::HasAndBelongsToMany::Buildable do
|
7
|
+
|
8
|
+
let(:base) do
|
9
|
+
double
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:options) do
|
13
|
+
{ }
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#build" do
|
17
|
+
|
18
|
+
let(:documents) do
|
19
|
+
association.build(base, object)
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:association) do
|
23
|
+
Mongoid::Association::Referenced::HasAndBelongsToMany.new(Person, :preferences, options)
|
24
|
+
end
|
25
|
+
|
26
|
+
context "when provided ids" do
|
27
|
+
|
28
|
+
let(:object_id) do
|
29
|
+
BSON::ObjectId.new
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:object) do
|
33
|
+
[ object_id ]
|
34
|
+
end
|
35
|
+
|
36
|
+
let(:criteria) do
|
37
|
+
Preference.all_of("_id" => { "$in" => object })
|
38
|
+
end
|
39
|
+
|
40
|
+
it "returns the criteria" do
|
41
|
+
expect(documents).to eq(criteria)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "when order specified" do
|
46
|
+
|
47
|
+
let(:object_id) do
|
48
|
+
BSON::ObjectId.new
|
49
|
+
end
|
50
|
+
|
51
|
+
let(:options) do
|
52
|
+
{
|
53
|
+
order: :rating.desc
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
let(:object) do
|
58
|
+
[ object_id ]
|
59
|
+
end
|
60
|
+
|
61
|
+
let(:criteria) do
|
62
|
+
Preference.all_of("_id" => { "$in" => object }).order_by(options[:order])
|
63
|
+
end
|
64
|
+
|
65
|
+
it "returns the criteria" do
|
66
|
+
expect(documents).to eq(criteria)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "when provided a object" do
|
71
|
+
|
72
|
+
context "when the object is not nil" do
|
73
|
+
|
74
|
+
let(:object) do
|
75
|
+
[ Post.new ]
|
76
|
+
end
|
77
|
+
|
78
|
+
it "returns the objects" do
|
79
|
+
expect(documents).to eq(object)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "when the object is nil" do
|
84
|
+
|
85
|
+
let(:object) do
|
86
|
+
nil
|
87
|
+
end
|
88
|
+
|
89
|
+
let(:criteria) do
|
90
|
+
Preference.all_of("_id" => { "$in" => [] })
|
91
|
+
end
|
92
|
+
|
93
|
+
it "a criteria object" do
|
94
|
+
expect(documents).to eq(criteria)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context "when no documents found in the database" do
|
100
|
+
|
101
|
+
context "when the ids are empty" do
|
102
|
+
|
103
|
+
it "returns an empty array" do
|
104
|
+
expect(Person.new.preferences).to be_empty
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context "when the ids are incorrect" do
|
109
|
+
|
110
|
+
let(:person) do
|
111
|
+
Person.create
|
112
|
+
end
|
113
|
+
|
114
|
+
before do
|
115
|
+
person.preference_ids = [ BSON::ObjectId.new ]
|
116
|
+
end
|
117
|
+
|
118
|
+
it "returns an empty array" do
|
119
|
+
expect(person.preferences).to be_empty
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -1,6 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
1
4
|
require "spec_helper"
|
5
|
+
require_relative '../has_and_belongs_to_many_models'
|
2
6
|
|
3
|
-
describe Mongoid::
|
7
|
+
describe Mongoid::Association::Referenced::HasAndBelongsToMany::Eager do
|
4
8
|
|
5
9
|
describe ".keys_from_docs" do
|
6
10
|
|
@@ -16,18 +20,18 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do
|
|
16
20
|
House.create!
|
17
21
|
end
|
18
22
|
|
19
|
-
let(:
|
23
|
+
let(:association) do
|
20
24
|
Person.reflect_on_association(:houses)
|
21
25
|
end
|
22
26
|
|
23
27
|
let(:eager) do
|
24
|
-
described_class.new([
|
25
|
-
b.
|
28
|
+
described_class.new([association], docs).tap do |b|
|
29
|
+
b.send(:shift_association)
|
26
30
|
end
|
27
31
|
end
|
28
32
|
|
29
33
|
it "aggregates by the foreign key" do
|
30
|
-
expect(eager.keys_from_docs).to eq([house.id])
|
34
|
+
expect(eager.send(:keys_from_docs)).to eq([house.id])
|
31
35
|
end
|
32
36
|
end
|
33
37
|
|
@@ -41,7 +45,10 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do
|
|
41
45
|
Person.create!(houses: 3.times.map { House.create! })
|
42
46
|
end
|
43
47
|
|
44
|
-
context "when including the has_and_belongs_to_many
|
48
|
+
context "when including the has_and_belongs_to_many association" do
|
49
|
+
# Query count assertions require that all queries are sent using the
|
50
|
+
# same connection object.
|
51
|
+
require_no_multi_shard
|
45
52
|
|
46
53
|
it "queries twice" do
|
47
54
|
expect_query(2) do
|
@@ -60,7 +67,10 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do
|
|
60
67
|
end
|
61
68
|
end
|
62
69
|
|
63
|
-
context "when the
|
70
|
+
context "when the association is not polymorphic" do
|
71
|
+
# Query count assertions require that all queries are sent using the
|
72
|
+
# same connection object.
|
73
|
+
require_no_multi_shard
|
64
74
|
|
65
75
|
let(:eager) do
|
66
76
|
Person.asc(:_id).includes(:preferences).last
|
@@ -115,6 +125,10 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do
|
|
115
125
|
end
|
116
126
|
|
117
127
|
context "when some related documents no longer exist" do
|
128
|
+
# Query count assertions require that all queries are sent using the
|
129
|
+
# same connection object.
|
130
|
+
require_no_multi_shard
|
131
|
+
|
118
132
|
before do
|
119
133
|
# Deleting the first one to meet Builders::Referenced::ManyToMany#query?
|
120
134
|
House.collection.find(_id: Person.first.house_ids.first).delete_one
|
@@ -129,5 +143,26 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do
|
|
129
143
|
end
|
130
144
|
end
|
131
145
|
end
|
146
|
+
|
147
|
+
context "when all the values for the has_and_belongs_to_many association are empty" do
|
148
|
+
# Query count assertions require that all queries are sent using the
|
149
|
+
# same connection object.
|
150
|
+
require_no_multi_shard
|
151
|
+
|
152
|
+
before do
|
153
|
+
2.times { |i| HabtmmPerson.create! }
|
154
|
+
end
|
155
|
+
|
156
|
+
it "only queries once for the parent documents" do
|
157
|
+
found_person = false
|
158
|
+
expect_query(1) do
|
159
|
+
HabtmmPerson.all.includes(:tickets).each do |person|
|
160
|
+
expect(person.tickets).to eq []
|
161
|
+
found_person = true
|
162
|
+
end
|
163
|
+
end
|
164
|
+
expect(found_person).to be true
|
165
|
+
end
|
166
|
+
end
|
132
167
|
end
|
133
168
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require "spec_helper"
|
5
|
+
require_relative '../has_and_belongs_to_many_models'
|
6
|
+
|
7
|
+
describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
8
|
+
context 'with primary_key and foreign_key given' do
|
9
|
+
let(:company) { HabtmmCompany.create!(c_id: 123) }
|
10
|
+
let(:employee) { HabtmmEmployee.create!(e_id: 456) }
|
11
|
+
|
12
|
+
before do
|
13
|
+
company.employees << employee
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'references correct field' do
|
17
|
+
expect(company.e_ids).to eq([456])
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#nullify' do
|
21
|
+
before do
|
22
|
+
company.employees << repl_employee
|
23
|
+
company.save!
|
24
|
+
expect(company.employees.length).to eq(2)
|
25
|
+
repl_employee.c_ids = [company.c_id]
|
26
|
+
repl_employee.save!
|
27
|
+
repl_employee.reload
|
28
|
+
expect(repl_employee.c_ids).to eq([123])
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'without replacement' do
|
32
|
+
let(:repl_employee) { HabtmmEmployee.create!(e_id: 444) }
|
33
|
+
|
34
|
+
it 'disassociates child from parent' do
|
35
|
+
company.employees.nullify
|
36
|
+
repl_employee.reload
|
37
|
+
expect(repl_employee.c_ids).to eq([])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'with replacement' do
|
42
|
+
let(:repl_employee) { HabtmmEmployee.create!(e_id: 444) }
|
43
|
+
|
44
|
+
before do
|
45
|
+
company.employees << repl_employee
|
46
|
+
expect(company.employees.length).to eq(2)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'keeps replacement associated with the parent' do
|
50
|
+
company.employees.nullify([repl_employee])
|
51
|
+
repl_employee.reload
|
52
|
+
expect(repl_employee.c_ids).to eq([123])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#<<' do
|
59
|
+
let(:dog) { Dog.create! }
|
60
|
+
let(:breed) { Breed.create! }
|
61
|
+
|
62
|
+
it 'adds association on both ends' do
|
63
|
+
dog.breeds << breed
|
64
|
+
expect(breed.dogs).to eq([dog])
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'with primary_key and foreign_key given' do
|
68
|
+
let(:company) { HabtmmCompany.create!(c_id: 123) }
|
69
|
+
let(:employee) { HabtmmEmployee.create!(e_id: 456) }
|
70
|
+
|
71
|
+
it 'adds association on both ends' do
|
72
|
+
company.employees << employee
|
73
|
+
expect(employee.companies).to eq([company])
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -1,11 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
1
4
|
require "spec_helper"
|
2
5
|
|
3
|
-
describe Mongoid::
|
6
|
+
describe Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy do
|
4
7
|
|
5
|
-
|
8
|
+
around(:each) do |example|
|
9
|
+
original_raise_not_found_error = Mongoid.raise_not_found_error
|
10
|
+
original_preferences_association = Person.relations["preferences"]
|
6
11
|
Mongoid.raise_not_found_error = true
|
7
|
-
Person.
|
8
|
-
|
12
|
+
Person.has_and_belongs_to_many :preferences, autosave: true
|
13
|
+
example.run
|
14
|
+
Mongoid.raise_not_found_error = original_raise_not_found_error
|
15
|
+
Person.relations["preferences"] = original_preferences_association
|
9
16
|
end
|
10
17
|
|
11
18
|
after(:all) do
|
@@ -814,6 +821,82 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
814
821
|
end
|
815
822
|
end
|
816
823
|
|
824
|
+
describe "when self-referencing" do
|
825
|
+
let!(:parent) do
|
826
|
+
Vertex.create
|
827
|
+
end
|
828
|
+
|
829
|
+
let!(:child) do
|
830
|
+
Vertex.create(parents: [parent])
|
831
|
+
end
|
832
|
+
|
833
|
+
before do
|
834
|
+
parent.reload
|
835
|
+
child.reload
|
836
|
+
end
|
837
|
+
|
838
|
+
it "sets the parent" do
|
839
|
+
expect(child.parents).to include(parent)
|
840
|
+
end
|
841
|
+
|
842
|
+
it "sets the parent id" do
|
843
|
+
expect(child.parent_ids).to include(parent.id)
|
844
|
+
end
|
845
|
+
|
846
|
+
it "sets the child" do
|
847
|
+
expect(parent.children).to include(child)
|
848
|
+
end
|
849
|
+
|
850
|
+
it "sets the child id" do
|
851
|
+
expect(parent.child_ids).to include(child.id)
|
852
|
+
end
|
853
|
+
|
854
|
+
describe "#update" do
|
855
|
+
before do
|
856
|
+
child.update(parents: [parent])
|
857
|
+
end
|
858
|
+
|
859
|
+
it "sets the parent" do
|
860
|
+
expect(child.parents).to include(parent)
|
861
|
+
end
|
862
|
+
|
863
|
+
it "sets the parent id" do
|
864
|
+
expect(child.parent_ids).to include(parent.id)
|
865
|
+
end
|
866
|
+
|
867
|
+
it "sets the child" do
|
868
|
+
expect(parent.children).to include(child)
|
869
|
+
end
|
870
|
+
|
871
|
+
it "sets the child id" do
|
872
|
+
expect(parent.child_ids).to include(child.id)
|
873
|
+
end
|
874
|
+
|
875
|
+
describe "when reloading" do
|
876
|
+
before do
|
877
|
+
parent.reload
|
878
|
+
child.reload
|
879
|
+
end
|
880
|
+
|
881
|
+
it "sets the parent" do
|
882
|
+
expect(child.parents).to include(parent)
|
883
|
+
end
|
884
|
+
|
885
|
+
it "sets the parent id" do
|
886
|
+
expect(child.parent_ids).to include(parent.id)
|
887
|
+
end
|
888
|
+
|
889
|
+
it "sets the child" do
|
890
|
+
expect(parent.children).to include(child)
|
891
|
+
end
|
892
|
+
|
893
|
+
it "sets the child id" do
|
894
|
+
expect(parent.child_ids).to include(child.id)
|
895
|
+
end
|
896
|
+
end
|
897
|
+
end
|
898
|
+
end
|
899
|
+
|
817
900
|
[ nil, [] ].each do |value|
|
818
901
|
|
819
902
|
describe "#= #{value}" do
|
@@ -1041,27 +1124,6 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
1041
1124
|
end
|
1042
1125
|
end
|
1043
1126
|
|
1044
|
-
describe ".builder" do
|
1045
|
-
|
1046
|
-
let(:builder_klass) do
|
1047
|
-
Mongoid::Relations::Builders::Referenced::ManyToMany
|
1048
|
-
end
|
1049
|
-
|
1050
|
-
let(:document) do
|
1051
|
-
double
|
1052
|
-
end
|
1053
|
-
|
1054
|
-
let(:metadata) do
|
1055
|
-
double(extension?: false)
|
1056
|
-
end
|
1057
|
-
|
1058
|
-
it "returns the embedded in builder" do
|
1059
|
-
expect(
|
1060
|
-
described_class.builder(nil, metadata, document)
|
1061
|
-
).to be_a_kind_of(builder_klass)
|
1062
|
-
end
|
1063
|
-
end
|
1064
|
-
|
1065
1127
|
describe "#clear" do
|
1066
1128
|
|
1067
1129
|
context "when the relation is not polymorphic" do
|
@@ -1695,6 +1757,43 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
1695
1757
|
end
|
1696
1758
|
end
|
1697
1759
|
|
1760
|
+
describe "#any?" do
|
1761
|
+
|
1762
|
+
let(:person) do
|
1763
|
+
Person.create
|
1764
|
+
end
|
1765
|
+
|
1766
|
+
context "when nothing exists on the relation" do
|
1767
|
+
|
1768
|
+
context "when no document is added" do
|
1769
|
+
|
1770
|
+
let!(:sandwich) do
|
1771
|
+
Sandwich.create!
|
1772
|
+
end
|
1773
|
+
|
1774
|
+
it "returns false" do
|
1775
|
+
expect(sandwich.meats.any?).to be false
|
1776
|
+
end
|
1777
|
+
end
|
1778
|
+
|
1779
|
+
context "when the document is destroyed" do
|
1780
|
+
|
1781
|
+
before do
|
1782
|
+
Meat.create!
|
1783
|
+
end
|
1784
|
+
|
1785
|
+
let!(:sandwich) do
|
1786
|
+
Sandwich.create!
|
1787
|
+
end
|
1788
|
+
|
1789
|
+
it "returns false" do
|
1790
|
+
sandwich.destroy
|
1791
|
+
expect(sandwich.meats.any?).to be false
|
1792
|
+
end
|
1793
|
+
end
|
1794
|
+
end
|
1795
|
+
end
|
1796
|
+
|
1698
1797
|
context "when documents have been persisted" do
|
1699
1798
|
|
1700
1799
|
let!(:preference) do
|
@@ -1784,6 +1883,107 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
1784
1883
|
end
|
1785
1884
|
end
|
1786
1885
|
|
1886
|
+
describe "#any?" do
|
1887
|
+
|
1888
|
+
let(:sandwich) do
|
1889
|
+
Sandwich.create
|
1890
|
+
end
|
1891
|
+
|
1892
|
+
context "when nothing exists on the relation" do
|
1893
|
+
|
1894
|
+
context "when no document is added" do
|
1895
|
+
|
1896
|
+
let!(:sandwich) do
|
1897
|
+
Sandwich.create!
|
1898
|
+
end
|
1899
|
+
|
1900
|
+
it "returns false" do
|
1901
|
+
expect(sandwich.meats.any?).to be false
|
1902
|
+
end
|
1903
|
+
end
|
1904
|
+
|
1905
|
+
context "when the document is destroyed" do
|
1906
|
+
|
1907
|
+
before do
|
1908
|
+
Meat.create!
|
1909
|
+
end
|
1910
|
+
|
1911
|
+
let!(:sandwich) do
|
1912
|
+
Sandwich.create!
|
1913
|
+
end
|
1914
|
+
|
1915
|
+
it "returns false" do
|
1916
|
+
sandwich.destroy
|
1917
|
+
expect(sandwich.meats.any?).to be false
|
1918
|
+
end
|
1919
|
+
end
|
1920
|
+
end
|
1921
|
+
|
1922
|
+
context "when appending to a relation and _loaded/_unloaded are empty" do
|
1923
|
+
|
1924
|
+
let!(:sandwich) do
|
1925
|
+
Sandwich.create!
|
1926
|
+
end
|
1927
|
+
|
1928
|
+
before do
|
1929
|
+
sandwich.meats << Meat.new
|
1930
|
+
end
|
1931
|
+
|
1932
|
+
it "returns true" do
|
1933
|
+
expect(sandwich.meats.any?).to be true
|
1934
|
+
end
|
1935
|
+
end
|
1936
|
+
|
1937
|
+
context "when appending to a relation in a transaction" do
|
1938
|
+
require_transaction_support
|
1939
|
+
|
1940
|
+
let!(:sandwich) do
|
1941
|
+
Sandwich.create!
|
1942
|
+
end
|
1943
|
+
|
1944
|
+
it "returns true" do
|
1945
|
+
sandwich.with_session do |session|
|
1946
|
+
session.with_transaction do
|
1947
|
+
expect{ sandwich.meats << Meat.new }.to_not raise_error
|
1948
|
+
expect(sandwich.meats.any?).to be true
|
1949
|
+
end
|
1950
|
+
end
|
1951
|
+
end
|
1952
|
+
end
|
1953
|
+
|
1954
|
+
context "when documents have been persisted" do
|
1955
|
+
|
1956
|
+
let!(:meat) do
|
1957
|
+
sandwich.meats.create
|
1958
|
+
end
|
1959
|
+
|
1960
|
+
it "returns true" do
|
1961
|
+
expect(sandwich.meats.any?).to be true
|
1962
|
+
end
|
1963
|
+
end
|
1964
|
+
|
1965
|
+
context "when documents have not been persisted" do
|
1966
|
+
|
1967
|
+
let!(:meat) do
|
1968
|
+
sandwich.meats.build
|
1969
|
+
end
|
1970
|
+
|
1971
|
+
it "returns false" do
|
1972
|
+
expect(sandwich.meats.any?).to be true
|
1973
|
+
end
|
1974
|
+
end
|
1975
|
+
|
1976
|
+
context "when new documents exist in the database" do
|
1977
|
+
before do
|
1978
|
+
Meat.create(sandwiches: [sandwich])
|
1979
|
+
end
|
1980
|
+
|
1981
|
+
it "returns true" do
|
1982
|
+
expect(sandwich.meats.any?).to be true
|
1983
|
+
end
|
1984
|
+
end
|
1985
|
+
end
|
1986
|
+
|
1787
1987
|
[ :create, :create! ].each do |method|
|
1788
1988
|
|
1789
1989
|
describe "##{method}" do
|
@@ -2175,8 +2375,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2175
2375
|
|
2176
2376
|
let!(:deleted) do
|
2177
2377
|
person.preferences.send(
|
2178
|
-
|
2179
|
-
|
2378
|
+
method,
|
2379
|
+
{ name: "Testing" }
|
2180
2380
|
)
|
2181
2381
|
end
|
2182
2382
|
|
@@ -2365,7 +2565,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2365
2565
|
|
2366
2566
|
let(:preferences) do
|
2367
2567
|
person.preferences.find(
|
2368
|
-
|
2568
|
+
[ unrelated_pref.id, unrelated_pref_two.id ]
|
2369
2569
|
)
|
2370
2570
|
end
|
2371
2571
|
|
@@ -2543,20 +2743,6 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2543
2743
|
end
|
2544
2744
|
end
|
2545
2745
|
|
2546
|
-
describe ".foreign_key_suffix" do
|
2547
|
-
|
2548
|
-
it "returns _ids" do
|
2549
|
-
expect(described_class.foreign_key_suffix).to eq("_ids")
|
2550
|
-
end
|
2551
|
-
end
|
2552
|
-
|
2553
|
-
describe ".macro" do
|
2554
|
-
|
2555
|
-
it "returns has_and_belongs_to_many" do
|
2556
|
-
expect(described_class.macro).to eq(:has_and_belongs_to_many)
|
2557
|
-
end
|
2558
|
-
end
|
2559
|
-
|
2560
2746
|
describe "#max" do
|
2561
2747
|
|
2562
2748
|
let(:person) do
|
@@ -2641,7 +2827,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2641
2827
|
expect(preferences).to eq([ preference_one ])
|
2642
2828
|
end
|
2643
2829
|
|
2644
|
-
context 'when providing a collation'
|
2830
|
+
context 'when providing a collation' do
|
2831
|
+
min_server_version '3.4'
|
2645
2832
|
|
2646
2833
|
let(:preferences) do
|
2647
2834
|
person.preferences.where(name: "FIRST").collation(locale: 'en_US', strength: 2).to_a
|
@@ -2833,9 +3020,13 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2833
3020
|
person.preferences
|
2834
3021
|
end
|
2835
3022
|
|
2836
|
-
Array.public_instance_methods.each do |method|
|
3023
|
+
Array.public_instance_methods.sort.each do |method|
|
3024
|
+
|
3025
|
+
context "when checking Array##{method}" do
|
2837
3026
|
|
2838
|
-
|
3027
|
+
before do
|
3028
|
+
expect([].respond_to?(method)).to be true
|
3029
|
+
end
|
2839
3030
|
|
2840
3031
|
it "returns true" do
|
2841
3032
|
expect(preferences.respond_to?(method)).to be true
|
@@ -2843,9 +3034,9 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2843
3034
|
end
|
2844
3035
|
end
|
2845
3036
|
|
2846
|
-
Mongoid::
|
3037
|
+
Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy.public_instance_methods.sort.each do |method|
|
2847
3038
|
|
2848
|
-
context "when checking
|
3039
|
+
context "when checking Proxy##{method}" do
|
2849
3040
|
|
2850
3041
|
it "returns true" do
|
2851
3042
|
expect(preferences.respond_to?(method)).to be true
|
@@ -2853,9 +3044,9 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2853
3044
|
end
|
2854
3045
|
end
|
2855
3046
|
|
2856
|
-
Preference.scopes.keys.each do |method|
|
3047
|
+
Preference.scopes.keys.sort.each do |method|
|
2857
3048
|
|
2858
|
-
context "when checking #{method}" do
|
3049
|
+
context "when checking scope #{method}" do
|
2859
3050
|
|
2860
3051
|
it "returns true" do
|
2861
3052
|
expect(preferences.respond_to?(method)).to be true
|
@@ -2864,29 +3055,38 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2864
3055
|
end
|
2865
3056
|
end
|
2866
3057
|
|
2867
|
-
describe ".stores_foreign_key?" do
|
2868
|
-
|
2869
|
-
it "returns true" do
|
2870
|
-
expect(described_class.stores_foreign_key?).to be true
|
2871
|
-
end
|
2872
|
-
end
|
2873
|
-
|
2874
3058
|
describe "#scoped" do
|
2875
3059
|
|
2876
|
-
let(:person) do
|
2877
|
-
Person.new
|
2878
|
-
end
|
2879
|
-
|
2880
3060
|
let(:scoped) do
|
2881
3061
|
person.preferences.scoped
|
2882
3062
|
end
|
2883
3063
|
|
2884
|
-
|
2885
|
-
|
3064
|
+
context 'when association is empty' do
|
3065
|
+
|
3066
|
+
let(:person) do
|
3067
|
+
Person.new
|
3068
|
+
end
|
3069
|
+
|
3070
|
+
it "returns the relation criteria" do
|
3071
|
+
expect(scoped).to be_a(Mongoid::Criteria)
|
3072
|
+
end
|
3073
|
+
|
3074
|
+
it "returns with an empty selector" do
|
3075
|
+
expect(scoped.selector).to eq("_id" => { "$in" => [] })
|
3076
|
+
end
|
2886
3077
|
end
|
2887
3078
|
|
2888
|
-
|
2889
|
-
|
3079
|
+
context 'when association is not empty' do
|
3080
|
+
|
3081
|
+
let(:person) do
|
3082
|
+
Person.create!(preferences: [
|
3083
|
+
Preference.new(id: 123),
|
3084
|
+
])
|
3085
|
+
end
|
3086
|
+
|
3087
|
+
it "returns with a selector including association element ids" do
|
3088
|
+
expect(scoped.selector).to eq("_id" => { "$in" => [123] })
|
3089
|
+
end
|
2890
3090
|
end
|
2891
3091
|
end
|
2892
3092
|
|
@@ -2976,33 +3176,6 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2976
3176
|
end
|
2977
3177
|
end
|
2978
3178
|
|
2979
|
-
describe ".valid_options" do
|
2980
|
-
|
2981
|
-
it "returns the valid options" do
|
2982
|
-
expect(described_class.valid_options).to eq(
|
2983
|
-
[
|
2984
|
-
:after_add,
|
2985
|
-
:after_remove,
|
2986
|
-
:autosave,
|
2987
|
-
:before_add,
|
2988
|
-
:before_remove,
|
2989
|
-
:dependent,
|
2990
|
-
:foreign_key,
|
2991
|
-
:index,
|
2992
|
-
:order,
|
2993
|
-
:primary_key
|
2994
|
-
]
|
2995
|
-
)
|
2996
|
-
end
|
2997
|
-
end
|
2998
|
-
|
2999
|
-
describe ".validation_default" do
|
3000
|
-
|
3001
|
-
it "returns true" do
|
3002
|
-
expect(described_class.validation_default).to be true
|
3003
|
-
end
|
3004
|
-
end
|
3005
|
-
|
3006
3179
|
context "when setting the ids directly after the documents" do
|
3007
3180
|
|
3008
3181
|
let!(:person) do
|
@@ -3023,7 +3196,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3023
3196
|
|
3024
3197
|
before do
|
3025
3198
|
person.update_attributes(
|
3026
|
-
|
3199
|
+
houses: [ wife_house, exwife_house, girlfriend_house ]
|
3027
3200
|
)
|
3028
3201
|
person.update_attributes(house_ids: [ girlfriend_house.id ])
|
3029
3202
|
end
|
@@ -3208,14 +3381,14 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3208
3381
|
|
3209
3382
|
it "orders the documents" do
|
3210
3383
|
expect(person.ordered_preferences(true)).to eq(
|
3211
|
-
|
3212
|
-
|
3384
|
+
[preference_two, preference_three, preference_one]
|
3385
|
+
)
|
3213
3386
|
end
|
3214
3387
|
|
3215
3388
|
it "chains default criteria with additional" do
|
3216
3389
|
expect(person.ordered_preferences.order_by(:name.desc).to_a).to eq(
|
3217
|
-
|
3218
|
-
|
3390
|
+
[preference_three, preference_two, preference_one]
|
3391
|
+
)
|
3219
3392
|
end
|
3220
3393
|
end
|
3221
3394
|
|
@@ -3273,7 +3446,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3273
3446
|
|
3274
3447
|
before do
|
3275
3448
|
Preference.collection.find({ _id: preference_one.id }).
|
3276
|
-
|
3449
|
+
update_one({ "$set" => { name: "reloaded" }})
|
3277
3450
|
end
|
3278
3451
|
|
3279
3452
|
let(:reloaded) do
|
@@ -3367,8 +3540,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3367
3540
|
|
3368
3541
|
it "persists the change in id order" do
|
3369
3542
|
expect(reloaded.preference_ids).to eq(
|
3370
|
-
|
3371
|
-
|
3543
|
+
[ preference_two.id, preference_one.id ]
|
3544
|
+
)
|
3372
3545
|
end
|
3373
3546
|
end
|
3374
3547
|
|
@@ -3380,7 +3553,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3380
3553
|
|
3381
3554
|
before do
|
3382
3555
|
person.preference_ids =
|
3383
|
-
|
3556
|
+
[ preference_two.id, preference_one.id, preference_three.id ]
|
3384
3557
|
person.save
|
3385
3558
|
end
|
3386
3559
|
|
@@ -3390,8 +3563,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3390
3563
|
|
3391
3564
|
it "also persists the change in id order" do
|
3392
3565
|
expect(reloaded.preference_ids).to eq(
|
3393
|
-
|
3394
|
-
|
3566
|
+
[ preference_two.id, preference_one.id, preference_three.id ]
|
3567
|
+
)
|
3395
3568
|
end
|
3396
3569
|
end
|
3397
3570
|
|
@@ -3403,10 +3576,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3403
3576
|
|
3404
3577
|
before do
|
3405
3578
|
person.preference_ids =
|
3406
|
-
|
3579
|
+
[ preference_one.id, preference_two.id, preference_three.id ]
|
3407
3580
|
person.save
|
3408
3581
|
person.preference_ids =
|
3409
|
-
|
3582
|
+
[ preference_three.id, preference_two.id ]
|
3410
3583
|
person.save
|
3411
3584
|
end
|
3412
3585
|
|
@@ -3416,8 +3589,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3416
3589
|
|
3417
3590
|
it "also persists the change in id order" do
|
3418
3591
|
expect(reloaded.preference_ids).to eq(
|
3419
|
-
|
3420
|
-
|
3592
|
+
[ preference_three.id, preference_two.id ]
|
3593
|
+
)
|
3421
3594
|
end
|
3422
3595
|
end
|
3423
3596
|
end
|
@@ -3543,9 +3716,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3543
3716
|
field :n, type: String, as: :name
|
3544
3717
|
|
3545
3718
|
has_and_belongs_to_many :distributors,
|
3546
|
-
|
3547
|
-
|
3548
|
-
inverse_class_name: 'Distributor'
|
3719
|
+
foreign_key: :d_ids,
|
3720
|
+
inverse_of: 'p'
|
3549
3721
|
end
|
3550
3722
|
|
3551
3723
|
class Distributor
|
@@ -3554,9 +3726,8 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3554
3726
|
field :n, type: String, as: :name
|
3555
3727
|
|
3556
3728
|
has_and_belongs_to_many :projects,
|
3557
|
-
|
3558
|
-
|
3559
|
-
inverse_class_name: 'Project'
|
3729
|
+
foreign_key: :p_ids,
|
3730
|
+
inverse_of: 'd'
|
3560
3731
|
end
|
3561
3732
|
end
|
3562
3733
|
|