mongoid 7.1.0.rc0 → 7.2.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +6 -6
- data/LICENSE +1 -1
- data/README.md +14 -7
- data/Rakefile +21 -0
- data/lib/config/locales/en.yml +42 -6
- data/lib/mongoid.rb +26 -2
- data/lib/mongoid/association/accessors.rb +37 -2
- data/lib/mongoid/association/depending.rb +1 -6
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -1
- data/lib/mongoid/association/embedded/embeds_one.rb +2 -1
- data/lib/mongoid/association/many.rb +5 -4
- data/lib/mongoid/association/proxy.rb +6 -4
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +38 -2
- data/lib/mongoid/association/referenced/eager.rb +29 -9
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +30 -15
- data/lib/mongoid/association/referenced/has_many/proxy.rb +11 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/atomic.rb +13 -3
- data/lib/mongoid/atomic/modifiers.rb +1 -1
- data/lib/mongoid/attributes.rb +28 -20
- data/lib/mongoid/attributes/dynamic.rb +1 -1
- data/lib/mongoid/clients/factory.rb +19 -2
- data/lib/mongoid/clients/options.rb +8 -8
- data/lib/mongoid/clients/sessions.rb +20 -4
- data/lib/mongoid/clients/storage_options.rb +5 -5
- data/lib/mongoid/composable.rb +1 -0
- data/lib/mongoid/config.rb +45 -12
- data/lib/mongoid/config/options.rb +5 -2
- data/lib/mongoid/contextual.rb +5 -4
- data/lib/mongoid/contextual/geo_near.rb +3 -2
- data/lib/mongoid/contextual/map_reduce.rb +3 -2
- data/lib/mongoid/contextual/mongo.rb +25 -5
- data/lib/mongoid/copyable.rb +2 -2
- data/lib/mongoid/criteria.rb +80 -11
- data/lib/mongoid/criteria/modifiable.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +12 -0
- data/lib/mongoid/criteria/queryable/key.rb +1 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +75 -8
- data/lib/mongoid/criteria/queryable/pipeline.rb +3 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +141 -19
- data/lib/mongoid/criteria/queryable/selector.rb +3 -3
- data/lib/mongoid/criteria/queryable/storable.rb +106 -101
- data/lib/mongoid/document.rb +15 -3
- data/lib/mongoid/errors.rb +7 -0
- data/lib/mongoid/errors/eager_load.rb +2 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
- data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_query.rb +41 -0
- data/lib/mongoid/errors/no_client_config.rb +2 -2
- data/lib/mongoid/errors/no_default_client.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +4 -2
- data/lib/mongoid/extensions/regexp.rb +1 -1
- data/lib/mongoid/factory.rb +27 -10
- data/lib/mongoid/fields.rb +2 -1
- data/lib/mongoid/fields/standard.rb +2 -1
- data/lib/mongoid/fields/validators/macro.rb +26 -10
- data/lib/mongoid/findable.rb +55 -18
- data/lib/mongoid/indexable.rb +2 -2
- data/lib/mongoid/interceptable.rb +5 -1
- data/lib/mongoid/matchable.rb +1 -149
- data/lib/mongoid/matcher.rb +127 -0
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/elem_match.rb +35 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +32 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +40 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +63 -0
- data/lib/mongoid/matcher/field_operator.rb +52 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/pushable.rb +11 -2
- data/lib/mongoid/persistence_context.rb +6 -6
- data/lib/mongoid/query_cache.rb +83 -38
- data/lib/mongoid/railties/database.rake +7 -0
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/serializable.rb +11 -3
- data/lib/mongoid/shardable.rb +56 -4
- data/lib/mongoid/tasks/database.rake +10 -5
- data/lib/mongoid/tasks/database.rb +83 -0
- data/lib/mongoid/timestamps/timeless.rb +3 -1
- data/lib/mongoid/traversable.rb +111 -4
- data/lib/mongoid/validatable/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +32 -23
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/spec/integration/app_spec.rb +254 -0
- data/spec/integration/associations/embedded_spec.rb +148 -0
- data/spec/integration/associations/has_many_spec.rb +69 -0
- data/spec/integration/associations/has_one_spec.rb +69 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
- data/spec/integration/atomic/modifiers_spec.rb +117 -0
- data/spec/integration/bson_regexp_raw_spec.rb +20 -0
- data/spec/integration/criteria/date_field_spec.rb +41 -0
- data/spec/integration/criteria/logical_spec.rb +13 -0
- data/spec/integration/discriminator_key_spec.rb +354 -0
- data/spec/integration/discriminator_value_spec.rb +207 -0
- data/spec/integration/document_spec.rb +22 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +363 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +16 -0
- data/spec/integration/matcher_operator_data/in.yml +194 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_spec.rb +100 -0
- data/spec/integration/matcher_spec.rb +189 -0
- data/spec/integration/server_query_spec.rb +142 -0
- data/spec/integration/shardable_spec.rb +149 -0
- data/spec/lite_spec_helper.rb +15 -4
- data/spec/mongoid/association/accessors_spec.rb +238 -63
- data/spec/mongoid/association/depending_spec.rb +78 -26
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +33 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +20 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +10 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -2
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +193 -10
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +140 -1
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +146 -68
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +462 -187
- data/spec/mongoid/association/referenced/has_many_models.rb +9 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +9 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
- data/spec/mongoid/atomic_spec.rb +23 -0
- data/spec/mongoid/attributes/nested_spec.rb +1 -1
- data/spec/mongoid/attributes_spec.rb +19 -7
- data/spec/mongoid/changeable_spec.rb +23 -0
- data/spec/mongoid/clients/factory_spec.rb +45 -8
- data/spec/mongoid/clients/options_spec.rb +11 -11
- data/spec/mongoid/clients/sessions_spec.rb +9 -10
- data/spec/mongoid/clients/transactions_spec.rb +20 -8
- data/spec/mongoid/clients_spec.rb +2 -2
- data/spec/mongoid/config_spec.rb +28 -0
- data/spec/mongoid/contextual/atomic_spec.rb +22 -11
- data/spec/mongoid/contextual/geo_near_spec.rb +11 -2
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -5
- data/spec/mongoid/contextual/mongo_spec.rb +146 -69
- data/spec/mongoid/copyable_spec.rb +153 -1
- data/spec/mongoid/copyable_spec_models.rb +14 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +19 -7
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +28 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +45 -12
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1051 -392
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +136 -82
- data/spec/mongoid/criteria/queryable/storable_spec.rb +80 -2
- data/spec/mongoid/criteria_spec.rb +240 -41
- data/spec/mongoid/document_fields_spec.rb +29 -0
- data/spec/mongoid/document_persistence_context_spec.rb +33 -0
- data/spec/mongoid/document_spec.rb +89 -15
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -3
- data/spec/mongoid/factory_spec.rb +261 -28
- data/spec/mongoid/fields_spec.rb +72 -3
- data/spec/mongoid/findable_spec.rb +32 -0
- data/spec/mongoid/indexable_spec.rb +34 -6
- data/spec/mongoid/inspectable_spec.rb +29 -2
- data/spec/mongoid/interceptable_spec.rb +64 -2
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +259 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +47 -0
- data/spec/mongoid/persistable/creatable_spec.rb +108 -25
- data/spec/mongoid/persistable/deletable_spec.rb +86 -0
- data/spec/mongoid/persistable/pushable_spec.rb +55 -1
- data/spec/mongoid/persistable/savable_spec.rb +174 -16
- data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
- data/spec/mongoid/query_cache_spec.rb +498 -29
- data/spec/mongoid/relations/proxy_spec.rb +1 -1
- data/spec/mongoid/reloadable_spec.rb +72 -0
- data/spec/mongoid/scopable_spec.rb +2 -1
- data/spec/mongoid/serializable_spec.rb +149 -20
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +69 -16
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +1 -1
- data/spec/mongoid/traversable_spec.rb +1100 -0
- data/spec/spec_helper.rb +4 -33
- data/spec/support/child_process_helper.rb +79 -0
- data/spec/support/cluster_config.rb +3 -3
- data/spec/support/constraints.rb +50 -10
- data/spec/support/expectations.rb +3 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/lite_constraints.rb +22 -0
- data/spec/{app → support}/models/account.rb +0 -0
- data/spec/{app → support}/models/acolyte.rb +0 -0
- data/spec/{app → support}/models/actor.rb +1 -1
- data/spec/{app → support}/models/actress.rb +0 -0
- data/spec/{app → support}/models/address.rb +0 -0
- data/spec/{app → support}/models/address_component.rb +0 -0
- data/spec/{app → support}/models/address_number.rb +0 -0
- data/spec/{app → support}/models/agency.rb +0 -0
- data/spec/{app → support}/models/agent.rb +0 -0
- data/spec/{app → support}/models/album.rb +0 -0
- data/spec/{app → support}/models/alert.rb +0 -0
- data/spec/{app → support}/models/animal.rb +0 -0
- data/spec/{app → support}/models/answer.rb +0 -0
- data/spec/{app → support}/models/appointment.rb +0 -0
- data/spec/support/models/armrest.rb +10 -0
- data/spec/{app → support}/models/array_field.rb +0 -0
- data/spec/{app → support}/models/article.rb +0 -0
- data/spec/{app → support}/models/artist.rb +0 -0
- data/spec/{app → support}/models/artwork.rb +0 -0
- data/spec/{app → support}/models/audio.rb +0 -0
- data/spec/{app → support}/models/augmentation.rb +0 -0
- data/spec/{app → support}/models/author.rb +0 -0
- data/spec/{app → support}/models/baby.rb +0 -0
- data/spec/{app → support}/models/band.rb +0 -0
- data/spec/{app → support}/models/bar.rb +0 -0
- data/spec/{app → support}/models/basic.rb +0 -0
- data/spec/{app → support}/models/bed.rb +0 -0
- data/spec/{app → support}/models/big_palette.rb +0 -0
- data/spec/{app → support}/models/birthday.rb +0 -0
- data/spec/{app → support}/models/bomb.rb +0 -0
- data/spec/{app → support}/models/book.rb +0 -0
- data/spec/{app → support}/models/breed.rb +0 -0
- data/spec/{app → support}/models/browser.rb +1 -1
- data/spec/{app → support}/models/building.rb +0 -0
- data/spec/{app → support}/models/building_address.rb +0 -0
- data/spec/{app → support}/models/bus.rb +0 -0
- data/spec/{app → support}/models/business.rb +0 -0
- data/spec/{app → support}/models/callback_test.rb +0 -0
- data/spec/{app → support}/models/canvas.rb +1 -1
- data/spec/{app → support}/models/car.rb +0 -0
- data/spec/{app → support}/models/cat.rb +0 -0
- data/spec/{app → support}/models/category.rb +0 -0
- data/spec/{app → support}/models/child.rb +0 -0
- data/spec/{app → support}/models/child_doc.rb +0 -0
- data/spec/{app → support}/models/church.rb +0 -0
- data/spec/{app → support}/models/circle.rb +0 -0
- data/spec/{app → support}/models/circuit.rb +0 -0
- data/spec/{app → support}/models/circus.rb +0 -0
- data/spec/{app → support}/models/code.rb +0 -0
- data/spec/support/models/coding.rb +4 -0
- data/spec/support/models/coding/pull_request.rb +12 -0
- data/spec/{app → support}/models/comment.rb +0 -0
- data/spec/{app → support}/models/company.rb +0 -0
- data/spec/{app → support}/models/consumption_period.rb +0 -0
- data/spec/{app → support}/models/contextable_item.rb +0 -0
- data/spec/{app → support}/models/contractor.rb +0 -0
- data/spec/{app → support}/models/cookie.rb +0 -0
- data/spec/{app → support}/models/country_code.rb +0 -0
- data/spec/{app → support}/models/courier_job.rb +0 -0
- data/spec/support/models/crate.rb +13 -0
- data/spec/support/models/deed.rb +8 -0
- data/spec/{app → support}/models/definition.rb +0 -0
- data/spec/support/models/delegating_patient.rb +16 -0
- data/spec/{app → support}/models/description.rb +0 -0
- data/spec/{app → support}/models/dictionary.rb +0 -0
- data/spec/{app → support}/models/division.rb +0 -0
- data/spec/{app → support}/models/doctor.rb +0 -0
- data/spec/{app → support}/models/dog.rb +0 -0
- data/spec/{app → support}/models/dokument.rb +0 -0
- data/spec/{app → support}/models/draft.rb +0 -0
- data/spec/{app → support}/models/dragon.rb +0 -0
- data/spec/{app → support}/models/driver.rb +1 -1
- data/spec/{app → support}/models/drug.rb +0 -0
- data/spec/{app → support}/models/dungeon.rb +0 -0
- data/spec/{app → support}/models/edit.rb +0 -0
- data/spec/{app → support}/models/email.rb +0 -0
- data/spec/{app → support}/models/employer.rb +0 -0
- data/spec/{app → support}/models/entry.rb +0 -0
- data/spec/{app → support}/models/eraser.rb +0 -0
- data/spec/{app → support}/models/even.rb +0 -0
- data/spec/{app → support}/models/event.rb +0 -0
- data/spec/{app → support}/models/exhibition.rb +0 -0
- data/spec/{app → support}/models/exhibitor.rb +0 -0
- data/spec/{app → support}/models/explosion.rb +0 -0
- data/spec/{app → support}/models/eye.rb +0 -0
- data/spec/{app → support}/models/eye_bowl.rb +0 -0
- data/spec/{app → support}/models/face.rb +0 -0
- data/spec/{app → support}/models/favorite.rb +0 -0
- data/spec/{app → support}/models/filesystem.rb +0 -0
- data/spec/{app → support}/models/fire_hydrant.rb +0 -0
- data/spec/{app → support}/models/firefox.rb +0 -0
- data/spec/{app → support}/models/fish.rb +0 -0
- data/spec/{app → support}/models/folder.rb +0 -0
- data/spec/{app → support}/models/folder_item.rb +0 -0
- data/spec/{app → support}/models/fruits.rb +0 -0
- data/spec/{app → support}/models/game.rb +0 -0
- data/spec/{app → support}/models/ghost.rb +0 -0
- data/spec/support/models/guitar.rb +5 -0
- data/spec/{app → support}/models/home.rb +0 -0
- data/spec/{app → support}/models/house.rb +0 -0
- data/spec/{app → support}/models/html_writer.rb +0 -0
- data/spec/{app → support}/models/id_key.rb +0 -0
- data/spec/support/models/idnodef.rb +8 -0
- data/spec/{app → support}/models/image.rb +0 -0
- data/spec/{app → support}/models/implant.rb +0 -0
- data/spec/support/models/instrument.rb +9 -0
- data/spec/{app → support}/models/item.rb +1 -1
- data/spec/{app → support}/models/jar.rb +0 -0
- data/spec/{app → support}/models/kaleidoscope.rb +0 -0
- data/spec/{app → support}/models/kangaroo.rb +0 -0
- data/spec/{app → support}/models/label.rb +0 -0
- data/spec/{app → support}/models/language.rb +0 -0
- data/spec/{app → support}/models/lat_lng.rb +0 -0
- data/spec/{app → support}/models/league.rb +0 -0
- data/spec/{app → support}/models/learner.rb +0 -0
- data/spec/{app → support}/models/line_item.rb +0 -0
- data/spec/{app → support}/models/location.rb +0 -0
- data/spec/{app → support}/models/login.rb +0 -0
- data/spec/{app → support}/models/manufacturer.rb +0 -0
- data/spec/{app → support}/models/meat.rb +0 -0
- data/spec/{app → support}/models/membership.rb +0 -0
- data/spec/{app → support}/models/message.rb +0 -0
- data/spec/{app → support}/models/minim.rb +0 -0
- data/spec/{app → support}/models/mixed_drink.rb +0 -0
- data/spec/support/models/mop.rb +16 -0
- data/spec/{app → support}/models/movie.rb +0 -0
- data/spec/{app → support}/models/my_hash.rb +0 -0
- data/spec/{app → support}/models/name.rb +0 -0
- data/spec/{app → support}/models/name_only.rb +0 -0
- data/spec/{app → support}/models/node.rb +0 -0
- data/spec/{app → support}/models/note.rb +0 -0
- data/spec/{app → support}/models/odd.rb +0 -0
- data/spec/{app → support}/models/ordered_post.rb +0 -0
- data/spec/{app → support}/models/ordered_preference.rb +0 -0
- data/spec/{app → support}/models/oscar.rb +0 -0
- data/spec/{app → support}/models/other_owner_object.rb +0 -0
- data/spec/{app → support}/models/override.rb +0 -0
- data/spec/{app → support}/models/ownable.rb +0 -0
- data/spec/{app → support}/models/owner.rb +2 -0
- data/spec/{app → support}/models/pack.rb +0 -0
- data/spec/{app → support}/models/page.rb +0 -0
- data/spec/{app → support}/models/page_question.rb +0 -0
- data/spec/{app → support}/models/palette.rb +1 -1
- data/spec/{app → support}/models/parent.rb +0 -0
- data/spec/{app → support}/models/parent_doc.rb +0 -0
- data/spec/{app → support}/models/passport.rb +1 -0
- data/spec/{app → support}/models/patient.rb +0 -0
- data/spec/{app → support}/models/pdf_writer.rb +0 -0
- data/spec/{app → support}/models/pencil.rb +0 -0
- data/spec/{app → support}/models/person.rb +1 -1
- data/spec/{app → support}/models/pet.rb +0 -0
- data/spec/{app → support}/models/pet_owner.rb +0 -0
- data/spec/{app → support}/models/phone.rb +1 -0
- data/spec/support/models/piano.rb +5 -0
- data/spec/{app → support}/models/pizza.rb +0 -0
- data/spec/{app → support}/models/player.rb +0 -0
- data/spec/{app → support}/models/post.rb +0 -0
- data/spec/{app → support}/models/post_genre.rb +0 -0
- data/spec/{app → support}/models/powerup.rb +0 -0
- data/spec/{app → support}/models/preference.rb +0 -0
- data/spec/{app → support}/models/princess.rb +0 -0
- data/spec/{app → support}/models/product.rb +0 -0
- data/spec/support/models/profile.rb +18 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -0
- data/spec/{app → support}/models/pub.rb +0 -0
- data/spec/support/models/publication.rb +5 -0
- data/spec/support/models/publication/encyclopedia.rb +12 -0
- data/spec/support/models/publication/review.rb +14 -0
- data/spec/{app → support}/models/purchase.rb +0 -0
- data/spec/{app → support}/models/question.rb +0 -0
- data/spec/{app → support}/models/quiz.rb +0 -0
- data/spec/{app → support}/models/rating.rb +0 -0
- data/spec/{app → support}/models/record.rb +0 -0
- data/spec/{app → support}/models/registry.rb +0 -0
- data/spec/{app → support}/models/role.rb +0 -0
- data/spec/{app → support}/models/root_category.rb +0 -0
- data/spec/{app → support}/models/sandwich.rb +0 -0
- data/spec/{app → support}/models/scheduler.rb +0 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
- data/spec/support/models/seat.rb +25 -0
- data/spec/{app → support}/models/seo.rb +0 -0
- data/spec/{app → support}/models/series.rb +0 -0
- data/spec/{app → support}/models/server.rb +0 -0
- data/spec/{app → support}/models/service.rb +0 -0
- data/spec/{app → support}/models/shape.rb +2 -2
- data/spec/{app → support}/models/shelf.rb +0 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -0
- data/spec/{app → support}/models/shipping_container.rb +0 -0
- data/spec/{app → support}/models/shipping_pack.rb +0 -0
- data/spec/{app → support}/models/shop.rb +0 -0
- data/spec/{app → support}/models/short_agent.rb +0 -0
- data/spec/{app → support}/models/short_quiz.rb +0 -0
- data/spec/{app → support}/models/simple.rb +0 -0
- data/spec/{app → support}/models/slave.rb +0 -0
- data/spec/{app → support}/models/song.rb +0 -0
- data/spec/{app → support}/models/sound.rb +0 -0
- data/spec/{app → support}/models/square.rb +0 -0
- data/spec/{app → support}/models/staff.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- data/spec/{app → support}/models/strategy.rb +0 -0
- data/spec/{app → support}/models/sub_item.rb +0 -0
- data/spec/{app → support}/models/subscription.rb +0 -0
- data/spec/{app → support}/models/survey.rb +0 -0
- data/spec/{app → support}/models/symptom.rb +0 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -0
- data/spec/{app → support}/models/target.rb +0 -0
- data/spec/{app → support}/models/template.rb +0 -0
- data/spec/{app → support}/models/thing.rb +0 -0
- data/spec/{app → support}/models/title.rb +0 -0
- data/spec/{app → support}/models/tool.rb +2 -2
- data/spec/{app → support}/models/topping.rb +0 -0
- data/spec/support/models/toy.rb +10 -0
- data/spec/{app → support}/models/track.rb +0 -0
- data/spec/{app → support}/models/translation.rb +0 -0
- data/spec/{app → support}/models/tree.rb +0 -0
- data/spec/{app → support}/models/truck.rb +2 -0
- data/spec/{app → support}/models/updatable.rb +0 -0
- data/spec/{app → support}/models/user.rb +0 -0
- data/spec/{app → support}/models/user_account.rb +0 -0
- data/spec/{app → support}/models/validation_callback.rb +0 -0
- data/spec/{app → support}/models/vehicle.rb +7 -2
- data/spec/{app → support}/models/version.rb +0 -0
- data/spec/{app → support}/models/vertex.rb +0 -0
- data/spec/{app → support}/models/vet_visit.rb +0 -0
- data/spec/{app → support}/models/video.rb +0 -0
- data/spec/{app → support}/models/video_game.rb +0 -0
- data/spec/{app → support}/models/weapon.rb +0 -0
- data/spec/{app → support}/models/wiki_page.rb +0 -0
- data/spec/{app → support}/models/word.rb +0 -0
- data/spec/{app → support}/models/word_origin.rb +0 -0
- data/spec/{app → support}/models/writer.rb +2 -2
- data/spec/support/session_registry.rb +50 -0
- data/spec/support/spec_config.rb +13 -5
- data/spec/support/spec_organizer.rb +130 -0
- metadata +882 -752
- metadata.gz.sig +0 -0
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/spec/mongoid/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
@@ -41,12 +41,20 @@ module Mongoid
|
|
41
41
|
#
|
42
42
|
# @since 6.4.0
|
43
43
|
def with_session(options = {})
|
44
|
-
|
44
|
+
if Threaded.get_session
|
45
|
+
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_nesting)
|
46
|
+
end
|
45
47
|
session = persistence_context.client.start_session(options)
|
46
48
|
Threaded.set_session(session)
|
47
49
|
yield(session)
|
48
50
|
rescue Mongo::Error::InvalidSession => ex
|
49
|
-
if
|
51
|
+
if
|
52
|
+
# Driver 2.13.0+
|
53
|
+
defined?(Mongo::Error::SessionsNotSupported) &&
|
54
|
+
Mongo::Error::SessionsNotSupported === ex ||
|
55
|
+
# Legacy drivers
|
56
|
+
ex.message == Mongo::Session::SESSIONS_NOT_SUPPORTED
|
57
|
+
then
|
50
58
|
raise Mongoid::Errors::InvalidSessionUse.new(:sessions_not_supported)
|
51
59
|
end
|
52
60
|
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_use)
|
@@ -92,12 +100,20 @@ module Mongoid
|
|
92
100
|
#
|
93
101
|
# @since 6.4.0
|
94
102
|
def with_session(options = {})
|
95
|
-
|
103
|
+
if Threaded.get_session
|
104
|
+
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_nesting)
|
105
|
+
end
|
96
106
|
session = persistence_context.client.start_session(options)
|
97
107
|
Threaded.set_session(session)
|
98
108
|
yield(session)
|
99
109
|
rescue Mongo::Error::InvalidSession => ex
|
100
|
-
if
|
110
|
+
if
|
111
|
+
# Driver 2.13.0+
|
112
|
+
defined?(Mongo::Error::SessionsNotSupported) &&
|
113
|
+
Mongo::Error::SessionsNotSupported === ex ||
|
114
|
+
# Legacy drivers
|
115
|
+
ex.message == Mongo::Session::SESSIONS_NOT_SUPPORTED
|
116
|
+
then
|
101
117
|
raise Mongoid::Errors::InvalidSessionUse.new(:sessions_not_supported)
|
102
118
|
end
|
103
119
|
raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_use)
|
@@ -32,20 +32,20 @@ module Mongoid
|
|
32
32
|
# @example Store this model by default in a different client.
|
33
33
|
# class Band
|
34
34
|
# include Mongoid::Document
|
35
|
-
# store_in client: "
|
35
|
+
# store_in client: "analytics"
|
36
36
|
# end
|
37
37
|
#
|
38
38
|
# @example Store this model with a combination of options.
|
39
39
|
# class Band
|
40
40
|
# include Mongoid::Document
|
41
|
-
# store_in collection: "artists", database: "
|
41
|
+
# store_in collection: "artists", database: "music"
|
42
42
|
# end
|
43
43
|
#
|
44
44
|
# @param [ Hash ] options The storage options.
|
45
45
|
#
|
46
|
-
# @option options [ String
|
47
|
-
# @option options [ String
|
48
|
-
# @option options [ String
|
46
|
+
# @option options [ String | Symbol ] :collection The collection name.
|
47
|
+
# @option options [ String | Symbol ] :database The database name.
|
48
|
+
# @option options [ String | Symbol ] :client The client name.
|
49
49
|
#
|
50
50
|
# @return [ Class ] The model class.
|
51
51
|
#
|
data/lib/mongoid/composable.rb
CHANGED
data/lib/mongoid/config.rb
CHANGED
@@ -10,22 +10,42 @@ module Mongoid
|
|
10
10
|
# This module defines all the configuration options for Mongoid, including
|
11
11
|
# the database connections.
|
12
12
|
module Config
|
13
|
-
extend
|
13
|
+
extend Forwardable
|
14
14
|
extend Options
|
15
|
+
extend self
|
15
16
|
|
16
|
-
|
17
|
-
delegate :logger, to: ::Mongoid
|
17
|
+
def_delegators ::Mongoid, :logger, :logger=
|
18
18
|
|
19
19
|
LOCK = Mutex.new
|
20
20
|
|
21
|
+
# Application name that is printed to the mongodb logs upon establishing
|
22
|
+
# a connection in server versions >= 3.4. Note that the name cannot
|
23
|
+
# exceed 128 bytes. It is also used as the database name if the
|
24
|
+
# database name is not explicitly defined.
|
25
|
+
option :app_name, default: nil
|
26
|
+
|
27
|
+
# Create indexes in background by default.
|
28
|
+
option :background_indexing, default: false
|
29
|
+
|
30
|
+
# Mark belongs_to associations as required by default, so that saving a
|
31
|
+
# model with a missing belongs_to association will trigger a validation
|
32
|
+
# error.
|
33
|
+
option :belongs_to_required_by_default, default: true
|
34
|
+
|
35
|
+
# Set the global discriminator key.
|
36
|
+
option :discriminator_key, default: "_type"
|
37
|
+
|
38
|
+
# Raise an exception when a field is redefined.
|
39
|
+
option :duplicate_fields_exception, default: false
|
40
|
+
|
41
|
+
# Include the root model name in json serialization.
|
21
42
|
option :include_root_in_json, default: false
|
43
|
+
|
44
|
+
# # Include the _type field in serialization.
|
22
45
|
option :include_type_for_serialization, default: false
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
option :duplicate_fields_exception, default: false
|
27
|
-
option :use_activesupport_time_zone, default: true
|
28
|
-
option :use_utc, default: false
|
46
|
+
|
47
|
+
# Whether to join nested persistence contexts for atomic operations
|
48
|
+
# to parent contexts by default.
|
29
49
|
option :join_contexts, default: false
|
30
50
|
|
31
51
|
# The log level.
|
@@ -38,9 +58,22 @@ module Mongoid
|
|
38
58
|
# configuration file is the log level given by this option honored.
|
39
59
|
option :log_level, default: :info
|
40
60
|
|
41
|
-
|
42
|
-
option :
|
43
|
-
|
61
|
+
# Preload all models in development, needed when models use inheritance.
|
62
|
+
option :preload_models, default: false
|
63
|
+
|
64
|
+
# Raise an error when performing a #find and the document is not found.
|
65
|
+
option :raise_not_found_error, default: true
|
66
|
+
|
67
|
+
# Raise an error when defining a scope with the same name as an
|
68
|
+
# existing method.
|
69
|
+
option :scope_overwrite_exception, default: false
|
70
|
+
|
71
|
+
# Use ActiveSupport's time zone in time operations instead of the
|
72
|
+
# Ruby default time zone.
|
73
|
+
option :use_activesupport_time_zone, default: true
|
74
|
+
|
75
|
+
# Return stored times as UTC.
|
76
|
+
option :use_utc, default: false
|
44
77
|
|
45
78
|
# Has Mongoid been configured? This is checking that at least a valid
|
46
79
|
# client config exists.
|
@@ -34,8 +34,11 @@ module Mongoid
|
|
34
34
|
defaults[name] = settings[name] = options[:default]
|
35
35
|
|
36
36
|
class_eval do
|
37
|
-
|
38
|
-
|
37
|
+
# log_level accessor is defined specially below
|
38
|
+
unless name.to_sym == :log_level
|
39
|
+
define_method(name) do
|
40
|
+
settings[name]
|
41
|
+
end
|
39
42
|
end
|
40
43
|
|
41
44
|
define_method("#{name}=") do |value|
|
data/lib/mongoid/contextual.rb
CHANGED
@@ -8,21 +8,22 @@ require "mongoid/contextual/none"
|
|
8
8
|
|
9
9
|
module Mongoid
|
10
10
|
module Contextual
|
11
|
+
extend Forwardable
|
11
12
|
|
12
13
|
# The aggregate operations provided in the aggregate module get delegated
|
13
14
|
# through to the context from the criteria.
|
14
|
-
|
15
|
+
def_delegators :context, *Aggregable::Mongo.public_instance_methods(false)
|
15
16
|
|
16
17
|
# The atomic operations provided in the atomic context get delegated
|
17
18
|
# through to the context from the criteria.
|
18
|
-
|
19
|
+
def_delegators :context, *Atomic.public_instance_methods(false)
|
19
20
|
|
20
21
|
# The methods in the contexts themselves should all get delegated to,
|
21
22
|
# including destructive, modification, and optional methods.
|
22
|
-
|
23
|
+
def_delegators :context, *(Mongo.public_instance_methods(false) - [ :skip, :limit ])
|
23
24
|
|
24
25
|
# This gets blank and empty included.
|
25
|
-
|
26
|
+
def_delegators :context, *Queryable.public_instance_methods(false)
|
26
27
|
|
27
28
|
# Get the context in which criteria queries should execute. This is either
|
28
29
|
# in memory (for embedded documents) or mongo (for root level documents.)
|
@@ -4,11 +4,12 @@
|
|
4
4
|
module Mongoid
|
5
5
|
module Contextual
|
6
6
|
class GeoNear
|
7
|
+
extend Forwardable
|
7
8
|
include Enumerable
|
8
9
|
include Command
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
def_delegator :results, :[]
|
12
|
+
def_delegators :entries, :==, :empty?
|
12
13
|
|
13
14
|
# Get the average distance for all documents from the point in the
|
14
15
|
# command.
|
@@ -4,11 +4,12 @@
|
|
4
4
|
module Mongoid
|
5
5
|
module Contextual
|
6
6
|
class MapReduce
|
7
|
+
extend Forwardable
|
7
8
|
include Enumerable
|
8
9
|
include Command
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
def_delegators :results, :[]
|
12
|
+
def_delegators :entries, :==, :empty?
|
12
13
|
|
13
14
|
# Get all the counts returned by the map/reduce.
|
14
15
|
#
|
@@ -11,6 +11,7 @@ require "mongoid/association/eager_loadable"
|
|
11
11
|
module Mongoid
|
12
12
|
module Contextual
|
13
13
|
class Mongo
|
14
|
+
extend Forwardable
|
14
15
|
include Enumerable
|
15
16
|
include Aggregable::Mongo
|
16
17
|
include Atomic
|
@@ -70,7 +71,26 @@ module Mongoid
|
|
70
71
|
# @since 3.0.0
|
71
72
|
def count(options = {}, &block)
|
72
73
|
return super(&block) if block_given?
|
73
|
-
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) }
|
74
94
|
end
|
75
95
|
|
76
96
|
# Delete all documents in the database that match the selector.
|
@@ -257,12 +277,12 @@ module Mongoid
|
|
257
277
|
return documents.first if cached? && cache_loaded?
|
258
278
|
try_cache(:first) do
|
259
279
|
if sort = view.sort || ({ _id: 1 } unless opts[:id_sort] == :none)
|
260
|
-
if raw_doc = view.sort(sort).limit(
|
280
|
+
if raw_doc = view.sort(sort).limit(1).first
|
261
281
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
262
282
|
eager_load([doc]).first
|
263
283
|
end
|
264
284
|
else
|
265
|
-
if raw_doc = view.limit(
|
285
|
+
if raw_doc = view.limit(1).first
|
266
286
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
267
287
|
eager_load([doc]).first
|
268
288
|
end
|
@@ -349,7 +369,7 @@ module Mongoid
|
|
349
369
|
apply_options
|
350
370
|
end
|
351
371
|
|
352
|
-
|
372
|
+
def_delegator :@klass, :database_field_name
|
353
373
|
|
354
374
|
# Get the last document in the database for the criteria's selector.
|
355
375
|
#
|
@@ -371,7 +391,7 @@ module Mongoid
|
|
371
391
|
def last(opts = {})
|
372
392
|
try_cache(:last) do
|
373
393
|
with_inverse_sorting(opts) do
|
374
|
-
if raw_doc = view.limit(
|
394
|
+
if raw_doc = view.limit(1).first
|
375
395
|
doc = Factory.from_db(klass, raw_doc, criteria)
|
376
396
|
eager_load([doc]).first
|
377
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
|
data/lib/mongoid/criteria.rb
CHANGED
@@ -20,9 +20,17 @@ module Mongoid
|
|
20
20
|
# against the database.
|
21
21
|
class Criteria
|
22
22
|
include Enumerable
|
23
|
+
|
24
|
+
# @api private
|
25
|
+
alias :_enumerable_find :find
|
26
|
+
|
23
27
|
include Contextual
|
24
28
|
include Queryable
|
25
29
|
include Findable
|
30
|
+
|
31
|
+
# @api private
|
32
|
+
alias :_findable_find :find
|
33
|
+
|
26
34
|
include Inspectable
|
27
35
|
include Includable
|
28
36
|
include Marshalable
|
@@ -55,6 +63,48 @@ module Mongoid
|
|
55
63
|
entries == other
|
56
64
|
end
|
57
65
|
|
66
|
+
# Finds one or many documents given the provided _id values, or filters
|
67
|
+
# the documents in the current scope in the application process space
|
68
|
+
# after loading them if needed.
|
69
|
+
#
|
70
|
+
# If this method is not given a block, it delegates to +Findable#find+
|
71
|
+
# and finds one or many documents for the provided _id values.
|
72
|
+
#
|
73
|
+
# If this method is given a block, it delegates to +Enumerable#find+ and
|
74
|
+
# returns the first document of those found by the current Crieria object
|
75
|
+
# for which the block returns a truthy value.
|
76
|
+
#
|
77
|
+
# Note that the "default proc" argument of Enumerable is not specially
|
78
|
+
# treated by Mongoid - the decision between delegating to +Findable+ vs
|
79
|
+
# +Enumerable+ is made solely based on whether +find+ is passed a block.
|
80
|
+
#
|
81
|
+
# @example Finds a document by its _id, invokes Findable#find.
|
82
|
+
# critera.find("1234")
|
83
|
+
#
|
84
|
+
# @example Finds the first matching document using a block, invokes Enumerable#find.
|
85
|
+
# criteria.find { |item| item.name == "Depeche Mode" }
|
86
|
+
#
|
87
|
+
# @example Finds the first matching document using a block using the default Proc, invokes Enumerable#find.
|
88
|
+
# criteria.find(-> { "Default Band" }) { |item| item.name == "Milwaukee Mode" }
|
89
|
+
#
|
90
|
+
# @example Tries to find a document whose _id is the stringification of the provided Proc, typically failing.
|
91
|
+
# enumerator = criteria.find(-> { "Default Band" })
|
92
|
+
#
|
93
|
+
# @return [ Document | Array<Document> | nil ] A document or matching documents.
|
94
|
+
#
|
95
|
+
# @raise Errors::DocumentNotFound If the parameters were _id values and
|
96
|
+
# not all documents are found and the +raise_not_found_error+
|
97
|
+
# Mongoid configuration option is truthy.
|
98
|
+
#
|
99
|
+
# @see https://ruby-doc.org/core/Enumerable.html#method-i-find
|
100
|
+
def find(*args, &block)
|
101
|
+
if block_given?
|
102
|
+
_enumerable_find(*args, &block)
|
103
|
+
else
|
104
|
+
_findable_find(*args)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
58
108
|
# Needed to properly get a criteria back as json
|
59
109
|
#
|
60
110
|
# @example Get the criteria as json.
|
@@ -169,7 +219,7 @@ module Mongoid
|
|
169
219
|
# @since 2.0.0
|
170
220
|
def field_list
|
171
221
|
if options[:fields]
|
172
|
-
options[:fields].keys.reject{ |key| key ==
|
222
|
+
options[:fields].keys.reject{ |key| key == klass.discriminator_key }
|
173
223
|
else
|
174
224
|
[]
|
175
225
|
end
|
@@ -292,7 +342,7 @@ module Mongoid
|
|
292
342
|
args.unshift(:_id)
|
293
343
|
end
|
294
344
|
if klass.hereditary?
|
295
|
-
super(*args.push(
|
345
|
+
super(*args.push(klass.discriminator_key.to_sym))
|
296
346
|
else
|
297
347
|
super(*args)
|
298
348
|
end
|
@@ -379,7 +429,7 @@ module Mongoid
|
|
379
429
|
#
|
380
430
|
# @return [ Criteria ] The cloned criteria.
|
381
431
|
def type(types)
|
382
|
-
any_in(
|
432
|
+
any_in(self.discriminator_key.to_sym => Array(types))
|
383
433
|
end
|
384
434
|
|
385
435
|
# This is the general entry point for most MongoDB queries. This either
|
@@ -400,9 +450,22 @@ module Mongoid
|
|
400
450
|
# @return [ Criteria ] The cloned selectable.
|
401
451
|
#
|
402
452
|
# @since 1.0.0
|
403
|
-
def where(
|
404
|
-
|
405
|
-
|
453
|
+
def where(*args)
|
454
|
+
# Historically this method required exactly one argument.
|
455
|
+
# As of https://jira.mongodb.org/browse/MONGOID-4804 it also accepts
|
456
|
+
# zero arguments.
|
457
|
+
# The underlying where implemetation that super invokes supports
|
458
|
+
# any number of arguments, but we don't presently allow mutiple
|
459
|
+
# arguments through this method. This API can be reconsidered in the
|
460
|
+
# future.
|
461
|
+
if args.length > 1
|
462
|
+
raise ArgumentError, "Criteria#where requires zero or one arguments (given #{args.length})"
|
463
|
+
end
|
464
|
+
if args.length == 1
|
465
|
+
expression = args.first
|
466
|
+
if expression.is_a?(::String) && embedded?
|
467
|
+
raise Errors::UnsupportedJavascript.new(klass, expression)
|
468
|
+
end
|
406
469
|
end
|
407
470
|
super
|
408
471
|
end
|
@@ -437,7 +500,13 @@ module Mongoid
|
|
437
500
|
#
|
438
501
|
# @since 3.1.0
|
439
502
|
def for_js(javascript, scope = {})
|
440
|
-
|
503
|
+
code = if scope.empty?
|
504
|
+
# CodeWithScope is not supported for $where as of MongoDB 4.4
|
505
|
+
BSON::Code.new(javascript)
|
506
|
+
else
|
507
|
+
BSON::CodeWithScope.new(javascript, scope)
|
508
|
+
end
|
509
|
+
js_query(code)
|
441
510
|
end
|
442
511
|
|
443
512
|
private
|
@@ -536,8 +605,8 @@ module Mongoid
|
|
536
605
|
# @since 3.0.3
|
537
606
|
def type_selectable?
|
538
607
|
klass.hereditary? &&
|
539
|
-
!selector.keys.include?(
|
540
|
-
!selector.keys.include?(
|
608
|
+
!selector.keys.include?(self.discriminator_key) &&
|
609
|
+
!selector.keys.include?(self.discriminator_key.to_sym)
|
541
610
|
end
|
542
611
|
|
543
612
|
# Get the selector for type selection.
|
@@ -553,9 +622,9 @@ module Mongoid
|
|
553
622
|
def type_selection
|
554
623
|
klasses = klass._types
|
555
624
|
if klasses.size > 1
|
556
|
-
{
|
625
|
+
{ klass.discriminator_key.to_sym => { "$in" => klass._types }}
|
557
626
|
else
|
558
|
-
{
|
627
|
+
{ klass.discriminator_key.to_sym => klass._types[0] }
|
559
628
|
end
|
560
629
|
end
|
561
630
|
|