mongoid 7.1.0.rc0 → 7.2.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +6 -6
- data/LICENSE +1 -1
- data/README.md +14 -7
- data/Rakefile +21 -0
- data/lib/config/locales/en.yml +42 -6
- data/lib/mongoid.rb +26 -2
- data/lib/mongoid/association/accessors.rb +37 -2
- data/lib/mongoid/association/depending.rb +1 -6
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -1
- data/lib/mongoid/association/embedded/embeds_one.rb +2 -1
- data/lib/mongoid/association/many.rb +5 -4
- data/lib/mongoid/association/proxy.rb +6 -4
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +38 -2
- data/lib/mongoid/association/referenced/eager.rb +29 -9
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +30 -15
- data/lib/mongoid/association/referenced/has_many/proxy.rb +11 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/atomic.rb +13 -3
- data/lib/mongoid/atomic/modifiers.rb +1 -1
- data/lib/mongoid/attributes.rb +28 -20
- data/lib/mongoid/attributes/dynamic.rb +1 -1
- data/lib/mongoid/clients/factory.rb +19 -2
- data/lib/mongoid/clients/options.rb +8 -8
- data/lib/mongoid/clients/sessions.rb +20 -4
- data/lib/mongoid/clients/storage_options.rb +5 -5
- data/lib/mongoid/composable.rb +1 -0
- data/lib/mongoid/config.rb +45 -12
- data/lib/mongoid/config/options.rb +5 -2
- data/lib/mongoid/contextual.rb +5 -4
- data/lib/mongoid/contextual/geo_near.rb +3 -2
- data/lib/mongoid/contextual/map_reduce.rb +3 -2
- data/lib/mongoid/contextual/mongo.rb +25 -5
- data/lib/mongoid/copyable.rb +2 -2
- data/lib/mongoid/criteria.rb +80 -11
- data/lib/mongoid/criteria/modifiable.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -6
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +12 -0
- data/lib/mongoid/criteria/queryable/key.rb +1 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +75 -8
- data/lib/mongoid/criteria/queryable/pipeline.rb +3 -2
- data/lib/mongoid/criteria/queryable/selectable.rb +141 -19
- data/lib/mongoid/criteria/queryable/selector.rb +3 -3
- data/lib/mongoid/criteria/queryable/storable.rb +106 -101
- data/lib/mongoid/document.rb +15 -3
- data/lib/mongoid/errors.rb +7 -0
- data/lib/mongoid/errors/eager_load.rb +2 -0
- data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
- data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
- data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
- data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
- data/lib/mongoid/errors/invalid_query.rb +41 -0
- data/lib/mongoid/errors/no_client_config.rb +2 -2
- data/lib/mongoid/errors/no_default_client.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +4 -2
- data/lib/mongoid/extensions/regexp.rb +1 -1
- data/lib/mongoid/factory.rb +27 -10
- data/lib/mongoid/fields.rb +2 -1
- data/lib/mongoid/fields/standard.rb +2 -1
- data/lib/mongoid/fields/validators/macro.rb +26 -10
- data/lib/mongoid/findable.rb +55 -18
- data/lib/mongoid/indexable.rb +2 -2
- data/lib/mongoid/interceptable.rb +5 -1
- data/lib/mongoid/matchable.rb +1 -149
- data/lib/mongoid/matcher.rb +127 -0
- data/lib/mongoid/matcher/all.rb +22 -0
- data/lib/mongoid/matcher/and.rb +21 -0
- data/lib/mongoid/matcher/elem_match.rb +35 -0
- data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
- data/lib/mongoid/matcher/eq.rb +11 -0
- data/lib/mongoid/matcher/eq_impl.rb +32 -0
- data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
- data/lib/mongoid/matcher/exists.rb +15 -0
- data/lib/mongoid/matcher/expression.rb +40 -0
- data/lib/mongoid/matcher/expression_operator.rb +19 -0
- data/lib/mongoid/matcher/field_expression.rb +63 -0
- data/lib/mongoid/matcher/field_operator.rb +52 -0
- data/lib/mongoid/matcher/gt.rb +17 -0
- data/lib/mongoid/matcher/gte.rb +17 -0
- data/lib/mongoid/matcher/in.rb +25 -0
- data/lib/mongoid/matcher/lt.rb +17 -0
- data/lib/mongoid/matcher/lte.rb +17 -0
- data/lib/mongoid/matcher/ne.rb +16 -0
- data/lib/mongoid/matcher/nin.rb +11 -0
- data/lib/mongoid/matcher/nor.rb +25 -0
- data/lib/mongoid/matcher/not.rb +29 -0
- data/lib/mongoid/matcher/or.rb +21 -0
- data/lib/mongoid/matcher/regex.rb +41 -0
- data/lib/mongoid/matcher/size.rb +26 -0
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/pushable.rb +11 -2
- data/lib/mongoid/persistence_context.rb +6 -6
- data/lib/mongoid/query_cache.rb +83 -38
- data/lib/mongoid/railties/database.rake +7 -0
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/serializable.rb +11 -3
- data/lib/mongoid/shardable.rb +56 -4
- data/lib/mongoid/tasks/database.rake +10 -5
- data/lib/mongoid/tasks/database.rb +83 -0
- data/lib/mongoid/timestamps/timeless.rb +3 -1
- data/lib/mongoid/traversable.rb +111 -4
- data/lib/mongoid/validatable/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +32 -23
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/spec/integration/app_spec.rb +254 -0
- data/spec/integration/associations/embedded_spec.rb +148 -0
- data/spec/integration/associations/has_many_spec.rb +69 -0
- data/spec/integration/associations/has_one_spec.rb +69 -0
- data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
- data/spec/integration/atomic/modifiers_spec.rb +117 -0
- data/spec/integration/bson_regexp_raw_spec.rb +20 -0
- data/spec/integration/criteria/date_field_spec.rb +41 -0
- data/spec/integration/criteria/logical_spec.rb +13 -0
- data/spec/integration/discriminator_key_spec.rb +354 -0
- data/spec/integration/discriminator_value_spec.rb +207 -0
- data/spec/integration/document_spec.rb +22 -0
- data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
- data/spec/integration/matcher_operator_data/all.yml +140 -0
- data/spec/integration/matcher_operator_data/and.yml +93 -0
- data/spec/integration/matcher_operator_data/elem_match.yml +363 -0
- data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
- data/spec/integration/matcher_operator_data/eq.yml +191 -0
- data/spec/integration/matcher_operator_data/exists.yml +213 -0
- data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
- data/spec/integration/matcher_operator_data/gt.yml +132 -0
- data/spec/integration/matcher_operator_data/gte.yml +132 -0
- data/spec/integration/matcher_operator_data/implicit.yml +331 -0
- data/spec/integration/matcher_operator_data/implicit_traversal.yml +16 -0
- data/spec/integration/matcher_operator_data/in.yml +194 -0
- data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
- data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
- data/spec/integration/matcher_operator_data/lt.yml +132 -0
- data/spec/integration/matcher_operator_data/lte.yml +132 -0
- data/spec/integration/matcher_operator_data/multiple.yml +29 -0
- data/spec/integration/matcher_operator_data/ne.yml +150 -0
- data/spec/integration/matcher_operator_data/nin.yml +114 -0
- data/spec/integration/matcher_operator_data/nor.yml +126 -0
- data/spec/integration/matcher_operator_data/not.yml +196 -0
- data/spec/integration/matcher_operator_data/or.yml +137 -0
- data/spec/integration/matcher_operator_data/regex.yml +174 -0
- data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
- data/spec/integration/matcher_operator_data/size.yml +174 -0
- data/spec/integration/matcher_operator_spec.rb +100 -0
- data/spec/integration/matcher_spec.rb +189 -0
- data/spec/integration/server_query_spec.rb +142 -0
- data/spec/integration/shardable_spec.rb +149 -0
- data/spec/lite_spec_helper.rb +15 -4
- data/spec/mongoid/association/accessors_spec.rb +238 -63
- data/spec/mongoid/association/depending_spec.rb +78 -26
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +33 -0
- data/spec/mongoid/association/embedded/embeds_many_models.rb +20 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +10 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -2
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +193 -10
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +140 -1
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +146 -68
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +462 -187
- data/spec/mongoid/association/referenced/has_many_models.rb +9 -0
- data/spec/mongoid/association/referenced/has_one_models.rb +9 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
- data/spec/mongoid/atomic_spec.rb +23 -0
- data/spec/mongoid/attributes/nested_spec.rb +1 -1
- data/spec/mongoid/attributes_spec.rb +19 -7
- data/spec/mongoid/changeable_spec.rb +23 -0
- data/spec/mongoid/clients/factory_spec.rb +45 -8
- data/spec/mongoid/clients/options_spec.rb +11 -11
- data/spec/mongoid/clients/sessions_spec.rb +9 -10
- data/spec/mongoid/clients/transactions_spec.rb +20 -8
- data/spec/mongoid/clients_spec.rb +2 -2
- data/spec/mongoid/config_spec.rb +28 -0
- data/spec/mongoid/contextual/atomic_spec.rb +22 -11
- data/spec/mongoid/contextual/geo_near_spec.rb +11 -2
- data/spec/mongoid/contextual/map_reduce_spec.rb +20 -5
- data/spec/mongoid/contextual/mongo_spec.rb +146 -69
- data/spec/mongoid/copyable_spec.rb +153 -1
- data/spec/mongoid/copyable_spec_models.rb +14 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +19 -7
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +28 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +45 -12
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1051 -392
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +136 -82
- data/spec/mongoid/criteria/queryable/storable_spec.rb +80 -2
- data/spec/mongoid/criteria_spec.rb +240 -41
- data/spec/mongoid/document_fields_spec.rb +29 -0
- data/spec/mongoid/document_persistence_context_spec.rb +33 -0
- data/spec/mongoid/document_spec.rb +89 -15
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/errors/no_client_config_spec.rb +2 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +3 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -3
- data/spec/mongoid/factory_spec.rb +261 -28
- data/spec/mongoid/fields_spec.rb +72 -3
- data/spec/mongoid/findable_spec.rb +32 -0
- data/spec/mongoid/indexable_spec.rb +34 -6
- data/spec/mongoid/inspectable_spec.rb +29 -2
- data/spec/mongoid/interceptable_spec.rb +64 -2
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +259 -0
- data/spec/mongoid/matcher/extract_attribute_spec.rb +47 -0
- data/spec/mongoid/persistable/creatable_spec.rb +108 -25
- data/spec/mongoid/persistable/deletable_spec.rb +86 -0
- data/spec/mongoid/persistable/pushable_spec.rb +55 -1
- data/spec/mongoid/persistable/savable_spec.rb +174 -16
- data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
- data/spec/mongoid/query_cache_spec.rb +498 -29
- data/spec/mongoid/relations/proxy_spec.rb +1 -1
- data/spec/mongoid/reloadable_spec.rb +72 -0
- data/spec/mongoid/scopable_spec.rb +2 -1
- data/spec/mongoid/serializable_spec.rb +149 -20
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +69 -16
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +1 -1
- data/spec/mongoid/traversable_spec.rb +1100 -0
- data/spec/spec_helper.rb +4 -33
- data/spec/support/child_process_helper.rb +79 -0
- data/spec/support/cluster_config.rb +3 -3
- data/spec/support/constraints.rb +50 -10
- data/spec/support/expectations.rb +3 -1
- data/spec/support/helpers.rb +11 -0
- data/spec/support/lite_constraints.rb +22 -0
- data/spec/{app → support}/models/account.rb +0 -0
- data/spec/{app → support}/models/acolyte.rb +0 -0
- data/spec/{app → support}/models/actor.rb +1 -1
- data/spec/{app → support}/models/actress.rb +0 -0
- data/spec/{app → support}/models/address.rb +0 -0
- data/spec/{app → support}/models/address_component.rb +0 -0
- data/spec/{app → support}/models/address_number.rb +0 -0
- data/spec/{app → support}/models/agency.rb +0 -0
- data/spec/{app → support}/models/agent.rb +0 -0
- data/spec/{app → support}/models/album.rb +0 -0
- data/spec/{app → support}/models/alert.rb +0 -0
- data/spec/{app → support}/models/animal.rb +0 -0
- data/spec/{app → support}/models/answer.rb +0 -0
- data/spec/{app → support}/models/appointment.rb +0 -0
- data/spec/support/models/armrest.rb +10 -0
- data/spec/{app → support}/models/array_field.rb +0 -0
- data/spec/{app → support}/models/article.rb +0 -0
- data/spec/{app → support}/models/artist.rb +0 -0
- data/spec/{app → support}/models/artwork.rb +0 -0
- data/spec/{app → support}/models/audio.rb +0 -0
- data/spec/{app → support}/models/augmentation.rb +0 -0
- data/spec/{app → support}/models/author.rb +0 -0
- data/spec/{app → support}/models/baby.rb +0 -0
- data/spec/{app → support}/models/band.rb +0 -0
- data/spec/{app → support}/models/bar.rb +0 -0
- data/spec/{app → support}/models/basic.rb +0 -0
- data/spec/{app → support}/models/bed.rb +0 -0
- data/spec/{app → support}/models/big_palette.rb +0 -0
- data/spec/{app → support}/models/birthday.rb +0 -0
- data/spec/{app → support}/models/bomb.rb +0 -0
- data/spec/{app → support}/models/book.rb +0 -0
- data/spec/{app → support}/models/breed.rb +0 -0
- data/spec/{app → support}/models/browser.rb +1 -1
- data/spec/{app → support}/models/building.rb +0 -0
- data/spec/{app → support}/models/building_address.rb +0 -0
- data/spec/{app → support}/models/bus.rb +0 -0
- data/spec/{app → support}/models/business.rb +0 -0
- data/spec/{app → support}/models/callback_test.rb +0 -0
- data/spec/{app → support}/models/canvas.rb +1 -1
- data/spec/{app → support}/models/car.rb +0 -0
- data/spec/{app → support}/models/cat.rb +0 -0
- data/spec/{app → support}/models/category.rb +0 -0
- data/spec/{app → support}/models/child.rb +0 -0
- data/spec/{app → support}/models/child_doc.rb +0 -0
- data/spec/{app → support}/models/church.rb +0 -0
- data/spec/{app → support}/models/circle.rb +0 -0
- data/spec/{app → support}/models/circuit.rb +0 -0
- data/spec/{app → support}/models/circus.rb +0 -0
- data/spec/{app → support}/models/code.rb +0 -0
- data/spec/support/models/coding.rb +4 -0
- data/spec/support/models/coding/pull_request.rb +12 -0
- data/spec/{app → support}/models/comment.rb +0 -0
- data/spec/{app → support}/models/company.rb +0 -0
- data/spec/{app → support}/models/consumption_period.rb +0 -0
- data/spec/{app → support}/models/contextable_item.rb +0 -0
- data/spec/{app → support}/models/contractor.rb +0 -0
- data/spec/{app → support}/models/cookie.rb +0 -0
- data/spec/{app → support}/models/country_code.rb +0 -0
- data/spec/{app → support}/models/courier_job.rb +0 -0
- data/spec/support/models/crate.rb +13 -0
- data/spec/support/models/deed.rb +8 -0
- data/spec/{app → support}/models/definition.rb +0 -0
- data/spec/support/models/delegating_patient.rb +16 -0
- data/spec/{app → support}/models/description.rb +0 -0
- data/spec/{app → support}/models/dictionary.rb +0 -0
- data/spec/{app → support}/models/division.rb +0 -0
- data/spec/{app → support}/models/doctor.rb +0 -0
- data/spec/{app → support}/models/dog.rb +0 -0
- data/spec/{app → support}/models/dokument.rb +0 -0
- data/spec/{app → support}/models/draft.rb +0 -0
- data/spec/{app → support}/models/dragon.rb +0 -0
- data/spec/{app → support}/models/driver.rb +1 -1
- data/spec/{app → support}/models/drug.rb +0 -0
- data/spec/{app → support}/models/dungeon.rb +0 -0
- data/spec/{app → support}/models/edit.rb +0 -0
- data/spec/{app → support}/models/email.rb +0 -0
- data/spec/{app → support}/models/employer.rb +0 -0
- data/spec/{app → support}/models/entry.rb +0 -0
- data/spec/{app → support}/models/eraser.rb +0 -0
- data/spec/{app → support}/models/even.rb +0 -0
- data/spec/{app → support}/models/event.rb +0 -0
- data/spec/{app → support}/models/exhibition.rb +0 -0
- data/spec/{app → support}/models/exhibitor.rb +0 -0
- data/spec/{app → support}/models/explosion.rb +0 -0
- data/spec/{app → support}/models/eye.rb +0 -0
- data/spec/{app → support}/models/eye_bowl.rb +0 -0
- data/spec/{app → support}/models/face.rb +0 -0
- data/spec/{app → support}/models/favorite.rb +0 -0
- data/spec/{app → support}/models/filesystem.rb +0 -0
- data/spec/{app → support}/models/fire_hydrant.rb +0 -0
- data/spec/{app → support}/models/firefox.rb +0 -0
- data/spec/{app → support}/models/fish.rb +0 -0
- data/spec/{app → support}/models/folder.rb +0 -0
- data/spec/{app → support}/models/folder_item.rb +0 -0
- data/spec/{app → support}/models/fruits.rb +0 -0
- data/spec/{app → support}/models/game.rb +0 -0
- data/spec/{app → support}/models/ghost.rb +0 -0
- data/spec/support/models/guitar.rb +5 -0
- data/spec/{app → support}/models/home.rb +0 -0
- data/spec/{app → support}/models/house.rb +0 -0
- data/spec/{app → support}/models/html_writer.rb +0 -0
- data/spec/{app → support}/models/id_key.rb +0 -0
- data/spec/support/models/idnodef.rb +8 -0
- data/spec/{app → support}/models/image.rb +0 -0
- data/spec/{app → support}/models/implant.rb +0 -0
- data/spec/support/models/instrument.rb +9 -0
- data/spec/{app → support}/models/item.rb +1 -1
- data/spec/{app → support}/models/jar.rb +0 -0
- data/spec/{app → support}/models/kaleidoscope.rb +0 -0
- data/spec/{app → support}/models/kangaroo.rb +0 -0
- data/spec/{app → support}/models/label.rb +0 -0
- data/spec/{app → support}/models/language.rb +0 -0
- data/spec/{app → support}/models/lat_lng.rb +0 -0
- data/spec/{app → support}/models/league.rb +0 -0
- data/spec/{app → support}/models/learner.rb +0 -0
- data/spec/{app → support}/models/line_item.rb +0 -0
- data/spec/{app → support}/models/location.rb +0 -0
- data/spec/{app → support}/models/login.rb +0 -0
- data/spec/{app → support}/models/manufacturer.rb +0 -0
- data/spec/{app → support}/models/meat.rb +0 -0
- data/spec/{app → support}/models/membership.rb +0 -0
- data/spec/{app → support}/models/message.rb +0 -0
- data/spec/{app → support}/models/minim.rb +0 -0
- data/spec/{app → support}/models/mixed_drink.rb +0 -0
- data/spec/support/models/mop.rb +16 -0
- data/spec/{app → support}/models/movie.rb +0 -0
- data/spec/{app → support}/models/my_hash.rb +0 -0
- data/spec/{app → support}/models/name.rb +0 -0
- data/spec/{app → support}/models/name_only.rb +0 -0
- data/spec/{app → support}/models/node.rb +0 -0
- data/spec/{app → support}/models/note.rb +0 -0
- data/spec/{app → support}/models/odd.rb +0 -0
- data/spec/{app → support}/models/ordered_post.rb +0 -0
- data/spec/{app → support}/models/ordered_preference.rb +0 -0
- data/spec/{app → support}/models/oscar.rb +0 -0
- data/spec/{app → support}/models/other_owner_object.rb +0 -0
- data/spec/{app → support}/models/override.rb +0 -0
- data/spec/{app → support}/models/ownable.rb +0 -0
- data/spec/{app → support}/models/owner.rb +2 -0
- data/spec/{app → support}/models/pack.rb +0 -0
- data/spec/{app → support}/models/page.rb +0 -0
- data/spec/{app → support}/models/page_question.rb +0 -0
- data/spec/{app → support}/models/palette.rb +1 -1
- data/spec/{app → support}/models/parent.rb +0 -0
- data/spec/{app → support}/models/parent_doc.rb +0 -0
- data/spec/{app → support}/models/passport.rb +1 -0
- data/spec/{app → support}/models/patient.rb +0 -0
- data/spec/{app → support}/models/pdf_writer.rb +0 -0
- data/spec/{app → support}/models/pencil.rb +0 -0
- data/spec/{app → support}/models/person.rb +1 -1
- data/spec/{app → support}/models/pet.rb +0 -0
- data/spec/{app → support}/models/pet_owner.rb +0 -0
- data/spec/{app → support}/models/phone.rb +1 -0
- data/spec/support/models/piano.rb +5 -0
- data/spec/{app → support}/models/pizza.rb +0 -0
- data/spec/{app → support}/models/player.rb +0 -0
- data/spec/{app → support}/models/post.rb +0 -0
- data/spec/{app → support}/models/post_genre.rb +0 -0
- data/spec/{app → support}/models/powerup.rb +0 -0
- data/spec/{app → support}/models/preference.rb +0 -0
- data/spec/{app → support}/models/princess.rb +0 -0
- data/spec/{app → support}/models/product.rb +0 -0
- data/spec/support/models/profile.rb +18 -0
- data/spec/{app → support}/models/pronunciation.rb +0 -0
- data/spec/{app → support}/models/pub.rb +0 -0
- data/spec/support/models/publication.rb +5 -0
- data/spec/support/models/publication/encyclopedia.rb +12 -0
- data/spec/support/models/publication/review.rb +14 -0
- data/spec/{app → support}/models/purchase.rb +0 -0
- data/spec/{app → support}/models/question.rb +0 -0
- data/spec/{app → support}/models/quiz.rb +0 -0
- data/spec/{app → support}/models/rating.rb +0 -0
- data/spec/{app → support}/models/record.rb +0 -0
- data/spec/{app → support}/models/registry.rb +0 -0
- data/spec/{app → support}/models/role.rb +0 -0
- data/spec/{app → support}/models/root_category.rb +0 -0
- data/spec/{app → support}/models/sandwich.rb +0 -0
- data/spec/{app → support}/models/scheduler.rb +0 -0
- data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
- data/spec/support/models/seat.rb +25 -0
- data/spec/{app → support}/models/seo.rb +0 -0
- data/spec/{app → support}/models/series.rb +0 -0
- data/spec/{app → support}/models/server.rb +0 -0
- data/spec/{app → support}/models/service.rb +0 -0
- data/spec/{app → support}/models/shape.rb +2 -2
- data/spec/{app → support}/models/shelf.rb +0 -0
- data/spec/{app → support}/models/shipment_address.rb +0 -0
- data/spec/{app → support}/models/shipping_container.rb +0 -0
- data/spec/{app → support}/models/shipping_pack.rb +0 -0
- data/spec/{app → support}/models/shop.rb +0 -0
- data/spec/{app → support}/models/short_agent.rb +0 -0
- data/spec/{app → support}/models/short_quiz.rb +0 -0
- data/spec/{app → support}/models/simple.rb +0 -0
- data/spec/{app → support}/models/slave.rb +0 -0
- data/spec/{app → support}/models/song.rb +0 -0
- data/spec/{app → support}/models/sound.rb +0 -0
- data/spec/{app → support}/models/square.rb +0 -0
- data/spec/{app → support}/models/staff.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
- data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
- data/spec/{app → support}/models/strategy.rb +0 -0
- data/spec/{app → support}/models/sub_item.rb +0 -0
- data/spec/{app → support}/models/subscription.rb +0 -0
- data/spec/{app → support}/models/survey.rb +0 -0
- data/spec/{app → support}/models/symptom.rb +0 -0
- data/spec/support/models/system_role.rb +7 -0
- data/spec/{app → support}/models/tag.rb +0 -0
- data/spec/{app → support}/models/target.rb +0 -0
- data/spec/{app → support}/models/template.rb +0 -0
- data/spec/{app → support}/models/thing.rb +0 -0
- data/spec/{app → support}/models/title.rb +0 -0
- data/spec/{app → support}/models/tool.rb +2 -2
- data/spec/{app → support}/models/topping.rb +0 -0
- data/spec/support/models/toy.rb +10 -0
- data/spec/{app → support}/models/track.rb +0 -0
- data/spec/{app → support}/models/translation.rb +0 -0
- data/spec/{app → support}/models/tree.rb +0 -0
- data/spec/{app → support}/models/truck.rb +2 -0
- data/spec/{app → support}/models/updatable.rb +0 -0
- data/spec/{app → support}/models/user.rb +0 -0
- data/spec/{app → support}/models/user_account.rb +0 -0
- data/spec/{app → support}/models/validation_callback.rb +0 -0
- data/spec/{app → support}/models/vehicle.rb +7 -2
- data/spec/{app → support}/models/version.rb +0 -0
- data/spec/{app → support}/models/vertex.rb +0 -0
- data/spec/{app → support}/models/vet_visit.rb +0 -0
- data/spec/{app → support}/models/video.rb +0 -0
- data/spec/{app → support}/models/video_game.rb +0 -0
- data/spec/{app → support}/models/weapon.rb +0 -0
- data/spec/{app → support}/models/wiki_page.rb +0 -0
- data/spec/{app → support}/models/word.rb +0 -0
- data/spec/{app → support}/models/word_origin.rb +0 -0
- data/spec/{app → support}/models/writer.rb +2 -2
- data/spec/support/session_registry.rb +50 -0
- data/spec/support/spec_config.rb +13 -5
- data/spec/support/spec_organizer.rb +130 -0
- metadata +882 -752
- metadata.gz.sig +0 -0
- data/lib/mongoid/matchable/all.rb +0 -30
- data/lib/mongoid/matchable/and.rb +0 -32
- data/lib/mongoid/matchable/default.rb +0 -121
- data/lib/mongoid/matchable/elem_match.rb +0 -36
- data/lib/mongoid/matchable/eq.rb +0 -23
- data/lib/mongoid/matchable/exists.rb +0 -25
- data/lib/mongoid/matchable/gt.rb +0 -25
- data/lib/mongoid/matchable/gte.rb +0 -25
- data/lib/mongoid/matchable/in.rb +0 -26
- data/lib/mongoid/matchable/lt.rb +0 -25
- data/lib/mongoid/matchable/lte.rb +0 -25
- data/lib/mongoid/matchable/ne.rb +0 -23
- data/lib/mongoid/matchable/nin.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -38
- data/lib/mongoid/matchable/or.rb +0 -35
- data/lib/mongoid/matchable/regexp.rb +0 -30
- data/lib/mongoid/matchable/size.rb +0 -23
- data/spec/mongoid/matchable/all_spec.rb +0 -34
- data/spec/mongoid/matchable/and_spec.rb +0 -190
- data/spec/mongoid/matchable/default_spec.rb +0 -140
- data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
- data/spec/mongoid/matchable/eq_spec.rb +0 -49
- data/spec/mongoid/matchable/exists_spec.rb +0 -60
- data/spec/mongoid/matchable/gt_spec.rb +0 -89
- data/spec/mongoid/matchable/gte_spec.rb +0 -87
- data/spec/mongoid/matchable/in_spec.rb +0 -52
- data/spec/mongoid/matchable/lt_spec.rb +0 -88
- data/spec/mongoid/matchable/lte_spec.rb +0 -88
- data/spec/mongoid/matchable/ne_spec.rb +0 -49
- data/spec/mongoid/matchable/nin_spec.rb +0 -51
- data/spec/mongoid/matchable/nor_spec.rb +0 -210
- data/spec/mongoid/matchable/or_spec.rb +0 -134
- data/spec/mongoid/matchable/regexp_spec.rb +0 -62
- data/spec/mongoid/matchable/size_spec.rb +0 -28
- data/spec/mongoid/matchable_spec.rb +0 -856
@@ -55,7 +55,8 @@ describe Mongoid::Clients::Sessions do
|
|
55
55
|
|
56
56
|
context 'when a transaction is used on a model class' do
|
57
57
|
|
58
|
-
context 'when transactions are supported'
|
58
|
+
context 'when transactions are supported' do
|
59
|
+
require_transaction_support
|
59
60
|
|
60
61
|
around do |example|
|
61
62
|
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
@@ -191,7 +192,10 @@ describe Mongoid::Clients::Sessions do
|
|
191
192
|
end
|
192
193
|
end
|
193
194
|
|
194
|
-
context 'when sessions are supported but transactions are not'
|
195
|
+
context 'when sessions are supported but transactions are not' do
|
196
|
+
min_server_version '3.6'
|
197
|
+
# Could also test 4.0 in sharded cluster
|
198
|
+
max_server_version '3.6'
|
195
199
|
|
196
200
|
let!(:error) do
|
197
201
|
e = nil
|
@@ -222,7 +226,8 @@ describe Mongoid::Clients::Sessions do
|
|
222
226
|
end
|
223
227
|
end
|
224
228
|
|
225
|
-
context 'when transactions are supported'
|
229
|
+
context 'when transactions are supported' do
|
230
|
+
require_transaction_support
|
226
231
|
|
227
232
|
around do |example|
|
228
233
|
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
@@ -345,16 +350,23 @@ describe Mongoid::Clients::Sessions do
|
|
345
350
|
end
|
346
351
|
end
|
347
352
|
|
348
|
-
context 'when sessions are supported but transactions are not'
|
353
|
+
context 'when sessions are supported but transactions are not' do
|
354
|
+
min_server_version '3.6'
|
355
|
+
# Could also test 4.0 in sharded cluster
|
356
|
+
max_server_version '3.6'
|
349
357
|
|
350
358
|
around do |example|
|
351
359
|
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
352
360
|
Mongoid::Clients.with_name(:other).command(create: :people)
|
353
|
-
|
354
|
-
|
355
|
-
|
361
|
+
|
362
|
+
begin
|
363
|
+
subscriber.clear_events!
|
364
|
+
person.with(client: :other) do
|
365
|
+
example.run
|
366
|
+
end
|
367
|
+
ensure
|
368
|
+
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
356
369
|
end
|
357
|
-
Mongoid::Clients.with_name(:other).database.collections.each(&:drop)
|
358
370
|
end
|
359
371
|
|
360
372
|
let!(:error) do
|
@@ -728,7 +728,7 @@ describe Mongoid::Clients do
|
|
728
728
|
end
|
729
729
|
end
|
730
730
|
|
731
|
-
describe ".store_in"
|
731
|
+
describe ".store_in" do
|
732
732
|
|
733
733
|
context "when provided a non hash" do
|
734
734
|
|
@@ -765,7 +765,7 @@ describe Mongoid::Clients do
|
|
765
765
|
end
|
766
766
|
end
|
767
767
|
|
768
|
-
describe ".with"
|
768
|
+
describe ".with" do
|
769
769
|
|
770
770
|
context "when changing write concern options" do
|
771
771
|
|
data/spec/mongoid/config_spec.rb
CHANGED
@@ -197,6 +197,34 @@ describe Mongoid::Config do
|
|
197
197
|
end
|
198
198
|
end
|
199
199
|
|
200
|
+
context 'when discriminator_key override' do
|
201
|
+
context 'is not set in the config' do
|
202
|
+
it 'has the value _type by default' do
|
203
|
+
Mongoid::Config.reset
|
204
|
+
configuration = CONFIG.merge(options: {})
|
205
|
+
|
206
|
+
Mongoid.configure { |config| config.load_configuration(configuration) }
|
207
|
+
|
208
|
+
expect(Mongoid::Config.discriminator_key).to be("_type")
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
context 'is set in the config' do
|
213
|
+
it 'sets the value' do
|
214
|
+
Mongoid::Config.reset
|
215
|
+
configuration = CONFIG.merge(options: {discriminator_key: "test"})
|
216
|
+
|
217
|
+
Mongoid.configure { |config| config.load_configuration(configuration) }
|
218
|
+
|
219
|
+
expect(Mongoid::Config.discriminator_key).to be("test")
|
220
|
+
end
|
221
|
+
|
222
|
+
it 'is set globally' do
|
223
|
+
expect(Mongoid.discriminator_key).to be("test")
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
200
228
|
describe "#load!" do
|
201
229
|
|
202
230
|
before(:all) do
|
@@ -77,7 +77,8 @@ describe Mongoid::Contextual::Atomic do
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
context 'when the criteria has a collation'
|
80
|
+
context 'when the criteria has a collation' do
|
81
|
+
min_server_version '3.4'
|
81
82
|
|
82
83
|
let(:criteria) do
|
83
84
|
Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
|
@@ -173,7 +174,8 @@ describe Mongoid::Contextual::Atomic do
|
|
173
174
|
end
|
174
175
|
end
|
175
176
|
|
176
|
-
context 'when the criteria has a collation'
|
177
|
+
context 'when the criteria has a collation' do
|
178
|
+
min_server_version '3.4'
|
177
179
|
|
178
180
|
let(:criteria) do
|
179
181
|
Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
|
@@ -244,7 +246,8 @@ describe Mongoid::Contextual::Atomic do
|
|
244
246
|
end
|
245
247
|
end
|
246
248
|
|
247
|
-
context 'when the criteria has a collation'
|
249
|
+
context 'when the criteria has a collation' do
|
250
|
+
min_server_version '3.4'
|
248
251
|
|
249
252
|
let!(:depeche_mode) do
|
250
253
|
Band.create(members: [ "Dave" ], likes: 60)
|
@@ -323,7 +326,8 @@ describe Mongoid::Contextual::Atomic do
|
|
323
326
|
end
|
324
327
|
end
|
325
328
|
|
326
|
-
context 'when the criteria has a collation'
|
329
|
+
context 'when the criteria has a collation' do
|
330
|
+
min_server_version '3.4'
|
327
331
|
|
328
332
|
let!(:depeche_mode) do
|
329
333
|
Band.create(members: [ "Dave" ])
|
@@ -395,7 +399,8 @@ describe Mongoid::Contextual::Atomic do
|
|
395
399
|
end
|
396
400
|
end
|
397
401
|
|
398
|
-
context 'when the criteria has a collation'
|
402
|
+
context 'when the criteria has a collation' do
|
403
|
+
min_server_version '3.4'
|
399
404
|
|
400
405
|
let!(:depeche_mode) do
|
401
406
|
Band.create(members: [ "Dave" ])
|
@@ -449,7 +454,8 @@ describe Mongoid::Contextual::Atomic do
|
|
449
454
|
expect(smiths.reload.members).to be_nil
|
450
455
|
end
|
451
456
|
|
452
|
-
context 'when the criteria has a collation'
|
457
|
+
context 'when the criteria has a collation' do
|
458
|
+
min_server_version '3.4'
|
453
459
|
|
454
460
|
let!(:depeche_mode) do
|
455
461
|
Band.create(members: [ "Dave" ])
|
@@ -506,7 +512,8 @@ describe Mongoid::Contextual::Atomic do
|
|
506
512
|
end
|
507
513
|
end
|
508
514
|
|
509
|
-
context 'when the criteria has a collation'
|
515
|
+
context 'when the criteria has a collation' do
|
516
|
+
min_server_version '3.4'
|
510
517
|
|
511
518
|
let!(:depeche_mode) do
|
512
519
|
Band.create(members: [ "Dave", "Alan", "Fletch" ])
|
@@ -563,7 +570,8 @@ describe Mongoid::Contextual::Atomic do
|
|
563
570
|
end
|
564
571
|
end
|
565
572
|
|
566
|
-
context 'when the criteria has a collation'
|
573
|
+
context 'when the criteria has a collation' do
|
574
|
+
min_server_version '3.4'
|
567
575
|
|
568
576
|
let!(:depeche_mode) do
|
569
577
|
Band.create(members: [ "Dave" ])
|
@@ -628,7 +636,8 @@ describe Mongoid::Contextual::Atomic do
|
|
628
636
|
end
|
629
637
|
end
|
630
638
|
|
631
|
-
context 'when the criteria has a collation'
|
639
|
+
context 'when the criteria has a collation' do
|
640
|
+
min_server_version '3.4'
|
632
641
|
|
633
642
|
let!(:depeche_mode) do
|
634
643
|
Band.create(members: [ "Dave" ])
|
@@ -689,7 +698,8 @@ describe Mongoid::Contextual::Atomic do
|
|
689
698
|
end
|
690
699
|
end
|
691
700
|
|
692
|
-
context 'when the criteria has a collation'
|
701
|
+
context 'when the criteria has a collation' do
|
702
|
+
min_server_version '3.4'
|
693
703
|
|
694
704
|
let!(:depeche_mode) do
|
695
705
|
Band.create(members: [ "Dave" ])
|
@@ -848,7 +858,8 @@ describe Mongoid::Contextual::Atomic do
|
|
848
858
|
end
|
849
859
|
end
|
850
860
|
|
851
|
-
context 'when the criteria has a collation'
|
861
|
+
context 'when the criteria has a collation' do
|
862
|
+
min_server_version '3.4'
|
852
863
|
|
853
864
|
let!(:depeche_mode) do
|
854
865
|
Band.create(name: "Depeche Mode", years: 10)
|
@@ -49,8 +49,17 @@ describe Mongoid::Contextual::GeoNear do
|
|
49
49
|
described_class.new(collection, criteria, [ 52, 13 ])
|
50
50
|
end
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
let(:expected_value) do
|
53
|
+
if ClusterConfig.instance.fcv_ish == '4.0' && ClusterConfig.instance.topology == :sharded
|
54
|
+
# https://jira.mongodb.org/browse/SERVER-50074
|
55
|
+
0.0
|
56
|
+
else
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it "is nil except for 4.0 sharded when it is 0" do
|
62
|
+
expect(geo_near.average_distance).to be expected_value
|
54
63
|
end
|
55
64
|
end
|
56
65
|
end
|
@@ -78,6 +78,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
78
78
|
end
|
79
79
|
|
80
80
|
describe "#counts" do
|
81
|
+
max_server_version '4.2'
|
81
82
|
|
82
83
|
let(:criteria) do
|
83
84
|
Band.all
|
@@ -106,7 +107,8 @@ describe Mongoid::Contextual::MapReduce do
|
|
106
107
|
end
|
107
108
|
|
108
109
|
it "iterates over the results" do
|
109
|
-
|
110
|
+
ordered_results = results.entries.sort_by { |doc| doc['_id'] }
|
111
|
+
expect(ordered_results.entries).to eq([
|
110
112
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
111
113
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
112
114
|
])
|
@@ -127,7 +129,8 @@ describe Mongoid::Contextual::MapReduce do
|
|
127
129
|
end
|
128
130
|
|
129
131
|
it "iterates over the results" do
|
130
|
-
|
132
|
+
ordered_results = results.entries.sort_by { |doc| doc['_id'] }
|
133
|
+
expect(ordered_results).to eq(expected_results)
|
131
134
|
end
|
132
135
|
|
133
136
|
it 'outputs to the collection' do
|
@@ -147,6 +150,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
147
150
|
end
|
148
151
|
|
149
152
|
context "when the statstics are requested" do
|
153
|
+
max_server_version '4.2'
|
150
154
|
|
151
155
|
it "raises an error" do
|
152
156
|
expect {
|
@@ -191,14 +195,16 @@ describe Mongoid::Contextual::MapReduce do
|
|
191
195
|
Band.where(name: 'DEPECHE MODE').collation(locale: 'en_US', strength: 2)
|
192
196
|
end
|
193
197
|
|
194
|
-
context 'when the server supports collations'
|
198
|
+
context 'when the server supports collations' do
|
199
|
+
min_server_version '3.4'
|
195
200
|
|
196
201
|
it 'applies the collation' do
|
197
202
|
expect(map_reduce.out(inline: 1).count).to eq(1)
|
198
203
|
end
|
199
204
|
end
|
200
205
|
|
201
|
-
context 'when the server does not support collations'
|
206
|
+
context 'when the server does not support collations' do
|
207
|
+
max_server_version '3.2'
|
202
208
|
|
203
209
|
it 'raises an exception' do
|
204
210
|
expect {
|
@@ -210,6 +216,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
210
216
|
end
|
211
217
|
|
212
218
|
describe "#emitted" do
|
219
|
+
max_server_version '4.2'
|
213
220
|
|
214
221
|
let(:emitted) do
|
215
222
|
map_reduce.out(inline: 1).emitted
|
@@ -261,6 +268,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
261
268
|
end
|
262
269
|
|
263
270
|
describe "#input" do
|
271
|
+
max_server_version '4.2'
|
264
272
|
|
265
273
|
let(:input) do
|
266
274
|
map_reduce.out(inline: 1).input
|
@@ -311,6 +319,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
311
319
|
end
|
312
320
|
|
313
321
|
describe "#output" do
|
322
|
+
max_server_version '4.2'
|
314
323
|
|
315
324
|
let(:output) do
|
316
325
|
map_reduce.out(inline: 1).output
|
@@ -343,12 +352,16 @@ describe Mongoid::Contextual::MapReduce do
|
|
343
352
|
end
|
344
353
|
|
345
354
|
context 'when a read preference is defined' do
|
355
|
+
require_topology :replica_set
|
356
|
+
# On 4.4 it seems the server inserts on the primary, not on the server
|
357
|
+
# that executed the map/reduce.
|
358
|
+
max_server_version '4.2'
|
346
359
|
|
347
360
|
let(:criteria) do
|
348
361
|
Band.all.read(mode: :secondary)
|
349
362
|
end
|
350
363
|
|
351
|
-
it "uses the read preference"
|
364
|
+
it "uses the read preference" do
|
352
365
|
|
353
366
|
expect {
|
354
367
|
replace_map_reduce.raw
|
@@ -359,6 +372,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
359
372
|
end
|
360
373
|
|
361
374
|
describe "#reduced" do
|
375
|
+
max_server_version '4.2'
|
362
376
|
|
363
377
|
let(:reduced) do
|
364
378
|
map_reduce.out(inline: 1).reduced
|
@@ -389,6 +403,7 @@ describe Mongoid::Contextual::MapReduce do
|
|
389
403
|
end
|
390
404
|
|
391
405
|
describe "#time" do
|
406
|
+
max_server_version '4.2'
|
392
407
|
|
393
408
|
let(:time) do
|
394
409
|
map_reduce.out(inline: 1).time
|
@@ -109,11 +109,8 @@ describe Mongoid::Contextual::Mongo do
|
|
109
109
|
described_class.new(criteria.cache)
|
110
110
|
end
|
111
111
|
|
112
|
-
before do
|
113
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
114
|
-
end
|
115
|
-
|
116
112
|
it "returns the count cached value after first call" do
|
113
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
117
114
|
2.times { expect(context.count).to eq(1) }
|
118
115
|
end
|
119
116
|
end
|
@@ -171,7 +168,8 @@ describe Mongoid::Contextual::Mongo do
|
|
171
168
|
end
|
172
169
|
end
|
173
170
|
|
174
|
-
context 'when a collation is specified'
|
171
|
+
context 'when a collation is specified' do
|
172
|
+
min_server_version '3.4'
|
175
173
|
|
176
174
|
let(:context) do
|
177
175
|
described_class.new(criteria)
|
@@ -194,6 +192,71 @@ describe Mongoid::Contextual::Mongo do
|
|
194
192
|
end
|
195
193
|
end
|
196
194
|
|
195
|
+
describe "#estimated_count" do
|
196
|
+
|
197
|
+
let!(:depeche) do
|
198
|
+
Band.create(name: "Depeche Mode")
|
199
|
+
end
|
200
|
+
|
201
|
+
let!(:new_order) do
|
202
|
+
Band.create(name: "New Order")
|
203
|
+
end
|
204
|
+
|
205
|
+
let(:criteria) do
|
206
|
+
Band.where
|
207
|
+
end
|
208
|
+
|
209
|
+
context "when not providing options" do
|
210
|
+
it 'returns the correct count' do
|
211
|
+
expect(criteria.estimated_count).to eq(2)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
context "when providing options" do
|
216
|
+
it 'returns the correct count' do
|
217
|
+
expect(criteria.estimated_count(maxTimeMS: 1000)).to eq(2)
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
context "when context is cached" do
|
222
|
+
|
223
|
+
let(:context) do
|
224
|
+
described_class.new(criteria.cache)
|
225
|
+
end
|
226
|
+
|
227
|
+
it "returns the count cached value after first call" do
|
228
|
+
expect(context.view).to receive(:estimated_document_count).once.and_return(1)
|
229
|
+
2.times do
|
230
|
+
context.estimated_count
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
context "when the criteria contains a selector", :focus do
|
236
|
+
let(:criteria) do
|
237
|
+
Band.where(name: "New Order")
|
238
|
+
end
|
239
|
+
|
240
|
+
context "when not providing options" do
|
241
|
+
it 'raises an error' do
|
242
|
+
expect do
|
243
|
+
criteria.estimated_count
|
244
|
+
end.to raise_error(Mongoid::Errors::InvalidEstimatedCountCriteria)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
context "when providing options" do
|
249
|
+
it 'raises an error' do
|
250
|
+
expect do
|
251
|
+
criteria.estimated_count(maxTimeMS: 1000)
|
252
|
+
end.to raise_error(Mongoid::Errors::InvalidEstimatedCountCriteria)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
|
259
|
+
|
197
260
|
[ :delete, :delete_all ].each do |method|
|
198
261
|
|
199
262
|
describe "##{method}" do
|
@@ -232,7 +295,8 @@ describe Mongoid::Contextual::Mongo do
|
|
232
295
|
expect(deleted).to eq(1)
|
233
296
|
end
|
234
297
|
|
235
|
-
context 'when the criteria has a collation'
|
298
|
+
context 'when the criteria has a collation' do
|
299
|
+
min_server_version '3.4'
|
236
300
|
|
237
301
|
let(:criteria) do
|
238
302
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
@@ -336,7 +400,8 @@ describe Mongoid::Contextual::Mongo do
|
|
336
400
|
expect(destroyed).to eq(1)
|
337
401
|
end
|
338
402
|
|
339
|
-
context 'when the criteria has a collation'
|
403
|
+
context 'when the criteria has a collation' do
|
404
|
+
min_server_version '3.4'
|
340
405
|
|
341
406
|
let(:criteria) do
|
342
407
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
@@ -458,7 +523,8 @@ describe Mongoid::Contextual::Mongo do
|
|
458
523
|
end
|
459
524
|
end
|
460
525
|
|
461
|
-
context 'when a collation is specified'
|
526
|
+
context 'when a collation is specified' do
|
527
|
+
min_server_version '3.4'
|
462
528
|
|
463
529
|
before do
|
464
530
|
Band.create(name: 'DEPECHE MODE')
|
@@ -496,7 +562,8 @@ describe Mongoid::Contextual::Mongo do
|
|
496
562
|
described_class.new(criteria)
|
497
563
|
end
|
498
564
|
|
499
|
-
context 'when the criteria has a collation'
|
565
|
+
context 'when the criteria has a collation' do
|
566
|
+
min_server_version '3.4'
|
500
567
|
|
501
568
|
let(:criteria) do
|
502
569
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
@@ -853,7 +920,8 @@ describe Mongoid::Contextual::Mongo do
|
|
853
920
|
end
|
854
921
|
end
|
855
922
|
|
856
|
-
context 'when a collation is specified on the criteria'
|
923
|
+
context 'when a collation is specified on the criteria' do
|
924
|
+
min_server_version '3.4'
|
857
925
|
|
858
926
|
let(:criteria) do
|
859
927
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
@@ -1006,7 +1074,8 @@ describe Mongoid::Contextual::Mongo do
|
|
1006
1074
|
end
|
1007
1075
|
end
|
1008
1076
|
|
1009
|
-
context 'when a collation is specified on the criteria'
|
1077
|
+
context 'when a collation is specified on the criteria' do
|
1078
|
+
min_server_version '3.4'
|
1010
1079
|
|
1011
1080
|
let(:criteria) do
|
1012
1081
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
@@ -1080,7 +1149,8 @@ describe Mongoid::Contextual::Mongo do
|
|
1080
1149
|
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
1081
1150
|
end
|
1082
1151
|
|
1083
|
-
context 'when a collation is specified on the criteria'
|
1152
|
+
context 'when a collation is specified on the criteria' do
|
1153
|
+
min_server_version '3.4'
|
1084
1154
|
|
1085
1155
|
let(:criteria) do
|
1086
1156
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
@@ -1152,7 +1222,8 @@ describe Mongoid::Contextual::Mongo do
|
|
1152
1222
|
expect(context.send(method)).to eq(depeche_mode)
|
1153
1223
|
end
|
1154
1224
|
|
1155
|
-
context 'when the criteria has a collation'
|
1225
|
+
context 'when the criteria has a collation' do
|
1226
|
+
min_server_version '3.4'
|
1156
1227
|
|
1157
1228
|
let(:criteria) do
|
1158
1229
|
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
@@ -1390,12 +1461,8 @@ describe Mongoid::Contextual::Mongo do
|
|
1390
1461
|
end
|
1391
1462
|
|
1392
1463
|
context "when calling more than once" do
|
1393
|
-
|
1394
|
-
before do
|
1395
|
-
expect(context.view).to receive(:count).once.and_return(2)
|
1396
|
-
end
|
1397
|
-
|
1398
1464
|
it "returns the cached value for subsequent calls" do
|
1465
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
1399
1466
|
2.times { expect(context.send(method)).to eq(2) }
|
1400
1467
|
end
|
1401
1468
|
end
|
@@ -1404,10 +1471,10 @@ describe Mongoid::Contextual::Mongo do
|
|
1404
1471
|
|
1405
1472
|
before do
|
1406
1473
|
context.entries
|
1407
|
-
expect(context.view).to receive(:count).once.and_return(2)
|
1408
1474
|
end
|
1409
1475
|
|
1410
1476
|
it "returns the cached value for all calls" do
|
1477
|
+
expect(context.view).to receive(:count_documents).once.and_return(2)
|
1411
1478
|
expect(context.send(method)).to eq(2)
|
1412
1479
|
end
|
1413
1480
|
|
@@ -1439,12 +1506,8 @@ describe Mongoid::Contextual::Mongo do
|
|
1439
1506
|
end
|
1440
1507
|
|
1441
1508
|
context "when calling more than once" do
|
1442
|
-
|
1443
|
-
before do
|
1444
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
1445
|
-
end
|
1446
|
-
|
1447
1509
|
it "returns the cached value for subsequent calls" do
|
1510
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
1448
1511
|
2.times { expect(context.send(method)).to eq(1) }
|
1449
1512
|
end
|
1450
1513
|
end
|
@@ -1453,10 +1516,10 @@ describe Mongoid::Contextual::Mongo do
|
|
1453
1516
|
|
1454
1517
|
before do
|
1455
1518
|
context.entries
|
1456
|
-
expect(context.view).to receive(:count).once.and_return(1)
|
1457
1519
|
end
|
1458
1520
|
|
1459
1521
|
it "returns the cached value for all calls" do
|
1522
|
+
expect(context.view).to receive(:count_documents).once.and_return(1)
|
1460
1523
|
expect(context.send(method)).to eq(1)
|
1461
1524
|
end
|
1462
1525
|
|
@@ -1556,6 +1619,10 @@ describe Mongoid::Contextual::Mongo do
|
|
1556
1619
|
}}
|
1557
1620
|
end
|
1558
1621
|
|
1622
|
+
let(:ordered_results) do
|
1623
|
+
results['results'].sort_by { |doc| doc['_id'] }
|
1624
|
+
end
|
1625
|
+
|
1559
1626
|
context "when no selection is provided" do
|
1560
1627
|
|
1561
1628
|
let(:criteria) do
|
@@ -1587,36 +1654,40 @@ describe Mongoid::Contextual::Mongo do
|
|
1587
1654
|
end
|
1588
1655
|
|
1589
1656
|
it "contains the entire raw results" do
|
1590
|
-
expect(
|
1657
|
+
expect(ordered_results).to eq([
|
1591
1658
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
1592
1659
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
1593
1660
|
])
|
1594
1661
|
end
|
1595
1662
|
|
1596
|
-
|
1597
|
-
|
1598
|
-
end
|
1663
|
+
context 'when statistics are available' do
|
1664
|
+
max_server_version '4.2'
|
1599
1665
|
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
})
|
1604
|
-
end
|
1666
|
+
it "contains the execution time" do
|
1667
|
+
expect(results.time).to_not be_nil
|
1668
|
+
end
|
1605
1669
|
|
1606
|
-
|
1607
|
-
|
1608
|
-
|
1670
|
+
it "contains the count statistics" do
|
1671
|
+
expect(results["counts"]).to eq({
|
1672
|
+
"input" => 2, "emit" => 2, "reduce" => 0, "output" => 2
|
1673
|
+
})
|
1674
|
+
end
|
1609
1675
|
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1676
|
+
it "contains the input count" do
|
1677
|
+
expect(results.input).to eq(2)
|
1678
|
+
end
|
1613
1679
|
|
1614
|
-
|
1615
|
-
|
1616
|
-
|
1680
|
+
it "contains the emitted count" do
|
1681
|
+
expect(results.emitted).to eq(2)
|
1682
|
+
end
|
1683
|
+
|
1684
|
+
it "contains the reduced count" do
|
1685
|
+
expect(results.reduced).to eq(0)
|
1686
|
+
end
|
1617
1687
|
|
1618
|
-
|
1619
|
-
|
1688
|
+
it "contains the output count" do
|
1689
|
+
expect(results.output).to eq(2)
|
1690
|
+
end
|
1620
1691
|
end
|
1621
1692
|
end
|
1622
1693
|
|
@@ -1645,35 +1716,39 @@ describe Mongoid::Contextual::Mongo do
|
|
1645
1716
|
end
|
1646
1717
|
|
1647
1718
|
it "contains the entire raw results" do
|
1648
|
-
expect(
|
1719
|
+
expect(ordered_results).to eq([
|
1649
1720
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1650
1721
|
])
|
1651
1722
|
end
|
1652
1723
|
|
1653
|
-
|
1654
|
-
|
1655
|
-
end
|
1724
|
+
context 'when statistics are available' do
|
1725
|
+
max_server_version '4.2'
|
1656
1726
|
|
1657
|
-
|
1658
|
-
|
1659
|
-
|
1660
|
-
})
|
1661
|
-
end
|
1727
|
+
it "contains the execution time" do
|
1728
|
+
expect(results.time).to_not be_nil
|
1729
|
+
end
|
1662
1730
|
|
1663
|
-
|
1664
|
-
|
1665
|
-
|
1731
|
+
it "contains the count statistics" do
|
1732
|
+
expect(results["counts"]).to eq({
|
1733
|
+
"input" => 1, "emit" => 1, "reduce" => 0, "output" => 1
|
1734
|
+
})
|
1735
|
+
end
|
1666
1736
|
|
1667
|
-
|
1668
|
-
|
1669
|
-
|
1737
|
+
it "contains the input count" do
|
1738
|
+
expect(results.input).to eq(1)
|
1739
|
+
end
|
1670
1740
|
|
1671
|
-
|
1672
|
-
|
1673
|
-
|
1741
|
+
it "contains the emitted count" do
|
1742
|
+
expect(results.emitted).to eq(1)
|
1743
|
+
end
|
1744
|
+
|
1745
|
+
it "contains the reduced count" do
|
1746
|
+
expect(results.reduced).to eq(0)
|
1747
|
+
end
|
1674
1748
|
|
1675
|
-
|
1676
|
-
|
1749
|
+
it "contains the output count" do
|
1750
|
+
expect(results.output).to eq(1)
|
1751
|
+
end
|
1677
1752
|
end
|
1678
1753
|
end
|
1679
1754
|
|
@@ -1713,7 +1788,7 @@ describe Mongoid::Contextual::Mongo do
|
|
1713
1788
|
end
|
1714
1789
|
|
1715
1790
|
it "contains the entire raw results" do
|
1716
|
-
expect(
|
1791
|
+
expect(ordered_results).to eq([
|
1717
1792
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
1718
1793
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
1719
1794
|
])
|
@@ -2166,7 +2241,8 @@ describe Mongoid::Contextual::Mongo do
|
|
2166
2241
|
end
|
2167
2242
|
end
|
2168
2243
|
|
2169
|
-
context 'when provided array filters'
|
2244
|
+
context 'when provided array filters' do
|
2245
|
+
min_server_version '3.6'
|
2170
2246
|
|
2171
2247
|
before do
|
2172
2248
|
Band.delete_all
|
@@ -2338,7 +2414,8 @@ describe Mongoid::Contextual::Mongo do
|
|
2338
2414
|
end
|
2339
2415
|
end
|
2340
2416
|
|
2341
|
-
context 'when provided array filters'
|
2417
|
+
context 'when provided array filters' do
|
2418
|
+
min_server_version '3.6'
|
2342
2419
|
|
2343
2420
|
before do
|
2344
2421
|
Band.delete_all
|
@@ -2376,7 +2453,7 @@ describe Mongoid::Contextual::Mongo do
|
|
2376
2453
|
|
2377
2454
|
describe '#pipeline' do
|
2378
2455
|
|
2379
|
-
context 'when the criteria has a selector'
|
2456
|
+
context 'when the criteria has a selector' do
|
2380
2457
|
|
2381
2458
|
before do
|
2382
2459
|
Artist.index(name: "text")
|