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/sessions.rb
CHANGED
|
@@ -1,90 +1,18 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require "mongoid/sessions/factory"
|
|
3
3
|
require "mongoid/sessions/validators"
|
|
4
|
+
require "mongoid/sessions/storage_options"
|
|
5
|
+
require "mongoid/sessions/thread_options"
|
|
6
|
+
require "mongoid/sessions/options"
|
|
4
7
|
|
|
5
8
|
module Mongoid
|
|
6
9
|
module Sessions
|
|
7
10
|
extend ActiveSupport::Concern
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
self.default_collection_name = self.name.collectionize.to_sym
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# Get the collection for this model from the session. Will check for an
|
|
15
|
-
# overridden collection name from the store_in macro or the collection
|
|
16
|
-
# with a pluralized model name.
|
|
17
|
-
#
|
|
18
|
-
# @example Get the model's collection.
|
|
19
|
-
# Model.collection
|
|
20
|
-
#
|
|
21
|
-
# @return [ Moped::Collection ] The collection.
|
|
22
|
-
#
|
|
23
|
-
# @since 3.0.0
|
|
24
|
-
def collection
|
|
25
|
-
self.class.collection
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Get the name of the collection this model persists to. This will be
|
|
29
|
-
# either the pluralized class name or the option defined in the store_in
|
|
30
|
-
# macro.
|
|
31
|
-
#
|
|
32
|
-
# @example Get the collection name.
|
|
33
|
-
# Model.collection_name
|
|
34
|
-
#
|
|
35
|
-
# @return [ String ] The name of the collection.
|
|
36
|
-
#
|
|
37
|
-
# @since 3.0.0
|
|
38
|
-
def collection_name
|
|
39
|
-
self.class.collection_name
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Get the session for this model. This is determined in the following order:
|
|
43
|
-
#
|
|
44
|
-
# 1. Any custom configuration provided by the 'store_in' macro.
|
|
45
|
-
# 2. The 'default' session as provided in the mongoid.yml
|
|
46
|
-
#
|
|
47
|
-
# @example Get the session.
|
|
48
|
-
# model.mongo_session
|
|
49
|
-
#
|
|
50
|
-
# @return [ Moped::Session ] The default moped session.
|
|
51
|
-
#
|
|
52
|
-
# @since 3.0.0
|
|
53
|
-
def mongo_session
|
|
54
|
-
self.class.mongo_session
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# Tell the next persistance operation to store in a specific collection,
|
|
58
|
-
# database or session.
|
|
59
|
-
#
|
|
60
|
-
# @example Save the current document to a different collection.
|
|
61
|
-
# model.with(collection: "secondary").save
|
|
62
|
-
#
|
|
63
|
-
# @example Save the current document to a different database.
|
|
64
|
-
# model.with(database: "secondary").save
|
|
65
|
-
#
|
|
66
|
-
# @example Save the current document to a different session.
|
|
67
|
-
# model.with(session: "replica_set").save
|
|
68
|
-
#
|
|
69
|
-
# @example Save with a combination of options.
|
|
70
|
-
# model.with(session: "sharded", database: "secondary").save
|
|
71
|
-
#
|
|
72
|
-
# @param [ Hash ] options The storage options.
|
|
73
|
-
#
|
|
74
|
-
# @option options [ String, Symbol ] :collection The collection name.
|
|
75
|
-
# @option options [ String, Symbol ] :database The database name.
|
|
76
|
-
# @option options [ String, Symbol ] :session The session name.
|
|
77
|
-
#
|
|
78
|
-
# @return [ Document ] The current document.
|
|
79
|
-
#
|
|
80
|
-
# @since 3.0.0
|
|
81
|
-
def with(options)
|
|
82
|
-
Threaded.set_persistence_options(self.class, options)
|
|
83
|
-
self
|
|
84
|
-
end
|
|
11
|
+
include StorageOptions
|
|
12
|
+
include ThreadOptions
|
|
13
|
+
include Options
|
|
85
14
|
|
|
86
15
|
class << self
|
|
87
|
-
|
|
88
16
|
# Clear all sessions from the current thread.
|
|
89
17
|
#
|
|
90
18
|
# @example Clear all sessions.
|
|
@@ -138,79 +66,29 @@ module Mongoid
|
|
|
138
66
|
end
|
|
139
67
|
end
|
|
140
68
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
# Get the collection for this model from the session. Will check for an
|
|
156
|
-
# overridden collection name from the store_in macro or the collection
|
|
157
|
-
# with a pluralized model name.
|
|
158
|
-
#
|
|
159
|
-
# @example Get the model's collection.
|
|
160
|
-
# Model.collection
|
|
161
|
-
#
|
|
162
|
-
# @return [ Moped::Collection ] The collection.
|
|
163
|
-
#
|
|
164
|
-
# @since 3.0.0
|
|
165
|
-
def collection
|
|
166
|
-
if opts = persistence_options
|
|
167
|
-
coll = mongo_session.with(opts)[opts[:collection] || collection_name]
|
|
168
|
-
clear_persistence_options unless validating_with_query? || _loading_revision?
|
|
169
|
-
coll
|
|
170
|
-
else
|
|
171
|
-
mongo_session[collection_name]
|
|
172
|
-
end
|
|
173
|
-
end
|
|
69
|
+
# Get the collection for this model from the session. Will check for an
|
|
70
|
+
# overridden collection name from the store_in macro or the collection
|
|
71
|
+
# with a pluralized model name.
|
|
72
|
+
#
|
|
73
|
+
# @example Get the model's collection.
|
|
74
|
+
# Model.collection
|
|
75
|
+
#
|
|
76
|
+
# @return [ Moped::Collection ] The collection.
|
|
77
|
+
#
|
|
78
|
+
# @since 3.0.0
|
|
79
|
+
def collection
|
|
80
|
+
mongo_session[collection_name]
|
|
81
|
+
end
|
|
174
82
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
#
|
|
179
|
-
# @example Get the collection name.
|
|
180
|
-
# Model.collection_name
|
|
181
|
-
#
|
|
182
|
-
# @return [ Symbol ] The name of the collection.
|
|
183
|
-
#
|
|
184
|
-
# @since 3.0.0
|
|
185
|
-
def collection_name
|
|
186
|
-
__collection_name__
|
|
187
|
-
end
|
|
83
|
+
def mongo_session
|
|
84
|
+
super || self.class.mongo_session
|
|
85
|
+
end
|
|
188
86
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
# Model.database_name
|
|
193
|
-
#
|
|
194
|
-
# @return [ Symbol ] The name of the database.
|
|
195
|
-
#
|
|
196
|
-
# @since 3.0.0
|
|
197
|
-
def database_name
|
|
198
|
-
__database_name__
|
|
199
|
-
end
|
|
87
|
+
def collection_name
|
|
88
|
+
super || self.class.collection_name
|
|
89
|
+
end
|
|
200
90
|
|
|
201
|
-
|
|
202
|
-
# using +Model.with+ or by overriding at the global level via
|
|
203
|
-
# +Mongoid.override_database(:name)+.
|
|
204
|
-
#
|
|
205
|
-
# @example Get the overridden database name.
|
|
206
|
-
# Model.database_override
|
|
207
|
-
#
|
|
208
|
-
# @return [ String, Symbol ] The overridden database name.
|
|
209
|
-
#
|
|
210
|
-
# @since 3.0.0
|
|
211
|
-
def database_override
|
|
212
|
-
persistence_options.try { |opts| opts[:database] } || Threaded.database_override
|
|
213
|
-
end
|
|
91
|
+
module ClassMethods
|
|
214
92
|
|
|
215
93
|
# Get the session for this model. This is determined in the following order:
|
|
216
94
|
#
|
|
@@ -224,209 +102,23 @@ module Mongoid
|
|
|
224
102
|
#
|
|
225
103
|
# @since 3.0.0
|
|
226
104
|
def mongo_session
|
|
227
|
-
session =
|
|
228
|
-
session.use(
|
|
229
|
-
session
|
|
105
|
+
session = Sessions.with_name(session_name)
|
|
106
|
+
session.use(database_name)
|
|
107
|
+
self.persistence_options ? session.with(self.persistence_options) : session
|
|
230
108
|
end
|
|
231
109
|
|
|
232
|
-
# Get the
|
|
233
|
-
#
|
|
234
|
-
#
|
|
235
|
-
# Model.persistence_options
|
|
236
|
-
#
|
|
237
|
-
# @return [ Hash ] The persistence options.
|
|
238
|
-
#
|
|
239
|
-
# @since 3.0.0
|
|
240
|
-
def persistence_options
|
|
241
|
-
Threaded.persistence_options(self)
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
# Get the overridden session name. This either can be overridden by
|
|
245
|
-
# using +Model.with+ or by overriding at the global level via
|
|
246
|
-
# +Mongoid.override_session(:name)+.
|
|
247
|
-
#
|
|
248
|
-
# @example Get the overridden session name.
|
|
249
|
-
# Model.session_override
|
|
250
|
-
#
|
|
251
|
-
# @return [ String, Symbol ] The overridden session name.
|
|
252
|
-
#
|
|
253
|
-
# @since 3.0.0
|
|
254
|
-
def session_override
|
|
255
|
-
persistence_options.try { |opts| opts[:session] } || Threaded.session_override
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
# Give this model specific custom default storage options.
|
|
259
|
-
#
|
|
260
|
-
# @example Store this model by default in "artists"
|
|
261
|
-
# class Band
|
|
262
|
-
# include Mongoid::Document
|
|
263
|
-
# store_in collection: "artists"
|
|
264
|
-
# end
|
|
265
|
-
#
|
|
266
|
-
# @example Store this model by default in the sharded db.
|
|
267
|
-
# class Band
|
|
268
|
-
# include Mongoid::Document
|
|
269
|
-
# store_in database: "echo_shard"
|
|
270
|
-
# end
|
|
271
|
-
#
|
|
272
|
-
# @example Store this model by default in a different session.
|
|
273
|
-
# class Band
|
|
274
|
-
# include Mongoid::Document
|
|
275
|
-
# store_in session: "secondary"
|
|
276
|
-
# end
|
|
277
|
-
#
|
|
278
|
-
# @example Store this model with a combination of options.
|
|
279
|
-
# class Band
|
|
280
|
-
# include Mongoid::Document
|
|
281
|
-
# store_in collection: "artists", database: "secondary"
|
|
282
|
-
# end
|
|
283
|
-
#
|
|
284
|
-
# @param [ Hash ] options The storage options.
|
|
285
|
-
#
|
|
286
|
-
# @option options [ String, Symbol ] :collection The collection name.
|
|
287
|
-
# @option options [ String, Symbol ] :database The database name.
|
|
288
|
-
# @option options [ String, Symbol ] :session The session name.
|
|
289
|
-
#
|
|
290
|
-
# @return [ Class ] The model class.
|
|
291
|
-
#
|
|
292
|
-
# @since 3.0.0
|
|
293
|
-
def store_in(options)
|
|
294
|
-
Validators::Storage.validate(self, options)
|
|
295
|
-
self.storage_options ||= {}
|
|
296
|
-
self.storage_options.merge!(options)
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
# Tell the next persistance operation to store in a specific collection,
|
|
300
|
-
# database or session.
|
|
301
|
-
#
|
|
302
|
-
# @example Create a document in a different collection.
|
|
303
|
-
# Model.with(collection: "secondary").create(name: "test")
|
|
304
|
-
#
|
|
305
|
-
# @example Create a document in a different database.
|
|
306
|
-
# Model.with(database: "secondary").create(name: "test")
|
|
307
|
-
#
|
|
308
|
-
# @example Create a document in a different session.
|
|
309
|
-
# Model.with(session: "secondary").create(name: "test")
|
|
310
|
-
#
|
|
311
|
-
# @example Create with a combination of options.
|
|
312
|
-
# Model.with(session: "sharded", database: "secondary").create
|
|
313
|
-
#
|
|
314
|
-
# @param [ Hash ] options The storage options.
|
|
315
|
-
#
|
|
316
|
-
# @option options [ String, Symbol ] :collection The collection name.
|
|
317
|
-
# @option options [ String, Symbol ] :database The database name.
|
|
318
|
-
# @option options [ String, Symbol ] :session The session name.
|
|
319
|
-
#
|
|
320
|
-
# @return [ Class ] The model class.
|
|
321
|
-
#
|
|
322
|
-
# @since 3.0.0
|
|
323
|
-
def with(options)
|
|
324
|
-
Threaded.set_persistence_options(self, options)
|
|
325
|
-
self
|
|
326
|
-
end
|
|
327
|
-
|
|
328
|
-
private
|
|
329
|
-
|
|
330
|
-
# Get the name of the collection this model persists to.
|
|
331
|
-
#
|
|
332
|
-
# @example Get the collection name.
|
|
333
|
-
# Model.__collection_name__
|
|
334
|
-
#
|
|
335
|
-
# @return [ Symbol ] The name of the collection.
|
|
336
|
-
#
|
|
337
|
-
# @since 3.0.0
|
|
338
|
-
def __collection_name__
|
|
339
|
-
if storage_options && name = storage_options[:collection]
|
|
340
|
-
__evaluate__(name)
|
|
341
|
-
else
|
|
342
|
-
default_collection_name
|
|
343
|
-
end
|
|
344
|
-
end
|
|
345
|
-
|
|
346
|
-
# Get the database name for the model.
|
|
347
|
-
#
|
|
348
|
-
# @example Get the database name.
|
|
349
|
-
# Model.__database_name__
|
|
350
|
-
#
|
|
351
|
-
# @return [ Symbol ] The name of the database.
|
|
352
|
-
#
|
|
353
|
-
# @since 3.0.0
|
|
354
|
-
def __database_name__
|
|
355
|
-
if storage_options && name = storage_options[:database]
|
|
356
|
-
__evaluate__(name)
|
|
357
|
-
else
|
|
358
|
-
Mongoid.sessions[__session_name__][:database]
|
|
359
|
-
end
|
|
360
|
-
end
|
|
361
|
-
|
|
362
|
-
# Get the session name for the model.
|
|
363
|
-
#
|
|
364
|
-
# @example Get the session name.
|
|
365
|
-
# Model.__session_name__
|
|
366
|
-
#
|
|
367
|
-
# @return [ Symbol ] The name of the session.
|
|
368
|
-
#
|
|
369
|
-
# @since 3.0.0
|
|
370
|
-
def __session_name__
|
|
371
|
-
if storage_options && name = storage_options[:session]
|
|
372
|
-
__evaluate__(name)
|
|
373
|
-
else
|
|
374
|
-
:default
|
|
375
|
-
end
|
|
376
|
-
end
|
|
377
|
-
|
|
378
|
-
# Get the session for this class.
|
|
110
|
+
# Get the collection for this model from the session. Will check for an
|
|
111
|
+
# overridden collection name from the store_in macro or the collection
|
|
112
|
+
# with a pluralized model name.
|
|
379
113
|
#
|
|
380
|
-
# @example Get the
|
|
381
|
-
# Model.
|
|
114
|
+
# @example Get the model's collection.
|
|
115
|
+
# Model.collection
|
|
382
116
|
#
|
|
383
|
-
# @return [ Moped::
|
|
117
|
+
# @return [ Moped::Collection ] The collection.
|
|
384
118
|
#
|
|
385
119
|
# @since 3.0.0
|
|
386
|
-
def
|
|
387
|
-
|
|
388
|
-
Sessions.with_name(name)
|
|
389
|
-
else
|
|
390
|
-
Sessions.with_name(__session_name__)
|
|
391
|
-
end
|
|
392
|
-
end
|
|
393
|
-
|
|
394
|
-
# Eval the provided value, either byt calling it if it responds to call
|
|
395
|
-
# or returning the value itself.
|
|
396
|
-
#
|
|
397
|
-
# @api private
|
|
398
|
-
#
|
|
399
|
-
# @example Evaluate the name.
|
|
400
|
-
# Model.__evaluate__(:name)
|
|
401
|
-
#
|
|
402
|
-
# @param [ String, Symbol, Proc ] name The name.
|
|
403
|
-
#
|
|
404
|
-
# @return [ Symbol ] The value as a symbol.
|
|
405
|
-
#
|
|
406
|
-
# @since 3.1.0
|
|
407
|
-
def __evaluate__(name)
|
|
408
|
-
name.respond_to?(:call) ? name.call.to_sym : name.to_sym
|
|
409
|
-
end
|
|
410
|
-
|
|
411
|
-
# Get the name of the current database to use. Will check for a session
|
|
412
|
-
# override with a database first, then database name.
|
|
413
|
-
#
|
|
414
|
-
# @api private
|
|
415
|
-
#
|
|
416
|
-
# @example Get the current database name.
|
|
417
|
-
# Model.current_database_name
|
|
418
|
-
#
|
|
419
|
-
# @param [ Moped::Session ] session The current session.
|
|
420
|
-
#
|
|
421
|
-
# @return [ Symbol ] The current database name.
|
|
422
|
-
#
|
|
423
|
-
# @since 3.1.0
|
|
424
|
-
def current_database_name(session)
|
|
425
|
-
if session_override && name = session.options[:database]
|
|
426
|
-
name
|
|
427
|
-
else
|
|
428
|
-
database_name
|
|
429
|
-
end
|
|
120
|
+
def collection
|
|
121
|
+
mongo_session[collection_name]
|
|
430
122
|
end
|
|
431
123
|
end
|
|
432
124
|
end
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
module Mongoid
|
|
3
3
|
|
|
4
4
|
# This module contains behaviour for adding shard key fields to updates.
|
|
5
|
-
|
|
5
|
+
#
|
|
6
|
+
# @since 4.0.0
|
|
7
|
+
module Shardable
|
|
6
8
|
extend ActiveSupport::Concern
|
|
7
9
|
|
|
8
10
|
included do
|
|
@@ -18,6 +20,8 @@ module Mongoid
|
|
|
18
20
|
# model.shard_key_fields
|
|
19
21
|
#
|
|
20
22
|
# @return [ Array<String> ] The shard key field names.
|
|
23
|
+
#
|
|
24
|
+
# @since 1.0.0
|
|
21
25
|
def shard_key_fields
|
|
22
26
|
self.class.shard_key_fields
|
|
23
27
|
end
|
|
@@ -3,7 +3,7 @@ module Mongoid
|
|
|
3
3
|
|
|
4
4
|
# This module contains the behaviour for getting the various states a
|
|
5
5
|
# document can transition through.
|
|
6
|
-
module
|
|
6
|
+
module Stateful
|
|
7
7
|
|
|
8
8
|
attr_writer :destroyed, :flagged_for_destroy, :new_record
|
|
9
9
|
|
|
@@ -70,6 +70,18 @@ module Mongoid
|
|
|
70
70
|
!_parent.delayed_atomic_sets[atomic_path]
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
+
# Is the document readonly?
|
|
74
|
+
#
|
|
75
|
+
# @example Is the document readonly?
|
|
76
|
+
# document.readonly?
|
|
77
|
+
#
|
|
78
|
+
# @return [ true, false ] If the document is readonly.
|
|
79
|
+
#
|
|
80
|
+
# @since 4.0.0
|
|
81
|
+
def readonly?
|
|
82
|
+
__selected_fields != nil
|
|
83
|
+
end
|
|
84
|
+
|
|
73
85
|
# Determine if the document can be set.
|
|
74
86
|
#
|
|
75
87
|
# @example Is this settable?
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Mongoid
|
|
2
|
+
|
|
3
|
+
class QueryCounter
|
|
4
|
+
attr_reader :events
|
|
5
|
+
|
|
6
|
+
def initialize
|
|
7
|
+
@events = []
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def instrument
|
|
11
|
+
subscriber = ActiveSupport::Notifications.subscribe('query.moped') do |*args|
|
|
12
|
+
@events << ActiveSupport::Notifications::Event.new(*args)
|
|
13
|
+
end
|
|
14
|
+
yield
|
|
15
|
+
ensure
|
|
16
|
+
ActiveSupport::Notifications.unsubscribe(subscriber)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def inspect
|
|
20
|
+
@events.map { |e| e.payload[:ops].map(&:log_inspect) }.join("\n")
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
namespace :db do
|
|
2
|
+
namespace :mongoid do
|
|
3
|
+
task :load_models do
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
desc "Create the indexes defined on your mongoid models"
|
|
7
|
+
task :create_indexes => [:environment, :load_models] do
|
|
8
|
+
::Mongoid::Tasks::Database.create_indexes
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
desc "Remove indexes that exist in the database but aren't specified on the models"
|
|
12
|
+
task :remove_undefined_indexes => [:environment, :load_models] do
|
|
13
|
+
::Mongoid::Tasks::Database.remove_undefined_indexes
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
desc "Remove the indexes defined on your mongoid models without questions!"
|
|
17
|
+
task :remove_indexes => [:environment, :load_models] do
|
|
18
|
+
::Mongoid::Tasks::Database.remove_indexes
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
desc "Drops the default session"
|
|
22
|
+
task :drop => :environment do
|
|
23
|
+
::Mongoid::Sessions.default.drop
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
desc "Drop all collections except the system collections"
|
|
27
|
+
task :purge => :environment do
|
|
28
|
+
::Mongoid.purge!
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Tasks
|
|
4
|
+
module Database
|
|
5
|
+
extend self
|
|
6
|
+
|
|
7
|
+
# Create indexes for each model given the provided globs and the class is
|
|
8
|
+
# not embedded.
|
|
9
|
+
#
|
|
10
|
+
# @example Create all the indexes.
|
|
11
|
+
# Mongoid::Tasks::Database.create_indexes
|
|
12
|
+
#
|
|
13
|
+
# @return [ Array<Class> ] The indexed models.
|
|
14
|
+
#
|
|
15
|
+
# @since 2.1.0
|
|
16
|
+
def create_indexes(models = ::Mongoid.models)
|
|
17
|
+
models.each do |model|
|
|
18
|
+
next if model.index_specifications.empty?
|
|
19
|
+
if !model.embedded? || model.cyclic?
|
|
20
|
+
model.create_indexes
|
|
21
|
+
logger.info("MONGOID: Created indexes on #{model}:")
|
|
22
|
+
model.index_specifications.each do |spec|
|
|
23
|
+
logger.info("MONGOID: Index: #{spec.key}, Options: #{spec.options}")
|
|
24
|
+
end
|
|
25
|
+
model
|
|
26
|
+
else
|
|
27
|
+
logger.info("MONGOID: Index ignored on: #{model}, please define in the root model.")
|
|
28
|
+
nil
|
|
29
|
+
end
|
|
30
|
+
end.compact
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Return the list of indexes by model that exist in the database but aren't
|
|
34
|
+
# specified on the models.
|
|
35
|
+
#
|
|
36
|
+
# @example Return the list of unused indexes.
|
|
37
|
+
# Mongoid::Tasks::Database.undefined_indexes
|
|
38
|
+
#
|
|
39
|
+
# @return Hash{Class => Array(Hash)} The list of undefined indexes by model.
|
|
40
|
+
def undefined_indexes(models = ::Mongoid.models)
|
|
41
|
+
undefined_by_model = {}
|
|
42
|
+
|
|
43
|
+
models.each do |model|
|
|
44
|
+
unless model.embedded?
|
|
45
|
+
model.collection.indexes.each do |index|
|
|
46
|
+
# ignore default index
|
|
47
|
+
unless index['name'] == '_id_'
|
|
48
|
+
key = index['key'].symbolize_keys
|
|
49
|
+
spec = model.index_specification(key)
|
|
50
|
+
unless spec
|
|
51
|
+
# index not specified
|
|
52
|
+
undefined_by_model[model] ||= []
|
|
53
|
+
undefined_by_model[model] << index
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
undefined_by_model
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Remove indexes that exist in the database but aren't specified on the
|
|
64
|
+
# models.
|
|
65
|
+
#
|
|
66
|
+
# @example Remove undefined indexes.
|
|
67
|
+
# Mongoid::Tasks::Database.remove_undefined_indexes
|
|
68
|
+
#
|
|
69
|
+
# @return [ Hash{Class => Array(Hash)}] The list of indexes that were removed by model.
|
|
70
|
+
#
|
|
71
|
+
# @since 4.0.0
|
|
72
|
+
def remove_undefined_indexes(models = ::Mongoid.models)
|
|
73
|
+
undefined_indexes(models).each do |model, indexes|
|
|
74
|
+
indexes.each do |index|
|
|
75
|
+
key = index['key'].symbolize_keys
|
|
76
|
+
model.collection.indexes.drop(key)
|
|
77
|
+
logger.info("MONGOID: Removing index: #{index['name']} on #{model}.")
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Remove indexes for each model given the provided globs and the class is
|
|
83
|
+
# not embedded.
|
|
84
|
+
#
|
|
85
|
+
# @example Remove all the indexes.
|
|
86
|
+
# Mongoid::Tasks::Database.remove_indexes
|
|
87
|
+
#
|
|
88
|
+
# @return [ Array<Class> ] The un-indexed models.
|
|
89
|
+
#
|
|
90
|
+
def remove_indexes(models = ::Mongoid.models)
|
|
91
|
+
models.each do |model|
|
|
92
|
+
next if model.embedded?
|
|
93
|
+
indexes = model.collection.indexes.map{ |doc| doc["name"] }
|
|
94
|
+
indexes.delete_one("_id_")
|
|
95
|
+
model.remove_indexes
|
|
96
|
+
logger.info("MONGOID: Removing indexes on: #{model} for: #{indexes.join(', ')}.")
|
|
97
|
+
model
|
|
98
|
+
end.compact
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
private
|
|
102
|
+
def logger
|
|
103
|
+
@logger ||= Logger.new($stdout)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -139,23 +139,6 @@ module Mongoid
|
|
|
139
139
|
Threaded.executing?("load")
|
|
140
140
|
end
|
|
141
141
|
|
|
142
|
-
# Execute a block in loading revision mode.
|
|
143
|
-
#
|
|
144
|
-
# @example Execute in loading revision mode.
|
|
145
|
-
# _loading_revision do
|
|
146
|
-
# load_revision
|
|
147
|
-
# end
|
|
148
|
-
#
|
|
149
|
-
# @return [ Object ] The return value of the block.
|
|
150
|
-
#
|
|
151
|
-
# @since 2.3.4
|
|
152
|
-
def _loading_revision
|
|
153
|
-
Threaded.begin_execution("load_revision")
|
|
154
|
-
yield
|
|
155
|
-
ensure
|
|
156
|
-
Threaded.exit_execution("load_revision")
|
|
157
|
-
end
|
|
158
|
-
|
|
159
142
|
module ClassMethods
|
|
160
143
|
|
|
161
144
|
# Execute a block in creating mode.
|
|
@@ -175,17 +158,6 @@ module Mongoid
|
|
|
175
158
|
Threaded.exit_execution("create")
|
|
176
159
|
end
|
|
177
160
|
|
|
178
|
-
# Is the current thread in loading revision mode?
|
|
179
|
-
#
|
|
180
|
-
# @example Is the current thread in loading revision mode?
|
|
181
|
-
# proxy._loading_revision?
|
|
182
|
-
#
|
|
183
|
-
# @return [ true, false ] If the thread is loading a revision.
|
|
184
|
-
#
|
|
185
|
-
# @since 2.3.4
|
|
186
|
-
def _loading_revision?
|
|
187
|
-
Threaded.executing?("load_revision")
|
|
188
|
-
end
|
|
189
161
|
end
|
|
190
162
|
end
|
|
191
163
|
end
|