mongoid 3.1.7 → 4.0.0.alpha1
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 +317 -11
- data/README.md +4 -5
- data/lib/config/locales/en.yml +9 -12
- data/lib/mongoid.rb +6 -75
- data/lib/mongoid/atomic.rb +0 -11
- data/lib/mongoid/atomic/paths/embedded.rb +0 -30
- data/lib/mongoid/atomic/paths/root.rb +0 -13
- data/lib/mongoid/attributes.rb +30 -108
- 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} +5 -2
- data/lib/mongoid/composable.rb +104 -0
- data/lib/mongoid/config.rb +3 -9
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
- data/lib/mongoid/contextual/atomic.rb +53 -53
- data/lib/mongoid/contextual/command.rb +26 -0
- data/lib/mongoid/contextual/map_reduce.rb +1 -1
- data/lib/mongoid/contextual/memory.rb +6 -5
- data/lib/mongoid/contextual/mongo.rb +59 -28
- data/lib/mongoid/contextual/text_search.rb +180 -0
- data/lib/mongoid/copyable.rb +2 -3
- data/lib/mongoid/criteria.rb +13 -33
- data/lib/mongoid/criteria/{#findable.rb# → findable.rb} +0 -2
- 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 +1 -1
- data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
- data/lib/mongoid/document.rb +28 -12
- data/lib/mongoid/errors.rb +1 -1
- data/lib/mongoid/errors/document_not_found.rb +2 -1
- data/lib/mongoid/errors/invalid_value.rb +16 -0
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/extensions.rb +2 -7
- data/lib/mongoid/extensions/array.rb +2 -2
- data/lib/mongoid/extensions/boolean.rb +14 -17
- data/lib/mongoid/extensions/float.rb +1 -0
- data/lib/mongoid/extensions/hash.rb +1 -1
- data/lib/mongoid/extensions/object.rb +4 -4
- data/lib/mongoid/extensions/object_id.rb +5 -5
- data/lib/mongoid/extensions/range.rb +8 -2
- data/lib/mongoid/extensions/string.rb +5 -17
- data/lib/mongoid/extensions/time.rb +2 -2
- data/lib/mongoid/factory.rb +3 -3
- data/lib/mongoid/fields.rb +9 -8
- data/lib/mongoid/fields/foreign_key.rb +3 -3
- data/lib/mongoid/fields/standard.rb +4 -16
- data/lib/mongoid/fields/validators/macro.rb +11 -3
- data/lib/mongoid/{finders.rb → findable.rb} +6 -2
- 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} +3 -52
- data/lib/mongoid/log_subscriber.rb +22 -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 +1 -1
- 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 +212 -0
- data/lib/mongoid/persistable/creatable.rb +188 -0
- data/lib/mongoid/persistable/deletable.rb +148 -0
- data/lib/mongoid/persistable/destroyable.rb +55 -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 +151 -0
- data/lib/mongoid/persistable/upsertable.rb +55 -0
- data/lib/mongoid/positional.rb +71 -0
- data/lib/mongoid/railtie.rb +32 -45
- data/lib/mongoid/railties/database.rake +12 -6
- data/lib/mongoid/relations.rb +3 -3
- data/lib/mongoid/relations/accessors.rb +13 -46
- data/lib/mongoid/relations/auto_save.rb +15 -36
- data/lib/mongoid/relations/binding.rb +0 -23
- 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 +3 -1
- data/lib/mongoid/relations/builder.rb +1 -1
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
- 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 +47 -0
- data/lib/mongoid/relations/eager/base.rb +57 -0
- data/lib/mongoid/relations/eager/belongs_to.rb +30 -0
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +40 -0
- data/lib/mongoid/relations/eager/has_many.rb +37 -0
- data/lib/mongoid/relations/eager/has_one.rb +29 -0
- data/lib/mongoid/relations/embedded/batchable.rb +3 -4
- data/lib/mongoid/relations/embedded/many.rb +7 -27
- data/lib/mongoid/relations/macros.rb +2 -4
- data/lib/mongoid/relations/many.rb +30 -31
- data/lib/mongoid/relations/metadata.rb +6 -75
- data/lib/mongoid/relations/nested_builder.rb +2 -2
- data/lib/mongoid/relations/options.rb +1 -0
- data/lib/mongoid/relations/polymorphic.rb +0 -1
- data/lib/mongoid/relations/proxy.rb +10 -32
- data/lib/mongoid/relations/referenced/in.rb +2 -18
- data/lib/mongoid/relations/referenced/many.rb +9 -22
- data/lib/mongoid/relations/referenced/many_to_many.rb +10 -33
- data/lib/mongoid/relations/referenced/one.rb +2 -21
- data/lib/mongoid/relations/synchronization.rb +3 -3
- data/lib/mongoid/relations/touchable.rb +33 -0
- data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
- data/lib/mongoid/{scoping.rb → scopable.rb} +26 -3
- data/lib/mongoid/selectable.rb +59 -0
- data/lib/mongoid/{serialization.rb → serializable.rb} +10 -1
- data/lib/mongoid/sessions.rb +37 -345
- data/lib/mongoid/sessions/factory.rb +2 -0
- data/lib/mongoid/sessions/options.rb +176 -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 +15 -1
- data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
- data/lib/mongoid/support/query_counter.rb +23 -0
- data/lib/mongoid/threaded.rb +0 -110
- data/lib/mongoid/threaded/lifecycle.rb +0 -28
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
- data/lib/mongoid/{validations.rb → validatable.rb} +23 -9
- data/lib/mongoid/{validations → validatable}/associated.rb +3 -1
- 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 +3 -3
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +9 -13
- 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 +59 -57
- data/lib/support/ruby_version.rb +1 -1
- data/spec/app/models/account.rb +2 -6
- data/spec/app/models/acolyte.rb +1 -0
- data/spec/app/models/actor.rb +0 -1
- data/spec/app/models/address.rb +6 -1
- data/spec/app/models/animal.rb +1 -1
- data/spec/app/models/appointment.rb +2 -2
- 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/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/dragon.rb +4 -0
- data/spec/app/models/drug.rb +1 -3
- data/spec/app/models/dungeon.rb +4 -0
- 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 +0 -2
- 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/login.rb +1 -1
- data/spec/app/models/movie.rb +1 -0
- data/spec/app/models/name.rb +3 -3
- data/spec/app/models/note.rb +1 -1
- data/spec/app/models/oscar.rb +1 -1
- data/spec/app/models/parent_doc.rb +1 -1
- data/spec/app/models/person.rb +13 -8
- data/spec/app/models/phone.rb +1 -3
- data/spec/app/models/player.rb +1 -1
- data/spec/app/models/post.rb +2 -1
- data/spec/app/models/quiz.rb +0 -3
- data/spec/app/models/record.rb +5 -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/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 +1 -1
- data/spec/app/models/video.rb +0 -4
- data/spec/app/models/wiki_page.rb +1 -4
- 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/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} +335 -448
- data/spec/mongoid/attributes/readonly_spec.rb +16 -16
- data/spec/mongoid/attributes_spec.rb +188 -434
- data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +117 -148
- 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 +46 -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 +94 -94
- data/spec/mongoid/contextual/mongo_spec.rb +225 -139
- data/spec/mongoid/contextual/text_search_spec.rb +207 -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 +1063 -0
- data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +31 -31
- data/spec/mongoid/criteria_spec.rb +530 -2207
- data/spec/mongoid/document_spec.rb +166 -120
- 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_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 +3 -3
- 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 +7 -7
- 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/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 +9 -9
- 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 +15 -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 +23 -23
- data/spec/mongoid/fields/standard_spec.rb +12 -12
- data/spec/mongoid/fields_spec.rb +168 -209
- data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +62 -27
- 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} +105 -105
- data/spec/mongoid/log_subscriber_spec.rb +74 -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/{matchers → matchable}/ne_spec.rb +3 -3
- 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 +512 -0
- data/spec/mongoid/persistable/deletable_spec.rb +205 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +148 -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 +432 -0
- data/spec/mongoid/persistable/settable_spec.rb +139 -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} +19 -14
- 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 +36 -16
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +6 -6
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +2 -2
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +3 -3
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +12 -12
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +6 -6
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +9 -9
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +6 -6
- 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 +22 -33
- 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 +11 -24
- data/spec/mongoid/relations/builders_spec.rb +21 -21
- data/spec/mongoid/relations/cascading/delete_spec.rb +7 -7
- data/spec/mongoid/relations/cascading/destroy_spec.rb +2 -2
- data/spec/mongoid/relations/cascading/nullify_spec.rb +2 -2
- data/spec/mongoid/relations/cascading/restrict_spec.rb +3 -3
- 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 +143 -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 +55 -56
- data/spec/mongoid/relations/embedded/many_spec.rb +357 -367
- data/spec/mongoid/relations/embedded/one_spec.rb +98 -139
- data/spec/mongoid/relations/macros_spec.rb +108 -102
- data/spec/mongoid/relations/metadata_spec.rb +147 -241
- 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 +379 -522
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +345 -417
- data/spec/mongoid/relations/referenced/one_spec.rb +148 -263
- 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 +116 -116
- data/spec/mongoid/relations/touchable_spec.rb +296 -0
- data/spec/mongoid/relations_spec.rb +16 -15
- data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +20 -60
- data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +74 -126
- data/spec/mongoid/selectable_spec.rb +134 -0
- data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +111 -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 +92 -0
- data/spec/mongoid/sessions_spec.rb +288 -177
- data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
- data/spec/mongoid/state_spec.rb +10 -10
- 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/updated/short_spec.rb +10 -10
- data/spec/mongoid/timestamps/updated_spec.rb +8 -12
- data/spec/mongoid/timestamps_spec.rb +7 -11
- data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
- data/spec/mongoid/{validations → validatable}/associated_spec.rb +18 -18
- data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
- data/spec/mongoid/{validations → validatable}/length_spec.rb +7 -7
- data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
- data/spec/mongoid/{validations → validatable}/presence_spec.rb +31 -38
- data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +126 -183
- data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
- data/spec/mongoid_spec.rb +8 -8
- data/spec/rails/mongoid_spec.rb +72 -87
- data/spec/spec_helper.rb +19 -17
- metadata +261 -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/criterion/findable.rb +0 -179
- 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/draft.rb +0 -9
- 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/#atomic_spec.rb# +0 -365
- 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/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/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
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Mongoid::
|
3
|
+
describe Mongoid::Findable do
|
4
4
|
|
5
5
|
describe ".distinct" do
|
6
6
|
|
@@ -10,7 +10,7 @@ describe Mongoid::Finders do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it "returns the distinct values for the field" do
|
13
|
-
Band.distinct(:name).
|
13
|
+
expect(Band.distinct(:name)).to eq([ "Tool", "Photek" ])
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -22,7 +22,7 @@ describe Mongoid::Finders do
|
|
22
22
|
|
23
23
|
it "iterates through all documents" do
|
24
24
|
Band.each do |band|
|
25
|
-
band.
|
25
|
+
expect(band).to be_a(Band)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -35,7 +35,7 @@ describe Mongoid::Finders do
|
|
35
35
|
|
36
36
|
it "iterates through all documents" do
|
37
37
|
Band.each_with_index do |band, index|
|
38
|
-
index.
|
38
|
+
expect(index).to eq(0)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -47,7 +47,7 @@ describe Mongoid::Finders do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it "returns the document" do
|
50
|
-
Person.find_and_modify(title: "Junior").
|
50
|
+
expect(Person.find_and_modify(title: "Junior")).to eq(person)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -62,7 +62,7 @@ describe Mongoid::Finders do
|
|
62
62
|
context "when no block is provided" do
|
63
63
|
|
64
64
|
it "returns the document" do
|
65
|
-
Person.find_by(title: "sir").
|
65
|
+
expect(Person.find_by(title: "sir")).to eq(person)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -75,7 +75,7 @@ describe Mongoid::Finders do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
it "yields the returned document" do
|
78
|
-
result.age.
|
78
|
+
expect(result.age).to eq(50)
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
@@ -108,7 +108,7 @@ describe Mongoid::Finders do
|
|
108
108
|
context "when no block is provided" do
|
109
109
|
|
110
110
|
it "returns nil" do
|
111
|
-
Person.find_by(ssn: "333-22-1111").
|
111
|
+
expect(Person.find_by(ssn: "333-22-1111")).to be_nil
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
@@ -121,13 +121,27 @@ describe Mongoid::Finders do
|
|
121
121
|
end
|
122
122
|
|
123
123
|
it "returns nil" do
|
124
|
-
result.
|
124
|
+
expect(result).to be_nil
|
125
125
|
end
|
126
126
|
end
|
127
127
|
end
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
131
|
+
[ :first, :one ].each do |method|
|
132
|
+
|
133
|
+
describe "##{method}" do
|
134
|
+
|
135
|
+
let!(:person) do
|
136
|
+
Person.create
|
137
|
+
end
|
138
|
+
|
139
|
+
it "returns the first matching document" do
|
140
|
+
expect(Person.send(method)).to eq(person)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
131
145
|
describe ".first_or_create" do
|
132
146
|
|
133
147
|
context "when the document is found" do
|
@@ -137,7 +151,7 @@ describe Mongoid::Finders do
|
|
137
151
|
end
|
138
152
|
|
139
153
|
it "returns the document" do
|
140
|
-
Person.first_or_create.
|
154
|
+
expect(Person.first_or_create).to eq(person)
|
141
155
|
end
|
142
156
|
end
|
143
157
|
|
@@ -154,7 +168,7 @@ describe Mongoid::Finders do
|
|
154
168
|
end
|
155
169
|
|
156
170
|
it "returns the new document" do
|
157
|
-
from_db.person.
|
171
|
+
expect(from_db.person).to eq(person)
|
158
172
|
end
|
159
173
|
end
|
160
174
|
|
@@ -165,11 +179,11 @@ describe Mongoid::Finders do
|
|
165
179
|
end
|
166
180
|
|
167
181
|
it "creates a persisted document" do
|
168
|
-
person.
|
182
|
+
expect(person).to be_persisted
|
169
183
|
end
|
170
184
|
|
171
185
|
it "sets the attributes" do
|
172
|
-
person.title.
|
186
|
+
expect(person.title).to eq("Senorita")
|
173
187
|
end
|
174
188
|
end
|
175
189
|
|
@@ -182,15 +196,15 @@ describe Mongoid::Finders do
|
|
182
196
|
end
|
183
197
|
|
184
198
|
it "creates a persisted document" do
|
185
|
-
person.
|
199
|
+
expect(person).to be_persisted
|
186
200
|
end
|
187
201
|
|
188
202
|
it "sets the attributes" do
|
189
|
-
person.title.
|
203
|
+
expect(person.title).to eq("Senorita")
|
190
204
|
end
|
191
205
|
|
192
206
|
it "calls the block" do
|
193
|
-
person.pets.
|
207
|
+
expect(person.pets).to be true
|
194
208
|
end
|
195
209
|
end
|
196
210
|
end
|
@@ -205,7 +219,7 @@ describe Mongoid::Finders do
|
|
205
219
|
end
|
206
220
|
|
207
221
|
it "returns the document" do
|
208
|
-
Person.first_or_create.
|
222
|
+
expect(Person.first_or_create).to eq(person)
|
209
223
|
end
|
210
224
|
end
|
211
225
|
|
@@ -222,11 +236,11 @@ describe Mongoid::Finders do
|
|
222
236
|
end
|
223
237
|
|
224
238
|
it "returns the new document" do
|
225
|
-
found.person.
|
239
|
+
expect(found.person).to eq(person)
|
226
240
|
end
|
227
241
|
|
228
242
|
it "does not save the document" do
|
229
|
-
found.
|
243
|
+
expect(found).to_not be_persisted
|
230
244
|
end
|
231
245
|
end
|
232
246
|
|
@@ -241,11 +255,11 @@ describe Mongoid::Finders do
|
|
241
255
|
end
|
242
256
|
|
243
257
|
it "creates a non persisted document" do
|
244
|
-
person.
|
258
|
+
expect(person).to_not be_persisted
|
245
259
|
end
|
246
260
|
|
247
261
|
it "sets the attributes" do
|
248
|
-
person.title.
|
262
|
+
expect(person.title).to eq("esquire")
|
249
263
|
end
|
250
264
|
end
|
251
265
|
|
@@ -258,15 +272,15 @@ describe Mongoid::Finders do
|
|
258
272
|
end
|
259
273
|
|
260
274
|
it "creates a new document" do
|
261
|
-
person.
|
275
|
+
expect(person).to_not be_persisted
|
262
276
|
end
|
263
277
|
|
264
278
|
it "sets the attributes" do
|
265
|
-
person.title.
|
279
|
+
expect(person.title).to eq("Senorita")
|
266
280
|
end
|
267
281
|
|
268
282
|
it "calls the block" do
|
269
|
-
person.pets.
|
283
|
+
expect(person.pets).to be true
|
270
284
|
end
|
271
285
|
end
|
272
286
|
end
|
@@ -293,7 +307,7 @@ describe Mongoid::Finders do
|
|
293
307
|
end
|
294
308
|
|
295
309
|
it "returns the field values" do
|
296
|
-
plucked.
|
310
|
+
expect(plucked).to eq([ "Depeche Mode", "Tool", "Photek" ])
|
297
311
|
end
|
298
312
|
end
|
299
313
|
|
@@ -304,7 +318,7 @@ describe Mongoid::Finders do
|
|
304
318
|
end
|
305
319
|
|
306
320
|
it "returns an empty array" do
|
307
|
-
plucked.
|
321
|
+
expect(plucked).to be_empty
|
308
322
|
end
|
309
323
|
end
|
310
324
|
end
|
@@ -314,8 +328,29 @@ describe Mongoid::Finders do
|
|
314
328
|
describe "##{method}" do
|
315
329
|
|
316
330
|
it "forwards the #{method} to the criteria" do
|
317
|
-
Band.
|
331
|
+
expect(Band).to respond_to(method)
|
318
332
|
end
|
319
333
|
end
|
320
334
|
end
|
335
|
+
|
336
|
+
describe "#text_search" do
|
337
|
+
|
338
|
+
before do
|
339
|
+
Word.with(database: "admin").mongo_session.command(setParameter: 1, textSearchEnabled: true)
|
340
|
+
Word.create_indexes
|
341
|
+
Word.create!(name: "phase", origin: "latin")
|
342
|
+
end
|
343
|
+
|
344
|
+
after(:all) do
|
345
|
+
Word.remove_indexes
|
346
|
+
end
|
347
|
+
|
348
|
+
let(:search) do
|
349
|
+
Word.text_search("phase")
|
350
|
+
end
|
351
|
+
|
352
|
+
it "returns all fields" do
|
353
|
+
expect(search.first.origin).to eq("latin")
|
354
|
+
end
|
355
|
+
end
|
321
356
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Indexable::Specification do
|
4
|
+
|
5
|
+
describe "#==" do
|
6
|
+
|
7
|
+
context "when the keys are different" do
|
8
|
+
|
9
|
+
let(:spec_one) do
|
10
|
+
described_class.new(Band, { name: 1 })
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:spec_two) do
|
14
|
+
described_class.new(Band, { title: 1 })
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns false" do
|
18
|
+
expect(spec_one).to_not eq(spec_two)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when the keys are the same" do
|
23
|
+
|
24
|
+
let(:spec_one) do
|
25
|
+
described_class.new(Band, { name: 1 })
|
26
|
+
end
|
27
|
+
|
28
|
+
let(:spec_two) do
|
29
|
+
described_class.new(Band, { name: 1 })
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns true" do
|
33
|
+
expect(spec_one).to eq(spec_two)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when the keys are in different order" do
|
38
|
+
|
39
|
+
let(:spec_one) do
|
40
|
+
described_class.new(Band, { name: 1, title: -1 })
|
41
|
+
end
|
42
|
+
|
43
|
+
let(:spec_two) do
|
44
|
+
described_class.new(Band, { title: -1, name: 1 })
|
45
|
+
end
|
46
|
+
|
47
|
+
it "returns false" do
|
48
|
+
expect(spec_one).to_not eq(spec_two)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "when the keys are the same with different value" do
|
53
|
+
|
54
|
+
let(:spec_one) do
|
55
|
+
described_class.new(Band, { name: 1, title: 1 })
|
56
|
+
end
|
57
|
+
|
58
|
+
let(:spec_two) do
|
59
|
+
described_class.new(Band, { name: 1, title: -1 })
|
60
|
+
end
|
61
|
+
|
62
|
+
it "returns false" do
|
63
|
+
expect(spec_one).to_not eq(spec_two)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#fields" do
|
69
|
+
|
70
|
+
let(:spec) do
|
71
|
+
described_class.new(Band, { name: 1, title: 1 })
|
72
|
+
end
|
73
|
+
|
74
|
+
it "returns the key fields in order" do
|
75
|
+
expect(spec.fields).to eq([ :name, :title ])
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#initialize" do
|
80
|
+
|
81
|
+
let(:spec) do
|
82
|
+
described_class.new(
|
83
|
+
Band,
|
84
|
+
{ name: 1, title: 1, years: -1 },
|
85
|
+
background: true,
|
86
|
+
drop_dups: true
|
87
|
+
)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "sets the class" do
|
91
|
+
expect(spec.klass).to eq(Band)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "normalizes the key" do
|
95
|
+
expect(spec.key).to eq(name: 1, title: 1, y: -1)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "normalizes the options" do
|
99
|
+
expect(spec.options).to eq(background: true, dropDups: true)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -1,21 +1,21 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Mongoid::
|
3
|
+
describe Mongoid::Indexable do
|
4
4
|
|
5
5
|
describe ".included" do
|
6
6
|
|
7
7
|
let(:klass) do
|
8
8
|
Class.new do
|
9
|
-
include Mongoid::
|
9
|
+
include Mongoid::Indexable
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
it "adds an
|
14
|
-
klass.
|
13
|
+
it "adds an index_specifications accessor" do
|
14
|
+
expect(klass).to respond_to(:index_specifications)
|
15
15
|
end
|
16
16
|
|
17
|
-
it "defaults
|
18
|
-
klass.
|
17
|
+
it "defaults index_specifications to empty array" do
|
18
|
+
expect(klass.index_specifications).to be_empty
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -37,7 +37,7 @@ describe Mongoid::Indexes do
|
|
37
37
|
end
|
38
38
|
|
39
39
|
it "removes the indexes" do
|
40
|
-
collection.indexes.reject{ |doc| doc["name"] == "_id_" }.
|
40
|
+
expect(collection.indexes.reject{ |doc| doc["name"] == "_id_" }).to be_empty
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -62,7 +62,7 @@ describe Mongoid::Indexes do
|
|
62
62
|
end
|
63
63
|
|
64
64
|
it "creates the indexes" do
|
65
|
-
indexes.reject{ |doc| doc["name"] == "_id_" }.
|
65
|
+
expect(indexes.reject{ |doc| doc["name"] == "_id_" }).to be_empty
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
@@ -75,7 +75,7 @@ describe Mongoid::Indexes do
|
|
75
75
|
Class.new do
|
76
76
|
include Mongoid::Document
|
77
77
|
store_in collection: "test_class"
|
78
|
-
index({ _type: 1 },
|
78
|
+
index({ _type: 1 }, unique: false, background: true)
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -84,7 +84,7 @@ describe Mongoid::Indexes do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
it "creates the indexes" do
|
87
|
-
klass.collection.indexes[_type: 1].
|
87
|
+
expect(klass.collection.indexes[_type: 1]).to_not be_nil
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
@@ -107,7 +107,7 @@ describe Mongoid::Indexes do
|
|
107
107
|
end
|
108
108
|
|
109
109
|
it "creates the indexes" do
|
110
|
-
indexes[_type: 1].
|
110
|
+
expect(indexes[_type: 1]).to_not be_nil
|
111
111
|
end
|
112
112
|
end
|
113
113
|
end
|
@@ -129,10 +129,12 @@ describe Mongoid::Indexes do
|
|
129
129
|
klass.add_indexes
|
130
130
|
end
|
131
131
|
|
132
|
+
let(:spec) do
|
133
|
+
klass.index_specification(_type: 1)
|
134
|
+
end
|
135
|
+
|
132
136
|
it "adds the _type index" do
|
133
|
-
|
134
|
-
{ unique: false, background: true }
|
135
|
-
)
|
137
|
+
expect(spec.options).to eq(unique: false, background: true)
|
136
138
|
end
|
137
139
|
end
|
138
140
|
end
|
@@ -149,105 +151,105 @@ describe Mongoid::Indexes do
|
|
149
151
|
context "when indexing a field that is aliased" do
|
150
152
|
|
151
153
|
before do
|
152
|
-
klass.index({ authentication_token: 1 },
|
154
|
+
klass.index({ authentication_token: 1 }, unique: true)
|
153
155
|
end
|
154
156
|
|
155
157
|
let(:options) do
|
156
|
-
klass.
|
158
|
+
klass.index_specification(a: 1).options
|
157
159
|
end
|
158
160
|
|
159
161
|
it "sets the index with unique options" do
|
160
|
-
options.
|
162
|
+
expect(options).to eq(unique: true)
|
161
163
|
end
|
162
164
|
end
|
163
165
|
|
164
166
|
context "when providing unique options" do
|
165
167
|
|
166
168
|
before do
|
167
|
-
klass.index({ name: 1 },
|
169
|
+
klass.index({ name: 1 }, unique: true)
|
168
170
|
end
|
169
171
|
|
170
172
|
let(:options) do
|
171
|
-
klass.
|
173
|
+
klass.index_specification(name: 1).options
|
172
174
|
end
|
173
175
|
|
174
176
|
it "sets the index with unique options" do
|
175
|
-
options.
|
177
|
+
expect(options).to eq(unique: true)
|
176
178
|
end
|
177
179
|
end
|
178
180
|
|
179
181
|
context "when providing a drop_dups option" do
|
180
182
|
|
181
183
|
before do
|
182
|
-
klass.index({ name: 1 },
|
184
|
+
klass.index({ name: 1 }, drop_dups: true)
|
183
185
|
end
|
184
186
|
|
185
187
|
let(:options) do
|
186
|
-
klass.
|
188
|
+
klass.index_specification(name: 1).options
|
187
189
|
end
|
188
190
|
|
189
191
|
it "sets the index with dropDups options" do
|
190
|
-
options.
|
192
|
+
expect(options).to eq(dropDups: true)
|
191
193
|
end
|
192
194
|
end
|
193
195
|
|
194
196
|
context "when providing a sparse option" do
|
195
197
|
|
196
198
|
before do
|
197
|
-
klass.index({ name: 1 },
|
199
|
+
klass.index({ name: 1 }, sparse: true)
|
198
200
|
end
|
199
201
|
|
200
202
|
let(:options) do
|
201
|
-
klass.
|
203
|
+
klass.index_specification(name: 1).options
|
202
204
|
end
|
203
205
|
|
204
206
|
it "sets the index with sparse options" do
|
205
|
-
options.
|
207
|
+
expect(options).to eq(sparse: true)
|
206
208
|
end
|
207
209
|
end
|
208
210
|
|
209
211
|
context "when providing a name option" do
|
210
212
|
|
211
213
|
before do
|
212
|
-
klass.index({ name: 1 },
|
214
|
+
klass.index({ name: 1 }, name: "index_name")
|
213
215
|
end
|
214
216
|
|
215
217
|
let(:options) do
|
216
|
-
klass.
|
218
|
+
klass.index_specification(name: 1).options
|
217
219
|
end
|
218
220
|
|
219
221
|
it "sets the index with name options" do
|
220
|
-
options.
|
222
|
+
expect(options).to eq(name: "index_name")
|
221
223
|
end
|
222
224
|
end
|
223
225
|
|
224
226
|
context "when providing database options" do
|
225
227
|
|
226
228
|
before do
|
227
|
-
klass.index({ name: 1 },
|
229
|
+
klass.index({ name: 1 }, database: "mongoid_index_alt")
|
228
230
|
end
|
229
231
|
|
230
232
|
let(:options) do
|
231
|
-
klass.
|
233
|
+
klass.index_specification(name: 1).options
|
232
234
|
end
|
233
235
|
|
234
236
|
it "sets the index with background options" do
|
235
|
-
options.
|
237
|
+
expect(options).to eq(database: "mongoid_index_alt")
|
236
238
|
end
|
237
239
|
end
|
238
240
|
|
239
241
|
context "when providing a background option" do
|
240
242
|
|
241
243
|
before do
|
242
|
-
klass.index({ name: 1 },
|
244
|
+
klass.index({ name: 1 }, background: true)
|
243
245
|
end
|
244
246
|
|
245
247
|
let(:options) do
|
246
|
-
klass.
|
248
|
+
klass.index_specification(name: 1).options
|
247
249
|
end
|
248
250
|
|
249
251
|
it "sets the index with background options" do
|
250
|
-
options.
|
252
|
+
expect(options).to eq(background: true)
|
251
253
|
end
|
252
254
|
end
|
253
255
|
|
@@ -258,11 +260,51 @@ describe Mongoid::Indexes do
|
|
258
260
|
end
|
259
261
|
|
260
262
|
let(:options) do
|
261
|
-
klass.
|
263
|
+
klass.index_specification(name: 1, title: -1).options
|
262
264
|
end
|
263
265
|
|
264
266
|
it "sets the compound key index" do
|
265
|
-
options.
|
267
|
+
expect(options).to be_empty
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
context "when providing multiple inverse compound indexes" do
|
272
|
+
|
273
|
+
before do
|
274
|
+
klass.index({ name: 1, title: -1 })
|
275
|
+
klass.index({ title: -1, name: 1 })
|
276
|
+
end
|
277
|
+
|
278
|
+
let(:first_spec) do
|
279
|
+
klass.index_specification(name: 1, title: -1)
|
280
|
+
end
|
281
|
+
|
282
|
+
let(:second_spec) do
|
283
|
+
klass.index_specification(title: -1, name: 1)
|
284
|
+
end
|
285
|
+
|
286
|
+
it "does not overwrite the index options" do
|
287
|
+
expect(first_spec).to_not eq(second_spec)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
context "when providing multiple compound indexes with different order" do
|
292
|
+
|
293
|
+
before do
|
294
|
+
klass.index({ name: 1, title: -1 })
|
295
|
+
klass.index({ name: 1, title: 1 })
|
296
|
+
end
|
297
|
+
|
298
|
+
let(:first_spec) do
|
299
|
+
klass.index_specification(name: 1, title: -1)
|
300
|
+
end
|
301
|
+
|
302
|
+
let(:second_spec) do
|
303
|
+
klass.index_specification(name: 1, title: 1)
|
304
|
+
end
|
305
|
+
|
306
|
+
it "does not overwrite the index options" do
|
307
|
+
expect(first_spec).to_not eq(second_spec)
|
266
308
|
end
|
267
309
|
end
|
268
310
|
|
@@ -273,11 +315,11 @@ describe Mongoid::Indexes do
|
|
273
315
|
end
|
274
316
|
|
275
317
|
let(:options) do
|
276
|
-
klass.
|
318
|
+
klass.index_specification(location: "2d").options
|
277
319
|
end
|
278
320
|
|
279
321
|
it "sets the geospacial index" do
|
280
|
-
options.
|
322
|
+
expect(options).to eq({ min: -200, max: 200, bits: 32 })
|
281
323
|
end
|
282
324
|
end
|
283
325
|
|
@@ -288,11 +330,11 @@ describe Mongoid::Indexes do
|
|
288
330
|
end
|
289
331
|
|
290
332
|
let(:options) do
|
291
|
-
klass.
|
333
|
+
klass.index_specification(location: "geoHaystack").options
|
292
334
|
end
|
293
335
|
|
294
336
|
it "sets the geo haystack index" do
|
295
|
-
options.
|
337
|
+
expect(options).to eq({ min: -200, max: 200, bucketSize: 0.5 })
|
296
338
|
end
|
297
339
|
end
|
298
340
|
|
@@ -303,11 +345,89 @@ describe Mongoid::Indexes do
|
|
303
345
|
end
|
304
346
|
|
305
347
|
let(:options) do
|
306
|
-
klass.
|
348
|
+
klass.index_specification(location: "2dsphere").options
|
307
349
|
end
|
308
350
|
|
309
351
|
it "sets the spherical geospatial index" do
|
310
|
-
options.
|
352
|
+
expect(options).to be_empty
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
356
|
+
context "when providing a text index" do
|
357
|
+
|
358
|
+
context "when the index is a single field" do
|
359
|
+
|
360
|
+
before do
|
361
|
+
klass.index({ description: "text" })
|
362
|
+
end
|
363
|
+
|
364
|
+
let(:options) do
|
365
|
+
klass.index_specification(description: "text").options
|
366
|
+
end
|
367
|
+
|
368
|
+
it "allows the set of the text index" do
|
369
|
+
expect(options).to be_empty
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
context "when the index is multiple fields" do
|
374
|
+
|
375
|
+
before do
|
376
|
+
klass.index({ description: "text", name: "text" })
|
377
|
+
end
|
378
|
+
|
379
|
+
let(:options) do
|
380
|
+
klass.index_specification(description: "text", name: "text").options
|
381
|
+
end
|
382
|
+
|
383
|
+
it "allows the set of the text index" do
|
384
|
+
expect(options).to be_empty
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
context "when the index is all string fields" do
|
389
|
+
|
390
|
+
before do
|
391
|
+
klass.index({ "$**" => "text" })
|
392
|
+
end
|
393
|
+
|
394
|
+
let(:options) do
|
395
|
+
klass.index_specification(:"$**" => "text").options
|
396
|
+
end
|
397
|
+
|
398
|
+
it "allows the set of the text index" do
|
399
|
+
expect(options).to be_empty
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
context "when providing a default language" do
|
404
|
+
|
405
|
+
before do
|
406
|
+
klass.index({ description: "text" }, default_language: "english")
|
407
|
+
end
|
408
|
+
|
409
|
+
let(:options) do
|
410
|
+
klass.index_specification(description: "text").options
|
411
|
+
end
|
412
|
+
|
413
|
+
it "allows the set of the text index" do
|
414
|
+
expect(options).to eq(default_language: "english")
|
415
|
+
end
|
416
|
+
end
|
417
|
+
|
418
|
+
context "when providing a name" do
|
419
|
+
|
420
|
+
before do
|
421
|
+
klass.index({ description: "text" }, name: "text_index")
|
422
|
+
end
|
423
|
+
|
424
|
+
let(:options) do
|
425
|
+
klass.index_specification(description: "text").options
|
426
|
+
end
|
427
|
+
|
428
|
+
it "allows the set of the text index" do
|
429
|
+
expect(options).to eq(name: "text_index")
|
430
|
+
end
|
311
431
|
end
|
312
432
|
end
|
313
433
|
|
@@ -318,11 +438,11 @@ describe Mongoid::Indexes do
|
|
318
438
|
end
|
319
439
|
|
320
440
|
let(:options) do
|
321
|
-
klass.
|
441
|
+
klass.index_specification(a: "hashed").options
|
322
442
|
end
|
323
443
|
|
324
444
|
it "sets the hashed index" do
|
325
|
-
options.
|
445
|
+
expect(options).to be_empty
|
326
446
|
end
|
327
447
|
end
|
328
448
|
|
@@ -333,11 +453,11 @@ describe Mongoid::Indexes do
|
|
333
453
|
end
|
334
454
|
|
335
455
|
let(:options) do
|
336
|
-
klass.
|
456
|
+
klass.index_specification(content: "text").options
|
337
457
|
end
|
338
458
|
|
339
459
|
it "sets the text index" do
|
340
|
-
options.
|
460
|
+
expect(options).to be_empty
|
341
461
|
end
|
342
462
|
end
|
343
463
|
|
@@ -348,11 +468,11 @@ describe Mongoid::Indexes do
|
|
348
468
|
end
|
349
469
|
|
350
470
|
let(:options) do
|
351
|
-
klass.
|
471
|
+
klass.index_specification(content: "text", title: "text").options
|
352
472
|
end
|
353
473
|
|
354
474
|
it "sets the compound text index" do
|
355
|
-
options.
|
475
|
+
expect(options).to eq(weights: { content: 1, title: 2 })
|
356
476
|
end
|
357
477
|
end
|
358
478
|
|
@@ -363,11 +483,11 @@ describe Mongoid::Indexes do
|
|
363
483
|
end
|
364
484
|
|
365
485
|
let(:options) do
|
366
|
-
klass.
|
486
|
+
klass.index_specification(name: 1).options
|
367
487
|
end
|
368
488
|
|
369
489
|
it "sets the index with sparse options" do
|
370
|
-
options.
|
490
|
+
expect(options).to eq(expireAfterSeconds: 3600)
|
371
491
|
end
|
372
492
|
end
|
373
493
|
|