mongoid 3.1.6 → 4.0.2
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
- data/CHANGELOG.md +479 -8
- data/README.md +10 -7
- data/lib/config/locales/en.yml +34 -20
- data/lib/mongoid.rb +10 -76
- data/lib/mongoid/atomic.rb +3 -14
- data/lib/mongoid/atomic/paths/embedded.rb +0 -30
- data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
- data/lib/mongoid/atomic/paths/root.rb +0 -13
- data/lib/mongoid/attributes.rb +65 -101
- data/lib/mongoid/attributes/dynamic.rb +154 -0
- data/lib/mongoid/attributes/nested.rb +82 -0
- data/lib/mongoid/attributes/processing.rb +13 -66
- data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
- data/lib/mongoid/composable.rb +105 -0
- data/lib/mongoid/config.rb +3 -9
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -0
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
- data/lib/mongoid/contextual/atomic.rb +53 -53
- data/lib/mongoid/contextual/geo_near.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +4 -2
- data/lib/mongoid/contextual/memory.rb +23 -11
- data/lib/mongoid/contextual/mongo.rb +75 -57
- data/lib/mongoid/contextual/none.rb +90 -0
- data/lib/mongoid/contextual/text_search.rb +178 -0
- data/lib/mongoid/copyable.rb +2 -3
- data/lib/mongoid/criteria.rb +39 -34
- data/lib/mongoid/criteria/#findable.rb# +141 -0
- data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
- data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
- data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
- data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
- data/lib/mongoid/criteria/permission.rb +70 -0
- data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
- data/lib/mongoid/document.rb +39 -24
- data/lib/mongoid/errors.rb +4 -1
- data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
- data/lib/mongoid/errors/document_not_found.rb +2 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
- data/lib/mongoid/errors/invalid_value.rb +16 -0
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/errors/readonly_document.rb +24 -0
- data/lib/mongoid/extensions.rb +15 -7
- data/lib/mongoid/extensions/array.rb +3 -3
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/boolean.rb +15 -17
- data/lib/mongoid/extensions/date.rb +1 -1
- data/lib/mongoid/extensions/date_time.rb +3 -3
- data/lib/mongoid/extensions/float.rb +2 -1
- data/lib/mongoid/extensions/hash.rb +3 -3
- data/lib/mongoid/extensions/integer.rb +1 -1
- data/lib/mongoid/extensions/object.rb +7 -7
- data/lib/mongoid/extensions/object_id.rb +5 -5
- data/lib/mongoid/extensions/range.rb +9 -3
- data/lib/mongoid/extensions/regexp.rb +1 -1
- data/lib/mongoid/extensions/set.rb +1 -1
- data/lib/mongoid/extensions/string.rb +6 -18
- data/lib/mongoid/extensions/symbol.rb +1 -1
- data/lib/mongoid/extensions/time.rb +3 -3
- data/lib/mongoid/extensions/time_with_zone.rb +1 -1
- data/lib/mongoid/factory.rb +8 -6
- data/lib/mongoid/fields.rb +41 -8
- data/lib/mongoid/fields/foreign_key.rb +3 -3
- data/lib/mongoid/fields/localized.rb +1 -1
- data/lib/mongoid/fields/standard.rb +5 -17
- data/lib/mongoid/fields/validators/macro.rb +15 -5
- data/lib/mongoid/{finders.rb → findable.rb} +35 -7
- data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
- data/lib/mongoid/indexable/specification.rb +104 -0
- data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
- data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
- data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
- data/lib/mongoid/log_subscriber.rb +55 -0
- data/lib/mongoid/matchable.rb +152 -0
- data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
- data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
- data/lib/mongoid/persistable.rb +216 -0
- data/lib/mongoid/persistable/creatable.rb +189 -0
- data/lib/mongoid/persistable/deletable.rb +149 -0
- data/lib/mongoid/persistable/destroyable.rb +60 -0
- data/lib/mongoid/persistable/incrementable.rb +36 -0
- data/lib/mongoid/persistable/logical.rb +38 -0
- data/lib/mongoid/persistable/poppable.rb +39 -0
- data/lib/mongoid/persistable/pullable.rb +55 -0
- data/lib/mongoid/persistable/pushable.rb +62 -0
- data/lib/mongoid/persistable/renamable.rb +35 -0
- data/lib/mongoid/persistable/savable.rb +52 -0
- data/lib/mongoid/persistable/settable.rb +33 -0
- data/lib/mongoid/persistable/unsettable.rb +36 -0
- data/lib/mongoid/persistable/updatable.rb +153 -0
- data/lib/mongoid/persistable/upsertable.rb +55 -0
- data/lib/mongoid/positional.rb +71 -0
- data/lib/mongoid/query_cache.rb +255 -0
- data/lib/mongoid/railtie.rb +34 -60
- data/lib/mongoid/railties/database.rake +9 -25
- data/lib/mongoid/relations.rb +11 -25
- data/lib/mongoid/relations/accessors.rb +15 -51
- data/lib/mongoid/relations/auto_save.rb +15 -36
- data/lib/mongoid/relations/binding.rb +2 -25
- data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
- data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
- data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
- data/lib/mongoid/relations/builder.rb +1 -1
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
- data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
- data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
- data/lib/mongoid/relations/cascading.rb +3 -5
- data/lib/mongoid/relations/constraint.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/counter_cache.rb +39 -15
- data/lib/mongoid/relations/eager.rb +46 -0
- data/lib/mongoid/relations/eager/base.rb +149 -0
- data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
- data/lib/mongoid/relations/eager/has_many.rb +38 -0
- data/lib/mongoid/relations/eager/has_one.rb +30 -0
- data/lib/mongoid/relations/embedded/batchable.rb +4 -5
- data/lib/mongoid/relations/embedded/in.rb +4 -4
- data/lib/mongoid/relations/embedded/many.rb +14 -32
- data/lib/mongoid/relations/embedded/one.rb +1 -1
- data/lib/mongoid/relations/macros.rb +3 -4
- data/lib/mongoid/relations/many.rb +51 -31
- data/lib/mongoid/relations/marshalable.rb +3 -3
- data/lib/mongoid/relations/metadata.rb +14 -79
- data/lib/mongoid/relations/nested_builder.rb +2 -2
- data/lib/mongoid/relations/one.rb +1 -1
- data/lib/mongoid/relations/options.rb +1 -0
- data/lib/mongoid/relations/polymorphic.rb +0 -1
- data/lib/mongoid/relations/proxy.rb +21 -41
- data/lib/mongoid/relations/referenced/in.rb +4 -20
- data/lib/mongoid/relations/referenced/many.rb +22 -35
- data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
- data/lib/mongoid/relations/referenced/one.rb +6 -25
- data/lib/mongoid/relations/synchronization.rb +4 -4
- data/lib/mongoid/relations/targets/enumerable.rb +10 -10
- data/lib/mongoid/relations/touchable.rb +34 -1
- data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
- data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
- data/lib/mongoid/selectable.rb +59 -0
- data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
- data/lib/mongoid/sessions.rb +37 -345
- data/lib/mongoid/sessions/factory.rb +2 -0
- data/lib/mongoid/sessions/options.rb +185 -0
- data/lib/mongoid/sessions/storage_options.rb +140 -0
- data/lib/mongoid/sessions/thread_options.rb +19 -0
- data/lib/mongoid/sessions/validators/storage.rb +16 -3
- data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
- data/lib/mongoid/{state.rb → stateful.rb} +13 -1
- data/lib/mongoid/support/query_counter.rb +23 -0
- data/lib/mongoid/tasks/database.rake +31 -0
- data/lib/mongoid/tasks/database.rb +107 -0
- data/lib/mongoid/threaded.rb +26 -172
- data/lib/mongoid/threaded/lifecycle.rb +0 -28
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
- data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
- data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
- data/lib/mongoid/{validations → validatable}/format.rb +1 -1
- data/lib/mongoid/{validations → validatable}/length.rb +1 -1
- data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
- data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
- data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
- data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
- data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
- data/lib/rails/generators/mongoid_generator.rb +3 -40
- data/lib/rails/mongoid.rb +0 -122
- data/lib/support/ruby_version.rb +1 -1
- data/spec/app/models/account.rb +2 -6
- data/spec/app/models/acolyte.rb +2 -1
- data/spec/app/models/actor.rb +0 -1
- data/spec/app/models/address.rb +8 -3
- data/spec/app/models/animal.rb +1 -1
- data/spec/app/models/appointment.rb +3 -3
- data/spec/app/models/article.rb +1 -4
- data/spec/app/models/audio.rb +5 -0
- data/spec/app/models/author.rb +0 -2
- data/spec/app/models/band.rb +3 -2
- data/spec/app/models/bar.rb +1 -0
- data/spec/app/models/book.rb +1 -0
- data/spec/app/models/building.rb +0 -2
- data/spec/app/models/building_address.rb +0 -2
- data/spec/app/models/bus.rb +1 -1
- data/spec/app/models/canvas.rb +1 -1
- data/spec/app/models/contextable_item.rb +5 -0
- data/spec/app/models/contractor.rb +0 -2
- data/spec/app/models/country_code.rb +1 -1
- data/spec/app/models/definition.rb +2 -2
- data/spec/app/models/dog.rb +1 -1
- data/spec/app/models/draft.rb +9 -0
- data/spec/app/models/dragon.rb +4 -0
- data/spec/app/models/drug.rb +1 -3
- data/spec/app/models/dungeon.rb +4 -0
- data/spec/app/models/edit.rb +5 -0
- data/spec/app/models/even.rb +7 -0
- data/spec/app/models/event.rb +1 -1
- data/spec/app/models/filesystem.rb +1 -0
- data/spec/app/models/fish.rb +0 -1
- data/spec/app/models/fruits.rb +6 -0
- data/spec/app/models/game.rb +0 -2
- data/spec/app/models/house.rb +1 -3
- data/spec/app/models/id_key.rb +6 -0
- data/spec/app/models/item.rb +1 -5
- data/spec/app/models/jar.rb +1 -1
- data/spec/app/models/label.rb +4 -4
- data/spec/app/models/line_item.rb +1 -1
- data/spec/app/models/login.rb +1 -1
- data/spec/app/models/message.rb +8 -0
- data/spec/app/models/movie.rb +1 -0
- data/spec/app/models/name.rb +3 -3
- data/spec/app/models/note.rb +3 -1
- data/spec/app/models/odd.rb +7 -0
- data/spec/app/models/oscar.rb +1 -1
- data/spec/app/models/parent_doc.rb +1 -1
- data/spec/app/models/person.rb +16 -10
- data/spec/app/models/phone.rb +1 -3
- data/spec/app/models/player.rb +3 -3
- data/spec/app/models/post.rb +5 -3
- data/spec/app/models/preference.rb +1 -1
- data/spec/app/models/quiz.rb +0 -3
- data/spec/app/models/record.rb +10 -5
- data/spec/app/models/registry.rb +1 -1
- data/spec/app/models/server.rb +1 -1
- data/spec/app/models/service.rb +3 -3
- data/spec/app/models/sound.rb +5 -0
- data/spec/app/models/symptom.rb +1 -1
- data/spec/app/models/template.rb +1 -1
- data/spec/app/models/title.rb +0 -1
- data/spec/app/models/track.rb +5 -5
- data/spec/app/models/tree.rb +3 -3
- data/spec/app/models/video.rb +1 -5
- data/spec/app/models/wiki_page.rb +2 -5
- data/spec/app/models/word.rb +3 -0
- data/spec/app/models/word_origin.rb +1 -1
- data/spec/config/mongoid.yml +7 -8
- data/spec/helpers.rb +18 -0
- data/spec/mongoid/#atomic_spec.rb# +365 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
- data/spec/mongoid/atomic/paths_spec.rb +19 -19
- data/spec/mongoid/atomic_spec.rb +19 -19
- data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
- data/spec/mongoid/attributes/readonly_spec.rb +58 -18
- data/spec/mongoid/attributes_spec.rb +349 -434
- data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
- data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
- data/spec/mongoid/config/environment_spec.rb +3 -3
- data/spec/mongoid/config/options_spec.rb +6 -6
- data/spec/mongoid/config_spec.rb +24 -48
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
- data/spec/mongoid/contextual/atomic_spec.rb +60 -56
- data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
- data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
- data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
- data/spec/mongoid/contextual/memory_spec.rb +156 -94
- data/spec/mongoid/contextual/mongo_spec.rb +238 -150
- data/spec/mongoid/contextual/none_spec.rb +127 -0
- data/spec/mongoid/contextual/text_search_spec.rb +209 -0
- data/spec/mongoid/copyable_spec.rb +56 -68
- data/spec/mongoid/criteria/findable_spec.rb +991 -0
- data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
- data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
- data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
- data/spec/mongoid/criteria_spec.rb +715 -2421
- data/spec/mongoid/document_spec.rb +171 -121
- data/spec/mongoid/equality_spec.rb +22 -22
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
- data/spec/mongoid/errors/callback_spec.rb +3 -3
- data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
- data/spec/mongoid/errors/eager_load_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
- data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
- data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
- data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
- data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
- data/spec/mongoid/errors/no_parent_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
- data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
- data/spec/mongoid/errors/validations_spec.rb +7 -7
- data/spec/mongoid/extensions/array_spec.rb +61 -61
- data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
- data/spec/mongoid/extensions/binary_spec.rb +12 -12
- data/spec/mongoid/extensions/boolean_spec.rb +18 -18
- data/spec/mongoid/extensions/date_spec.rb +13 -13
- data/spec/mongoid/extensions/date_time_spec.rb +8 -8
- data/spec/mongoid/extensions/false_class_spec.rb +5 -5
- data/spec/mongoid/extensions/float_spec.rb +29 -15
- data/spec/mongoid/extensions/hash_spec.rb +29 -29
- data/spec/mongoid/extensions/integer_spec.rb +15 -15
- data/spec/mongoid/extensions/module_spec.rb +2 -2
- data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/extensions/object_id_spec.rb +134 -134
- data/spec/mongoid/extensions/object_spec.rb +26 -26
- data/spec/mongoid/extensions/range_spec.rb +61 -12
- data/spec/mongoid/extensions/regexp_spec.rb +4 -4
- data/spec/mongoid/extensions/set_spec.rb +4 -4
- data/spec/mongoid/extensions/string_spec.rb +35 -46
- data/spec/mongoid/extensions/symbol_spec.rb +9 -9
- data/spec/mongoid/extensions/time_spec.rb +49 -49
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
- data/spec/mongoid/extensions/true_class_spec.rb +5 -5
- data/spec/mongoid/extensions_spec.rb +29 -0
- data/spec/mongoid/factory_spec.rb +15 -15
- data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
- data/spec/mongoid/fields/localized_spec.rb +38 -23
- data/spec/mongoid/fields/standard_spec.rb +12 -12
- data/spec/mongoid/fields_spec.rb +263 -217
- data/spec/mongoid/findable_spec.rb +509 -0
- data/spec/mongoid/indexable/specification_spec.rb +102 -0
- data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
- data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
- data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
- data/spec/mongoid/log_subscriber_spec.rb +75 -0
- data/spec/mongoid/loggable_spec.rb +1 -1
- data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
- data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
- data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
- data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
- data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
- data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
- data/spec/mongoid/matchable/in_spec.rb +49 -0
- data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
- data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
- data/spec/mongoid/matchable/ne_spec.rb +46 -0
- data/spec/mongoid/matchable/nin_spec.rb +48 -0
- data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
- data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
- data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
- data/spec/mongoid/persistable/creatable_spec.rb +553 -0
- data/spec/mongoid/persistable/deletable_spec.rb +218 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
- data/spec/mongoid/persistable/logical_spec.rb +143 -0
- data/spec/mongoid/persistable/poppable_spec.rb +115 -0
- data/spec/mongoid/persistable/pullable_spec.rb +228 -0
- data/spec/mongoid/persistable/pushable_spec.rb +258 -0
- data/spec/mongoid/persistable/renamable_spec.rb +135 -0
- data/spec/mongoid/persistable/savable_spec.rb +498 -0
- data/spec/mongoid/persistable/settable_spec.rb +162 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
- data/spec/mongoid/persistable/updatable_spec.rb +558 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
- data/spec/mongoid/persistable_spec.rb +206 -0
- data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
- data/spec/mongoid/query_cache_spec.rb +263 -0
- data/spec/mongoid/railties/document_spec.rb +2 -2
- data/spec/mongoid/relations/accessors_spec.rb +53 -145
- data/spec/mongoid/relations/auto_save_spec.rb +37 -17
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
- data/spec/mongoid/relations/builders_spec.rb +21 -21
- data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
- data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
- data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
- data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
- data/spec/mongoid/relations/cascading_spec.rb +16 -16
- data/spec/mongoid/relations/constraint_spec.rb +8 -7
- data/spec/mongoid/relations/conversions_spec.rb +16 -14
- data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
- data/spec/mongoid/relations/cyclic_spec.rb +18 -18
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
- data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
- data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
- data/spec/mongoid/relations/eager_spec.rb +228 -0
- data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
- data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
- data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
- data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
- data/spec/mongoid/relations/macros_spec.rb +108 -102
- data/spec/mongoid/relations/metadata_spec.rb +180 -255
- data/spec/mongoid/relations/options_spec.rb +1 -1
- data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
- data/spec/mongoid/relations/proxy_spec.rb +2 -2
- data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
- data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
- data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
- data/spec/mongoid/relations/reflections_spec.rb +6 -6
- data/spec/mongoid/relations/synchronization_spec.rb +46 -50
- data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
- data/spec/mongoid/relations/touchable_spec.rb +333 -0
- data/spec/mongoid/relations_spec.rb +16 -15
- data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
- data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
- data/spec/mongoid/selectable_spec.rb +134 -0
- data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
- data/spec/mongoid/sessions/factory_spec.rb +49 -28
- data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
- data/spec/mongoid/sessions/options_spec.rb +108 -0
- data/spec/mongoid/sessions_spec.rb +319 -178
- data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
- data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
- data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
- data/spec/mongoid/tasks/database_spec.rb +160 -0
- data/spec/mongoid/threaded_spec.rb +17 -70
- data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
- data/spec/mongoid/timestamps/created_spec.rb +5 -5
- data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
- data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
- data/spec/mongoid/timestamps/updated_spec.rb +9 -13
- data/spec/mongoid/timestamps_spec.rb +9 -13
- data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
- data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
- data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
- data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
- data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
- data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
- data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
- data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
- data/spec/mongoid_spec.rb +8 -8
- data/spec/rails/mongoid_spec.rb +19 -335
- data/spec/spec_helper.rb +31 -13
- metadata +303 -283
- data/lib/mongoid/atomic/positionable.rb +0 -73
- data/lib/mongoid/components.rb +0 -92
- data/lib/mongoid/config/inflections.rb +0 -6
- data/lib/mongoid/contextual/eager.rb +0 -158
- data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
- data/lib/mongoid/identity_map.rb +0 -163
- data/lib/mongoid/json.rb +0 -16
- data/lib/mongoid/matchers.rb +0 -32
- data/lib/mongoid/matchers/strategies.rb +0 -97
- data/lib/mongoid/multi_parameter_attributes.rb +0 -105
- data/lib/mongoid/nested_attributes.rb +0 -78
- data/lib/mongoid/observer.rb +0 -192
- data/lib/mongoid/paranoia.rb +0 -136
- data/lib/mongoid/persistence.rb +0 -357
- data/lib/mongoid/persistence/atomic.rb +0 -231
- data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
- data/lib/mongoid/persistence/atomic/bit.rb +0 -35
- data/lib/mongoid/persistence/atomic/inc.rb +0 -45
- data/lib/mongoid/persistence/atomic/operation.rb +0 -154
- data/lib/mongoid/persistence/atomic/pop.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
- data/lib/mongoid/persistence/atomic/push.rb +0 -25
- data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
- data/lib/mongoid/persistence/atomic/rename.rb +0 -30
- data/lib/mongoid/persistence/atomic/sets.rb +0 -28
- data/lib/mongoid/persistence/atomic/unset.rb +0 -27
- data/lib/mongoid/persistence/deletion.rb +0 -31
- data/lib/mongoid/persistence/insertion.rb +0 -38
- data/lib/mongoid/persistence/modification.rb +0 -35
- data/lib/mongoid/persistence/operations.rb +0 -214
- data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
- data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
- data/lib/mongoid/persistence/operations/insert.rb +0 -34
- data/lib/mongoid/persistence/operations/remove.rb +0 -33
- data/lib/mongoid/persistence/operations/update.rb +0 -59
- data/lib/mongoid/persistence/operations/upsert.rb +0 -28
- data/lib/mongoid/persistence/upsertion.rb +0 -31
- data/lib/mongoid/unit_of_work.rb +0 -61
- data/lib/mongoid/versioning.rb +0 -217
- data/lib/rack/mongoid.rb +0 -2
- data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
- data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
- data/spec/app/models/actor_observer.rb +0 -15
- data/spec/app/models/callback_recorder.rb +0 -25
- data/spec/app/models/paranoid_phone.rb +0 -25
- data/spec/app/models/paranoid_post.rb +0 -36
- data/spec/app/models/phone_observer.rb +0 -6
- data/spec/mongoid/attributes/processing_spec.rb +0 -149
- data/spec/mongoid/criterion/destructive_spec.rb +0 -101
- data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
- data/spec/mongoid/criterion/modification_spec.rb +0 -402
- data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
- data/spec/mongoid/finders_spec.rb +0 -321
- data/spec/mongoid/identity_map_spec.rb +0 -564
- data/spec/mongoid/json_spec.rb +0 -33
- data/spec/mongoid/matchers/in_spec.rb +0 -25
- data/spec/mongoid/matchers/ne_spec.rb +0 -25
- data/spec/mongoid/matchers/nin_spec.rb +0 -25
- data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
- data/spec/mongoid/observer_spec.rb +0 -290
- data/spec/mongoid/paranoia_spec.rb +0 -759
- data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
- data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
- data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
- data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
- data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
- data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
- data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
- data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
- data/spec/mongoid/persistence/atomic_spec.rb +0 -216
- data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
- data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
- data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
- data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
- data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
- data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
- data/spec/mongoid/persistence/operations_spec.rb +0 -313
- data/spec/mongoid/persistence_spec.rb +0 -2279
- data/spec/mongoid/unit_of_work_spec.rb +0 -196
- data/spec/mongoid/versioning_spec.rb +0 -540
- data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -21,7 +21,7 @@ describe Mongoid::Contextual::Mongo do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it "returns true" do
|
24
|
-
context.send(method).
|
24
|
+
expect(context.send(method)).to be true
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -36,7 +36,7 @@ describe Mongoid::Contextual::Mongo do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "returns false" do
|
39
|
-
context.send(method).
|
39
|
+
expect(context.send(method)).to be false
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -55,7 +55,7 @@ describe Mongoid::Contextual::Mongo do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
it "returns true" do
|
58
|
-
context.
|
58
|
+
expect(context).to be_cached
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -70,7 +70,7 @@ describe Mongoid::Contextual::Mongo do
|
|
70
70
|
end
|
71
71
|
|
72
72
|
it "returns false" do
|
73
|
-
context.
|
73
|
+
expect(context).to_not be_cached
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
@@ -96,7 +96,7 @@ describe Mongoid::Contextual::Mongo do
|
|
96
96
|
end
|
97
97
|
|
98
98
|
it "returns the number of documents that match" do
|
99
|
-
context.count.
|
99
|
+
expect(context.count).to eq(1)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
@@ -107,11 +107,11 @@ describe Mongoid::Contextual::Mongo do
|
|
107
107
|
end
|
108
108
|
|
109
109
|
before do
|
110
|
-
context.query.
|
110
|
+
expect(context.query).to receive(:count).once.and_return(1)
|
111
111
|
end
|
112
112
|
|
113
113
|
it "returns the count cached value after first call" do
|
114
|
-
2.times { context.count.
|
114
|
+
2.times { expect(context.count).to eq(1) }
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
@@ -126,7 +126,7 @@ describe Mongoid::Contextual::Mongo do
|
|
126
126
|
end
|
127
127
|
|
128
128
|
it "returns the number of documents that match" do
|
129
|
-
count.
|
129
|
+
expect(count).to eq(1)
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
@@ -143,7 +143,7 @@ describe Mongoid::Contextual::Mongo do
|
|
143
143
|
end
|
144
144
|
|
145
145
|
it "returns the number of documents that match" do
|
146
|
-
count.
|
146
|
+
expect(count).to eq(1)
|
147
147
|
end
|
148
148
|
|
149
149
|
context "and a limit true" do
|
@@ -159,7 +159,7 @@ describe Mongoid::Contextual::Mongo do
|
|
159
159
|
end
|
160
160
|
|
161
161
|
it "returns the number of documents that match" do
|
162
|
-
count.
|
162
|
+
expect(count).to eq(1)
|
163
163
|
end
|
164
164
|
end
|
165
165
|
end
|
@@ -179,7 +179,7 @@ describe Mongoid::Contextual::Mongo do
|
|
179
179
|
end
|
180
180
|
|
181
181
|
it "returns the number of documents that match" do
|
182
|
-
count.
|
182
|
+
expect(count).to eq(2)
|
183
183
|
end
|
184
184
|
end
|
185
185
|
end
|
@@ -211,15 +211,15 @@ describe Mongoid::Contextual::Mongo do
|
|
211
211
|
end
|
212
212
|
|
213
213
|
it "deletes the matching documents" do
|
214
|
-
Band.find(new_order.id).
|
214
|
+
expect(Band.find(new_order.id)).to eq(new_order)
|
215
215
|
end
|
216
216
|
|
217
217
|
it "deletes the correct number of documents" do
|
218
|
-
Band.count.
|
218
|
+
expect(Band.count).to eq(1)
|
219
219
|
end
|
220
220
|
|
221
221
|
it "returns the number of documents deleted" do
|
222
|
-
deleted.
|
222
|
+
expect(deleted).to eq(1)
|
223
223
|
end
|
224
224
|
end
|
225
225
|
|
@@ -238,7 +238,7 @@ describe Mongoid::Contextual::Mongo do
|
|
238
238
|
end
|
239
239
|
|
240
240
|
it "deletes all the documents" do
|
241
|
-
Band.count.
|
241
|
+
expect(Band.count).to eq(0)
|
242
242
|
end
|
243
243
|
end
|
244
244
|
end
|
@@ -271,15 +271,15 @@ describe Mongoid::Contextual::Mongo do
|
|
271
271
|
end
|
272
272
|
|
273
273
|
it "destroys the matching documents" do
|
274
|
-
Band.find(new_order.id).
|
274
|
+
expect(Band.find(new_order.id)).to eq(new_order)
|
275
275
|
end
|
276
276
|
|
277
277
|
it "destroys the correct number of documents" do
|
278
|
-
Band.count.
|
278
|
+
expect(Band.count).to eq(1)
|
279
279
|
end
|
280
280
|
|
281
281
|
it "returns the number of documents destroyed" do
|
282
|
-
destroyed.
|
282
|
+
expect(destroyed).to eq(1)
|
283
283
|
end
|
284
284
|
end
|
285
285
|
|
@@ -298,7 +298,7 @@ describe Mongoid::Contextual::Mongo do
|
|
298
298
|
end
|
299
299
|
|
300
300
|
it "destroys all the documents" do
|
301
|
-
Band.count.
|
301
|
+
expect(Band.count).to eq(0)
|
302
302
|
end
|
303
303
|
end
|
304
304
|
end
|
@@ -322,7 +322,7 @@ describe Mongoid::Contextual::Mongo do
|
|
322
322
|
end
|
323
323
|
|
324
324
|
it "returns the distinct matching fields" do
|
325
|
-
context.distinct(:name).
|
325
|
+
expect(context.distinct(:name)).to eq([ "Depeche Mode" ])
|
326
326
|
end
|
327
327
|
end
|
328
328
|
|
@@ -337,7 +337,7 @@ describe Mongoid::Contextual::Mongo do
|
|
337
337
|
end
|
338
338
|
|
339
339
|
it "returns the distinct field values" do
|
340
|
-
context.distinct(:name).
|
340
|
+
expect(context.distinct(:name)).to eq([ "Depeche Mode", "New Order" ])
|
341
341
|
end
|
342
342
|
end
|
343
343
|
|
@@ -352,7 +352,7 @@ describe Mongoid::Contextual::Mongo do
|
|
352
352
|
end
|
353
353
|
|
354
354
|
it "returns the distinct field values" do
|
355
|
-
context.distinct(:years).
|
355
|
+
expect(context.distinct(:years)).to eq([ 30, 25 ])
|
356
356
|
end
|
357
357
|
end
|
358
358
|
end
|
@@ -375,18 +375,18 @@ describe Mongoid::Contextual::Mongo do
|
|
375
375
|
|
376
376
|
it "yields mongoid documents to the block" do
|
377
377
|
context.each do |doc|
|
378
|
-
doc.
|
378
|
+
expect(doc).to be_a(Mongoid::Document)
|
379
379
|
end
|
380
380
|
end
|
381
381
|
|
382
382
|
it "iterates over the matching documents" do
|
383
383
|
context.each do |doc|
|
384
|
-
doc.name.
|
384
|
+
expect(doc.name).to eq("Depeche Mode")
|
385
385
|
end
|
386
386
|
end
|
387
387
|
|
388
388
|
it "returns self" do
|
389
|
-
context.each{}.
|
389
|
+
expect(context.each{}).to be(context)
|
390
390
|
end
|
391
391
|
end
|
392
392
|
|
@@ -397,7 +397,7 @@ describe Mongoid::Contextual::Mongo do
|
|
397
397
|
end
|
398
398
|
|
399
399
|
it "returns an enumerator" do
|
400
|
-
enum.
|
400
|
+
expect(enum).to be_a(Enumerator)
|
401
401
|
end
|
402
402
|
|
403
403
|
context "when iterating over the enumerator" do
|
@@ -406,7 +406,7 @@ describe Mongoid::Contextual::Mongo do
|
|
406
406
|
|
407
407
|
it "yields mongoid documents to the block" do
|
408
408
|
enum.each do |doc|
|
409
|
-
doc.
|
409
|
+
expect(doc).to be_a(Mongoid::Document)
|
410
410
|
end
|
411
411
|
end
|
412
412
|
end
|
@@ -414,7 +414,7 @@ describe Mongoid::Contextual::Mongo do
|
|
414
414
|
context "when iterating with next" do
|
415
415
|
|
416
416
|
it "yields mongoid documents" do
|
417
|
-
enum.next.
|
417
|
+
expect(enum.next).to be_a(Mongoid::Document)
|
418
418
|
end
|
419
419
|
end
|
420
420
|
end
|
@@ -438,7 +438,7 @@ describe Mongoid::Contextual::Mongo do
|
|
438
438
|
end
|
439
439
|
|
440
440
|
it "does not make any additional database queries" do
|
441
|
-
game_metadata.
|
441
|
+
expect(game_metadata).to receive(:eager_load).never
|
442
442
|
context.send(:eager_load, [])
|
443
443
|
end
|
444
444
|
end
|
@@ -461,7 +461,7 @@ describe Mongoid::Contextual::Mongo do
|
|
461
461
|
end
|
462
462
|
|
463
463
|
it "returns false" do
|
464
|
-
context.
|
464
|
+
expect(context).to_not be_exists
|
465
465
|
end
|
466
466
|
end
|
467
467
|
|
@@ -476,7 +476,30 @@ describe Mongoid::Contextual::Mongo do
|
|
476
476
|
end
|
477
477
|
|
478
478
|
it "returns true" do
|
479
|
-
context.
|
479
|
+
expect(context).to be_exists
|
480
|
+
end
|
481
|
+
end
|
482
|
+
|
483
|
+
context "when caching is not enabled" do
|
484
|
+
|
485
|
+
let(:criteria) do
|
486
|
+
Band.where(name: "Depeche Mode")
|
487
|
+
end
|
488
|
+
|
489
|
+
let(:context) do
|
490
|
+
described_class.new(criteria)
|
491
|
+
end
|
492
|
+
|
493
|
+
context "when exists? already called" do
|
494
|
+
|
495
|
+
before do
|
496
|
+
context.exists?
|
497
|
+
end
|
498
|
+
|
499
|
+
it "hits the database again" do
|
500
|
+
expect(context).to receive(:query).once.and_call_original
|
501
|
+
expect(context).to be_exists
|
502
|
+
end
|
480
503
|
end
|
481
504
|
end
|
482
505
|
|
@@ -497,8 +520,8 @@ describe Mongoid::Contextual::Mongo do
|
|
497
520
|
end
|
498
521
|
|
499
522
|
it "does not hit the database" do
|
500
|
-
context.
|
501
|
-
context.
|
523
|
+
expect(context).to receive(:query).never
|
524
|
+
expect(context).to be_exists
|
502
525
|
end
|
503
526
|
end
|
504
527
|
|
@@ -511,8 +534,8 @@ describe Mongoid::Contextual::Mongo do
|
|
511
534
|
end
|
512
535
|
|
513
536
|
it "does not hit the database" do
|
514
|
-
context.
|
515
|
-
context.
|
537
|
+
expect(context).to receive(:query).never
|
538
|
+
expect(context).to be_exists
|
516
539
|
end
|
517
540
|
end
|
518
541
|
end
|
@@ -530,7 +553,7 @@ describe Mongoid::Contextual::Mongo do
|
|
530
553
|
end
|
531
554
|
|
532
555
|
it "returns the criteria explain path" do
|
533
|
-
context.explain["cursor"].
|
556
|
+
expect(context.explain["cursor"]).to eq("BasicCursor")
|
534
557
|
end
|
535
558
|
end
|
536
559
|
|
@@ -561,11 +584,11 @@ describe Mongoid::Contextual::Mongo do
|
|
561
584
|
end
|
562
585
|
|
563
586
|
it "returns the first matching document" do
|
564
|
-
result.
|
587
|
+
expect(result).to eq(depeche)
|
565
588
|
end
|
566
589
|
|
567
590
|
it "updates the document in the database" do
|
568
|
-
depeche.reload.likes.
|
591
|
+
expect(depeche.reload.likes).to eq(1)
|
569
592
|
end
|
570
593
|
end
|
571
594
|
|
@@ -584,11 +607,11 @@ describe Mongoid::Contextual::Mongo do
|
|
584
607
|
end
|
585
608
|
|
586
609
|
it "returns the first matching document" do
|
587
|
-
result.
|
610
|
+
expect(result).to eq(tool)
|
588
611
|
end
|
589
612
|
|
590
613
|
it "updates the document in the database" do
|
591
|
-
tool.reload.likes.
|
614
|
+
expect(tool.reload.likes).to eq(1)
|
592
615
|
end
|
593
616
|
end
|
594
617
|
|
@@ -607,15 +630,15 @@ describe Mongoid::Contextual::Mongo do
|
|
607
630
|
end
|
608
631
|
|
609
632
|
it "returns the first matching document" do
|
610
|
-
result.
|
633
|
+
expect(result).to eq(depeche)
|
611
634
|
end
|
612
635
|
|
613
636
|
it "limits the returned fields" do
|
614
|
-
result.name.
|
637
|
+
expect(result.name).to be_nil
|
615
638
|
end
|
616
639
|
|
617
640
|
it "updates the document in the database" do
|
618
|
-
depeche.reload.likes.
|
641
|
+
expect(depeche.reload.likes).to eq(1)
|
619
642
|
end
|
620
643
|
end
|
621
644
|
|
@@ -634,11 +657,11 @@ describe Mongoid::Contextual::Mongo do
|
|
634
657
|
end
|
635
658
|
|
636
659
|
it "returns the first matching document" do
|
637
|
-
result.
|
660
|
+
expect(result).to eq(depeche)
|
638
661
|
end
|
639
662
|
|
640
663
|
it "returns the updated document" do
|
641
|
-
result.likes.
|
664
|
+
expect(result.likes).to eq(1)
|
642
665
|
end
|
643
666
|
end
|
644
667
|
|
@@ -657,7 +680,7 @@ describe Mongoid::Contextual::Mongo do
|
|
657
680
|
end
|
658
681
|
|
659
682
|
it "returns the first matching document" do
|
660
|
-
result.
|
683
|
+
expect(result).to eq(depeche)
|
661
684
|
end
|
662
685
|
|
663
686
|
it "deletes the document from the database" do
|
@@ -683,7 +706,7 @@ describe Mongoid::Contextual::Mongo do
|
|
683
706
|
end
|
684
707
|
|
685
708
|
it "returns nil" do
|
686
|
-
result.
|
709
|
+
expect(result).to be_nil
|
687
710
|
end
|
688
711
|
end
|
689
712
|
end
|
@@ -711,7 +734,7 @@ describe Mongoid::Contextual::Mongo do
|
|
711
734
|
end
|
712
735
|
|
713
736
|
it "returns the first matching document" do
|
714
|
-
context.send(method).
|
737
|
+
expect(context.send(method)).to eq(depeche_mode)
|
715
738
|
end
|
716
739
|
end
|
717
740
|
|
@@ -728,15 +751,15 @@ describe Mongoid::Contextual::Mongo do
|
|
728
751
|
context "when there is sort on the context" do
|
729
752
|
|
730
753
|
it "follows the main sort" do
|
731
|
-
context.send(method).
|
754
|
+
expect(context.send(method)).to eq(new_order)
|
732
755
|
end
|
733
756
|
end
|
734
757
|
|
735
758
|
context "when subsequently calling #last" do
|
736
759
|
|
737
760
|
it "returns the correnct document" do
|
738
|
-
context.send(method).
|
739
|
-
context.last.
|
761
|
+
expect(context.send(method)).to eq(new_order)
|
762
|
+
expect(context.last).to eq(depeche_mode)
|
740
763
|
end
|
741
764
|
end
|
742
765
|
end
|
@@ -754,15 +777,15 @@ describe Mongoid::Contextual::Mongo do
|
|
754
777
|
context "when there is sort on the context" do
|
755
778
|
|
756
779
|
it "follows the main sort" do
|
757
|
-
context.send(method).
|
780
|
+
expect(context.send(method)).to eq(new_order)
|
758
781
|
end
|
759
782
|
end
|
760
783
|
|
761
784
|
context "when subsequently calling #last" do
|
762
785
|
|
763
786
|
it "returns the correnct document" do
|
764
|
-
context.send(method).
|
765
|
-
context.last.
|
787
|
+
expect(context.send(method)).to eq(new_order)
|
788
|
+
expect(context.last).to eq(depeche_mode)
|
766
789
|
end
|
767
790
|
end
|
768
791
|
end
|
@@ -784,8 +807,20 @@ describe Mongoid::Contextual::Mongo do
|
|
784
807
|
end
|
785
808
|
|
786
809
|
it "returns the first document without touching the database" do
|
787
|
-
context.
|
788
|
-
context.send(method).
|
810
|
+
expect(context).to receive(:query).never
|
811
|
+
expect(context.send(method)).to eq(depeche_mode)
|
812
|
+
end
|
813
|
+
end
|
814
|
+
|
815
|
+
context "when first method was called before" do
|
816
|
+
|
817
|
+
before do
|
818
|
+
context.first
|
819
|
+
end
|
820
|
+
|
821
|
+
it "returns the first document without touching the database" do
|
822
|
+
expect(context).to receive(:query).never
|
823
|
+
expect(context.send(method)).to eq(depeche_mode)
|
789
824
|
end
|
790
825
|
end
|
791
826
|
end
|
@@ -803,23 +838,23 @@ describe Mongoid::Contextual::Mongo do
|
|
803
838
|
end
|
804
839
|
|
805
840
|
it "sets the criteria" do
|
806
|
-
context.criteria.
|
841
|
+
expect(context.criteria).to eq(criteria)
|
807
842
|
end
|
808
843
|
|
809
844
|
it "sets the klass" do
|
810
|
-
context.klass.
|
845
|
+
expect(context.klass).to eq(Band)
|
811
846
|
end
|
812
847
|
|
813
848
|
it "sets the query" do
|
814
|
-
context.query.
|
849
|
+
expect(context.query).to be_a(Moped::Query)
|
815
850
|
end
|
816
851
|
|
817
852
|
it "sets the query selector" do
|
818
|
-
context.query.selector.
|
853
|
+
expect(context.query.selector).to eq({ "name" => "Depeche Mode" })
|
819
854
|
end
|
820
855
|
|
821
856
|
it "sets timeout options" do
|
822
|
-
context.query.operation.flags.
|
857
|
+
expect(context.query.operation.flags).to eq([ :no_cursor_timeout ])
|
823
858
|
end
|
824
859
|
end
|
825
860
|
|
@@ -844,7 +879,7 @@ describe Mongoid::Contextual::Mongo do
|
|
844
879
|
end
|
845
880
|
|
846
881
|
it "returns the last matching document" do
|
847
|
-
context.last.
|
882
|
+
expect(context.last).to eq(new_order)
|
848
883
|
end
|
849
884
|
end
|
850
885
|
|
@@ -867,7 +902,7 @@ describe Mongoid::Contextual::Mongo do
|
|
867
902
|
end
|
868
903
|
|
869
904
|
it "respects default scope" do
|
870
|
-
context.last.
|
905
|
+
expect(context.last).to eq(palm)
|
871
906
|
end
|
872
907
|
end
|
873
908
|
|
@@ -890,8 +925,8 @@ describe Mongoid::Contextual::Mongo do
|
|
890
925
|
end
|
891
926
|
|
892
927
|
it "returns the correnct document" do
|
893
|
-
context.last.
|
894
|
-
context.first.
|
928
|
+
expect(context.last).to eq(new_order)
|
929
|
+
expect(context.first).to eq(depeche_mode)
|
895
930
|
end
|
896
931
|
end
|
897
932
|
end
|
@@ -916,17 +951,17 @@ describe Mongoid::Contextual::Mongo do
|
|
916
951
|
end
|
917
952
|
|
918
953
|
it "returns the number of documents that match" do
|
919
|
-
context.send(method).
|
954
|
+
expect(context.send(method)).to eq(2)
|
920
955
|
end
|
921
956
|
|
922
957
|
context "when calling more than once" do
|
923
958
|
|
924
959
|
before do
|
925
|
-
context.query.
|
960
|
+
expect(context.query).to receive(:count).once.and_return(2)
|
926
961
|
end
|
927
962
|
|
928
963
|
it "returns the cached value for subsequent calls" do
|
929
|
-
2.times { context.send(method).
|
964
|
+
2.times { expect(context.send(method)).to eq(2) }
|
930
965
|
end
|
931
966
|
end
|
932
967
|
|
@@ -934,11 +969,11 @@ describe Mongoid::Contextual::Mongo do
|
|
934
969
|
|
935
970
|
before do
|
936
971
|
context.entries
|
937
|
-
context.query.
|
972
|
+
expect(context.query).to receive(:count).once.and_return(2)
|
938
973
|
end
|
939
974
|
|
940
975
|
it "returns the cached value for all calls" do
|
941
|
-
context.send(method).
|
976
|
+
expect(context.send(method)).to eq(2)
|
942
977
|
end
|
943
978
|
|
944
979
|
context "when the results have been iterated over multiple times" do
|
@@ -948,7 +983,7 @@ describe Mongoid::Contextual::Mongo do
|
|
948
983
|
end
|
949
984
|
|
950
985
|
it "resets the length on each full iteration" do
|
951
|
-
context.
|
986
|
+
expect(context.size).to eq(2)
|
952
987
|
end
|
953
988
|
end
|
954
989
|
end
|
@@ -965,17 +1000,17 @@ describe Mongoid::Contextual::Mongo do
|
|
965
1000
|
end
|
966
1001
|
|
967
1002
|
it "returns the number of documents that match" do
|
968
|
-
context.send(method).
|
1003
|
+
expect(context.send(method)).to eq(1)
|
969
1004
|
end
|
970
1005
|
|
971
1006
|
context "when calling more than once" do
|
972
1007
|
|
973
1008
|
before do
|
974
|
-
context.query.
|
1009
|
+
expect(context.query).to receive(:count).once.and_return(1)
|
975
1010
|
end
|
976
1011
|
|
977
1012
|
it "returns the cached value for subsequent calls" do
|
978
|
-
2.times { context.send(method).
|
1013
|
+
2.times { expect(context.send(method)).to eq(1) }
|
979
1014
|
end
|
980
1015
|
end
|
981
1016
|
|
@@ -983,11 +1018,11 @@ describe Mongoid::Contextual::Mongo do
|
|
983
1018
|
|
984
1019
|
before do
|
985
1020
|
context.entries
|
986
|
-
context.query.
|
1021
|
+
expect(context.query).to receive(:count).once.and_return(1)
|
987
1022
|
end
|
988
1023
|
|
989
1024
|
it "returns the cached value for all calls" do
|
990
|
-
context.send(method).
|
1025
|
+
expect(context.send(method)).to eq(1)
|
991
1026
|
end
|
992
1027
|
|
993
1028
|
context "when the results have been iterated over multiple times" do
|
@@ -997,7 +1032,7 @@ describe Mongoid::Contextual::Mongo do
|
|
997
1032
|
end
|
998
1033
|
|
999
1034
|
it "resets the length on each full iteration" do
|
1000
|
-
context.
|
1035
|
+
expect(context.size).to eq(1)
|
1001
1036
|
end
|
1002
1037
|
end
|
1003
1038
|
end
|
@@ -1024,7 +1059,7 @@ describe Mongoid::Contextual::Mongo do
|
|
1024
1059
|
end
|
1025
1060
|
|
1026
1061
|
it "limits the results" do
|
1027
|
-
context.limit(1).entries.
|
1062
|
+
expect(context.limit(1).entries).to eq([ depeche_mode ])
|
1028
1063
|
end
|
1029
1064
|
end
|
1030
1065
|
|
@@ -1046,19 +1081,19 @@ describe Mongoid::Contextual::Mongo do
|
|
1046
1081
|
context "when passed the symbol field name" do
|
1047
1082
|
|
1048
1083
|
it "limits query to that field" do
|
1049
|
-
criteria.
|
1084
|
+
expect(criteria).to receive(:only).with(:name).and_call_original
|
1050
1085
|
context.map(:name)
|
1051
1086
|
end
|
1052
1087
|
|
1053
1088
|
it "performs mapping" do
|
1054
|
-
context.map(:name).
|
1089
|
+
expect(context.map(:name)).to eq ["Depeche Mode", "New Order"]
|
1055
1090
|
end
|
1056
1091
|
end
|
1057
1092
|
|
1058
1093
|
context "when passed a block" do
|
1059
1094
|
|
1060
1095
|
it "performs mapping" do
|
1061
|
-
context.map(&:name).
|
1096
|
+
expect(context.map(&:name)).to eq ["Depeche Mode", "New Order"]
|
1062
1097
|
end
|
1063
1098
|
end
|
1064
1099
|
end
|
@@ -1106,52 +1141,52 @@ describe Mongoid::Contextual::Mongo do
|
|
1106
1141
|
end
|
1107
1142
|
|
1108
1143
|
it "returns the first aggregate result" do
|
1109
|
-
results.
|
1144
|
+
expect(results).to include(
|
1110
1145
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1111
1146
|
)
|
1112
1147
|
end
|
1113
1148
|
|
1114
1149
|
it "returns the second aggregate result" do
|
1115
|
-
results.
|
1150
|
+
expect(results).to include(
|
1116
1151
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
1117
1152
|
)
|
1118
1153
|
end
|
1119
1154
|
|
1120
1155
|
it "returns the correct number of documents" do
|
1121
|
-
results.count.
|
1156
|
+
expect(results.count).to eq(2)
|
1122
1157
|
end
|
1123
1158
|
|
1124
1159
|
it "contains the entire raw results" do
|
1125
|
-
results["results"].
|
1160
|
+
expect(results["results"]).to eq([
|
1126
1161
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
1127
1162
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
1128
1163
|
])
|
1129
1164
|
end
|
1130
1165
|
|
1131
1166
|
it "contains the execution time" do
|
1132
|
-
results.time.
|
1167
|
+
expect(results.time).to_not be_nil
|
1133
1168
|
end
|
1134
1169
|
|
1135
1170
|
it "contains the count statistics" do
|
1136
|
-
results["counts"].
|
1171
|
+
expect(results["counts"]).to eq({
|
1137
1172
|
"input" => 2, "emit" => 2, "reduce" => 0, "output" => 2
|
1138
1173
|
})
|
1139
1174
|
end
|
1140
1175
|
|
1141
1176
|
it "contains the input count" do
|
1142
|
-
results.input.
|
1177
|
+
expect(results.input).to eq(2)
|
1143
1178
|
end
|
1144
1179
|
|
1145
1180
|
it "contains the emitted count" do
|
1146
|
-
results.emitted.
|
1181
|
+
expect(results.emitted).to eq(2)
|
1147
1182
|
end
|
1148
1183
|
|
1149
1184
|
it "contains the reduced count" do
|
1150
|
-
results.reduced.
|
1185
|
+
expect(results.reduced).to eq(0)
|
1151
1186
|
end
|
1152
1187
|
|
1153
1188
|
it "contains the output count" do
|
1154
|
-
results.output.
|
1189
|
+
expect(results.output).to eq(2)
|
1155
1190
|
end
|
1156
1191
|
end
|
1157
1192
|
|
@@ -1170,45 +1205,45 @@ describe Mongoid::Contextual::Mongo do
|
|
1170
1205
|
end
|
1171
1206
|
|
1172
1207
|
it "includes the aggregate result" do
|
1173
|
-
results.
|
1208
|
+
expect(results).to include(
|
1174
1209
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1175
1210
|
)
|
1176
1211
|
end
|
1177
1212
|
|
1178
1213
|
it "returns the correct number of documents" do
|
1179
|
-
results.count.
|
1214
|
+
expect(results.count).to eq(1)
|
1180
1215
|
end
|
1181
1216
|
|
1182
1217
|
it "contains the entire raw results" do
|
1183
|
-
results["results"].
|
1218
|
+
expect(results["results"]).to eq([
|
1184
1219
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1185
1220
|
])
|
1186
1221
|
end
|
1187
1222
|
|
1188
1223
|
it "contains the execution time" do
|
1189
|
-
results.time.
|
1224
|
+
expect(results.time).to_not be_nil
|
1190
1225
|
end
|
1191
1226
|
|
1192
1227
|
it "contains the count statistics" do
|
1193
|
-
results["counts"].
|
1228
|
+
expect(results["counts"]).to eq({
|
1194
1229
|
"input" => 1, "emit" => 1, "reduce" => 0, "output" => 1
|
1195
1230
|
})
|
1196
1231
|
end
|
1197
1232
|
|
1198
1233
|
it "contains the input count" do
|
1199
|
-
results.input.
|
1234
|
+
expect(results.input).to eq(1)
|
1200
1235
|
end
|
1201
1236
|
|
1202
1237
|
it "contains the emitted count" do
|
1203
|
-
results.emitted.
|
1238
|
+
expect(results.emitted).to eq(1)
|
1204
1239
|
end
|
1205
1240
|
|
1206
1241
|
it "contains the reduced count" do
|
1207
|
-
results.reduced.
|
1242
|
+
expect(results.reduced).to eq(0)
|
1208
1243
|
end
|
1209
1244
|
|
1210
1245
|
it "contains the output count" do
|
1211
|
-
results.output.
|
1246
|
+
expect(results.output).to eq(1)
|
1212
1247
|
end
|
1213
1248
|
end
|
1214
1249
|
|
@@ -1232,23 +1267,23 @@ describe Mongoid::Contextual::Mongo do
|
|
1232
1267
|
end
|
1233
1268
|
|
1234
1269
|
it "returns the first aggregate result" do
|
1235
|
-
results.
|
1270
|
+
expect(results).to include(
|
1236
1271
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
1237
1272
|
)
|
1238
1273
|
end
|
1239
1274
|
|
1240
1275
|
it "returns the second aggregate result" do
|
1241
|
-
results.
|
1276
|
+
expect(results).to include(
|
1242
1277
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1243
1278
|
)
|
1244
1279
|
end
|
1245
1280
|
|
1246
1281
|
it "returns the correct number of documents" do
|
1247
|
-
results.count.
|
1282
|
+
expect(results.count).to eq(2)
|
1248
1283
|
end
|
1249
1284
|
|
1250
1285
|
it "contains the entire raw results" do
|
1251
|
-
results["results"].
|
1286
|
+
expect(results["results"]).to eq([
|
1252
1287
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
|
1253
1288
|
{ "_id" => "Tool", "value" => { "likes" => 100 }}
|
1254
1289
|
])
|
@@ -1270,17 +1305,17 @@ describe Mongoid::Contextual::Mongo do
|
|
1270
1305
|
end
|
1271
1306
|
|
1272
1307
|
it "returns the first aggregate result" do
|
1273
|
-
results.
|
1308
|
+
expect(results).to include(
|
1274
1309
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1275
1310
|
)
|
1276
1311
|
end
|
1277
1312
|
|
1278
1313
|
it "returns the correct number of documents" do
|
1279
|
-
results.count.
|
1314
|
+
expect(results.count).to eq(1)
|
1280
1315
|
end
|
1281
1316
|
|
1282
1317
|
it "contains the entire raw results" do
|
1283
|
-
results["results"].
|
1318
|
+
expect(results["results"]).to eq([
|
1284
1319
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1285
1320
|
])
|
1286
1321
|
end
|
@@ -1301,11 +1336,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1301
1336
|
end
|
1302
1337
|
|
1303
1338
|
it "returns the correct number of documents" do
|
1304
|
-
results.count.
|
1339
|
+
expect(results.count).to eq(1)
|
1305
1340
|
end
|
1306
1341
|
|
1307
1342
|
it "contains the entire results" do
|
1308
|
-
results.
|
1343
|
+
expect(results).to eq([
|
1309
1344
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1310
1345
|
])
|
1311
1346
|
end
|
@@ -1326,11 +1361,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1326
1361
|
end
|
1327
1362
|
|
1328
1363
|
it "returns the correct number of documents" do
|
1329
|
-
results.count.
|
1364
|
+
expect(results.count).to eq(1)
|
1330
1365
|
end
|
1331
1366
|
|
1332
1367
|
it "contains the entire results" do
|
1333
|
-
results.
|
1368
|
+
expect(results).to eq([
|
1334
1369
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1335
1370
|
])
|
1336
1371
|
end
|
@@ -1351,11 +1386,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1351
1386
|
end
|
1352
1387
|
|
1353
1388
|
it "returns the correct number of documents" do
|
1354
|
-
results.count.
|
1389
|
+
expect(results.count).to eq(1)
|
1355
1390
|
end
|
1356
1391
|
|
1357
1392
|
it "contains the entire results" do
|
1358
|
-
results.
|
1393
|
+
expect(results).to eq([
|
1359
1394
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1360
1395
|
])
|
1361
1396
|
end
|
@@ -1405,11 +1440,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1405
1440
|
end
|
1406
1441
|
|
1407
1442
|
it "returns the correct number of documents" do
|
1408
|
-
results.count.
|
1443
|
+
expect(results.count).to eq(1)
|
1409
1444
|
end
|
1410
1445
|
|
1411
1446
|
it "contains the entire results" do
|
1412
|
-
results.
|
1447
|
+
expect(results).to eq([
|
1413
1448
|
{ "_id" => "Depeche Mode", "value" => { "likes" => 200, "extra" => true }}
|
1414
1449
|
])
|
1415
1450
|
end
|
@@ -1435,7 +1470,7 @@ describe Mongoid::Contextual::Mongo do
|
|
1435
1470
|
end
|
1436
1471
|
|
1437
1472
|
it "limits the results" do
|
1438
|
-
context.skip(1).entries.
|
1473
|
+
expect(context.skip(1).entries).to eq([ new_order ])
|
1439
1474
|
end
|
1440
1475
|
end
|
1441
1476
|
|
@@ -1460,11 +1495,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1460
1495
|
context "when providing a spec" do
|
1461
1496
|
|
1462
1497
|
it "sorts the results" do
|
1463
|
-
context.sort(name: -1).entries.
|
1498
|
+
expect(context.sort(name: -1).entries).to eq([ new_order, depeche_mode ])
|
1464
1499
|
end
|
1465
1500
|
|
1466
1501
|
it "returns the context" do
|
1467
|
-
context.sort(name: 1).
|
1502
|
+
expect(context.sort(name: 1)).to eq(context)
|
1468
1503
|
end
|
1469
1504
|
end
|
1470
1505
|
|
@@ -1477,7 +1512,60 @@ describe Mongoid::Contextual::Mongo do
|
|
1477
1512
|
end
|
1478
1513
|
|
1479
1514
|
it "sorts the results in memory" do
|
1480
|
-
sorted.
|
1515
|
+
expect(sorted).to eq([ new_order, depeche_mode ])
|
1516
|
+
end
|
1517
|
+
end
|
1518
|
+
end
|
1519
|
+
|
1520
|
+
describe "#text_search" do
|
1521
|
+
|
1522
|
+
let(:criteria) do
|
1523
|
+
Word.all
|
1524
|
+
end
|
1525
|
+
|
1526
|
+
let(:context) do
|
1527
|
+
described_class.new(criteria)
|
1528
|
+
end
|
1529
|
+
|
1530
|
+
before do
|
1531
|
+
Word.with(database: "admin").mongo_session.command(setParameter: 1, textSearchEnabled: true)
|
1532
|
+
Word.create_indexes
|
1533
|
+
Word.create!(name: "phase", origin: "latin")
|
1534
|
+
end
|
1535
|
+
|
1536
|
+
after(:all) do
|
1537
|
+
Word.remove_indexes
|
1538
|
+
end
|
1539
|
+
|
1540
|
+
context "when the search is projecting" do
|
1541
|
+
|
1542
|
+
let(:search) do
|
1543
|
+
context.text_search("phase").project(name: 1)
|
1544
|
+
end
|
1545
|
+
|
1546
|
+
let(:documents) do
|
1547
|
+
search.entries
|
1548
|
+
end
|
1549
|
+
|
1550
|
+
it "limits the fields to the projection" do
|
1551
|
+
expect {
|
1552
|
+
documents.first.origin
|
1553
|
+
}.to raise_error(ActiveModel::MissingAttributeError)
|
1554
|
+
end
|
1555
|
+
end
|
1556
|
+
|
1557
|
+
context "when the search is not projecting" do
|
1558
|
+
|
1559
|
+
let(:search) do
|
1560
|
+
context.text_search("phase")
|
1561
|
+
end
|
1562
|
+
|
1563
|
+
let(:documents) do
|
1564
|
+
search.entries
|
1565
|
+
end
|
1566
|
+
|
1567
|
+
it "returns all fields" do
|
1568
|
+
expect(documents.first.origin).to eq("latin")
|
1481
1569
|
end
|
1482
1570
|
end
|
1483
1571
|
end
|
@@ -1529,11 +1617,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1529
1617
|
end
|
1530
1618
|
|
1531
1619
|
it "updates only the first matching document" do
|
1532
|
-
depeche_mode.reload.name.
|
1620
|
+
expect(depeche_mode.reload.name).to eq("Smiths")
|
1533
1621
|
end
|
1534
1622
|
|
1535
1623
|
it "does not update the last matching document" do
|
1536
|
-
new_order.reload.name.
|
1624
|
+
expect(new_order.reload.name).to eq("New Order")
|
1537
1625
|
end
|
1538
1626
|
end
|
1539
1627
|
|
@@ -1546,11 +1634,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1546
1634
|
end
|
1547
1635
|
|
1548
1636
|
it "updates the first matching document" do
|
1549
|
-
depeche_mode.reload.member_count.
|
1637
|
+
expect(depeche_mode.reload.member_count).to eq(1)
|
1550
1638
|
end
|
1551
1639
|
|
1552
1640
|
it "does not update the last matching document" do
|
1553
|
-
new_order.reload.member_count.
|
1641
|
+
expect(new_order.reload.member_count).to be_nil
|
1554
1642
|
end
|
1555
1643
|
end
|
1556
1644
|
|
@@ -1561,11 +1649,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1561
1649
|
end
|
1562
1650
|
|
1563
1651
|
it "updates the first matching document" do
|
1564
|
-
depeche_mode.reload.founded.
|
1652
|
+
expect(depeche_mode.reload.founded).to eq(Date.new(1979, 1, 1))
|
1565
1653
|
end
|
1566
1654
|
|
1567
1655
|
it "does not update the last matching document" do
|
1568
|
-
new_order.reload.founded.
|
1656
|
+
expect(new_order.reload.founded).to be_nil
|
1569
1657
|
end
|
1570
1658
|
end
|
1571
1659
|
end
|
@@ -1582,11 +1670,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1582
1670
|
end
|
1583
1671
|
|
1584
1672
|
it "updates the first matching document" do
|
1585
|
-
depeche_mode.reload.name.
|
1673
|
+
expect(depeche_mode.reload.name).to eq("Smiths")
|
1586
1674
|
end
|
1587
1675
|
|
1588
1676
|
it "does not update the last matching document" do
|
1589
|
-
new_order.reload.name.
|
1677
|
+
expect(new_order.reload.name).to eq("New Order")
|
1590
1678
|
end
|
1591
1679
|
end
|
1592
1680
|
|
@@ -1597,11 +1685,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1597
1685
|
end
|
1598
1686
|
|
1599
1687
|
it "updates the first matching document" do
|
1600
|
-
depeche_mode.reload.member_count.
|
1688
|
+
expect(depeche_mode.reload.member_count).to eq(1)
|
1601
1689
|
end
|
1602
1690
|
|
1603
1691
|
it "does not update the last matching document" do
|
1604
|
-
new_order.reload.member_count.
|
1692
|
+
expect(new_order.reload.member_count).to be_nil
|
1605
1693
|
end
|
1606
1694
|
end
|
1607
1695
|
end
|
@@ -1613,19 +1701,19 @@ describe Mongoid::Contextual::Mongo do
|
|
1613
1701
|
end
|
1614
1702
|
|
1615
1703
|
it "updates the first matching document's set" do
|
1616
|
-
depeche_mode.reload.name.
|
1704
|
+
expect(depeche_mode.reload.name).to eq("Smiths")
|
1617
1705
|
end
|
1618
1706
|
|
1619
1707
|
it "updates the first matching document's updates" do
|
1620
|
-
depeche_mode.reload.likes.
|
1708
|
+
expect(depeche_mode.reload.likes).to eq(100)
|
1621
1709
|
end
|
1622
1710
|
|
1623
1711
|
it "does not update the last matching document's set" do
|
1624
|
-
new_order.reload.name.
|
1712
|
+
expect(new_order.reload.name).to eq("New Order")
|
1625
1713
|
end
|
1626
1714
|
|
1627
1715
|
it "does not update the last matching document's updates" do
|
1628
|
-
new_order.reload.likes.
|
1716
|
+
expect(new_order.reload.likes).to be_nil
|
1629
1717
|
end
|
1630
1718
|
end
|
1631
1719
|
end
|
@@ -1633,7 +1721,7 @@ describe Mongoid::Contextual::Mongo do
|
|
1633
1721
|
context "when providing no attributes" do
|
1634
1722
|
|
1635
1723
|
it "returns false" do
|
1636
|
-
context.update.
|
1724
|
+
expect(context.update).to be false
|
1637
1725
|
end
|
1638
1726
|
end
|
1639
1727
|
end
|
@@ -1665,15 +1753,15 @@ describe Mongoid::Contextual::Mongo do
|
|
1665
1753
|
end
|
1666
1754
|
|
1667
1755
|
it "updates the first matching document" do
|
1668
|
-
depeche_mode.reload.name.
|
1756
|
+
expect(depeche_mode.reload.name).to eq("Smiths")
|
1669
1757
|
end
|
1670
1758
|
|
1671
1759
|
it "does not clear out other attributes" do
|
1672
|
-
depeche_mode.reload.origin.
|
1760
|
+
expect(depeche_mode.reload.origin).to eq("Essex")
|
1673
1761
|
end
|
1674
1762
|
|
1675
1763
|
it "updates the last matching document" do
|
1676
|
-
new_order.reload.name.
|
1764
|
+
expect(new_order.reload.name).to eq("Smiths")
|
1677
1765
|
end
|
1678
1766
|
end
|
1679
1767
|
|
@@ -1684,11 +1772,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1684
1772
|
end
|
1685
1773
|
|
1686
1774
|
it "updates the first matching document" do
|
1687
|
-
depeche_mode.reload.member_count.
|
1775
|
+
expect(depeche_mode.reload.member_count).to eq(1)
|
1688
1776
|
end
|
1689
1777
|
|
1690
1778
|
it "updates the last matching document" do
|
1691
|
-
new_order.reload.member_count.
|
1779
|
+
expect(new_order.reload.member_count).to eq(1)
|
1692
1780
|
end
|
1693
1781
|
end
|
1694
1782
|
|
@@ -1699,11 +1787,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1699
1787
|
end
|
1700
1788
|
|
1701
1789
|
it "updates the first matching document" do
|
1702
|
-
depeche_mode.reload.years.
|
1790
|
+
expect(depeche_mode.reload.years).to eq(100)
|
1703
1791
|
end
|
1704
1792
|
|
1705
1793
|
it "updates the last matching document" do
|
1706
|
-
new_order.reload.years.
|
1794
|
+
expect(new_order.reload.years).to eq(100)
|
1707
1795
|
end
|
1708
1796
|
end
|
1709
1797
|
end
|
@@ -1719,11 +1807,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1719
1807
|
end
|
1720
1808
|
|
1721
1809
|
it "updates the first matching document" do
|
1722
|
-
depeche_mode.reload.name.
|
1810
|
+
expect(depeche_mode.reload.name).to eq("Smiths")
|
1723
1811
|
end
|
1724
1812
|
|
1725
1813
|
it "updates the last matching document" do
|
1726
|
-
new_order.reload.name.
|
1814
|
+
expect(new_order.reload.name).to eq("Smiths")
|
1727
1815
|
end
|
1728
1816
|
end
|
1729
1817
|
|
@@ -1734,11 +1822,11 @@ describe Mongoid::Contextual::Mongo do
|
|
1734
1822
|
end
|
1735
1823
|
|
1736
1824
|
it "updates the first matching document" do
|
1737
|
-
depeche_mode.reload.member_count.
|
1825
|
+
expect(depeche_mode.reload.member_count).to eq(1)
|
1738
1826
|
end
|
1739
1827
|
|
1740
1828
|
it "updates the last matching document" do
|
1741
|
-
new_order.reload.member_count.
|
1829
|
+
expect(new_order.reload.member_count).to eq(1)
|
1742
1830
|
end
|
1743
1831
|
end
|
1744
1832
|
end
|
@@ -1750,19 +1838,19 @@ describe Mongoid::Contextual::Mongo do
|
|
1750
1838
|
end
|
1751
1839
|
|
1752
1840
|
it "updates the first matching document's set" do
|
1753
|
-
depeche_mode.reload.name.
|
1841
|
+
expect(depeche_mode.reload.name).to eq("Smiths")
|
1754
1842
|
end
|
1755
1843
|
|
1756
1844
|
it "updates the first matching document's updates" do
|
1757
|
-
depeche_mode.reload.likes.
|
1845
|
+
expect(depeche_mode.reload.likes).to eq(100)
|
1758
1846
|
end
|
1759
1847
|
|
1760
1848
|
it "updates the last matching document's set" do
|
1761
|
-
new_order.reload.name.
|
1849
|
+
expect(new_order.reload.name).to eq("Smiths")
|
1762
1850
|
end
|
1763
1851
|
|
1764
1852
|
it "updates the last matching document's updates" do
|
1765
|
-
new_order.reload.likes.
|
1853
|
+
expect(new_order.reload.likes).to eq(100)
|
1766
1854
|
end
|
1767
1855
|
end
|
1768
1856
|
end
|
@@ -1770,7 +1858,7 @@ describe Mongoid::Contextual::Mongo do
|
|
1770
1858
|
context "when providing no attributes" do
|
1771
1859
|
|
1772
1860
|
it "returns false" do
|
1773
|
-
context.update_all.
|
1861
|
+
expect(context.update_all).to be false
|
1774
1862
|
end
|
1775
1863
|
end
|
1776
1864
|
end
|