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
@@ -84,16 +84,16 @@ module Mongoid
|
|
84
84
|
# Evolves a multi-list selection, like an $and or $or criterion, and
|
85
85
|
# performs the necessary serialization.
|
86
86
|
#
|
87
|
-
# @api private
|
88
|
-
#
|
89
87
|
# @example Evolve the multi-selection.
|
90
88
|
# selector.evolve_multi([{ field: "value" }])
|
91
89
|
#
|
92
|
-
# @param [ Array<Hash> ]
|
90
|
+
# @param [ Array<Hash> ] specs The multi-selection.
|
93
91
|
#
|
94
92
|
# @return [ Array<Hash> ] The serialized values.
|
95
93
|
#
|
96
94
|
# @since 1.0.0
|
95
|
+
#
|
96
|
+
# @api private
|
97
97
|
def evolve_multi(specs)
|
98
98
|
unless specs.is_a?(Array)
|
99
99
|
raise ArgumentError, "specs is not an array: #{specs.inspect}"
|
@@ -17,67 +17,49 @@ module Mongoid
|
|
17
17
|
# @api private
|
18
18
|
module Storable
|
19
19
|
|
20
|
-
# Adds
|
21
|
-
#
|
22
|
-
# This method takes the operator and the operator value expression
|
23
|
-
# separately for callers' convenience. It can be considered to
|
24
|
-
# handle storing the hash `{operator => op_expr}`.
|
25
|
-
#
|
26
|
-
# If the selector already has the specified operator in it (on the
|
27
|
-
# top level), the new condition given in op_expr is added to the
|
28
|
-
# existing conditions for the specified operator. This is
|
29
|
-
# straightforward for $and; for other logical operators, the behavior
|
30
|
-
# of this method is to add the new conditions to the existing operator.
|
31
|
-
# For example, if the selector is currently:
|
32
|
-
#
|
33
|
-
# {'foo' => 'bar', '$or' => [{'hello' => 'world'}]}
|
34
|
-
#
|
35
|
-
# ... and operator is '$or' and op_expr is `{'test' => 123'}`,
|
36
|
-
# the resulting selector will be:
|
37
|
-
#
|
38
|
-
# {'foo' => 'bar', '$or' => [{'hello' => 'world'}, {'test' => 123}]}
|
20
|
+
# Adds a field expression to the query.
|
39
21
|
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
# assumption that the existing selector is the correct left hand side
|
44
|
-
# of the operation already.
|
22
|
+
# +field+ must be a field name, and it must be a string. The upstream
|
23
|
+
# code must have converted other field/key types to the simple string
|
24
|
+
# form by the time this method is invoked.
|
45
25
|
#
|
46
|
-
#
|
47
|
-
# there already is a top-level operator with the same name, the
|
48
|
-
# op_expr is added to the selector via a top-level $and operator,
|
49
|
-
# thus producing a selector having both operator values.
|
26
|
+
# +value+ can be of any type, it is written into the selector unchanged.
|
50
27
|
#
|
51
|
-
# This method
|
52
|
-
# currently empty and operator is $and, op_expr is written to the
|
53
|
-
# selector with $and even if the $and can in principle be elided).
|
28
|
+
# This method performs no processing on the provided field value.
|
54
29
|
#
|
55
|
-
#
|
30
|
+
# Mutates the receiver.
|
56
31
|
#
|
57
|
-
# @param [ String ]
|
58
|
-
# @param [
|
32
|
+
# @param [ String ] field The field name.
|
33
|
+
# @param [ Object ] value The field value.
|
59
34
|
#
|
60
35
|
# @return [ Storable ] self.
|
61
|
-
def
|
62
|
-
unless
|
63
|
-
raise ArgumentError, "
|
64
|
-
end
|
65
|
-
|
66
|
-
unless operator[0] == ?$
|
67
|
-
raise ArgumentError, "Operator must begin with $: #{operator}"
|
36
|
+
def add_field_expression(field, value)
|
37
|
+
unless field.is_a?(String)
|
38
|
+
raise ArgumentError, "Field must be a string: #{field}"
|
68
39
|
end
|
69
40
|
|
70
|
-
if
|
71
|
-
|
41
|
+
if field[0] == ?$
|
42
|
+
raise ArgumentError, "Field cannot be an operator (i.e. begin with $): #{field}"
|
72
43
|
end
|
73
44
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
45
|
+
if selector[field]
|
46
|
+
# We already have a restriction by the field we are trying
|
47
|
+
# to restrict, combine the restrictions.
|
48
|
+
if value.is_a?(Hash) && selector[field].is_a?(Hash) &&
|
49
|
+
value.keys.all? { |key|
|
50
|
+
key_s = key.to_s
|
51
|
+
key_s[0] == ?$ && !selector[field].key?(key_s)
|
52
|
+
}
|
53
|
+
then
|
54
|
+
# Multiple operators can be combined on the same field by
|
55
|
+
# adding them to the existing hash.
|
56
|
+
new_value = selector[field].merge(value)
|
57
|
+
selector.store(field, new_value)
|
58
|
+
else
|
59
|
+
add_operator_expression('$and', [{field => value}])
|
60
|
+
end
|
79
61
|
else
|
80
|
-
selector.store(
|
62
|
+
selector.store(field, value)
|
81
63
|
end
|
82
64
|
|
83
65
|
self
|
@@ -87,41 +69,40 @@ module Mongoid
|
|
87
69
|
#
|
88
70
|
# This method only handles logical operators ($and, $nor and $or).
|
89
71
|
# It raises ArgumentError if called with another operator. Note that
|
90
|
-
# in
|
91
|
-
# $not is not handled by this method
|
72
|
+
# in MQL, $not is a field-level operator and not a query-level one,
|
73
|
+
# and therefore $not is not handled by this method.
|
92
74
|
#
|
93
75
|
# This method takes the operator and the operator value expression
|
94
76
|
# separately for callers' convenience. It can be considered to
|
95
|
-
# handle storing the hash
|
77
|
+
# handle storing the hash +{operator => op_expr}+.
|
96
78
|
#
|
97
|
-
# If the selector
|
98
|
-
# top level), the new condition given in op_expr is
|
99
|
-
# existing conditions for the specified operator.
|
100
|
-
# straightforward for $and; for other logical operators, the behavior
|
101
|
-
# of this method is to add the new conditions to the existing operator.
|
79
|
+
# If the selector consists of a single condition which is the specified
|
80
|
+
# operator (on the top level), the new condition given in op_expr is
|
81
|
+
# added to the existing conditions for the specified operator.
|
102
82
|
# For example, if the selector is currently:
|
103
83
|
#
|
104
|
-
# {'
|
84
|
+
# {'$or' => [{'hello' => 'world'}]}
|
105
85
|
#
|
106
|
-
# ... and operator is '$or' and op_expr is `{'test' => 123'}`,
|
86
|
+
# ... and operator is '$or' and op_expr is `[{'test' => 123'}]`,
|
107
87
|
# the resulting selector will be:
|
108
88
|
#
|
109
|
-
# {'
|
89
|
+
# {'$or' => [{'hello' => 'world'}, {'test' => 123}]}
|
110
90
|
#
|
111
|
-
# This
|
112
|
-
#
|
113
|
-
#
|
114
|
-
#
|
115
|
-
# of the operation already.
|
91
|
+
# This method always adds the new conditions as additional requirements;
|
92
|
+
# in other words, it does not implement the ActiveRecord or/nor behavior
|
93
|
+
# where the receiver becomes one of the operands. It is expected that
|
94
|
+
# code upstream of this method implements such behavior.
|
116
95
|
#
|
117
96
|
# This method does not simplify values (i.e. if the selector is
|
118
97
|
# currently empty and operator is $and, op_expr is written to the
|
119
98
|
# selector with $and even if the $and can in principle be elided).
|
99
|
+
# Such simplification is also expected to have already been performed
|
100
|
+
# by the upstream code.
|
120
101
|
#
|
121
102
|
# This method mutates the receiver.
|
122
103
|
#
|
123
104
|
# @param [ String ] operator The operator to add.
|
124
|
-
# @param [ Hash ] op_expr Operator value to add.
|
105
|
+
# @param [ Array<Hash> ] op_expr Operator value to add.
|
125
106
|
#
|
126
107
|
# @return [ Storable ] self.
|
127
108
|
def add_logical_operator_expression(operator, op_expr)
|
@@ -134,7 +115,7 @@ module Mongoid
|
|
134
115
|
end
|
135
116
|
|
136
117
|
unless op_expr.is_a?(Array)
|
137
|
-
raise
|
118
|
+
raise Errors::InvalidQuery, "#{operator} argument must be an array: #{Errors::InvalidQuery.truncate_expr(op_expr)}"
|
138
119
|
end
|
139
120
|
|
140
121
|
if selector.length == 1 && selector.keys.first == operator
|
@@ -145,56 +126,80 @@ module Mongoid
|
|
145
126
|
# with whatever other conditions exist.
|
146
127
|
selector.store(operator, op_expr)
|
147
128
|
else
|
148
|
-
# Other operators need to
|
149
|
-
|
150
|
-
|
151
|
-
|
129
|
+
# Other operators need to be added separately
|
130
|
+
if selector[operator]
|
131
|
+
add_logical_operator_expression('$and', [operator => op_expr])
|
132
|
+
else
|
133
|
+
selector.store(operator, op_expr)
|
134
|
+
end
|
152
135
|
end
|
153
136
|
|
154
137
|
self
|
155
138
|
end
|
156
139
|
|
157
|
-
# Adds
|
140
|
+
# Adds an operator expression to the selector.
|
158
141
|
#
|
159
|
-
#
|
160
|
-
#
|
161
|
-
#
|
142
|
+
# This method takes the operator and the operator value expression
|
143
|
+
# separately for callers' convenience. It can be considered to
|
144
|
+
# handle storing the hash +{operator => op_expr}+.
|
162
145
|
#
|
163
|
-
#
|
146
|
+
# The operator value can be of any type.
|
164
147
|
#
|
165
|
-
#
|
148
|
+
# If the selector already has the specified operator in it (on the
|
149
|
+
# top level), the new condition given in op_expr is added to the
|
150
|
+
# existing conditions for the specified operator. This is
|
151
|
+
# straightforward for $and; for other logical operators, the behavior
|
152
|
+
# of this method is to add the new conditions to the existing operator.
|
153
|
+
# For example, if the selector is currently:
|
166
154
|
#
|
167
|
-
#
|
168
|
-
#
|
155
|
+
# {'foo' => 'bar', '$or' => [{'hello' => 'world'}]}
|
156
|
+
#
|
157
|
+
# ... and operator is '$or' and op_expr is `{'test' => 123'}`,
|
158
|
+
# the resulting selector will be:
|
159
|
+
#
|
160
|
+
# {'foo' => 'bar', '$or' => [{'hello' => 'world'}, {'test' => 123}]}
|
161
|
+
#
|
162
|
+
# This does not implement an OR between the existing selector and the
|
163
|
+
# new operator expression - handling this is the job of upstream
|
164
|
+
# methods. This method simply stores op_expr into the selector on the
|
165
|
+
# assumption that the existing selector is the correct left hand side
|
166
|
+
# of the operation already.
|
167
|
+
#
|
168
|
+
# For non-logical query-level operators like $where and $text, if
|
169
|
+
# there already is a top-level operator with the same name, the
|
170
|
+
# op_expr is added to the selector via a top-level $and operator,
|
171
|
+
# thus producing a selector having both operator values.
|
172
|
+
#
|
173
|
+
# This method does not simplify values (i.e. if the selector is
|
174
|
+
# currently empty and operator is $and, op_expr is written to the
|
175
|
+
# selector with $and even if the $and can in principle be elided).
|
176
|
+
#
|
177
|
+
# This method mutates the receiver.
|
178
|
+
#
|
179
|
+
# @param [ String ] operator The operator to add.
|
180
|
+
# @param [ Object ] op_expr Operator value to add.
|
169
181
|
#
|
170
182
|
# @return [ Storable ] self.
|
171
|
-
def
|
172
|
-
unless
|
173
|
-
raise ArgumentError, "
|
183
|
+
def add_operator_expression(operator, op_expr)
|
184
|
+
unless operator.is_a?(String)
|
185
|
+
raise ArgumentError, "Operator must be a string: #{operator}"
|
174
186
|
end
|
175
187
|
|
176
|
-
|
177
|
-
raise ArgumentError, "
|
188
|
+
unless operator[0] == ?$
|
189
|
+
raise ArgumentError, "Operator must begin with $: #{operator}"
|
178
190
|
end
|
179
191
|
|
180
|
-
if
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
# Multiple operators can be combined on the same field by
|
190
|
-
# adding them to the existing hash.
|
191
|
-
new_value = selector[field].merge(value)
|
192
|
-
selector.store(field, new_value)
|
193
|
-
else
|
194
|
-
add_operator_expression('$and', [{field => value}])
|
195
|
-
end
|
192
|
+
if %w($and $nor $or).include?(operator)
|
193
|
+
return add_logical_operator_expression(operator, op_expr)
|
194
|
+
end
|
195
|
+
|
196
|
+
# For other operators, if the operator already exists in the
|
197
|
+
# query, add the new condition with $and, otherwise add the
|
198
|
+
# new condition to the top level.
|
199
|
+
if selector[operator]
|
200
|
+
add_logical_operator_expression('$and', [{operator => op_expr}])
|
196
201
|
else
|
197
|
-
selector.store(
|
202
|
+
selector.store(operator, op_expr)
|
198
203
|
end
|
199
204
|
|
200
205
|
self
|
data/lib/mongoid/document.rb
CHANGED
@@ -233,8 +233,8 @@ module Mongoid
|
|
233
233
|
became.errors.instance_variable_set(:@messages, errors.instance_variable_get(:@messages))
|
234
234
|
became.instance_variable_set(:@new_record, new_record?)
|
235
235
|
became.instance_variable_set(:@destroyed, destroyed?)
|
236
|
-
became.changed_attributes[
|
237
|
-
became.
|
236
|
+
became.changed_attributes[klass.discriminator_key] = self.class.discriminator_value
|
237
|
+
became[klass.discriminator_key] = klass.discriminator_value
|
238
238
|
|
239
239
|
# mark embedded docs as persisted
|
240
240
|
embedded_relations.each_pair do |name, meta|
|
@@ -353,7 +353,19 @@ module Mongoid
|
|
353
353
|
#
|
354
354
|
# @since 1.0.0
|
355
355
|
def _types
|
356
|
-
@_type ||= (descendants + [ self ]).uniq.map(&:
|
356
|
+
@_type ||= (descendants + [ self ]).uniq.map(&:discriminator_value)
|
357
|
+
end
|
358
|
+
|
359
|
+
# Clear the @_type cache. This is generally called when changing the discriminator
|
360
|
+
# key/value on a class.
|
361
|
+
#
|
362
|
+
# @example Get the types.
|
363
|
+
# document._mongoid_clear_types
|
364
|
+
#
|
365
|
+
# @api private
|
366
|
+
def _mongoid_clear_types
|
367
|
+
@_type = nil
|
368
|
+
superclass._mongoid_clear_types if hereditary?
|
357
369
|
end
|
358
370
|
|
359
371
|
# Set the i18n scope to overwrite ActiveModel.
|
data/lib/mongoid/errors.rb
CHANGED
@@ -20,6 +20,13 @@ require "mongoid/errors/invalid_index"
|
|
20
20
|
require "mongoid/errors/invalid_options"
|
21
21
|
require "mongoid/errors/invalid_path"
|
22
22
|
require "mongoid/errors/invalid_persistence_option"
|
23
|
+
require "mongoid/errors/invalid_query"
|
24
|
+
# Must be after invalid_query.
|
25
|
+
require "mongoid/errors/invalid_discriminator_key_target"
|
26
|
+
require "mongoid/errors/invalid_elem_match_operator"
|
27
|
+
require "mongoid/errors/invalid_estimated_count_criteria"
|
28
|
+
require "mongoid/errors/invalid_expression_operator"
|
29
|
+
require "mongoid/errors/invalid_field_operator"
|
23
30
|
require "mongoid/errors/invalid_relation"
|
24
31
|
require "mongoid/errors/invalid_relation_option"
|
25
32
|
require "mongoid/errors/invalid_scope"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
module Mongoid
|
5
|
+
module Errors
|
6
|
+
|
7
|
+
# Creates the exception raised when trying to set or get the
|
8
|
+
# discriminator key on a child class.
|
9
|
+
#
|
10
|
+
# @param [ String ] class_name The class name.
|
11
|
+
# @param [ String ] operator The class' superclass.
|
12
|
+
#
|
13
|
+
# @api private
|
14
|
+
class InvalidDiscriminatorKeyTarget < MongoidError
|
15
|
+
def initialize(class_name, superclass)
|
16
|
+
super(
|
17
|
+
compose_message(
|
18
|
+
"invalid_discriminator_key_target",
|
19
|
+
{ class_name: class_name, superclass: superclass }
|
20
|
+
)
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
module Mongoid
|
5
|
+
module Errors
|
6
|
+
|
7
|
+
# Raised when invalid field-level operator is passed to the $elemMatch
|
8
|
+
# embedded matcher.
|
9
|
+
class InvalidElemMatchOperator < InvalidQuery
|
10
|
+
|
11
|
+
# @api private
|
12
|
+
VALID_OPERATORS = %w(
|
13
|
+
and all eq exists gt gte in lt lte ne nin nor not or regex size
|
14
|
+
).freeze
|
15
|
+
|
16
|
+
# Creates the exception.
|
17
|
+
#
|
18
|
+
# @param [ String ] operator The operator that was used.
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
def initialize(operator)
|
22
|
+
@operator = operator
|
23
|
+
super(compose_message("invalid_elem_match_operator",
|
24
|
+
operator: operator,
|
25
|
+
valid_operators: VALID_OPERATORS.map { |op| "'$#{op}'" }.join(', '),
|
26
|
+
))
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [ String ] The operator that was used.
|
30
|
+
attr_reader :operator
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
module Mongoid
|
5
|
+
module Errors
|
6
|
+
|
7
|
+
class InvalidEstimatedCountCriteria < MongoidError
|
8
|
+
|
9
|
+
# Creates the exception raised when trying to call estimated_count
|
10
|
+
# on a filtered criteria.
|
11
|
+
#
|
12
|
+
# @param [ String ] class_name The klass of the criteria used to call
|
13
|
+
# estimated count.
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
def initialize(class_name)
|
17
|
+
super(
|
18
|
+
compose_message(
|
19
|
+
"invalid_estimated_count_criteria",
|
20
|
+
{ class_name: class_name }
|
21
|
+
)
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
module Mongoid
|
5
|
+
module Errors
|
6
|
+
|
7
|
+
# Raised when invalid expression-level operator is passed to an
|
8
|
+
# embedded matcher.
|
9
|
+
class InvalidExpressionOperator < InvalidQuery
|
10
|
+
|
11
|
+
# Creates the exception.
|
12
|
+
#
|
13
|
+
# @param [ String ] operator The operator that was used.
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
def initialize(operator)
|
17
|
+
@operator = operator
|
18
|
+
super(compose_message("invalid_expression_operator",
|
19
|
+
operator: operator,
|
20
|
+
valid_operators: "'$and', '$nor', '$or'",
|
21
|
+
))
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [ String ] The operator that was used.
|
25
|
+
attr_reader :operator
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|