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,402 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Criteria do
|
4
|
-
|
5
|
-
describe "#update" do
|
6
|
-
|
7
|
-
let!(:person) do
|
8
|
-
Person.create!(title: "Sir")
|
9
|
-
end
|
10
|
-
|
11
|
-
let!(:address_one) do
|
12
|
-
person.addresses.create(street: "Oranienstr")
|
13
|
-
end
|
14
|
-
|
15
|
-
let!(:address_two) do
|
16
|
-
person.addresses.create(street: "Wienerstr")
|
17
|
-
end
|
18
|
-
|
19
|
-
context "when updating the root document" do
|
20
|
-
|
21
|
-
context "when updating with a criteria" do
|
22
|
-
|
23
|
-
before do
|
24
|
-
Person.where(title: "Sir").update(title: "Madam")
|
25
|
-
end
|
26
|
-
|
27
|
-
it "updates all the matching documents" do
|
28
|
-
person.reload.title.should eq("Madam")
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context "when updating all directly" do
|
33
|
-
|
34
|
-
before do
|
35
|
-
Person.update(title: "Madam")
|
36
|
-
end
|
37
|
-
|
38
|
-
it "updates all the matching documents" do
|
39
|
-
person.reload.title.should eq("Madam")
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "when updating an embedded document" do
|
45
|
-
|
46
|
-
before do
|
47
|
-
Person.where(title: "Sir").update(
|
48
|
-
"addresses.0.city" => "Berlin"
|
49
|
-
)
|
50
|
-
end
|
51
|
-
|
52
|
-
let!(:from_db) do
|
53
|
-
Person.first
|
54
|
-
end
|
55
|
-
|
56
|
-
it "updates all the matching documents" do
|
57
|
-
from_db.addresses.first.city.should eq("Berlin")
|
58
|
-
end
|
59
|
-
|
60
|
-
it "does not update non matching documents" do
|
61
|
-
from_db.addresses.last.city.should be_nil
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context "when updating a relation" do
|
66
|
-
|
67
|
-
context "when the relation is an embeds many" do
|
68
|
-
|
69
|
-
let(:from_db) do
|
70
|
-
Person.first
|
71
|
-
end
|
72
|
-
|
73
|
-
context "when updating the relation directly" do
|
74
|
-
|
75
|
-
before do
|
76
|
-
person.addresses.update(city: "London")
|
77
|
-
end
|
78
|
-
|
79
|
-
it "updates the first document" do
|
80
|
-
from_db.addresses.first.city.should eq("London")
|
81
|
-
end
|
82
|
-
|
83
|
-
it "does not update the last document" do
|
84
|
-
from_db.addresses.last.city.should be_nil
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
context "when updating the relation through a criteria" do
|
89
|
-
|
90
|
-
before do
|
91
|
-
person.addresses.where(street: "Oranienstr").update(city: "Berlin")
|
92
|
-
end
|
93
|
-
|
94
|
-
it "updates the matching documents" do
|
95
|
-
from_db.addresses.first.city.should eq("Berlin")
|
96
|
-
end
|
97
|
-
|
98
|
-
it "does not update non matching documents" do
|
99
|
-
from_db.addresses.last.city.should be_nil
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context "when the relation is a references many" do
|
105
|
-
|
106
|
-
let!(:post_one) do
|
107
|
-
person.posts.create(title: "First")
|
108
|
-
end
|
109
|
-
|
110
|
-
let!(:post_two) do
|
111
|
-
person.posts.create(title: "Second")
|
112
|
-
end
|
113
|
-
|
114
|
-
context "when updating the relation directly" do
|
115
|
-
|
116
|
-
before do
|
117
|
-
person.posts.update(title: "London")
|
118
|
-
end
|
119
|
-
|
120
|
-
let!(:from_db) do
|
121
|
-
Person.first
|
122
|
-
end
|
123
|
-
|
124
|
-
it "updates the first document" do
|
125
|
-
from_db.posts.first.title.should eq("London")
|
126
|
-
end
|
127
|
-
|
128
|
-
it "does not update the last document" do
|
129
|
-
from_db.posts.last.title.should eq("Second")
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
context "when updating the relation through a criteria" do
|
134
|
-
|
135
|
-
before do
|
136
|
-
person.posts.where(title: "First").update(title: "Berlin")
|
137
|
-
end
|
138
|
-
|
139
|
-
let!(:from_db) do
|
140
|
-
Person.first
|
141
|
-
end
|
142
|
-
|
143
|
-
it "updates the matching documents" do
|
144
|
-
from_db.posts.where(title: "Berlin").count.should eq(1)
|
145
|
-
end
|
146
|
-
|
147
|
-
it "does not update non matching documents" do
|
148
|
-
from_db.posts.where(title: "Second").count.should eq(1)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
context "when the relation is a references many to many" do
|
154
|
-
|
155
|
-
let(:from_db) do
|
156
|
-
Person.first
|
157
|
-
end
|
158
|
-
|
159
|
-
let!(:preference_one) do
|
160
|
-
person.preferences.create(name: "First")
|
161
|
-
end
|
162
|
-
|
163
|
-
let!(:preference_two) do
|
164
|
-
person.preferences.create(name: "Second")
|
165
|
-
end
|
166
|
-
|
167
|
-
context "when updating the relation directly" do
|
168
|
-
|
169
|
-
before do
|
170
|
-
person.preferences.update(name: "London")
|
171
|
-
end
|
172
|
-
|
173
|
-
it "updates the first document" do
|
174
|
-
from_db.preferences.first.name.should eq("London")
|
175
|
-
end
|
176
|
-
|
177
|
-
it "does not update the last document" do
|
178
|
-
from_db.preferences.last.name.should eq("Second")
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
context "when updating the relation through a criteria" do
|
183
|
-
|
184
|
-
before do
|
185
|
-
person.preferences.where(name: "First").update(name: "Berlin")
|
186
|
-
end
|
187
|
-
|
188
|
-
it "updates the matching documents" do
|
189
|
-
from_db.preferences.first.name.should eq("Berlin")
|
190
|
-
end
|
191
|
-
|
192
|
-
it "does not update non matching documents" do
|
193
|
-
from_db.preferences.last.name.should eq("Second")
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
describe "#update_all" do
|
201
|
-
|
202
|
-
let!(:person) do
|
203
|
-
Person.create(title: "Sir")
|
204
|
-
end
|
205
|
-
|
206
|
-
let!(:address_one) do
|
207
|
-
person.addresses.create(street: "Oranienstr")
|
208
|
-
end
|
209
|
-
|
210
|
-
let!(:address_two) do
|
211
|
-
person.addresses.create(street: "Wienerstr")
|
212
|
-
end
|
213
|
-
|
214
|
-
context "when updating the root document" do
|
215
|
-
|
216
|
-
context "when updating with a criteria" do
|
217
|
-
|
218
|
-
let(:from_db) do
|
219
|
-
Person.first
|
220
|
-
end
|
221
|
-
|
222
|
-
before do
|
223
|
-
Person.where(title: "Sir").update_all(title: "Madam")
|
224
|
-
end
|
225
|
-
|
226
|
-
it "updates all the matching documents" do
|
227
|
-
from_db.title.should eq("Madam")
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
context "when updating all directly" do
|
232
|
-
|
233
|
-
let(:from_db) do
|
234
|
-
Person.first
|
235
|
-
end
|
236
|
-
|
237
|
-
before do
|
238
|
-
Person.update_all(title: "Madam")
|
239
|
-
end
|
240
|
-
|
241
|
-
it "updates all the matching documents" do
|
242
|
-
from_db.title.should eq("Madam")
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
context "when updating an embedded document" do
|
248
|
-
|
249
|
-
before do
|
250
|
-
Person.where(title: "Sir").update_all(
|
251
|
-
"addresses.0.city" => "Berlin"
|
252
|
-
)
|
253
|
-
end
|
254
|
-
|
255
|
-
let!(:from_db) do
|
256
|
-
Person.first
|
257
|
-
end
|
258
|
-
|
259
|
-
it "updates all the matching documents" do
|
260
|
-
from_db.addresses.first.city.should eq("Berlin")
|
261
|
-
end
|
262
|
-
|
263
|
-
it "does not update non matching documents" do
|
264
|
-
from_db.addresses.last.city.should be_nil
|
265
|
-
end
|
266
|
-
end
|
267
|
-
|
268
|
-
context "when updating a relation" do
|
269
|
-
|
270
|
-
context "when the relation is an embeds many" do
|
271
|
-
|
272
|
-
let(:from_db) do
|
273
|
-
Person.first
|
274
|
-
end
|
275
|
-
|
276
|
-
context "when updating the relation directly" do
|
277
|
-
|
278
|
-
before do
|
279
|
-
person.addresses.update_all(city: "London")
|
280
|
-
end
|
281
|
-
|
282
|
-
it "updates the first document" do
|
283
|
-
from_db.addresses.first.city.should eq("London")
|
284
|
-
end
|
285
|
-
|
286
|
-
it "updates the last document" do
|
287
|
-
from_db.addresses.last.city.should eq("London")
|
288
|
-
end
|
289
|
-
end
|
290
|
-
|
291
|
-
context "when updating the relation through a criteria" do
|
292
|
-
|
293
|
-
before do
|
294
|
-
person.addresses.where(street: "Oranienstr").update_all(city: "Berlin")
|
295
|
-
end
|
296
|
-
|
297
|
-
it "updates the matching documents" do
|
298
|
-
from_db.addresses.first.city.should eq("Berlin")
|
299
|
-
end
|
300
|
-
|
301
|
-
it "does not update non matching documents" do
|
302
|
-
from_db.addresses.last.city.should be_nil
|
303
|
-
end
|
304
|
-
end
|
305
|
-
end
|
306
|
-
|
307
|
-
context "when the relation is a references many" do
|
308
|
-
|
309
|
-
let!(:post_one) do
|
310
|
-
person.posts.create(title: "First")
|
311
|
-
end
|
312
|
-
|
313
|
-
let!(:post_two) do
|
314
|
-
person.posts.create(title: "Second")
|
315
|
-
end
|
316
|
-
|
317
|
-
context "when updating the relation directly" do
|
318
|
-
|
319
|
-
before do
|
320
|
-
person.posts.update_all(title: "London")
|
321
|
-
end
|
322
|
-
|
323
|
-
let!(:from_db) do
|
324
|
-
Person.first
|
325
|
-
end
|
326
|
-
|
327
|
-
it "updates the first document" do
|
328
|
-
from_db.posts.first.title.should eq("London")
|
329
|
-
end
|
330
|
-
|
331
|
-
it "updates the last document" do
|
332
|
-
from_db.posts.last.title.should eq("London")
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
context "when updating the relation through a criteria" do
|
337
|
-
|
338
|
-
before do
|
339
|
-
person.posts.where(title: "First").update_all(title: "Berlin")
|
340
|
-
end
|
341
|
-
|
342
|
-
let!(:from_db) do
|
343
|
-
Person.first
|
344
|
-
end
|
345
|
-
|
346
|
-
it "updates the matching documents" do
|
347
|
-
from_db.posts.where(title: "Berlin").count.should eq(1)
|
348
|
-
end
|
349
|
-
|
350
|
-
it "does not update non matching documents" do
|
351
|
-
from_db.posts.where(title: "Second").count.should eq(1)
|
352
|
-
end
|
353
|
-
end
|
354
|
-
end
|
355
|
-
|
356
|
-
context "when the relation is a references many to many" do
|
357
|
-
|
358
|
-
let(:from_db) do
|
359
|
-
Person.first
|
360
|
-
end
|
361
|
-
|
362
|
-
let!(:preference_one) do
|
363
|
-
person.preferences.create(name: "First")
|
364
|
-
end
|
365
|
-
|
366
|
-
let!(:preference_two) do
|
367
|
-
person.preferences.create(name: "Second")
|
368
|
-
end
|
369
|
-
|
370
|
-
context "when updating the relation directly" do
|
371
|
-
|
372
|
-
before do
|
373
|
-
person.preferences.update_all(name: "London")
|
374
|
-
end
|
375
|
-
|
376
|
-
it "updates the first document" do
|
377
|
-
from_db.preferences.first.name.should eq("London")
|
378
|
-
end
|
379
|
-
|
380
|
-
it "updates the last document" do
|
381
|
-
from_db.preferences.last.name.should eq("London")
|
382
|
-
end
|
383
|
-
end
|
384
|
-
|
385
|
-
context "when updating the relation through a criteria" do
|
386
|
-
|
387
|
-
before do
|
388
|
-
person.preferences.where(name: "First").update_all(name: "Berlin")
|
389
|
-
end
|
390
|
-
|
391
|
-
it "updates the matching documents" do
|
392
|
-
from_db.preferences.first.name.should eq("Berlin")
|
393
|
-
end
|
394
|
-
|
395
|
-
it "does not update non matching documents" do
|
396
|
-
from_db.preferences.last.name.should eq("Second")
|
397
|
-
end
|
398
|
-
end
|
399
|
-
end
|
400
|
-
end
|
401
|
-
end
|
402
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Errors::VersioningNotOnRoot do
|
4
|
-
|
5
|
-
describe "#message" do
|
6
|
-
|
7
|
-
let(:error) do
|
8
|
-
described_class.new(Address)
|
9
|
-
end
|
10
|
-
|
11
|
-
it "contains the problem in the message" do
|
12
|
-
error.message.should include(
|
13
|
-
"Versioning not allowed on embedded document: Address."
|
14
|
-
)
|
15
|
-
end
|
16
|
-
|
17
|
-
it "contains the summary in the message" do
|
18
|
-
error.message.should include(
|
19
|
-
"Mongoid::Versioning behaviour is only allowed on documents"
|
20
|
-
)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "contains the resolution in the message" do
|
24
|
-
error.message.should include(
|
25
|
-
"Remove the versioning from the embedded Address"
|
26
|
-
)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,564 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::IdentityMap do
|
4
|
-
|
5
|
-
before(:all) do
|
6
|
-
Mongoid.identity_map_enabled = true
|
7
|
-
end
|
8
|
-
|
9
|
-
after(:all) do
|
10
|
-
Mongoid.identity_map_enabled = false
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:identity_map) do
|
14
|
-
described_class.new
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#clear" do
|
18
|
-
|
19
|
-
before do
|
20
|
-
identity_map.set(Person.new)
|
21
|
-
end
|
22
|
-
|
23
|
-
let!(:clear) do
|
24
|
-
identity_map.clear
|
25
|
-
end
|
26
|
-
|
27
|
-
it "empties the identity map" do
|
28
|
-
identity_map.should be_empty
|
29
|
-
end
|
30
|
-
|
31
|
-
it "returns an empty hash" do
|
32
|
-
clear.should eq({})
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe ".clear" do
|
37
|
-
|
38
|
-
before do
|
39
|
-
described_class.set(Person.new)
|
40
|
-
end
|
41
|
-
|
42
|
-
let!(:clear) do
|
43
|
-
described_class.clear
|
44
|
-
end
|
45
|
-
|
46
|
-
it "returns an empty hash" do
|
47
|
-
clear.should eq({})
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "#get" do
|
52
|
-
|
53
|
-
context "normal model" do
|
54
|
-
let!(:person) do
|
55
|
-
Person.new
|
56
|
-
end
|
57
|
-
|
58
|
-
context "when getting by id" do
|
59
|
-
|
60
|
-
context "when the document exists in the identity map" do
|
61
|
-
|
62
|
-
before do
|
63
|
-
identity_map.set(person)
|
64
|
-
end
|
65
|
-
|
66
|
-
let(:get) do
|
67
|
-
identity_map.get(Person, person.id)
|
68
|
-
end
|
69
|
-
|
70
|
-
it "returns the matching person" do
|
71
|
-
get.should eq(person)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
context "when the person does not exist in the map" do
|
76
|
-
|
77
|
-
let(:get) do
|
78
|
-
identity_map.get(Person, person.id)
|
79
|
-
end
|
80
|
-
|
81
|
-
it "returns nil" do
|
82
|
-
get.should be_nil
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
context "when getting by an array of ids" do
|
88
|
-
|
89
|
-
context "when the document exists in the identity map" do
|
90
|
-
|
91
|
-
before do
|
92
|
-
identity_map.set(person)
|
93
|
-
end
|
94
|
-
|
95
|
-
let(:get) do
|
96
|
-
identity_map.get(Person, [ person.id ])
|
97
|
-
end
|
98
|
-
|
99
|
-
it "returns the matching documents" do
|
100
|
-
get.should eq([ person ])
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context "when any id is not found in the map" do
|
105
|
-
|
106
|
-
before do
|
107
|
-
identity_map.set(person)
|
108
|
-
end
|
109
|
-
|
110
|
-
let(:get) do
|
111
|
-
identity_map.get(Person, [ person.id, Moped::BSON::ObjectId.new ])
|
112
|
-
end
|
113
|
-
|
114
|
-
it "returns nil" do
|
115
|
-
get.should be_nil
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
context "inherited class" do
|
122
|
-
|
123
|
-
let!(:document) do
|
124
|
-
Firefox.new
|
125
|
-
end
|
126
|
-
|
127
|
-
context "when getting by id" do
|
128
|
-
|
129
|
-
context "when the document exists in the identity map" do
|
130
|
-
|
131
|
-
before do
|
132
|
-
identity_map.set(document)
|
133
|
-
end
|
134
|
-
|
135
|
-
it "returns the matching document by class" do
|
136
|
-
get = identity_map.get(Firefox, document.id)
|
137
|
-
get.should eq(document)
|
138
|
-
end
|
139
|
-
|
140
|
-
it "returns the matching document by superclass" do
|
141
|
-
get = identity_map.get(Browser, document.id)
|
142
|
-
get.should eq(document)
|
143
|
-
end
|
144
|
-
|
145
|
-
it "returns the matching document by class" do
|
146
|
-
get = identity_map.get(Canvas, document.id)
|
147
|
-
get.should eq(document)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
context "when the document does not exist in the map" do
|
152
|
-
|
153
|
-
let(:get) do
|
154
|
-
identity_map.get(Firefox, document.id)
|
155
|
-
end
|
156
|
-
|
157
|
-
it "returns nil" do
|
158
|
-
get.should be_nil
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
context "embedded class" do
|
165
|
-
|
166
|
-
let!(:animal) do
|
167
|
-
circus = Circus.new(animals: [ Animal.new(name: "Lion") ])
|
168
|
-
circus.animals.first
|
169
|
-
end
|
170
|
-
|
171
|
-
context "when getting by id" do
|
172
|
-
|
173
|
-
context "when the document exists in the identity map" do
|
174
|
-
|
175
|
-
before do
|
176
|
-
identity_map.set(animal)
|
177
|
-
end
|
178
|
-
|
179
|
-
let(:get) do
|
180
|
-
identity_map.get(Animal, animal.id)
|
181
|
-
end
|
182
|
-
|
183
|
-
it "returns the matching document" do
|
184
|
-
get.should eq(animal)
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
context "when the document does not exist in the map" do
|
189
|
-
|
190
|
-
let(:get) do
|
191
|
-
identity_map.get(Animal, animal.id)
|
192
|
-
end
|
193
|
-
|
194
|
-
it "returns nil" do
|
195
|
-
get.should be_nil
|
196
|
-
end
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
describe ".get" do
|
203
|
-
|
204
|
-
let(:document) do
|
205
|
-
Person.new
|
206
|
-
end
|
207
|
-
|
208
|
-
context "when the document exists in the identity map" do
|
209
|
-
|
210
|
-
before do
|
211
|
-
described_class.set(document)
|
212
|
-
end
|
213
|
-
|
214
|
-
let(:get) do
|
215
|
-
described_class.get(Person, document.id)
|
216
|
-
end
|
217
|
-
|
218
|
-
it "returns the matching document" do
|
219
|
-
get.should eq(document)
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
context "when the document does not exist in the map" do
|
224
|
-
|
225
|
-
let(:get) do
|
226
|
-
described_class.get(Person, document.id)
|
227
|
-
end
|
228
|
-
|
229
|
-
it "returns nil" do
|
230
|
-
get.should be_nil
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
context "when the mongoid identity map is disabled" do
|
235
|
-
|
236
|
-
before do
|
237
|
-
Mongoid.identity_map_enabled = false
|
238
|
-
end
|
239
|
-
|
240
|
-
after do
|
241
|
-
Mongoid.identity_map_enabled = true
|
242
|
-
end
|
243
|
-
|
244
|
-
let(:get) do
|
245
|
-
described_class.get(Person, document.id)
|
246
|
-
end
|
247
|
-
|
248
|
-
it "returns nil" do
|
249
|
-
get.should be_nil
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
253
|
-
|
254
|
-
describe "#get_many" do
|
255
|
-
|
256
|
-
let!(:person) do
|
257
|
-
Person.new
|
258
|
-
end
|
259
|
-
|
260
|
-
context "when getting by selector" do
|
261
|
-
|
262
|
-
let!(:post_one) do
|
263
|
-
Post.new(person: person)
|
264
|
-
end
|
265
|
-
|
266
|
-
let!(:post_two) do
|
267
|
-
Post.new(person: person)
|
268
|
-
end
|
269
|
-
|
270
|
-
context "when there are documents in the map" do
|
271
|
-
|
272
|
-
before do
|
273
|
-
identity_map.set_many(post_one, person_id: person.id)
|
274
|
-
identity_map.set_many(post_two, person_id: person.id)
|
275
|
-
end
|
276
|
-
|
277
|
-
let(:documents) do
|
278
|
-
identity_map.get_many(Post, person_id: person.id)
|
279
|
-
end
|
280
|
-
|
281
|
-
it "returns the matching documents" do
|
282
|
-
documents.should eq([ post_one, post_two ])
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
context "when there are no documents in the map" do
|
287
|
-
|
288
|
-
let(:documents) do
|
289
|
-
identity_map.get_many(Post, person_id: person.id)
|
290
|
-
end
|
291
|
-
|
292
|
-
it "returns nil" do
|
293
|
-
documents.should be_nil
|
294
|
-
end
|
295
|
-
end
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
describe "#remove" do
|
300
|
-
|
301
|
-
let(:document) do
|
302
|
-
Person.new
|
303
|
-
end
|
304
|
-
|
305
|
-
let!(:set) do
|
306
|
-
identity_map.set(document)
|
307
|
-
end
|
308
|
-
|
309
|
-
context "when provided a document" do
|
310
|
-
|
311
|
-
context "when the document has an id" do
|
312
|
-
|
313
|
-
let!(:removed) do
|
314
|
-
identity_map.remove(document)
|
315
|
-
end
|
316
|
-
|
317
|
-
it "deletes the document from the map" do
|
318
|
-
identity_map.get(Person, document.id).should be_nil
|
319
|
-
end
|
320
|
-
|
321
|
-
it "returns the document" do
|
322
|
-
removed.should eq(document)
|
323
|
-
end
|
324
|
-
end
|
325
|
-
|
326
|
-
context "when the document has no id" do
|
327
|
-
|
328
|
-
before do
|
329
|
-
document.id = nil
|
330
|
-
end
|
331
|
-
|
332
|
-
let!(:removed) do
|
333
|
-
identity_map.remove(document)
|
334
|
-
end
|
335
|
-
|
336
|
-
it "returns nil" do
|
337
|
-
removed.should be_nil
|
338
|
-
end
|
339
|
-
end
|
340
|
-
end
|
341
|
-
|
342
|
-
context "when provided nil" do
|
343
|
-
|
344
|
-
let!(:removed) do
|
345
|
-
identity_map.remove(nil)
|
346
|
-
end
|
347
|
-
|
348
|
-
it "returns nil" do
|
349
|
-
removed.should be_nil
|
350
|
-
end
|
351
|
-
end
|
352
|
-
end
|
353
|
-
|
354
|
-
describe "#set" do
|
355
|
-
|
356
|
-
context "when setting a document" do
|
357
|
-
|
358
|
-
context "when the identity map is enabled" do
|
359
|
-
|
360
|
-
let(:document) do
|
361
|
-
Person.new
|
362
|
-
end
|
363
|
-
|
364
|
-
let!(:set) do
|
365
|
-
identity_map.set(document)
|
366
|
-
end
|
367
|
-
|
368
|
-
it "puts the object in the identity map" do
|
369
|
-
identity_map.get(Person, document.id).should eq(document)
|
370
|
-
end
|
371
|
-
|
372
|
-
it "returns the document" do
|
373
|
-
set.should eq(document)
|
374
|
-
end
|
375
|
-
end
|
376
|
-
|
377
|
-
context "when the identity map is disabled" do
|
378
|
-
|
379
|
-
before do
|
380
|
-
Mongoid.identity_map_enabled = false
|
381
|
-
end
|
382
|
-
|
383
|
-
after do
|
384
|
-
Mongoid.identity_map_enabled = true
|
385
|
-
end
|
386
|
-
|
387
|
-
let(:document) do
|
388
|
-
Person.new
|
389
|
-
end
|
390
|
-
|
391
|
-
let!(:set) do
|
392
|
-
identity_map.set(document)
|
393
|
-
end
|
394
|
-
|
395
|
-
it "does not put the object in the identity map" do
|
396
|
-
identity_map.should be_empty
|
397
|
-
end
|
398
|
-
|
399
|
-
it "returns nil" do
|
400
|
-
set.should be_nil
|
401
|
-
end
|
402
|
-
end
|
403
|
-
end
|
404
|
-
|
405
|
-
context "when setting a document with a nil id" do
|
406
|
-
|
407
|
-
let(:document) do
|
408
|
-
Person.new.tap do |person|
|
409
|
-
person.id = nil
|
410
|
-
end
|
411
|
-
end
|
412
|
-
|
413
|
-
let!(:set) do
|
414
|
-
identity_map.set(document)
|
415
|
-
end
|
416
|
-
|
417
|
-
it "does not put the object in the identity map" do
|
418
|
-
identity_map.get(nil, nil).should be_nil
|
419
|
-
end
|
420
|
-
|
421
|
-
it "returns nil" do
|
422
|
-
set.should be_nil
|
423
|
-
end
|
424
|
-
end
|
425
|
-
|
426
|
-
context "when setting nil" do
|
427
|
-
|
428
|
-
let!(:set) do
|
429
|
-
identity_map.set(nil)
|
430
|
-
end
|
431
|
-
|
432
|
-
it "places nothing in the map" do
|
433
|
-
identity_map.should be_empty
|
434
|
-
end
|
435
|
-
|
436
|
-
it "returns nil" do
|
437
|
-
set.should be_nil
|
438
|
-
end
|
439
|
-
end
|
440
|
-
end
|
441
|
-
|
442
|
-
describe "#set_many" do
|
443
|
-
|
444
|
-
let!(:person) do
|
445
|
-
Person.new
|
446
|
-
end
|
447
|
-
|
448
|
-
let!(:post_one) do
|
449
|
-
Post.new(person: person)
|
450
|
-
end
|
451
|
-
|
452
|
-
let!(:post_two) do
|
453
|
-
Post.new(person: person)
|
454
|
-
end
|
455
|
-
|
456
|
-
context "when no documents exist for the selector" do
|
457
|
-
|
458
|
-
let!(:set) do
|
459
|
-
identity_map.set_many(post_one, { person_id: person.id })
|
460
|
-
identity_map.set_many(post_two, { person_id: person.id })
|
461
|
-
end
|
462
|
-
|
463
|
-
let(:documents) do
|
464
|
-
identity_map[Post.collection_name][{ person_id: person.id }]
|
465
|
-
end
|
466
|
-
|
467
|
-
it "puts the documents in the map" do
|
468
|
-
documents.should eq({
|
469
|
-
post_one.id => post_one, post_two.id => post_two
|
470
|
-
})
|
471
|
-
end
|
472
|
-
end
|
473
|
-
end
|
474
|
-
|
475
|
-
describe "#set_one" do
|
476
|
-
|
477
|
-
let!(:person) do
|
478
|
-
Person.new
|
479
|
-
end
|
480
|
-
|
481
|
-
let!(:post_one) do
|
482
|
-
Post.new(person: person)
|
483
|
-
end
|
484
|
-
|
485
|
-
context "when no documents exist for the selector" do
|
486
|
-
|
487
|
-
let!(:set) do
|
488
|
-
identity_map.set_one(post_one, { person_id: person.id })
|
489
|
-
end
|
490
|
-
|
491
|
-
let(:document) do
|
492
|
-
identity_map[Post.collection_name][{ person_id: person.id }]
|
493
|
-
end
|
494
|
-
|
495
|
-
it "puts the documents in the map" do
|
496
|
-
document.should eq(post_one)
|
497
|
-
end
|
498
|
-
end
|
499
|
-
end
|
500
|
-
|
501
|
-
describe ".set" do
|
502
|
-
|
503
|
-
context "when setting a document" do
|
504
|
-
|
505
|
-
let(:document) do
|
506
|
-
Person.new
|
507
|
-
end
|
508
|
-
|
509
|
-
let!(:set) do
|
510
|
-
described_class.set(document)
|
511
|
-
end
|
512
|
-
|
513
|
-
it "puts the object in the identity map" do
|
514
|
-
described_class.get(Person, document.id).should eq(document)
|
515
|
-
end
|
516
|
-
|
517
|
-
it "returns the document" do
|
518
|
-
set.should eq(document)
|
519
|
-
end
|
520
|
-
end
|
521
|
-
|
522
|
-
context "when setting nil" do
|
523
|
-
|
524
|
-
let!(:set) do
|
525
|
-
described_class.set(nil)
|
526
|
-
end
|
527
|
-
|
528
|
-
it "returns nil" do
|
529
|
-
set.should be_nil
|
530
|
-
end
|
531
|
-
end
|
532
|
-
end
|
533
|
-
|
534
|
-
context "when accessing hash methods directly" do
|
535
|
-
|
536
|
-
Hash.public_instance_methods(false).each do |method|
|
537
|
-
|
538
|
-
it "can access #{method} at the class level" do
|
539
|
-
described_class.should respond_to(method)
|
540
|
-
end
|
541
|
-
end
|
542
|
-
end
|
543
|
-
|
544
|
-
context "when executing in a fiber" do
|
545
|
-
|
546
|
-
describe "#.get" do
|
547
|
-
|
548
|
-
let(:document) do
|
549
|
-
Person.new
|
550
|
-
end
|
551
|
-
|
552
|
-
let(:fiber) do
|
553
|
-
Fiber.new do
|
554
|
-
described_class.set(document)
|
555
|
-
described_class.get(Person, document.id).should eq(document)
|
556
|
-
end
|
557
|
-
end
|
558
|
-
|
559
|
-
it "gets the object from the identity map" do
|
560
|
-
fiber.resume
|
561
|
-
end
|
562
|
-
end
|
563
|
-
end
|
564
|
-
end
|