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
@@ -6,7 +6,7 @@ module Mongoid
|
|
6
6
|
# Contains behaviour for executing operations in batch on embedded
|
7
7
|
# documents.
|
8
8
|
module Batchable
|
9
|
-
include
|
9
|
+
include Positional
|
10
10
|
|
11
11
|
# Insert new documents as a batch push ($pushAll). This ensures that
|
12
12
|
# all callbacks are run at the appropriate time and only 1 request is
|
@@ -200,7 +200,7 @@ module Mongoid
|
|
200
200
|
docs.map do |doc|
|
201
201
|
attributes = { metadata: metadata, _parent: base }
|
202
202
|
attributes.merge!(doc)
|
203
|
-
Factory.build(klass, attributes
|
203
|
+
Factory.build(klass, attributes)
|
204
204
|
end
|
205
205
|
else
|
206
206
|
docs
|
@@ -296,7 +296,7 @@ module Mongoid
|
|
296
296
|
docs.map do |doc|
|
297
297
|
self.path = doc.atomic_path unless path
|
298
298
|
execute_callback :before_remove, doc
|
299
|
-
|
299
|
+
unless _assigning?
|
300
300
|
doc.cascade!
|
301
301
|
doc.run_before_callbacks(:destroy) if method == :destroy
|
302
302
|
end
|
@@ -346,7 +346,6 @@ module Mongoid
|
|
346
346
|
doc.run_after_callbacks(:destroy) if method == :destroy
|
347
347
|
doc.freeze
|
348
348
|
doc.destroyed = true
|
349
|
-
IdentityMap.remove(doc)
|
350
349
|
end
|
351
350
|
end
|
352
351
|
end
|
@@ -71,7 +71,6 @@ module Mongoid
|
|
71
71
|
#
|
72
72
|
# @overload build(attributes = {}, options = {}, type = nil)
|
73
73
|
# @param [ Hash ] attributes The attributes to build the document with.
|
74
|
-
# @param [ Hash ] options The scoped assignment options.
|
75
74
|
# @param [ Class ] type Optional class to build the document with.
|
76
75
|
#
|
77
76
|
# @overload build(attributes = {}, type = nil)
|
@@ -79,11 +78,8 @@ module Mongoid
|
|
79
78
|
# @param [ Class ] type Optional class to build the document with.
|
80
79
|
#
|
81
80
|
# @return [ Document ] The new document.
|
82
|
-
def build(attributes = {},
|
83
|
-
|
84
|
-
options, type = {}, options
|
85
|
-
end
|
86
|
-
doc = Factory.build(type || metadata.klass, attributes, options)
|
81
|
+
def build(attributes = {}, type = nil)
|
82
|
+
doc = Factory.build(type || metadata.klass, attributes)
|
87
83
|
append(doc)
|
88
84
|
doc.apply_post_processed_defaults
|
89
85
|
yield(doc) if block_given?
|
@@ -133,13 +129,9 @@ module Mongoid
|
|
133
129
|
execute_callback :before_remove, document
|
134
130
|
doc = target.delete_one(document)
|
135
131
|
if doc && !_binding?
|
136
|
-
_unscoped.delete_one(doc)
|
132
|
+
_unscoped.delete_one(doc)
|
137
133
|
if _assigning?
|
138
|
-
|
139
|
-
doc.destroy(suppress: true)
|
140
|
-
else
|
141
|
-
base.add_atomic_pull(doc)
|
142
|
-
end
|
134
|
+
base.add_atomic_pull(doc)
|
143
135
|
else
|
144
136
|
doc.delete(suppress: true)
|
145
137
|
unbind_one(doc)
|
@@ -150,18 +142,6 @@ module Mongoid
|
|
150
142
|
doc
|
151
143
|
end
|
152
144
|
|
153
|
-
# For use only with Mongoid::Paranoia - will be removed in 4.0.
|
154
|
-
#
|
155
|
-
# @example Get the deleted documents from the relation.
|
156
|
-
# person.paranoid_phones.deleted
|
157
|
-
#
|
158
|
-
# @return [ Criteria ] The deleted documents.
|
159
|
-
#
|
160
|
-
# @since 3.0.10
|
161
|
-
def deleted
|
162
|
-
unscoped.deleted
|
163
|
-
end
|
164
|
-
|
165
145
|
# Delete all the documents in the association without running callbacks.
|
166
146
|
#
|
167
147
|
# @example Delete all documents from the relation.
|
@@ -228,10 +208,10 @@ module Mongoid
|
|
228
208
|
# methods.
|
229
209
|
#
|
230
210
|
# @example Find a document by its id.
|
231
|
-
# person.addresses.find(
|
211
|
+
# person.addresses.find(BSON::ObjectId.new)
|
232
212
|
#
|
233
213
|
# @example Find documents for multiple ids.
|
234
|
-
# person.addresses.find([
|
214
|
+
# person.addresses.find([ BSON::ObjectId.new, BSON::ObjectId.new ])
|
235
215
|
#
|
236
216
|
# @param [ Array<Object> ] args Various arguments.
|
237
217
|
#
|
@@ -635,7 +615,7 @@ module Mongoid
|
|
635
615
|
# @since 2.1.0
|
636
616
|
def valid_options
|
637
617
|
[
|
638
|
-
:as, :cascade_callbacks, :cyclic, :order, :
|
618
|
+
:as, :cascade_callbacks, :cyclic, :order, :store_as,
|
639
619
|
:before_add, :after_add, :before_remove, :after_remove
|
640
620
|
]
|
641
621
|
end
|
@@ -51,9 +51,6 @@ module Mongoid
|
|
51
51
|
# @param [ Hash ] options The relation options.
|
52
52
|
# @param [ Proc ] block Optional block for defining extensions.
|
53
53
|
def embedded_in(name, options = {}, &block)
|
54
|
-
if ancestors.include?(Mongoid::Versioning)
|
55
|
-
raise Errors::VersioningNotOnRoot.new(self)
|
56
|
-
end
|
57
54
|
meta = characterize(name, Embedded::In, options, &block)
|
58
55
|
self.embedded = true
|
59
56
|
relate(name, meta)
|
@@ -306,6 +303,7 @@ module Mongoid
|
|
306
303
|
key,
|
307
304
|
type: type,
|
308
305
|
identity: true,
|
306
|
+
overwrite: true,
|
309
307
|
metadata: metadata,
|
310
308
|
default: metadata.foreign_key_default
|
311
309
|
)
|
@@ -351,7 +349,7 @@ module Mongoid
|
|
351
349
|
# @param [ Metadata ] metadata The metadata for the relation.
|
352
350
|
def relate(name, metadata)
|
353
351
|
self.relations = relations.merge(name.to_s => metadata)
|
354
|
-
getter(name, metadata).setter(name, metadata).existence_check(name
|
352
|
+
getter(name, metadata).setter(name, metadata).existence_check(name)
|
355
353
|
end
|
356
354
|
end
|
357
355
|
end
|
@@ -21,11 +21,11 @@ module Mongoid
|
|
21
21
|
size == 0
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
# Creates a new document on the references many relation. This will
|
25
|
+
# save the document if the parent has been persisted.
|
26
|
+
#
|
27
|
+
# @example Create and save the new document.
|
28
|
+
# person.posts.create(:text => "Testing")
|
29
29
|
#
|
30
30
|
# @overload create(attributes = nil, options = {}, type = nil)
|
31
31
|
# @param [ Hash ] attributes The attributes to create with.
|
@@ -39,10 +39,14 @@ module Mongoid
|
|
39
39
|
# @return [ Document ] The newly created document.
|
40
40
|
#
|
41
41
|
# @since 2.0.0.beta.1
|
42
|
-
def create(attributes = nil,
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
def create(attributes = nil, type = nil, &block)
|
43
|
+
if attributes.is_a?(::Array)
|
44
|
+
attributes.map { |attrs| create(attrs, type, &block) }
|
45
|
+
else
|
46
|
+
doc = build(attributes, type, &block)
|
47
|
+
base.persisted? ? doc.save : raise_unsaved(doc)
|
48
|
+
doc
|
49
|
+
end
|
46
50
|
end
|
47
51
|
|
48
52
|
# Creates a new document on the references many relation. This will
|
@@ -54,7 +58,6 @@ module Mongoid
|
|
54
58
|
#
|
55
59
|
# @overload create!(attributes = nil, options = {}, type = nil)
|
56
60
|
# @param [ Hash ] attributes The attributes to create with.
|
57
|
-
# @param [ Hash ] options The scoped assignment options.
|
58
61
|
# @param [ Class ] type The optional type of document to create.
|
59
62
|
#
|
60
63
|
# @overload create!(attributes = nil, type = nil)
|
@@ -66,10 +69,14 @@ module Mongoid
|
|
66
69
|
# @return [ Document ] The newly created document.
|
67
70
|
#
|
68
71
|
# @since 2.0.0.beta.1
|
69
|
-
def create!(attributes = nil,
|
70
|
-
|
71
|
-
|
72
|
-
|
72
|
+
def create!(attributes = nil, type = nil, &block)
|
73
|
+
if attributes.is_a?(::Array)
|
74
|
+
attributes.map { |attrs| create!(attrs, type, &block) }
|
75
|
+
else
|
76
|
+
doc = build(attributes, type, &block)
|
77
|
+
base.persisted? ? doc.save! : raise_unsaved(doc)
|
78
|
+
doc
|
79
|
+
end
|
73
80
|
end
|
74
81
|
|
75
82
|
# Find the first document given the conditions, or creates a new document
|
@@ -78,9 +85,8 @@ module Mongoid
|
|
78
85
|
# @example Find or create.
|
79
86
|
# person.posts.find_or_create_by(:title => "Testing")
|
80
87
|
#
|
81
|
-
# @overload find_or_create_by(attributes = nil,
|
88
|
+
# @overload find_or_create_by(attributes = nil, type = nil)
|
82
89
|
# @param [ Hash ] attributes The attributes to search or create with.
|
83
|
-
# @param [ Hash ] options The scoped assignment options.
|
84
90
|
# @param [ Class ] type The optional type of document to create.
|
85
91
|
#
|
86
92
|
# @overload find_or_create_by(attributes = nil, type = nil)
|
@@ -88,8 +94,8 @@ module Mongoid
|
|
88
94
|
# @param [ Class ] type The optional type of document to create.
|
89
95
|
#
|
90
96
|
# @return [ Document ] An existing document or newly created one.
|
91
|
-
def find_or_create_by(attrs = {},
|
92
|
-
find_or(:create, attrs,
|
97
|
+
def find_or_create_by(attrs = {}, type = nil, &block)
|
98
|
+
find_or(:create, attrs, type, &block)
|
93
99
|
end
|
94
100
|
|
95
101
|
# Find the first +Document+ given the conditions, or instantiates a new document
|
@@ -98,9 +104,8 @@ module Mongoid
|
|
98
104
|
# @example Find or initialize.
|
99
105
|
# person.posts.find_or_initialize_by(:title => "Test")
|
100
106
|
#
|
101
|
-
# @overload find_or_initialize_by(attributes = {},
|
107
|
+
# @overload find_or_initialize_by(attributes = {}, type = nil)
|
102
108
|
# @param [ Hash ] attributes The attributes to search or initialize with.
|
103
|
-
# @param [ Hash ] options The scoped assignment options.
|
104
109
|
# @param [ Class ] type The optional subclass to build.
|
105
110
|
#
|
106
111
|
# @overload find_or_initialize_by(attributes = {}, type = nil)
|
@@ -108,8 +113,8 @@ module Mongoid
|
|
108
113
|
# @param [ Class ] type The optional subclass to build.
|
109
114
|
#
|
110
115
|
# @return [ Document ] An existing document or newly instantiated one.
|
111
|
-
def find_or_initialize_by(attrs = {},
|
112
|
-
find_or(:build, attrs,
|
116
|
+
def find_or_initialize_by(attrs = {}, type = nil, &block)
|
117
|
+
find_or(:build, attrs, type, &block)
|
113
118
|
end
|
114
119
|
|
115
120
|
# This proxy can never be nil.
|
@@ -191,10 +196,9 @@ module Mongoid
|
|
191
196
|
# @example Find or create|initialize.
|
192
197
|
# person.addresses.find_or(:create, :street => "Bond")
|
193
198
|
#
|
194
|
-
# @overload find_or(method, attributes = {},
|
199
|
+
# @overload find_or(method, attributes = {}, type = nil)
|
195
200
|
# @param [ Symbol ] method The method name, create or new.
|
196
201
|
# @param [ Hash ] attributes The attributes to search or build with.
|
197
|
-
# @param [ Hash ] options The scoped assignment options.
|
198
202
|
# @param [ Class ] type The optional subclass to build.
|
199
203
|
#
|
200
204
|
# @overload find_or(attributes = {}, type = nil)
|
@@ -203,14 +207,9 @@ module Mongoid
|
|
203
207
|
# @param [ Class ] type The optional subclass to build.
|
204
208
|
#
|
205
209
|
# @return [ Document ] A matching document or a new/created one.
|
206
|
-
def find_or(method, attrs = {},
|
207
|
-
if options.is_a? Class
|
208
|
-
options, type = {}, options
|
209
|
-
end
|
210
|
-
|
210
|
+
def find_or(method, attrs = {}, type = nil, &block)
|
211
211
|
attrs["_type"] = type.to_s if type
|
212
|
-
|
213
|
-
where(attrs).first || send(method, attrs, options, type, &block)
|
212
|
+
where(attrs).first || send(method, attrs, type, &block)
|
214
213
|
end
|
215
214
|
end
|
216
215
|
end
|
@@ -229,20 +229,6 @@ module Mongoid
|
|
229
229
|
!!dependent
|
230
230
|
end
|
231
231
|
|
232
|
-
# Get the criteria needed to eager load this relation.
|
233
|
-
#
|
234
|
-
# @example Get the eager loading criteria.
|
235
|
-
# metadata.eager_load(criteria)
|
236
|
-
#
|
237
|
-
# @param [ Array<Object> ] ids The ids of the returned parents.
|
238
|
-
#
|
239
|
-
# @return [ Criteria ] The eager loading criteria.
|
240
|
-
#
|
241
|
-
# @since 2.2.0
|
242
|
-
def eager_load(ids)
|
243
|
-
relation.eager_load(self, ids)
|
244
|
-
end
|
245
|
-
|
246
232
|
# Will determine if the relation is an embedded one or not. Currently
|
247
233
|
# only checks against embeds one and many.
|
248
234
|
#
|
@@ -398,8 +384,7 @@ module Mongoid
|
|
398
384
|
order: #{order.inspect}
|
399
385
|
polymorphic: #{polymorphic?}
|
400
386
|
relation: #{relation}
|
401
|
-
setter: #{setter}
|
402
|
-
versioned: #{versioned?}>
|
387
|
+
setter: #{setter}>
|
403
388
|
}
|
404
389
|
end
|
405
390
|
|
@@ -460,21 +445,6 @@ module Mongoid
|
|
460
445
|
!!inverse_class_name
|
461
446
|
end
|
462
447
|
|
463
|
-
# Is the inverse field bindable? Ie, do we have more than one definition
|
464
|
-
# on the parent class with the same polymorphic name (as).
|
465
|
-
#
|
466
|
-
# @example Is the inverse of bindable?
|
467
|
-
# metadata.inverse_of_bindable?
|
468
|
-
#
|
469
|
-
# @return [ true, false ] If the relation needs the inverse of field set.
|
470
|
-
#
|
471
|
-
# @since 3.0.6
|
472
|
-
def inverse_field_bindable?
|
473
|
-
@inverse_field_bindable ||= (inverse_klass.relations.values.count do |meta|
|
474
|
-
meta.as == as
|
475
|
-
end > 1)
|
476
|
-
end
|
477
|
-
|
478
448
|
# Used for relational many to many only. This determines the name of the
|
479
449
|
# foreign key field on the inverse side of the relation, since in this
|
480
450
|
# case there are keys on both sides.
|
@@ -579,31 +549,6 @@ module Mongoid
|
|
579
549
|
@inverse_type_setter ||= inverse_type.__setter__
|
580
550
|
end
|
581
551
|
|
582
|
-
# Returns the name of the field in which to store the name of the inverse
|
583
|
-
# field for the polymorphic relation.
|
584
|
-
#
|
585
|
-
# @example Get the name of the field.
|
586
|
-
# metadata.inverse_of_field
|
587
|
-
#
|
588
|
-
# @return [ String ] The name of the field for storing the name of the
|
589
|
-
# inverse field.
|
590
|
-
#
|
591
|
-
# @since 2.4.5
|
592
|
-
def inverse_of_field
|
593
|
-
@inverse_of_field ||= determine_inverse_for(:field)
|
594
|
-
end
|
595
|
-
|
596
|
-
# Gets the setter for the field that stores the name of the inverse field
|
597
|
-
# on a polymorphic relation.
|
598
|
-
#
|
599
|
-
# @example Get the inverse type setter.
|
600
|
-
# metadata.inverse_of_field_setter
|
601
|
-
#
|
602
|
-
# @return [ String ] The name of the setter.
|
603
|
-
def inverse_of_field_setter
|
604
|
-
@inverse_of_field_setter ||= inverse_of_field.__setter__
|
605
|
-
end
|
606
|
-
|
607
552
|
# This returns the key that is to be used to grab the attributes for the
|
608
553
|
# relation or the foreign key or id that a referenced relation will use
|
609
554
|
# to query for the object.
|
@@ -823,18 +768,6 @@ module Mongoid
|
|
823
768
|
end
|
824
769
|
end
|
825
770
|
|
826
|
-
# Is this relation using Mongoid's internal versioning system?
|
827
|
-
#
|
828
|
-
# @example Is this relation versioned?
|
829
|
-
# metadata.versioned?
|
830
|
-
#
|
831
|
-
# @return [ true, false ] If the relation uses Mongoid versioning.
|
832
|
-
#
|
833
|
-
# @since 2.1.0
|
834
|
-
def versioned?
|
835
|
-
!!self[:versioned]
|
836
|
-
end
|
837
|
-
|
838
771
|
# Returns the metadata itself. Here for compatibility with Rails
|
839
772
|
# association metadata.
|
840
773
|
#
|
@@ -1033,15 +966,13 @@ module Mongoid
|
|
1033
966
|
# @since 2.0.0.rc.1
|
1034
967
|
def determine_foreign_key
|
1035
968
|
return self[:foreign_key].to_s if self[:foreign_key]
|
1036
|
-
|
969
|
+
return nil if relation.embedded?
|
970
|
+
|
1037
971
|
if relation.stores_foreign_key?
|
1038
972
|
relation.foreign_key(name)
|
1039
973
|
else
|
1040
|
-
|
1041
|
-
|
1042
|
-
else
|
1043
|
-
inverse_of ? "#{inverse_of}#{suffix}" : inverse_class_name.foreign_key
|
1044
|
-
end
|
974
|
+
suffix = relation.foreign_key_suffix
|
975
|
+
"#{inverse}#{suffix}"
|
1045
976
|
end
|
1046
977
|
end
|
1047
978
|
|
@@ -1112,7 +1043,7 @@ module Mongoid
|
|
1112
1043
|
# @since 3.0.0
|
1113
1044
|
def inverse_relation_candidates
|
1114
1045
|
relations_metadata.select do |meta|
|
1115
|
-
next if meta.
|
1046
|
+
next if meta.name == name
|
1116
1047
|
meta.class_name == inverse_class_name
|
1117
1048
|
end
|
1118
1049
|
end
|
@@ -63,11 +63,11 @@ module Mongoid
|
|
63
63
|
# @param [ Class ] klass The class we're trying to convert for.
|
64
64
|
# @param [ String ] id The id, usually coming from the form.
|
65
65
|
#
|
66
|
-
# @return [
|
66
|
+
# @return [ BSON::ObjectId, String, Object ] The converted id.
|
67
67
|
#
|
68
68
|
# @since 2.0.0.rc.6
|
69
69
|
def convert_id(klass, id)
|
70
|
-
klass.using_object_ids? ?
|
70
|
+
klass.using_object_ids? ? BSON::ObjectId.mongoize(id) : id
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
@@ -12,13 +12,13 @@ module Mongoid
|
|
12
12
|
# We undefine most methods to get them sent through to the target.
|
13
13
|
instance_methods.each do |method|
|
14
14
|
undef_method(method) unless
|
15
|
-
method =~ /(^__|^send|^object_id|^respond_to|^tap|extend_proxy)/
|
15
|
+
method =~ /(^__|^send|^object_id|^respond_to|^tap|extend_proxy|extend_proxies)/
|
16
16
|
end
|
17
17
|
|
18
18
|
include Threaded::Lifecycle
|
19
19
|
include Marshalable
|
20
20
|
|
21
|
-
attr_accessor :base, :
|
21
|
+
attr_accessor :base, :metadata, :target
|
22
22
|
|
23
23
|
# Backwards compatibility with Mongoid beta releases.
|
24
24
|
delegate :foreign_key, :inverse_foreign_key, to: :metadata
|
@@ -39,7 +39,12 @@ module Mongoid
|
|
39
39
|
def init(base, target, metadata)
|
40
40
|
@base, @target, @metadata = base, target, metadata
|
41
41
|
yield(self) if block_given?
|
42
|
-
|
42
|
+
extend_proxies(metadata.extension) if metadata.extension?
|
43
|
+
end
|
44
|
+
|
45
|
+
# Allow extension to be an array and extend each module
|
46
|
+
def extend_proxies(*extension)
|
47
|
+
extension.flatten.each {|ext| extend_proxy(ext) }
|
43
48
|
end
|
44
49
|
|
45
50
|
# Get the class from the metadata, or return nil if no metadata present.
|
@@ -103,7 +108,7 @@ module Mongoid
|
|
103
108
|
#
|
104
109
|
# @since 3.0.0
|
105
110
|
def with(options)
|
106
|
-
|
111
|
+
@persistence_options = options
|
107
112
|
self
|
108
113
|
end
|
109
114
|
|
@@ -119,6 +124,7 @@ module Mongoid
|
|
119
124
|
# @since 2.0.0
|
120
125
|
def collection
|
121
126
|
root = base._root
|
127
|
+
root.with(@persistence_options)
|
122
128
|
root.collection unless root.embedded?
|
123
129
|
end
|
124
130
|
|
@@ -230,34 +236,6 @@ module Mongoid
|
|
230
236
|
def apply_ordering(criteria, metadata)
|
231
237
|
metadata.order ? criteria.order_by(metadata.order) : criteria
|
232
238
|
end
|
233
|
-
|
234
|
-
# Get the criteria that is used to eager load a relation of this
|
235
|
-
# type.
|
236
|
-
#
|
237
|
-
# @example Get the eager load criteria.
|
238
|
-
# Proxy.eager_load(metadata, criteria)
|
239
|
-
#
|
240
|
-
# @param [ Metadata ] metadata The relation metadata.
|
241
|
-
# @param [ Array<Object> ] ids The ids of the base docs.
|
242
|
-
#
|
243
|
-
# @return [ Criteria ] The criteria to eager load the relation.
|
244
|
-
#
|
245
|
-
# @since 2.2.0
|
246
|
-
def eager_load_ids(metadata, ids)
|
247
|
-
klass, foreign_key = metadata.klass, metadata.foreign_key
|
248
|
-
eager_loaded = klass.any_in(foreign_key => ids).entries
|
249
|
-
ids.each do |id|
|
250
|
-
sel = { foreign_key => id }
|
251
|
-
sel.merge!(metadata.type_relation) if klass.hereditary?
|
252
|
-
IdentityMap.clear_many(klass, sel)
|
253
|
-
end
|
254
|
-
eager_loaded.each do |doc|
|
255
|
-
base_id = doc.__send__(foreign_key)
|
256
|
-
sel = { foreign_key => base_id }
|
257
|
-
sel.merge!(metadata.type_relation) if klass.hereditary?
|
258
|
-
yield(doc, sel)
|
259
|
-
end
|
260
|
-
end
|
261
239
|
end
|
262
240
|
end
|
263
241
|
end
|