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
|
@@ -78,28 +78,98 @@ describe Mongoid::Factory do
|
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
context "when type is not preset" do
|
|
81
|
+
context "when using the default discriminator key" do
|
|
82
|
+
let(:attributes) do
|
|
83
|
+
{ "title" => "Sir" }
|
|
84
|
+
end
|
|
81
85
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
let(:person) do
|
|
87
|
+
described_class.build(Person, attributes)
|
|
88
|
+
end
|
|
85
89
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
90
|
+
it "instantiates based on the provided class" do
|
|
91
|
+
expect(person.title).to eq("Sir")
|
|
92
|
+
end
|
|
89
93
|
|
|
90
|
-
|
|
91
|
-
|
|
94
|
+
context "when the type is a symbol" do
|
|
95
|
+
|
|
96
|
+
let(:person) do
|
|
97
|
+
described_class.build(Person, { :_type => "Doctor" })
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "instantiates the subclass" do
|
|
101
|
+
expect(person.class).to eq(Doctor)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
92
104
|
end
|
|
93
|
-
end
|
|
94
105
|
|
|
95
|
-
|
|
106
|
+
context "when using a custom discriminator key" do
|
|
107
|
+
before do
|
|
108
|
+
Person.discriminator_key = "dkey"
|
|
109
|
+
end
|
|
96
110
|
|
|
97
|
-
|
|
98
|
-
|
|
111
|
+
after do
|
|
112
|
+
Person.discriminator_key = nil
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
let(:attributes) do
|
|
116
|
+
{ "title" => "Sir" }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
let(:person) do
|
|
120
|
+
described_class.build(Person, attributes)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "instantiates based on the provided class" do
|
|
124
|
+
expect(person.title).to eq("Sir")
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
context "when the type is a symbol" do
|
|
128
|
+
|
|
129
|
+
let(:person) do
|
|
130
|
+
described_class.build(Person, { :dkey => "Doctor" })
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it "instantiates the subclass" do
|
|
134
|
+
expect(person.class).to eq(Doctor)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
99
137
|
end
|
|
100
138
|
|
|
101
|
-
|
|
102
|
-
|
|
139
|
+
context "when using a custom discriminator key and value" do
|
|
140
|
+
before do
|
|
141
|
+
Person.discriminator_key = "dkey"
|
|
142
|
+
Doctor.discriminator_value = "dvalue"
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
after do
|
|
146
|
+
Person.discriminator_key = nil
|
|
147
|
+
Doctor.discriminator_value = nil
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
let(:attributes) do
|
|
151
|
+
{ "title" => "Sir", "dkey" => "dvalue" }
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
let(:doctor) do
|
|
155
|
+
described_class.build(Person, attributes)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it "instantiates based on the provided class" do
|
|
159
|
+
expect(doctor.title).to eq("Sir")
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "generates based on the provided class" do
|
|
163
|
+
expect(doctor).to be_a(Person)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it "sets the attributes" do
|
|
167
|
+
expect(doctor.title).to eq("Sir")
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it "has the correct discriminator key/value" do
|
|
171
|
+
expect(doctor.dkey).to eq("dvalue")
|
|
172
|
+
end
|
|
103
173
|
end
|
|
104
174
|
end
|
|
105
175
|
end
|
|
@@ -109,15 +179,64 @@ describe Mongoid::Factory do
|
|
|
109
179
|
context "when the attributes are nil" do
|
|
110
180
|
|
|
111
181
|
let(:document) do
|
|
112
|
-
described_class.from_db(
|
|
182
|
+
described_class.from_db(model_cls, nil)
|
|
113
183
|
end
|
|
114
184
|
|
|
115
|
-
|
|
116
|
-
|
|
185
|
+
context 'when model class does not use inheritance' do
|
|
186
|
+
context 'when model overwrites _id field to not have a default' do
|
|
187
|
+
let(:model_cls) { Idnodef }
|
|
188
|
+
|
|
189
|
+
it "generates based on the provided class" do
|
|
190
|
+
expect(document).to be_a(model_cls)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it "sets the attributes to empty" do
|
|
194
|
+
expect(document.attributes).to be_empty
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
context 'with default _id auto-assignment behavior' do
|
|
199
|
+
let(:model_cls) { Agency }
|
|
200
|
+
|
|
201
|
+
it "generates based on the provided class" do
|
|
202
|
+
expect(document).to be_a(model_cls)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it "sets the attributes to generated _id only" do
|
|
206
|
+
document.attributes.should == {'_id' => document.id}
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
context 'when model class is an inheritance root' do
|
|
212
|
+
let(:model_cls) { Address }
|
|
213
|
+
|
|
214
|
+
before do
|
|
215
|
+
# Ensure a child is defined
|
|
216
|
+
ShipmentAddress.superclass.should be model_cls
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
it "generates based on the provided class" do
|
|
220
|
+
expect(document).to be_a(model_cls)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it "sets the attributes to _type only" do
|
|
224
|
+
# Note that Address provides the _id override.
|
|
225
|
+
document.attributes.should == {'_type' => 'Address'}
|
|
226
|
+
end
|
|
117
227
|
end
|
|
118
228
|
|
|
119
|
-
|
|
120
|
-
|
|
229
|
+
context 'when model class is an inheritance leaf' do
|
|
230
|
+
let(:model_cls) { ShipmentAddress }
|
|
231
|
+
|
|
232
|
+
it "generates based on the provided class" do
|
|
233
|
+
expect(document).to be_a(model_cls)
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
it "sets the attributes to empty" do
|
|
237
|
+
# Note that Address provides the _id override.
|
|
238
|
+
document.attributes.should == {'_type' => 'ShipmentAddress'}
|
|
239
|
+
end
|
|
121
240
|
end
|
|
122
241
|
end
|
|
123
242
|
|
|
@@ -179,20 +298,80 @@ describe Mongoid::Factory do
|
|
|
179
298
|
|
|
180
299
|
context "when a type is not in the attributes" do
|
|
181
300
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
301
|
+
context "when using the default discriminator key" do
|
|
302
|
+
let(:attributes) do
|
|
303
|
+
{ "title" => "Sir" }
|
|
304
|
+
end
|
|
185
305
|
|
|
186
|
-
|
|
187
|
-
|
|
306
|
+
let(:document) do
|
|
307
|
+
described_class.from_db(Person, attributes)
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
it "generates based on the provided class" do
|
|
311
|
+
expect(document).to be_a(Person)
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
it "sets the attributes" do
|
|
315
|
+
expect(document.title).to eq("Sir")
|
|
316
|
+
end
|
|
188
317
|
end
|
|
189
318
|
|
|
190
|
-
|
|
191
|
-
|
|
319
|
+
context "when using a custom discriminator key" do
|
|
320
|
+
before do
|
|
321
|
+
Person.discriminator_key = "dkey"
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
after do
|
|
325
|
+
Person.discriminator_key = nil
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
let(:attributes) do
|
|
329
|
+
{ "title" => "Sir" }
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
let(:document) do
|
|
333
|
+
described_class.from_db(Person, attributes)
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
it "generates based on the provided class" do
|
|
337
|
+
expect(document).to be_a(Person)
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
it "sets the attributes" do
|
|
341
|
+
expect(document.title).to eq("Sir")
|
|
342
|
+
end
|
|
192
343
|
end
|
|
193
344
|
|
|
194
|
-
|
|
195
|
-
|
|
345
|
+
context "when using a custom discriminator key and discriminator value" do
|
|
346
|
+
before do
|
|
347
|
+
Person.discriminator_key = "dkey"
|
|
348
|
+
Person.discriminator_value = "dvalue"
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
after do
|
|
352
|
+
Person.discriminator_key = nil
|
|
353
|
+
Person.discriminator_value = nil
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
let(:attributes) do
|
|
357
|
+
{ "title" => "Sir" }
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
let(:document) do
|
|
361
|
+
described_class.from_db(Person, attributes)
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
it "generates based on the provided class" do
|
|
365
|
+
expect(document).to be_a(Person)
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
it "sets the attributes" do
|
|
369
|
+
expect(document.title).to eq("Sir")
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
it "has the correct discriminator key/value" do
|
|
373
|
+
expect(document.dkey).to eq("dvalue")
|
|
374
|
+
end
|
|
196
375
|
end
|
|
197
376
|
end
|
|
198
377
|
|
|
@@ -211,7 +390,61 @@ describe Mongoid::Factory do
|
|
|
211
390
|
person
|
|
212
391
|
}.to raise_exception(Mongoid::Errors::UnknownModel)
|
|
213
392
|
end
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
context 'when type does not correspond to a Class name with custom discriminator key' do
|
|
396
|
+
|
|
397
|
+
before do
|
|
398
|
+
Person.discriminator_key = "dkey"
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
after do
|
|
402
|
+
Person.discriminator_key = nil
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
let(:attributes) do
|
|
406
|
+
{ "title" => "Sir", "dkey" => "invalid_class_name" }
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
let(:person) do
|
|
410
|
+
described_class.from_db(Person, attributes)
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
it 'raises a exception' do
|
|
414
|
+
expect {
|
|
415
|
+
person
|
|
416
|
+
}.to raise_exception(Mongoid::Errors::UnknownModel)
|
|
417
|
+
end
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
context 'when type does not correspond to a custom discriminator_value' do
|
|
421
|
+
before do
|
|
422
|
+
Person.discriminator_value = "dvalue"
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
after do
|
|
426
|
+
Person.discriminator_value = nil
|
|
427
|
+
end
|
|
214
428
|
|
|
429
|
+
let(:attributes) do
|
|
430
|
+
{ "title" => "Sir", "_type" => "dvalue" }
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
let(:person) do
|
|
434
|
+
described_class.from_db(Person, attributes)
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
it "generates based on the provided class" do
|
|
438
|
+
expect(person).to be_a(Person)
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
it "sets the attributes" do
|
|
442
|
+
expect(person.title).to eq("Sir")
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
it "has the correct discriminator key/value" do
|
|
446
|
+
expect(person._type).to eq("dvalue")
|
|
447
|
+
end
|
|
215
448
|
end
|
|
216
449
|
|
|
217
450
|
context 'when type is correct but the instantiation raises a NoMethodError' do
|
data/spec/mongoid/fields_spec.rb
CHANGED
|
@@ -833,7 +833,8 @@ describe Mongoid::Fields do
|
|
|
833
833
|
end
|
|
834
834
|
|
|
835
835
|
it "does not return subclass defaults" do
|
|
836
|
-
expect(shape.pre_processed_defaults).to eq([ "_id", "x", "y"
|
|
836
|
+
expect(shape.pre_processed_defaults).to eq([ "_id", "x", "y" ])
|
|
837
|
+
expect(shape.post_processed_defaults).to eq([ "_type" ])
|
|
837
838
|
end
|
|
838
839
|
end
|
|
839
840
|
|
|
@@ -844,7 +845,8 @@ describe Mongoid::Fields do
|
|
|
844
845
|
end
|
|
845
846
|
|
|
846
847
|
it "has the parent and child defaults" do
|
|
847
|
-
expect(circle.pre_processed_defaults).to eq([ "_id", "x", "y", "
|
|
848
|
+
expect(circle.pre_processed_defaults).to eq([ "_id", "x", "y", "radius" ])
|
|
849
|
+
expect(circle.post_processed_defaults).to eq([ "_type" ])
|
|
848
850
|
end
|
|
849
851
|
end
|
|
850
852
|
end
|
|
@@ -1116,6 +1118,10 @@ describe Mongoid::Fields do
|
|
|
1116
1118
|
it "does not return subclass fields" do
|
|
1117
1119
|
expect(shape.fields.keys).to_not include("radius")
|
|
1118
1120
|
end
|
|
1121
|
+
|
|
1122
|
+
it 'includes _type field' do
|
|
1123
|
+
expect(shape.fields.keys).to include("_type")
|
|
1124
|
+
end
|
|
1119
1125
|
end
|
|
1120
1126
|
|
|
1121
1127
|
context "on subclasses" do
|
|
@@ -1135,6 +1141,28 @@ describe Mongoid::Fields do
|
|
|
1135
1141
|
it "includes the child fields" do
|
|
1136
1142
|
expect(circle.fields.keys).to include("radius")
|
|
1137
1143
|
end
|
|
1144
|
+
|
|
1145
|
+
it 'includes _type field' do
|
|
1146
|
+
expect(circle.fields.keys).to include("_type")
|
|
1147
|
+
end
|
|
1148
|
+
end
|
|
1149
|
+
|
|
1150
|
+
context "on new subclasses" do
|
|
1151
|
+
it "all subclasses get the discriminator key" do
|
|
1152
|
+
class DiscriminatorParent
|
|
1153
|
+
include Mongoid::Document
|
|
1154
|
+
end
|
|
1155
|
+
|
|
1156
|
+
class DiscriminatorChild1 < DiscriminatorParent
|
|
1157
|
+
end
|
|
1158
|
+
|
|
1159
|
+
class DiscriminatorChild2 < DiscriminatorParent
|
|
1160
|
+
end
|
|
1161
|
+
|
|
1162
|
+
expect(DiscriminatorParent.fields.keys).to include("_type")
|
|
1163
|
+
expect(DiscriminatorChild1.fields.keys).to include("_type")
|
|
1164
|
+
expect(DiscriminatorChild2.fields.keys).to include("_type")
|
|
1165
|
+
end
|
|
1138
1166
|
end
|
|
1139
1167
|
end
|
|
1140
1168
|
|
|
@@ -1352,4 +1380,22 @@ describe Mongoid::Fields do
|
|
|
1352
1380
|
end
|
|
1353
1381
|
end
|
|
1354
1382
|
end
|
|
1383
|
+
|
|
1384
|
+
describe '_type field' do
|
|
1385
|
+
context 'on parent class' do
|
|
1386
|
+
let(:shape) { Shape.new }
|
|
1387
|
+
|
|
1388
|
+
it 'is correctly set' do
|
|
1389
|
+
shape.attributes['_type'].should == 'Shape'
|
|
1390
|
+
end
|
|
1391
|
+
end
|
|
1392
|
+
|
|
1393
|
+
context 'on child class' do
|
|
1394
|
+
let(:circle) { Circle.new }
|
|
1395
|
+
|
|
1396
|
+
it 'is correctly set' do
|
|
1397
|
+
circle.attributes['_type'].should == 'Circle'
|
|
1398
|
+
end
|
|
1399
|
+
end
|
|
1400
|
+
end
|
|
1355
1401
|
end
|
|
@@ -479,6 +479,38 @@ describe Mongoid::Findable do
|
|
|
479
479
|
end
|
|
480
480
|
end
|
|
481
481
|
|
|
482
|
+
describe '.count' do
|
|
483
|
+
context 'when the collection is not empty' do
|
|
484
|
+
before do
|
|
485
|
+
Band.create!(name: "Tool")
|
|
486
|
+
Band.create!(name: "Photek")
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
it 'returns the currect count' do
|
|
490
|
+
expect(Band.count).to eq(2)
|
|
491
|
+
end
|
|
492
|
+
end
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
describe '.estimated_count' do
|
|
496
|
+
context 'when the collection is not empty' do
|
|
497
|
+
before do
|
|
498
|
+
Band.create(name: "Tool")
|
|
499
|
+
Band.create(name: "Photek")
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
it 'returns the correct count' do
|
|
503
|
+
expect(Band.estimated_count).to eq(2)
|
|
504
|
+
end
|
|
505
|
+
end
|
|
506
|
+
|
|
507
|
+
context 'when the collection is empty' do
|
|
508
|
+
it 'returns the correct count' do
|
|
509
|
+
expect(Band.estimated_count).to eq(0)
|
|
510
|
+
end
|
|
511
|
+
end
|
|
512
|
+
end
|
|
513
|
+
|
|
482
514
|
Mongoid::Criteria::Queryable::Selectable.forwardables.each do |method|
|
|
483
515
|
|
|
484
516
|
describe "##{method}" do
|
|
@@ -191,6 +191,32 @@ describe Mongoid::Indexable do
|
|
|
191
191
|
expect(spec.options).to eq(unique: false, background: true)
|
|
192
192
|
end
|
|
193
193
|
end
|
|
194
|
+
|
|
195
|
+
context "when using a custom discriminator_key" do
|
|
196
|
+
context "when indexes have not been added" do
|
|
197
|
+
let(:klass) do
|
|
198
|
+
Class.new do
|
|
199
|
+
include Mongoid::Document
|
|
200
|
+
self.discriminator_key = "dkey"
|
|
201
|
+
def self.hereditary?
|
|
202
|
+
true
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
before do
|
|
208
|
+
klass.add_indexes
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
let(:spec) do
|
|
212
|
+
klass.index_specification(dkey: 1)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
it "adds the _type index" do
|
|
216
|
+
expect(spec.options).to eq(unique: false, background: true)
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
end
|
|
194
220
|
end
|
|
195
221
|
|
|
196
222
|
describe ".index" do
|
|
@@ -383,7 +409,7 @@ describe Mongoid::Indexable do
|
|
|
383
409
|
end
|
|
384
410
|
end
|
|
385
411
|
|
|
386
|
-
context "when providing a
|
|
412
|
+
context "when providing a geospatial index" do
|
|
387
413
|
|
|
388
414
|
before do
|
|
389
415
|
klass.index({ location: "2d" }, { min: -200, max: 200, bits: 32 })
|
|
@@ -393,7 +419,7 @@ describe Mongoid::Indexable do
|
|
|
393
419
|
klass.index_specification(location: "2d").options
|
|
394
420
|
end
|
|
395
421
|
|
|
396
|
-
it "sets the
|
|
422
|
+
it "sets the geospatial index" do
|
|
397
423
|
expect(options).to eq({ min: -200, max: 200, bits: 32 })
|
|
398
424
|
end
|
|
399
425
|
end
|
|
@@ -26,12 +26,39 @@ describe Mongoid::Inspectable do
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
it "displays defined fields" do
|
|
29
|
-
expect(inspected).to include(
|
|
29
|
+
expect(inspected).to include(%q,title: "CEO",)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
it "displays field aliases" do
|
|
33
33
|
expect(inspected).to include("t(test):")
|
|
34
34
|
end
|
|
35
|
+
|
|
36
|
+
it "displays the default discriminator key" do
|
|
37
|
+
expect(inspected).to include(%q,_type: "Person",)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context "when using a custom discriminator key" do
|
|
42
|
+
|
|
43
|
+
before do
|
|
44
|
+
Person.discriminator_key = "dkey"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
after do
|
|
48
|
+
Person.discriminator_key = nil
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
let(:person) do
|
|
52
|
+
Person.new(title: "CEO")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
let(:inspected) do
|
|
56
|
+
person.inspect
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "displays the new discriminator key" do
|
|
60
|
+
expect(inspected).to include(%q,dkey: "Person",)
|
|
61
|
+
end
|
|
35
62
|
end
|
|
36
63
|
|
|
37
64
|
context "when allowing dynamic fields" do
|
|
@@ -45,7 +72,7 @@ describe Mongoid::Inspectable do
|
|
|
45
72
|
end
|
|
46
73
|
|
|
47
74
|
it "includes dynamic attributes" do
|
|
48
|
-
expect(inspected).to include(
|
|
75
|
+
expect(inspected).to include(%q,some_attribute: "foo",)
|
|
49
76
|
end
|
|
50
77
|
end
|
|
51
78
|
end
|
|
@@ -1707,8 +1707,8 @@ describe Mongoid::Interceptable do
|
|
|
1707
1707
|
context "when loading a model multiple times" do
|
|
1708
1708
|
|
|
1709
1709
|
before do
|
|
1710
|
-
load "
|
|
1711
|
-
load "
|
|
1710
|
+
load File.join(MODELS, "callback_test.rb")
|
|
1711
|
+
load File.join(MODELS, "callback_test.rb")
|
|
1712
1712
|
end
|
|
1713
1713
|
|
|
1714
1714
|
let(:callback) do
|