mongoid 3.1.6 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +479 -8
- data/README.md +10 -7
- data/lib/config/locales/en.yml +34 -20
- data/lib/mongoid.rb +10 -76
- data/lib/mongoid/atomic.rb +3 -14
- data/lib/mongoid/atomic/paths/embedded.rb +0 -30
- data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
- data/lib/mongoid/atomic/paths/root.rb +0 -13
- data/lib/mongoid/attributes.rb +65 -101
- data/lib/mongoid/attributes/dynamic.rb +154 -0
- data/lib/mongoid/attributes/nested.rb +82 -0
- data/lib/mongoid/attributes/processing.rb +13 -66
- data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
- data/lib/mongoid/composable.rb +105 -0
- data/lib/mongoid/config.rb +3 -9
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -0
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
- data/lib/mongoid/contextual/atomic.rb +53 -53
- data/lib/mongoid/contextual/geo_near.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +4 -2
- data/lib/mongoid/contextual/memory.rb +23 -11
- data/lib/mongoid/contextual/mongo.rb +75 -57
- data/lib/mongoid/contextual/none.rb +90 -0
- data/lib/mongoid/contextual/text_search.rb +178 -0
- data/lib/mongoid/copyable.rb +2 -3
- data/lib/mongoid/criteria.rb +39 -34
- data/lib/mongoid/criteria/#findable.rb# +141 -0
- data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
- data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
- data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
- data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
- data/lib/mongoid/criteria/permission.rb +70 -0
- data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
- data/lib/mongoid/document.rb +39 -24
- data/lib/mongoid/errors.rb +4 -1
- data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
- data/lib/mongoid/errors/document_not_found.rb +2 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
- data/lib/mongoid/errors/invalid_value.rb +16 -0
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/errors/readonly_document.rb +24 -0
- data/lib/mongoid/extensions.rb +15 -7
- data/lib/mongoid/extensions/array.rb +3 -3
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/boolean.rb +15 -17
- data/lib/mongoid/extensions/date.rb +1 -1
- data/lib/mongoid/extensions/date_time.rb +3 -3
- data/lib/mongoid/extensions/float.rb +2 -1
- data/lib/mongoid/extensions/hash.rb +3 -3
- data/lib/mongoid/extensions/integer.rb +1 -1
- data/lib/mongoid/extensions/object.rb +7 -7
- data/lib/mongoid/extensions/object_id.rb +5 -5
- data/lib/mongoid/extensions/range.rb +9 -3
- data/lib/mongoid/extensions/regexp.rb +1 -1
- data/lib/mongoid/extensions/set.rb +1 -1
- data/lib/mongoid/extensions/string.rb +6 -18
- data/lib/mongoid/extensions/symbol.rb +1 -1
- data/lib/mongoid/extensions/time.rb +3 -3
- data/lib/mongoid/extensions/time_with_zone.rb +1 -1
- data/lib/mongoid/factory.rb +8 -6
- data/lib/mongoid/fields.rb +41 -8
- data/lib/mongoid/fields/foreign_key.rb +3 -3
- data/lib/mongoid/fields/localized.rb +1 -1
- data/lib/mongoid/fields/standard.rb +5 -17
- data/lib/mongoid/fields/validators/macro.rb +15 -5
- data/lib/mongoid/{finders.rb → findable.rb} +35 -7
- data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
- data/lib/mongoid/indexable/specification.rb +104 -0
- data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
- data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
- data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
- data/lib/mongoid/log_subscriber.rb +55 -0
- data/lib/mongoid/matchable.rb +152 -0
- data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
- data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
- data/lib/mongoid/persistable.rb +216 -0
- data/lib/mongoid/persistable/creatable.rb +189 -0
- data/lib/mongoid/persistable/deletable.rb +149 -0
- data/lib/mongoid/persistable/destroyable.rb +60 -0
- data/lib/mongoid/persistable/incrementable.rb +36 -0
- data/lib/mongoid/persistable/logical.rb +38 -0
- data/lib/mongoid/persistable/poppable.rb +39 -0
- data/lib/mongoid/persistable/pullable.rb +55 -0
- data/lib/mongoid/persistable/pushable.rb +62 -0
- data/lib/mongoid/persistable/renamable.rb +35 -0
- data/lib/mongoid/persistable/savable.rb +52 -0
- data/lib/mongoid/persistable/settable.rb +33 -0
- data/lib/mongoid/persistable/unsettable.rb +36 -0
- data/lib/mongoid/persistable/updatable.rb +153 -0
- data/lib/mongoid/persistable/upsertable.rb +55 -0
- data/lib/mongoid/positional.rb +71 -0
- data/lib/mongoid/query_cache.rb +255 -0
- data/lib/mongoid/railtie.rb +34 -60
- data/lib/mongoid/railties/database.rake +9 -25
- data/lib/mongoid/relations.rb +11 -25
- data/lib/mongoid/relations/accessors.rb +15 -51
- data/lib/mongoid/relations/auto_save.rb +15 -36
- data/lib/mongoid/relations/binding.rb +2 -25
- data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
- data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
- data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
- data/lib/mongoid/relations/builder.rb +1 -1
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
- data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
- data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
- data/lib/mongoid/relations/cascading.rb +3 -5
- data/lib/mongoid/relations/constraint.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/counter_cache.rb +39 -15
- data/lib/mongoid/relations/eager.rb +46 -0
- data/lib/mongoid/relations/eager/base.rb +149 -0
- data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
- data/lib/mongoid/relations/eager/has_many.rb +38 -0
- data/lib/mongoid/relations/eager/has_one.rb +30 -0
- data/lib/mongoid/relations/embedded/batchable.rb +4 -5
- data/lib/mongoid/relations/embedded/in.rb +4 -4
- data/lib/mongoid/relations/embedded/many.rb +14 -32
- data/lib/mongoid/relations/embedded/one.rb +1 -1
- data/lib/mongoid/relations/macros.rb +3 -4
- data/lib/mongoid/relations/many.rb +51 -31
- data/lib/mongoid/relations/marshalable.rb +3 -3
- data/lib/mongoid/relations/metadata.rb +14 -79
- data/lib/mongoid/relations/nested_builder.rb +2 -2
- data/lib/mongoid/relations/one.rb +1 -1
- data/lib/mongoid/relations/options.rb +1 -0
- data/lib/mongoid/relations/polymorphic.rb +0 -1
- data/lib/mongoid/relations/proxy.rb +21 -41
- data/lib/mongoid/relations/referenced/in.rb +4 -20
- data/lib/mongoid/relations/referenced/many.rb +22 -35
- data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
- data/lib/mongoid/relations/referenced/one.rb +6 -25
- data/lib/mongoid/relations/synchronization.rb +4 -4
- data/lib/mongoid/relations/targets/enumerable.rb +10 -10
- data/lib/mongoid/relations/touchable.rb +34 -1
- data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
- data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
- data/lib/mongoid/selectable.rb +59 -0
- data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
- data/lib/mongoid/sessions.rb +37 -345
- data/lib/mongoid/sessions/factory.rb +2 -0
- data/lib/mongoid/sessions/options.rb +185 -0
- data/lib/mongoid/sessions/storage_options.rb +140 -0
- data/lib/mongoid/sessions/thread_options.rb +19 -0
- data/lib/mongoid/sessions/validators/storage.rb +16 -3
- data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
- data/lib/mongoid/{state.rb → stateful.rb} +13 -1
- data/lib/mongoid/support/query_counter.rb +23 -0
- data/lib/mongoid/tasks/database.rake +31 -0
- data/lib/mongoid/tasks/database.rb +107 -0
- data/lib/mongoid/threaded.rb +26 -172
- data/lib/mongoid/threaded/lifecycle.rb +0 -28
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
- data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
- data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
- data/lib/mongoid/{validations → validatable}/format.rb +1 -1
- data/lib/mongoid/{validations → validatable}/length.rb +1 -1
- data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
- data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
- data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
- data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
- data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
- data/lib/rails/generators/mongoid_generator.rb +3 -40
- data/lib/rails/mongoid.rb +0 -122
- data/lib/support/ruby_version.rb +1 -1
- data/spec/app/models/account.rb +2 -6
- data/spec/app/models/acolyte.rb +2 -1
- data/spec/app/models/actor.rb +0 -1
- data/spec/app/models/address.rb +8 -3
- data/spec/app/models/animal.rb +1 -1
- data/spec/app/models/appointment.rb +3 -3
- data/spec/app/models/article.rb +1 -4
- data/spec/app/models/audio.rb +5 -0
- data/spec/app/models/author.rb +0 -2
- data/spec/app/models/band.rb +3 -2
- data/spec/app/models/bar.rb +1 -0
- data/spec/app/models/book.rb +1 -0
- data/spec/app/models/building.rb +0 -2
- data/spec/app/models/building_address.rb +0 -2
- data/spec/app/models/bus.rb +1 -1
- data/spec/app/models/canvas.rb +1 -1
- data/spec/app/models/contextable_item.rb +5 -0
- data/spec/app/models/contractor.rb +0 -2
- data/spec/app/models/country_code.rb +1 -1
- data/spec/app/models/definition.rb +2 -2
- data/spec/app/models/dog.rb +1 -1
- data/spec/app/models/draft.rb +9 -0
- data/spec/app/models/dragon.rb +4 -0
- data/spec/app/models/drug.rb +1 -3
- data/spec/app/models/dungeon.rb +4 -0
- data/spec/app/models/edit.rb +5 -0
- data/spec/app/models/even.rb +7 -0
- data/spec/app/models/event.rb +1 -1
- data/spec/app/models/filesystem.rb +1 -0
- data/spec/app/models/fish.rb +0 -1
- data/spec/app/models/fruits.rb +6 -0
- data/spec/app/models/game.rb +0 -2
- data/spec/app/models/house.rb +1 -3
- data/spec/app/models/id_key.rb +6 -0
- data/spec/app/models/item.rb +1 -5
- data/spec/app/models/jar.rb +1 -1
- data/spec/app/models/label.rb +4 -4
- data/spec/app/models/line_item.rb +1 -1
- data/spec/app/models/login.rb +1 -1
- data/spec/app/models/message.rb +8 -0
- data/spec/app/models/movie.rb +1 -0
- data/spec/app/models/name.rb +3 -3
- data/spec/app/models/note.rb +3 -1
- data/spec/app/models/odd.rb +7 -0
- data/spec/app/models/oscar.rb +1 -1
- data/spec/app/models/parent_doc.rb +1 -1
- data/spec/app/models/person.rb +16 -10
- data/spec/app/models/phone.rb +1 -3
- data/spec/app/models/player.rb +3 -3
- data/spec/app/models/post.rb +5 -3
- data/spec/app/models/preference.rb +1 -1
- data/spec/app/models/quiz.rb +0 -3
- data/spec/app/models/record.rb +10 -5
- data/spec/app/models/registry.rb +1 -1
- data/spec/app/models/server.rb +1 -1
- data/spec/app/models/service.rb +3 -3
- data/spec/app/models/sound.rb +5 -0
- data/spec/app/models/symptom.rb +1 -1
- data/spec/app/models/template.rb +1 -1
- data/spec/app/models/title.rb +0 -1
- data/spec/app/models/track.rb +5 -5
- data/spec/app/models/tree.rb +3 -3
- data/spec/app/models/video.rb +1 -5
- data/spec/app/models/wiki_page.rb +2 -5
- data/spec/app/models/word.rb +3 -0
- data/spec/app/models/word_origin.rb +1 -1
- data/spec/config/mongoid.yml +7 -8
- data/spec/helpers.rb +18 -0
- data/spec/mongoid/#atomic_spec.rb# +365 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
- data/spec/mongoid/atomic/paths_spec.rb +19 -19
- data/spec/mongoid/atomic_spec.rb +19 -19
- data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
- data/spec/mongoid/attributes/readonly_spec.rb +58 -18
- data/spec/mongoid/attributes_spec.rb +349 -434
- data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
- data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
- data/spec/mongoid/config/environment_spec.rb +3 -3
- data/spec/mongoid/config/options_spec.rb +6 -6
- data/spec/mongoid/config_spec.rb +24 -48
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
- data/spec/mongoid/contextual/atomic_spec.rb +60 -56
- data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
- data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
- data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
- data/spec/mongoid/contextual/memory_spec.rb +156 -94
- data/spec/mongoid/contextual/mongo_spec.rb +238 -150
- data/spec/mongoid/contextual/none_spec.rb +127 -0
- data/spec/mongoid/contextual/text_search_spec.rb +209 -0
- data/spec/mongoid/copyable_spec.rb +56 -68
- data/spec/mongoid/criteria/findable_spec.rb +991 -0
- data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
- data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
- data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
- data/spec/mongoid/criteria_spec.rb +715 -2421
- data/spec/mongoid/document_spec.rb +171 -121
- data/spec/mongoid/equality_spec.rb +22 -22
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
- data/spec/mongoid/errors/callback_spec.rb +3 -3
- data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
- data/spec/mongoid/errors/eager_load_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
- data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
- data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
- data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
- data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
- data/spec/mongoid/errors/no_parent_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
- data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
- data/spec/mongoid/errors/validations_spec.rb +7 -7
- data/spec/mongoid/extensions/array_spec.rb +61 -61
- data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
- data/spec/mongoid/extensions/binary_spec.rb +12 -12
- data/spec/mongoid/extensions/boolean_spec.rb +18 -18
- data/spec/mongoid/extensions/date_spec.rb +13 -13
- data/spec/mongoid/extensions/date_time_spec.rb +8 -8
- data/spec/mongoid/extensions/false_class_spec.rb +5 -5
- data/spec/mongoid/extensions/float_spec.rb +29 -15
- data/spec/mongoid/extensions/hash_spec.rb +29 -29
- data/spec/mongoid/extensions/integer_spec.rb +15 -15
- data/spec/mongoid/extensions/module_spec.rb +2 -2
- data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/extensions/object_id_spec.rb +134 -134
- data/spec/mongoid/extensions/object_spec.rb +26 -26
- data/spec/mongoid/extensions/range_spec.rb +61 -12
- data/spec/mongoid/extensions/regexp_spec.rb +4 -4
- data/spec/mongoid/extensions/set_spec.rb +4 -4
- data/spec/mongoid/extensions/string_spec.rb +35 -46
- data/spec/mongoid/extensions/symbol_spec.rb +9 -9
- data/spec/mongoid/extensions/time_spec.rb +49 -49
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
- data/spec/mongoid/extensions/true_class_spec.rb +5 -5
- data/spec/mongoid/extensions_spec.rb +29 -0
- data/spec/mongoid/factory_spec.rb +15 -15
- data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
- data/spec/mongoid/fields/localized_spec.rb +38 -23
- data/spec/mongoid/fields/standard_spec.rb +12 -12
- data/spec/mongoid/fields_spec.rb +263 -217
- data/spec/mongoid/findable_spec.rb +509 -0
- data/spec/mongoid/indexable/specification_spec.rb +102 -0
- data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
- data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
- data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
- data/spec/mongoid/log_subscriber_spec.rb +75 -0
- data/spec/mongoid/loggable_spec.rb +1 -1
- data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
- data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
- data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
- data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
- data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
- data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
- data/spec/mongoid/matchable/in_spec.rb +49 -0
- data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
- data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
- data/spec/mongoid/matchable/ne_spec.rb +46 -0
- data/spec/mongoid/matchable/nin_spec.rb +48 -0
- data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
- data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
- data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
- data/spec/mongoid/persistable/creatable_spec.rb +553 -0
- data/spec/mongoid/persistable/deletable_spec.rb +218 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
- data/spec/mongoid/persistable/logical_spec.rb +143 -0
- data/spec/mongoid/persistable/poppable_spec.rb +115 -0
- data/spec/mongoid/persistable/pullable_spec.rb +228 -0
- data/spec/mongoid/persistable/pushable_spec.rb +258 -0
- data/spec/mongoid/persistable/renamable_spec.rb +135 -0
- data/spec/mongoid/persistable/savable_spec.rb +498 -0
- data/spec/mongoid/persistable/settable_spec.rb +162 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
- data/spec/mongoid/persistable/updatable_spec.rb +558 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
- data/spec/mongoid/persistable_spec.rb +206 -0
- data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
- data/spec/mongoid/query_cache_spec.rb +263 -0
- data/spec/mongoid/railties/document_spec.rb +2 -2
- data/spec/mongoid/relations/accessors_spec.rb +53 -145
- data/spec/mongoid/relations/auto_save_spec.rb +37 -17
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
- data/spec/mongoid/relations/builders_spec.rb +21 -21
- data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
- data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
- data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
- data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
- data/spec/mongoid/relations/cascading_spec.rb +16 -16
- data/spec/mongoid/relations/constraint_spec.rb +8 -7
- data/spec/mongoid/relations/conversions_spec.rb +16 -14
- data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
- data/spec/mongoid/relations/cyclic_spec.rb +18 -18
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
- data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
- data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
- data/spec/mongoid/relations/eager_spec.rb +228 -0
- data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
- data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
- data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
- data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
- data/spec/mongoid/relations/macros_spec.rb +108 -102
- data/spec/mongoid/relations/metadata_spec.rb +180 -255
- data/spec/mongoid/relations/options_spec.rb +1 -1
- data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
- data/spec/mongoid/relations/proxy_spec.rb +2 -2
- data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
- data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
- data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
- data/spec/mongoid/relations/reflections_spec.rb +6 -6
- data/spec/mongoid/relations/synchronization_spec.rb +46 -50
- data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
- data/spec/mongoid/relations/touchable_spec.rb +333 -0
- data/spec/mongoid/relations_spec.rb +16 -15
- data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
- data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
- data/spec/mongoid/selectable_spec.rb +134 -0
- data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
- data/spec/mongoid/sessions/factory_spec.rb +49 -28
- data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
- data/spec/mongoid/sessions/options_spec.rb +108 -0
- data/spec/mongoid/sessions_spec.rb +319 -178
- data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
- data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
- data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
- data/spec/mongoid/tasks/database_spec.rb +160 -0
- data/spec/mongoid/threaded_spec.rb +17 -70
- data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
- data/spec/mongoid/timestamps/created_spec.rb +5 -5
- data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
- data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
- data/spec/mongoid/timestamps/updated_spec.rb +9 -13
- data/spec/mongoid/timestamps_spec.rb +9 -13
- data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
- data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
- data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
- data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
- data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
- data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
- data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
- data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
- data/spec/mongoid_spec.rb +8 -8
- data/spec/rails/mongoid_spec.rb +19 -335
- data/spec/spec_helper.rb +31 -13
- metadata +303 -283
- data/lib/mongoid/atomic/positionable.rb +0 -73
- data/lib/mongoid/components.rb +0 -92
- data/lib/mongoid/config/inflections.rb +0 -6
- data/lib/mongoid/contextual/eager.rb +0 -158
- data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
- data/lib/mongoid/identity_map.rb +0 -163
- data/lib/mongoid/json.rb +0 -16
- data/lib/mongoid/matchers.rb +0 -32
- data/lib/mongoid/matchers/strategies.rb +0 -97
- data/lib/mongoid/multi_parameter_attributes.rb +0 -105
- data/lib/mongoid/nested_attributes.rb +0 -78
- data/lib/mongoid/observer.rb +0 -192
- data/lib/mongoid/paranoia.rb +0 -136
- data/lib/mongoid/persistence.rb +0 -357
- data/lib/mongoid/persistence/atomic.rb +0 -231
- data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
- data/lib/mongoid/persistence/atomic/bit.rb +0 -35
- data/lib/mongoid/persistence/atomic/inc.rb +0 -45
- data/lib/mongoid/persistence/atomic/operation.rb +0 -154
- data/lib/mongoid/persistence/atomic/pop.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
- data/lib/mongoid/persistence/atomic/push.rb +0 -25
- data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
- data/lib/mongoid/persistence/atomic/rename.rb +0 -30
- data/lib/mongoid/persistence/atomic/sets.rb +0 -28
- data/lib/mongoid/persistence/atomic/unset.rb +0 -27
- data/lib/mongoid/persistence/deletion.rb +0 -31
- data/lib/mongoid/persistence/insertion.rb +0 -38
- data/lib/mongoid/persistence/modification.rb +0 -35
- data/lib/mongoid/persistence/operations.rb +0 -214
- data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
- data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
- data/lib/mongoid/persistence/operations/insert.rb +0 -34
- data/lib/mongoid/persistence/operations/remove.rb +0 -33
- data/lib/mongoid/persistence/operations/update.rb +0 -59
- data/lib/mongoid/persistence/operations/upsert.rb +0 -28
- data/lib/mongoid/persistence/upsertion.rb +0 -31
- data/lib/mongoid/unit_of_work.rb +0 -61
- data/lib/mongoid/versioning.rb +0 -217
- data/lib/rack/mongoid.rb +0 -2
- data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
- data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
- data/spec/app/models/actor_observer.rb +0 -15
- data/spec/app/models/callback_recorder.rb +0 -25
- data/spec/app/models/paranoid_phone.rb +0 -25
- data/spec/app/models/paranoid_post.rb +0 -36
- data/spec/app/models/phone_observer.rb +0 -6
- data/spec/mongoid/attributes/processing_spec.rb +0 -149
- data/spec/mongoid/criterion/destructive_spec.rb +0 -101
- data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
- data/spec/mongoid/criterion/modification_spec.rb +0 -402
- data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
- data/spec/mongoid/finders_spec.rb +0 -321
- data/spec/mongoid/identity_map_spec.rb +0 -564
- data/spec/mongoid/json_spec.rb +0 -33
- data/spec/mongoid/matchers/in_spec.rb +0 -25
- data/spec/mongoid/matchers/ne_spec.rb +0 -25
- data/spec/mongoid/matchers/nin_spec.rb +0 -25
- data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
- data/spec/mongoid/observer_spec.rb +0 -290
- data/spec/mongoid/paranoia_spec.rb +0 -759
- data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
- data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
- data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
- data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
- data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
- data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
- data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
- data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
- data/spec/mongoid/persistence/atomic_spec.rb +0 -216
- data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
- data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
- data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
- data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
- data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
- data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
- data/spec/mongoid/persistence/operations_spec.rb +0 -313
- data/spec/mongoid/persistence_spec.rb +0 -2279
- data/spec/mongoid/unit_of_work_spec.rb +0 -196
- data/spec/mongoid/versioning_spec.rb +0 -540
- data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -0,0 +1,31 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :mongoid do
|
3
|
+
task :load_models do
|
4
|
+
end
|
5
|
+
|
6
|
+
desc "Create the indexes defined on your mongoid models"
|
7
|
+
task :create_indexes => [:environment, :load_models] do
|
8
|
+
::Mongoid::Tasks::Database.create_indexes
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Remove indexes that exist in the database but aren't specified on the models"
|
12
|
+
task :remove_undefined_indexes => [:environment, :load_models] do
|
13
|
+
::Mongoid::Tasks::Database.remove_undefined_indexes
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Remove the indexes defined on your mongoid models without questions!"
|
17
|
+
task :remove_indexes => [:environment, :load_models] do
|
18
|
+
::Mongoid::Tasks::Database.remove_indexes
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "Drops the default session"
|
22
|
+
task :drop => :environment do
|
23
|
+
::Mongoid::Sessions.default.drop
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Drop all collections except the system collections"
|
27
|
+
task :purge => :environment do
|
28
|
+
::Mongoid.purge!
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Tasks
|
4
|
+
module Database
|
5
|
+
extend self
|
6
|
+
|
7
|
+
# Create indexes for each model given the provided globs and the class is
|
8
|
+
# not embedded.
|
9
|
+
#
|
10
|
+
# @example Create all the indexes.
|
11
|
+
# Mongoid::Tasks::Database.create_indexes
|
12
|
+
#
|
13
|
+
# @return [ Array<Class> ] The indexed models.
|
14
|
+
#
|
15
|
+
# @since 2.1.0
|
16
|
+
def create_indexes(models = ::Mongoid.models)
|
17
|
+
models.each do |model|
|
18
|
+
next if model.index_specifications.empty?
|
19
|
+
if !model.embedded? || model.cyclic?
|
20
|
+
model.create_indexes
|
21
|
+
logger.info("MONGOID: Created indexes on #{model}:")
|
22
|
+
model.index_specifications.each do |spec|
|
23
|
+
logger.info("MONGOID: Index: #{spec.key}, Options: #{spec.options}")
|
24
|
+
end
|
25
|
+
model
|
26
|
+
else
|
27
|
+
logger.info("MONGOID: Index ignored on: #{model}, please define in the root model.")
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
end.compact
|
31
|
+
end
|
32
|
+
|
33
|
+
# Return the list of indexes by model that exist in the database but aren't
|
34
|
+
# specified on the models.
|
35
|
+
#
|
36
|
+
# @example Return the list of unused indexes.
|
37
|
+
# Mongoid::Tasks::Database.undefined_indexes
|
38
|
+
#
|
39
|
+
# @return Hash{Class => Array(Hash)} The list of undefined indexes by model.
|
40
|
+
def undefined_indexes(models = ::Mongoid.models)
|
41
|
+
undefined_by_model = {}
|
42
|
+
|
43
|
+
models.each do |model|
|
44
|
+
unless model.embedded?
|
45
|
+
model.collection.indexes.each do |index|
|
46
|
+
# ignore default index
|
47
|
+
unless index['name'] == '_id_'
|
48
|
+
key = index['key'].symbolize_keys
|
49
|
+
spec = model.index_specification(key)
|
50
|
+
unless spec
|
51
|
+
# index not specified
|
52
|
+
undefined_by_model[model] ||= []
|
53
|
+
undefined_by_model[model] << index
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
undefined_by_model
|
61
|
+
end
|
62
|
+
|
63
|
+
# Remove indexes that exist in the database but aren't specified on the
|
64
|
+
# models.
|
65
|
+
#
|
66
|
+
# @example Remove undefined indexes.
|
67
|
+
# Mongoid::Tasks::Database.remove_undefined_indexes
|
68
|
+
#
|
69
|
+
# @return [ Hash{Class => Array(Hash)}] The list of indexes that were removed by model.
|
70
|
+
#
|
71
|
+
# @since 4.0.0
|
72
|
+
def remove_undefined_indexes(models = ::Mongoid.models)
|
73
|
+
undefined_indexes(models).each do |model, indexes|
|
74
|
+
indexes.each do |index|
|
75
|
+
key = index['key'].symbolize_keys
|
76
|
+
model.collection.indexes.drop(key)
|
77
|
+
logger.info("MONGOID: Removing index: #{index['name']} on #{model}.")
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Remove indexes for each model given the provided globs and the class is
|
83
|
+
# not embedded.
|
84
|
+
#
|
85
|
+
# @example Remove all the indexes.
|
86
|
+
# Mongoid::Tasks::Database.remove_indexes
|
87
|
+
#
|
88
|
+
# @return [ Array<Class> ] The un-indexed models.
|
89
|
+
#
|
90
|
+
def remove_indexes(models = ::Mongoid.models)
|
91
|
+
models.each do |model|
|
92
|
+
next if model.embedded?
|
93
|
+
indexes = model.collection.indexes.map{ |doc| doc["name"] }
|
94
|
+
indexes.delete_one("_id_")
|
95
|
+
model.remove_indexes
|
96
|
+
logger.info("MONGOID: Removing indexes on: #{model} for: #{indexes.join(', ')}.")
|
97
|
+
model
|
98
|
+
end.compact
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
def logger
|
103
|
+
@logger ||= Logger.new($stdout)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
data/lib/mongoid/threaded.rb
CHANGED
@@ -6,6 +6,17 @@ module Mongoid
|
|
6
6
|
# This module contains logic for easy access to objects that have a lifecycle
|
7
7
|
# on the current thread.
|
8
8
|
module Threaded
|
9
|
+
DATABASE_OVERRIDE_KEY = "[mongoid]:db-override"
|
10
|
+
SESSIONS_KEY = "[mongoid]:sessions"
|
11
|
+
SESSION_OVERRIDE_KEY = "[mongoid]:session-override"
|
12
|
+
SCOPE_STACK_KEY = "[mongoid]:scope-stack"
|
13
|
+
AUTOSAVES_KEY = "[mongoid]:autosaves"
|
14
|
+
VALIDATIONS_KEY = "[mongoid]:validations"
|
15
|
+
|
16
|
+
STACK_KEYS = Hash.new do |hash, key|
|
17
|
+
hash[key] = "[mongoid]:#{key}-stack"
|
18
|
+
end
|
19
|
+
|
9
20
|
extend self
|
10
21
|
|
11
22
|
# Begin entry into a named thread local stack.
|
@@ -31,7 +42,7 @@ module Mongoid
|
|
31
42
|
#
|
32
43
|
# @since 3.0.0
|
33
44
|
def database_override
|
34
|
-
Thread.current[
|
45
|
+
Thread.current[DATABASE_OVERRIDE_KEY]
|
35
46
|
end
|
36
47
|
|
37
48
|
# Set the global database override.
|
@@ -45,7 +56,7 @@ module Mongoid
|
|
45
56
|
#
|
46
57
|
# @since 3.0.0
|
47
58
|
def database_override=(name)
|
48
|
-
Thread.current[
|
59
|
+
Thread.current[DATABASE_OVERRIDE_KEY] = name
|
49
60
|
end
|
50
61
|
|
51
62
|
# Get the database sessions from the current thread.
|
@@ -57,7 +68,7 @@ module Mongoid
|
|
57
68
|
#
|
58
69
|
# @since 3.0.0
|
59
70
|
def sessions
|
60
|
-
Thread.current[
|
71
|
+
Thread.current[SESSIONS_KEY] ||= {}
|
61
72
|
end
|
62
73
|
|
63
74
|
# Are in the middle of executing the named stack
|
@@ -99,7 +110,7 @@ module Mongoid
|
|
99
110
|
#
|
100
111
|
# @since 2.4.0
|
101
112
|
def stack(name)
|
102
|
-
Thread.current[
|
113
|
+
Thread.current[STACK_KEYS[name]] ||= []
|
103
114
|
end
|
104
115
|
|
105
116
|
# Begin autosaving a document on the current thread.
|
@@ -111,7 +122,7 @@ module Mongoid
|
|
111
122
|
#
|
112
123
|
# @since 3.0.0
|
113
124
|
def begin_autosave(document)
|
114
|
-
autosaves_for(document.class).push(document.
|
125
|
+
autosaves_for(document.class).push(document._id)
|
115
126
|
end
|
116
127
|
|
117
128
|
# Begin validating a document on the current thread.
|
@@ -123,22 +134,7 @@ module Mongoid
|
|
123
134
|
#
|
124
135
|
# @since 2.1.9
|
125
136
|
def begin_validate(document)
|
126
|
-
validations_for(document.class).push(document.
|
127
|
-
end
|
128
|
-
|
129
|
-
# Clear out all the persistence options.
|
130
|
-
#
|
131
|
-
# @example Clear out the persistence options.
|
132
|
-
# Threaded.clear_persistence_options(Band)
|
133
|
-
#
|
134
|
-
# @param [ Class ] klass The model class.
|
135
|
-
#
|
136
|
-
# @return [ true ] true.
|
137
|
-
#
|
138
|
-
# @since 2.0.0
|
139
|
-
def clear_persistence_options(klass)
|
140
|
-
Thread.current["[mongoid][#{klass}]:persistence-options"] = nil
|
141
|
-
true
|
137
|
+
validations_for(document.class).push(document._id)
|
142
138
|
end
|
143
139
|
|
144
140
|
# Exit autosaving a document on the current thread.
|
@@ -150,7 +146,7 @@ module Mongoid
|
|
150
146
|
#
|
151
147
|
# @since 3.0.0
|
152
148
|
def exit_autosave(document)
|
153
|
-
autosaves_for(document.class).delete_one(document.
|
149
|
+
autosaves_for(document.class).delete_one(document._id)
|
154
150
|
end
|
155
151
|
|
156
152
|
# Exit validating a document on the current thread.
|
@@ -162,149 +158,7 @@ module Mongoid
|
|
162
158
|
#
|
163
159
|
# @since 2.1.9
|
164
160
|
def exit_validate(document)
|
165
|
-
validations_for(document.class).delete_one(document.
|
166
|
-
end
|
167
|
-
|
168
|
-
# Get the identity map off the current thread.
|
169
|
-
#
|
170
|
-
# @example Get the identity map.
|
171
|
-
# Threaded.identity_map
|
172
|
-
#
|
173
|
-
# @return [ IdentityMap ] The identity map.
|
174
|
-
#
|
175
|
-
# @since 2.1.0
|
176
|
-
def identity_map
|
177
|
-
Thread.current["[mongoid]:identity-map"] ||= IdentityMap.new
|
178
|
-
end
|
179
|
-
|
180
|
-
# Is the identity map enabled on the current thread?
|
181
|
-
#
|
182
|
-
# @example Is the identity map enabled?
|
183
|
-
# Threaded.identity_map_enabled?
|
184
|
-
#
|
185
|
-
# @return [ true, false ] If the identity map is enabled.
|
186
|
-
#
|
187
|
-
# @since 3.0.0
|
188
|
-
def identity_map_enabled?
|
189
|
-
Thread.current["[mongoid]:identity-map-enabled"] != false
|
190
|
-
end
|
191
|
-
|
192
|
-
# Disable the identity map on either the current thread or all threads.
|
193
|
-
#
|
194
|
-
# @example Disable the identity map on all threads.
|
195
|
-
# Threaded.disable_identity_map(:all)
|
196
|
-
#
|
197
|
-
# @example Disable the identity map on the current thread.
|
198
|
-
# Threaded.disable_identity_map(:current)
|
199
|
-
#
|
200
|
-
# @param [ Symbol ] option The disabling option.
|
201
|
-
#
|
202
|
-
# @since 3.0.0
|
203
|
-
def disable_identity_map(option)
|
204
|
-
if option == :all
|
205
|
-
Thread.list.each do |thread|
|
206
|
-
thread["[mongoid]:identity-map-enabled"] = false
|
207
|
-
end
|
208
|
-
else
|
209
|
-
Thread.current["[mongoid]:identity-map-enabled"] = false
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
# Enable the identity map on either the current thread or all threads.
|
214
|
-
#
|
215
|
-
# @example Enable the identity map on all threads.
|
216
|
-
# Threaded.enable_identity_map(:all)
|
217
|
-
#
|
218
|
-
# @example Enable the identity map on the current thread.
|
219
|
-
# Threaded.enable_identity_map(:current)
|
220
|
-
#
|
221
|
-
# @param [ Symbol ] option The disabling option.
|
222
|
-
#
|
223
|
-
# @since 3.0.0
|
224
|
-
def enable_identity_map(option)
|
225
|
-
if option == :all
|
226
|
-
Thread.list.each do |thread|
|
227
|
-
thread["[mongoid]:identity-map-enabled"] = true
|
228
|
-
end
|
229
|
-
else
|
230
|
-
Thread.current["[mongoid]:identity-map-enabled"] = true
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
# Get the persistence options for the current thread.
|
235
|
-
#
|
236
|
-
# @example Get the persistence options.
|
237
|
-
# Threaded.persistence_options(Band)
|
238
|
-
#
|
239
|
-
# @param [ Class ] klass The model class.
|
240
|
-
#
|
241
|
-
# @return [ Hash ] The current persistence options.
|
242
|
-
#
|
243
|
-
# @since 2.1.0
|
244
|
-
def persistence_options(klass)
|
245
|
-
Thread.current["[mongoid][#{klass}]:persistence-options"]
|
246
|
-
end
|
247
|
-
|
248
|
-
# Set the persistence options on the current thread.
|
249
|
-
#
|
250
|
-
# @example Set the persistence options.
|
251
|
-
# Threaded.set_persistence_options(Band, { safe: { fsync: true }})
|
252
|
-
#
|
253
|
-
# @param [ Class ] klass The model class.
|
254
|
-
# @param [ Hash ] options The persistence options.
|
255
|
-
#
|
256
|
-
# @return [ Hash ] The persistence options.
|
257
|
-
#
|
258
|
-
# @since 2.1.0
|
259
|
-
def set_persistence_options(klass, options)
|
260
|
-
Thread.current["[mongoid][#{klass}]:persistence-options"] = options
|
261
|
-
end
|
262
|
-
|
263
|
-
# Get the field selection options from the current thread.
|
264
|
-
#
|
265
|
-
# @example Get the field selection options.
|
266
|
-
# Threaded.selection
|
267
|
-
#
|
268
|
-
# @param [ Integer ] criteria_instance_id The criteria instance id.
|
269
|
-
#
|
270
|
-
# @return [ Hash ] The field selection.
|
271
|
-
#
|
272
|
-
# @since 2.4.4
|
273
|
-
def selection(criteria_instance_id)
|
274
|
-
selections = Thread.current["[mongoid][selections]"]
|
275
|
-
selections[criteria_instance_id] if selections
|
276
|
-
end
|
277
|
-
|
278
|
-
# Set the field selection on the current thread.
|
279
|
-
#
|
280
|
-
# @example Set the field selection.
|
281
|
-
# Threaded.set_selection(Person, { field: 1 })
|
282
|
-
#
|
283
|
-
# @param [ Integer ] criteria_instance_id The criteria instance id.
|
284
|
-
# @param [ Hash ] value The current field selection.
|
285
|
-
#
|
286
|
-
# @return [ Hash ] The field selection.
|
287
|
-
#
|
288
|
-
# @since 2.4.4
|
289
|
-
def set_selection(criteria_instance_id, value)
|
290
|
-
Thread.current["[mongoid][selections]"] ||= {}
|
291
|
-
Thread.current["[mongoid][selections]"][criteria_instance_id] = value
|
292
|
-
end
|
293
|
-
|
294
|
-
# Delete the field selection on the current thread.
|
295
|
-
#
|
296
|
-
# @example Delete the field selection.
|
297
|
-
# Threaded.delete_selection(Person)
|
298
|
-
#
|
299
|
-
# @param [ Integer ] criteria_instance_id The criteria instance id.
|
300
|
-
#
|
301
|
-
# @return [ Boolean ] Whether there was a field selection.
|
302
|
-
#
|
303
|
-
# @since 3.0.7
|
304
|
-
def delete_selection(criteria_instance_id)
|
305
|
-
selections = Thread.current["[mongoid][selections]"]
|
306
|
-
return false unless selections
|
307
|
-
!!selections.delete(criteria_instance_id)
|
161
|
+
validations_for(document.class).delete_one(document._id)
|
308
162
|
end
|
309
163
|
|
310
164
|
# Get the global session override.
|
@@ -316,7 +170,7 @@ module Mongoid
|
|
316
170
|
#
|
317
171
|
# @since 3.0.0
|
318
172
|
def session_override
|
319
|
-
Thread.current[
|
173
|
+
Thread.current[SESSION_OVERRIDE_KEY]
|
320
174
|
end
|
321
175
|
|
322
176
|
# Set the global session override.
|
@@ -330,7 +184,7 @@ module Mongoid
|
|
330
184
|
#
|
331
185
|
# @since 3.0.0
|
332
186
|
def session_override=(name)
|
333
|
-
Thread.current[
|
187
|
+
Thread.current[SESSION_OVERRIDE_KEY] = name
|
334
188
|
end
|
335
189
|
|
336
190
|
# Get the mongoid scope stack for chained criteria.
|
@@ -342,7 +196,7 @@ module Mongoid
|
|
342
196
|
#
|
343
197
|
# @since 2.1.0
|
344
198
|
def scope_stack
|
345
|
-
Thread.current[
|
199
|
+
Thread.current[SCOPE_STACK_KEY] ||= {}
|
346
200
|
end
|
347
201
|
|
348
202
|
# Is the document autosaved on the current thread?
|
@@ -356,7 +210,7 @@ module Mongoid
|
|
356
210
|
#
|
357
211
|
# @since 2.1.9
|
358
212
|
def autosaved?(document)
|
359
|
-
autosaves_for(document.class).include?(document.
|
213
|
+
autosaves_for(document.class).include?(document._id)
|
360
214
|
end
|
361
215
|
|
362
216
|
# Is the document validated on the current thread?
|
@@ -370,7 +224,7 @@ module Mongoid
|
|
370
224
|
#
|
371
225
|
# @since 2.1.9
|
372
226
|
def validated?(document)
|
373
|
-
validations_for(document.class).include?(document.
|
227
|
+
validations_for(document.class).include?(document._id)
|
374
228
|
end
|
375
229
|
|
376
230
|
# Get all autosaves on the current thread.
|
@@ -382,7 +236,7 @@ module Mongoid
|
|
382
236
|
#
|
383
237
|
# @since 3.0.0
|
384
238
|
def autosaves
|
385
|
-
Thread.current[
|
239
|
+
Thread.current[AUTOSAVES_KEY] ||= {}
|
386
240
|
end
|
387
241
|
|
388
242
|
# Get all validations on the current thread.
|
@@ -394,7 +248,7 @@ module Mongoid
|
|
394
248
|
#
|
395
249
|
# @since 2.1.9
|
396
250
|
def validations
|
397
|
-
Thread.current[
|
251
|
+
Thread.current[VALIDATIONS_KEY] ||= {}
|
398
252
|
end
|
399
253
|
|
400
254
|
# Get all autosaves on the current thread for the class.
|
@@ -139,23 +139,6 @@ module Mongoid
|
|
139
139
|
Threaded.executing?("load")
|
140
140
|
end
|
141
141
|
|
142
|
-
# Execute a block in loading revision mode.
|
143
|
-
#
|
144
|
-
# @example Execute in loading revision mode.
|
145
|
-
# _loading_revision do
|
146
|
-
# load_revision
|
147
|
-
# end
|
148
|
-
#
|
149
|
-
# @return [ Object ] The return value of the block.
|
150
|
-
#
|
151
|
-
# @since 2.3.4
|
152
|
-
def _loading_revision
|
153
|
-
Threaded.begin_execution("load_revision")
|
154
|
-
yield
|
155
|
-
ensure
|
156
|
-
Threaded.exit_execution("load_revision")
|
157
|
-
end
|
158
|
-
|
159
142
|
module ClassMethods
|
160
143
|
|
161
144
|
# Execute a block in creating mode.
|
@@ -175,17 +158,6 @@ module Mongoid
|
|
175
158
|
Threaded.exit_execution("create")
|
176
159
|
end
|
177
160
|
|
178
|
-
# Is the current thread in loading revision mode?
|
179
|
-
#
|
180
|
-
# @example Is the current thread in loading revision mode?
|
181
|
-
# proxy._loading_revision?
|
182
|
-
#
|
183
|
-
# @return [ true, false ] If the thread is loading a revision.
|
184
|
-
#
|
185
|
-
# @since 2.3.4
|
186
|
-
def _loading_revision?
|
187
|
-
Threaded.executing?("load_revision")
|
188
|
-
end
|
189
161
|
end
|
190
162
|
end
|
191
163
|
end
|