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,196 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::UnitOfWork do
|
4
|
-
|
5
|
-
describe ".unit_of_work" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
Mongoid.identity_map_enabled = true
|
9
|
-
end
|
10
|
-
|
11
|
-
after do
|
12
|
-
Mongoid.identity_map_enabled = false
|
13
|
-
end
|
14
|
-
|
15
|
-
context "when no options are provided" do
|
16
|
-
|
17
|
-
context "when an exception is raised" do
|
18
|
-
|
19
|
-
let(:person) do
|
20
|
-
Person.new
|
21
|
-
end
|
22
|
-
|
23
|
-
before do
|
24
|
-
Mongoid::IdentityMap.set(person)
|
25
|
-
|
26
|
-
begin
|
27
|
-
Mongoid.unit_of_work do
|
28
|
-
raise RuntimeError
|
29
|
-
end
|
30
|
-
rescue
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
let(:identity_map) do
|
35
|
-
Mongoid::Threaded.identity_map
|
36
|
-
end
|
37
|
-
|
38
|
-
it "clears the identity map" do
|
39
|
-
identity_map.should be_empty
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context "when no exception is raised" do
|
44
|
-
|
45
|
-
let(:person) do
|
46
|
-
Person.new
|
47
|
-
end
|
48
|
-
|
49
|
-
before do
|
50
|
-
Mongoid::IdentityMap.set(person)
|
51
|
-
Mongoid.unit_of_work {}
|
52
|
-
end
|
53
|
-
|
54
|
-
let(:identity_map) do
|
55
|
-
Mongoid::Threaded.identity_map
|
56
|
-
end
|
57
|
-
|
58
|
-
it "clears the identity map" do
|
59
|
-
identity_map.should be_empty
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context "when options are provided" do
|
66
|
-
|
67
|
-
before do
|
68
|
-
Mongoid.identity_map_enabled = true
|
69
|
-
end
|
70
|
-
|
71
|
-
after do
|
72
|
-
Mongoid.identity_map_enabled = false
|
73
|
-
end
|
74
|
-
|
75
|
-
context "when provided disable: :current" do
|
76
|
-
|
77
|
-
it "disables the identity map on the current thread" do
|
78
|
-
Mongoid.unit_of_work(disable: :current) do
|
79
|
-
Mongoid.should_not be_using_identity_map
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
context "when provided disable: :all" do
|
85
|
-
|
86
|
-
let(:other) do
|
87
|
-
Thread.new { "running new thread".inspect }
|
88
|
-
end
|
89
|
-
|
90
|
-
before do
|
91
|
-
other.run
|
92
|
-
Thread.current
|
93
|
-
end
|
94
|
-
|
95
|
-
after do
|
96
|
-
Thread.kill(other)
|
97
|
-
end
|
98
|
-
|
99
|
-
it "disables the identity map on all threads" do
|
100
|
-
Mongoid.unit_of_work(disable: :all) do
|
101
|
-
Thread.list.each do |thread|
|
102
|
-
thread[:"[mongoid]:identity-map-enabled"].should be_false
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context "when nested inside another unit of work" do
|
109
|
-
|
110
|
-
let(:person) do
|
111
|
-
Person.new
|
112
|
-
end
|
113
|
-
|
114
|
-
context "when documents exist in the identity map" do
|
115
|
-
|
116
|
-
before do
|
117
|
-
Mongoid::IdentityMap.set(person)
|
118
|
-
end
|
119
|
-
|
120
|
-
it "does not clear the map in the inner block" do
|
121
|
-
Mongoid.unit_of_work do
|
122
|
-
Mongoid.unit_of_work(disable: :current) do
|
123
|
-
Mongoid::IdentityMap[:people][person.id].should eq(person)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
it "clears the map after the block" do
|
129
|
-
Mongoid.unit_of_work do
|
130
|
-
Mongoid.unit_of_work(disable: :current) do
|
131
|
-
end
|
132
|
-
end
|
133
|
-
Mongoid::IdentityMap.get(Person, person.id).should be_nil
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
describe ".using_identity_map?" do
|
140
|
-
|
141
|
-
context "when configured to use the identity map" do
|
142
|
-
|
143
|
-
before do
|
144
|
-
Mongoid.identity_map_enabled = true
|
145
|
-
end
|
146
|
-
|
147
|
-
after do
|
148
|
-
Mongoid.identity_map_enabled = false
|
149
|
-
end
|
150
|
-
|
151
|
-
context "when disabled on the current thread" do
|
152
|
-
|
153
|
-
before do
|
154
|
-
Thread.current[:"[mongoid]:identity-map-enabled"] = false
|
155
|
-
end
|
156
|
-
|
157
|
-
it "returns false" do
|
158
|
-
Mongoid.should_not be_using_identity_map
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
context "when enabled on the current thread" do
|
163
|
-
|
164
|
-
before do
|
165
|
-
Thread.current[:"[mongoid]:identity-map-enabled"] = true
|
166
|
-
end
|
167
|
-
|
168
|
-
it "returns true" do
|
169
|
-
Mongoid.should be_using_identity_map
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
context "when no option is on the current thread" do
|
174
|
-
|
175
|
-
before do
|
176
|
-
Thread.current[:"[mongoid]:identity-map-enabled"] = nil
|
177
|
-
end
|
178
|
-
|
179
|
-
it "returns true" do
|
180
|
-
Mongoid.should be_using_identity_map
|
181
|
-
end
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
context "when not configured to use the identity map" do
|
186
|
-
|
187
|
-
before do
|
188
|
-
Mongoid.identity_map_enabled = false
|
189
|
-
end
|
190
|
-
|
191
|
-
it "returns false" do
|
192
|
-
Mongoid.should_not be_using_identity_map
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|
@@ -1,540 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Versioning do
|
4
|
-
|
5
|
-
describe ".max_versions" do
|
6
|
-
|
7
|
-
context "when provided an integer" do
|
8
|
-
|
9
|
-
before do
|
10
|
-
WikiPage.max_versions(10)
|
11
|
-
end
|
12
|
-
|
13
|
-
after do
|
14
|
-
WikiPage.max_versions(5)
|
15
|
-
end
|
16
|
-
|
17
|
-
it "sets the class version max" do
|
18
|
-
WikiPage.version_max.should eq(10)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context "when provided a string" do
|
23
|
-
|
24
|
-
before do
|
25
|
-
WikiPage.max_versions("10")
|
26
|
-
end
|
27
|
-
|
28
|
-
after do
|
29
|
-
WikiPage.max_versions(5)
|
30
|
-
end
|
31
|
-
|
32
|
-
it "sets the class version max" do
|
33
|
-
WikiPage.version_max.should eq(10)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe "#version" do
|
39
|
-
|
40
|
-
context "when there is no default scope" do
|
41
|
-
|
42
|
-
context "when the document is new" do
|
43
|
-
|
44
|
-
it "returns 1" do
|
45
|
-
WikiPage.new.version.should eq(1)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "when the document is persisted once" do
|
50
|
-
|
51
|
-
let(:page) do
|
52
|
-
WikiPage.create(title: "1")
|
53
|
-
end
|
54
|
-
|
55
|
-
it "returns 1" do
|
56
|
-
page.version.should eq(1)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context "when the document is persisted more than once" do
|
61
|
-
|
62
|
-
let(:page) do
|
63
|
-
WikiPage.create(title: "1")
|
64
|
-
end
|
65
|
-
|
66
|
-
before do
|
67
|
-
3.times { |n| page.update_attribute(:title, "#{n}") }
|
68
|
-
end
|
69
|
-
|
70
|
-
it "returns the number of versions" do
|
71
|
-
page.version.should eq(4)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
context "when maximum versions is defined" do
|
76
|
-
|
77
|
-
let(:page) do
|
78
|
-
WikiPage.create(title: "1")
|
79
|
-
end
|
80
|
-
|
81
|
-
context "when saving over the max versions limit" do
|
82
|
-
|
83
|
-
before do
|
84
|
-
10.times { |n| page.update_attribute(:title, "#{n}") }
|
85
|
-
end
|
86
|
-
|
87
|
-
it "returns the number of versions" do
|
88
|
-
page.version.should eq(11)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context "when performing versionless saves" do
|
94
|
-
|
95
|
-
let(:page) do
|
96
|
-
WikiPage.create(title: "1")
|
97
|
-
end
|
98
|
-
|
99
|
-
before do
|
100
|
-
10.times do |n|
|
101
|
-
page.versionless { |doc| doc.update_attribute(:title, "#{n}") }
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
it "does not increment the version number" do
|
106
|
-
page.version.should eq(1)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context "when there is a default scope" do
|
112
|
-
|
113
|
-
before :all do
|
114
|
-
class WikiPage
|
115
|
-
default_scope where(author: "Jim")
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
after :all do
|
120
|
-
WikiPage.default_scoping = nil
|
121
|
-
end
|
122
|
-
|
123
|
-
context "when the document is new" do
|
124
|
-
|
125
|
-
it "returns 1" do
|
126
|
-
WikiPage.new.version.should eq(1)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
context "when the document is persisted once" do
|
131
|
-
|
132
|
-
let(:page) do
|
133
|
-
WikiPage.create(title: "1")
|
134
|
-
end
|
135
|
-
|
136
|
-
it "returns 1" do
|
137
|
-
page.version.should eq(1)
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
context "when the document is persisted more than once" do
|
142
|
-
|
143
|
-
let(:page) do
|
144
|
-
WikiPage.create(title: "1")
|
145
|
-
end
|
146
|
-
|
147
|
-
before do
|
148
|
-
3.times { |n| page.update_attribute(:title, "#{n}") }
|
149
|
-
end
|
150
|
-
|
151
|
-
it "returns the number of versions" do
|
152
|
-
page.version.should eq(4)
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
context "when maximum versions is defined" do
|
157
|
-
|
158
|
-
let(:page) do
|
159
|
-
WikiPage.create(title: "1")
|
160
|
-
end
|
161
|
-
|
162
|
-
context "when saving over the max versions limit" do
|
163
|
-
|
164
|
-
before do
|
165
|
-
10.times { |n| page.update_attribute(:title, "#{n}") }
|
166
|
-
end
|
167
|
-
|
168
|
-
it "returns the number of versions" do
|
169
|
-
page.version.should eq(11)
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
context "when performing versionless saves" do
|
175
|
-
|
176
|
-
let(:page) do
|
177
|
-
WikiPage.create(title: "1")
|
178
|
-
end
|
179
|
-
|
180
|
-
before do
|
181
|
-
10.times do |n|
|
182
|
-
page.versionless { |doc| doc.update_attribute(:title, "#{n}") }
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
it "does not increment the version number" do
|
187
|
-
page.version.should eq(1)
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
context "when not using the default database" do
|
193
|
-
|
194
|
-
let(:title) { "my new wiki" }
|
195
|
-
|
196
|
-
let!(:page) do
|
197
|
-
WikiPage.with(database: "mongoid_test_alt").create!(description: "1",title: title)
|
198
|
-
end
|
199
|
-
|
200
|
-
context "when the document is persisted once" do
|
201
|
-
|
202
|
-
it "returns 1" do
|
203
|
-
page.version.should eq(1)
|
204
|
-
end
|
205
|
-
|
206
|
-
it "does not persist to default database" do
|
207
|
-
expect {
|
208
|
-
WikiPage.find_by(title: title)
|
209
|
-
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
210
|
-
end
|
211
|
-
|
212
|
-
it "persists to specified database" do
|
213
|
-
WikiPage.with(database: "mongoid_test_alt").find_by(title: title).should_not be_nil
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
context "when the document is persisted more than once" do
|
218
|
-
|
219
|
-
before do
|
220
|
-
3.times { |n| page.with(database: "mongoid_test_alt").update_attribute(:description, "#{n}") }
|
221
|
-
end
|
222
|
-
|
223
|
-
it "returns the number of versions" do
|
224
|
-
page.version.should eq(4)
|
225
|
-
end
|
226
|
-
|
227
|
-
it "persists to specified database" do
|
228
|
-
WikiPage.with(database: "mongoid_test_alt").find_by(:title => title).should_not be_nil
|
229
|
-
end
|
230
|
-
|
231
|
-
it "persists the versions to specified database" do
|
232
|
-
WikiPage.with(database: "mongoid_test_alt").find_by(:title => title).version.should eq(4)
|
233
|
-
end
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
describe "#versionless" do
|
239
|
-
|
240
|
-
let(:page) do
|
241
|
-
WikiPage.new(created_at: Time.now.utc)
|
242
|
-
end
|
243
|
-
|
244
|
-
context "when executing the block" do
|
245
|
-
|
246
|
-
it "sets versionless to true" do
|
247
|
-
page.versionless do |doc|
|
248
|
-
doc.should be_versionless
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
252
|
-
|
253
|
-
context "when the block finishes" do
|
254
|
-
|
255
|
-
it "sets versionless to false" do
|
256
|
-
page.versionless
|
257
|
-
page.should_not be_versionless
|
258
|
-
end
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
describe "#versions" do
|
263
|
-
|
264
|
-
let(:page) do
|
265
|
-
WikiPage.create(title: "1", description: "test") do |wiki|
|
266
|
-
wiki.author = "woodchuck"
|
267
|
-
end
|
268
|
-
end
|
269
|
-
|
270
|
-
context "when saving the document " do
|
271
|
-
|
272
|
-
context "when the document has changed" do
|
273
|
-
|
274
|
-
before do
|
275
|
-
page.update_attribute(:title, "2")
|
276
|
-
end
|
277
|
-
|
278
|
-
let(:version) do
|
279
|
-
page.versions.first
|
280
|
-
end
|
281
|
-
|
282
|
-
it "creates a new version" do
|
283
|
-
version.title.should eq("1")
|
284
|
-
end
|
285
|
-
|
286
|
-
it "properly versions the localized fields" do
|
287
|
-
version.description.should eq("test")
|
288
|
-
end
|
289
|
-
|
290
|
-
it "only creates 1 new version" do
|
291
|
-
page.versions.count.should eq(1)
|
292
|
-
end
|
293
|
-
|
294
|
-
it "does not version the _id" do
|
295
|
-
version._id.should be_nil
|
296
|
-
end
|
297
|
-
|
298
|
-
it "does version the updated_at timestamp" do
|
299
|
-
version.updated_at.should_not be_nil
|
300
|
-
end
|
301
|
-
|
302
|
-
context "when only updated_at was changed" do
|
303
|
-
|
304
|
-
before do
|
305
|
-
page.update_attributes(updated_at: Time.now)
|
306
|
-
end
|
307
|
-
|
308
|
-
it "does not generate another version" do
|
309
|
-
page.versions.count.should eq(1)
|
310
|
-
end
|
311
|
-
end
|
312
|
-
|
313
|
-
it "does not embed versions within versions" do
|
314
|
-
version.versions.should be_empty
|
315
|
-
end
|
316
|
-
|
317
|
-
it "versions protected fields" do
|
318
|
-
version.author.should eq("woodchuck")
|
319
|
-
end
|
320
|
-
|
321
|
-
context "when saving multiple times" do
|
322
|
-
|
323
|
-
before do
|
324
|
-
page.update_attribute(:title, "3")
|
325
|
-
end
|
326
|
-
|
327
|
-
it "does not embed versions within versions" do
|
328
|
-
version.versions.should be_empty
|
329
|
-
end
|
330
|
-
|
331
|
-
it "does not embed versions multiple levels deep" do
|
332
|
-
page.versions.last.versions.should be_empty
|
333
|
-
end
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
|
-
context "when the document has not changed" do
|
338
|
-
|
339
|
-
before do
|
340
|
-
page.save
|
341
|
-
end
|
342
|
-
|
343
|
-
let(:version) do
|
344
|
-
page.versions.first
|
345
|
-
end
|
346
|
-
|
347
|
-
it "does not create a new version" do
|
348
|
-
version.should be_nil
|
349
|
-
end
|
350
|
-
end
|
351
|
-
|
352
|
-
context "when saving over the number of maximum versions" do
|
353
|
-
|
354
|
-
context "when the document is paranoid" do
|
355
|
-
|
356
|
-
let!(:post) do
|
357
|
-
ParanoidPost.create(title: "test")
|
358
|
-
end
|
359
|
-
|
360
|
-
before do
|
361
|
-
3.times do |n|
|
362
|
-
post.update_attribute(:title, "#{n}")
|
363
|
-
end
|
364
|
-
end
|
365
|
-
|
366
|
-
it "only versions the maximum amount" do
|
367
|
-
post.versions.target.size.should eq(2)
|
368
|
-
end
|
369
|
-
|
370
|
-
it "persists the changes" do
|
371
|
-
post.reload.versions.target.size.should eq(2)
|
372
|
-
end
|
373
|
-
end
|
374
|
-
|
375
|
-
context "when saving in succession" do
|
376
|
-
|
377
|
-
before do
|
378
|
-
10.times do |n|
|
379
|
-
page.update_attribute(:title, "#{n}")
|
380
|
-
end
|
381
|
-
end
|
382
|
-
|
383
|
-
let(:versions) do
|
384
|
-
page.versions
|
385
|
-
end
|
386
|
-
|
387
|
-
it "only versions the maximum amount" do
|
388
|
-
versions.count.should eq(5)
|
389
|
-
end
|
390
|
-
|
391
|
-
it "shifts the versions in order" do
|
392
|
-
versions.last.title.should eq("8")
|
393
|
-
end
|
394
|
-
|
395
|
-
it "persists the version shifts" do
|
396
|
-
page.reload.versions.last.title.should eq("8")
|
397
|
-
end
|
398
|
-
end
|
399
|
-
|
400
|
-
context "when saving in batches" do
|
401
|
-
|
402
|
-
before do
|
403
|
-
2.times do
|
404
|
-
5.times do |n|
|
405
|
-
WikiPage.find(page.id).update_attributes(title: "#{n}")
|
406
|
-
end
|
407
|
-
end
|
408
|
-
end
|
409
|
-
|
410
|
-
let(:from_db) do
|
411
|
-
WikiPage.find(page.id)
|
412
|
-
end
|
413
|
-
|
414
|
-
let(:versions) do
|
415
|
-
from_db.versions
|
416
|
-
end
|
417
|
-
|
418
|
-
it "only versions the maximum amount" do
|
419
|
-
versions.count.should eq(5)
|
420
|
-
end
|
421
|
-
end
|
422
|
-
end
|
423
|
-
|
424
|
-
context "when persisting versionless" do
|
425
|
-
|
426
|
-
before do
|
427
|
-
page.versionless { |doc| doc.update_attribute(:title, "2") }
|
428
|
-
end
|
429
|
-
|
430
|
-
it "does not version the document" do
|
431
|
-
page.versions.count.should eq(0)
|
432
|
-
end
|
433
|
-
end
|
434
|
-
|
435
|
-
context "when deleting versions" do
|
436
|
-
|
437
|
-
let(:comment) do
|
438
|
-
Comment.new(title: "Don't delete me!")
|
439
|
-
end
|
440
|
-
|
441
|
-
let!(:orphaned) do
|
442
|
-
Comment.create(title: "Annie")
|
443
|
-
end
|
444
|
-
|
445
|
-
before do
|
446
|
-
page.comments << comment
|
447
|
-
page.update_attribute(:title, "5")
|
448
|
-
end
|
449
|
-
|
450
|
-
context "when the version had a dependent relation" do
|
451
|
-
|
452
|
-
before do
|
453
|
-
page.versions.delete_all
|
454
|
-
end
|
455
|
-
|
456
|
-
let(:from_db) do
|
457
|
-
Comment.find(comment.id)
|
458
|
-
end
|
459
|
-
|
460
|
-
it "does not perform dependent cascading" do
|
461
|
-
from_db.should eq(comment)
|
462
|
-
end
|
463
|
-
|
464
|
-
it "does not delete related orphans" do
|
465
|
-
Comment.find(orphaned.id).should eq(orphaned)
|
466
|
-
end
|
467
|
-
|
468
|
-
it "deletes the version" do
|
469
|
-
page.versions.should be_empty
|
470
|
-
end
|
471
|
-
|
472
|
-
it "persists the deletion" do
|
473
|
-
page.reload.versions.should be_empty
|
474
|
-
end
|
475
|
-
|
476
|
-
it "retains the root relation" do
|
477
|
-
page.reload.comments.should eq([ comment ])
|
478
|
-
end
|
479
|
-
end
|
480
|
-
end
|
481
|
-
end
|
482
|
-
end
|
483
|
-
|
484
|
-
context "when appending a self referencing document with versions" do
|
485
|
-
|
486
|
-
let(:page) do
|
487
|
-
WikiPage.create(title: "1")
|
488
|
-
end
|
489
|
-
|
490
|
-
let(:child) do
|
491
|
-
WikiPage.new
|
492
|
-
end
|
493
|
-
|
494
|
-
before do
|
495
|
-
page.child_pages << child
|
496
|
-
end
|
497
|
-
|
498
|
-
it "allows the document to be added" do
|
499
|
-
page.child_pages.should eq([ child ])
|
500
|
-
end
|
501
|
-
|
502
|
-
it "persists the changes" do
|
503
|
-
page.reload.child_pages.should eq([ child ])
|
504
|
-
end
|
505
|
-
end
|
506
|
-
|
507
|
-
context "when the identity map is enabled" do
|
508
|
-
|
509
|
-
before do
|
510
|
-
Mongoid.identity_map_enabled = true
|
511
|
-
end
|
512
|
-
|
513
|
-
after do
|
514
|
-
Mongoid.identity_map_enabled = false
|
515
|
-
end
|
516
|
-
|
517
|
-
context "when updating a loaded attribute" do
|
518
|
-
|
519
|
-
let!(:page) do
|
520
|
-
WikiPage.create(title: "first")
|
521
|
-
end
|
522
|
-
|
523
|
-
let!(:loaded) do
|
524
|
-
WikiPage.find(page.id)
|
525
|
-
end
|
526
|
-
|
527
|
-
before do
|
528
|
-
loaded.update_attribute(:title, "revised")
|
529
|
-
end
|
530
|
-
|
531
|
-
let(:reloaded) do
|
532
|
-
WikiPage.find(page.id)
|
533
|
-
end
|
534
|
-
|
535
|
-
it "returns the revised im memory document" do
|
536
|
-
reloaded.title.should eq("revised")
|
537
|
-
end
|
538
|
-
end
|
539
|
-
end
|
540
|
-
end
|