mongoid 7.1.11 → 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/README.md +10 -3
- data/Rakefile +11 -30
- data/lib/config/locales/en.yml +37 -14
- data/lib/mongoid/association/depending.rb +1 -6
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
- data/lib/mongoid/association/many.rb +3 -3
- data/lib/mongoid/association/proxy.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 +37 -2
- data/lib/mongoid/association/referenced/has_many/proxy.rb +9 -2
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/proxy.rb +1 -6
- data/lib/mongoid/atomic/modifiers.rb +1 -1
- data/lib/mongoid/attributes/dynamic.rb +1 -1
- data/lib/mongoid/attributes.rb +1 -8
- data/lib/mongoid/clients/factory.rb +17 -0
- data/lib/mongoid/composable.rb +1 -0
- data/lib/mongoid/config/environment.rb +1 -9
- data/lib/mongoid/config.rb +3 -0
- data/lib/mongoid/contextual/atomic.rb +2 -7
- data/lib/mongoid/contextual/mongo.rb +23 -4
- data/lib/mongoid/contextual/none.rb +0 -3
- data/lib/mongoid/copyable.rb +2 -2
- 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 +23 -8
- data/lib/mongoid/criteria/queryable/selector.rb +7 -3
- data/lib/mongoid/criteria/queryable/storable.rb +7 -7
- data/lib/mongoid/criteria.rb +58 -8
- data/lib/mongoid/document.rb +19 -9
- 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/mongoid_error.rb +1 -1
- data/lib/mongoid/errors.rb +7 -2
- data/lib/mongoid/factory.rb +27 -10
- data/lib/mongoid/fields/validators/macro.rb +22 -9
- data/lib/mongoid/findable.rb +50 -14
- data/lib/mongoid/indexable.rb +2 -2
- data/lib/mongoid/interceptable.rb +2 -4
- data/lib/mongoid/matchable.rb +1 -149
- 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/matcher.rb +127 -0
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistence_context.rb +1 -3
- data/lib/mongoid/query_cache.rb +64 -62
- data/lib/mongoid/reloadable.rb +2 -7
- data/lib/mongoid/serializable.rb +1 -1
- data/lib/mongoid/tasks/database.rb +1 -1
- data/lib/mongoid/traversable.rb +111 -4
- data/lib/mongoid/validatable/associated.rb +1 -1
- data/lib/mongoid/validatable/presence.rb +3 -3
- data/lib/mongoid/validatable/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid.rb +23 -1
- data/lib/rails/generators/mongoid/config/config_generator.rb +1 -8
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
- data/spec/integration/app_spec.rb +88 -178
- data/spec/integration/associations/embedded_spec.rb +94 -0
- data/spec/integration/associations/has_many_spec.rb +39 -46
- data/spec/integration/associations/has_one_spec.rb +39 -46
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
- data/spec/integration/atomic/modifiers_spec.rb +117 -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 +0 -21
- 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/lite_spec_helper.rb +7 -7
- data/spec/mongoid/association/depending_spec.rb +78 -26
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +0 -50
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +37 -17
- 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/belongs_to/proxy_spec.rb +0 -17
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
- 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/paths_spec.rb +0 -41
- data/spec/mongoid/atomic_spec.rb +23 -0
- data/spec/mongoid/attributes/nested_spec.rb +1 -1
- data/spec/mongoid/attributes_spec.rb +0 -241
- data/spec/mongoid/clients/factory_spec.rb +35 -9
- data/spec/mongoid/clients/options_spec.rb +3 -11
- data/spec/mongoid/clients/sessions_spec.rb +1 -6
- data/spec/mongoid/config/environment_spec.rb +8 -86
- data/spec/mongoid/config_spec.rb +28 -0
- data/spec/mongoid/contextual/atomic_spec.rb +29 -81
- data/spec/mongoid/contextual/geo_near_spec.rb +1 -1
- data/spec/mongoid/contextual/mongo_spec.rb +70 -16
- data/spec/mongoid/copyable_spec.rb +153 -1
- data/spec/mongoid/copyable_spec_models.rb +14 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -36
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +84 -82
- data/spec/mongoid/criteria_spec.rb +204 -43
- data/spec/mongoid/document_query_spec.rb +0 -51
- data/spec/mongoid/document_spec.rb +90 -36
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +8 -20
- data/spec/mongoid/factory_spec.rb +261 -28
- data/spec/mongoid/fields_spec.rb +48 -2
- 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/persistable/settable_spec.rb +0 -30
- data/spec/mongoid/persistable/updatable_spec.rb +0 -2
- data/spec/mongoid/persistable_spec.rb +2 -2
- data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
- data/spec/mongoid/query_cache_spec.rb +442 -41
- 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/spec_helper.rb +3 -5
- data/spec/support/child_process_helper.rb +79 -0
- data/spec/support/constraints.rb +250 -0
- data/spec/support/helpers.rb +1 -1
- 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 -4
- 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/pull_request.rb +0 -0
- data/spec/{app → support}/models/coding.rb +1 -1
- 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 -6
- 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/{app → support}/models/mop.rb +0 -10
- 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 +0 -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 -12
- 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 +0 -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/{app → support}/models/publication/encyclopedia.rb +0 -0
- data/spec/{app → support}/models/publication/review.rb +0 -0
- data/spec/support/models/publication.rb +5 -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 -1
- 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 -1
- 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/spec_config.rb +1 -9
- data/spec/support/spec_organizer.rb +130 -0
- data.tar.gz.sig +0 -0
- metadata +847 -844
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/empty_config_file.rb +0 -26
- data/lib/mongoid/errors/invalid_config_file.rb +0 -26
- 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/customer.rb +0 -11
- data/spec/app/models/customer_address.rb +0 -12
- data/spec/app/models/publication.rb +0 -5
- data/spec/integration/associations/embeds_many_spec.rb +0 -24
- data/spec/integration/associations/embeds_one_spec.rb +0 -24
- data/spec/integration/callbacks_models.rb +0 -49
- data/spec/integration/callbacks_spec.rb +0 -216
- data/spec/integration/contextual/empty_spec.rb +0 -142
- data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -32
- 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/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -226
- data/spec/shared/lib/mrss/constraints.rb +0 -385
- data/spec/shared/lib/mrss/docker_runner.rb +0 -271
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -15
- data/spec/shared/share/Dockerfile.erb +0 -323
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/distro.sh +0 -73
- data/spec/shared/shlib/server.sh +0 -367
- data/spec/shared/shlib/set_env.sh +0 -131
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/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,7 +19,7 @@ Compatibility
|
|
|
17
19
|
|
|
18
20
|
Mongoid supports and is tested against:
|
|
19
21
|
|
|
20
|
-
- MRI 2.3-
|
|
22
|
+
- MRI 2.3-2.7
|
|
21
23
|
- JRuby 9.2
|
|
22
24
|
- MongoDB server 2.6-4.4
|
|
23
25
|
|
|
@@ -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
|
@@ -4,13 +4,8 @@ require "bundler"
|
|
|
4
4
|
require "bundler/gem_tasks"
|
|
5
5
|
Bundler.setup
|
|
6
6
|
|
|
7
|
-
ROOT = File.expand_path(File.join(File.dirname(__FILE__)))
|
|
8
|
-
|
|
9
|
-
$: << File.join(ROOT, 'spec/shared/lib')
|
|
10
|
-
|
|
11
7
|
require "rake"
|
|
12
8
|
require "rspec/core/rake_task"
|
|
13
|
-
require 'mrss/spec_organizer'
|
|
14
9
|
|
|
15
10
|
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
|
16
11
|
require "mongoid/version"
|
|
@@ -27,8 +22,11 @@ task :install => :build do
|
|
|
27
22
|
system "sudo gem install mongoid-#{Mongoid::VERSION}.gem"
|
|
28
23
|
end
|
|
29
24
|
|
|
30
|
-
task :release do
|
|
31
|
-
|
|
25
|
+
task :release => :build do
|
|
26
|
+
system "git tag -a v#{Mongoid::VERSION} -m 'Tagging #{Mongoid::VERSION}'"
|
|
27
|
+
system "git push --tags"
|
|
28
|
+
system "gem push mongoid-#{Mongoid::VERSION}.gem"
|
|
29
|
+
system "rm mongoid-#{Mongoid::VERSION}.gem"
|
|
32
30
|
end
|
|
33
31
|
|
|
34
32
|
RSpec::Core::RakeTask.new("spec") do |spec|
|
|
@@ -40,30 +38,11 @@ RSpec::Core::RakeTask.new('spec:progress') do |spec|
|
|
|
40
38
|
spec.pattern = "spec/**/*_spec.rb"
|
|
41
39
|
end
|
|
42
40
|
|
|
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
41
|
task :ci do
|
|
66
|
-
|
|
42
|
+
$LOAD_PATH.push File.expand_path("../spec", __FILE__)
|
|
43
|
+
require 'support/spec_organizer'
|
|
44
|
+
|
|
45
|
+
SpecOrganizer.new.run
|
|
67
46
|
end
|
|
68
47
|
|
|
69
48
|
task :default => :spec
|
|
@@ -87,3 +66,5 @@ namespace :release do
|
|
|
87
66
|
end
|
|
88
67
|
end
|
|
89
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
|
|
@@ -77,12 +80,6 @@ en:
|
|
|
77
80
|
different collections so a simple id lookup is not sufficient enough."
|
|
78
81
|
resolution: "Don't attempt to perform this action and have patience,
|
|
79
82
|
maybe this will be supported in the future."
|
|
80
|
-
empty_config_file:
|
|
81
|
-
message: "Empty configuration file: %{path}."
|
|
82
|
-
summary: "Your mongoid.yml configuration file appears to be empty."
|
|
83
|
-
resolution: "Ensure your configuration file contains the correct contents.
|
|
84
|
-
Please consult the following page with respect to Mongoid's configuration:
|
|
85
|
-
https://docs.mongodb.com/mongoid/current/reference/configuration/"
|
|
86
83
|
invalid_collection:
|
|
87
84
|
message: "Access to the collection for %{klass} is not allowed."
|
|
88
85
|
summary: "%{klass}.collection was called, and %{klass} is an embedded
|
|
@@ -97,13 +94,6 @@ en:
|
|
|
97
94
|
A collation option is only supported if the query is executed on a MongoDB server
|
|
98
95
|
with version >= 3.4."
|
|
99
96
|
resolution: "Remove the collation option from the query."
|
|
100
|
-
invalid_config_file:
|
|
101
|
-
message: "Invalid configuration file: %{path}."
|
|
102
|
-
summary: "Your mongoid.yml configuration file does not contain the
|
|
103
|
-
correct file structure."
|
|
104
|
-
resolution: "Ensure your configuration file contains the correct contents.
|
|
105
|
-
Please consult the following page with respect to Mongoid's configuration:
|
|
106
|
-
https://docs.mongodb.com/mongoid/current/reference/configuration/"
|
|
107
97
|
invalid_config_option:
|
|
108
98
|
message: "Invalid configuration option: %{name}."
|
|
109
99
|
summary: "A invalid configuration option was provided in your
|
|
@@ -118,6 +108,32 @@ en:
|
|
|
118
108
|
summary: "An invalid dependent strategy was defined for the association:
|
|
119
109
|
%{association}. The valid strategies are: %{valid_strategies}."
|
|
120
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."
|
|
121
137
|
invalid_field:
|
|
122
138
|
message: "Defining a field named '%{name}' is not allowed."
|
|
123
139
|
summary: "Defining this field would override the method '%{name}',
|
|
@@ -131,6 +147,13 @@ en:
|
|
|
131
147
|
allowed, and don't use these names. These include names that also
|
|
132
148
|
conflict with core Ruby methods on Object, Module, Enumerable, or
|
|
133
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."
|
|
134
157
|
invalid_field_option:
|
|
135
158
|
message: "Invalid option :%{option} provided for field :%{name}."
|
|
136
159
|
summary: "Mongoid requires that you only provide valid options on each
|
|
@@ -556,7 +579,7 @@ en:
|
|
|
556
579
|
the validations."
|
|
557
580
|
delete_restriction:
|
|
558
581
|
message: "Cannot delete %{document} because of dependent '%{relation}'."
|
|
559
|
-
summary: "When defining '%{relation}' with a :dependent => :
|
|
582
|
+
summary: "When defining '%{relation}' with a :dependent => :restrict_with_error,
|
|
560
583
|
Mongoid will raise an error when attempting to delete the
|
|
561
584
|
%{document} when the child '%{relation}' still has documents in it."
|
|
562
585
|
resolution: "Don't attempt to delete the parent %{document} when
|
|
@@ -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
|
|
@@ -415,7 +415,7 @@ module Mongoid
|
|
|
415
415
|
# @param [ Proc ] block Optional block to pass.
|
|
416
416
|
#
|
|
417
417
|
# @return [ Criteria, Object ] A Criteria or return value from the target.
|
|
418
|
-
|
|
418
|
+
def method_missing(name, *args, &block)
|
|
419
419
|
return super if _target.respond_to?(name)
|
|
420
420
|
klass.send(:with_scope, criteria) do
|
|
421
421
|
criteria.public_send(name, *args, &block)
|
|
@@ -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
|
|
@@ -133,7 +133,7 @@ module Mongoid
|
|
|
133
133
|
# @param [ String, Symbol ] name The name of the method.
|
|
134
134
|
# @param [ Array ] args The arguments passed to the method.
|
|
135
135
|
#
|
|
136
|
-
|
|
136
|
+
def method_missing(name, *args, &block)
|
|
137
137
|
_target.send(name, *args, &block)
|
|
138
138
|
end
|
|
139
139
|
|
|
@@ -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
|
|
|
@@ -498,7 +533,7 @@ module Mongoid
|
|
|
498
533
|
end
|
|
499
534
|
end
|
|
500
535
|
|
|
501
|
-
|
|
536
|
+
def method_missing(name, *args, &block)
|
|
502
537
|
entries.send(name, *args, &block)
|
|
503
538
|
end
|
|
504
539
|
|
|
@@ -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
|
#
|
|
@@ -436,7 +443,7 @@ module Mongoid
|
|
|
436
443
|
# @return [ Criteria, Object ] A Criteria or return value from the target.
|
|
437
444
|
#
|
|
438
445
|
# @since 2.0.0.beta.1
|
|
439
|
-
|
|
446
|
+
def method_missing(name, *args, &block)
|
|
440
447
|
if _target.respond_to?(name)
|
|
441
448
|
_target.send(name, *args, &block)
|
|
442
449
|
else
|
|
@@ -54,14 +54,9 @@ module Mongoid
|
|
|
54
54
|
#
|
|
55
55
|
# @since 2.0.0.rc.1
|
|
56
56
|
def substitute(replacement)
|
|
57
|
-
# If the same object currently associated is being assigned,
|
|
58
|
-
# rebind the association and save the target but do not destroy
|
|
59
|
-
# the target.
|
|
60
|
-
|
|
61
57
|
unbind_one
|
|
62
58
|
if persistable?
|
|
63
|
-
|
|
64
|
-
if _association.destructive? && self != replacement
|
|
59
|
+
if _association.destructive?
|
|
65
60
|
send(_association.dependent)
|
|
66
61
|
else
|
|
67
62
|
save if persisted?
|
|
@@ -193,7 +193,7 @@ module Mongoid
|
|
|
193
193
|
def push_conflict?(field)
|
|
194
194
|
name = field.split(".", 2)[0]
|
|
195
195
|
set_fields.has_key?(name) || pull_fields.has_key?(name) ||
|
|
196
|
-
(push_fields.keys.count { |item| item
|
|
196
|
+
(push_fields.keys.count { |item| item.split('.', 2).first == name } > 1)
|
|
197
197
|
end
|
|
198
198
|
|
|
199
199
|
# Get the conflicting pull modifications.
|
|
@@ -116,7 +116,7 @@ module Mongoid
|
|
|
116
116
|
#
|
|
117
117
|
# @since 4.0.0
|
|
118
118
|
def inspect_dynamic_fields
|
|
119
|
-
keys = attributes.keys - fields.keys - relations.keys - ["_id",
|
|
119
|
+
keys = attributes.keys - fields.keys - relations.keys - ["_id", self.class.discriminator_key]
|
|
120
120
|
return keys.map do |name|
|
|
121
121
|
"#{name}: #{attributes[name].inspect}"
|
|
122
122
|
end
|
data/lib/mongoid/attributes.rb
CHANGED
|
@@ -160,11 +160,6 @@ module Mongoid
|
|
|
160
160
|
# @since 1.0.0
|
|
161
161
|
def write_attribute(name, value)
|
|
162
162
|
field_name = database_field_name(name)
|
|
163
|
-
|
|
164
|
-
if attribute_missing?(field_name)
|
|
165
|
-
raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'"
|
|
166
|
-
end
|
|
167
|
-
|
|
168
163
|
if attribute_writable?(field_name)
|
|
169
164
|
_assigning do
|
|
170
165
|
validate_attribute_value(field_name, value)
|
|
@@ -182,8 +177,6 @@ module Mongoid
|
|
|
182
177
|
end
|
|
183
178
|
typed_value
|
|
184
179
|
end
|
|
185
|
-
else
|
|
186
|
-
# TODO: MONGOID-5072
|
|
187
180
|
end
|
|
188
181
|
end
|
|
189
182
|
alias :[]= :write_attribute
|
|
@@ -301,7 +294,7 @@ module Mongoid
|
|
|
301
294
|
def read_raw_attribute(name)
|
|
302
295
|
normalized = database_field_name(name.to_s)
|
|
303
296
|
if attribute_missing?(normalized)
|
|
304
|
-
raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'"
|
|
297
|
+
raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'."
|
|
305
298
|
end
|
|
306
299
|
if hash_dot_syntax?(normalized)
|
|
307
300
|
attributes.__nested__(normalized)
|
|
@@ -69,11 +69,28 @@ module Mongoid
|
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
+
MONGOID_WRAPPING_LIBRARY = {
|
|
73
|
+
name: 'Mongoid',
|
|
74
|
+
version: VERSION,
|
|
75
|
+
}.freeze
|
|
76
|
+
|
|
77
|
+
def driver_version
|
|
78
|
+
Mongo::VERSION.split('.')[0...2].map(&:to_i)
|
|
79
|
+
end
|
|
80
|
+
|
|
72
81
|
def options(configuration)
|
|
73
82
|
config = configuration.dup
|
|
74
83
|
options = config.delete(:options) || {}
|
|
75
84
|
options[:platform] = PLATFORM_DETAILS
|
|
76
85
|
options[:app_name] = Mongoid::Config.app_name if Mongoid::Config.app_name
|
|
86
|
+
if (driver_version <=> [2, 13]) >= 0
|
|
87
|
+
wrap_lib = if options[:wrapping_libraries]
|
|
88
|
+
[MONGOID_WRAPPING_LIBRARY] + options[:wrapping_libraries]
|
|
89
|
+
else
|
|
90
|
+
[MONGOID_WRAPPING_LIBRARY]
|
|
91
|
+
end
|
|
92
|
+
options[:wrapping_libraries] = wrap_lib
|
|
93
|
+
end
|
|
77
94
|
options.reject{ |k, v| k == :hosts }.to_hash.symbolize_keys!
|
|
78
95
|
end
|
|
79
96
|
end
|
data/lib/mongoid/composable.rb
CHANGED
|
@@ -52,15 +52,7 @@ module Mongoid
|
|
|
52
52
|
# @api private
|
|
53
53
|
def load_yaml(path, environment = nil)
|
|
54
54
|
env = environment ? environment.to_s : env_name
|
|
55
|
-
|
|
56
|
-
if contents.empty?
|
|
57
|
-
raise Mongoid::Errors::EmptyConfigFile.new(path)
|
|
58
|
-
end
|
|
59
|
-
data = YAML.load(ERB.new(contents).result)
|
|
60
|
-
unless data.is_a?(Hash)
|
|
61
|
-
raise Mongoid::Errors::InvalidConfigFile.new(path)
|
|
62
|
-
end
|
|
63
|
-
data[env]
|
|
55
|
+
YAML.load(ERB.new(File.new(path).read).result)[env]
|
|
64
56
|
end
|
|
65
57
|
end
|
|
66
58
|
end
|
data/lib/mongoid/config.rb
CHANGED
|
@@ -32,6 +32,9 @@ module Mongoid
|
|
|
32
32
|
# error.
|
|
33
33
|
option :belongs_to_required_by_default, default: true
|
|
34
34
|
|
|
35
|
+
# Set the global discriminator key.
|
|
36
|
+
option :discriminator_key, default: "_type"
|
|
37
|
+
|
|
35
38
|
# Raise an exception when a field is redefined.
|
|
36
39
|
option :duplicate_fields_exception, default: false
|
|
37
40
|
|
|
@@ -173,18 +173,13 @@ module Mongoid
|
|
|
173
173
|
# @example Unset the field on the matches.
|
|
174
174
|
# context.unset(:name)
|
|
175
175
|
#
|
|
176
|
-
# @param [ String
|
|
177
|
-
# The name(s) of the field(s) to unset.
|
|
178
|
-
# If a Hash is specified, its keys will be used irrespective of what
|
|
179
|
-
# each key's value is, even if the value is nil or false.
|
|
176
|
+
# @param [ String, Symbol, Array ] args The name of the fields.
|
|
180
177
|
#
|
|
181
178
|
# @return [ nil ] Nil.
|
|
182
179
|
#
|
|
183
180
|
# @since 3.0.0
|
|
184
181
|
def unset(*args)
|
|
185
|
-
fields = args.
|
|
186
|
-
.__find_args__
|
|
187
|
-
.map { |f| [database_field_name(f), true] }
|
|
182
|
+
fields = args.__find_args__.collect { |f| [database_field_name(f), true] }
|
|
188
183
|
view.update_many("$unset" => Hash[fields])
|
|
189
184
|
end
|
|
190
185
|
|
|
@@ -71,7 +71,26 @@ module Mongoid
|
|
|
71
71
|
# @since 3.0.0
|
|
72
72
|
def count(options = {}, &block)
|
|
73
73
|
return super(&block) if block_given?
|
|
74
|
-
try_cache(:count) { view.
|
|
74
|
+
try_cache(:count) { view.count_documents(options) }
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Get the estimated number of documents matching the query.
|
|
78
|
+
#
|
|
79
|
+
# Unlike count, estimated_count does not take a block because it is not
|
|
80
|
+
# traditionally defined (with a block) on Enumarable like count is.
|
|
81
|
+
#
|
|
82
|
+
# @example Get the estimated number of matching documents.
|
|
83
|
+
# context.estimated_count
|
|
84
|
+
#
|
|
85
|
+
# @param [ Hash ] options The options, such as maxTimeMS to be factored
|
|
86
|
+
# into the count.
|
|
87
|
+
#
|
|
88
|
+
# @return [ Integer ] The number of matches.
|
|
89
|
+
def estimated_count(options = {})
|
|
90
|
+
unless self.criteria.selector.empty?
|
|
91
|
+
raise Mongoid::Errors::InvalidEstimatedCountCriteria.new(self.klass)
|
|
92
|
+
end
|
|
93
|
+
try_cache(:estimated_count) { view.estimated_document_count(options) }
|
|
75
94
|
end
|
|
76
95
|
|
|
77
96
|
# Delete all documents in the database that match the selector.
|
|
@@ -258,12 +277,12 @@ module Mongoid
|
|
|
258
277
|
return documents.first if cached? && cache_loaded?
|
|
259
278
|
try_cache(:first) do
|
|
260
279
|
if sort = view.sort || ({ _id: 1 } unless opts[:id_sort] == :none)
|
|
261
|
-
if raw_doc = view.sort(sort).limit(
|
|
280
|
+
if raw_doc = view.sort(sort).limit(1).first
|
|
262
281
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
|
263
282
|
eager_load([doc]).first
|
|
264
283
|
end
|
|
265
284
|
else
|
|
266
|
-
if raw_doc = view.limit(
|
|
285
|
+
if raw_doc = view.limit(1).first
|
|
267
286
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
|
268
287
|
eager_load([doc]).first
|
|
269
288
|
end
|
|
@@ -372,7 +391,7 @@ module Mongoid
|
|
|
372
391
|
def last(opts = {})
|
|
373
392
|
try_cache(:last) do
|
|
374
393
|
with_inverse_sorting(opts) do
|
|
375
|
-
if raw_doc = view.limit(
|
|
394
|
+
if raw_doc = view.limit(1).first
|
|
376
395
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
|
377
396
|
eager_load([doc]).first
|
|
378
397
|
end
|
data/lib/mongoid/copyable.rb
CHANGED
|
@@ -76,8 +76,8 @@ module Mongoid
|
|
|
76
76
|
|
|
77
77
|
if association.is_a?(Association::Embedded::EmbedsMany)
|
|
78
78
|
attrs[association.key].each do |attr|
|
|
79
|
-
embedded_klass = if type = attr[
|
|
80
|
-
type.
|
|
79
|
+
embedded_klass = if type = attr[self.class.discriminator_key]
|
|
80
|
+
association.relation_class.get_discriminator_mapping(type) || association.relation_class
|
|
81
81
|
else
|
|
82
82
|
association.relation_class
|
|
83
83
|
end
|
|
@@ -33,7 +33,7 @@ module Mongoid
|
|
|
33
33
|
#
|
|
34
34
|
# A yet more more complex example is the following condition:
|
|
35
35
|
#
|
|
36
|
-
# Foo.
|
|
36
|
+
# Foo.geo_spatial(:boundary.intersects_point => [1, 10])
|
|
37
37
|
#
|
|
38
38
|
# Processing this condition will cause a Key instance to be created as
|
|
39
39
|
# follows:
|
|
@@ -237,9 +237,9 @@ module Mongoid
|
|
|
237
237
|
# Similarly, this method should never need to expand a literal value
|
|
238
238
|
# and an operator at the same time.
|
|
239
239
|
#
|
|
240
|
-
# @param [ Hash ] Criteria including Key instances.
|
|
240
|
+
# @param [ Hash ] expr Criteria including Key instances.
|
|
241
241
|
#
|
|
242
|
-
# @return [ Hash ]
|
|
242
|
+
# @return [ Hash ] The expanded criteria.
|
|
243
243
|
private def _mongoid_expand_keys(expr)
|
|
244
244
|
unless expr.is_a?(Hash)
|
|
245
245
|
raise ArgumentError, 'Argument must be a Hash'
|