mongoid 7.1.0.rc0 → 7.2.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +6 -6
- data/LICENSE +1 -1
- data/README.md +14 -7
- data/Rakefile +21 -0
- data/lib/config/locales/en.yml +42 -6
- data/lib/mongoid.rb +26 -2
- data/lib/mongoid/association/accessors.rb +37 -2
- data/lib/mongoid/association/depending.rb +1 -6
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -1
- data/lib/mongoid/association/embedded/embeds_one.rb +2 -1
- data/lib/mongoid/association/many.rb +5 -4
- data/lib/mongoid/association/proxy.rb +6 -4
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +38 -2
- data/lib/mongoid/association/referenced/eager.rb +29 -9
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +30 -15
- data/lib/mongoid/association/referenced/has_many/proxy.rb +11 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/atomic.rb +13 -3
- data/lib/mongoid/atomic/modifiers.rb +1 -1
- data/lib/mongoid/attributes.rb +28 -20
- data/lib/mongoid/attributes/dynamic.rb +1 -1
- data/lib/mongoid/clients/factory.rb +19 -2
- data/lib/mongoid/clients/options.rb +8 -8
- data/lib/mongoid/clients/sessions.rb +20 -4
- data/lib/mongoid/clients/storage_options.rb +5 -5
- data/lib/mongoid/composable.rb +1 -0
- data/lib/mongoid/config.rb +45 -12
- data/lib/mongoid/config/options.rb +5 -2
- data/lib/mongoid/contextual.rb +5 -4
- data/lib/mongoid/contextual/geo_near.rb +3 -2
- data/lib/mongoid/contextual/map_reduce.rb +3 -2
- data/lib/mongoid/contextual/mongo.rb +25 -5
- data/lib/mongoid/copyable.rb +2 -2
- data/lib/mongoid/criteria.rb +80 -11
- data/lib/mongoid/criteria/modifiable.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +12 -0
- data/lib/mongoid/criteria/queryable/key.rb +1 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +75 -8
- data/lib/mongoid/criteria/queryable/pipeline.rb +3 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +141 -19
- data/lib/mongoid/criteria/queryable/selector.rb +3 -3
- data/lib/mongoid/criteria/queryable/storable.rb +106 -101
- data/lib/mongoid/document.rb +15 -3
- data/lib/mongoid/errors.rb +7 -0
- data/lib/mongoid/errors/eager_load.rb +2 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
- data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_query.rb +41 -0
- data/lib/mongoid/errors/no_client_config.rb +2 -2
- data/lib/mongoid/errors/no_default_client.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +4 -2
- data/lib/mongoid/extensions/regexp.rb +1 -1
- data/lib/mongoid/factory.rb +27 -10
- data/lib/mongoid/fields.rb +2 -1
- data/lib/mongoid/fields/standard.rb +2 -1
- data/lib/mongoid/fields/validators/macro.rb +26 -10
- data/lib/mongoid/findable.rb +55 -18
- data/lib/mongoid/indexable.rb +2 -2
- data/lib/mongoid/interceptable.rb +5 -1
- data/lib/mongoid/matchable.rb +1 -149
- data/lib/mongoid/matcher.rb +127 -0
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/elem_match.rb +35 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +32 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +40 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +63 -0
- data/lib/mongoid/matcher/field_operator.rb +52 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/pushable.rb +11 -2
- data/lib/mongoid/persistence_context.rb +6 -6
- data/lib/mongoid/query_cache.rb +83 -38
- data/lib/mongoid/railties/database.rake +7 -0
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/serializable.rb +11 -3
- data/lib/mongoid/shardable.rb +56 -4
- data/lib/mongoid/tasks/database.rake +10 -5
- data/lib/mongoid/tasks/database.rb +83 -0
- data/lib/mongoid/timestamps/timeless.rb +3 -1
- data/lib/mongoid/traversable.rb +111 -4
- data/lib/mongoid/validatable/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +32 -23
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/spec/integration/app_spec.rb +254 -0
- data/spec/integration/associations/embedded_spec.rb +148 -0
- data/spec/integration/associations/has_many_spec.rb +69 -0
- data/spec/integration/associations/has_one_spec.rb +69 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
- data/spec/integration/atomic/modifiers_spec.rb +117 -0
- data/spec/integration/bson_regexp_raw_spec.rb +20 -0
- data/spec/integration/criteria/date_field_spec.rb +41 -0
- data/spec/integration/criteria/logical_spec.rb +13 -0
- data/spec/integration/discriminator_key_spec.rb +354 -0
- data/spec/integration/discriminator_value_spec.rb +207 -0
- data/spec/integration/document_spec.rb +22 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +363 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +16 -0
- data/spec/integration/matcher_operator_data/in.yml +194 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_spec.rb +100 -0
- data/spec/integration/matcher_spec.rb +189 -0
- data/spec/integration/server_query_spec.rb +142 -0
- data/spec/integration/shardable_spec.rb +149 -0
- data/spec/lite_spec_helper.rb +15 -4
- data/spec/mongoid/association/accessors_spec.rb +238 -63
- data/spec/mongoid/association/depending_spec.rb +78 -26
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +33 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +20 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +10 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -2
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +193 -10
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +140 -1
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +146 -68
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +462 -187
- data/spec/mongoid/association/referenced/has_many_models.rb +9 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +9 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
- data/spec/mongoid/atomic_spec.rb +23 -0
- data/spec/mongoid/attributes/nested_spec.rb +1 -1
- data/spec/mongoid/attributes_spec.rb +19 -7
- data/spec/mongoid/changeable_spec.rb +23 -0
- data/spec/mongoid/clients/factory_spec.rb +45 -8
- data/spec/mongoid/clients/options_spec.rb +11 -11
- data/spec/mongoid/clients/sessions_spec.rb +9 -10
- data/spec/mongoid/clients/transactions_spec.rb +20 -8
- data/spec/mongoid/clients_spec.rb +2 -2
- data/spec/mongoid/config_spec.rb +28 -0
- data/spec/mongoid/contextual/atomic_spec.rb +22 -11
- data/spec/mongoid/contextual/geo_near_spec.rb +11 -2
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -5
- data/spec/mongoid/contextual/mongo_spec.rb +146 -69
- data/spec/mongoid/copyable_spec.rb +153 -1
- data/spec/mongoid/copyable_spec_models.rb +14 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +19 -7
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +28 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +45 -12
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1051 -392
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +136 -82
- data/spec/mongoid/criteria/queryable/storable_spec.rb +80 -2
- data/spec/mongoid/criteria_spec.rb +240 -41
- data/spec/mongoid/document_fields_spec.rb +29 -0
- data/spec/mongoid/document_persistence_context_spec.rb +33 -0
- data/spec/mongoid/document_spec.rb +89 -15
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -3
- data/spec/mongoid/factory_spec.rb +261 -28
- data/spec/mongoid/fields_spec.rb +72 -3
- data/spec/mongoid/findable_spec.rb +32 -0
- data/spec/mongoid/indexable_spec.rb +34 -6
- data/spec/mongoid/inspectable_spec.rb +29 -2
- data/spec/mongoid/interceptable_spec.rb +64 -2
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +259 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +47 -0
- data/spec/mongoid/persistable/creatable_spec.rb +108 -25
- data/spec/mongoid/persistable/deletable_spec.rb +86 -0
- data/spec/mongoid/persistable/pushable_spec.rb +55 -1
- data/spec/mongoid/persistable/savable_spec.rb +174 -16
- data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
- data/spec/mongoid/query_cache_spec.rb +498 -29
- data/spec/mongoid/relations/proxy_spec.rb +1 -1
- data/spec/mongoid/reloadable_spec.rb +72 -0
- data/spec/mongoid/scopable_spec.rb +2 -1
- data/spec/mongoid/serializable_spec.rb +149 -20
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +69 -16
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +1 -1
- data/spec/mongoid/traversable_spec.rb +1100 -0
- data/spec/spec_helper.rb +4 -33
- data/spec/support/child_process_helper.rb +79 -0
- data/spec/support/cluster_config.rb +3 -3
- data/spec/support/constraints.rb +50 -10
- data/spec/support/expectations.rb +3 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/lite_constraints.rb +22 -0
- data/spec/{app → support}/models/account.rb +0 -0
- data/spec/{app → support}/models/acolyte.rb +0 -0
- data/spec/{app → support}/models/actor.rb +1 -1
- data/spec/{app → support}/models/actress.rb +0 -0
- data/spec/{app → support}/models/address.rb +0 -0
- data/spec/{app → support}/models/address_component.rb +0 -0
- data/spec/{app → support}/models/address_number.rb +0 -0
- data/spec/{app → support}/models/agency.rb +0 -0
- data/spec/{app → support}/models/agent.rb +0 -0
- data/spec/{app → support}/models/album.rb +0 -0
- data/spec/{app → support}/models/alert.rb +0 -0
- data/spec/{app → support}/models/animal.rb +0 -0
- data/spec/{app → support}/models/answer.rb +0 -0
- data/spec/{app → support}/models/appointment.rb +0 -0
- data/spec/support/models/armrest.rb +10 -0
- data/spec/{app → support}/models/array_field.rb +0 -0
- data/spec/{app → support}/models/article.rb +0 -0
- data/spec/{app → support}/models/artist.rb +0 -0
- data/spec/{app → support}/models/artwork.rb +0 -0
- data/spec/{app → support}/models/audio.rb +0 -0
- data/spec/{app → support}/models/augmentation.rb +0 -0
- data/spec/{app → support}/models/author.rb +0 -0
- data/spec/{app → support}/models/baby.rb +0 -0
- data/spec/{app → support}/models/band.rb +0 -0
- data/spec/{app → support}/models/bar.rb +0 -0
- data/spec/{app → support}/models/basic.rb +0 -0
- data/spec/{app → support}/models/bed.rb +0 -0
- data/spec/{app → support}/models/big_palette.rb +0 -0
- data/spec/{app → support}/models/birthday.rb +0 -0
- data/spec/{app → support}/models/bomb.rb +0 -0
- data/spec/{app → support}/models/book.rb +0 -0
- data/spec/{app → support}/models/breed.rb +0 -0
- data/spec/{app → support}/models/browser.rb +1 -1
- data/spec/{app → support}/models/building.rb +0 -0
- data/spec/{app → support}/models/building_address.rb +0 -0
- data/spec/{app → support}/models/bus.rb +0 -0
- data/spec/{app → support}/models/business.rb +0 -0
- data/spec/{app → support}/models/callback_test.rb +0 -0
- data/spec/{app → support}/models/canvas.rb +1 -1
- data/spec/{app → support}/models/car.rb +0 -0
- data/spec/{app → support}/models/cat.rb +0 -0
- data/spec/{app → support}/models/category.rb +0 -0
- data/spec/{app → support}/models/child.rb +0 -0
- data/spec/{app → support}/models/child_doc.rb +0 -0
- data/spec/{app → support}/models/church.rb +0 -0
- data/spec/{app → support}/models/circle.rb +0 -0
- data/spec/{app → support}/models/circuit.rb +0 -0
- data/spec/{app → support}/models/circus.rb +0 -0
- data/spec/{app → support}/models/code.rb +0 -0
- data/spec/support/models/coding.rb +4 -0
- data/spec/support/models/coding/pull_request.rb +12 -0
- data/spec/{app → support}/models/comment.rb +0 -0
- data/spec/{app → support}/models/company.rb +0 -0
- data/spec/{app → support}/models/consumption_period.rb +0 -0
- data/spec/{app → support}/models/contextable_item.rb +0 -0
- data/spec/{app → support}/models/contractor.rb +0 -0
- data/spec/{app → support}/models/cookie.rb +0 -0
- data/spec/{app → support}/models/country_code.rb +0 -0
- data/spec/{app → support}/models/courier_job.rb +0 -0
- data/spec/support/models/crate.rb +13 -0
- data/spec/support/models/deed.rb +8 -0
- data/spec/{app → support}/models/definition.rb +0 -0
- data/spec/support/models/delegating_patient.rb +16 -0
- data/spec/{app → support}/models/description.rb +0 -0
- data/spec/{app → support}/models/dictionary.rb +0 -0
- data/spec/{app → support}/models/division.rb +0 -0
- data/spec/{app → support}/models/doctor.rb +0 -0
- data/spec/{app → support}/models/dog.rb +0 -0
- data/spec/{app → support}/models/dokument.rb +0 -0
- data/spec/{app → support}/models/draft.rb +0 -0
- data/spec/{app → support}/models/dragon.rb +0 -0
- data/spec/{app → support}/models/driver.rb +1 -1
- data/spec/{app → support}/models/drug.rb +0 -0
- data/spec/{app → support}/models/dungeon.rb +0 -0
- data/spec/{app → support}/models/edit.rb +0 -0
- data/spec/{app → support}/models/email.rb +0 -0
- data/spec/{app → support}/models/employer.rb +0 -0
- data/spec/{app → support}/models/entry.rb +0 -0
- data/spec/{app → support}/models/eraser.rb +0 -0
- data/spec/{app → support}/models/even.rb +0 -0
- data/spec/{app → support}/models/event.rb +0 -0
- data/spec/{app → support}/models/exhibition.rb +0 -0
- data/spec/{app → support}/models/exhibitor.rb +0 -0
- data/spec/{app → support}/models/explosion.rb +0 -0
- data/spec/{app → support}/models/eye.rb +0 -0
- data/spec/{app → support}/models/eye_bowl.rb +0 -0
- data/spec/{app → support}/models/face.rb +0 -0
- data/spec/{app → support}/models/favorite.rb +0 -0
- data/spec/{app → support}/models/filesystem.rb +0 -0
- data/spec/{app → support}/models/fire_hydrant.rb +0 -0
- data/spec/{app → support}/models/firefox.rb +0 -0
- data/spec/{app → support}/models/fish.rb +0 -0
- data/spec/{app → support}/models/folder.rb +0 -0
- data/spec/{app → support}/models/folder_item.rb +0 -0
- data/spec/{app → support}/models/fruits.rb +0 -0
- data/spec/{app → support}/models/game.rb +0 -0
- data/spec/{app → support}/models/ghost.rb +0 -0
- data/spec/support/models/guitar.rb +5 -0
- data/spec/{app → support}/models/home.rb +0 -0
- data/spec/{app → support}/models/house.rb +0 -0
- data/spec/{app → support}/models/html_writer.rb +0 -0
- data/spec/{app → support}/models/id_key.rb +0 -0
- data/spec/support/models/idnodef.rb +8 -0
- data/spec/{app → support}/models/image.rb +0 -0
- data/spec/{app → support}/models/implant.rb +0 -0
- data/spec/support/models/instrument.rb +9 -0
- data/spec/{app → support}/models/item.rb +1 -1
- data/spec/{app → support}/models/jar.rb +0 -0
- data/spec/{app → support}/models/kaleidoscope.rb +0 -0
- data/spec/{app → support}/models/kangaroo.rb +0 -0
- data/spec/{app → support}/models/label.rb +0 -0
- data/spec/{app → support}/models/language.rb +0 -0
- data/spec/{app → support}/models/lat_lng.rb +0 -0
- data/spec/{app → support}/models/league.rb +0 -0
- data/spec/{app → support}/models/learner.rb +0 -0
- data/spec/{app → support}/models/line_item.rb +0 -0
- data/spec/{app → support}/models/location.rb +0 -0
- data/spec/{app → support}/models/login.rb +0 -0
- data/spec/{app → support}/models/manufacturer.rb +0 -0
- data/spec/{app → support}/models/meat.rb +0 -0
- data/spec/{app → support}/models/membership.rb +0 -0
- data/spec/{app → support}/models/message.rb +0 -0
- data/spec/{app → support}/models/minim.rb +0 -0
- data/spec/{app → support}/models/mixed_drink.rb +0 -0
- data/spec/support/models/mop.rb +16 -0
- data/spec/{app → support}/models/movie.rb +0 -0
- data/spec/{app → support}/models/my_hash.rb +0 -0
- data/spec/{app → support}/models/name.rb +0 -0
- data/spec/{app → support}/models/name_only.rb +0 -0
- data/spec/{app → support}/models/node.rb +0 -0
- data/spec/{app → support}/models/note.rb +0 -0
- data/spec/{app → support}/models/odd.rb +0 -0
- data/spec/{app → support}/models/ordered_post.rb +0 -0
- data/spec/{app → support}/models/ordered_preference.rb +0 -0
- data/spec/{app → support}/models/oscar.rb +0 -0
- data/spec/{app → support}/models/other_owner_object.rb +0 -0
- data/spec/{app → support}/models/override.rb +0 -0
- data/spec/{app → support}/models/ownable.rb +0 -0
- data/spec/{app → support}/models/owner.rb +2 -0
- data/spec/{app → support}/models/pack.rb +0 -0
- data/spec/{app → support}/models/page.rb +0 -0
- data/spec/{app → support}/models/page_question.rb +0 -0
- data/spec/{app → support}/models/palette.rb +1 -1
- data/spec/{app → support}/models/parent.rb +0 -0
- data/spec/{app → support}/models/parent_doc.rb +0 -0
- data/spec/{app → support}/models/passport.rb +1 -0
- data/spec/{app → support}/models/patient.rb +0 -0
- data/spec/{app → support}/models/pdf_writer.rb +0 -0
- data/spec/{app → support}/models/pencil.rb +0 -0
- data/spec/{app → support}/models/person.rb +1 -1
- data/spec/{app → support}/models/pet.rb +0 -0
- data/spec/{app → support}/models/pet_owner.rb +0 -0
- data/spec/{app → support}/models/phone.rb +1 -0
- data/spec/support/models/piano.rb +5 -0
- data/spec/{app → support}/models/pizza.rb +0 -0
- data/spec/{app → support}/models/player.rb +0 -0
- data/spec/{app → support}/models/post.rb +0 -0
- data/spec/{app → support}/models/post_genre.rb +0 -0
- data/spec/{app → support}/models/powerup.rb +0 -0
- data/spec/{app → support}/models/preference.rb +0 -0
- data/spec/{app → support}/models/princess.rb +0 -0
- data/spec/{app → support}/models/product.rb +0 -0
- data/spec/support/models/profile.rb +18 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -0
- data/spec/{app → support}/models/pub.rb +0 -0
- data/spec/support/models/publication.rb +5 -0
- data/spec/support/models/publication/encyclopedia.rb +12 -0
- data/spec/support/models/publication/review.rb +14 -0
- data/spec/{app → support}/models/purchase.rb +0 -0
- data/spec/{app → support}/models/question.rb +0 -0
- data/spec/{app → support}/models/quiz.rb +0 -0
- data/spec/{app → support}/models/rating.rb +0 -0
- data/spec/{app → support}/models/record.rb +0 -0
- data/spec/{app → support}/models/registry.rb +0 -0
- data/spec/{app → support}/models/role.rb +0 -0
- data/spec/{app → support}/models/root_category.rb +0 -0
- data/spec/{app → support}/models/sandwich.rb +0 -0
- data/spec/{app → support}/models/scheduler.rb +0 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
- data/spec/support/models/seat.rb +25 -0
- data/spec/{app → support}/models/seo.rb +0 -0
- data/spec/{app → support}/models/series.rb +0 -0
- data/spec/{app → support}/models/server.rb +0 -0
- data/spec/{app → support}/models/service.rb +0 -0
- data/spec/{app → support}/models/shape.rb +2 -2
- data/spec/{app → support}/models/shelf.rb +0 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -0
- data/spec/{app → support}/models/shipping_container.rb +0 -0
- data/spec/{app → support}/models/shipping_pack.rb +0 -0
- data/spec/{app → support}/models/shop.rb +0 -0
- data/spec/{app → support}/models/short_agent.rb +0 -0
- data/spec/{app → support}/models/short_quiz.rb +0 -0
- data/spec/{app → support}/models/simple.rb +0 -0
- data/spec/{app → support}/models/slave.rb +0 -0
- data/spec/{app → support}/models/song.rb +0 -0
- data/spec/{app → support}/models/sound.rb +0 -0
- data/spec/{app → support}/models/square.rb +0 -0
- data/spec/{app → support}/models/staff.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- data/spec/{app → support}/models/strategy.rb +0 -0
- data/spec/{app → support}/models/sub_item.rb +0 -0
- data/spec/{app → support}/models/subscription.rb +0 -0
- data/spec/{app → support}/models/survey.rb +0 -0
- data/spec/{app → support}/models/symptom.rb +0 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -0
- data/spec/{app → support}/models/target.rb +0 -0
- data/spec/{app → support}/models/template.rb +0 -0
- data/spec/{app → support}/models/thing.rb +0 -0
- data/spec/{app → support}/models/title.rb +0 -0
- data/spec/{app → support}/models/tool.rb +2 -2
- data/spec/{app → support}/models/topping.rb +0 -0
- data/spec/support/models/toy.rb +10 -0
- data/spec/{app → support}/models/track.rb +0 -0
- data/spec/{app → support}/models/translation.rb +0 -0
- data/spec/{app → support}/models/tree.rb +0 -0
- data/spec/{app → support}/models/truck.rb +2 -0
- data/spec/{app → support}/models/updatable.rb +0 -0
- data/spec/{app → support}/models/user.rb +0 -0
- data/spec/{app → support}/models/user_account.rb +0 -0
- data/spec/{app → support}/models/validation_callback.rb +0 -0
- data/spec/{app → support}/models/vehicle.rb +7 -2
- data/spec/{app → support}/models/version.rb +0 -0
- data/spec/{app → support}/models/vertex.rb +0 -0
- data/spec/{app → support}/models/vet_visit.rb +0 -0
- data/spec/{app → support}/models/video.rb +0 -0
- data/spec/{app → support}/models/video_game.rb +0 -0
- data/spec/{app → support}/models/weapon.rb +0 -0
- data/spec/{app → support}/models/wiki_page.rb +0 -0
- data/spec/{app → support}/models/word.rb +0 -0
- data/spec/{app → support}/models/word_origin.rb +0 -0
- data/spec/{app → support}/models/writer.rb +2 -2
- data/spec/support/session_registry.rb +50 -0
- data/spec/support/spec_config.rb +13 -5
- data/spec/support/spec_organizer.rb +130 -0
- metadata +882 -752
- metadata.gz.sig +0 -0
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/spec/mongoid/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da086175f8b41ffc6991262225460da5577f7ea47d3c355f34e072ff5c78d5f1
|
4
|
+
data.tar.gz: 7797a83ed15fd55f0ec8aba1a43569393f99f037a7f1013aeb0770f0aa4c3000
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f18e6f9ca45ce9cc406a32983d031388c5f6a76100de18fcdf036163bf08c74f4f15a1e77a02c6445e37f2824ec6ecf549514bf78447f7876b8d52d2c2fb4947
|
7
|
+
data.tar.gz: ca7b9fe36e273d4e2dab3680dbaa973450eb2b87ae58a9d462bba6ec95d27de1479255175a9d7971b32e61b5a43726d7b7855134c5ec733b75e126e6e51fb408
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1848,18 +1848,18 @@ child elements.
|
|
1848
1848
|
set a child on a relation without the proper inverse_of definitions
|
1849
1849
|
due to Mongoid not being able to determine it.
|
1850
1850
|
|
1851
|
-
class
|
1851
|
+
class Car
|
1852
1852
|
include Mongoid::Document
|
1853
|
-
embeds_one :
|
1853
|
+
embeds_one :engine, class_name: "Motor"
|
1854
1854
|
end
|
1855
1855
|
|
1856
|
-
class
|
1856
|
+
class Motor
|
1857
1857
|
include Mongoid::Document
|
1858
|
-
embedded_in :
|
1858
|
+
embedded_in :machine, class_name: "Car"
|
1859
1859
|
end
|
1860
1860
|
|
1861
|
-
|
1862
|
-
|
1861
|
+
car = Car.new
|
1862
|
+
car.engine = Motor.new # raises an InverseNotFound error.
|
1863
1863
|
|
1864
1864
|
* \#1680 Polymorphic relations now use `*_type` keys in lookup queries.
|
1865
1865
|
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
[![
|
1
|
+
Mongoid
|
2
|
+
[![Gem Version][rubygems-img]][rubygems-url]
|
3
|
+
[![Inline docs][inch-img]][inch-url]
|
4
|
+
====
|
3
5
|
|
4
6
|
Mongoid is an ODM (Object-Document Mapper) framework for MongoDB in Ruby.
|
5
7
|
|
@@ -17,9 +19,9 @@ Compatibility
|
|
17
19
|
|
18
20
|
Mongoid supports and is tested against:
|
19
21
|
|
20
|
-
- MRI 2.
|
21
|
-
- JRuby 9.
|
22
|
-
- MongoDB server 2.6-4.
|
22
|
+
- MRI 2.3-2.7
|
23
|
+
- JRuby 9.2
|
24
|
+
- MongoDB server 2.6-4.4
|
23
25
|
|
24
26
|
Issues
|
25
27
|
------
|
@@ -31,14 +33,14 @@ Support
|
|
31
33
|
-------
|
32
34
|
|
33
35
|
* [Stack Overflow](http://stackoverflow.com/questions/tagged/mongoid)
|
34
|
-
* [
|
36
|
+
* [MongoDB Community Forum](https://developer.mongodb.com/community/forums/tags/c/drivers-odms-connectors/7/mongoid-odm)
|
35
37
|
* [#mongoid](http://webchat.freenode.net/?channels=mongoid) on Freenode IRC
|
36
38
|
|
37
39
|
License
|
38
40
|
-------
|
39
41
|
|
40
42
|
Copyright (c) 2009-2016 Durran Jordan
|
41
|
-
Copyright (c) 2015-
|
43
|
+
Copyright (c) 2015-2020 MongoDB, Inc.
|
42
44
|
|
43
45
|
Permission is hereby granted, free of charge, to any person obtaining
|
44
46
|
a copy of this software and associated documentation files (the
|
@@ -63,3 +65,8 @@ Credits
|
|
63
65
|
-------
|
64
66
|
|
65
67
|
Durran Jordan: durran at gmail dot com
|
68
|
+
|
69
|
+
[rubygems-img]: https://badge.fury.io/rb/mongoid.svg
|
70
|
+
[rubygems-url]: http://badge.fury.io/rb/mongoid
|
71
|
+
[inch-img]: http://inch-ci.org/github/mongodb/mongoid.svg?branch=master
|
72
|
+
[inch-url]: http://inch-ci.org/github/mongodb/mongoid
|
data/Rakefile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "bundler"
|
4
|
+
require "bundler/gem_tasks"
|
4
5
|
Bundler.setup
|
5
6
|
|
6
7
|
require "rake"
|
@@ -9,6 +10,9 @@ require "rspec/core/rake_task"
|
|
9
10
|
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
10
11
|
require "mongoid/version"
|
11
12
|
|
13
|
+
tasks = Rake.application.instance_variable_get('@tasks')
|
14
|
+
tasks['release:do'] = tasks.delete('release')
|
15
|
+
|
12
16
|
task :gem => :build
|
13
17
|
task :build do
|
14
18
|
system "gem build mongoid.gemspec"
|
@@ -34,6 +38,13 @@ RSpec::Core::RakeTask.new('spec:progress') do |spec|
|
|
34
38
|
spec.pattern = "spec/**/*_spec.rb"
|
35
39
|
end
|
36
40
|
|
41
|
+
task :ci do
|
42
|
+
$LOAD_PATH.push File.expand_path("../spec", __FILE__)
|
43
|
+
require 'support/spec_organizer'
|
44
|
+
|
45
|
+
SpecOrganizer.new.run
|
46
|
+
end
|
47
|
+
|
37
48
|
task :default => :spec
|
38
49
|
|
39
50
|
desc "Generate all documentation"
|
@@ -47,3 +58,13 @@ namespace :docs do
|
|
47
58
|
system "yardoc -o #{out} --title mongoid-#{Mongoid::VERSION}"
|
48
59
|
end
|
49
60
|
end
|
61
|
+
|
62
|
+
namespace :release do
|
63
|
+
task :check_private_key do
|
64
|
+
unless File.exist?('gem-private_key.pem')
|
65
|
+
raise "No private key present, cannot release"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
task :release => ['release:check_private_key', 'release:do']
|
data/lib/config/locales/en.yml
CHANGED
@@ -7,6 +7,7 @@ en:
|
|
7
7
|
message_title: "message"
|
8
8
|
summary_title: "summary"
|
9
9
|
resolution_title: "resolution"
|
10
|
+
|
10
11
|
ambiguous_relationship:
|
11
12
|
message: "Ambiguous associations %{candidates} defined on %{klass}."
|
12
13
|
summary:
|
@@ -43,6 +44,8 @@ en:
|
|
43
44
|
resolution: "Most likely this is caused by passing parameters directly
|
44
45
|
through to the find, and the parameter either is not present or the
|
45
46
|
key from which it is accessed is incorrect."
|
47
|
+
destroy_restrict_with_error_dependencies_exist:
|
48
|
+
"is not empty and prevents the document from being destroyed"
|
46
49
|
document_not_destroyed:
|
47
50
|
message: "%{klass} with id %{id} was not destroyed."
|
48
51
|
summary: "When calling %{klass}#destroy! and a callback halts the destroy
|
@@ -105,6 +108,32 @@ en:
|
|
105
108
|
summary: "An invalid dependent strategy was defined for the association:
|
106
109
|
%{association}. The valid strategies are: %{valid_strategies}."
|
107
110
|
resolution: "Change the dependent strategy to one of the valid types."
|
111
|
+
invalid_discriminator_key_target:
|
112
|
+
message: "Setting the discriminator key on a child class is not allowed."
|
113
|
+
summary: "The discriminator key on the class %{class_name} was attempted
|
114
|
+
to be changed. Changing the discriminator key on a child class is not
|
115
|
+
allowed."
|
116
|
+
resolution: "Try setting the discriminator key on %{superclass} or one of %{class_name}'s
|
117
|
+
ancestors."
|
118
|
+
invalid_elem_match_operator:
|
119
|
+
message: "Invalid $elemMatch operator '%{operator}'."
|
120
|
+
summary: "You misspelled an operator or are using an operator that
|
121
|
+
Mongoid does not support."
|
122
|
+
resolution: "Valid field operators are: %{valid_operators}.
|
123
|
+
Ensure you are using one of these operators."
|
124
|
+
invalid_estimated_count_criteria:
|
125
|
+
message: "Invalid criteria for estimated_count."
|
126
|
+
summary: "Estimated count is strictly a collection-level operation and cannot be called
|
127
|
+
on a filtered critera."
|
128
|
+
resolution: "Try calling estimated_count directly on the class: %{class_name}.estimated_count.\n\n
|
129
|
+
\_If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count."
|
130
|
+
invalid_expression_operator:
|
131
|
+
message: "Invalid expression operator '%{operator}'."
|
132
|
+
summary: "You misspelled an operator, are using an operator that
|
133
|
+
Mongoid does not support, or are trying to use a field-level
|
134
|
+
operator on expression level."
|
135
|
+
resolution: "Valid expression operators are: %{valid_operators}.
|
136
|
+
Ensure you are using one of these operators."
|
108
137
|
invalid_field:
|
109
138
|
message: "Defining a field named '%{name}' is not allowed."
|
110
139
|
summary: "Defining this field would override the method '%{name}',
|
@@ -118,6 +147,13 @@ en:
|
|
118
147
|
allowed, and don't use these names. These include names that also
|
119
148
|
conflict with core Ruby methods on Object, Module, Enumerable, or
|
120
149
|
included gems that inject methods into these or Mongoid internals."
|
150
|
+
invalid_field_operator:
|
151
|
+
message: "Invalid field operator '%{operator}'."
|
152
|
+
summary: "You misspelled an operator, are using an operator that
|
153
|
+
Mongoid does not support, or are trying to use an expression-level
|
154
|
+
operator on field level."
|
155
|
+
resolution: "Valid field operators are: %{valid_operators}.
|
156
|
+
Ensure you are using one of these operators."
|
121
157
|
invalid_field_option:
|
122
158
|
message: "Invalid option :%{option} provided for field :%{name}."
|
123
159
|
summary: "Mongoid requires that you only provide valid options on each
|
@@ -249,7 +285,7 @@ en:
|
|
249
285
|
Example:\n
|
250
286
|
\_\_class Band\n
|
251
287
|
\_\_\_\_include Mongoid::Document\n
|
252
|
-
\_\_\_\_store_in collection: 'artists', database: '
|
288
|
+
\_\_\_\_store_in collection: 'artists', database: 'music'\n
|
253
289
|
\_\_end\n\n"
|
254
290
|
invalid_storage_parent:
|
255
291
|
message: "Invalid store_in call on class %{klass}."
|
@@ -282,13 +318,13 @@ en:
|
|
282
318
|
you will need to explicitly tell Mongoid on the association what
|
283
319
|
the inverse is.\n\n
|
284
320
|
Example:\n
|
285
|
-
\_\_class
|
321
|
+
\_\_class Car\n
|
286
322
|
\_\_\_\_include Mongoid::Document\n
|
287
|
-
\_\_\_\_has_one :
|
323
|
+
\_\_\_\_has_one :engine, class_name: \"Motor\", inverse_of: :machine\n
|
288
324
|
\_\_end\n\n
|
289
|
-
\_\_class
|
325
|
+
\_\_class Motor\n
|
290
326
|
\_\_\_\_include Mongoid::Document\n
|
291
|
-
\_\_\_\_belongs_to :
|
327
|
+
\_\_\_\_belongs_to :machine, class_name: \"Car\", inverse_of: :engine\n
|
292
328
|
\_\_end"
|
293
329
|
invalid_set_polymorphic_relation:
|
294
330
|
message: "The %{name} attribute can't be set to an instance of
|
@@ -543,7 +579,7 @@ en:
|
|
543
579
|
the validations."
|
544
580
|
delete_restriction:
|
545
581
|
message: "Cannot delete %{document} because of dependent '%{relation}'."
|
546
|
-
summary: "When defining '%{relation}' with a :dependent => :
|
582
|
+
summary: "When defining '%{relation}' with a :dependent => :restrict_with_error,
|
547
583
|
Mongoid will raise an error when attempting to delete the
|
548
584
|
%{document} when the child '%{relation}' still has documents in it."
|
549
585
|
resolution: "Don't attempt to delete the parent %{document} when
|
data/lib/mongoid.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
require "support/ruby_version"
|
5
5
|
|
6
|
-
require "
|
6
|
+
require "forwardable"
|
7
7
|
require "time"
|
8
8
|
require "set"
|
9
9
|
|
@@ -36,6 +36,7 @@ end
|
|
36
36
|
I18n.load_path << File.join(File.dirname(__FILE__), "config", "locales", "en.yml")
|
37
37
|
|
38
38
|
module Mongoid
|
39
|
+
extend Forwardable
|
39
40
|
extend Loggable
|
40
41
|
extend self
|
41
42
|
|
@@ -109,5 +110,28 @@ module Mongoid
|
|
109
110
|
# Mongoid.database = Mongo::Connection.new.db("test")
|
110
111
|
#
|
111
112
|
# @since 1.0.0
|
112
|
-
|
113
|
+
def_delegators Config, *(Config.public_instance_methods(false) - [ :logger=, :logger ])
|
114
|
+
|
115
|
+
|
116
|
+
# Module used to prepend the discriminator key assignment function to change
|
117
|
+
# the value assigned to the discriminator key to a string.
|
118
|
+
#
|
119
|
+
# @api private
|
120
|
+
module GlobalDiscriminatorKeyAssignment
|
121
|
+
# This class is used for obtaining the method definition location for
|
122
|
+
# Mongoid methods.
|
123
|
+
class InvalidFieldHost
|
124
|
+
include Mongoid::Document
|
125
|
+
end
|
126
|
+
|
127
|
+
def discriminator_key=(value)
|
128
|
+
Mongoid::Fields::Validators::Macro.validate_field_name(InvalidFieldHost, value)
|
129
|
+
value = value.to_s
|
130
|
+
super
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
class << self
|
135
|
+
prepend GlobalDiscriminatorKeyAssignment
|
136
|
+
end
|
113
137
|
end
|
@@ -131,15 +131,50 @@ module Mongoid
|
|
131
131
|
# @api private
|
132
132
|
def _mongoid_filter_selected_fields(assoc_key)
|
133
133
|
return nil unless __selected_fields
|
134
|
+
|
135
|
+
projecting_assoc = false
|
136
|
+
|
134
137
|
filtered = {}
|
135
138
|
__selected_fields.each do |k, v|
|
136
139
|
bits = k.split('.')
|
140
|
+
|
141
|
+
# If we are asked to project an association, we need all of that
|
142
|
+
# association's fields. However, we may be asked to project
|
143
|
+
# an association *and* its fields in the same query. In this case
|
144
|
+
# behavior differs according to server version:
|
145
|
+
#
|
146
|
+
# 4.2 and lower take the most recent projection specification, meaning
|
147
|
+
# projecting foo followed by foo.bar effectively projects foo.bar and
|
148
|
+
# projecting foo.bar followed by foo effectively projects foo.
|
149
|
+
# To match this behavior we need to track when we are being asked
|
150
|
+
# to project the association and when we are asked to project a field,
|
151
|
+
# and if we are asked to project the association last we need to
|
152
|
+
# remove any field projections.
|
153
|
+
#
|
154
|
+
# 4.4 (and presumably higher) do not allow projection to be on an
|
155
|
+
# association and its field, so it doesn't matter what we do. Hence
|
156
|
+
# we just need to handle the 4.2 and lower case correctly.
|
137
157
|
if bits.first == assoc_key
|
138
|
-
|
139
|
-
|
158
|
+
# Projecting the entire association OR some of its fields
|
159
|
+
if bits.length > 1
|
160
|
+
# Projecting a field
|
161
|
+
bits.shift
|
162
|
+
filtered[bits.join('.')] = v
|
163
|
+
projecting_assoc = false
|
164
|
+
else
|
165
|
+
# Projecting the entire association
|
166
|
+
projecting_assoc = true
|
167
|
+
end
|
140
168
|
end
|
141
169
|
end
|
142
170
|
|
171
|
+
if projecting_assoc
|
172
|
+
# The last projection was of the entire association; we may have
|
173
|
+
# also been projecting fields, but discard the field projections
|
174
|
+
# and return nil indicating we want the entire association.
|
175
|
+
return nil
|
176
|
+
end
|
177
|
+
|
143
178
|
# Positional projection is specified as "foo.$". In this case the
|
144
179
|
# document that the $ is referring to should be retrieved with all
|
145
180
|
# fields. See https://docs.mongodb.com/manual/reference/operator/projection/positional/
|
@@ -41,11 +41,6 @@ module Mongoid
|
|
41
41
|
:restrict_with_error
|
42
42
|
]
|
43
43
|
|
44
|
-
# The error message when a strategy cannot delete objects because there are associated objects.
|
45
|
-
#
|
46
|
-
# @since 7.0
|
47
|
-
RESTRICT_ERROR_MSG = 'Cannot delete record because associated objects exist.'.freeze
|
48
|
-
|
49
44
|
# Attempt to add the cascading information for the document to know how
|
50
45
|
# to handle associated documents on a removal.
|
51
46
|
#
|
@@ -131,7 +126,7 @@ module Mongoid
|
|
131
126
|
|
132
127
|
def _dependent_restrict_with_error!(association)
|
133
128
|
if (relation = send(association.name)) && !relation.blank?
|
134
|
-
errors.add(association.name,
|
129
|
+
errors.add(association.name, :destroy_restrict_with_error_dependencies_exist)
|
135
130
|
throw(:abort, false)
|
136
131
|
end
|
137
132
|
end
|
@@ -200,7 +200,8 @@ module Mongoid
|
|
200
200
|
def determine_inverses(other)
|
201
201
|
matches = relation_class.relations.values.select do |rel|
|
202
202
|
relation_complements.include?(rel.class) &&
|
203
|
-
|
203
|
+
# https://jira.mongodb.org/browse/MONGOID-4882
|
204
|
+
rel.relation_class_name.sub(/\A::/, '') == inverse_class_name
|
204
205
|
end
|
205
206
|
if matches.size > 1
|
206
207
|
raise Errors::AmbiguousRelationship.new(relation_class, @owner_class, name, matches)
|
@@ -162,7 +162,8 @@ module Mongoid
|
|
162
162
|
def determine_inverses(other)
|
163
163
|
matches = relation_class.relations.values.select do |rel|
|
164
164
|
relation_complements.include?(rel.class) &&
|
165
|
-
|
165
|
+
# https://jira.mongodb.org/browse/MONGOID-4882
|
166
|
+
rel.relation_class_name.sub(/\A::/, '') == inverse_class_name
|
166
167
|
|
167
168
|
end
|
168
169
|
if matches.size > 1
|
@@ -7,10 +7,11 @@ module Mongoid
|
|
7
7
|
# This is the superclass for all many to one and many to many association
|
8
8
|
# proxies.
|
9
9
|
class Many < Association::Proxy
|
10
|
+
extend Forwardable
|
10
11
|
include ::Enumerable
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
def_delegators :criteria, :avg, :max, :min, :sum
|
14
|
+
def_delegators :_target, :length, :size, :any?
|
14
15
|
|
15
16
|
# Is the association empty?
|
16
17
|
#
|
@@ -21,7 +22,7 @@ module Mongoid
|
|
21
22
|
#
|
22
23
|
# @since 2.1.0
|
23
24
|
def blank?
|
24
|
-
|
25
|
+
!any?
|
25
26
|
end
|
26
27
|
|
27
28
|
# Creates a new document on the references many association. This will
|
@@ -206,7 +207,7 @@ module Mongoid
|
|
206
207
|
#
|
207
208
|
# @return [ Document ] A matching document or a new/created one.
|
208
209
|
def find_or(method, attrs = {}, type = nil, &block)
|
209
|
-
attrs[
|
210
|
+
attrs[klass.discriminator_key] = type.discriminator_value if type
|
210
211
|
where(attrs).first || send(method, attrs, type, &block)
|
211
212
|
end
|
212
213
|
end
|
@@ -9,12 +9,14 @@ module Mongoid
|
|
9
9
|
# This class is the superclass for all association proxy objects, and contains
|
10
10
|
# common behavior for all of them.
|
11
11
|
class Proxy
|
12
|
+
extend Forwardable
|
13
|
+
|
12
14
|
alias :extend_proxy :extend
|
13
15
|
|
14
16
|
# We undefine most methods to get them sent through to the target.
|
15
17
|
instance_methods.each do |method|
|
16
18
|
undef_method(method) unless
|
17
|
-
method =~
|
19
|
+
method =~ /\A(__.*|send|object_id|equal\?|respond_to\?|tap|public_send|extend_proxy|extend_proxies)\z/
|
18
20
|
end
|
19
21
|
|
20
22
|
include Threaded::Lifecycle
|
@@ -36,9 +38,9 @@ module Mongoid
|
|
36
38
|
attr_accessor :_target
|
37
39
|
|
38
40
|
# Backwards compatibility with Mongoid beta releases.
|
39
|
-
|
40
|
-
|
41
|
-
|
41
|
+
def_delegators :_association, :foreign_key, :inverse_foreign_key
|
42
|
+
def_delegators :binding, :bind_one, :unbind_one
|
43
|
+
def_delegator :_base, :collection_name
|
42
44
|
|
43
45
|
# Convenience for setting the target and the association metadata properties since
|
44
46
|
# all proxies will need to do this.
|
@@ -76,7 +76,7 @@ module Mongoid
|
|
76
76
|
# @since 3.0.0
|
77
77
|
def check_polymorphic_inverses!(doc)
|
78
78
|
inverses = _association.inverses(doc)
|
79
|
-
if inverses.
|
79
|
+
if inverses.length > 1 && _base.send(_association.foreign_key).nil?
|
80
80
|
raise Errors::InvalidSetPolymorphicRelation.new(
|
81
81
|
_association.name, _base.class.name, _target.class.name
|
82
82
|
)
|