mongoid 7.1.11 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +10 -3
- 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 +9 -1
- 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 +7 -3
- 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/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +27 -10
- data/lib/mongoid/fields/validators/macro.rb +22 -9
- data/lib/mongoid/fields.rb +3 -0
- 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/stringified_symbol.rb +53 -0
- 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/README.md +19 -4
- data/spec/integration/app_spec.rb +84 -174
- data/spec/integration/associations/embedded_spec.rb +94 -0
- data/spec/integration/associations/has_many_spec.rb +67 -14
- data/spec/integration/associations/has_one_spec.rb +67 -14
- 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/integration/stringified_symbol_field_spec.rb +190 -0
- data/spec/lite_spec_helper.rb +4 -3
- 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 +21 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +21 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
- data/spec/mongoid/atomic/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 +197 -18
- data/spec/mongoid/copyable_spec_models.rb +28 -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/equality_spec.rb +0 -1
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +8 -20
- data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
- 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/shared/lib/mrss/constraints.rb +10 -92
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -16
- data/spec/shared/lib/mrss/spec_organizer.rb +2 -32
- data/spec/spec_helper.rb +3 -3
- data/spec/support/constraints.rb +24 -0
- data/spec/support/helpers.rb +1 -1
- data/spec/{app → support}/models/actor.rb +1 -1
- data/spec/{app → support}/models/address.rb +0 -4
- data/spec/support/models/armrest.rb +10 -0
- data/spec/{app → support}/models/browser.rb +1 -1
- data/spec/{app → support}/models/canvas.rb +1 -1
- data/spec/{app → support}/models/coding.rb +1 -1
- data/spec/support/models/crate.rb +13 -0
- data/spec/support/models/deed.rb +8 -0
- data/spec/{app → support}/models/dictionary.rb +0 -6
- data/spec/{app → support}/models/driver.rb +1 -1
- data/spec/support/models/guitar.rb +5 -0
- data/spec/support/models/idnodef.rb +8 -0
- data/spec/support/models/instrument.rb +9 -0
- data/spec/{app → support}/models/item.rb +1 -1
- data/spec/{app → support}/models/mop.rb +0 -10
- data/spec/support/models/order.rb +11 -0
- data/spec/{app → support}/models/owner.rb +2 -0
- data/spec/{app → support}/models/palette.rb +1 -1
- data/spec/{app → support}/models/person.rb +1 -10
- data/spec/support/models/piano.rb +5 -0
- data/spec/support/models/profile.rb +18 -0
- data/spec/support/models/publication.rb +5 -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/shape.rb +2 -2
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tool.rb +2 -2
- data/spec/support/models/toy.rb +10 -0
- data/spec/{app → support}/models/truck.rb +2 -0
- data/spec/{app → support}/models/vehicle.rb +7 -2
- data/spec/{app → support}/models/writer.rb +2 -2
- data/spec/support/spec_config.rb +1 -9
- data.tar.gz.sig +0 -0
- metadata +839 -820
- metadata.gz.sig +2 -2
- 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/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/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/cluster_config.rb +0 -226
- 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/server_version_registry.rb +0 -120
- 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
- /data/spec/{app → support}/models/account.rb +0 -0
- /data/spec/{app → support}/models/acolyte.rb +0 -0
- /data/spec/{app → support}/models/actress.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/{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/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/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/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/{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/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/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/{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/{app → support}/models/image.rb +0 -0
- /data/spec/{app → support}/models/implant.rb +0 -0
- /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/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/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/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/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/{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/{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/{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 → 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/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/{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/topping.rb +0 -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/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/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
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module FieldOperator
|
|
6
|
+
MAP = {
|
|
7
|
+
'$all' => All,
|
|
8
|
+
'$elemMatch' => ElemMatch,
|
|
9
|
+
'$eq' => Eq,
|
|
10
|
+
'$exists' => Exists,
|
|
11
|
+
'$gt' => Gt,
|
|
12
|
+
'$gte' => Gte,
|
|
13
|
+
'$in' => In,
|
|
14
|
+
'$lt' => Lt,
|
|
15
|
+
'$lte' => Lte,
|
|
16
|
+
'$nin' => Nin,
|
|
17
|
+
'$ne' => Ne,
|
|
18
|
+
'$not' => Not,
|
|
19
|
+
'$regex' => Regex,
|
|
20
|
+
'$size' => Size,
|
|
21
|
+
}.freeze
|
|
22
|
+
|
|
23
|
+
module_function def get(op)
|
|
24
|
+
MAP.fetch(op)
|
|
25
|
+
rescue KeyError
|
|
26
|
+
raise Errors::InvalidFieldOperator.new(op)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
module_function def apply_array_field_operator(exists, value, condition)
|
|
30
|
+
if Array === value
|
|
31
|
+
value.any? { |v| yield v }
|
|
32
|
+
else
|
|
33
|
+
yield value
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
module_function def apply_comparison_operator(operator, left, right)
|
|
38
|
+
case left
|
|
39
|
+
when Numeric
|
|
40
|
+
case right
|
|
41
|
+
when Numeric
|
|
42
|
+
left.send(operator, right)
|
|
43
|
+
else
|
|
44
|
+
false
|
|
45
|
+
end
|
|
46
|
+
else
|
|
47
|
+
false
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module Gt
|
|
6
|
+
module_function def matches?(exists, value, condition)
|
|
7
|
+
case condition
|
|
8
|
+
when Range
|
|
9
|
+
raise Errors::InvalidQuery, "$gt argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
10
|
+
end
|
|
11
|
+
FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
|
|
12
|
+
FieldOperator.apply_comparison_operator(:>, v, condition)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module Gte
|
|
6
|
+
module_function def matches?(exists, value, condition)
|
|
7
|
+
case condition
|
|
8
|
+
when Range
|
|
9
|
+
raise Errors::InvalidQuery, "$gte argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
10
|
+
end
|
|
11
|
+
FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
|
|
12
|
+
FieldOperator.apply_comparison_operator(:>=, v, condition)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module In
|
|
6
|
+
module_function def matches?(exists, value, condition)
|
|
7
|
+
unless Array === condition
|
|
8
|
+
raise Errors::InvalidQuery, "$in argument must be an array: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
9
|
+
end
|
|
10
|
+
if Array === value
|
|
11
|
+
if value.any? { |v|
|
|
12
|
+
condition.any? do |c|
|
|
13
|
+
EqImplWithRegexp.matches?('$in', v, c)
|
|
14
|
+
end
|
|
15
|
+
} then
|
|
16
|
+
return true
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
condition.any? do |c|
|
|
20
|
+
EqImplWithRegexp.matches?('$in', value, c)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module Lt
|
|
6
|
+
module_function def matches?(exists, value, condition)
|
|
7
|
+
case condition
|
|
8
|
+
when Range
|
|
9
|
+
raise Errors::InvalidQuery, "$lt argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
10
|
+
end
|
|
11
|
+
FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
|
|
12
|
+
FieldOperator.apply_comparison_operator(:<, v, condition)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module Lte
|
|
6
|
+
module_function def matches?(exists, value, condition)
|
|
7
|
+
case condition
|
|
8
|
+
when Range
|
|
9
|
+
raise Errors::InvalidQuery, "$lte argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
10
|
+
end
|
|
11
|
+
FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
|
|
12
|
+
FieldOperator.apply_comparison_operator(:<=, v, condition)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module Ne
|
|
6
|
+
module_function def matches?(exists, value, condition)
|
|
7
|
+
case condition
|
|
8
|
+
when ::Regexp, BSON::Regexp::Raw
|
|
9
|
+
raise Errors::InvalidQuery, "'$ne' operator does not allow Regexp arguments: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
!EqImpl.matches?(exists, value, condition, '$ne')
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module Nor
|
|
6
|
+
module_function def matches?(document, expr)
|
|
7
|
+
unless expr.is_a?(Array)
|
|
8
|
+
raise Errors::InvalidQuery, "$nor argument must be an array: #{Errors::InvalidQuery.truncate_expr(expr)}"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
if expr.empty?
|
|
12
|
+
raise Errors::InvalidQuery, "$nor argument must be a non-empty array: #{Errors::InvalidQuery.truncate_expr(expr)}"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
expr.each do |sub_expr|
|
|
16
|
+
if Expression.matches?(document, sub_expr)
|
|
17
|
+
return false
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
expr.any?
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module Not
|
|
6
|
+
module_function def matches?(exists, value, condition)
|
|
7
|
+
case condition
|
|
8
|
+
when ::Regexp, BSON::Regexp::Raw
|
|
9
|
+
!Regex.matches?(exists, value, condition)
|
|
10
|
+
when Hash
|
|
11
|
+
if condition.empty?
|
|
12
|
+
raise Errors::InvalidQuery, "$not argument cannot be an empty hash: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
condition.all? do |(k, cond_v)|
|
|
16
|
+
k = k.to_s
|
|
17
|
+
unless k.start_with?('$')
|
|
18
|
+
raise Errors::InvalidQuery, "$not arguments must be operators: #{Errors::InvalidQuery.truncate_expr(k)}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
!FieldOperator.get(k).matches?(exists, value, cond_v)
|
|
22
|
+
end
|
|
23
|
+
else
|
|
24
|
+
raise Errors::InvalidQuery, "$not argument must be a Hash or a regular expression: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module Or
|
|
6
|
+
module_function def matches?(document, expr)
|
|
7
|
+
unless expr.is_a?(Array)
|
|
8
|
+
raise Errors::InvalidQuery, "$or argument must be an array: #{Errors::InvalidQuery.truncate_expr(expr)}"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
if expr.empty?
|
|
12
|
+
raise Errors::InvalidQuery, "$or argument must be a non-empty array: #{Errors::InvalidQuery.truncate_expr(expr)}"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
expr.any? do |sub_expr|
|
|
16
|
+
Expression.matches?(document, sub_expr)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module Regex
|
|
6
|
+
module_function def matches?(exists, value, condition)
|
|
7
|
+
condition = case condition
|
|
8
|
+
when Regexp
|
|
9
|
+
condition
|
|
10
|
+
when BSON::Regexp::Raw
|
|
11
|
+
condition.compile
|
|
12
|
+
else
|
|
13
|
+
# Note that strings must have been converted to a regular expression
|
|
14
|
+
# instance already (with $options taken into account, if provided).
|
|
15
|
+
raise Errors::InvalidQuery, "$regex requires a regular expression argument: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
case value
|
|
19
|
+
when Array
|
|
20
|
+
value.any? do |v|
|
|
21
|
+
v =~ condition
|
|
22
|
+
end
|
|
23
|
+
when String
|
|
24
|
+
value =~ condition
|
|
25
|
+
else
|
|
26
|
+
false
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
module_function def matches_array_or_scalar?(value, condition)
|
|
31
|
+
if Array === value
|
|
32
|
+
value.any? do |v|
|
|
33
|
+
matches?(true, v, condition)
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
matches?(true, value, condition)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
module Matcher
|
|
3
|
+
|
|
4
|
+
# @api private
|
|
5
|
+
module Size
|
|
6
|
+
module_function def matches?(exists, value, condition)
|
|
7
|
+
case condition
|
|
8
|
+
when Float
|
|
9
|
+
raise Errors::InvalidQuery, "$size argument must be a non-negative integer: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
10
|
+
when Numeric
|
|
11
|
+
if condition < 0
|
|
12
|
+
raise Errors::InvalidQuery, "$size argument must be a non-negative integer: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
13
|
+
end
|
|
14
|
+
else
|
|
15
|
+
raise Errors::InvalidQuery, "$size argument must be a non-negative integer: #{Errors::InvalidQuery.truncate_expr(condition)}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
if Array === value
|
|
19
|
+
value.length == condition
|
|
20
|
+
else
|
|
21
|
+
false
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
|
|
3
|
+
# @api private
|
|
4
|
+
module Matcher
|
|
5
|
+
|
|
6
|
+
# Extracts field values in the document at the specified key.
|
|
7
|
+
#
|
|
8
|
+
# The document can be a Hash or a model instance.
|
|
9
|
+
#
|
|
10
|
+
# The key is a valid MongoDB dot notation key. The following use cases are
|
|
11
|
+
# supported:
|
|
12
|
+
#
|
|
13
|
+
# - Simple field traversal (`foo`) - retrieves the field `foo` in the
|
|
14
|
+
# current document.
|
|
15
|
+
# - Hash/embedded document field traversal (`foo.bar`) - retrieves the
|
|
16
|
+
# field `foo` in the current document, then retrieves the field `bar`
|
|
17
|
+
# from the value of `foo`. Each path segment could descend into an
|
|
18
|
+
# embedded document or a hash field.
|
|
19
|
+
# - Array element retrieval (`foo.N`) - retrieves the Nth array element
|
|
20
|
+
# from the field `foo` which must be an array. N must be a non-negative
|
|
21
|
+
# integer.
|
|
22
|
+
# - Array traversal (`foo.bar`) - if `foo` is an array field, and
|
|
23
|
+
# the elements of `foo` are hashes or embedded documents, this returns
|
|
24
|
+
# an array of values of the `bar` field in each of the hashes in the
|
|
25
|
+
# `foo` array.
|
|
26
|
+
#
|
|
27
|
+
# The return value is a two-element array. The first element is the value
|
|
28
|
+
# retrieved, or an array of values. The second element is a boolean flag
|
|
29
|
+
# indicating whether an array was expanded at any point during the key
|
|
30
|
+
# traversal (because the respective document field was an array).
|
|
31
|
+
#
|
|
32
|
+
# @param [ Document | Hash ] document The document to extract from.
|
|
33
|
+
# @param [ String ] key The key path to extract.
|
|
34
|
+
#
|
|
35
|
+
# @return [ Array<true | false, Object | Array, true | false> ]
|
|
36
|
+
# Whether the value existed in the document, the extracted value
|
|
37
|
+
# and the array expansion flag.
|
|
38
|
+
module_function def extract_attribute(document, key)
|
|
39
|
+
if document.respond_to?(:as_attributes, true)
|
|
40
|
+
# If a document has hash fields, as_attributes would keep those fields
|
|
41
|
+
# as Hash instances which do not offer indifferent access.
|
|
42
|
+
# Convert to BSON::Document to get indifferent access on hash fields.
|
|
43
|
+
document = BSON::Document.new(document.send(:as_attributes))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
src = document
|
|
47
|
+
expanded = false
|
|
48
|
+
exists = true
|
|
49
|
+
|
|
50
|
+
key.to_s.split('.').each do |field|
|
|
51
|
+
if (index = field.to_i).to_s == field
|
|
52
|
+
# Array indexing
|
|
53
|
+
if Array === src
|
|
54
|
+
exists = index < src.length
|
|
55
|
+
src = src[index]
|
|
56
|
+
else
|
|
57
|
+
# Trying to index something that is not an array
|
|
58
|
+
exists = false
|
|
59
|
+
src = nil
|
|
60
|
+
end
|
|
61
|
+
else
|
|
62
|
+
case src
|
|
63
|
+
when nil
|
|
64
|
+
exists = false
|
|
65
|
+
when Hash
|
|
66
|
+
exists = src.key?(field)
|
|
67
|
+
src = src[field]
|
|
68
|
+
when Array
|
|
69
|
+
expanded = true
|
|
70
|
+
exists = false
|
|
71
|
+
new = []
|
|
72
|
+
src.each do |doc|
|
|
73
|
+
case doc
|
|
74
|
+
when Hash
|
|
75
|
+
if doc.key?(field)
|
|
76
|
+
v = doc[field]
|
|
77
|
+
case v
|
|
78
|
+
when Array
|
|
79
|
+
new += v
|
|
80
|
+
else
|
|
81
|
+
new += [v]
|
|
82
|
+
end
|
|
83
|
+
exists = true
|
|
84
|
+
end
|
|
85
|
+
else
|
|
86
|
+
# Trying to hash index into a value that is not a hash
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
src = new
|
|
90
|
+
else
|
|
91
|
+
# Trying to descend into a field that is not a hash using
|
|
92
|
+
# dot notation.
|
|
93
|
+
exists = false
|
|
94
|
+
src = nil
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
[exists, src, expanded]
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
require 'mongoid/matcher/all'
|
|
105
|
+
require 'mongoid/matcher/and'
|
|
106
|
+
require 'mongoid/matcher/elem_match'
|
|
107
|
+
require 'mongoid/matcher/elem_match_expression'
|
|
108
|
+
require 'mongoid/matcher/eq'
|
|
109
|
+
require 'mongoid/matcher/eq_impl'
|
|
110
|
+
require 'mongoid/matcher/eq_impl_with_regexp'
|
|
111
|
+
require 'mongoid/matcher/exists'
|
|
112
|
+
require 'mongoid/matcher/expression'
|
|
113
|
+
require 'mongoid/matcher/field_expression'
|
|
114
|
+
require 'mongoid/matcher/gt'
|
|
115
|
+
require 'mongoid/matcher/gte'
|
|
116
|
+
require 'mongoid/matcher/in'
|
|
117
|
+
require 'mongoid/matcher/lt'
|
|
118
|
+
require 'mongoid/matcher/lte'
|
|
119
|
+
require 'mongoid/matcher/ne'
|
|
120
|
+
require 'mongoid/matcher/nin'
|
|
121
|
+
require 'mongoid/matcher/nor'
|
|
122
|
+
require 'mongoid/matcher/not'
|
|
123
|
+
require 'mongoid/matcher/or'
|
|
124
|
+
require 'mongoid/matcher/regex'
|
|
125
|
+
require 'mongoid/matcher/size'
|
|
126
|
+
require 'mongoid/matcher/expression_operator'
|
|
127
|
+
require 'mongoid/matcher/field_operator'
|
|
@@ -141,7 +141,7 @@ module Mongoid
|
|
|
141
141
|
#
|
|
142
142
|
# @since 1.0.0
|
|
143
143
|
def delete_all(conditions = {})
|
|
144
|
-
selector = hereditary? ? conditions.merge(
|
|
144
|
+
selector = hereditary? ? conditions.merge(discriminator_key.to_sym => discriminator_value) : conditions
|
|
145
145
|
where(selector).delete
|
|
146
146
|
end
|
|
147
147
|
end
|
|
@@ -237,9 +237,7 @@ module Mongoid
|
|
|
237
237
|
# @since 6.0.0
|
|
238
238
|
def clear(object, cluster = nil, original_context = nil)
|
|
239
239
|
if context = get(object)
|
|
240
|
-
|
|
241
|
-
context.client.close
|
|
242
|
-
end
|
|
240
|
+
context.client.close unless (context.cluster.equal?(cluster) || cluster.nil?)
|
|
243
241
|
end
|
|
244
242
|
ensure
|
|
245
243
|
Thread.current["[mongoid][#{object.object_id}]:context"] = original_context
|