mongoid 3.1.7 → 4.0.0.alpha1
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 +317 -11
- data/README.md +4 -5
- data/lib/config/locales/en.yml +9 -12
- data/lib/mongoid.rb +6 -75
- data/lib/mongoid/atomic.rb +0 -11
- data/lib/mongoid/atomic/paths/embedded.rb +0 -30
- data/lib/mongoid/atomic/paths/root.rb +0 -13
- data/lib/mongoid/attributes.rb +30 -108
- 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} +5 -2
- data/lib/mongoid/composable.rb +104 -0
- data/lib/mongoid/config.rb +3 -9
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
- data/lib/mongoid/contextual/atomic.rb +53 -53
- data/lib/mongoid/contextual/command.rb +26 -0
- data/lib/mongoid/contextual/map_reduce.rb +1 -1
- data/lib/mongoid/contextual/memory.rb +6 -5
- data/lib/mongoid/contextual/mongo.rb +59 -28
- data/lib/mongoid/contextual/text_search.rb +180 -0
- data/lib/mongoid/copyable.rb +2 -3
- data/lib/mongoid/criteria.rb +13 -33
- data/lib/mongoid/criteria/{#findable.rb# → findable.rb} +0 -2
- 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 +1 -1
- data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
- data/lib/mongoid/document.rb +28 -12
- data/lib/mongoid/errors.rb +1 -1
- data/lib/mongoid/errors/document_not_found.rb +2 -1
- data/lib/mongoid/errors/invalid_value.rb +16 -0
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/extensions.rb +2 -7
- data/lib/mongoid/extensions/array.rb +2 -2
- data/lib/mongoid/extensions/boolean.rb +14 -17
- data/lib/mongoid/extensions/float.rb +1 -0
- data/lib/mongoid/extensions/hash.rb +1 -1
- data/lib/mongoid/extensions/object.rb +4 -4
- data/lib/mongoid/extensions/object_id.rb +5 -5
- data/lib/mongoid/extensions/range.rb +8 -2
- data/lib/mongoid/extensions/string.rb +5 -17
- data/lib/mongoid/extensions/time.rb +2 -2
- data/lib/mongoid/factory.rb +3 -3
- data/lib/mongoid/fields.rb +9 -8
- data/lib/mongoid/fields/foreign_key.rb +3 -3
- data/lib/mongoid/fields/standard.rb +4 -16
- data/lib/mongoid/fields/validators/macro.rb +11 -3
- data/lib/mongoid/{finders.rb → findable.rb} +6 -2
- 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} +3 -52
- data/lib/mongoid/log_subscriber.rb +22 -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 +1 -1
- data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
- data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
- data/lib/mongoid/persistable.rb +212 -0
- data/lib/mongoid/persistable/creatable.rb +188 -0
- data/lib/mongoid/persistable/deletable.rb +148 -0
- data/lib/mongoid/persistable/destroyable.rb +55 -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 +151 -0
- data/lib/mongoid/persistable/upsertable.rb +55 -0
- data/lib/mongoid/positional.rb +71 -0
- data/lib/mongoid/railtie.rb +32 -45
- data/lib/mongoid/railties/database.rake +12 -6
- data/lib/mongoid/relations.rb +3 -3
- data/lib/mongoid/relations/accessors.rb +13 -46
- data/lib/mongoid/relations/auto_save.rb +15 -36
- data/lib/mongoid/relations/binding.rb +0 -23
- 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.rb +2 -2
- 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/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 +47 -0
- data/lib/mongoid/relations/eager/base.rb +57 -0
- data/lib/mongoid/relations/eager/belongs_to.rb +30 -0
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +40 -0
- data/lib/mongoid/relations/eager/has_many.rb +37 -0
- data/lib/mongoid/relations/eager/has_one.rb +29 -0
- data/lib/mongoid/relations/embedded/batchable.rb +3 -4
- data/lib/mongoid/relations/embedded/many.rb +7 -27
- data/lib/mongoid/relations/macros.rb +2 -4
- data/lib/mongoid/relations/many.rb +30 -31
- data/lib/mongoid/relations/metadata.rb +6 -75
- 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 +10 -32
- data/lib/mongoid/relations/referenced/in.rb +2 -18
- data/lib/mongoid/relations/referenced/many.rb +9 -22
- data/lib/mongoid/relations/referenced/many_to_many.rb +10 -33
- data/lib/mongoid/relations/referenced/one.rb +2 -21
- data/lib/mongoid/relations/synchronization.rb +3 -3
- data/lib/mongoid/relations/touchable.rb +33 -0
- data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
- data/lib/mongoid/{scoping.rb → scopable.rb} +26 -3
- data/lib/mongoid/selectable.rb +59 -0
- data/lib/mongoid/{serialization.rb → serializable.rb} +10 -1
- data/lib/mongoid/sessions.rb +37 -345
- data/lib/mongoid/sessions/factory.rb +2 -0
- data/lib/mongoid/sessions/options.rb +176 -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 +15 -1
- data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
- data/lib/mongoid/support/query_counter.rb +23 -0
- data/lib/mongoid/threaded.rb +0 -110
- data/lib/mongoid/threaded/lifecycle.rb +0 -28
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
- data/lib/mongoid/{validations.rb → validatable.rb} +23 -9
- data/lib/mongoid/{validations → validatable}/associated.rb +3 -1
- 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 +3 -3
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +9 -13
- 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 +59 -57
- data/lib/support/ruby_version.rb +1 -1
- data/spec/app/models/account.rb +2 -6
- data/spec/app/models/acolyte.rb +1 -0
- data/spec/app/models/actor.rb +0 -1
- data/spec/app/models/address.rb +6 -1
- data/spec/app/models/animal.rb +1 -1
- data/spec/app/models/appointment.rb +2 -2
- 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/dragon.rb +4 -0
- data/spec/app/models/drug.rb +1 -3
- data/spec/app/models/dungeon.rb +4 -0
- 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 +0 -2
- 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/login.rb +1 -1
- data/spec/app/models/movie.rb +1 -0
- data/spec/app/models/name.rb +3 -3
- data/spec/app/models/note.rb +1 -1
- data/spec/app/models/oscar.rb +1 -1
- data/spec/app/models/parent_doc.rb +1 -1
- data/spec/app/models/person.rb +13 -8
- data/spec/app/models/phone.rb +1 -3
- data/spec/app/models/player.rb +1 -1
- data/spec/app/models/post.rb +2 -1
- data/spec/app/models/quiz.rb +0 -3
- data/spec/app/models/record.rb +5 -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/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 +1 -1
- data/spec/app/models/video.rb +0 -4
- data/spec/app/models/wiki_page.rb +1 -4
- 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 +16 -16
- data/spec/mongoid/attributes_spec.rb +188 -434
- data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +117 -148
- data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
- data/spec/mongoid/config/environment_spec.rb +3 -3
- data/spec/mongoid/config/options_spec.rb +6 -6
- data/spec/mongoid/config_spec.rb +24 -48
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +46 -38
- data/spec/mongoid/contextual/atomic_spec.rb +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 +94 -94
- data/spec/mongoid/contextual/mongo_spec.rb +225 -139
- data/spec/mongoid/contextual/text_search_spec.rb +207 -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 +1063 -0
- data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +31 -31
- data/spec/mongoid/criteria_spec.rb +530 -2207
- 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_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 +3 -3
- 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 +7 -7
- 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/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 +9 -9
- 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 +23 -23
- data/spec/mongoid/fields/standard_spec.rb +12 -12
- data/spec/mongoid/fields_spec.rb +168 -209
- data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +62 -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} +105 -105
- data/spec/mongoid/log_subscriber_spec.rb +74 -0
- data/spec/mongoid/loggable_spec.rb +1 -1
- data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
- data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
- data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
- data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
- data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
- data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
- data/spec/mongoid/matchable/in_spec.rb +49 -0
- data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
- data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
- data/spec/mongoid/{matchers → matchable}/ne_spec.rb +3 -3
- data/spec/mongoid/matchable/nin_spec.rb +48 -0
- data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
- data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
- data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
- data/spec/mongoid/persistable/creatable_spec.rb +512 -0
- data/spec/mongoid/persistable/deletable_spec.rb +205 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +148 -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 +432 -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} +19 -14
- 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 +36 -16
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +6 -6
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +2 -2
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +3 -3
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +12 -12
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +6 -6
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +9 -9
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +6 -6
- 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 +22 -33
- 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 +11 -24
- data/spec/mongoid/relations/builders_spec.rb +21 -21
- data/spec/mongoid/relations/cascading/delete_spec.rb +7 -7
- data/spec/mongoid/relations/cascading/destroy_spec.rb +2 -2
- data/spec/mongoid/relations/cascading/nullify_spec.rb +2 -2
- data/spec/mongoid/relations/cascading/restrict_spec.rb +3 -3
- 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 +143 -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 +55 -56
- data/spec/mongoid/relations/embedded/many_spec.rb +357 -367
- data/spec/mongoid/relations/embedded/one_spec.rb +98 -139
- data/spec/mongoid/relations/macros_spec.rb +108 -102
- data/spec/mongoid/relations/metadata_spec.rb +147 -241
- 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 +379 -522
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +345 -417
- data/spec/mongoid/relations/referenced/one_spec.rb +148 -263
- 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 +116 -116
- data/spec/mongoid/relations/touchable_spec.rb +296 -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} +74 -126
- data/spec/mongoid/selectable_spec.rb +134 -0
- data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +111 -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 +92 -0
- data/spec/mongoid/sessions_spec.rb +288 -177
- data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
- data/spec/mongoid/state_spec.rb +10 -10
- 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/updated/short_spec.rb +10 -10
- data/spec/mongoid/timestamps/updated_spec.rb +8 -12
- data/spec/mongoid/timestamps_spec.rb +7 -11
- data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
- data/spec/mongoid/{validations → validatable}/associated_spec.rb +18 -18
- data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
- data/spec/mongoid/{validations → validatable}/length_spec.rb +7 -7
- data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
- data/spec/mongoid/{validations → validatable}/presence_spec.rb +31 -38
- data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +126 -183
- data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
- data/spec/mongoid_spec.rb +8 -8
- data/spec/rails/mongoid_spec.rb +72 -87
- data/spec/spec_helper.rb +19 -17
- metadata +261 -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/criterion/findable.rb +0 -179
- 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/draft.rb +0 -9
- 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/#atomic_spec.rb# +0 -365
- 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/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,179 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Criterion
|
4
|
-
module Findable
|
5
|
-
|
6
|
-
# Execute the criteria or raise an error if no documents found.
|
7
|
-
#
|
8
|
-
# @example Execute or raise
|
9
|
-
# criteria.execute_or_raise(id)
|
10
|
-
#
|
11
|
-
# @param [ Object ] args The arguments passed.
|
12
|
-
#
|
13
|
-
# @raise [ Errors::DocumentNotFound ] If nothing returned.
|
14
|
-
#
|
15
|
-
# @return [ Document, Array<Document> ] The document(s).
|
16
|
-
#
|
17
|
-
# @since 2.0.0
|
18
|
-
def execute_or_raise(ids, multi)
|
19
|
-
result = multiple_from_map_or_db(ids)
|
20
|
-
check_for_missing_documents!(result, ids)
|
21
|
-
multi ? result : result.first
|
22
|
-
end
|
23
|
-
|
24
|
-
# Find the matchind document(s) in the criteria for the provided ids.
|
25
|
-
#
|
26
|
-
# @example Find by an id.
|
27
|
-
# criteria.find(Moped::BSON::ObjectId.new)
|
28
|
-
#
|
29
|
-
# @example Find by multiple ids.
|
30
|
-
# criteria.find([ Moped::BSON::ObjectId.new, Moped::BSON::ObjectId.new ])
|
31
|
-
#
|
32
|
-
# @param [ Array<Moped::BSON::ObjectId> ] args The ids to search for.
|
33
|
-
#
|
34
|
-
# @return [ Array<Document>, Document ] The matching document(s).
|
35
|
-
#
|
36
|
-
# @since 1.0.0
|
37
|
-
def find(*args)
|
38
|
-
ids = args.__find_args__
|
39
|
-
raise_invalid if ids.any?(&:nil?)
|
40
|
-
for_ids(ids).execute_or_raise(ids, args.multi_arged?)
|
41
|
-
end
|
42
|
-
|
43
|
-
# Adds a criterion to the +Criteria+ that specifies an id that must be matched.
|
44
|
-
#
|
45
|
-
# @example Add a single id criteria.
|
46
|
-
# criteria.for_ids([ 1 ])
|
47
|
-
#
|
48
|
-
# @example Add multiple id criteria.
|
49
|
-
# criteria.for_ids([ 1, 2 ])
|
50
|
-
#
|
51
|
-
# @param [ Array ] ids The array of ids.
|
52
|
-
#
|
53
|
-
# @return [ Criteria ] The cloned criteria.
|
54
|
-
def for_ids(ids)
|
55
|
-
ids = mongoize_ids(ids)
|
56
|
-
if ids.size > 1
|
57
|
-
send(id_finder, { _id: { "$in" => ids }})
|
58
|
-
else
|
59
|
-
send(id_finder, { _id: ids.first })
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# Get the document from the identity map, and if not found hit the
|
64
|
-
# database.
|
65
|
-
#
|
66
|
-
# @example Get the document from the map or criteria.
|
67
|
-
# criteria.from_map_or_db
|
68
|
-
#
|
69
|
-
# @return [ Document ] The found document.
|
70
|
-
#
|
71
|
-
# @since 2.2.1
|
72
|
-
def from_map_or_db
|
73
|
-
id = extract_id
|
74
|
-
id = klass.fields["_id"].mongoize(id) if id
|
75
|
-
doc = IdentityMap.get(klass, id || selector_with_type_selection)
|
76
|
-
return nil if doc == {}
|
77
|
-
doc && doc.matches?(selector) ? doc : first
|
78
|
-
end
|
79
|
-
|
80
|
-
# Get the documents from the identity map, and if not found hit the
|
81
|
-
# database.
|
82
|
-
#
|
83
|
-
# @example Get the documents from the map or criteria.
|
84
|
-
# criteria.multiple_from_map_or_db(ids)
|
85
|
-
#
|
86
|
-
# @param [ ids ] The searched ids.
|
87
|
-
#
|
88
|
-
# @return [ Array<Document> ] The found documents.
|
89
|
-
def multiple_from_map_or_db(ids)
|
90
|
-
return entries if embedded?
|
91
|
-
ids = mongoize_ids(ids)
|
92
|
-
result = from_identity_map(ids)
|
93
|
-
ids.empty? ? result : result + from_database(ids)
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
|
98
|
-
# Get the finder used to generate the id query.
|
99
|
-
#
|
100
|
-
# @api private
|
101
|
-
#
|
102
|
-
# @example Get the id finder.
|
103
|
-
# criteria.id_finder
|
104
|
-
#
|
105
|
-
# @return [ Symbol ] The name of the finder method.
|
106
|
-
#
|
107
|
-
# @since 3.1.0
|
108
|
-
def id_finder
|
109
|
-
@id_finder ||= extract_id ? :all_of : :where
|
110
|
-
end
|
111
|
-
|
112
|
-
# Get documents from the database only.
|
113
|
-
#
|
114
|
-
# @api private
|
115
|
-
#
|
116
|
-
# @example Get documents from the database.
|
117
|
-
# criteria.from_database(ids)
|
118
|
-
#
|
119
|
-
# @param [ Array<Object> ] ids The ids to fetch with.
|
120
|
-
#
|
121
|
-
# @return [ Array<Document> ] The matching documents.
|
122
|
-
#
|
123
|
-
# @since 3.0.0
|
124
|
-
def from_database(ids)
|
125
|
-
(ids.size > 1 ? any_in(id: ids) : where(id: ids.first)).entries
|
126
|
-
end
|
127
|
-
|
128
|
-
# Get documents from the identity map only.
|
129
|
-
#
|
130
|
-
# @api private
|
131
|
-
#
|
132
|
-
# @example Get documents from the identity map.
|
133
|
-
# criteria.from_identity_map(ids)
|
134
|
-
#
|
135
|
-
# @param [ Array<Object> ] ids The ids to fetch with.
|
136
|
-
#
|
137
|
-
# @return [ Array<Document> ] The matching documents.
|
138
|
-
#
|
139
|
-
# @since 3.0.0
|
140
|
-
def from_identity_map(ids)
|
141
|
-
result = []
|
142
|
-
selection = selector_with_type_selection
|
143
|
-
ids.reject! do |id|
|
144
|
-
doc = IdentityMap.get(klass, id)
|
145
|
-
doc && doc.matches?(selection) ? result.push(doc) : false
|
146
|
-
end
|
147
|
-
result
|
148
|
-
end
|
149
|
-
|
150
|
-
# Convert all the ids to their proper types.
|
151
|
-
#
|
152
|
-
# @api private
|
153
|
-
#
|
154
|
-
# @example Convert the ids.
|
155
|
-
# criteria.mongoize_ids(ids)
|
156
|
-
#
|
157
|
-
# @param [ Array<Object> ] ids The ids to convert.
|
158
|
-
#
|
159
|
-
# @return [ Array<Object> ] The converted ids.
|
160
|
-
#
|
161
|
-
# @since 3.0.0
|
162
|
-
def mongoize_ids(ids)
|
163
|
-
ids.map{ |id| klass.fields["_id"].mongoize(id) }
|
164
|
-
end
|
165
|
-
|
166
|
-
# Convenience method of raising an invalid options error.
|
167
|
-
#
|
168
|
-
# @example Raise the error.
|
169
|
-
# criteria.raise_invalid
|
170
|
-
#
|
171
|
-
# @raise [ Errors::InvalidOptions ] The error.
|
172
|
-
#
|
173
|
-
# @since 2.0.0
|
174
|
-
def raise_invalid
|
175
|
-
raise Errors::InvalidFind.new
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|