mongoid 3.1.6 → 4.0.0
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 +432 -8
- data/README.md +5 -6
- data/lib/config/locales/en.yml +32 -18
- 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 +1 -12
- 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 -101
- 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/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 +18 -6
- data/lib/mongoid/contextual/mongo.rb +64 -56
- 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 +32 -17
- 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 +2 -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} +8 -2
- 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 +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/matchable.rb +152 -0
- data/lib/mongoid/persistable/creatable.rb +188 -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 +152 -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 +247 -0
- data/lib/mongoid/railtie.rb +32 -45
- data/lib/mongoid/railties/database.rake +9 -25
- data/lib/mongoid/relations/accessors.rb +13 -49
- data/lib/mongoid/relations/auto_save.rb +15 -36
- data/lib/mongoid/relations/binding.rb +1 -24
- 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 +3 -1
- data/lib/mongoid/relations/builder.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
- data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
- data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
- data/lib/mongoid/relations/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 +30 -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/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 +19 -32
- data/lib/mongoid/relations/referenced/many_to_many.rb +15 -38
- data/lib/mongoid/relations/referenced/one.rb +6 -25
- data/lib/mongoid/relations/synchronization.rb +3 -3
- data/lib/mongoid/relations/touchable.rb +34 -1
- data/lib/mongoid/relations.rb +11 -25
- data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
- 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 +180 -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 +0 -157
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
- 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 +23 -19
- 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 +13 -24
- 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/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/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} +335 -448
- data/spec/mongoid/attributes/readonly_spec.rb +58 -18
- data/spec/mongoid/attributes_spec.rb +315 -436
- 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 +68 -58
- 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 +151 -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 +1255 -0
- data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
- data/spec/mongoid/criteria_spec.rb +578 -2295
- data/spec/mongoid/document_spec.rb +166 -120
- data/spec/mongoid/equality_spec.rb +22 -22
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
- data/spec/mongoid/errors/callback_spec.rb +3 -3
- data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
- data/spec/mongoid/errors/document_not_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 +15 -0
- data/spec/mongoid/factory_spec.rb +15 -15
- data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
- data/spec/mongoid/fields/localized_spec.rb +38 -23
- data/spec/mongoid/fields/standard_spec.rb +12 -12
- data/spec/mongoid/fields_spec.rb +263 -217
- data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +127 -27
- data/spec/mongoid/indexable/specification_spec.rb +102 -0
- data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
- data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
- data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +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 +512 -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 +461 -0
- data/spec/mongoid/persistable/settable_spec.rb +139 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
- data/spec/mongoid/persistable/updatable_spec.rb +558 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
- data/spec/mongoid/persistable_spec.rb +206 -0
- data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +9 -9
- data/spec/mongoid/query_cache_spec.rb +231 -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 +393 -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 +434 -527
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +352 -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} +20 -60
- 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 +107 -0
- data/spec/mongoid/sessions_spec.rb +289 -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 +29 -13
- metadata +296 -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/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/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
data/lib/mongoid/threaded.rb
CHANGED
|
@@ -126,21 +126,6 @@ module Mongoid
|
|
|
126
126
|
validations_for(document.class).push(document.id)
|
|
127
127
|
end
|
|
128
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
|
|
142
|
-
end
|
|
143
|
-
|
|
144
129
|
# Exit autosaving a document on the current thread.
|
|
145
130
|
#
|
|
146
131
|
# @example Exit autosave.
|
|
@@ -165,148 +150,6 @@ module Mongoid
|
|
|
165
150
|
validations_for(document.class).delete_one(document.id)
|
|
166
151
|
end
|
|
167
152
|
|
|
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)
|
|
308
|
-
end
|
|
309
|
-
|
|
310
153
|
# Get the global session override.
|
|
311
154
|
#
|
|
312
155
|
# @example Get the global session override.
|
|
@@ -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,6 +1,10 @@
|
|
|
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
10
|
included do
|
|
@@ -19,7 +23,7 @@ module Mongoid
|
|
|
19
23
|
#
|
|
20
24
|
# @return [ Array<Document> ] All child documents in the hierarchy.
|
|
21
25
|
def _children
|
|
22
|
-
@
|
|
26
|
+
@__children ||= collect_children
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
# Collect all the children of this document.
|
|
@@ -37,7 +41,7 @@ module Mongoid
|
|
|
37
41
|
child = send(name)
|
|
38
42
|
Array.wrap(child).each do |doc|
|
|
39
43
|
children.push(doc)
|
|
40
|
-
children.concat(doc._children)
|
|
44
|
+
children.concat(doc._children)
|
|
41
45
|
end if child
|
|
42
46
|
end
|
|
43
47
|
end
|
|
@@ -116,6 +120,7 @@ module Mongoid
|
|
|
116
120
|
child.move_changes
|
|
117
121
|
child.new_record = false
|
|
118
122
|
end
|
|
123
|
+
@__children = nil
|
|
119
124
|
end
|
|
120
125
|
|
|
121
126
|
# Return the root document in the object graph. If the current document
|
|
@@ -174,7 +179,6 @@ module Mongoid
|
|
|
174
179
|
subclass.pre_processed_defaults = pre_processed_defaults.dup
|
|
175
180
|
subclass.post_processed_defaults = post_processed_defaults.dup
|
|
176
181
|
subclass._declared_scopes = Hash.new { |hash,key| self._declared_scopes[key] }
|
|
177
|
-
subclass.autosaved_relations = autosaved_relations.dup
|
|
178
182
|
|
|
179
183
|
# We only need the _type field if inheritance is in play, but need to
|
|
180
184
|
# add to the root class as well for backwards compatibility.
|
|
@@ -182,7 +186,7 @@ module Mongoid
|
|
|
182
186
|
field(:_type, default: self.name, type: String)
|
|
183
187
|
end
|
|
184
188
|
subclass_default = subclass.name || ->{ self.class.name }
|
|
185
|
-
subclass.field(:_type, default: subclass_default, type: String)
|
|
189
|
+
subclass.field(:_type, default: subclass_default, type: String, overwrite: true)
|
|
186
190
|
end
|
|
187
191
|
end
|
|
188
192
|
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.
|
|
@@ -173,7 +169,7 @@ module Mongoid
|
|
|
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.id ]
|
|
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
data/lib/mongoid.rb
CHANGED
|
@@ -1,34 +1,13 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
# Copyright (c) 2009 - 2011 Durran Jordan and friends.
|
|
4
|
-
#
|
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
-
# a copy of this software and associated documentation files (the
|
|
7
|
-
# "Software"), to deal in the Software without restriction, including
|
|
8
|
-
# without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
-
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
-
# permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
-
# the following conditions:
|
|
12
|
-
#
|
|
13
|
-
# The above copyright notice and this permission notice shall be
|
|
14
|
-
# included in all copies or substantial portions of the Software.
|
|
15
|
-
#
|
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
20
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
21
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
22
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
-
|
|
24
|
-
require 'support/ruby_version'
|
|
2
|
+
require "support/ruby_version"
|
|
25
3
|
|
|
26
4
|
require "delegate"
|
|
27
5
|
require "time"
|
|
28
6
|
require "set"
|
|
29
7
|
|
|
8
|
+
require "active_support"
|
|
30
9
|
require "active_support/core_ext"
|
|
31
|
-
require
|
|
10
|
+
require "active_support/json"
|
|
32
11
|
require "active_support/inflector"
|
|
33
12
|
require "active_support/time_with_zone"
|
|
34
13
|
require "active_model"
|
|
@@ -36,49 +15,14 @@ require "active_model"
|
|
|
36
15
|
require "origin"
|
|
37
16
|
require "moped"
|
|
38
17
|
|
|
39
|
-
require "mongoid/
|
|
40
|
-
require "mongoid/evolvable"
|
|
41
|
-
require "mongoid/extensions"
|
|
42
|
-
require "mongoid/errors"
|
|
43
|
-
require "mongoid/threaded"
|
|
44
|
-
require "mongoid/relations"
|
|
45
|
-
require "mongoid/atomic"
|
|
46
|
-
require "mongoid/attributes"
|
|
47
|
-
require "mongoid/callbacks"
|
|
18
|
+
require "mongoid/version"
|
|
48
19
|
require "mongoid/config"
|
|
49
|
-
require "mongoid/contextual"
|
|
50
|
-
require "mongoid/copyable"
|
|
51
|
-
require "mongoid/equality"
|
|
52
|
-
require "mongoid/criteria"
|
|
53
|
-
require "mongoid/dirty"
|
|
54
|
-
require "mongoid/factory"
|
|
55
|
-
require "mongoid/fields"
|
|
56
|
-
require "mongoid/finders"
|
|
57
|
-
require "mongoid/hierarchy"
|
|
58
|
-
require "mongoid/identity_map"
|
|
59
|
-
require "mongoid/indexes"
|
|
60
|
-
require "mongoid/inspection"
|
|
61
|
-
require "mongoid/json"
|
|
62
20
|
require "mongoid/loggable"
|
|
63
|
-
require "mongoid/matchers"
|
|
64
|
-
require "mongoid/multi_parameter_attributes"
|
|
65
|
-
require "mongoid/nested_attributes"
|
|
66
|
-
require "mongoid/observer"
|
|
67
|
-
require "mongoid/persistence"
|
|
68
|
-
require "mongoid/reloading"
|
|
69
|
-
require "mongoid/scoping"
|
|
70
|
-
require "mongoid/serialization"
|
|
71
21
|
require "mongoid/sessions"
|
|
72
|
-
require "mongoid/sharding"
|
|
73
|
-
require "mongoid/state"
|
|
74
|
-
require "mongoid/timestamps"
|
|
75
|
-
require "mongoid/unit_of_work"
|
|
76
|
-
require "mongoid/validations"
|
|
77
|
-
require "mongoid/version"
|
|
78
|
-
require "mongoid/versioning"
|
|
79
|
-
require "mongoid/components"
|
|
80
|
-
require "mongoid/paranoia"
|
|
81
22
|
require "mongoid/document"
|
|
23
|
+
require "mongoid/log_subscriber"
|
|
24
|
+
require "mongoid/tasks/database"
|
|
25
|
+
require "mongoid/query_cache"
|
|
82
26
|
|
|
83
27
|
# If we are using Rails then we will include the Mongoid railtie. This has all
|
|
84
28
|
# the nifty initializers that Mongoid needs.
|
|
@@ -86,28 +30,20 @@ if defined?(Rails)
|
|
|
86
30
|
require "mongoid/railtie"
|
|
87
31
|
end
|
|
88
32
|
|
|
89
|
-
# If we are using any Rack based application then we need the Mongoid rack
|
|
90
|
-
# middleware to ensure our app is running properly.
|
|
91
|
-
if defined?(Rack)
|
|
92
|
-
require "rack/mongoid"
|
|
93
|
-
end
|
|
94
|
-
|
|
95
33
|
# add english load path by default
|
|
96
34
|
I18n.load_path << File.join(File.dirname(__FILE__), "config", "locales", "en.yml")
|
|
97
35
|
|
|
98
36
|
module Mongoid
|
|
99
37
|
extend Loggable
|
|
100
|
-
extend UnitOfWork
|
|
101
38
|
extend self
|
|
102
39
|
|
|
103
|
-
MONGODB_VERSION = "2.
|
|
40
|
+
MONGODB_VERSION = "2.2.0"
|
|
104
41
|
|
|
105
42
|
# Sets the Mongoid configuration options. Best used by passing a block.
|
|
106
43
|
#
|
|
107
44
|
# @example Set up configuration options.
|
|
108
45
|
# Mongoid.configure do |config|
|
|
109
|
-
# config.
|
|
110
|
-
# config.use(name: "mongoid_test", host: "localhost", port: 27017)
|
|
46
|
+
# config.connect_to("mongoid_test")
|
|
111
47
|
# end
|
|
112
48
|
#
|
|
113
49
|
# @return [ Config ] The configuration object.
|
|
@@ -160,7 +96,5 @@ module Mongoid
|
|
|
160
96
|
# Mongoid.database = Mongo::Connection.new.db("test")
|
|
161
97
|
#
|
|
162
98
|
# @since 1.0.0
|
|
163
|
-
delegate(*(Config.public_instance_methods(false)
|
|
164
|
-
ActiveModel::Observing::ClassMethods.public_instance_methods(false) - [:logger=, :logger] <<
|
|
165
|
-
{ to: Config }))
|
|
99
|
+
delegate(*(Config.public_instance_methods(false) - [ :logger=, :logger ] << { to: Config }))
|
|
166
100
|
end
|
|
@@ -11,31 +11,24 @@ development:
|
|
|
11
11
|
hosts:
|
|
12
12
|
- localhost:27017
|
|
13
13
|
options:
|
|
14
|
-
# Change
|
|
15
|
-
#
|
|
16
|
-
#
|
|
14
|
+
# Change the default write concern. (default = { w: 1 })
|
|
15
|
+
# write:
|
|
16
|
+
# w: 1
|
|
17
17
|
|
|
18
|
-
# Change the default consistency model to
|
|
19
|
-
#
|
|
20
|
-
# to master. (default:
|
|
21
|
-
#
|
|
18
|
+
# Change the default consistency model to primary, secondary.
|
|
19
|
+
# 'secondary' will send reads to secondaries, 'primary' sends everything
|
|
20
|
+
# to master. (default: primary)
|
|
21
|
+
# read: secondary_preferred
|
|
22
22
|
|
|
23
23
|
# How many times Moped should attempt to retry an operation after
|
|
24
|
-
# failure. (default:
|
|
25
|
-
# max_retries:
|
|
24
|
+
# failure. (default: The number of nodes in the cluster)
|
|
25
|
+
# max_retries: 20
|
|
26
26
|
|
|
27
27
|
# The time in seconds that Moped should wait before retrying an
|
|
28
|
-
# operation on failure. (default:
|
|
29
|
-
# retry_interval:
|
|
28
|
+
# operation on failure. (default: 0.25)
|
|
29
|
+
# retry_interval: 0.25
|
|
30
30
|
# Configure Mongoid specific options. (optional)
|
|
31
31
|
options:
|
|
32
|
-
# Configuration for whether or not to allow access to fields that do
|
|
33
|
-
# not have a field definition on the model. (default: true)
|
|
34
|
-
# allow_dynamic_fields: true
|
|
35
|
-
|
|
36
|
-
# Enable the identity map, needed for eager loading. (default: false)
|
|
37
|
-
# identity_map_enabled: false
|
|
38
|
-
|
|
39
32
|
# Includes the root model name in json serialization. (default: false)
|
|
40
33
|
# include_root_in_json: false
|
|
41
34
|
|
|
@@ -57,11 +50,7 @@ development:
|
|
|
57
50
|
# existing method. (default: false)
|
|
58
51
|
# scope_overwrite_exception: false
|
|
59
52
|
|
|
60
|
-
#
|
|
61
|
-
# admin access. (default: false)
|
|
62
|
-
# skip_version_check: false
|
|
63
|
-
|
|
64
|
-
# User Active Support's time zone in conversions. (default: true)
|
|
53
|
+
# Use Active Support's time zone in conversions. (default: true)
|
|
65
54
|
# use_activesupport_time_zone: true
|
|
66
55
|
|
|
67
56
|
# Ensure all times are UTC in the app side. (default: false)
|
|
@@ -73,7 +62,7 @@ test:
|
|
|
73
62
|
hosts:
|
|
74
63
|
- localhost:27017
|
|
75
64
|
options:
|
|
76
|
-
|
|
65
|
+
read: primary
|
|
77
66
|
# In the test environment we lower the retries and retry interval to
|
|
78
67
|
# low amounts for fast failures.
|
|
79
68
|
max_retries: 1
|