mongoid 6.4.4 → 7.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +13 -13
- data/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
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
4
|
+
require 'spec_helper'
|
|
5
|
+
require_relative '../mongoid/shardable_models'
|
|
6
|
+
|
|
7
|
+
describe 'Sharding helpers' do
|
|
8
|
+
require_topology :sharded
|
|
9
|
+
|
|
10
|
+
describe 'shard_collection rake task' do
|
|
11
|
+
let(:shard_collections) do
|
|
12
|
+
Mongoid::Tasks::Database.shard_collections([model_cls])
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
let(:create_indexes) do
|
|
16
|
+
Mongoid::Tasks::Database.create_indexes([model_cls])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
shared_examples_for 'shards collection' do
|
|
20
|
+
it 'returns the model class' do
|
|
21
|
+
shard_collections.should == [model_cls]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'shards collection' do
|
|
25
|
+
shard_collections
|
|
26
|
+
|
|
27
|
+
stats = model_cls.collection.database.command(collStats: model_cls.collection.name).first
|
|
28
|
+
stats[:sharded].should be true
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context 'simple model' do
|
|
33
|
+
let(:model_cls) { SmMovie }
|
|
34
|
+
|
|
35
|
+
before do
|
|
36
|
+
SmMovie.collection.drop
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it_behaves_like 'shards collection'
|
|
40
|
+
|
|
41
|
+
it 'makes inserts work' do
|
|
42
|
+
shard_collections
|
|
43
|
+
create_indexes
|
|
44
|
+
|
|
45
|
+
SmMovie.create!(year: 2020)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context 'when database does not exist' do
|
|
50
|
+
let(:model_cls) { SmMovie }
|
|
51
|
+
|
|
52
|
+
before do
|
|
53
|
+
SmMovie.collection.database.drop
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it_behaves_like 'shards collection'
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
context 'when database exists but collection does not exist' do
|
|
60
|
+
let(:model_cls) { SmMovie }
|
|
61
|
+
|
|
62
|
+
before do
|
|
63
|
+
SmMovie.collection.database.drop
|
|
64
|
+
SmMovie.collection.create
|
|
65
|
+
SmMovie.collection.drop
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it_behaves_like 'shards collection'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context 'when collection is already sharded' do
|
|
72
|
+
let(:model_cls) { SmMovie }
|
|
73
|
+
|
|
74
|
+
before do
|
|
75
|
+
Mongoid::Tasks::Database.shard_collections([model_cls])
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it_behaves_like 'shards collection'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
context 'when hashed shard key is given' do
|
|
82
|
+
let(:model_cls) { SmAssistant }
|
|
83
|
+
|
|
84
|
+
before do
|
|
85
|
+
SmAssistant.collection.drop
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it_behaves_like 'shards collection'
|
|
89
|
+
|
|
90
|
+
it 'makes inserts work' do
|
|
91
|
+
shard_collections
|
|
92
|
+
create_indexes
|
|
93
|
+
|
|
94
|
+
SmAssistant.create!(gender: 'm')
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
context 'when shard configuration is invalid' do
|
|
99
|
+
let(:model_cls) { SmActor }
|
|
100
|
+
|
|
101
|
+
it 'returns empty array' do
|
|
102
|
+
shard_collections.should == []
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it 'does not shards collection' do
|
|
106
|
+
shard_collections
|
|
107
|
+
|
|
108
|
+
stats = model_cls.collection.database.command(collStats: model_cls.collection.name).first
|
|
109
|
+
stats[:sharded].should be false
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
context 'when models have no sharded configuration' do
|
|
115
|
+
let(:model_cls) { SmNotSharded }
|
|
116
|
+
|
|
117
|
+
before do
|
|
118
|
+
model_cls.shard_config.should be nil
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'returns empty array' do
|
|
122
|
+
shard_collections.should == []
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
context 'pre-4.2' do
|
|
126
|
+
max_server_version '4.0'
|
|
127
|
+
|
|
128
|
+
it 'does not shards collection' do
|
|
129
|
+
shard_collections
|
|
130
|
+
|
|
131
|
+
lambda do
|
|
132
|
+
model_cls.collection.database.command(collStats: model_cls.collection.name).first
|
|
133
|
+
end.should raise_error(Mongo::Error::OperationFailure, /Collection.*not found/)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
context '4.2+' do
|
|
138
|
+
min_server_version '4.2'
|
|
139
|
+
|
|
140
|
+
it 'does not shards collection' do
|
|
141
|
+
shard_collections
|
|
142
|
+
|
|
143
|
+
stats = model_cls.collection.database.command(collStats: model_cls.collection.name).first
|
|
144
|
+
stats[:sharded].should be false
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
4
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
5
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
6
|
+
|
|
7
|
+
# Load byebug before mongoid, to place breakpoints in the lib methods.
|
|
8
|
+
# But SpecConfig needs the driver code - require the driver here.
|
|
9
|
+
require "mongo"
|
|
10
|
+
|
|
11
|
+
# MRI 2.5 and JRuby 9.2 change visibility of Object#pp when 'pp' is required,
|
|
12
|
+
# which happens when RSpec reports anything. This creates an issue for tests
|
|
13
|
+
# that verify method forwarding. Work around by proactively loading 'pp'.
|
|
14
|
+
# https://github.com/jruby/jruby/issues/5599
|
|
15
|
+
require 'pp'
|
|
16
|
+
|
|
17
|
+
require 'support/spec_config'
|
|
18
|
+
require 'support/lite_constraints'
|
|
19
|
+
require "support/session_registry"
|
|
20
|
+
|
|
21
|
+
unless SpecConfig.instance.ci?
|
|
22
|
+
begin
|
|
23
|
+
require 'byebug'
|
|
24
|
+
rescue LoadError
|
|
25
|
+
# jruby - try pry
|
|
26
|
+
begin
|
|
27
|
+
require 'pry'
|
|
28
|
+
# jruby likes to raise random error classes, in this case
|
|
29
|
+
# NameError in addition to LoadError
|
|
30
|
+
rescue Exception
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
require 'mongoid'
|
|
36
|
+
|
|
37
|
+
if SpecConfig.instance.mri?
|
|
38
|
+
require 'timeout_interrupt'
|
|
39
|
+
else
|
|
40
|
+
require 'timeout'
|
|
41
|
+
TimeoutInterrupt = Timeout
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
RSpec.configure do |config|
|
|
45
|
+
config.expect_with(:rspec) do |c|
|
|
46
|
+
c.syntax = [:should, :expect]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
if SpecConfig.instance.ci?
|
|
50
|
+
config.add_formatter(RSpec::Core::Formatters::JsonFormatter, File.join(File.dirname(__FILE__), '../tmp/rspec.json'))
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
if SpecConfig.instance.ci? && !%w(1 true yes).include?(ENV['INTERACTIVE']&.downcase)
|
|
54
|
+
timeout = if SpecConfig.instance.app_tests?
|
|
55
|
+
# Allow 5 minutes per test for the app tests, since they install
|
|
56
|
+
# gems for Rails applications which can take a long time.
|
|
57
|
+
300
|
|
58
|
+
else
|
|
59
|
+
# Allow a max of 30 seconds per test.
|
|
60
|
+
# Tests should take under 10 seconds ideally but it seems
|
|
61
|
+
# we have some that run for more than 10 seconds in CI.
|
|
62
|
+
30
|
|
63
|
+
end
|
|
64
|
+
config.around(:each) do |example|
|
|
65
|
+
TimeoutInterrupt.timeout(timeout) do
|
|
66
|
+
example.run
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
config.extend(LiteConstraints)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# require all shared examples
|
|
75
|
+
Dir['./spec/support/shared/*.rb'].sort.each { |file| require file }
|
|
@@ -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::Accessors do
|
|
4
7
|
|
|
5
8
|
describe "\#{getter}?" do
|
|
6
9
|
|
|
@@ -8,9 +11,9 @@ describe Mongoid::Relations::Accessors do
|
|
|
8
11
|
Person.create
|
|
9
12
|
end
|
|
10
13
|
|
|
11
|
-
context "when the
|
|
14
|
+
context "when the association is a has one" do
|
|
12
15
|
|
|
13
|
-
context "when the
|
|
16
|
+
context "when the association exists" do
|
|
14
17
|
|
|
15
18
|
let!(:game) do
|
|
16
19
|
person.build_game
|
|
@@ -21,7 +24,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
21
24
|
end
|
|
22
25
|
end
|
|
23
26
|
|
|
24
|
-
context "when the
|
|
27
|
+
context "when the association does not exist" do
|
|
25
28
|
|
|
26
29
|
context "when not autobuilding" do
|
|
27
30
|
|
|
@@ -39,9 +42,9 @@ describe Mongoid::Relations::Accessors do
|
|
|
39
42
|
end
|
|
40
43
|
end
|
|
41
44
|
|
|
42
|
-
context "when the
|
|
45
|
+
context "when the association is a has many" do
|
|
43
46
|
|
|
44
|
-
context "when the
|
|
47
|
+
context "when the association has documents" do
|
|
45
48
|
|
|
46
49
|
let!(:post) do
|
|
47
50
|
person.posts.build
|
|
@@ -52,7 +55,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
52
55
|
end
|
|
53
56
|
end
|
|
54
57
|
|
|
55
|
-
context "when the
|
|
58
|
+
context "when the association does not have documents" do
|
|
56
59
|
|
|
57
60
|
it "returns false" do
|
|
58
61
|
expect(person).to_not have_posts
|
|
@@ -60,9 +63,9 @@ describe Mongoid::Relations::Accessors do
|
|
|
60
63
|
end
|
|
61
64
|
end
|
|
62
65
|
|
|
63
|
-
context "when the
|
|
66
|
+
context "when the association is a has and belongs to many" do
|
|
64
67
|
|
|
65
|
-
context "when the
|
|
68
|
+
context "when the association has documents" do
|
|
66
69
|
|
|
67
70
|
let!(:preference) do
|
|
68
71
|
person.preferences.build
|
|
@@ -73,7 +76,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
73
76
|
end
|
|
74
77
|
end
|
|
75
78
|
|
|
76
|
-
context "when the
|
|
79
|
+
context "when the association does not have documents" do
|
|
77
80
|
|
|
78
81
|
it "returns false" do
|
|
79
82
|
expect(person).to_not have_preferences
|
|
@@ -81,9 +84,9 @@ describe Mongoid::Relations::Accessors do
|
|
|
81
84
|
end
|
|
82
85
|
end
|
|
83
86
|
|
|
84
|
-
context "when the
|
|
87
|
+
context "when the association is a belongs to" do
|
|
85
88
|
|
|
86
|
-
context "when the
|
|
89
|
+
context "when the association is named next" do
|
|
87
90
|
|
|
88
91
|
let(:user) do
|
|
89
92
|
User.create
|
|
@@ -94,7 +97,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
94
97
|
end
|
|
95
98
|
end
|
|
96
99
|
|
|
97
|
-
context "when the
|
|
100
|
+
context "when the association exists" do
|
|
98
101
|
|
|
99
102
|
let!(:game) do
|
|
100
103
|
person.build_game
|
|
@@ -105,9 +108,9 @@ describe Mongoid::Relations::Accessors do
|
|
|
105
108
|
end
|
|
106
109
|
end
|
|
107
110
|
|
|
108
|
-
context "when the
|
|
111
|
+
context "when the association does not exist" do
|
|
109
112
|
|
|
110
|
-
context "when the
|
|
113
|
+
context "when the association does not autobuild" do
|
|
111
114
|
|
|
112
115
|
let(:game) do
|
|
113
116
|
Game.new
|
|
@@ -118,7 +121,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
118
121
|
end
|
|
119
122
|
end
|
|
120
123
|
|
|
121
|
-
context "when the
|
|
124
|
+
context "when the association autobuilds" do
|
|
122
125
|
|
|
123
126
|
let(:book) do
|
|
124
127
|
Book.new
|
|
@@ -131,9 +134,9 @@ describe Mongoid::Relations::Accessors do
|
|
|
131
134
|
end
|
|
132
135
|
end
|
|
133
136
|
|
|
134
|
-
context "when the
|
|
137
|
+
context "when the association is an embeds one" do
|
|
135
138
|
|
|
136
|
-
context "when the
|
|
139
|
+
context "when the association exists" do
|
|
137
140
|
|
|
138
141
|
let!(:name) do
|
|
139
142
|
person.build_name
|
|
@@ -144,16 +147,16 @@ describe Mongoid::Relations::Accessors do
|
|
|
144
147
|
end
|
|
145
148
|
end
|
|
146
149
|
|
|
147
|
-
context "when the
|
|
150
|
+
context "when the association does not exist" do
|
|
148
151
|
|
|
149
|
-
context "when the
|
|
152
|
+
context "when the association does not autobuild" do
|
|
150
153
|
|
|
151
154
|
it "returns false" do
|
|
152
155
|
expect(person).to_not have_name
|
|
153
156
|
end
|
|
154
157
|
end
|
|
155
158
|
|
|
156
|
-
context "when the
|
|
159
|
+
context "when the association autobuilds" do
|
|
157
160
|
|
|
158
161
|
let(:person) do
|
|
159
162
|
Person.new
|
|
@@ -166,9 +169,9 @@ describe Mongoid::Relations::Accessors do
|
|
|
166
169
|
end
|
|
167
170
|
end
|
|
168
171
|
|
|
169
|
-
context "when the
|
|
172
|
+
context "when the association is an embeds many" do
|
|
170
173
|
|
|
171
|
-
context "when the
|
|
174
|
+
context "when the association has documents" do
|
|
172
175
|
|
|
173
176
|
let!(:address) do
|
|
174
177
|
person.addresses.build
|
|
@@ -179,7 +182,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
179
182
|
end
|
|
180
183
|
end
|
|
181
184
|
|
|
182
|
-
context "when the
|
|
185
|
+
context "when the association does not have documents" do
|
|
183
186
|
|
|
184
187
|
it "returns false" do
|
|
185
188
|
expect(person).to_not have_addresses
|
|
@@ -187,9 +190,9 @@ describe Mongoid::Relations::Accessors do
|
|
|
187
190
|
end
|
|
188
191
|
end
|
|
189
192
|
|
|
190
|
-
context "when the
|
|
193
|
+
context "when the association is an embedded in" do
|
|
191
194
|
|
|
192
|
-
context "when the
|
|
195
|
+
context "when the association exists" do
|
|
193
196
|
|
|
194
197
|
let!(:name) do
|
|
195
198
|
person.build_name
|
|
@@ -200,9 +203,9 @@ describe Mongoid::Relations::Accessors do
|
|
|
200
203
|
end
|
|
201
204
|
end
|
|
202
205
|
|
|
203
|
-
context "when the
|
|
206
|
+
context "when the association does not exist" do
|
|
204
207
|
|
|
205
|
-
context "when the
|
|
208
|
+
context "when the association does not autobuild" do
|
|
206
209
|
|
|
207
210
|
let(:name) do
|
|
208
211
|
Name.new
|
|
@@ -213,7 +216,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
213
216
|
end
|
|
214
217
|
end
|
|
215
218
|
|
|
216
|
-
context "when the
|
|
219
|
+
context "when the association autobuilds" do
|
|
217
220
|
|
|
218
221
|
let(:passport) do
|
|
219
222
|
Passport.new
|
|
@@ -233,11 +236,11 @@ describe Mongoid::Relations::Accessors do
|
|
|
233
236
|
Person.new
|
|
234
237
|
end
|
|
235
238
|
|
|
236
|
-
context "when autobuilding the
|
|
239
|
+
context "when autobuilding the association" do
|
|
237
240
|
|
|
238
|
-
context "when the
|
|
241
|
+
context "when the association is an embeds one" do
|
|
239
242
|
|
|
240
|
-
context "when the
|
|
243
|
+
context "when the association does not exist" do
|
|
241
244
|
|
|
242
245
|
let!(:passport) do
|
|
243
246
|
person.passport
|
|
@@ -252,7 +255,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
252
255
|
end
|
|
253
256
|
end
|
|
254
257
|
|
|
255
|
-
context "when the
|
|
258
|
+
context "when the association exists" do
|
|
256
259
|
|
|
257
260
|
let!(:passport) do
|
|
258
261
|
person.build_passport(number: "123123321")
|
|
@@ -261,16 +264,17 @@ describe Mongoid::Relations::Accessors do
|
|
|
261
264
|
it "does not build a new document" do
|
|
262
265
|
expect(person.passport).to eq(passport)
|
|
263
266
|
end
|
|
267
|
+
|
|
264
268
|
end
|
|
265
269
|
end
|
|
266
270
|
|
|
267
|
-
context "when the
|
|
271
|
+
context "when the association is an embedded in" do
|
|
268
272
|
|
|
269
273
|
let(:passport) do
|
|
270
274
|
Passport.new
|
|
271
275
|
end
|
|
272
276
|
|
|
273
|
-
context "when the
|
|
277
|
+
context "when the association does not exist" do
|
|
274
278
|
|
|
275
279
|
let(:person) do
|
|
276
280
|
passport.person
|
|
@@ -281,7 +285,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
281
285
|
end
|
|
282
286
|
end
|
|
283
287
|
|
|
284
|
-
context "when the
|
|
288
|
+
context "when the association exists" do
|
|
285
289
|
|
|
286
290
|
let!(:person) do
|
|
287
291
|
passport.build_person(title: "sir")
|
|
@@ -293,9 +297,9 @@ describe Mongoid::Relations::Accessors do
|
|
|
293
297
|
end
|
|
294
298
|
end
|
|
295
299
|
|
|
296
|
-
context "when the
|
|
300
|
+
context "when the association is a has one" do
|
|
297
301
|
|
|
298
|
-
context "when the
|
|
302
|
+
context "when the association does not exist" do
|
|
299
303
|
|
|
300
304
|
let(:book) do
|
|
301
305
|
person.book
|
|
@@ -306,7 +310,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
306
310
|
end
|
|
307
311
|
end
|
|
308
312
|
|
|
309
|
-
context "when the
|
|
313
|
+
context "when the association exists" do
|
|
310
314
|
|
|
311
315
|
let!(:book) do
|
|
312
316
|
person.build_book(title: "art of war")
|
|
@@ -318,13 +322,13 @@ describe Mongoid::Relations::Accessors do
|
|
|
318
322
|
end
|
|
319
323
|
end
|
|
320
324
|
|
|
321
|
-
context "when the
|
|
325
|
+
context "when the association is a belongs to" do
|
|
322
326
|
|
|
323
327
|
let(:book) do
|
|
324
328
|
Book.new
|
|
325
329
|
end
|
|
326
330
|
|
|
327
|
-
context "when the
|
|
331
|
+
context "when the association does not exist" do
|
|
328
332
|
|
|
329
333
|
let(:person) do
|
|
330
334
|
book.person
|
|
@@ -335,7 +339,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
335
339
|
end
|
|
336
340
|
end
|
|
337
341
|
|
|
338
|
-
context "when the
|
|
342
|
+
context "when the association exists" do
|
|
339
343
|
|
|
340
344
|
let!(:person) do
|
|
341
345
|
book.build_person(title: "sir")
|
|
@@ -348,13 +352,13 @@ describe Mongoid::Relations::Accessors do
|
|
|
348
352
|
end
|
|
349
353
|
end
|
|
350
354
|
|
|
351
|
-
context "when the
|
|
355
|
+
context "when the association is not polymorphic" do
|
|
352
356
|
|
|
353
357
|
let(:person) do
|
|
354
358
|
Person.create
|
|
355
359
|
end
|
|
356
360
|
|
|
357
|
-
context "when the
|
|
361
|
+
context "when the association is a many to many" do
|
|
358
362
|
|
|
359
363
|
let!(:preference) do
|
|
360
364
|
Preference.create(name: "Setting")
|
|
@@ -364,7 +368,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
364
368
|
person.preferences << Preference.last
|
|
365
369
|
end
|
|
366
370
|
|
|
367
|
-
context "when reloading the
|
|
371
|
+
context "when reloading the association directly" do
|
|
368
372
|
|
|
369
373
|
let(:preferences) do
|
|
370
374
|
person.preferences(true)
|
|
@@ -406,7 +410,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
406
410
|
end
|
|
407
411
|
end
|
|
408
412
|
|
|
409
|
-
context "when the
|
|
413
|
+
context "when the association is a many to one" do
|
|
410
414
|
|
|
411
415
|
let!(:post) do
|
|
412
416
|
Post.create(title: "First!")
|
|
@@ -416,7 +420,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
416
420
|
person.posts << Post.last
|
|
417
421
|
end
|
|
418
422
|
|
|
419
|
-
context "when reloading the
|
|
423
|
+
context "when reloading the association directly" do
|
|
420
424
|
|
|
421
425
|
let(:posts) do
|
|
422
426
|
person.posts(true)
|
|
@@ -458,7 +462,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
458
462
|
end
|
|
459
463
|
end
|
|
460
464
|
|
|
461
|
-
context "when the
|
|
465
|
+
context "when the association is a references one" do
|
|
462
466
|
|
|
463
467
|
let!(:game) do
|
|
464
468
|
Game.create(name: "Centipeded")
|
|
@@ -468,7 +472,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
468
472
|
person.game = Game.last
|
|
469
473
|
end
|
|
470
474
|
|
|
471
|
-
context "when reloading the
|
|
475
|
+
context "when reloading the association directly" do
|
|
472
476
|
|
|
473
477
|
let(:reloaded_game) do
|
|
474
478
|
person.game(true)
|
|
@@ -511,7 +515,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
511
515
|
end
|
|
512
516
|
end
|
|
513
517
|
|
|
514
|
-
context "when the
|
|
518
|
+
context "when the association is polymorphic" do
|
|
515
519
|
|
|
516
520
|
context "when there's a single references many/one" do
|
|
517
521
|
|
|
@@ -565,9 +569,183 @@ describe Mongoid::Relations::Accessors do
|
|
|
565
569
|
end
|
|
566
570
|
end
|
|
567
571
|
end
|
|
572
|
+
|
|
573
|
+
context 'when projecting' do
|
|
574
|
+
context 'embeds_one' do
|
|
575
|
+
|
|
576
|
+
let!(:person) do
|
|
577
|
+
Person.create!(passport: Passport.new(number: "123123321", country: "USA"))
|
|
578
|
+
end
|
|
579
|
+
|
|
580
|
+
context "when the record is queried with the embedded association projected" do
|
|
581
|
+
let(:persisted_person) { Person.only(:passport).first }
|
|
582
|
+
|
|
583
|
+
it 'creates an accessor for the projected embedded document' do
|
|
584
|
+
expect(persisted_person.passport.number).to eq("123123321")
|
|
585
|
+
expect(persisted_person.passport.country).to eq("USA")
|
|
586
|
+
end
|
|
587
|
+
end
|
|
588
|
+
|
|
589
|
+
context 'when the record is queried with a field on the embedded association projected' do
|
|
590
|
+
let(:persisted_person) { Person.only("pass.number").first }
|
|
591
|
+
|
|
592
|
+
it 'creates an accessor for the projected field on the embedded document' do
|
|
593
|
+
expect(persisted_person.passport.number).to eq("123123321")
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
it 'does not create an accessor for another field on the embedded document' do
|
|
597
|
+
expect do
|
|
598
|
+
persisted_person.passport.country
|
|
599
|
+
end.to raise_error(ActiveModel::MissingAttributeError)
|
|
600
|
+
end
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
context 'when projecting association and a field in association' do
|
|
604
|
+
shared_examples 'is prohibited on 4.4+ server' do
|
|
605
|
+
context '4.4 server and higher' do
|
|
606
|
+
min_server_version '4.4'
|
|
607
|
+
|
|
608
|
+
it 'is not allowed by server' do
|
|
609
|
+
lambda do
|
|
610
|
+
persisted_person
|
|
611
|
+
end.should raise_error(Mongo::Error::OperationFailure, /Path collision at pass/)
|
|
612
|
+
end
|
|
613
|
+
end
|
|
614
|
+
end
|
|
615
|
+
|
|
616
|
+
context 'association then field' do
|
|
617
|
+
let(:persisted_person) { Person.only(:pass, "pass.number").first }
|
|
618
|
+
|
|
619
|
+
context '4.2 server and lower' do
|
|
620
|
+
max_server_version '4.2'
|
|
621
|
+
|
|
622
|
+
it 'creates an accessor for the projected field on the embedded document' do
|
|
623
|
+
expect(persisted_person.passport.number).to eq("123123321")
|
|
624
|
+
end
|
|
625
|
+
|
|
626
|
+
it 'does not create an accessor for another field on the embedded document' do
|
|
627
|
+
expect do
|
|
628
|
+
persisted_person.passport.country
|
|
629
|
+
end.to raise_error(ActiveModel::MissingAttributeError)
|
|
630
|
+
end
|
|
631
|
+
end
|
|
632
|
+
|
|
633
|
+
include_examples 'is prohibited on 4.4+ server'
|
|
634
|
+
end
|
|
635
|
+
|
|
636
|
+
context 'field then association' do
|
|
637
|
+
let(:persisted_person) { Person.only('pass.number', :pass).first }
|
|
638
|
+
|
|
639
|
+
context '4.2 server and lower' do
|
|
640
|
+
max_server_version '4.2'
|
|
641
|
+
|
|
642
|
+
it 'creates an accessor for the projected field on the embedded document' do
|
|
643
|
+
expect(persisted_person.passport.number).to eq("123123321")
|
|
644
|
+
end
|
|
645
|
+
|
|
646
|
+
it 'retrieves other fields' do
|
|
647
|
+
persisted_person.passport.country.should == 'USA'
|
|
648
|
+
end
|
|
649
|
+
end
|
|
650
|
+
|
|
651
|
+
include_examples 'is prohibited on 4.4+ server'
|
|
652
|
+
end
|
|
653
|
+
end
|
|
654
|
+
end
|
|
655
|
+
|
|
656
|
+
context 'embeds_many' do
|
|
657
|
+
|
|
658
|
+
let!(:person) do
|
|
659
|
+
Person.create!(phone_numbers: [
|
|
660
|
+
Phone.new(number: '111-111-1111', landline: true),
|
|
661
|
+
])
|
|
662
|
+
end
|
|
663
|
+
|
|
664
|
+
context 'when the record is queried with the embedded association projected' do
|
|
665
|
+
let(:persisted_person) { Person.only(:phone_numbers).first }
|
|
666
|
+
|
|
667
|
+
it 'creates an accessor for the embedded document' do
|
|
668
|
+
expect(persisted_person.phone_numbers.first.number).to eq('111-111-1111')
|
|
669
|
+
expect(persisted_person.phone_numbers.first.landline).to be true
|
|
670
|
+
end
|
|
671
|
+
end
|
|
672
|
+
|
|
673
|
+
shared_examples 'allows access to field of projected association' do
|
|
674
|
+
it 'creates an accessor for the embedded document' do
|
|
675
|
+
expect(persisted_person.phone_numbers.first).to be_a_kind_of(Phone)
|
|
676
|
+
end
|
|
677
|
+
|
|
678
|
+
it 'creates an accessor for the projected field on the embedded document' do
|
|
679
|
+
expect(persisted_person.phone_numbers.first.number).to eq('111-111-1111')
|
|
680
|
+
end
|
|
681
|
+
end
|
|
682
|
+
|
|
683
|
+
context 'when the record is queried with a field on the embedded association projected' do
|
|
684
|
+
let(:persisted_person) { Person.only("phone_numbers.number").first }
|
|
685
|
+
|
|
686
|
+
include_examples 'allows access to field of projected association'
|
|
687
|
+
|
|
688
|
+
it 'does not create an accessor for another field on the embedded document' do
|
|
689
|
+
expect do
|
|
690
|
+
persisted_person.phone_numbers.first.landline
|
|
691
|
+
end.to raise_error(ActiveModel::MissingAttributeError)
|
|
692
|
+
end
|
|
693
|
+
end
|
|
694
|
+
|
|
695
|
+
context 'when projecting association and a field in association' do
|
|
696
|
+
|
|
697
|
+
shared_examples 'is prohibited on 4.4+ server' do
|
|
698
|
+
context '4.4 server and higher' do
|
|
699
|
+
min_server_version '4.4'
|
|
700
|
+
|
|
701
|
+
it 'is not allowed by server' do
|
|
702
|
+
lambda do
|
|
703
|
+
persisted_person
|
|
704
|
+
end.should raise_error(Mongo::Error::OperationFailure, /Path collision at phone_numbers/)
|
|
705
|
+
end
|
|
706
|
+
end
|
|
707
|
+
end
|
|
708
|
+
|
|
709
|
+
context 'association then field' do
|
|
710
|
+
let(:persisted_person) { Person.only(:phone_numbers, 'phone_numbers.number').first }
|
|
711
|
+
|
|
712
|
+
context '4.2 server and lower' do
|
|
713
|
+
max_server_version '4.2'
|
|
714
|
+
|
|
715
|
+
include_examples 'allows access to field of projected association'
|
|
716
|
+
|
|
717
|
+
it 'does not create an accessor for another field on the embedded document' do
|
|
718
|
+
expect do
|
|
719
|
+
persisted_person.phone_numbers.first.landline
|
|
720
|
+
end.to raise_error(ActiveModel::MissingAttributeError)
|
|
721
|
+
end
|
|
722
|
+
|
|
723
|
+
end
|
|
724
|
+
|
|
725
|
+
include_examples 'is prohibited on 4.4+ server'
|
|
726
|
+
end
|
|
727
|
+
|
|
728
|
+
context 'field then association' do
|
|
729
|
+
let(:persisted_person) { Person.only('phone_numbers.number', :phone_numbers).first }
|
|
730
|
+
|
|
731
|
+
context '4.2 server and lower' do
|
|
732
|
+
max_server_version '4.2'
|
|
733
|
+
|
|
734
|
+
include_examples 'allows access to field of projected association'
|
|
735
|
+
|
|
736
|
+
it 'retrieves all fields of association' do
|
|
737
|
+
persisted_person.phone_numbers.first.landline.should be true
|
|
738
|
+
end
|
|
739
|
+
end
|
|
740
|
+
|
|
741
|
+
include_examples 'is prohibited on 4.4+ server'
|
|
742
|
+
end
|
|
743
|
+
end
|
|
744
|
+
end
|
|
745
|
+
end
|
|
568
746
|
end
|
|
569
747
|
|
|
570
|
-
context "when setting
|
|
748
|
+
context "when setting associations to empty values" do
|
|
571
749
|
|
|
572
750
|
context "when the document is a referenced in" do
|
|
573
751
|
|
|
@@ -575,7 +753,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
575
753
|
Post.new
|
|
576
754
|
end
|
|
577
755
|
|
|
578
|
-
context "when setting the
|
|
756
|
+
context "when setting the association directly" do
|
|
579
757
|
|
|
580
758
|
before do
|
|
581
759
|
post.person = ""
|
|
@@ -604,7 +782,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
604
782
|
Person.new
|
|
605
783
|
end
|
|
606
784
|
|
|
607
|
-
context "when setting the
|
|
785
|
+
context "when setting the association directly" do
|
|
608
786
|
|
|
609
787
|
before do
|
|
610
788
|
person.game = ""
|
|
@@ -687,6 +865,45 @@ describe Mongoid::Relations::Accessors do
|
|
|
687
865
|
end
|
|
688
866
|
end
|
|
689
867
|
|
|
868
|
+
context 'when setting associations to nil values' do
|
|
869
|
+
context 'when the document embeds one' do
|
|
870
|
+
let(:definitions) do
|
|
871
|
+
class AccessorEmbedding
|
|
872
|
+
include Mongoid::Document
|
|
873
|
+
|
|
874
|
+
embeds_one :accessor_embedded
|
|
875
|
+
end
|
|
876
|
+
|
|
877
|
+
class AccessorEmbedded
|
|
878
|
+
include Mongoid::Document
|
|
879
|
+
|
|
880
|
+
embedded_in :accessor_embedding
|
|
881
|
+
end
|
|
882
|
+
|
|
883
|
+
define_embedded
|
|
884
|
+
end
|
|
885
|
+
|
|
886
|
+
let(:embedding) do
|
|
887
|
+
AccessorEmbedding.create!
|
|
888
|
+
end
|
|
889
|
+
|
|
890
|
+
let(:define_embedded) do
|
|
891
|
+
AccessorEmbedded.create!(accessor_embedding: embedding)
|
|
892
|
+
end
|
|
893
|
+
|
|
894
|
+
it 'successfully removes the embedded document' do
|
|
895
|
+
definitions
|
|
896
|
+
|
|
897
|
+
expect(embedding.accessor_embedded).not_to be_nil
|
|
898
|
+
|
|
899
|
+
embedding.accessor_embedded = nil
|
|
900
|
+
embedding.save!
|
|
901
|
+
|
|
902
|
+
expect(embedding.reload.accessor_embedded).to be_nil
|
|
903
|
+
end
|
|
904
|
+
end
|
|
905
|
+
end
|
|
906
|
+
|
|
690
907
|
context "when setting association foreign keys" do
|
|
691
908
|
|
|
692
909
|
let(:game) do
|
|
@@ -701,7 +918,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
701
918
|
|
|
702
919
|
before do
|
|
703
920
|
game.person_id = ""
|
|
704
|
-
game.save
|
|
921
|
+
game.save!
|
|
705
922
|
end
|
|
706
923
|
|
|
707
924
|
it "sets the foreign key to empty" do
|
|
@@ -713,7 +930,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
713
930
|
|
|
714
931
|
before do
|
|
715
932
|
game.person_id = person.id.to_s
|
|
716
|
-
game.save
|
|
933
|
+
game.save!
|
|
717
934
|
end
|
|
718
935
|
|
|
719
936
|
it "sets the foreign key as ObjectID" do
|
|
@@ -725,7 +942,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
725
942
|
|
|
726
943
|
before do
|
|
727
944
|
game.person_id = person.id
|
|
728
|
-
game.save
|
|
945
|
+
game.save!
|
|
729
946
|
end
|
|
730
947
|
|
|
731
948
|
it "keeps the foreign key as ObjectID" do
|
|
@@ -733,30 +950,30 @@ describe Mongoid::Relations::Accessors do
|
|
|
733
950
|
end
|
|
734
951
|
end
|
|
735
952
|
|
|
736
|
-
context "when setting ids multiple times on the
|
|
953
|
+
context "when setting ids multiple times on the association itself" do
|
|
737
954
|
|
|
738
955
|
before do
|
|
739
956
|
game.person = person.id
|
|
740
957
|
game.person = person.id
|
|
741
958
|
end
|
|
742
959
|
|
|
743
|
-
it "sets the
|
|
960
|
+
it "sets the association foreign key" do
|
|
744
961
|
expect(game.person_id).to eq(person.id)
|
|
745
962
|
end
|
|
746
963
|
|
|
747
|
-
it "sets the appropriate
|
|
964
|
+
it "sets the appropriate association" do
|
|
748
965
|
expect(game.person).to eq(person)
|
|
749
966
|
end
|
|
750
967
|
end
|
|
751
968
|
end
|
|
752
969
|
|
|
753
|
-
context 'when setting the
|
|
970
|
+
context 'when setting the association more than once' do
|
|
754
971
|
|
|
755
972
|
let(:person) do
|
|
756
973
|
Person.create
|
|
757
974
|
end
|
|
758
975
|
|
|
759
|
-
context 'when the
|
|
976
|
+
context 'when the association is a references one' do
|
|
760
977
|
|
|
761
978
|
let(:game) do
|
|
762
979
|
Game.create
|
|
@@ -772,7 +989,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
772
989
|
end
|
|
773
990
|
end
|
|
774
991
|
|
|
775
|
-
context 'when the
|
|
992
|
+
context 'when the association is a references many' do
|
|
776
993
|
|
|
777
994
|
let!(:preference) do
|
|
778
995
|
Preference.create(name: "Setting")
|
|
@@ -787,7 +1004,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
787
1004
|
end
|
|
788
1005
|
end
|
|
789
1006
|
|
|
790
|
-
context 'when the
|
|
1007
|
+
context 'when the association is an embeds one' do
|
|
791
1008
|
|
|
792
1009
|
let!(:name) do
|
|
793
1010
|
Name.new
|
|
@@ -803,7 +1020,7 @@ describe Mongoid::Relations::Accessors do
|
|
|
803
1020
|
end
|
|
804
1021
|
end
|
|
805
1022
|
|
|
806
|
-
context 'when the
|
|
1023
|
+
context 'when the association is an embeds many' do
|
|
807
1024
|
|
|
808
1025
|
let!(:address) do
|
|
809
1026
|
Address.new
|