mongoid 3.1.7 → 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 +470 -9
- data/README.md +10 -7
- data/lib/config/locales/en.yml +34 -20
- 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/embedded.rb +0 -30
- data/lib/mongoid/atomic/paths/root.rb +0 -13
- data/lib/mongoid/atomic.rb +3 -14
- 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/attributes.rb +63 -99
- data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
- data/lib/mongoid/composable.rb +105 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config.rb +3 -9
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -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/contextual.rb +2 -0
- data/lib/mongoid/copyable.rb +2 -3
- 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/criteria.rb +39 -34
- data/lib/mongoid/document.rb +39 -24
- 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/errors.rb +4 -1
- 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/extensions.rb +15 -7
- data/lib/mongoid/factory.rb +8 -6
- 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/fields.rb +41 -8
- data/lib/mongoid/{finders.rb → findable.rb} +35 -7
- data/lib/mongoid/indexable/specification.rb +104 -0
- data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
- data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
- 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/{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/matchable.rb +152 -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/persistable.rb +216 -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/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/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/builders.rb +2 -2
- 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/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/eager.rb +46 -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/relations.rb +11 -25
- 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/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/sessions.rb +37 -345
- 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/lifecycle.rb +0 -28
- data/lib/mongoid/threaded.rb +26 -172
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
- 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/{validations.rb → validatable.rb} +23 -10
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid.rb +10 -76
- 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/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/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 +334 -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 +46 -38
- data/spec/mongoid/contextual/atomic_spec.rb +59 -55
- 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 +713 -2419
- 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/{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 +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} +9 -9
- 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 -350
- data/spec/spec_helper.rb +26 -15
- metadata +262 -247
- 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/strategies.rb +0 -97
- data/lib/mongoid/matchers.rb +0 -32
- 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/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/atomic.rb +0 -231
- 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/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/operations.rb +0 -214
- data/lib/mongoid/persistence/upsertion.rb +0 -31
- data/lib/mongoid/persistence.rb +0 -357
- data/lib/mongoid/unit_of_work.rb +0 -61
- data/lib/mongoid/versioning.rb +0 -217
- data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
- data/lib/rack/mongoid.rb +0 -2
- 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/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
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.
|
|
@@ -3,8 +3,8 @@ module Mongoid
|
|
|
3
3
|
module Timestamps
|
|
4
4
|
module Updated
|
|
5
5
|
|
|
6
|
-
# Adds
|
|
7
|
-
# with
|
|
6
|
+
# Adds an updated_at timestamp to the document, but it is stored as u_at
|
|
7
|
+
# with an updated_at alias.
|
|
8
8
|
module Short
|
|
9
9
|
extend ActiveSupport::Concern
|
|
10
10
|
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
module Mongoid
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
# Provides behaviour around traversing the document graph.
|
|
5
|
+
#
|
|
6
|
+
# @since 4.0.0
|
|
7
|
+
module Traversable
|
|
4
8
|
extend ActiveSupport::Concern
|
|
5
9
|
|
|
6
|
-
|
|
7
|
-
|
|
10
|
+
def _parent
|
|
11
|
+
@__parent
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def _parent=(p)
|
|
15
|
+
@__parent = p
|
|
8
16
|
end
|
|
9
17
|
|
|
10
18
|
# Get all child +Documents+ to this +Document+, going n levels deep if
|
|
@@ -19,7 +27,7 @@ module Mongoid
|
|
|
19
27
|
#
|
|
20
28
|
# @return [ Array<Document> ] All child documents in the hierarchy.
|
|
21
29
|
def _children
|
|
22
|
-
@
|
|
30
|
+
@__children ||= collect_children
|
|
23
31
|
end
|
|
24
32
|
|
|
25
33
|
# Collect all the children of this document.
|
|
@@ -37,7 +45,7 @@ module Mongoid
|
|
|
37
45
|
child = send(name)
|
|
38
46
|
Array.wrap(child).each do |doc|
|
|
39
47
|
children.push(doc)
|
|
40
|
-
children.concat(doc._children)
|
|
48
|
+
children.concat(doc._children)
|
|
41
49
|
end if child
|
|
42
50
|
end
|
|
43
51
|
end
|
|
@@ -116,6 +124,7 @@ module Mongoid
|
|
|
116
124
|
child.move_changes
|
|
117
125
|
child.new_record = false
|
|
118
126
|
end
|
|
127
|
+
@__children = nil
|
|
119
128
|
end
|
|
120
129
|
|
|
121
130
|
# Return the root document in the object graph. If the current document
|
|
@@ -174,7 +183,6 @@ module Mongoid
|
|
|
174
183
|
subclass.pre_processed_defaults = pre_processed_defaults.dup
|
|
175
184
|
subclass.post_processed_defaults = post_processed_defaults.dup
|
|
176
185
|
subclass._declared_scopes = Hash.new { |hash,key| self._declared_scopes[key] }
|
|
177
|
-
subclass.autosaved_relations = autosaved_relations.dup
|
|
178
186
|
|
|
179
187
|
# We only need the _type field if inheritance is in play, but need to
|
|
180
188
|
# add to the root class as well for backwards compatibility.
|
|
@@ -182,7 +190,7 @@ module Mongoid
|
|
|
182
190
|
field(:_type, default: self.name, type: String)
|
|
183
191
|
end
|
|
184
192
|
subclass_default = subclass.name || ->{ self.class.name }
|
|
185
|
-
subclass.field(:_type, default: subclass_default, type: String)
|
|
193
|
+
subclass.field(:_type, default: subclass_default, type: String, overwrite: true)
|
|
186
194
|
end
|
|
187
195
|
end
|
|
188
196
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
module Mongoid
|
|
3
|
-
module
|
|
3
|
+
module Validatable
|
|
4
4
|
|
|
5
5
|
# Validates whether or not an association is valid or not. Will correctly
|
|
6
6
|
# handle has one and has many associations.
|
|
@@ -26,11 +26,13 @@ module Mongoid
|
|
|
26
26
|
# @param [ Document ] document The document to validate.
|
|
27
27
|
# @param [ Symbol ] attribute The relation to validate.
|
|
28
28
|
# @param [ Object ] value The value of the relation.
|
|
29
|
+
#
|
|
30
|
+
# @since 2.0.0
|
|
29
31
|
def validate_each(document, attribute, value)
|
|
30
32
|
begin
|
|
31
33
|
document.begin_validate
|
|
32
34
|
valid = Array.wrap(value).collect do |doc|
|
|
33
|
-
if doc.nil?
|
|
35
|
+
if doc.nil? || doc.flagged_for_destroy?
|
|
34
36
|
true
|
|
35
37
|
else
|
|
36
38
|
doc.validated? ? true : doc.valid?
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
1
2
|
module Mongoid
|
|
2
|
-
module
|
|
3
|
+
module Validatable
|
|
3
4
|
module Macros
|
|
4
5
|
extend ActiveSupport::Concern
|
|
5
6
|
|
|
@@ -52,7 +53,7 @@ module Mongoid
|
|
|
52
53
|
#
|
|
53
54
|
# @since 2.4.0
|
|
54
55
|
def validates_format_of(*args)
|
|
55
|
-
validates_with(
|
|
56
|
+
validates_with(FormatValidator, _merge_attributes(args))
|
|
56
57
|
end
|
|
57
58
|
|
|
58
59
|
# Validates the length of a field.
|
|
@@ -69,7 +70,7 @@ module Mongoid
|
|
|
69
70
|
#
|
|
70
71
|
# @since 2.4.0
|
|
71
72
|
def validates_length_of(*args)
|
|
72
|
-
validates_with(
|
|
73
|
+
validates_with(LengthValidator, _merge_attributes(args))
|
|
73
74
|
end
|
|
74
75
|
|
|
75
76
|
# Validates whether or not a field is present - meaning nil or empty.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
module Mongoid
|
|
3
|
-
module
|
|
3
|
+
module Validatable
|
|
4
4
|
module Queryable
|
|
5
5
|
|
|
6
6
|
# Wrap the validation inside the an execution block that alert's the
|
|
@@ -22,7 +22,6 @@ module Mongoid
|
|
|
22
22
|
Threaded.begin_execution("#{klass.name}-validate-with-query")
|
|
23
23
|
yield
|
|
24
24
|
ensure
|
|
25
|
-
klass.clear_persistence_options unless document.errors.empty?
|
|
26
25
|
Threaded.exit_execution("#{klass.name}-validate-with-query")
|
|
27
26
|
end
|
|
28
27
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
module Mongoid
|
|
3
|
-
module
|
|
3
|
+
module Validatable
|
|
4
4
|
|
|
5
5
|
# Validates whether or not a field is unique against the documents in the
|
|
6
6
|
# database.
|
|
@@ -13,23 +13,19 @@ module Mongoid
|
|
|
13
13
|
#
|
|
14
14
|
# validates_uniqueness_of :title
|
|
15
15
|
# end
|
|
16
|
+
#
|
|
17
|
+
# It is also possible to limit the uniqueness constraint to a set of
|
|
18
|
+
# records matching certain conditions:
|
|
19
|
+
# class Person
|
|
20
|
+
# include Mongoid::Document
|
|
21
|
+
# field :title
|
|
22
|
+
# field :active, type: Boolean
|
|
23
|
+
#
|
|
24
|
+
# validates_uniqueness_of :title, conditions: -> {where(active: true)}
|
|
25
|
+
# end
|
|
16
26
|
class UniquenessValidator < ActiveModel::EachValidator
|
|
17
27
|
include Queryable
|
|
18
28
|
|
|
19
|
-
attr_reader :klass
|
|
20
|
-
|
|
21
|
-
# Unfortunately, we have to tie Uniqueness validators to a class.
|
|
22
|
-
#
|
|
23
|
-
# @example Setup the validator.
|
|
24
|
-
# UniquenessValidator.new.setup(Person)
|
|
25
|
-
#
|
|
26
|
-
# @param [ Class ] klass The class getting validated.
|
|
27
|
-
#
|
|
28
|
-
# @since 1.0.0
|
|
29
|
-
def setup(klass)
|
|
30
|
-
@klass = klass
|
|
31
|
-
end
|
|
32
|
-
|
|
33
29
|
# Validate the document for uniqueness violations.
|
|
34
30
|
#
|
|
35
31
|
# @example Validate the document.
|
|
@@ -134,7 +130,7 @@ module Mongoid
|
|
|
134
130
|
end
|
|
135
131
|
|
|
136
132
|
if document.persisted? && !document.embedded?
|
|
137
|
-
selector.merge!(_id: { "$ne" => document.
|
|
133
|
+
selector.merge!(_id: { "$ne" => document._id })
|
|
138
134
|
end
|
|
139
135
|
selector
|
|
140
136
|
end
|
|
@@ -168,12 +164,12 @@ module Mongoid
|
|
|
168
164
|
# @return [ Criteria ] The scoped criteria.
|
|
169
165
|
#
|
|
170
166
|
# @since 2.3.0
|
|
171
|
-
def scope(criteria, document,
|
|
167
|
+
def scope(criteria, document, _attribute)
|
|
172
168
|
Array.wrap(options[:scope]).each do |item|
|
|
173
169
|
name = document.database_field_name(item)
|
|
174
170
|
criteria = criteria.where(item => document.attributes[name])
|
|
175
171
|
end
|
|
176
|
-
criteria = criteria.
|
|
172
|
+
criteria = criteria.with(document.persistence_options)
|
|
177
173
|
criteria
|
|
178
174
|
end
|
|
179
175
|
|
|
@@ -231,7 +227,7 @@ module Mongoid
|
|
|
231
227
|
def to_validate(document, attribute, value)
|
|
232
228
|
metadata = document.relations[attribute.to_s]
|
|
233
229
|
if metadata && metadata.stores_foreign_key?
|
|
234
|
-
[ metadata.foreign_key, value.
|
|
230
|
+
[ metadata.foreign_key, value && value._id ]
|
|
235
231
|
else
|
|
236
232
|
[ attribute, value ]
|
|
237
233
|
end
|
|
@@ -253,6 +249,7 @@ module Mongoid
|
|
|
253
249
|
return if skip_validation?(document)
|
|
254
250
|
relation = document._parent.send(document.metadata_name)
|
|
255
251
|
criteria = create_criteria(relation, document, attribute, value)
|
|
252
|
+
criteria = criteria.merge(options[:conditions].call) if options[:conditions]
|
|
256
253
|
add_error(document, attribute, value) if criteria.count > 1
|
|
257
254
|
end
|
|
258
255
|
|
|
@@ -269,7 +266,14 @@ module Mongoid
|
|
|
269
266
|
#
|
|
270
267
|
# @since 2.4.10
|
|
271
268
|
def validate_root(document, attribute, value)
|
|
272
|
-
|
|
269
|
+
klass = document.class
|
|
270
|
+
|
|
271
|
+
while klass.superclass.respond_to?(:validators) && klass.superclass.validators.include?(self)
|
|
272
|
+
klass = klass.superclass
|
|
273
|
+
end
|
|
274
|
+
criteria = create_criteria(klass, document, attribute, value)
|
|
275
|
+
criteria = criteria.merge(options[:conditions].call) if options[:conditions]
|
|
276
|
+
|
|
273
277
|
if criteria.with(persistence_options(criteria)).exists?
|
|
274
278
|
add_error(document, attribute, value)
|
|
275
279
|
end
|
|
@@ -306,7 +310,7 @@ module Mongoid
|
|
|
306
310
|
#
|
|
307
311
|
# @since 3.0.23
|
|
308
312
|
def persistence_options(criteria)
|
|
309
|
-
(criteria.
|
|
313
|
+
(criteria.persistence_options || {}).merge!(read: :primary)
|
|
310
314
|
end
|
|
311
315
|
|
|
312
316
|
# Is the attribute localized?
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
require "mongoid/
|
|
3
|
-
require "mongoid/
|
|
4
|
-
require "mongoid/
|
|
5
|
-
require "mongoid/
|
|
6
|
-
require "mongoid/
|
|
7
|
-
require "mongoid/
|
|
8
|
-
require "mongoid/
|
|
9
|
-
require "mongoid/
|
|
2
|
+
require "mongoid/validatable/macros"
|
|
3
|
+
require "mongoid/validatable/localizable"
|
|
4
|
+
require "mongoid/validatable/associated"
|
|
5
|
+
require "mongoid/validatable/format"
|
|
6
|
+
require "mongoid/validatable/length"
|
|
7
|
+
require "mongoid/validatable/queryable"
|
|
8
|
+
require "mongoid/validatable/presence"
|
|
9
|
+
require "mongoid/validatable/uniqueness"
|
|
10
10
|
|
|
11
11
|
module Mongoid
|
|
12
12
|
|
|
13
13
|
# This module provides additional validations that ActiveModel does not
|
|
14
14
|
# provide: validates_associated and validates_uniqueness_of.
|
|
15
|
-
module
|
|
15
|
+
module Validatable
|
|
16
16
|
extend ActiveSupport::Concern
|
|
17
|
-
include ActiveModel::Validations
|
|
18
17
|
|
|
19
18
|
included do
|
|
20
19
|
extend Macros
|
|
@@ -41,6 +40,20 @@ module Mongoid
|
|
|
41
40
|
Threaded.exit_validate(self)
|
|
42
41
|
end
|
|
43
42
|
|
|
43
|
+
# Given the provided options, are we performing validations?
|
|
44
|
+
#
|
|
45
|
+
# @example Are we performing validations?
|
|
46
|
+
# document.performing_validations?(validate: true)
|
|
47
|
+
#
|
|
48
|
+
# @param [ Hash ] options The options to check.
|
|
49
|
+
#
|
|
50
|
+
# @return [ true, false ] If we are validating.
|
|
51
|
+
#
|
|
52
|
+
# @since 4.0.0
|
|
53
|
+
def performing_validations?(options = {})
|
|
54
|
+
options[:validate].nil? ? true : options[:validate]
|
|
55
|
+
end
|
|
56
|
+
|
|
44
57
|
# Overrides the default ActiveModel behaviour since we need to handle
|
|
45
58
|
# validations of relations slightly different than just calling the
|
|
46
59
|
# getter.
|
data/lib/mongoid/version.rb
CHANGED