mongoid 3.1.6 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +479 -8
- data/README.md +10 -7
- data/lib/config/locales/en.yml +34 -20
- data/lib/mongoid.rb +10 -76
- data/lib/mongoid/atomic.rb +3 -14
- data/lib/mongoid/atomic/paths/embedded.rb +0 -30
- data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
- data/lib/mongoid/atomic/paths/root.rb +0 -13
- data/lib/mongoid/attributes.rb +65 -101
- data/lib/mongoid/attributes/dynamic.rb +154 -0
- data/lib/mongoid/attributes/nested.rb +82 -0
- data/lib/mongoid/attributes/processing.rb +13 -66
- data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
- data/lib/mongoid/composable.rb +105 -0
- data/lib/mongoid/config.rb +3 -9
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -0
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
- data/lib/mongoid/contextual/atomic.rb +53 -53
- data/lib/mongoid/contextual/geo_near.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +4 -2
- data/lib/mongoid/contextual/memory.rb +23 -11
- data/lib/mongoid/contextual/mongo.rb +75 -57
- data/lib/mongoid/contextual/none.rb +90 -0
- data/lib/mongoid/contextual/text_search.rb +178 -0
- data/lib/mongoid/copyable.rb +2 -3
- data/lib/mongoid/criteria.rb +39 -34
- data/lib/mongoid/criteria/#findable.rb# +141 -0
- data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
- data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
- data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
- data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
- data/lib/mongoid/criteria/permission.rb +70 -0
- data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
- data/lib/mongoid/document.rb +39 -24
- data/lib/mongoid/errors.rb +4 -1
- data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
- data/lib/mongoid/errors/document_not_found.rb +2 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
- data/lib/mongoid/errors/invalid_value.rb +16 -0
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/errors/readonly_document.rb +24 -0
- data/lib/mongoid/extensions.rb +15 -7
- data/lib/mongoid/extensions/array.rb +3 -3
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/boolean.rb +15 -17
- data/lib/mongoid/extensions/date.rb +1 -1
- data/lib/mongoid/extensions/date_time.rb +3 -3
- data/lib/mongoid/extensions/float.rb +2 -1
- data/lib/mongoid/extensions/hash.rb +3 -3
- data/lib/mongoid/extensions/integer.rb +1 -1
- data/lib/mongoid/extensions/object.rb +7 -7
- data/lib/mongoid/extensions/object_id.rb +5 -5
- data/lib/mongoid/extensions/range.rb +9 -3
- data/lib/mongoid/extensions/regexp.rb +1 -1
- data/lib/mongoid/extensions/set.rb +1 -1
- data/lib/mongoid/extensions/string.rb +6 -18
- data/lib/mongoid/extensions/symbol.rb +1 -1
- data/lib/mongoid/extensions/time.rb +3 -3
- data/lib/mongoid/extensions/time_with_zone.rb +1 -1
- data/lib/mongoid/factory.rb +8 -6
- data/lib/mongoid/fields.rb +41 -8
- data/lib/mongoid/fields/foreign_key.rb +3 -3
- data/lib/mongoid/fields/localized.rb +1 -1
- data/lib/mongoid/fields/standard.rb +5 -17
- data/lib/mongoid/fields/validators/macro.rb +15 -5
- data/lib/mongoid/{finders.rb → findable.rb} +35 -7
- data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
- data/lib/mongoid/indexable/specification.rb +104 -0
- data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
- data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
- data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
- data/lib/mongoid/log_subscriber.rb +55 -0
- data/lib/mongoid/matchable.rb +152 -0
- data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
- data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
- data/lib/mongoid/persistable.rb +216 -0
- data/lib/mongoid/persistable/creatable.rb +189 -0
- data/lib/mongoid/persistable/deletable.rb +149 -0
- data/lib/mongoid/persistable/destroyable.rb +60 -0
- data/lib/mongoid/persistable/incrementable.rb +36 -0
- data/lib/mongoid/persistable/logical.rb +38 -0
- data/lib/mongoid/persistable/poppable.rb +39 -0
- data/lib/mongoid/persistable/pullable.rb +55 -0
- data/lib/mongoid/persistable/pushable.rb +62 -0
- data/lib/mongoid/persistable/renamable.rb +35 -0
- data/lib/mongoid/persistable/savable.rb +52 -0
- data/lib/mongoid/persistable/settable.rb +33 -0
- data/lib/mongoid/persistable/unsettable.rb +36 -0
- data/lib/mongoid/persistable/updatable.rb +153 -0
- data/lib/mongoid/persistable/upsertable.rb +55 -0
- data/lib/mongoid/positional.rb +71 -0
- data/lib/mongoid/query_cache.rb +255 -0
- data/lib/mongoid/railtie.rb +34 -60
- data/lib/mongoid/railties/database.rake +9 -25
- data/lib/mongoid/relations.rb +11 -25
- data/lib/mongoid/relations/accessors.rb +15 -51
- data/lib/mongoid/relations/auto_save.rb +15 -36
- data/lib/mongoid/relations/binding.rb +2 -25
- data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
- data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
- data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
- data/lib/mongoid/relations/builder.rb +1 -1
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
- data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
- data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
- data/lib/mongoid/relations/cascading.rb +3 -5
- data/lib/mongoid/relations/constraint.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/counter_cache.rb +39 -15
- data/lib/mongoid/relations/eager.rb +46 -0
- data/lib/mongoid/relations/eager/base.rb +149 -0
- data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
- data/lib/mongoid/relations/eager/has_many.rb +38 -0
- data/lib/mongoid/relations/eager/has_one.rb +30 -0
- data/lib/mongoid/relations/embedded/batchable.rb +4 -5
- data/lib/mongoid/relations/embedded/in.rb +4 -4
- data/lib/mongoid/relations/embedded/many.rb +14 -32
- data/lib/mongoid/relations/embedded/one.rb +1 -1
- data/lib/mongoid/relations/macros.rb +3 -4
- data/lib/mongoid/relations/many.rb +51 -31
- data/lib/mongoid/relations/marshalable.rb +3 -3
- data/lib/mongoid/relations/metadata.rb +14 -79
- data/lib/mongoid/relations/nested_builder.rb +2 -2
- data/lib/mongoid/relations/one.rb +1 -1
- data/lib/mongoid/relations/options.rb +1 -0
- data/lib/mongoid/relations/polymorphic.rb +0 -1
- data/lib/mongoid/relations/proxy.rb +21 -41
- data/lib/mongoid/relations/referenced/in.rb +4 -20
- data/lib/mongoid/relations/referenced/many.rb +22 -35
- data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
- data/lib/mongoid/relations/referenced/one.rb +6 -25
- data/lib/mongoid/relations/synchronization.rb +4 -4
- data/lib/mongoid/relations/targets/enumerable.rb +10 -10
- data/lib/mongoid/relations/touchable.rb +34 -1
- data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
- data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
- data/lib/mongoid/selectable.rb +59 -0
- data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
- data/lib/mongoid/sessions.rb +37 -345
- data/lib/mongoid/sessions/factory.rb +2 -0
- data/lib/mongoid/sessions/options.rb +185 -0
- data/lib/mongoid/sessions/storage_options.rb +140 -0
- data/lib/mongoid/sessions/thread_options.rb +19 -0
- data/lib/mongoid/sessions/validators/storage.rb +16 -3
- data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
- data/lib/mongoid/{state.rb → stateful.rb} +13 -1
- data/lib/mongoid/support/query_counter.rb +23 -0
- data/lib/mongoid/tasks/database.rake +31 -0
- data/lib/mongoid/tasks/database.rb +107 -0
- data/lib/mongoid/threaded.rb +26 -172
- data/lib/mongoid/threaded/lifecycle.rb +0 -28
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
- data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
- data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
- data/lib/mongoid/{validations → validatable}/format.rb +1 -1
- data/lib/mongoid/{validations → validatable}/length.rb +1 -1
- data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
- data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
- data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
- data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
- data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
- data/lib/rails/generators/mongoid_generator.rb +3 -40
- data/lib/rails/mongoid.rb +0 -122
- data/lib/support/ruby_version.rb +1 -1
- data/spec/app/models/account.rb +2 -6
- data/spec/app/models/acolyte.rb +2 -1
- data/spec/app/models/actor.rb +0 -1
- data/spec/app/models/address.rb +8 -3
- data/spec/app/models/animal.rb +1 -1
- data/spec/app/models/appointment.rb +3 -3
- data/spec/app/models/article.rb +1 -4
- data/spec/app/models/audio.rb +5 -0
- data/spec/app/models/author.rb +0 -2
- data/spec/app/models/band.rb +3 -2
- data/spec/app/models/bar.rb +1 -0
- data/spec/app/models/book.rb +1 -0
- data/spec/app/models/building.rb +0 -2
- data/spec/app/models/building_address.rb +0 -2
- data/spec/app/models/bus.rb +1 -1
- data/spec/app/models/canvas.rb +1 -1
- data/spec/app/models/contextable_item.rb +5 -0
- data/spec/app/models/contractor.rb +0 -2
- data/spec/app/models/country_code.rb +1 -1
- data/spec/app/models/definition.rb +2 -2
- data/spec/app/models/dog.rb +1 -1
- data/spec/app/models/draft.rb +9 -0
- data/spec/app/models/dragon.rb +4 -0
- data/spec/app/models/drug.rb +1 -3
- data/spec/app/models/dungeon.rb +4 -0
- data/spec/app/models/edit.rb +5 -0
- data/spec/app/models/even.rb +7 -0
- data/spec/app/models/event.rb +1 -1
- data/spec/app/models/filesystem.rb +1 -0
- data/spec/app/models/fish.rb +0 -1
- data/spec/app/models/fruits.rb +6 -0
- data/spec/app/models/game.rb +0 -2
- data/spec/app/models/house.rb +1 -3
- data/spec/app/models/id_key.rb +6 -0
- data/spec/app/models/item.rb +1 -5
- data/spec/app/models/jar.rb +1 -1
- data/spec/app/models/label.rb +4 -4
- data/spec/app/models/line_item.rb +1 -1
- data/spec/app/models/login.rb +1 -1
- data/spec/app/models/message.rb +8 -0
- data/spec/app/models/movie.rb +1 -0
- data/spec/app/models/name.rb +3 -3
- data/spec/app/models/note.rb +3 -1
- data/spec/app/models/odd.rb +7 -0
- data/spec/app/models/oscar.rb +1 -1
- data/spec/app/models/parent_doc.rb +1 -1
- data/spec/app/models/person.rb +16 -10
- data/spec/app/models/phone.rb +1 -3
- data/spec/app/models/player.rb +3 -3
- data/spec/app/models/post.rb +5 -3
- data/spec/app/models/preference.rb +1 -1
- data/spec/app/models/quiz.rb +0 -3
- data/spec/app/models/record.rb +10 -5
- data/spec/app/models/registry.rb +1 -1
- data/spec/app/models/server.rb +1 -1
- data/spec/app/models/service.rb +3 -3
- data/spec/app/models/sound.rb +5 -0
- data/spec/app/models/symptom.rb +1 -1
- data/spec/app/models/template.rb +1 -1
- data/spec/app/models/title.rb +0 -1
- data/spec/app/models/track.rb +5 -5
- data/spec/app/models/tree.rb +3 -3
- data/spec/app/models/video.rb +1 -5
- data/spec/app/models/wiki_page.rb +2 -5
- data/spec/app/models/word.rb +3 -0
- data/spec/app/models/word_origin.rb +1 -1
- data/spec/config/mongoid.yml +7 -8
- data/spec/helpers.rb +18 -0
- data/spec/mongoid/#atomic_spec.rb# +365 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
- data/spec/mongoid/atomic/paths_spec.rb +19 -19
- data/spec/mongoid/atomic_spec.rb +19 -19
- data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
- data/spec/mongoid/attributes/readonly_spec.rb +58 -18
- data/spec/mongoid/attributes_spec.rb +349 -434
- data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
- data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
- data/spec/mongoid/config/environment_spec.rb +3 -3
- data/spec/mongoid/config/options_spec.rb +6 -6
- data/spec/mongoid/config_spec.rb +24 -48
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
- data/spec/mongoid/contextual/atomic_spec.rb +60 -56
- data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
- data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
- data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
- data/spec/mongoid/contextual/memory_spec.rb +156 -94
- data/spec/mongoid/contextual/mongo_spec.rb +238 -150
- data/spec/mongoid/contextual/none_spec.rb +127 -0
- data/spec/mongoid/contextual/text_search_spec.rb +209 -0
- data/spec/mongoid/copyable_spec.rb +56 -68
- data/spec/mongoid/criteria/findable_spec.rb +991 -0
- data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
- data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
- data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
- data/spec/mongoid/criteria_spec.rb +715 -2421
- data/spec/mongoid/document_spec.rb +171 -121
- data/spec/mongoid/equality_spec.rb +22 -22
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
- data/spec/mongoid/errors/callback_spec.rb +3 -3
- data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
- data/spec/mongoid/errors/eager_load_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
- data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
- data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
- data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
- data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
- data/spec/mongoid/errors/no_parent_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
- data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
- data/spec/mongoid/errors/validations_spec.rb +7 -7
- data/spec/mongoid/extensions/array_spec.rb +61 -61
- data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
- data/spec/mongoid/extensions/binary_spec.rb +12 -12
- data/spec/mongoid/extensions/boolean_spec.rb +18 -18
- data/spec/mongoid/extensions/date_spec.rb +13 -13
- data/spec/mongoid/extensions/date_time_spec.rb +8 -8
- data/spec/mongoid/extensions/false_class_spec.rb +5 -5
- data/spec/mongoid/extensions/float_spec.rb +29 -15
- data/spec/mongoid/extensions/hash_spec.rb +29 -29
- data/spec/mongoid/extensions/integer_spec.rb +15 -15
- data/spec/mongoid/extensions/module_spec.rb +2 -2
- data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/extensions/object_id_spec.rb +134 -134
- data/spec/mongoid/extensions/object_spec.rb +26 -26
- data/spec/mongoid/extensions/range_spec.rb +61 -12
- data/spec/mongoid/extensions/regexp_spec.rb +4 -4
- data/spec/mongoid/extensions/set_spec.rb +4 -4
- data/spec/mongoid/extensions/string_spec.rb +35 -46
- data/spec/mongoid/extensions/symbol_spec.rb +9 -9
- data/spec/mongoid/extensions/time_spec.rb +49 -49
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
- data/spec/mongoid/extensions/true_class_spec.rb +5 -5
- data/spec/mongoid/extensions_spec.rb +29 -0
- data/spec/mongoid/factory_spec.rb +15 -15
- data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
- data/spec/mongoid/fields/localized_spec.rb +38 -23
- data/spec/mongoid/fields/standard_spec.rb +12 -12
- data/spec/mongoid/fields_spec.rb +263 -217
- data/spec/mongoid/findable_spec.rb +509 -0
- data/spec/mongoid/indexable/specification_spec.rb +102 -0
- data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
- data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
- data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
- data/spec/mongoid/log_subscriber_spec.rb +75 -0
- data/spec/mongoid/loggable_spec.rb +1 -1
- data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
- data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
- data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
- data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
- data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
- data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
- data/spec/mongoid/matchable/in_spec.rb +49 -0
- data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
- data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
- data/spec/mongoid/matchable/ne_spec.rb +46 -0
- data/spec/mongoid/matchable/nin_spec.rb +48 -0
- data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
- data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
- data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
- data/spec/mongoid/persistable/creatable_spec.rb +553 -0
- data/spec/mongoid/persistable/deletable_spec.rb +218 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
- data/spec/mongoid/persistable/logical_spec.rb +143 -0
- data/spec/mongoid/persistable/poppable_spec.rb +115 -0
- data/spec/mongoid/persistable/pullable_spec.rb +228 -0
- data/spec/mongoid/persistable/pushable_spec.rb +258 -0
- data/spec/mongoid/persistable/renamable_spec.rb +135 -0
- data/spec/mongoid/persistable/savable_spec.rb +498 -0
- data/spec/mongoid/persistable/settable_spec.rb +162 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
- data/spec/mongoid/persistable/updatable_spec.rb +558 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
- data/spec/mongoid/persistable_spec.rb +206 -0
- data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
- data/spec/mongoid/query_cache_spec.rb +263 -0
- data/spec/mongoid/railties/document_spec.rb +2 -2
- data/spec/mongoid/relations/accessors_spec.rb +53 -145
- data/spec/mongoid/relations/auto_save_spec.rb +37 -17
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
- data/spec/mongoid/relations/builders_spec.rb +21 -21
- data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
- data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
- data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
- data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
- data/spec/mongoid/relations/cascading_spec.rb +16 -16
- data/spec/mongoid/relations/constraint_spec.rb +8 -7
- data/spec/mongoid/relations/conversions_spec.rb +16 -14
- data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
- data/spec/mongoid/relations/cyclic_spec.rb +18 -18
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
- data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
- data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
- data/spec/mongoid/relations/eager_spec.rb +228 -0
- data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
- data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
- data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
- data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
- data/spec/mongoid/relations/macros_spec.rb +108 -102
- data/spec/mongoid/relations/metadata_spec.rb +180 -255
- data/spec/mongoid/relations/options_spec.rb +1 -1
- data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
- data/spec/mongoid/relations/proxy_spec.rb +2 -2
- data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
- data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
- data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
- data/spec/mongoid/relations/reflections_spec.rb +6 -6
- data/spec/mongoid/relations/synchronization_spec.rb +46 -50
- data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
- data/spec/mongoid/relations/touchable_spec.rb +333 -0
- data/spec/mongoid/relations_spec.rb +16 -15
- data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
- data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
- data/spec/mongoid/selectable_spec.rb +134 -0
- data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
- data/spec/mongoid/sessions/factory_spec.rb +49 -28
- data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
- data/spec/mongoid/sessions/options_spec.rb +108 -0
- data/spec/mongoid/sessions_spec.rb +319 -178
- data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
- data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
- data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
- data/spec/mongoid/tasks/database_spec.rb +160 -0
- data/spec/mongoid/threaded_spec.rb +17 -70
- data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
- data/spec/mongoid/timestamps/created_spec.rb +5 -5
- data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
- data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
- data/spec/mongoid/timestamps/updated_spec.rb +9 -13
- data/spec/mongoid/timestamps_spec.rb +9 -13
- data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
- data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
- data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
- data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
- data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
- data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
- data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
- data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
- data/spec/mongoid_spec.rb +8 -8
- data/spec/rails/mongoid_spec.rb +19 -335
- data/spec/spec_helper.rb +31 -13
- metadata +303 -283
- data/lib/mongoid/atomic/positionable.rb +0 -73
- data/lib/mongoid/components.rb +0 -92
- data/lib/mongoid/config/inflections.rb +0 -6
- data/lib/mongoid/contextual/eager.rb +0 -158
- data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
- data/lib/mongoid/identity_map.rb +0 -163
- data/lib/mongoid/json.rb +0 -16
- data/lib/mongoid/matchers.rb +0 -32
- data/lib/mongoid/matchers/strategies.rb +0 -97
- data/lib/mongoid/multi_parameter_attributes.rb +0 -105
- data/lib/mongoid/nested_attributes.rb +0 -78
- data/lib/mongoid/observer.rb +0 -192
- data/lib/mongoid/paranoia.rb +0 -136
- data/lib/mongoid/persistence.rb +0 -357
- data/lib/mongoid/persistence/atomic.rb +0 -231
- data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
- data/lib/mongoid/persistence/atomic/bit.rb +0 -35
- data/lib/mongoid/persistence/atomic/inc.rb +0 -45
- data/lib/mongoid/persistence/atomic/operation.rb +0 -154
- data/lib/mongoid/persistence/atomic/pop.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
- data/lib/mongoid/persistence/atomic/push.rb +0 -25
- data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
- data/lib/mongoid/persistence/atomic/rename.rb +0 -30
- data/lib/mongoid/persistence/atomic/sets.rb +0 -28
- data/lib/mongoid/persistence/atomic/unset.rb +0 -27
- data/lib/mongoid/persistence/deletion.rb +0 -31
- data/lib/mongoid/persistence/insertion.rb +0 -38
- data/lib/mongoid/persistence/modification.rb +0 -35
- data/lib/mongoid/persistence/operations.rb +0 -214
- data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
- data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
- data/lib/mongoid/persistence/operations/insert.rb +0 -34
- data/lib/mongoid/persistence/operations/remove.rb +0 -33
- data/lib/mongoid/persistence/operations/update.rb +0 -59
- data/lib/mongoid/persistence/operations/upsert.rb +0 -28
- data/lib/mongoid/persistence/upsertion.rb +0 -31
- data/lib/mongoid/unit_of_work.rb +0 -61
- data/lib/mongoid/versioning.rb +0 -217
- data/lib/rack/mongoid.rb +0 -2
- data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
- data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
- data/spec/app/models/actor_observer.rb +0 -15
- data/spec/app/models/callback_recorder.rb +0 -25
- data/spec/app/models/paranoid_phone.rb +0 -25
- data/spec/app/models/paranoid_post.rb +0 -36
- data/spec/app/models/phone_observer.rb +0 -6
- data/spec/mongoid/attributes/processing_spec.rb +0 -149
- data/spec/mongoid/criterion/destructive_spec.rb +0 -101
- data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
- data/spec/mongoid/criterion/modification_spec.rb +0 -402
- data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
- data/spec/mongoid/finders_spec.rb +0 -321
- data/spec/mongoid/identity_map_spec.rb +0 -564
- data/spec/mongoid/json_spec.rb +0 -33
- data/spec/mongoid/matchers/in_spec.rb +0 -25
- data/spec/mongoid/matchers/ne_spec.rb +0 -25
- data/spec/mongoid/matchers/nin_spec.rb +0 -25
- data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
- data/spec/mongoid/observer_spec.rb +0 -290
- data/spec/mongoid/paranoia_spec.rb +0 -759
- data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
- data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
- data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
- data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
- data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
- data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
- data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
- data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
- data/spec/mongoid/persistence/atomic_spec.rb +0 -216
- data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
- data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
- data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
- data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
- data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
- data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
- data/spec/mongoid/persistence/operations_spec.rb +0 -313
- data/spec/mongoid/persistence_spec.rb +0 -2279
- data/spec/mongoid/unit_of_work_spec.rb +0 -196
- data/spec/mongoid/versioning_spec.rb +0 -540
- data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -1,73 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Atomic
|
4
|
-
|
5
|
-
# This module is responsible for taking update selectors and switching out
|
6
|
-
# the indexes for the $ positional operator where appropriate.
|
7
|
-
#
|
8
|
-
# @since 3.1.0
|
9
|
-
module Positionable
|
10
|
-
|
11
|
-
# Takes the provided selector and atomic operations and replaces the
|
12
|
-
# indexes of the embedded documents with the positional operator when
|
13
|
-
# needed.
|
14
|
-
#
|
15
|
-
# @note The only time we can accurately know when to use the positional
|
16
|
-
# operator is at the exact time we are going to persist something. So
|
17
|
-
# we can tell by the selector that we are sending if it is actually
|
18
|
-
# possible to use the positional operator at all. For example, if the
|
19
|
-
# selector is: { "_id" => 1 }, then we could not use the positional
|
20
|
-
# operator for updating embedded documents since there would never be a
|
21
|
-
# match - we base whether we can based on the number of levels deep the
|
22
|
-
# selector goes, and if the id values are not nil.
|
23
|
-
#
|
24
|
-
# @example Process the operations.
|
25
|
-
# positionally(
|
26
|
-
# { "_id" => 1, "addresses._id" => 2 },
|
27
|
-
# { "$set" => { "addresses.0.street" => "hobrecht" }}
|
28
|
-
# )
|
29
|
-
#
|
30
|
-
# @param [ Hash ] selector The selector.
|
31
|
-
# @param [ Hash ] operations The update operations.
|
32
|
-
# @param [ Hash ] processed The processed update operations.
|
33
|
-
#
|
34
|
-
# @return [ Hash ] The new operations.
|
35
|
-
#
|
36
|
-
# @since 3.1.0
|
37
|
-
def positionally(selector, operations, processed = {})
|
38
|
-
if selector.size == 1 || selector.values.any? { |val| val.nil? }
|
39
|
-
return operations
|
40
|
-
end
|
41
|
-
keys = selector.keys.map{ |m| m.sub('._id','') } - ['_id']
|
42
|
-
keys = keys.sort_by { |s| s.length*-1 }
|
43
|
-
process_operations(keys, operations, processed)
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def process_operations(keys, operations, processed)
|
49
|
-
operations.each_pair do |operation, update|
|
50
|
-
processed[operation] = process_updates(keys, update)
|
51
|
-
end
|
52
|
-
processed
|
53
|
-
end
|
54
|
-
|
55
|
-
def process_updates(keys, update, updates = {})
|
56
|
-
update.each_pair do |position, value|
|
57
|
-
updates[replace_index(keys, position)] = value
|
58
|
-
end
|
59
|
-
updates
|
60
|
-
end
|
61
|
-
|
62
|
-
def replace_index(keys, position)
|
63
|
-
# replace to $ only if that key is on the selector
|
64
|
-
keys.each do |kk|
|
65
|
-
if position =~ /^#{kk}\.\d+\.(.*)/
|
66
|
-
return "#{kk}.$.#{$1}"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
position
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
data/lib/mongoid/components.rb
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Components
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
# All modules that a +Document+ is composed of are defined in this
|
7
|
-
# module, to keep the document class from getting too cluttered.
|
8
|
-
included do
|
9
|
-
extend ActiveModel::Translation
|
10
|
-
extend Mongoid::Finders
|
11
|
-
|
12
|
-
class_attribute :paranoid
|
13
|
-
end
|
14
|
-
|
15
|
-
include ActiveModel::Conversion
|
16
|
-
include ActiveModel::MassAssignmentSecurity
|
17
|
-
include ActiveModel::Naming
|
18
|
-
include ActiveModel::Observing
|
19
|
-
include ActiveModel::Serializers::JSON
|
20
|
-
include ActiveModel::Serializers::Xml
|
21
|
-
include Mongoid::Atomic
|
22
|
-
include Mongoid::Dirty
|
23
|
-
include Mongoid::Attributes
|
24
|
-
include Mongoid::Evolvable
|
25
|
-
include Mongoid::Fields
|
26
|
-
include Mongoid::Hierarchy
|
27
|
-
include Mongoid::Indexes
|
28
|
-
include Mongoid::Inspection
|
29
|
-
include Mongoid::JSON
|
30
|
-
include Mongoid::Matchers
|
31
|
-
include Mongoid::NestedAttributes
|
32
|
-
include Mongoid::Persistence
|
33
|
-
include Mongoid::Relations
|
34
|
-
include Mongoid::Reloading
|
35
|
-
include Mongoid::Scoping
|
36
|
-
include Mongoid::Sessions
|
37
|
-
include Mongoid::Serialization
|
38
|
-
include Mongoid::Sharding
|
39
|
-
include Mongoid::State
|
40
|
-
include Mongoid::Threaded::Lifecycle
|
41
|
-
include Mongoid::Validations
|
42
|
-
include Mongoid::Callbacks
|
43
|
-
include Mongoid::Copyable
|
44
|
-
include Mongoid::Equality
|
45
|
-
|
46
|
-
MODULES = [
|
47
|
-
Mongoid::Atomic,
|
48
|
-
Mongoid::Attributes,
|
49
|
-
Mongoid::Callbacks,
|
50
|
-
Mongoid::Copyable,
|
51
|
-
Mongoid::Dirty,
|
52
|
-
Mongoid::Evolvable,
|
53
|
-
Mongoid::Fields,
|
54
|
-
Mongoid::Hierarchy,
|
55
|
-
Mongoid::Indexes,
|
56
|
-
Mongoid::Inspection,
|
57
|
-
Mongoid::JSON,
|
58
|
-
Mongoid::Matchers,
|
59
|
-
Mongoid::NestedAttributes,
|
60
|
-
Mongoid::Persistence,
|
61
|
-
Mongoid::Relations,
|
62
|
-
Mongoid::Reloading,
|
63
|
-
Mongoid::Scoping,
|
64
|
-
Mongoid::Serialization,
|
65
|
-
Mongoid::Sessions,
|
66
|
-
Mongoid::Sharding,
|
67
|
-
Mongoid::State,
|
68
|
-
Mongoid::Threaded::Lifecycle,
|
69
|
-
Mongoid::Timestamps::Timeless,
|
70
|
-
Mongoid::Validations,
|
71
|
-
Mongoid::Equality
|
72
|
-
]
|
73
|
-
|
74
|
-
class << self
|
75
|
-
|
76
|
-
# Get a list of methods that would be a bad idea to define as field names
|
77
|
-
# or override when including Mongoid::Document.
|
78
|
-
#
|
79
|
-
# @example Bad thing!
|
80
|
-
# Mongoid::Components.prohibited_methods
|
81
|
-
#
|
82
|
-
# @return [ Array<Symbol> ]
|
83
|
-
#
|
84
|
-
# @since 2.1.8
|
85
|
-
def prohibited_methods
|
86
|
-
@prohibited_methods ||= MODULES.flat_map do |mod|
|
87
|
-
mod.instance_methods.map{ |m| m.to_sym }
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
@@ -1,158 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Contextual
|
4
|
-
module Eager
|
5
|
-
|
6
|
-
# @attribute [rw] eager_loaded Has the context been eager loaded?
|
7
|
-
attr_accessor :eager_loaded
|
8
|
-
|
9
|
-
private
|
10
|
-
|
11
|
-
# Eager load the inclusions for the provided documents.
|
12
|
-
#
|
13
|
-
# @api private
|
14
|
-
#
|
15
|
-
# @example Eager load the inclusions.
|
16
|
-
# context.eager_load(docs)
|
17
|
-
#
|
18
|
-
# @param [ Array<Document> ] docs The docs returning from the db.
|
19
|
-
#
|
20
|
-
# @return [ true ] Always true.
|
21
|
-
#
|
22
|
-
# @since 3.0.0
|
23
|
-
def eager_load(docs)
|
24
|
-
load_inclusions(docs)
|
25
|
-
self.eager_loaded = true
|
26
|
-
end
|
27
|
-
|
28
|
-
# Eager load the inclusions for the provided document.
|
29
|
-
#
|
30
|
-
# @api private
|
31
|
-
#
|
32
|
-
# @example Eager load the inclusions.
|
33
|
-
# context.eager_load(doc)
|
34
|
-
#
|
35
|
-
# @param [ Document ] doc The doc returning from the db.
|
36
|
-
#
|
37
|
-
# @return [ true ] Always true.
|
38
|
-
#
|
39
|
-
# @since 3.0.16
|
40
|
-
def eager_load_one(doc)
|
41
|
-
load_inclusions([ doc ])
|
42
|
-
inclusions_loaded[doc.id] = true
|
43
|
-
end
|
44
|
-
|
45
|
-
# Get the ids that to be used to eager load documents.
|
46
|
-
#
|
47
|
-
# @api private
|
48
|
-
#
|
49
|
-
# @example Get the ids.
|
50
|
-
# context.eager_load(docs, metadata)
|
51
|
-
#
|
52
|
-
# @param [ Array<Document> ] docs The pre-loaded documents.
|
53
|
-
# @param [ Metadata ] metadata The relation metadata.
|
54
|
-
#
|
55
|
-
# @return [ Array<Object> ] The ids.
|
56
|
-
#
|
57
|
-
# @since 3.0.0
|
58
|
-
def eager_loaded_ids(docs, metadata)
|
59
|
-
if metadata.stores_foreign_key?
|
60
|
-
docs.flat_map{ |doc| doc.send(metadata.foreign_key) }
|
61
|
-
else
|
62
|
-
docs.map(&:id)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# Is this context able to be eager loaded?
|
67
|
-
#
|
68
|
-
# @api private
|
69
|
-
#
|
70
|
-
# @example Is the context eager loadable?
|
71
|
-
# context.eager_loadable?
|
72
|
-
#
|
73
|
-
# @example Is the single document eager loadable?
|
74
|
-
# context.eager_loadable?(document)
|
75
|
-
#
|
76
|
-
# @param [ Document ] document The single document to load for.
|
77
|
-
#
|
78
|
-
# @return [ true, false ] If the context is able to be eager loaded.
|
79
|
-
#
|
80
|
-
# @since 3.0.0
|
81
|
-
def eager_loadable?(document = nil)
|
82
|
-
return false if criteria.inclusions.empty?
|
83
|
-
document ? !inclusions_loaded?(document) : !eager_loaded
|
84
|
-
end
|
85
|
-
|
86
|
-
# Has a hash of individual documents that have had their relations reager
|
87
|
-
# loaded.
|
88
|
-
#
|
89
|
-
# @api private
|
90
|
-
#
|
91
|
-
# @example Get the documents with relations eager loaded.
|
92
|
-
# context.inclusions_loaded
|
93
|
-
#
|
94
|
-
# @return [ Hash ] The documents that have had eager loaded inclusions.
|
95
|
-
#
|
96
|
-
# @since 3.0.16
|
97
|
-
def inclusions_loaded
|
98
|
-
@inclusions_loaded ||= {}
|
99
|
-
end
|
100
|
-
|
101
|
-
# Has the document had its inclusions loaded?
|
102
|
-
#
|
103
|
-
# @api private
|
104
|
-
#
|
105
|
-
# @example Has the document had its inclusions loaded?
|
106
|
-
# context.inclusions_loaded?(document)
|
107
|
-
#
|
108
|
-
# @param [ Document ] document The document to check.
|
109
|
-
#
|
110
|
-
# @return [ true, false ] If the document had it's inclusions loaded.
|
111
|
-
#
|
112
|
-
# @since 3.0.16
|
113
|
-
def inclusions_loaded?(document)
|
114
|
-
inclusions_loaded.has_key?(document.id)
|
115
|
-
end
|
116
|
-
|
117
|
-
# Eager load the inclusions for the provided documents.
|
118
|
-
#
|
119
|
-
# @api private
|
120
|
-
#
|
121
|
-
# @example Eager load the inclusions.
|
122
|
-
# context.load_inclusions(docs)
|
123
|
-
#
|
124
|
-
# @param [ Array<Document> ] docs The docs returning from the db.
|
125
|
-
#
|
126
|
-
# @return [ true ] Always true.
|
127
|
-
#
|
128
|
-
# @since 3.0.16
|
129
|
-
def load_inclusions(docs)
|
130
|
-
criteria.inclusions.each do |metadata|
|
131
|
-
metadata.eager_load(eager_loaded_ids(docs, metadata)) if !docs.empty?
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
# If the provided document exists, eager load its dependencies or return
|
136
|
-
# nil.
|
137
|
-
#
|
138
|
-
# @api private
|
139
|
-
#
|
140
|
-
# @example Eager load if the document is not nil.
|
141
|
-
# context.with_eager_loading(document)
|
142
|
-
#
|
143
|
-
# @param [ Hash ] document The document from the database.
|
144
|
-
#
|
145
|
-
# @return [ Document, nil ] The instantiated model document.
|
146
|
-
#
|
147
|
-
# @since 3.0.0
|
148
|
-
def with_eager_loading(document)
|
149
|
-
selecting do
|
150
|
-
return nil unless document
|
151
|
-
doc = Factory.from_db(klass, document, criteria.object_id)
|
152
|
-
eager_load_one(doc) if eager_loadable?(doc)
|
153
|
-
doc
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Errors
|
4
|
-
|
5
|
-
# This error is raised when attempting to version an embedded document.
|
6
|
-
class VersioningNotOnRoot < MongoidError
|
7
|
-
|
8
|
-
# Create the new error.
|
9
|
-
#
|
10
|
-
# @example Create the new error.
|
11
|
-
# VersioningNotOnRoot.new(Address)
|
12
|
-
#
|
13
|
-
# @param [ Class ] klass The embedded class.
|
14
|
-
#
|
15
|
-
# @since 3.0.0
|
16
|
-
def initialize(klass)
|
17
|
-
super(
|
18
|
-
compose_message("versioning_not_on_root", { klass: klass })
|
19
|
-
)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/lib/mongoid/identity_map.rb
DELETED
@@ -1,163 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
|
4
|
-
# Defines behaviour for the identity map in Mongoid.
|
5
|
-
class IdentityMap < Hash
|
6
|
-
|
7
|
-
# Clear out the loaded documents for the provided selector.
|
8
|
-
#
|
9
|
-
# @example Clear out the documents.
|
10
|
-
# map.clear_many(Post, { person_id: person.id })
|
11
|
-
#
|
12
|
-
# @param [ Class ] klass The class of the relation.
|
13
|
-
# @param [ Hash ] selector The selector.
|
14
|
-
#
|
15
|
-
# @return [ Array ] An empty array.
|
16
|
-
#
|
17
|
-
# @since 2.4.10
|
18
|
-
def clear_many(klass, selector)
|
19
|
-
documents_for(klass)[selector] = {}
|
20
|
-
end
|
21
|
-
|
22
|
-
# Get a document from the identity map by its id.
|
23
|
-
#
|
24
|
-
# @example Get the document from the map.
|
25
|
-
# map.get(Person, id)
|
26
|
-
#
|
27
|
-
# @param [ Class ] klass The class of the document.
|
28
|
-
# @param [ Object, Hash ] idenfier The document id or selector.
|
29
|
-
#
|
30
|
-
# @return [ Document ] The matching document.
|
31
|
-
#
|
32
|
-
# @since 2.1.0
|
33
|
-
def get(klass, identifier)
|
34
|
-
if Mongoid.using_identity_map? && klass
|
35
|
-
if identifier.is_a?(::Array)
|
36
|
-
documents = documents_for(klass)
|
37
|
-
identifier.map do |id|
|
38
|
-
documents[id] || (return nil)
|
39
|
-
end
|
40
|
-
else
|
41
|
-
documents_for(klass)[identifier]
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Get many documents from the map via the selector
|
47
|
-
#
|
48
|
-
# @example Get the document from the map.
|
49
|
-
# map.get(Person, { post_id: post })
|
50
|
-
#
|
51
|
-
# @param [ Class ] klass The class of the document.
|
52
|
-
# @param [ Hash ] idenfier The selector.
|
53
|
-
#
|
54
|
-
# @return [ Array<Document> ] The matching documents.
|
55
|
-
#
|
56
|
-
# @since 3.0.0
|
57
|
-
def get_many(klass, identifier)
|
58
|
-
if Mongoid.using_identity_map? && klass
|
59
|
-
documents_for(klass)[identifier].try(:values)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# Remove the document from the identity map.
|
64
|
-
#
|
65
|
-
# @example Remove the document.
|
66
|
-
# map.removed(person)
|
67
|
-
#
|
68
|
-
# @param [ Document ] document The document to remove.
|
69
|
-
#
|
70
|
-
# @return [ Document, nil ] The removed document.
|
71
|
-
#
|
72
|
-
# @since 2.1.0
|
73
|
-
def remove(document)
|
74
|
-
if Mongoid.using_identity_map? && document && document.id
|
75
|
-
documents_for(document.class).delete(document.id)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# Puts a document in the identity map, accessed by its id.
|
80
|
-
#
|
81
|
-
# @example Put the document in the map.
|
82
|
-
# identity_map.set(document)
|
83
|
-
#
|
84
|
-
# @param [ Document ] document The document to place in the map.
|
85
|
-
#
|
86
|
-
# @return [ Document ] The provided document.
|
87
|
-
#
|
88
|
-
# @since 2.1.0
|
89
|
-
def set(document)
|
90
|
-
if Mongoid.using_identity_map? && document && document.id
|
91
|
-
documents_for(document.class)[document.id] = document
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
# Set a document in the identity map for the provided selector.
|
96
|
-
#
|
97
|
-
# @example Set the document in the map.
|
98
|
-
# identity_map.set_selector(document, { :person_id => person.id })
|
99
|
-
#
|
100
|
-
# @param [ Document ] document The document to set.
|
101
|
-
# @param [ Hash ] selector The selector to identify it.
|
102
|
-
#
|
103
|
-
# @return [ Array<Document> ] The documents.
|
104
|
-
#
|
105
|
-
# @since 2.2.0
|
106
|
-
def set_many(document, selector)
|
107
|
-
(documents_for(document.class)[selector] ||= {})[document.id] = document
|
108
|
-
end
|
109
|
-
|
110
|
-
# Set a document in the identity map for the provided selector.
|
111
|
-
#
|
112
|
-
# @example Set the document in the map.
|
113
|
-
# identity_map.set_selector(document, { :person_id => person.id })
|
114
|
-
#
|
115
|
-
# @param [ Document ] document The document to set.
|
116
|
-
# @param [ Hash ] selector The selector to identify it.
|
117
|
-
#
|
118
|
-
# @return [ Document ] The matching document.
|
119
|
-
#
|
120
|
-
# @since 2.2.0
|
121
|
-
def set_one(document, selector)
|
122
|
-
documents_for(document.class)[selector] = document
|
123
|
-
end
|
124
|
-
|
125
|
-
private
|
126
|
-
|
127
|
-
# Get the documents in the identity map for a specific class.
|
128
|
-
#
|
129
|
-
# @example Get the documents for the class.
|
130
|
-
# map.documents_for(Person)
|
131
|
-
#
|
132
|
-
# @param [ Class ] klass The class to retrieve.
|
133
|
-
#
|
134
|
-
# @return [ Hash ] The documents.
|
135
|
-
#
|
136
|
-
# @since 2.1.0
|
137
|
-
def documents_for(klass)
|
138
|
-
if klass
|
139
|
-
self[klass.collection_name] ||= {}
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
class << self
|
144
|
-
|
145
|
-
# For ease of access we provide the same API to the identity map on the
|
146
|
-
# class level, which in turn just gets the identity map that is on the
|
147
|
-
# current thread.
|
148
|
-
#
|
149
|
-
# @example Get a document from the current identity map by id.
|
150
|
-
# IdentityMap.get(id)
|
151
|
-
#
|
152
|
-
# @example Set a document in the current identity map.
|
153
|
-
# IdentityMap.set(document)
|
154
|
-
#
|
155
|
-
# @since 2.1.0
|
156
|
-
delegate(*(
|
157
|
-
Hash.public_instance_methods(false) +
|
158
|
-
IdentityMap.public_instance_methods(false) <<
|
159
|
-
{ to: :"Mongoid::Threaded.identity_map" }
|
160
|
-
))
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|