mongoid 7.1.2 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +9 -2
- data/Rakefile +45 -5
- data/lib/config/locales/en.yml +38 -2
- data/lib/mongoid.rb +23 -0
- data/lib/mongoid/association/accessors.rb +37 -2
- data/lib/mongoid/association/depending.rb +1 -6
- data/lib/mongoid/association/many.rb +3 -3
- 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/has_and_belongs_to_many/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +36 -1
- data/lib/mongoid/association/referenced/has_many/proxy.rb +8 -1
- data/lib/mongoid/association/referenced/has_one/buildable.rb +9 -1
- data/lib/mongoid/association/referenced/has_one/proxy.rb +6 -1
- data/lib/mongoid/atomic/modifiers.rb +1 -1
- 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 +3 -0
- data/lib/mongoid/contextual/mongo.rb +23 -4
- data/lib/mongoid/copyable.rb +7 -3
- data/lib/mongoid/criteria.rb +57 -7
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- 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 +2 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +21 -6
- data/lib/mongoid/criteria/queryable/selector.rb +3 -3
- data/lib/mongoid/criteria/queryable/storable.rb +3 -3
- data/lib/mongoid/document.rb +15 -3
- data/lib/mongoid/errors.rb +7 -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.rb +1 -0
- data/lib/mongoid/factory.rb +27 -10
- data/lib/mongoid/fields.rb +3 -0
- data/lib/mongoid/fields/validators/macro.rb +26 -10
- data/lib/mongoid/findable.rb +50 -14
- data/lib/mongoid/indexable.rb +2 -2
- 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/query_cache.rb +81 -37
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/serializable.rb +1 -1
- data/lib/mongoid/stringified_symbol.rb +53 -0
- data/lib/mongoid/tasks/database.rb +38 -3
- data/lib/mongoid/traversable.rb +111 -4
- data/lib/mongoid/version.rb +1 -1
- data/spec/README.md +19 -4
- data/spec/integration/app_spec.rb +85 -23
- data/spec/integration/associations/embedded_spec.rb +94 -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/has_many_spec.rb +129 -0
- data/spec/integration/associations/has_one_spec.rb +129 -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/discriminator_key_spec.rb +354 -0
- data/spec/integration/discriminator_value_spec.rb +207 -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 +20 -4
- data/spec/integration/stringified_symbol_field_spec.rb +190 -0
- data/spec/lite_spec_helper.rb +4 -2
- 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 +1 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +138 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +105 -0
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
- data/spec/mongoid/association/referenced/has_many_models.rb +21 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +21 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1 -1
- 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/clients/factory_spec.rb +45 -8
- data/spec/mongoid/clients/options_spec.rb +9 -9
- data/spec/mongoid/clients/sessions_spec.rb +1 -6
- data/spec/mongoid/config_spec.rb +28 -0
- data/spec/mongoid/contextual/geo_near_spec.rb +11 -2
- data/spec/mongoid/contextual/mongo_spec.rb +70 -16
- data/spec/mongoid/copyable_spec.rb +197 -18
- data/spec/mongoid/copyable_spec_models.rb +28 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_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/selectable_spec.rb +84 -82
- data/spec/mongoid/criteria_spec.rb +204 -39
- data/spec/mongoid/document_spec.rb +89 -15
- data/spec/mongoid/equality_spec.rb +0 -1
- 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/extensions/stringified_symbol_spec.rb +85 -0
- 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 +28 -2
- data/spec/mongoid/inspectable_spec.rb +29 -2
- data/spec/mongoid/interceptable_spec.rb +2 -2
- 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/savable_spec.rb +174 -16
- data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
- data/spec/mongoid/query_cache_spec.rb +496 -28
- data/spec/mongoid/reloadable_spec.rb +72 -0
- data/spec/mongoid/serializable_spec.rb +21 -3
- data/spec/mongoid/traversable_spec.rb +1100 -0
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/constraints.rb +303 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/spec_helper.rb +4 -2
- data/spec/support/constraints.rb +20 -222
- data/spec/support/helpers.rb +1 -1
- 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/{app → support}/models/coding.rb +1 -1
- data/spec/{app → support}/models/coding/pull_request.rb +0 -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/{app → support}/models/delegating_patient.rb +0 -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/support/models/order.rb +11 -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 +3 -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/{app → support}/models/publication/encyclopedia.rb +0 -0
- data/spec/{app → support}/models/publication/review.rb +0 -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 +1 -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 +1 -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 +1 -1
- metadata +857 -739
- 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/app/models/publication.rb +0 -5
- 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
- data/spec/support/child_process_helper.rb +0 -76
- data/spec/support/lite_constraints.rb +0 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6a81d403f49ffcc37e06200c91ab90a6205604730f7169ceb4a07d057ae61193
|
|
4
|
+
data.tar.gz: 045ce8ed60ab931f1406e52f25f9e486d670ec1c76dff86ee3b299cbeca0adfe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bebd7b18d65049cd7d0793319a65bf1868f3c9addf09c21c7b4dbf315deb2fda27cf1a8f27be5288245ab2b1c830d21752de9042d01fb9b31579cab7536ccdcf
|
|
7
|
+
data.tar.gz: 4a4b231ce42eb8b5bf07eca5131ff4b9e5c838a0965996adcf9a529ad6c398f11e0c9e4e5d7cc005fe969e4851a50a2d6aab7c436af433a809c6090ff1927b9c
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data.tar.gz.sig
CHANGED
|
Binary file
|
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
|
|
|
@@ -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,14 +1,23 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "bundler"
|
|
4
|
+
require "bundler/gem_tasks"
|
|
4
5
|
Bundler.setup
|
|
5
6
|
|
|
7
|
+
ROOT = File.expand_path(File.join(File.dirname(__FILE__)))
|
|
8
|
+
|
|
9
|
+
$: << File.join(ROOT, 'spec/shared/lib')
|
|
10
|
+
|
|
6
11
|
require "rake"
|
|
7
12
|
require "rspec/core/rake_task"
|
|
13
|
+
require 'mrss/spec_organizer'
|
|
8
14
|
|
|
9
15
|
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
|
10
16
|
require "mongoid/version"
|
|
11
17
|
|
|
18
|
+
tasks = Rake.application.instance_variable_get('@tasks')
|
|
19
|
+
tasks['release:do'] = tasks.delete('release')
|
|
20
|
+
|
|
12
21
|
task :gem => :build
|
|
13
22
|
task :build do
|
|
14
23
|
system "gem build mongoid.gemspec"
|
|
@@ -18,11 +27,8 @@ task :install => :build do
|
|
|
18
27
|
system "sudo gem install mongoid-#{Mongoid::VERSION}.gem"
|
|
19
28
|
end
|
|
20
29
|
|
|
21
|
-
task :release
|
|
22
|
-
|
|
23
|
-
system "git push --tags"
|
|
24
|
-
system "gem push mongoid-#{Mongoid::VERSION}.gem"
|
|
25
|
-
system "rm mongoid-#{Mongoid::VERSION}.gem"
|
|
30
|
+
task :release do
|
|
31
|
+
raise "Please use ./release.sh to release"
|
|
26
32
|
end
|
|
27
33
|
|
|
28
34
|
RSpec::Core::RakeTask.new("spec") do |spec|
|
|
@@ -34,6 +40,32 @@ RSpec::Core::RakeTask.new('spec:progress') do |spec|
|
|
|
34
40
|
spec.pattern = "spec/**/*_spec.rb"
|
|
35
41
|
end
|
|
36
42
|
|
|
43
|
+
CLASSIFIERS = [
|
|
44
|
+
[%r,^mongoid/attribute,, :attributes],
|
|
45
|
+
[%r,^mongoid/association/[or],, :associations_referenced],
|
|
46
|
+
[%r,^mongoid/association,, :associations],
|
|
47
|
+
[%r,^mongoid,, :unit],
|
|
48
|
+
[%r,^integration,, :integration],
|
|
49
|
+
[%r,^rails,, :rails],
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
RUN_PRIORITY = %i(
|
|
53
|
+
unit attributes associations_referenced associations
|
|
54
|
+
integration rails
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
def spec_organizer
|
|
58
|
+
Mrss::SpecOrganizer.new(
|
|
59
|
+
root: ROOT,
|
|
60
|
+
classifiers: CLASSIFIERS,
|
|
61
|
+
priority_order: RUN_PRIORITY,
|
|
62
|
+
)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
task :ci do
|
|
66
|
+
spec_organizer.run
|
|
67
|
+
end
|
|
68
|
+
|
|
37
69
|
task :default => :spec
|
|
38
70
|
|
|
39
71
|
desc "Generate all documentation"
|
|
@@ -47,3 +79,11 @@ namespace :docs do
|
|
|
47
79
|
system "yardoc -o #{out} --title mongoid-#{Mongoid::VERSION}"
|
|
48
80
|
end
|
|
49
81
|
end
|
|
82
|
+
|
|
83
|
+
namespace :release do
|
|
84
|
+
task :check_private_key do
|
|
85
|
+
unless File.exist?('gem-private_key.pem')
|
|
86
|
+
raise "No private key present, cannot release"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
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}."
|
|
@@ -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
|
@@ -111,4 +111,27 @@ module Mongoid
|
|
|
111
111
|
#
|
|
112
112
|
# @since 1.0.0
|
|
113
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
|
|
114
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
|
|
@@ -11,7 +11,7 @@ module Mongoid
|
|
|
11
11
|
include ::Enumerable
|
|
12
12
|
|
|
13
13
|
def_delegators :criteria, :avg, :max, :min, :sum
|
|
14
|
-
def_delegators :_target, :length, :size
|
|
14
|
+
def_delegators :_target, :length, :size, :any?
|
|
15
15
|
|
|
16
16
|
# Is the association empty?
|
|
17
17
|
#
|
|
@@ -22,7 +22,7 @@ module Mongoid
|
|
|
22
22
|
#
|
|
23
23
|
# @since 2.1.0
|
|
24
24
|
def blank?
|
|
25
|
-
|
|
25
|
+
!any?
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
# Creates a new document on the references many association. This will
|
|
@@ -207,7 +207,7 @@ module Mongoid
|
|
|
207
207
|
#
|
|
208
208
|
# @return [ Document ] A matching document or a new/created one.
|
|
209
209
|
def find_or(method, attrs = {}, type = nil, &block)
|
|
210
|
-
attrs[
|
|
210
|
+
attrs[klass.discriminator_key] = type.discriminator_value if type
|
|
211
211
|
where(attrs).first || send(method, attrs, type, &block)
|
|
212
212
|
end
|
|
213
213
|
end
|
|
@@ -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
|
)
|
|
@@ -101,7 +101,7 @@ module Mongoid
|
|
|
101
101
|
|
|
102
102
|
# Delete the document from the association. This will set the foreign key
|
|
103
103
|
# on the document to nil. If the dependent options on the association are
|
|
104
|
-
# :
|
|
104
|
+
# :delete_all or :destroy the appropriate removal will occur.
|
|
105
105
|
#
|
|
106
106
|
# @example Delete the document.
|
|
107
107
|
# person.posts.delete(post)
|
|
@@ -216,6 +216,40 @@ module Mongoid
|
|
|
216
216
|
end
|
|
217
217
|
end
|
|
218
218
|
|
|
219
|
+
# Returns whether the association has any documents, optionally
|
|
220
|
+
# subject to the provided filters.
|
|
221
|
+
#
|
|
222
|
+
# This method returns true if the association has any persisted
|
|
223
|
+
# documents and if it has any not yet persisted documents.
|
|
224
|
+
#
|
|
225
|
+
# If the association is already loaded, this method inspects the
|
|
226
|
+
# loaded documents and does not query the database. If the
|
|
227
|
+
# association is not loaded, the argument-less and block-less
|
|
228
|
+
# version does not load the association; the other versions
|
|
229
|
+
# (that delegate to Enumerable) may or may not load the association
|
|
230
|
+
# completely depending on whether it is iterated to completion.
|
|
231
|
+
#
|
|
232
|
+
# This method can take a parameter and a block. The behavior with
|
|
233
|
+
# either the paramater or the block is delegated to the standard
|
|
234
|
+
# library Enumerable module.
|
|
235
|
+
#
|
|
236
|
+
# Note that when Enumerable's any? method is invoked with both
|
|
237
|
+
# a block and a pattern, it only uses the pattern.
|
|
238
|
+
#
|
|
239
|
+
# @param [ Object ] condition The condition that documents
|
|
240
|
+
# must satisfy. See Enumerable documentation for details.
|
|
241
|
+
#
|
|
242
|
+
# @return [ true, false ] If the association has any documents.
|
|
243
|
+
def any?(*args)
|
|
244
|
+
return super if args.any? || block_given?
|
|
245
|
+
|
|
246
|
+
if _loaded?
|
|
247
|
+
in_memory.length > 0
|
|
248
|
+
else
|
|
249
|
+
_unloaded.exists? || _added.length > 0
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
219
253
|
# Get the first document in the enumerable. Will check the persisted
|
|
220
254
|
# documents first. Does not load the entire enumerable.
|
|
221
255
|
#
|
|
@@ -395,7 +429,8 @@ module Mongoid
|
|
|
395
429
|
#
|
|
396
430
|
# @since 2.1.0
|
|
397
431
|
def reset
|
|
398
|
-
_loaded.clear
|
|
432
|
+
_loaded.clear
|
|
433
|
+
_added.clear
|
|
399
434
|
@executed = false
|
|
400
435
|
end
|
|
401
436
|
|
|
@@ -90,7 +90,7 @@ module Mongoid
|
|
|
90
90
|
|
|
91
91
|
# Delete the document from the association. This will set the foreign key
|
|
92
92
|
# on the document to nil. If the dependent options on the association are
|
|
93
|
-
# :
|
|
93
|
+
# :delete_all or :destroy the appropriate removal will occur.
|
|
94
94
|
#
|
|
95
95
|
# @example Delete the document.
|
|
96
96
|
# person.posts.delete(post)
|
|
@@ -170,6 +170,13 @@ module Mongoid
|
|
|
170
170
|
|
|
171
171
|
# Determine if any documents in this association exist in the database.
|
|
172
172
|
#
|
|
173
|
+
# If the association contains documents but all of the documents
|
|
174
|
+
# exist only in the application, i.e. have not been persisted to the
|
|
175
|
+
# database, this method returns false.
|
|
176
|
+
#
|
|
177
|
+
# This method queries the database on each invocation even if the
|
|
178
|
+
# association is already loaded into memory.
|
|
179
|
+
#
|
|
173
180
|
# @example Are there persisted documents?
|
|
174
181
|
# person.posts.exists?
|
|
175
182
|
#
|
|
@@ -35,6 +35,14 @@ module Mongoid
|
|
|
35
35
|
private
|
|
36
36
|
|
|
37
37
|
def clear_associated(object)
|
|
38
|
+
unless inverse
|
|
39
|
+
raise Errors::InverseNotFound.new(
|
|
40
|
+
@owner_class,
|
|
41
|
+
name,
|
|
42
|
+
object.class,
|
|
43
|
+
foreign_key,
|
|
44
|
+
)
|
|
45
|
+
end
|
|
38
46
|
if object && (associated = object.send(inverse))
|
|
39
47
|
associated.substitute(nil)
|
|
40
48
|
end
|
|
@@ -46,7 +54,7 @@ module Mongoid
|
|
|
46
54
|
end
|
|
47
55
|
|
|
48
56
|
def execute_query(object, base)
|
|
49
|
-
query_criteria(object, base).limit(
|
|
57
|
+
query_criteria(object, base).limit(1).first(id_sort: :none)
|
|
50
58
|
end
|
|
51
59
|
|
|
52
60
|
def with_polymorphic_criterion(criteria, base)
|