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
|
@@ -786,12 +786,72 @@ describe Mongoid::Criteria do
|
|
|
786
786
|
|
|
787
787
|
describe "#field_list" do
|
|
788
788
|
|
|
789
|
+
context "when using the default discriminator key" do
|
|
790
|
+
let(:criteria) do
|
|
791
|
+
Doctor.only(:_id)
|
|
792
|
+
end
|
|
793
|
+
|
|
794
|
+
it "returns the fields with required _id minus type" do
|
|
795
|
+
expect(criteria.field_list).to eq([ "_id" ])
|
|
796
|
+
end
|
|
797
|
+
end
|
|
798
|
+
|
|
799
|
+
context "when using a custom discriminator key" do
|
|
800
|
+
before do
|
|
801
|
+
Person.discriminator_key = "dkey"
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
after do
|
|
805
|
+
Person.discriminator_key = nil
|
|
806
|
+
end
|
|
807
|
+
|
|
808
|
+
let(:criteria) do
|
|
809
|
+
Doctor.only(:_id, :_type)
|
|
810
|
+
end
|
|
811
|
+
|
|
812
|
+
it "returns the fields with type without dkey" do
|
|
813
|
+
expect(criteria.field_list).to eq([ "_id", "_type" ])
|
|
814
|
+
end
|
|
815
|
+
end
|
|
816
|
+
end
|
|
817
|
+
|
|
818
|
+
describe "#find" do
|
|
819
|
+
let!(:depeche) do
|
|
820
|
+
Band.create!(name: "Depeche Mode")
|
|
821
|
+
end
|
|
822
|
+
|
|
789
823
|
let(:criteria) do
|
|
790
|
-
Band.
|
|
824
|
+
Band.where(name: "Depeche Mode")
|
|
791
825
|
end
|
|
792
826
|
|
|
793
|
-
|
|
794
|
-
|
|
827
|
+
context "when given a block" do
|
|
828
|
+
it "behaves as Enumerable" do
|
|
829
|
+
result = criteria.find { |c| c.name == "Depeche Mode" }
|
|
830
|
+
expect(result).to eq(depeche)
|
|
831
|
+
end
|
|
832
|
+
end
|
|
833
|
+
|
|
834
|
+
context "when given a Proc and a block" do
|
|
835
|
+
it "behaves as Enumerable" do
|
|
836
|
+
result = criteria.find(-> {"default"}) { |c| c.name == "Not Depeche Mode" }
|
|
837
|
+
expect(result).to eq("default")
|
|
838
|
+
end
|
|
839
|
+
end
|
|
840
|
+
|
|
841
|
+
context "when given a Proc" do
|
|
842
|
+
it "behaves as Enumerable" do
|
|
843
|
+
lambda do
|
|
844
|
+
criteria.find(-> {"default"})
|
|
845
|
+
# Proc is not serializable to a BSON type
|
|
846
|
+
end.should raise_error(BSON::Error::UnserializableClass)
|
|
847
|
+
end
|
|
848
|
+
end
|
|
849
|
+
|
|
850
|
+
context "when given an id" do
|
|
851
|
+
it "behaves as Findable" do
|
|
852
|
+
result = criteria.find(depeche.id)
|
|
853
|
+
expect(result).to eq(depeche)
|
|
854
|
+
end
|
|
795
855
|
end
|
|
796
856
|
end
|
|
797
857
|
|
|
@@ -2804,13 +2864,36 @@ describe Mongoid::Criteria do
|
|
|
2804
2864
|
end
|
|
2805
2865
|
|
|
2806
2866
|
context "when using inheritance" do
|
|
2867
|
+
context "when using the default discriminator key" do
|
|
2868
|
+
let(:criteria) do
|
|
2869
|
+
Doctor.only(:_id)
|
|
2870
|
+
end
|
|
2807
2871
|
|
|
2808
|
-
|
|
2809
|
-
|
|
2872
|
+
it "adds _type to the fields" do
|
|
2873
|
+
expect(criteria.options[:fields]).to include("_type")
|
|
2874
|
+
end
|
|
2810
2875
|
end
|
|
2811
2876
|
|
|
2812
|
-
|
|
2813
|
-
|
|
2877
|
+
context "when setting a custom discriminator key" do
|
|
2878
|
+
before do
|
|
2879
|
+
Person.discriminator_key = "dkey"
|
|
2880
|
+
end
|
|
2881
|
+
|
|
2882
|
+
after do
|
|
2883
|
+
Person.discriminator_key = nil
|
|
2884
|
+
end
|
|
2885
|
+
|
|
2886
|
+
let(:criteria) do
|
|
2887
|
+
Doctor.only(:_id)
|
|
2888
|
+
end
|
|
2889
|
+
|
|
2890
|
+
it "adds custom discriminator key to the fields" do
|
|
2891
|
+
expect(criteria.options[:fields]).to include("dkey")
|
|
2892
|
+
end
|
|
2893
|
+
|
|
2894
|
+
it "does not add _type to the fields" do
|
|
2895
|
+
expect(criteria.options[:fields]).to_not include("_type")
|
|
2896
|
+
end
|
|
2814
2897
|
end
|
|
2815
2898
|
end
|
|
2816
2899
|
|
|
@@ -3386,34 +3469,75 @@ describe Mongoid::Criteria do
|
|
|
3386
3469
|
end
|
|
3387
3470
|
|
|
3388
3471
|
describe "#type" do
|
|
3472
|
+
context "when using the default discriminator_key" do
|
|
3473
|
+
context "when the type is a string" do
|
|
3389
3474
|
|
|
3390
|
-
|
|
3475
|
+
let!(:browser) do
|
|
3476
|
+
Browser.create
|
|
3477
|
+
end
|
|
3391
3478
|
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3479
|
+
let(:criteria) do
|
|
3480
|
+
Canvas.all.type("Browser")
|
|
3481
|
+
end
|
|
3395
3482
|
|
|
3396
|
-
|
|
3397
|
-
|
|
3483
|
+
it "returns documents with the provided type" do
|
|
3484
|
+
expect(criteria).to eq([ browser ])
|
|
3485
|
+
end
|
|
3398
3486
|
end
|
|
3399
3487
|
|
|
3400
|
-
|
|
3401
|
-
|
|
3488
|
+
context "when the type is an Array of type" do
|
|
3489
|
+
|
|
3490
|
+
let!(:browser) do
|
|
3491
|
+
Firefox.create
|
|
3492
|
+
end
|
|
3493
|
+
|
|
3494
|
+
let(:criteria) do
|
|
3495
|
+
Canvas.all.type([ "Browser", "Firefox" ])
|
|
3496
|
+
end
|
|
3497
|
+
|
|
3498
|
+
it "returns documents with the provided types" do
|
|
3499
|
+
expect(criteria).to eq([ browser ])
|
|
3500
|
+
end
|
|
3402
3501
|
end
|
|
3403
3502
|
end
|
|
3404
3503
|
|
|
3405
|
-
context "when
|
|
3504
|
+
context "when using a custom discriminator_key" do
|
|
3505
|
+
before do
|
|
3506
|
+
Canvas.discriminator_key = "dkey"
|
|
3507
|
+
end
|
|
3406
3508
|
|
|
3407
|
-
|
|
3408
|
-
|
|
3509
|
+
after do
|
|
3510
|
+
Canvas.discriminator_key = nil
|
|
3409
3511
|
end
|
|
3410
3512
|
|
|
3411
|
-
|
|
3412
|
-
|
|
3513
|
+
context "when the type is a string" do
|
|
3514
|
+
|
|
3515
|
+
let!(:browser) do
|
|
3516
|
+
Browser.create
|
|
3517
|
+
end
|
|
3518
|
+
|
|
3519
|
+
let(:criteria) do
|
|
3520
|
+
Canvas.all.type("Browser")
|
|
3521
|
+
end
|
|
3522
|
+
|
|
3523
|
+
it "returns documents with the provided type" do
|
|
3524
|
+
expect(criteria).to eq([ browser ])
|
|
3525
|
+
end
|
|
3413
3526
|
end
|
|
3414
3527
|
|
|
3415
|
-
|
|
3416
|
-
|
|
3528
|
+
context "when the type is an Array of type" do
|
|
3529
|
+
|
|
3530
|
+
let!(:browser) do
|
|
3531
|
+
Firefox.create
|
|
3532
|
+
end
|
|
3533
|
+
|
|
3534
|
+
let(:criteria) do
|
|
3535
|
+
Canvas.all.type([ "Browser", "Firefox" ])
|
|
3536
|
+
end
|
|
3537
|
+
|
|
3538
|
+
it "returns documents with the provided types" do
|
|
3539
|
+
expect(criteria).to eq([ browser ])
|
|
3540
|
+
end
|
|
3417
3541
|
end
|
|
3418
3542
|
end
|
|
3419
3543
|
end
|
|
@@ -3645,14 +3769,10 @@ describe Mongoid::Criteria do
|
|
|
3645
3769
|
|
|
3646
3770
|
before do
|
|
3647
3771
|
expect(Person).to receive(:minor).and_call_original
|
|
3648
|
-
expect(Person).to receive(:older_than).and_call_original
|
|
3649
3772
|
end
|
|
3650
3773
|
|
|
3651
3774
|
it "calls the method on the class" do
|
|
3652
3775
|
expect(criteria.minor).to be_empty
|
|
3653
|
-
expect do
|
|
3654
|
-
criteria.older_than(age: 25)
|
|
3655
|
-
end.not_to raise_error
|
|
3656
3776
|
end
|
|
3657
3777
|
end
|
|
3658
3778
|
|
|
@@ -3739,7 +3859,7 @@ describe Mongoid::Criteria do
|
|
|
3739
3859
|
end
|
|
3740
3860
|
end
|
|
3741
3861
|
|
|
3742
|
-
describe "#
|
|
3862
|
+
describe "#geo_spatial" do
|
|
3743
3863
|
|
|
3744
3864
|
context "when checking within a polygon" do
|
|
3745
3865
|
|
|
@@ -3752,7 +3872,7 @@ describe Mongoid::Criteria do
|
|
|
3752
3872
|
end
|
|
3753
3873
|
|
|
3754
3874
|
let(:criteria) do
|
|
3755
|
-
Bar.
|
|
3875
|
+
Bar.geo_spatial(
|
|
3756
3876
|
:location.within_polygon => [[[ 50, 10 ], [ 50, 20 ], [ 60, 20 ], [ 60, 10 ], [ 50, 10 ]]]
|
|
3757
3877
|
)
|
|
3758
3878
|
end
|
|
@@ -3836,34 +3956,75 @@ describe Mongoid::Criteria do
|
|
|
3836
3956
|
end
|
|
3837
3957
|
|
|
3838
3958
|
describe "#type_selection" do
|
|
3959
|
+
context "when using the default discriminator_key" do
|
|
3960
|
+
context "when only one subclass exists" do
|
|
3839
3961
|
|
|
3840
|
-
|
|
3962
|
+
let(:criteria) do
|
|
3963
|
+
described_class.new(Firefox)
|
|
3964
|
+
end
|
|
3841
3965
|
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
|
|
3966
|
+
let(:selection) do
|
|
3967
|
+
criteria.send(:type_selection)
|
|
3968
|
+
end
|
|
3845
3969
|
|
|
3846
|
-
|
|
3847
|
-
|
|
3970
|
+
it "does not use an $in query" do
|
|
3971
|
+
expect(selection).to eq({ _type: "Firefox" })
|
|
3972
|
+
end
|
|
3848
3973
|
end
|
|
3849
3974
|
|
|
3850
|
-
|
|
3851
|
-
|
|
3975
|
+
context "when more than one subclass exists" do
|
|
3976
|
+
|
|
3977
|
+
let(:criteria) do
|
|
3978
|
+
described_class.new(Browser)
|
|
3979
|
+
end
|
|
3980
|
+
|
|
3981
|
+
let(:selection) do
|
|
3982
|
+
criteria.send(:type_selection)
|
|
3983
|
+
end
|
|
3984
|
+
|
|
3985
|
+
it "does not use an $in query" do
|
|
3986
|
+
expect(selection).to eq({ _type: { "$in" => [ "Firefox", "Browser" ]}})
|
|
3987
|
+
end
|
|
3852
3988
|
end
|
|
3853
3989
|
end
|
|
3854
3990
|
|
|
3855
|
-
context "when
|
|
3991
|
+
context "when using a custom discriminator_key" do
|
|
3992
|
+
before do
|
|
3993
|
+
Canvas.discriminator_key = "dkey"
|
|
3994
|
+
end
|
|
3856
3995
|
|
|
3857
|
-
|
|
3858
|
-
|
|
3996
|
+
after do
|
|
3997
|
+
Canvas.discriminator_key = nil
|
|
3859
3998
|
end
|
|
3860
3999
|
|
|
3861
|
-
|
|
3862
|
-
|
|
4000
|
+
context "when only one subclass exists" do
|
|
4001
|
+
|
|
4002
|
+
let(:criteria) do
|
|
4003
|
+
described_class.new(Firefox)
|
|
4004
|
+
end
|
|
4005
|
+
|
|
4006
|
+
let(:selection) do
|
|
4007
|
+
criteria.send(:type_selection)
|
|
4008
|
+
end
|
|
4009
|
+
|
|
4010
|
+
it "does not use an $in query" do
|
|
4011
|
+
expect(selection).to eq({ dkey: "Firefox" })
|
|
4012
|
+
end
|
|
3863
4013
|
end
|
|
3864
4014
|
|
|
3865
|
-
|
|
3866
|
-
|
|
4015
|
+
context "when more than one subclass exists" do
|
|
4016
|
+
|
|
4017
|
+
let(:criteria) do
|
|
4018
|
+
described_class.new(Browser)
|
|
4019
|
+
end
|
|
4020
|
+
|
|
4021
|
+
let(:selection) do
|
|
4022
|
+
criteria.send(:type_selection)
|
|
4023
|
+
end
|
|
4024
|
+
|
|
4025
|
+
it "does not use an $in query" do
|
|
4026
|
+
expect(selection).to eq({ dkey: { "$in" => [ "Firefox", "Browser" ]}})
|
|
4027
|
+
end
|
|
3867
4028
|
end
|
|
3868
4029
|
end
|
|
3869
4030
|
end
|
|
@@ -36,55 +36,4 @@ describe Mongoid::Document do
|
|
|
36
36
|
expect(_person.age).to be 42
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
|
-
|
|
40
|
-
context 'when projecting with #without' do
|
|
41
|
-
before do
|
|
42
|
-
duck = Pet.new(name: 'Duck')
|
|
43
|
-
Person.create!(username: 'Dev', title: 'CEO', pet: duck)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
let(:person) { Person.where(username: 'Dev').without(:title).first }
|
|
47
|
-
|
|
48
|
-
it 'allows access to attribute of embedded document' do
|
|
49
|
-
expect(person.pet.name).to eq 'Duck'
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
context 'when exclusion starts with association name but is not the association' do
|
|
53
|
-
|
|
54
|
-
let(:person) { Person.where(username: 'Dev').without(:pet_).first }
|
|
55
|
-
|
|
56
|
-
it 'allows access to attribute of embedded document' do
|
|
57
|
-
expect(person.pet.name).to eq 'Duck'
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
context 'when exclusion starts with prefix of association name' do
|
|
62
|
-
|
|
63
|
-
let(:person) { Person.where(username: 'Dev').without(:pe).first }
|
|
64
|
-
|
|
65
|
-
it 'allows access to attribute of embedded document' do
|
|
66
|
-
expect(person.pet.name).to eq 'Duck'
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
context 'when another attribute of the association is excluded' do
|
|
71
|
-
|
|
72
|
-
let(:person) { Person.where(username: 'Dev').without('pet.weight').first }
|
|
73
|
-
|
|
74
|
-
it 'allows access to non-excluded attribute of embedded document' do
|
|
75
|
-
expect(person.pet.name).to eq 'Duck'
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
context 'when the excluded attribute of the association is retrieved' do
|
|
80
|
-
|
|
81
|
-
let(:person) { Person.where(username: 'Dev').without('pet.name').first }
|
|
82
|
-
|
|
83
|
-
it 'prohibits the retrieval' do
|
|
84
|
-
lambda do
|
|
85
|
-
person.pet.name
|
|
86
|
-
end.should raise_error(ActiveModel::MissingAttributeError)
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
39
|
end
|
|
@@ -116,7 +116,50 @@ describe Mongoid::Document do
|
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
it "should clear descendants' cache" do
|
|
119
|
-
expect(Person._types).to include(descendant.
|
|
119
|
+
expect(Person._types).to include(descendant.discriminator_value)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe "._mongoid_clear_types" do
|
|
125
|
+
|
|
126
|
+
context "when changing the discriminator_value" do
|
|
127
|
+
|
|
128
|
+
before do
|
|
129
|
+
Kangaroo._types
|
|
130
|
+
Kangaroo.discriminator_value = "dvalue"
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
after do
|
|
134
|
+
Kangaroo.discriminator_value = nil
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "has the correct _types" do
|
|
138
|
+
expect(Kangaroo._types).to eq(["dvalue"])
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
context "when changing the discriminator_value in child" do
|
|
143
|
+
|
|
144
|
+
before do
|
|
145
|
+
Shape._types
|
|
146
|
+
Circle.discriminator_value = "dvalue"
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
after do
|
|
150
|
+
Circle.discriminator_value = nil
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it "has the correct _types" do
|
|
154
|
+
expect(Circle._types).to eq(["dvalue"])
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "has the new Circle discriminator value" do
|
|
158
|
+
expect(Shape._types).to include("dvalue")
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "doesn't have the old Circle discriminator value" do
|
|
162
|
+
expect(Shape._types).to_not include("Cirlce")
|
|
120
163
|
end
|
|
121
164
|
end
|
|
122
165
|
end
|
|
@@ -458,7 +501,7 @@ describe Mongoid::Document do
|
|
|
458
501
|
end
|
|
459
502
|
end
|
|
460
503
|
|
|
461
|
-
context '
|
|
504
|
+
context ':compact option' do
|
|
462
505
|
# Since rails 6 differs in how it treats id fields,
|
|
463
506
|
# run this test on one version of rails. Currently rails 6 is in beta,
|
|
464
507
|
# when it is released this version should be changed to 6.
|
|
@@ -470,26 +513,6 @@ describe Mongoid::Document do
|
|
|
470
513
|
expect(church.as_json.keys.sort).to eq(%w(_id location name))
|
|
471
514
|
end
|
|
472
515
|
|
|
473
|
-
context 'deprecation' do
|
|
474
|
-
let(:church) do
|
|
475
|
-
Church.create!(name: 'St. Basil')
|
|
476
|
-
end
|
|
477
|
-
|
|
478
|
-
let(:message) do
|
|
479
|
-
'#as_json :compact option is deprecated. Please call #compact on the returned Hash object instead.'
|
|
480
|
-
end
|
|
481
|
-
|
|
482
|
-
it 'logs a deprecation warning when :compact is given' do
|
|
483
|
-
expect_any_instance_of(Logger).to receive(:warn).with(message)
|
|
484
|
-
church.as_json(compact: true)
|
|
485
|
-
end
|
|
486
|
-
|
|
487
|
-
it 'does not log a deprecation warning when :compact is not given' do
|
|
488
|
-
expect_any_instance_of(Logger).to_not receive(:warn).with(message)
|
|
489
|
-
church.as_json
|
|
490
|
-
end
|
|
491
|
-
end
|
|
492
|
-
|
|
493
516
|
context 'there is a nil valued attribute' do
|
|
494
517
|
let(:church) do
|
|
495
518
|
Church.create!(name: 'St. Basil')
|
|
@@ -901,27 +924,58 @@ describe Mongoid::Document do
|
|
|
901
924
|
end
|
|
902
925
|
|
|
903
926
|
context "when no embedded documents are present" do
|
|
927
|
+
context "when using the default discriminator key" do
|
|
928
|
+
let(:person) do
|
|
929
|
+
manager.becomes(Person)
|
|
930
|
+
end
|
|
904
931
|
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
932
|
+
it "copies attributes" do
|
|
933
|
+
expect(person.title).to eq('Sir')
|
|
934
|
+
end
|
|
908
935
|
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
936
|
+
it "keeps the same object id" do
|
|
937
|
+
expect(person.id).to eq(manager.id)
|
|
938
|
+
end
|
|
912
939
|
|
|
913
|
-
|
|
914
|
-
|
|
940
|
+
it "sets the class type" do
|
|
941
|
+
expect(person._type).to eq("Person")
|
|
942
|
+
end
|
|
943
|
+
|
|
944
|
+
it "raises an error when inappropriate class is provided" do
|
|
945
|
+
expect {
|
|
946
|
+
manager.becomes(String)
|
|
947
|
+
}.to raise_error(ArgumentError, /A class which includes Mongoid::Document is expected/)
|
|
948
|
+
end
|
|
915
949
|
end
|
|
916
950
|
|
|
917
|
-
|
|
918
|
-
|
|
951
|
+
context "when using a custom discriminator key" do
|
|
952
|
+
before do
|
|
953
|
+
Person.discriminator_key = "dkey"
|
|
954
|
+
end
|
|
955
|
+
|
|
956
|
+
after do
|
|
957
|
+
Person.discriminator_key = nil
|
|
958
|
+
end
|
|
959
|
+
|
|
960
|
+
it "sets the class type with new discriminator key" do
|
|
961
|
+
expect(person.dkey).to eq("Person")
|
|
962
|
+
end
|
|
919
963
|
end
|
|
920
964
|
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
965
|
+
context "when using a custom discriminator key and discriminator value" do
|
|
966
|
+
before do
|
|
967
|
+
Person.discriminator_key = "dkey"
|
|
968
|
+
Person.discriminator_value = "dvalue"
|
|
969
|
+
end
|
|
970
|
+
|
|
971
|
+
after do
|
|
972
|
+
Person.discriminator_key = nil
|
|
973
|
+
Person.discriminator_value = nil
|
|
974
|
+
end
|
|
975
|
+
|
|
976
|
+
it "sets the class type with new discriminator key" do
|
|
977
|
+
expect(person.dkey).to eq("dvalue")
|
|
978
|
+
end
|
|
925
979
|
end
|
|
926
980
|
end
|
|
927
981
|
|
|
@@ -19,7 +19,7 @@ describe Mongoid::Errors::DeleteRestriction do
|
|
|
19
19
|
|
|
20
20
|
it "contains the summary in the message" do
|
|
21
21
|
expect(error.message).to include(
|
|
22
|
-
"When defining 'drugs' with a :dependent => :
|
|
22
|
+
"When defining 'drugs' with a :dependent => :restrict_with_error,"
|
|
23
23
|
)
|
|
24
24
|
end
|
|
25
25
|
|
|
@@ -10,26 +10,14 @@ describe Mongoid::Errors::MongoidError do
|
|
|
10
10
|
let(:options) { {} }
|
|
11
11
|
|
|
12
12
|
before do
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
and_return(name)
|
|
22
|
-
end
|
|
23
|
-
else
|
|
24
|
-
{"message_title" => "message", "summary_title" => "summary", "resolution_title" => "resolution"}.each do |key, name|
|
|
25
|
-
expect(::I18n).to receive(:translate).with("mongoid.errors.messages.#{key}", {}).and_return(name)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
["message", "summary", "resolution"].each do |name|
|
|
29
|
-
expect(::I18n).to receive(:translate).
|
|
30
|
-
with("mongoid.errors.messages.#{key}.#{name}", {}).
|
|
31
|
-
and_return(name)
|
|
32
|
-
end
|
|
13
|
+
{"message_title" => "message", "summary_title" => "summary", "resolution_title" => "resolution"}.each do |key, name|
|
|
14
|
+
expect(::I18n).to receive(:translate).with("mongoid.errors.messages.#{key}", {}).and_return(name)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
["message", "summary", "resolution"].each do |name|
|
|
18
|
+
expect(::I18n).to receive(:translate).
|
|
19
|
+
with("mongoid.errors.messages.#{key}.#{name}", {}).
|
|
20
|
+
and_return(name)
|
|
33
21
|
end
|
|
34
22
|
|
|
35
23
|
error.compose_message(key, options)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
4
|
+
require "spec_helper"
|
|
5
|
+
|
|
6
|
+
describe Mongoid::StringifiedSymbol do
|
|
7
|
+
|
|
8
|
+
describe ".demongoize" do
|
|
9
|
+
|
|
10
|
+
context "when the object is not a symbol" do
|
|
11
|
+
|
|
12
|
+
it "returns the symbol" do
|
|
13
|
+
expect(Mongoid::StringifiedSymbol.demongoize("test")).to eq(:test)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
context "when the object is a symbol" do
|
|
18
|
+
|
|
19
|
+
it "returns the symbol" do
|
|
20
|
+
expect(Mongoid::StringifiedSymbol.demongoize(:test)).to eq(:test)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context "when the object is a BSON Symbol" do
|
|
25
|
+
|
|
26
|
+
it "returns a symbol" do
|
|
27
|
+
expect(Mongoid::StringifiedSymbol.demongoize(BSON::Symbol::Raw.new(:test))).to eq(:test)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
context "when the object is an integer" do
|
|
33
|
+
|
|
34
|
+
it "returns a symbol" do
|
|
35
|
+
expect(Mongoid::StringifiedSymbol.demongoize(14)).to eq(:"14")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
context "when the object is nil" do
|
|
40
|
+
|
|
41
|
+
it "returns nil" do
|
|
42
|
+
expect(Mongoid::StringifiedSymbol.demongoize(nil)).to be_nil
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe ".mongoize" do
|
|
48
|
+
|
|
49
|
+
context "when the object is not a symbol" do
|
|
50
|
+
|
|
51
|
+
it "returns the object" do
|
|
52
|
+
expect(Mongoid::StringifiedSymbol.mongoize("test")).to eq("test")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "returns the string" do
|
|
56
|
+
expect(Mongoid::StringifiedSymbol.mongoize([0,1,2])).to eq("[0, 1, 2]")
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "returns the string" do
|
|
60
|
+
expect(Mongoid::StringifiedSymbol.mongoize(2)).to eq("2")
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context "when the object is a symbol" do
|
|
65
|
+
|
|
66
|
+
it "returns a string" do
|
|
67
|
+
expect(Mongoid::StringifiedSymbol.mongoize(:test)).to eq("test")
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context "when the object is nil" do
|
|
72
|
+
|
|
73
|
+
it "returns nil" do
|
|
74
|
+
expect(Mongoid::StringifiedSymbol.mongoize(nil)).to be_nil
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe "#mongoize" do
|
|
80
|
+
|
|
81
|
+
it "returns self" do
|
|
82
|
+
expect(:test.mongoize).to eq(:test)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|