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
@@ -51,13 +51,11 @@ 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)
|
60
57
|
builder(name, meta).creator(name, meta)
|
58
|
+
touchable(meta)
|
61
59
|
add_counter_cache_callbacks(meta) if meta.counter_cached?
|
62
60
|
meta
|
63
61
|
end
|
@@ -306,6 +304,7 @@ module Mongoid
|
|
306
304
|
key,
|
307
305
|
type: type,
|
308
306
|
identity: true,
|
307
|
+
overwrite: true,
|
309
308
|
metadata: metadata,
|
310
309
|
default: metadata.foreign_key_default
|
311
310
|
)
|
@@ -351,7 +350,7 @@ module Mongoid
|
|
351
350
|
# @param [ Metadata ] metadata The metadata for the relation.
|
352
351
|
def relate(name, metadata)
|
353
352
|
self.relations = relations.merge(name.to_s => metadata)
|
354
|
-
getter(name, metadata).setter(name, metadata).existence_check(name
|
353
|
+
getter(name, metadata).setter(name, metadata).existence_check(name)
|
355
354
|
end
|
356
355
|
end
|
357
356
|
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,29 @@ 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)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Find the first document given the conditions, or creates a new document
|
102
|
+
# with the conditions that were supplied. This will raise an error if validation fails.
|
103
|
+
#
|
104
|
+
# @example Find or create.
|
105
|
+
# person.posts.find_or_create_by!(:title => "Testing")
|
106
|
+
#
|
107
|
+
# @overload find_or_create_by!(attributes = nil, type = nil)
|
108
|
+
# @param [ Hash ] attributes The attributes to search or create with.
|
109
|
+
# @param [ Class ] type The optional type of document to create.
|
110
|
+
#
|
111
|
+
# @overload find_or_create_by!(attributes = nil, type = nil)
|
112
|
+
# @param [ Hash ] attributes The attributes to search or create with.
|
113
|
+
# @param [ Class ] type The optional type of document to create.
|
114
|
+
#
|
115
|
+
# @raise [ Errors::Validations ] If validation failed.
|
116
|
+
#
|
117
|
+
# @return [ Document ] An existing document or newly created one.
|
118
|
+
def find_or_create_by!(attrs = {}, type = nil, &block)
|
119
|
+
find_or(:create!, attrs, type, &block)
|
93
120
|
end
|
94
121
|
|
95
122
|
# Find the first +Document+ given the conditions, or instantiates a new document
|
@@ -98,9 +125,8 @@ module Mongoid
|
|
98
125
|
# @example Find or initialize.
|
99
126
|
# person.posts.find_or_initialize_by(:title => "Test")
|
100
127
|
#
|
101
|
-
# @overload find_or_initialize_by(attributes = {},
|
128
|
+
# @overload find_or_initialize_by(attributes = {}, type = nil)
|
102
129
|
# @param [ Hash ] attributes The attributes to search or initialize with.
|
103
|
-
# @param [ Hash ] options The scoped assignment options.
|
104
130
|
# @param [ Class ] type The optional subclass to build.
|
105
131
|
#
|
106
132
|
# @overload find_or_initialize_by(attributes = {}, type = nil)
|
@@ -108,8 +134,8 @@ module Mongoid
|
|
108
134
|
# @param [ Class ] type The optional subclass to build.
|
109
135
|
#
|
110
136
|
# @return [ Document ] An existing document or newly instantiated one.
|
111
|
-
def find_or_initialize_by(attrs = {},
|
112
|
-
find_or(:build, attrs,
|
137
|
+
def find_or_initialize_by(attrs = {}, type = nil, &block)
|
138
|
+
find_or(:build, attrs, type, &block)
|
113
139
|
end
|
114
140
|
|
115
141
|
# This proxy can never be nil.
|
@@ -191,10 +217,9 @@ module Mongoid
|
|
191
217
|
# @example Find or create|initialize.
|
192
218
|
# person.addresses.find_or(:create, :street => "Bond")
|
193
219
|
#
|
194
|
-
# @overload find_or(method, attributes = {},
|
220
|
+
# @overload find_or(method, attributes = {}, type = nil)
|
195
221
|
# @param [ Symbol ] method The method name, create or new.
|
196
222
|
# @param [ Hash ] attributes The attributes to search or build with.
|
197
|
-
# @param [ Hash ] options The scoped assignment options.
|
198
223
|
# @param [ Class ] type The optional subclass to build.
|
199
224
|
#
|
200
225
|
# @overload find_or(attributes = {}, type = nil)
|
@@ -203,14 +228,9 @@ module Mongoid
|
|
203
228
|
# @param [ Class ] type The optional subclass to build.
|
204
229
|
#
|
205
230
|
# @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
|
-
|
231
|
+
def find_or(method, attrs = {}, type = nil, &block)
|
211
232
|
attrs["_type"] = type.to_s if type
|
212
|
-
|
213
|
-
where(attrs).first || send(method, attrs, options, type, &block)
|
233
|
+
where(attrs).first || send(method, attrs, type, &block)
|
214
234
|
end
|
215
235
|
end
|
216
236
|
end
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
#
|
13
13
|
# @since 3.0.15
|
14
14
|
def marshal_dump
|
15
|
-
[ base, target,
|
15
|
+
[ base, target, __metadata ]
|
16
16
|
end
|
17
17
|
|
18
18
|
# Takes the provided data and sets it back on the proxy.
|
@@ -24,8 +24,8 @@ module Mongoid
|
|
24
24
|
#
|
25
25
|
# @since 3.0.15
|
26
26
|
def marshal_load(data)
|
27
|
-
@base, @target, @
|
28
|
-
extend_proxy(
|
27
|
+
@base, @target, @__metadata = data
|
28
|
+
extend_proxy(__metadata.extension) if __metadata.extension?
|
29
29
|
end
|
30
30
|
end
|
31
31
|
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
|
#
|
@@ -977,9 +910,13 @@ module Mongoid
|
|
977
910
|
# @since 3.0.0
|
978
911
|
def find_from_parts(modules)
|
979
912
|
modules.find do |mod|
|
980
|
-
|
981
|
-
|
982
|
-
|
913
|
+
if mod.blank?
|
914
|
+
false
|
915
|
+
else
|
916
|
+
ActiveSupport::Inflector.constantize(mod).constants.include?(
|
917
|
+
name.to_s.classify.to_sym
|
918
|
+
)
|
919
|
+
end
|
983
920
|
end
|
984
921
|
end
|
985
922
|
|
@@ -1033,15 +970,13 @@ module Mongoid
|
|
1033
970
|
# @since 2.0.0.rc.1
|
1034
971
|
def determine_foreign_key
|
1035
972
|
return self[:foreign_key].to_s if self[:foreign_key]
|
1036
|
-
|
973
|
+
return nil if relation.embedded?
|
974
|
+
|
1037
975
|
if relation.stores_foreign_key?
|
1038
976
|
relation.foreign_key(name)
|
1039
977
|
else
|
1040
|
-
|
1041
|
-
|
1042
|
-
else
|
1043
|
-
inverse_of ? "#{inverse_of}#{suffix}" : inverse_class_name.foreign_key
|
1044
|
-
end
|
978
|
+
suffix = relation.foreign_key_suffix
|
979
|
+
"#{inverse}#{suffix}"
|
1045
980
|
end
|
1046
981
|
end
|
1047
982
|
|
@@ -1112,8 +1047,8 @@ module Mongoid
|
|
1112
1047
|
# @since 3.0.0
|
1113
1048
|
def inverse_relation_candidates
|
1114
1049
|
relations_metadata.select do |meta|
|
1115
|
-
next if meta.
|
1116
|
-
meta.class_name == inverse_class_name
|
1050
|
+
next if meta.name == name
|
1051
|
+
(meta.class_name == inverse_class_name) && !meta.forced_nil_inverse?
|
1117
1052
|
end
|
1118
1053
|
end
|
1119
1054
|
|
@@ -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,16 +12,17 @@ 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
|
+
alias :relation_metadata :__metadata
|
22
23
|
|
23
24
|
# Backwards compatibility with Mongoid beta releases.
|
24
|
-
delegate :foreign_key, :inverse_foreign_key, to: :
|
25
|
+
delegate :foreign_key, :inverse_foreign_key, to: :__metadata
|
25
26
|
delegate :bind_one, :unbind_one, to: :binding
|
26
27
|
delegate :collection_name, to: :base
|
27
28
|
|
@@ -37,9 +38,14 @@ module Mongoid
|
|
37
38
|
#
|
38
39
|
# @since 2.0.0.rc.1
|
39
40
|
def init(base, target, metadata)
|
40
|
-
@base, @target, @
|
41
|
+
@base, @target, @__metadata = base, target, metadata
|
41
42
|
yield(self) if block_given?
|
42
|
-
|
43
|
+
extend_proxies(metadata.extension) if metadata.extension?
|
44
|
+
end
|
45
|
+
|
46
|
+
# Allow extension to be an array and extend each module
|
47
|
+
def extend_proxies(*extension)
|
48
|
+
extension.flatten.each {|ext| extend_proxy(ext) }
|
43
49
|
end
|
44
50
|
|
45
51
|
# Get the class from the metadata, or return nil if no metadata present.
|
@@ -51,7 +57,7 @@ module Mongoid
|
|
51
57
|
#
|
52
58
|
# @since 3.0.15
|
53
59
|
def klass
|
54
|
-
|
60
|
+
__metadata ? __metadata.klass : nil
|
55
61
|
end
|
56
62
|
|
57
63
|
# Resets the criteria inside the relation proxy. Used by many to many
|
@@ -103,7 +109,7 @@ module Mongoid
|
|
103
109
|
#
|
104
110
|
# @since 3.0.0
|
105
111
|
def with(options)
|
106
|
-
|
112
|
+
@persistence_options = options
|
107
113
|
self
|
108
114
|
end
|
109
115
|
|
@@ -119,6 +125,7 @@ module Mongoid
|
|
119
125
|
# @since 2.0.0
|
120
126
|
def collection
|
121
127
|
root = base._root
|
128
|
+
root.with(@persistence_options)
|
122
129
|
root.collection unless root.embedded?
|
123
130
|
end
|
124
131
|
|
@@ -131,7 +138,7 @@ module Mongoid
|
|
131
138
|
#
|
132
139
|
# @since 2.0.0.rc.4
|
133
140
|
def characterize_one(document)
|
134
|
-
document.
|
141
|
+
document.__metadata = __metadata unless document.__metadata
|
135
142
|
end
|
136
143
|
|
137
144
|
# Default behavior of method missing should be to delegate all calls
|
@@ -153,7 +160,7 @@ module Mongoid
|
|
153
160
|
#
|
154
161
|
# @since 2.0.0
|
155
162
|
def raise_mixed
|
156
|
-
raise Errors::MixedRelations.new(base.class,
|
163
|
+
raise Errors::MixedRelations.new(base.class, __metadata.klass)
|
157
164
|
end
|
158
165
|
|
159
166
|
# When the base is not yet saved and the user calls create or create!
|
@@ -183,11 +190,12 @@ module Mongoid
|
|
183
190
|
# @since 3.1.0
|
184
191
|
def callback_method(callback_name)
|
185
192
|
methods = []
|
186
|
-
|
187
|
-
|
188
|
-
|
193
|
+
metadata = __metadata[callback_name]
|
194
|
+
if metadata
|
195
|
+
if metadata.is_a?(Array)
|
196
|
+
methods.concat(metadata)
|
189
197
|
else
|
190
|
-
methods << metadata
|
198
|
+
methods << metadata
|
191
199
|
end
|
192
200
|
end
|
193
201
|
methods
|
@@ -230,34 +238,6 @@ module Mongoid
|
|
230
238
|
def apply_ordering(criteria, metadata)
|
231
239
|
metadata.order ? criteria.order_by(metadata.order) : criteria
|
232
240
|
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
241
|
end
|
262
242
|
end
|
263
243
|
end
|