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
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
module Mongoid
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
# Defines behaviour for dirty tracking.
|
|
5
|
+
#
|
|
6
|
+
# @since 4.0.0
|
|
7
|
+
module Changeable
|
|
4
8
|
extend ActiveSupport::Concern
|
|
5
9
|
|
|
6
10
|
# Get the changed attributes for the document.
|
|
@@ -80,7 +84,6 @@ module Mongoid
|
|
|
80
84
|
#
|
|
81
85
|
# @since 2.1.0
|
|
82
86
|
def move_changes
|
|
83
|
-
@_children = nil
|
|
84
87
|
@previous_changes = changes
|
|
85
88
|
Atomic::UPDATES.each do |update|
|
|
86
89
|
send(update).clear
|
|
@@ -245,6 +248,15 @@ module Mongoid
|
|
|
245
248
|
attributes[attr] = changed_attributes.delete(attr) if attribute_changed?(attr)
|
|
246
249
|
end
|
|
247
250
|
|
|
251
|
+
def reset_attribute_to_default!(attr)
|
|
252
|
+
attr = database_field_name(attr)
|
|
253
|
+
if field = fields[attr]
|
|
254
|
+
__send__("#{attr}=", field.eval_default(self))
|
|
255
|
+
else
|
|
256
|
+
__send__("#{attr}=", nil)
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
248
260
|
module ClassMethods
|
|
249
261
|
|
|
250
262
|
private
|
|
@@ -267,6 +279,7 @@ module Mongoid
|
|
|
267
279
|
create_dirty_default_change_check(name, meth)
|
|
268
280
|
create_dirty_previous_value_accessor(name, meth)
|
|
269
281
|
create_dirty_reset(name, meth)
|
|
282
|
+
create_dirty_reset_to_default(name, meth)
|
|
270
283
|
end
|
|
271
284
|
|
|
272
285
|
# Creates the dirty change accessor.
|
|
@@ -370,6 +383,23 @@ module Mongoid
|
|
|
370
383
|
end
|
|
371
384
|
end
|
|
372
385
|
end
|
|
386
|
+
|
|
387
|
+
# Creates the dirty change reset to default.
|
|
388
|
+
#
|
|
389
|
+
# @example Create the reset.
|
|
390
|
+
# Model.create_dirty_reset_to_default("name", "alias")
|
|
391
|
+
#
|
|
392
|
+
# @param [ String ] name The attribute name.
|
|
393
|
+
# @param [ String ] meth The name of the accessor.
|
|
394
|
+
#
|
|
395
|
+
# @since 3.0.0
|
|
396
|
+
def create_dirty_reset_to_default(name, meth)
|
|
397
|
+
generated_methods.module_eval do
|
|
398
|
+
re_define_method("reset_#{meth}_to_default!") do
|
|
399
|
+
reset_attribute_to_default!(name)
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
end
|
|
373
403
|
end
|
|
374
404
|
end
|
|
375
405
|
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "mongoid/changeable"
|
|
3
|
+
require "mongoid/findable"
|
|
4
|
+
require "mongoid/indexable"
|
|
5
|
+
require "mongoid/inspectable"
|
|
6
|
+
require "mongoid/interceptable"
|
|
7
|
+
require "mongoid/matchable"
|
|
8
|
+
require "mongoid/persistable"
|
|
9
|
+
require "mongoid/reloadable"
|
|
10
|
+
require "mongoid/selectable"
|
|
11
|
+
require "mongoid/scopable"
|
|
12
|
+
require "mongoid/serializable"
|
|
13
|
+
require "mongoid/shardable"
|
|
14
|
+
require "mongoid/stateful"
|
|
15
|
+
require "mongoid/traversable"
|
|
16
|
+
require "mongoid/validatable"
|
|
17
|
+
|
|
18
|
+
module Mongoid
|
|
19
|
+
|
|
20
|
+
# This module provides inclusions of all behaviour in a Mongoid document.
|
|
21
|
+
#
|
|
22
|
+
# @since 4.0.0
|
|
23
|
+
module Composable
|
|
24
|
+
extend ActiveSupport::Concern
|
|
25
|
+
|
|
26
|
+
# All modules that a +Document+ is composed of are defined in this
|
|
27
|
+
# module, to keep the document class from getting too cluttered.
|
|
28
|
+
included do
|
|
29
|
+
extend Findable
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
include ActiveModel::Model
|
|
33
|
+
include ActiveModel::ForbiddenAttributesProtection
|
|
34
|
+
include ActiveModel::Serializers::JSON
|
|
35
|
+
include ActiveModel::Serializers::Xml
|
|
36
|
+
include Atomic
|
|
37
|
+
include Changeable
|
|
38
|
+
include Attributes
|
|
39
|
+
include Evolvable
|
|
40
|
+
include Fields
|
|
41
|
+
include Indexable
|
|
42
|
+
include Inspectable
|
|
43
|
+
include Matchable
|
|
44
|
+
include Persistable
|
|
45
|
+
include Relations
|
|
46
|
+
include Reloadable
|
|
47
|
+
include Scopable
|
|
48
|
+
include Selectable
|
|
49
|
+
include Serializable
|
|
50
|
+
include Sessions
|
|
51
|
+
include Shardable
|
|
52
|
+
include Stateful
|
|
53
|
+
include Threaded::Lifecycle
|
|
54
|
+
include Traversable
|
|
55
|
+
include Validatable
|
|
56
|
+
include Interceptable
|
|
57
|
+
include Copyable
|
|
58
|
+
include Equality
|
|
59
|
+
|
|
60
|
+
MODULES = [
|
|
61
|
+
Atomic,
|
|
62
|
+
Attributes,
|
|
63
|
+
Copyable,
|
|
64
|
+
Changeable,
|
|
65
|
+
Evolvable,
|
|
66
|
+
Fields,
|
|
67
|
+
Indexable,
|
|
68
|
+
Inspectable,
|
|
69
|
+
Interceptable,
|
|
70
|
+
Matchable,
|
|
71
|
+
Persistable,
|
|
72
|
+
Relations,
|
|
73
|
+
Reloadable,
|
|
74
|
+
Scopable,
|
|
75
|
+
Serializable,
|
|
76
|
+
Sessions,
|
|
77
|
+
Shardable,
|
|
78
|
+
Stateful,
|
|
79
|
+
Threaded::Lifecycle,
|
|
80
|
+
Traversable,
|
|
81
|
+
Validatable,
|
|
82
|
+
Equality,
|
|
83
|
+
ActiveModel::Model,
|
|
84
|
+
ActiveModel::Validations
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
class << self
|
|
88
|
+
|
|
89
|
+
# Get a list of methods that would be a bad idea to define as field names
|
|
90
|
+
# or override when including Mongoid::Document.
|
|
91
|
+
#
|
|
92
|
+
# @example Bad thing!
|
|
93
|
+
# Mongoid::Components.prohibited_methods
|
|
94
|
+
#
|
|
95
|
+
# @return [ Array<Symbol> ]
|
|
96
|
+
#
|
|
97
|
+
# @since 2.1.8
|
|
98
|
+
def prohibited_methods
|
|
99
|
+
@prohibited_methods ||= MODULES.flat_map do |mod|
|
|
100
|
+
mod.instance_methods.map{ |m| m.to_sym }
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -20,7 +20,7 @@ module Mongoid
|
|
|
20
20
|
# Define a configuration option with a default.
|
|
21
21
|
#
|
|
22
22
|
# @example Define the option.
|
|
23
|
-
# Options.option(:persist_in_safe_mode, :default =>
|
|
23
|
+
# Options.option(:persist_in_safe_mode, :default => true)
|
|
24
24
|
#
|
|
25
25
|
# @param [ Symbol ] name The name of the configuration option.
|
|
26
26
|
# @param [ Hash ] options Extras for the option.
|
data/lib/mongoid/config.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require "mongoid/config/environment"
|
|
3
|
-
require "mongoid/config/inflections"
|
|
4
3
|
require "mongoid/config/options"
|
|
5
4
|
require "mongoid/config/validators"
|
|
6
5
|
|
|
@@ -11,23 +10,18 @@ module Mongoid
|
|
|
11
10
|
module Config
|
|
12
11
|
extend self
|
|
13
12
|
extend Options
|
|
14
|
-
include ActiveModel::Observing
|
|
15
13
|
|
|
16
14
|
delegate :logger=, to: ::Mongoid
|
|
17
15
|
delegate :logger, to: ::Mongoid
|
|
18
16
|
|
|
19
17
|
LOCK = Mutex.new
|
|
20
18
|
|
|
21
|
-
option :allow_dynamic_fields, default: true
|
|
22
|
-
option :identity_map_enabled, default: false
|
|
23
19
|
option :include_root_in_json, default: false
|
|
24
20
|
option :include_type_for_serialization, default: false
|
|
25
21
|
option :preload_models, default: false
|
|
26
|
-
option :protect_sensitive_fields, default: true
|
|
27
22
|
option :raise_not_found_error, default: true
|
|
28
23
|
option :scope_overwrite_exception, default: false
|
|
29
|
-
|
|
30
|
-
option :skip_version_check, default: false
|
|
24
|
+
option :duplicate_fields_exception, default: false
|
|
31
25
|
option :use_activesupport_time_zone, default: true
|
|
32
26
|
option :use_utc, default: false
|
|
33
27
|
|
|
@@ -54,7 +48,7 @@ module Mongoid
|
|
|
54
48
|
# @param [ String ] name The database name.
|
|
55
49
|
#
|
|
56
50
|
# @since 3.0.0
|
|
57
|
-
def connect_to(name, options = {
|
|
51
|
+
def connect_to(name, options = { read: :primary })
|
|
58
52
|
self.sessions = {
|
|
59
53
|
default: {
|
|
60
54
|
database: name,
|
|
@@ -72,7 +66,7 @@ module Mongoid
|
|
|
72
66
|
#
|
|
73
67
|
# @return [ Array<String> ] An array of bad field names.
|
|
74
68
|
def destructive_fields
|
|
75
|
-
|
|
69
|
+
Composable.prohibited_methods
|
|
76
70
|
end
|
|
77
71
|
|
|
78
72
|
# Load the settings from a compliant mongoid.yml file. This can be used for
|
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
|
12
12
|
#
|
|
13
13
|
# @param [ String, Symbol ] field The field name.
|
|
14
14
|
#
|
|
15
|
-
# @return [ Hash ]
|
|
15
|
+
# @return [ Hash ] count is a number of documents with the provided field. If there're none, then count is 0 and max, min, sum, avg are nil.
|
|
16
16
|
# {
|
|
17
17
|
# "count" => 2.0,
|
|
18
18
|
# "max" => 1000.0,
|
|
@@ -23,15 +23,11 @@ module Mongoid
|
|
|
23
23
|
#
|
|
24
24
|
# @since 3.0.0
|
|
25
25
|
def aggregates(field)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
{ "count" => query.count, "avg" => 0, "sum" => 0 }
|
|
30
|
-
else
|
|
31
|
-
result.first
|
|
32
|
-
end
|
|
26
|
+
result = collection.aggregate(pipeline(field)).to_a
|
|
27
|
+
if result.empty?
|
|
28
|
+
{ "count" => 0, "sum" => nil, "avg" => nil, "min" => nil, "max" => nil }
|
|
33
29
|
else
|
|
34
|
-
|
|
30
|
+
result.first
|
|
35
31
|
end
|
|
36
32
|
end
|
|
37
33
|
|
|
@@ -129,6 +125,8 @@ module Mongoid
|
|
|
129
125
|
db_field = "$#{database_field_name(field)}"
|
|
130
126
|
pipeline = []
|
|
131
127
|
pipeline << { "$match" => criteria.nin(field => nil).selector }
|
|
128
|
+
pipeline << { "$sort" => criteria.options[:sort] } if criteria.options[:sort]
|
|
129
|
+
pipeline << { "$skip" => criteria.options[:skip] } if criteria.options[:skip]
|
|
132
130
|
pipeline << { "$limit" => criteria.options[:limit] } if criteria.options[:limit]
|
|
133
131
|
pipeline << {
|
|
134
132
|
"$group" => {
|
|
@@ -6,84 +6,76 @@ module Mongoid
|
|
|
6
6
|
# Execute an atomic $addToSet on the matching documents.
|
|
7
7
|
#
|
|
8
8
|
# @example Add the value to the set.
|
|
9
|
-
# context.add_to_set(:
|
|
9
|
+
# context.add_to_set(members: "Dave", genres: "Electro")
|
|
10
10
|
#
|
|
11
|
-
# @param [
|
|
12
|
-
# @param [ Object ] value The single value to add.
|
|
11
|
+
# @param [ Hash ] adds The operations.
|
|
13
12
|
#
|
|
14
13
|
# @return [ nil ] Nil.
|
|
15
14
|
#
|
|
16
15
|
# @since 3.0.0
|
|
17
|
-
def add_to_set(
|
|
18
|
-
query.update_all("$addToSet" =>
|
|
16
|
+
def add_to_set(adds)
|
|
17
|
+
query.update_all("$addToSet" => collect_operations(adds))
|
|
19
18
|
end
|
|
20
19
|
|
|
21
20
|
# Perform an atomic $bit operation on the matching documents.
|
|
22
21
|
#
|
|
23
22
|
# @example Perform the bitwise op.
|
|
24
|
-
# context.bit(:
|
|
23
|
+
# context.bit(likes: { and: 14, or: 4 })
|
|
25
24
|
#
|
|
26
|
-
# @param [
|
|
27
|
-
# @param [ Hash ] value The bitwise operations to perform. Keys may be
|
|
28
|
-
# "and" or "or" and must have numeric values.
|
|
25
|
+
# @param [ Hash ] bits The operations.
|
|
29
26
|
#
|
|
30
27
|
# @return [ nil ] Nil.
|
|
31
28
|
#
|
|
32
29
|
# @since 3.0.0
|
|
33
|
-
def bit(
|
|
34
|
-
query.update_all("$bit" =>
|
|
30
|
+
def bit(bits)
|
|
31
|
+
query.update_all("$bit" => collect_operations(bits))
|
|
35
32
|
end
|
|
36
33
|
|
|
37
34
|
# Perform an atomic $inc operation on the matching documents.
|
|
38
35
|
#
|
|
39
36
|
# @example Perform the atomic increment.
|
|
40
|
-
# context.inc(:
|
|
37
|
+
# context.inc(likes: 10)
|
|
41
38
|
#
|
|
42
|
-
# @param [
|
|
43
|
-
# @param [ Integer ] value The amount to increment by.
|
|
39
|
+
# @param [ Hash ] incs The operations.
|
|
44
40
|
#
|
|
45
41
|
# @return [ nil ] Nil.
|
|
46
42
|
#
|
|
47
43
|
# @since 3.0.0
|
|
48
|
-
def inc(
|
|
49
|
-
query.update_all("$inc" =>
|
|
44
|
+
def inc(incs)
|
|
45
|
+
query.update_all("$inc" => collect_operations(incs))
|
|
50
46
|
end
|
|
51
47
|
|
|
52
48
|
# Perform an atomic $pop operation on the matching documents.
|
|
53
49
|
#
|
|
54
50
|
# @example Pop the first value on the matches.
|
|
55
|
-
# context.pop(:
|
|
51
|
+
# context.pop(members: -1)
|
|
56
52
|
#
|
|
57
53
|
# @example Pop the last value on the matches.
|
|
58
|
-
# context.pop(:
|
|
54
|
+
# context.pop(members: 1)
|
|
59
55
|
#
|
|
60
|
-
# @param [
|
|
61
|
-
# from.
|
|
62
|
-
# @param [ Integer ] value 1 to pop from the end, -1 to pop from the
|
|
63
|
-
# front.
|
|
56
|
+
# @param [ Hash ] pops The operations.
|
|
64
57
|
#
|
|
65
58
|
# @return [ nil ] Nil.
|
|
66
59
|
#
|
|
67
60
|
# @since 3.0.0
|
|
68
|
-
def pop(
|
|
69
|
-
query.update_all("$pop" =>
|
|
61
|
+
def pop(pops)
|
|
62
|
+
query.update_all("$pop" => collect_operations(pops))
|
|
70
63
|
end
|
|
71
64
|
|
|
72
65
|
# Perform an atomic $pull operation on the matching documents.
|
|
73
66
|
#
|
|
74
67
|
# @example Pull the value from the matches.
|
|
75
|
-
# context.pull(:
|
|
68
|
+
# context.pull(members: "Dave")
|
|
76
69
|
#
|
|
77
70
|
# @note Expression pulling is not yet supported.
|
|
78
71
|
#
|
|
79
|
-
# @param [
|
|
80
|
-
# @param [ Object ] value The single value to pull.
|
|
72
|
+
# @param [ Hash ] pulls The operations.
|
|
81
73
|
#
|
|
82
74
|
# @return [ nil ] Nil.
|
|
83
75
|
#
|
|
84
76
|
# @since 3.0.0
|
|
85
|
-
def pull(
|
|
86
|
-
query.update_all("$pull" =>
|
|
77
|
+
def pull(pulls)
|
|
78
|
+
query.update_all("$pull" => collect_operations(pulls))
|
|
87
79
|
end
|
|
88
80
|
|
|
89
81
|
# Perform an atomic $pullAll operation on the matching documents.
|
|
@@ -91,74 +83,73 @@ module Mongoid
|
|
|
91
83
|
# @example Pull all the matching values from the matches.
|
|
92
84
|
# context.pull_all(:members, [ "Alan", "Vince" ])
|
|
93
85
|
#
|
|
94
|
-
# @param [
|
|
95
|
-
# @param [ Array<Object> ] values The values to pull.
|
|
86
|
+
# @param [ Hash ] pulls The operations.
|
|
96
87
|
#
|
|
97
88
|
# @return [ nil ] Nil.
|
|
98
89
|
#
|
|
99
90
|
# @since 3.0.0
|
|
100
|
-
def pull_all(
|
|
101
|
-
query.update_all("$pullAll" =>
|
|
91
|
+
def pull_all(pulls)
|
|
92
|
+
query.update_all("$pullAll" => collect_operations(pulls))
|
|
102
93
|
end
|
|
103
94
|
|
|
104
95
|
# Perform an atomic $push operation on the matching documents.
|
|
105
96
|
#
|
|
106
97
|
# @example Push the value to the matching docs.
|
|
107
|
-
# context.push(:
|
|
98
|
+
# context.push(members: "Alan")
|
|
108
99
|
#
|
|
109
|
-
# @param [
|
|
110
|
-
# @param [ Object ] value The value to push.
|
|
100
|
+
# @param [ Hash ] pushes The operations.
|
|
111
101
|
#
|
|
112
102
|
# @return [ nil ] Nil.
|
|
113
103
|
#
|
|
114
104
|
# @since 3.0.0
|
|
115
|
-
def push(
|
|
116
|
-
query.update_all("$push" =>
|
|
105
|
+
def push(pushes)
|
|
106
|
+
query.update_all("$push" => collect_operations(pushes))
|
|
117
107
|
end
|
|
118
108
|
|
|
119
109
|
# Perform an atomic $pushAll operation on the matching documents.
|
|
120
110
|
#
|
|
121
111
|
# @example Push the values to the matching docs.
|
|
122
|
-
# context.push(:
|
|
112
|
+
# context.push(members: [ "Alan", "Fletch" ])
|
|
123
113
|
#
|
|
124
|
-
# @param [
|
|
125
|
-
# @param [ Array<Object> ] values The values to push.
|
|
114
|
+
# @param [ Hash ] pushes The operations.
|
|
126
115
|
#
|
|
127
116
|
# @return [ nil ] Nil.
|
|
128
117
|
#
|
|
129
118
|
# @since 3.0.0
|
|
130
|
-
def push_all(
|
|
131
|
-
query.update_all("$pushAll" =>
|
|
119
|
+
def push_all(pushes)
|
|
120
|
+
query.update_all("$pushAll" => collect_operations(pushes))
|
|
132
121
|
end
|
|
133
122
|
|
|
134
123
|
# Perform an atomic $rename of fields on the matching documents.
|
|
135
124
|
#
|
|
136
125
|
# @example Rename the fields on the matching documents.
|
|
137
|
-
# context.rename(:
|
|
126
|
+
# context.rename(members: :artists)
|
|
138
127
|
#
|
|
139
|
-
# @param [
|
|
140
|
-
# @param [ String, Symbol ] new_name The new field name.
|
|
128
|
+
# @param [ Hash ] renames The operations.
|
|
141
129
|
#
|
|
142
130
|
# @return [ nil ] Nil.
|
|
143
131
|
#
|
|
144
132
|
# @since 3.0.0
|
|
145
|
-
def rename(
|
|
146
|
-
|
|
133
|
+
def rename(renames)
|
|
134
|
+
operations = renames.inject({}) do |ops, (old_name, new_name)|
|
|
135
|
+
ops[old_name] = new_name.to_s
|
|
136
|
+
ops
|
|
137
|
+
end
|
|
138
|
+
query.update_all("$rename" => collect_operations(operations))
|
|
147
139
|
end
|
|
148
140
|
|
|
149
141
|
# Perform an atomic $set of fields on the matching documents.
|
|
150
142
|
#
|
|
151
143
|
# @example Set the field value on the matches.
|
|
152
|
-
# context.set(:
|
|
144
|
+
# context.set(name: "Depeche Mode")
|
|
153
145
|
#
|
|
154
|
-
# @param [
|
|
155
|
-
# @param [ Object ] value The value to set.
|
|
146
|
+
# @param [ Hash ] sets The operations.
|
|
156
147
|
#
|
|
157
148
|
# @return [ nil ] Nil.
|
|
158
149
|
#
|
|
159
150
|
# @since 3.0.0
|
|
160
|
-
def set(
|
|
161
|
-
query.update_all("$set" =>
|
|
151
|
+
def set(sets)
|
|
152
|
+
query.update_all("$set" => collect_operations(sets))
|
|
162
153
|
end
|
|
163
154
|
|
|
164
155
|
# Perform an atomic $unset of a field on the matching documents.
|
|
@@ -175,6 +166,15 @@ module Mongoid
|
|
|
175
166
|
fields = args.__find_args__.collect { |f| [database_field_name(f), true] }
|
|
176
167
|
query.update_all("$unset" => Hash[fields])
|
|
177
168
|
end
|
|
169
|
+
|
|
170
|
+
private
|
|
171
|
+
|
|
172
|
+
def collect_operations(ops)
|
|
173
|
+
ops.inject({}) do |operations, (field, value)|
|
|
174
|
+
operations[database_field_name(field)] = value.mongoize
|
|
175
|
+
operations
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
178
|
end
|
|
179
179
|
end
|
|
180
180
|
end
|
|
@@ -213,7 +213,7 @@ module Mongoid
|
|
|
213
213
|
# @since 3.0.0
|
|
214
214
|
def documents
|
|
215
215
|
results["results"].map do |attributes|
|
|
216
|
-
doc = Factory.from_db(criteria.klass, attributes["obj"], criteria.
|
|
216
|
+
doc = Factory.from_db(criteria.klass, attributes["obj"], criteria.options[:fields])
|
|
217
217
|
doc.attributes["geo_near_distance"] = attributes["dis"]
|
|
218
218
|
doc
|
|
219
219
|
end
|
|
@@ -268,7 +268,9 @@ module Mongoid
|
|
|
268
268
|
# @since 3.0.0
|
|
269
269
|
def documents
|
|
270
270
|
return results["results"] if results.has_key?("results")
|
|
271
|
-
session[output_collection].find
|
|
271
|
+
query = session[output_collection].find
|
|
272
|
+
query.no_timeout if criteria.options[:timeout] == false
|
|
273
|
+
query
|
|
272
274
|
end
|
|
273
275
|
|
|
274
276
|
# Get the collection that the map/reduce results were stored in.
|
|
@@ -314,7 +316,7 @@ module Mongoid
|
|
|
314
316
|
# @since 3.0.15
|
|
315
317
|
def __session__
|
|
316
318
|
if command[:out][:inline] != 1
|
|
317
|
-
session.with(
|
|
319
|
+
session.with(read: :primary)
|
|
318
320
|
else
|
|
319
321
|
session
|
|
320
322
|
end
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require "mongoid/contextual/aggregable/memory"
|
|
3
|
+
require "mongoid/relations/eager"
|
|
3
4
|
|
|
4
5
|
module Mongoid
|
|
5
6
|
module Contextual
|
|
6
7
|
class Memory
|
|
7
8
|
include Enumerable
|
|
8
9
|
include Aggregable::Memory
|
|
9
|
-
include Eager
|
|
10
|
+
include Relations::Eager
|
|
10
11
|
include Queryable
|
|
11
|
-
include
|
|
12
|
+
include Positional
|
|
12
13
|
|
|
13
14
|
# @attribute [r] root The root document.
|
|
14
15
|
# @attribute [r] path The atomic path.
|
|
@@ -102,7 +103,7 @@ module Mongoid
|
|
|
102
103
|
documents_for_iteration.each do |doc|
|
|
103
104
|
yield(doc)
|
|
104
105
|
end
|
|
105
|
-
|
|
106
|
+
self
|
|
106
107
|
else
|
|
107
108
|
to_enum
|
|
108
109
|
end
|
|
@@ -130,7 +131,7 @@ module Mongoid
|
|
|
130
131
|
# @since 3.0.0
|
|
131
132
|
def first
|
|
132
133
|
doc = documents.first
|
|
133
|
-
eager_load_one(doc)
|
|
134
|
+
eager_load_one(doc)
|
|
134
135
|
doc
|
|
135
136
|
end
|
|
136
137
|
alias :one :first
|
|
@@ -164,7 +165,7 @@ module Mongoid
|
|
|
164
165
|
# @since 3.0.0
|
|
165
166
|
def last
|
|
166
167
|
doc = documents.last
|
|
167
|
-
eager_load_one(doc)
|
|
168
|
+
eager_load_one(doc)
|
|
168
169
|
doc
|
|
169
170
|
end
|
|
170
171
|
|
|
@@ -196,6 +197,17 @@ module Mongoid
|
|
|
196
197
|
self
|
|
197
198
|
end
|
|
198
199
|
|
|
200
|
+
def pluck(*fields)
|
|
201
|
+
fields = Array.wrap(fields)
|
|
202
|
+
documents.map do |doc|
|
|
203
|
+
if fields.size == 1
|
|
204
|
+
doc[fields.first]
|
|
205
|
+
else
|
|
206
|
+
fields.map { |n| doc[n] }.compact
|
|
207
|
+
end
|
|
208
|
+
end.compact
|
|
209
|
+
end
|
|
210
|
+
|
|
199
211
|
# Skips the provided number of documents.
|
|
200
212
|
#
|
|
201
213
|
# @example Skip the documents.
|
|
@@ -294,7 +306,7 @@ module Mongoid
|
|
|
294
306
|
updates["$set"].merge!(doc.atomic_updates["$set"] || {})
|
|
295
307
|
doc.move_changes
|
|
296
308
|
end
|
|
297
|
-
collection.find(selector).update(updates)
|
|
309
|
+
collection.find(selector).update(updates) unless updates["$set"].empty?
|
|
298
310
|
end
|
|
299
311
|
|
|
300
312
|
# Get the limiting value.
|