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
data/README.md
CHANGED
@@ -1,19 +1,24 @@
|
|
1
|
-
Mongoid
|
2
|
-
|
1
|
+
# Mongoid
|
2
|
+
[](https://travis-ci.org/mongoid/mongoid)
|
3
|
+
[](https://codeclimate.com/github/mongoid/mongoid)
|
4
|
+
[](https://coveralls.io/r/mongoid/mongoid?branch=master)
|
5
|
+
[](https://www.versioneye.com/ruby/mongoid/4.0.0)
|
6
|
+
|
3
7
|
|
4
8
|
Mongoid is an ODM (Object-Document-Mapper) framework for MongoDB in Ruby.
|
5
9
|
|
6
10
|
Project Tracking
|
7
11
|
----------------
|
8
12
|
|
9
|
-
* [Mongoid Google Group](http://groups.google.com/group/mongoid)
|
10
13
|
* [Mongoid Website and Documentation](http://mongoid.org)
|
11
|
-
* [Mongoid
|
14
|
+
* [Mongoid Google Group](http://groups.google.com/group/mongoid)
|
15
|
+
* [Stackoverflow](http://stackoverflow.com/questions/tagged/mongoid)
|
16
|
+
* [#mongoid](http://webchat.freenode.net/?channels=mongoid) on freenode IRC
|
12
17
|
|
13
18
|
Compatibility
|
14
19
|
-------------
|
15
20
|
|
16
|
-
Mongoid is tested against MRI 1.9.3, 2.0.0, and JRuby (1.9).
|
21
|
+
Mongoid is tested against MRI 1.9.3, 2.0.0, 2.1.0 and JRuby (1.9).
|
17
22
|
|
18
23
|
Documentation
|
19
24
|
-------------
|
@@ -24,8 +29,6 @@ Please see the new Mongoid website for up-to-date documentation:
|
|
24
29
|
Donating
|
25
30
|
--------
|
26
31
|
|
27
|
-
[Support Mongoid at Wepay](https://www.wepay.com/donations/mongoid)
|
28
|
-
|
29
32
|
[Support Mongoid at Pledgie](http://www.pledgie.com/campaigns/7757)
|
30
33
|
|
31
34
|
<a href='http://www.pledgie.com/campaigns/7757'>
|
data/lib/config/locales/en.yml
CHANGED
@@ -19,7 +19,7 @@ en:
|
|
19
19
|
message: "Calling %{method} on %{klass} resulted in a false return
|
20
20
|
from a callback."
|
21
21
|
summary: "If a before callback returns false when using Document.create!,
|
22
|
-
Document#save!, or
|
22
|
+
Document#save!, or Document#update_attributes! this error will get raised
|
23
23
|
since the document did not actually get saved."
|
24
24
|
resolution: "Double check all before callbacks to make sure they are
|
25
25
|
not unintentionally returning false."
|
@@ -31,6 +31,13 @@ en:
|
|
31
31
|
resolution: "Most likely this is caused by passing parameters directly
|
32
32
|
through to the find, and the parameter either is not present or the
|
33
33
|
key from which it is accessed is incorrect."
|
34
|
+
document_not_destroyed:
|
35
|
+
message: "%{klass} with id %{id} was not destroyed."
|
36
|
+
summary: "When calling %{klass}#destroy! and a callback halts the destroy
|
37
|
+
callback chain by returning a false value, the deletion will not
|
38
|
+
actually occur."
|
39
|
+
resolution: "Check the before/after destroy callbacks to ensure that the
|
40
|
+
return values are truthy for the chain to continue."
|
34
41
|
document_not_found:
|
35
42
|
message: "Document(s) not found for class %{klass} with id(s) %{missing}."
|
36
43
|
summary: "When calling %{klass}.find with an id or array of ids, each
|
@@ -119,6 +126,7 @@ en:
|
|
119
126
|
has the correct options.\n\n
|
120
127
|
Valid options are:\n
|
121
128
|
\_\_background: true|false\n
|
129
|
+
\_\_database: 'database_name'\n
|
122
130
|
\_\_drop_dups: true|false\n
|
123
131
|
\_\_name: 'index_name'\n
|
124
132
|
\_\_sparse: true|false\n
|
@@ -128,6 +136,7 @@ en:
|
|
128
136
|
\_\_bits: 26\n
|
129
137
|
\_\_bucket_size : 1\n
|
130
138
|
\_\_weights: { content: 1, title: 2 }\n
|
139
|
+
\_\_expire_after_seconds: number_of_seconds\n
|
131
140
|
Valid types are: 1, -1, '2d', '2dsphere', 'geoHaystack', 'text', 'hashed'\n\n
|
132
141
|
Example:\n
|
133
142
|
\_\_class Band\n
|
@@ -156,15 +165,11 @@ en:
|
|
156
165
|
invalid_scope:
|
157
166
|
message: "Defining a scope of value %{value} on %{klass} is not
|
158
167
|
allowed."
|
159
|
-
summary: "Scopes in Mongoid must be
|
160
|
-
|
161
|
-
resolution: "Change the scope to be a criteria or proc wrapped
|
162
|
-
critera.\n\n
|
168
|
+
summary: "Scopes in Mongoid must be procs that wrap criteria objects."
|
169
|
+
resolution: "Change the scope to be a proc wrapped critera.\n\n
|
163
170
|
Example:\n
|
164
171
|
\_\_class Band\n
|
165
172
|
\_\_\_\_include Mongoid::Document\n
|
166
|
-
\_\_\_\_field :active, type: Boolean, default: true\n
|
167
|
-
\_\_\_\_scope :active, where(active: true)\n
|
168
173
|
\_\_\_\_scope :inactive, ->{ where(active: false) }\n
|
169
174
|
\_\_end\n\n"
|
170
175
|
invalid_storage_options:
|
@@ -179,6 +184,12 @@ en:
|
|
179
184
|
\_\_\_\_include Mongoid::Document\n
|
180
185
|
\_\_\_\_store_in collection: 'artists', database: 'secondary'\n
|
181
186
|
\_\_end\n\n"
|
187
|
+
invalid_storage_parent:
|
188
|
+
message: "Invalid store_in call on class %{klass}."
|
189
|
+
summary: "The :store_in macro can only be called on a base Mongoid Document"
|
190
|
+
resolution: "Remove the store_in call on class %{klass}, as it will use its
|
191
|
+
parent store configuration. Or remove the hierarchy extension for this
|
192
|
+
class."
|
182
193
|
invalid_time:
|
183
194
|
message: "'%{value}' is not a valid Time."
|
184
195
|
summary: "Mongoid tries to serialize the values for Date, DateTime, and
|
@@ -222,6 +233,10 @@ en:
|
|
222
233
|
from the child side which relation to go in."
|
223
234
|
resolution: "Set the values from the parent, or redefine the relation
|
224
235
|
with only a single definition in the parent."
|
236
|
+
invalid_value:
|
237
|
+
message: "Value of type %{value_class} cannot be written to a field of type %{field_class}"
|
238
|
+
summary: "Tried to set a value of type %{value_class} to a field of type %{field_class}"
|
239
|
+
resolution: "Verify if the value to be set correspond to field definition"
|
225
240
|
mixed_relations:
|
226
241
|
message: "Referencing a(n) %{embedded} document from the %{root}
|
227
242
|
document via a relational association is not allowed since the
|
@@ -321,7 +336,7 @@ en:
|
|
321
336
|
%{klass}.create! without setting the parent document as an
|
322
337
|
attribute."
|
323
338
|
resolution: "Ensure that you've set the parent relation if
|
324
|
-
instantiating the embedded document
|
339
|
+
instantiating the embedded document directly, or always create new
|
325
340
|
embedded documents via the parent relation."
|
326
341
|
no_session_config:
|
327
342
|
message: "No configuration could be found for a session named
|
@@ -387,6 +402,12 @@ en:
|
|
387
402
|
can only have values set when the document is a new record."
|
388
403
|
resolution: "Don't define '%{name}' as readonly, or do not attempt
|
389
404
|
to update its value after the document is persisted."
|
405
|
+
readonly_document:
|
406
|
+
message: "Attempted to persist the readonly document '%{klass}'."
|
407
|
+
summary: "Documents loaded from the database using #only
|
408
|
+
cannot be persisted."
|
409
|
+
resolution: "Don't attempt to persist documents that are flagged as
|
410
|
+
readonly."
|
390
411
|
scope_overwrite:
|
391
412
|
message: "Cannot create scope :%{scope_name}, because of existing
|
392
413
|
method %{model_name}.%{scope_name}."
|
@@ -411,12 +432,12 @@ en:
|
|
411
432
|
unknown_attribute:
|
412
433
|
message: "Attempted to set a value for '%{name}' which is not
|
413
434
|
allowed on the model %{klass}."
|
414
|
-
summary: "
|
415
|
-
attribute does not already exist in the attributes hash,
|
416
|
-
to call %{klass}#%{name}= for it is not allowed. This is
|
417
|
-
triggered by passing the attribute to any method that accepts an
|
435
|
+
summary: "Without including Mongoid::Attributes::Dynamic in your model
|
436
|
+
and the attribute does not already exist in the attributes hash,
|
437
|
+
attempting to call %{klass}#%{name}= for it is not allowed. This is
|
438
|
+
also triggered by passing the attribute to any method that accepts an
|
418
439
|
attributes hash, and is raised instead of getting a NoMethodError."
|
419
|
-
resolution: "You can
|
440
|
+
resolution: "You can include Mongoid::Attributes::Dynamic if you
|
420
441
|
expect to be writing values for undefined fields often."
|
421
442
|
unsaved_document:
|
422
443
|
message: "Attempted to save %{document} before the parent %{base}."
|
@@ -439,13 +460,6 @@ en:
|
|
439
460
|
summary: "The following errors were found: %{errors}"
|
440
461
|
resolution: "Try persisting the document with valid data or remove
|
441
462
|
the validations."
|
442
|
-
versioning_not_on_root:
|
443
|
-
message: "Versioning not allowed on embedded document: %{klass}."
|
444
|
-
summary: "Mongoid::Versioning behaviour is only allowed on documents
|
445
|
-
that are the root document in the hierarchy."
|
446
|
-
resolution: "Remove the versioning from the embedded %{klass} or
|
447
|
-
consider moving it to a root location in the hierarchy if
|
448
|
-
versioning is needed."
|
449
463
|
delete_restriction:
|
450
464
|
message: "Cannot delete %{document} because of dependent '%{relation}'."
|
451
465
|
summary: "When defining '%{relation}' with a :dependent => :restrict,
|
data/lib/mongoid.rb
CHANGED
@@ -1,34 +1,13 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
|
3
|
-
# Copyright (c) 2009 - 2011 Durran Jordan and friends.
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
# a copy of this software and associated documentation files (the
|
7
|
-
# "Software"), to deal in the Software without restriction, including
|
8
|
-
# without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
# distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
# permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
# the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be
|
14
|
-
# included in all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
-
|
24
|
-
require 'support/ruby_version'
|
2
|
+
require "support/ruby_version"
|
25
3
|
|
26
4
|
require "delegate"
|
27
5
|
require "time"
|
28
6
|
require "set"
|
29
7
|
|
8
|
+
require "active_support"
|
30
9
|
require "active_support/core_ext"
|
31
|
-
require
|
10
|
+
require "active_support/json"
|
32
11
|
require "active_support/inflector"
|
33
12
|
require "active_support/time_with_zone"
|
34
13
|
require "active_model"
|
@@ -36,49 +15,14 @@ require "active_model"
|
|
36
15
|
require "origin"
|
37
16
|
require "moped"
|
38
17
|
|
39
|
-
require "mongoid/
|
40
|
-
require "mongoid/evolvable"
|
41
|
-
require "mongoid/extensions"
|
42
|
-
require "mongoid/errors"
|
43
|
-
require "mongoid/threaded"
|
44
|
-
require "mongoid/relations"
|
45
|
-
require "mongoid/atomic"
|
46
|
-
require "mongoid/attributes"
|
47
|
-
require "mongoid/callbacks"
|
18
|
+
require "mongoid/version"
|
48
19
|
require "mongoid/config"
|
49
|
-
require "mongoid/contextual"
|
50
|
-
require "mongoid/copyable"
|
51
|
-
require "mongoid/equality"
|
52
|
-
require "mongoid/criteria"
|
53
|
-
require "mongoid/dirty"
|
54
|
-
require "mongoid/factory"
|
55
|
-
require "mongoid/fields"
|
56
|
-
require "mongoid/finders"
|
57
|
-
require "mongoid/hierarchy"
|
58
|
-
require "mongoid/identity_map"
|
59
|
-
require "mongoid/indexes"
|
60
|
-
require "mongoid/inspection"
|
61
|
-
require "mongoid/json"
|
62
20
|
require "mongoid/loggable"
|
63
|
-
require "mongoid/matchers"
|
64
|
-
require "mongoid/multi_parameter_attributes"
|
65
|
-
require "mongoid/nested_attributes"
|
66
|
-
require "mongoid/observer"
|
67
|
-
require "mongoid/persistence"
|
68
|
-
require "mongoid/reloading"
|
69
|
-
require "mongoid/scoping"
|
70
|
-
require "mongoid/serialization"
|
71
21
|
require "mongoid/sessions"
|
72
|
-
require "mongoid/sharding"
|
73
|
-
require "mongoid/state"
|
74
|
-
require "mongoid/timestamps"
|
75
|
-
require "mongoid/unit_of_work"
|
76
|
-
require "mongoid/validations"
|
77
|
-
require "mongoid/version"
|
78
|
-
require "mongoid/versioning"
|
79
|
-
require "mongoid/components"
|
80
|
-
require "mongoid/paranoia"
|
81
22
|
require "mongoid/document"
|
23
|
+
require "mongoid/log_subscriber"
|
24
|
+
require "mongoid/tasks/database"
|
25
|
+
require "mongoid/query_cache"
|
82
26
|
|
83
27
|
# If we are using Rails then we will include the Mongoid railtie. This has all
|
84
28
|
# the nifty initializers that Mongoid needs.
|
@@ -86,28 +30,20 @@ if defined?(Rails)
|
|
86
30
|
require "mongoid/railtie"
|
87
31
|
end
|
88
32
|
|
89
|
-
# If we are using any Rack based application then we need the Mongoid rack
|
90
|
-
# middleware to ensure our app is running properly.
|
91
|
-
if defined?(Rack)
|
92
|
-
require "rack/mongoid"
|
93
|
-
end
|
94
|
-
|
95
33
|
# add english load path by default
|
96
34
|
I18n.load_path << File.join(File.dirname(__FILE__), "config", "locales", "en.yml")
|
97
35
|
|
98
36
|
module Mongoid
|
99
37
|
extend Loggable
|
100
|
-
extend UnitOfWork
|
101
38
|
extend self
|
102
39
|
|
103
|
-
MONGODB_VERSION = "2.
|
40
|
+
MONGODB_VERSION = "2.2.0"
|
104
41
|
|
105
42
|
# Sets the Mongoid configuration options. Best used by passing a block.
|
106
43
|
#
|
107
44
|
# @example Set up configuration options.
|
108
45
|
# Mongoid.configure do |config|
|
109
|
-
# config.
|
110
|
-
# config.use(name: "mongoid_test", host: "localhost", port: 27017)
|
46
|
+
# config.connect_to("mongoid_test")
|
111
47
|
# end
|
112
48
|
#
|
113
49
|
# @return [ Config ] The configuration object.
|
@@ -160,7 +96,5 @@ module Mongoid
|
|
160
96
|
# Mongoid.database = Mongo::Connection.new.db("test")
|
161
97
|
#
|
162
98
|
# @since 1.0.0
|
163
|
-
delegate(*(Config.public_instance_methods(false)
|
164
|
-
ActiveModel::Observing::ClassMethods.public_instance_methods(false) - [:logger=, :logger] <<
|
165
|
-
{ to: Config }))
|
99
|
+
delegate(*(Config.public_instance_methods(false) - [ :logger=, :logger ] << { to: Config }))
|
166
100
|
end
|
data/lib/mongoid/atomic.rb
CHANGED
@@ -125,7 +125,7 @@ module Mongoid
|
|
125
125
|
# @return [ Hash ] The updates and their modifiers.
|
126
126
|
#
|
127
127
|
# @since 2.1.0
|
128
|
-
def atomic_updates(
|
128
|
+
def atomic_updates(_use_indexes = false)
|
129
129
|
process_flagged_destroys
|
130
130
|
mods = Modifiers.new
|
131
131
|
generate_atomic_updates(mods, self)
|
@@ -189,7 +189,7 @@ module Mongoid
|
|
189
189
|
#
|
190
190
|
# @since 2.1.0
|
191
191
|
def atomic_paths
|
192
|
-
@atomic_paths ||=
|
192
|
+
@atomic_paths ||= __metadata ? __metadata.path(self) : Atomic::Paths::Root.new(self)
|
193
193
|
end
|
194
194
|
|
195
195
|
# Get all the attributes that need to be pulled.
|
@@ -206,7 +206,7 @@ module Mongoid
|
|
206
206
|
path = nil
|
207
207
|
ids = docs.map do |doc|
|
208
208
|
path ||= doc.flag_as_destroyed
|
209
|
-
doc.
|
209
|
+
doc._id
|
210
210
|
end
|
211
211
|
pulls[path] = { "_id" => { "$in" => ids }} and path = nil
|
212
212
|
end
|
@@ -225,17 +225,6 @@ module Mongoid
|
|
225
225
|
pushable? ? { atomic_position => as_document } : {}
|
226
226
|
end
|
227
227
|
|
228
|
-
# Return the selector for this document to be matched exactly for use
|
229
|
-
# with MongoDB's $ operator.
|
230
|
-
#
|
231
|
-
# @example Get the selector.
|
232
|
-
# address.atomic_selector
|
233
|
-
#
|
234
|
-
# @return [ String ] The exact selector for this document.
|
235
|
-
def atomic_selector
|
236
|
-
atomic_paths.selector
|
237
|
-
end
|
238
|
-
|
239
228
|
# Get all the attributes that need to be set.
|
240
229
|
#
|
241
230
|
# @example Get the sets.
|
@@ -22,36 +22,6 @@ module Mongoid
|
|
22
22
|
def path
|
23
23
|
@path ||= position.sub(/\.\d+$/, "")
|
24
24
|
end
|
25
|
-
|
26
|
-
# Get the selector to use for the root document when performing atomic
|
27
|
-
# updates. When sharding this will include the shard key.
|
28
|
-
#
|
29
|
-
# @example Get the selector.
|
30
|
-
# many.selector
|
31
|
-
#
|
32
|
-
# @return [ Hash ] The selector to identify the document with.
|
33
|
-
#
|
34
|
-
# @since 2.1.0
|
35
|
-
def selector
|
36
|
-
@selector ||= generate_selector
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def generate_selector
|
42
|
-
if only_root_selector?
|
43
|
-
parent.atomic_selector
|
44
|
-
else
|
45
|
-
parent.
|
46
|
-
atomic_selector.
|
47
|
-
merge("#{path}._id" => document._id).
|
48
|
-
merge(document.shard_key_selector)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def only_root_selector?
|
53
|
-
document.persisted? && document._id_changed?
|
54
|
-
end
|
55
25
|
end
|
56
26
|
end
|
57
27
|
end
|
@@ -35,7 +35,7 @@ module Mongoid
|
|
35
35
|
def position
|
36
36
|
pos = parent.atomic_position
|
37
37
|
locator = document.new_record? ? "" : ".#{document._index}"
|
38
|
-
"#{pos}#{"." unless pos.blank?}#{document.
|
38
|
+
"#{pos}#{"." unless pos.blank?}#{document.__metadata.store_as}#{locator}"
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
@@ -33,19 +33,6 @@ module Mongoid
|
|
33
33
|
def insert_modifier
|
34
34
|
raise Errors::InvalidPath.new(document.class)
|
35
35
|
end
|
36
|
-
|
37
|
-
# Get the selector to use for the root document when performing atomic
|
38
|
-
# updates. When sharding this will include the shard key.
|
39
|
-
#
|
40
|
-
# @example Get the selector.
|
41
|
-
# root.selector
|
42
|
-
#
|
43
|
-
# @return [ Hash ] The selector to identify the document with.
|
44
|
-
#
|
45
|
-
# @since 2.1.0
|
46
|
-
def selector
|
47
|
-
@selector ||= { "_id" => document._id }.merge!(document.shard_key_selector)
|
48
|
-
end
|
49
36
|
end
|
50
37
|
end
|
51
38
|
end
|
data/lib/mongoid/attributes.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require "active_model/attribute_methods"
|
3
|
+
require "mongoid/attributes/dynamic"
|
4
|
+
require "mongoid/attributes/nested"
|
2
5
|
require "mongoid/attributes/processing"
|
3
6
|
require "mongoid/attributes/readonly"
|
4
7
|
|
@@ -8,6 +11,7 @@ module Mongoid
|
|
8
11
|
# and how to get and set values.
|
9
12
|
module Attributes
|
10
13
|
extend ActiveSupport::Concern
|
14
|
+
include Nested
|
11
15
|
include Processing
|
12
16
|
include Readonly
|
13
17
|
|
@@ -27,6 +31,8 @@ module Mongoid
|
|
27
31
|
def attribute_present?(name)
|
28
32
|
attribute = read_attribute(name)
|
29
33
|
!attribute.blank? || attribute == false
|
34
|
+
rescue ActiveModel::MissingAttributeError
|
35
|
+
false
|
30
36
|
end
|
31
37
|
|
32
38
|
# Get the attributes that have not been cast.
|
@@ -86,7 +92,10 @@ module Mongoid
|
|
86
92
|
#
|
87
93
|
# @since 1.0.0
|
88
94
|
def read_attribute(name)
|
89
|
-
normalized = name.to_s
|
95
|
+
normalized = database_field_name(name.to_s)
|
96
|
+
if attribute_missing?(normalized)
|
97
|
+
raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'."
|
98
|
+
end
|
90
99
|
if hash_dot_syntax?(normalized)
|
91
100
|
attributes.__nested__(normalized)
|
92
101
|
else
|
@@ -141,25 +150,6 @@ module Mongoid
|
|
141
150
|
end
|
142
151
|
end
|
143
152
|
|
144
|
-
# Override respond_to? so it responds properly for dynamic attributes.
|
145
|
-
#
|
146
|
-
# @example Does this object respond to the method?
|
147
|
-
# person.respond_to?(:title)
|
148
|
-
#
|
149
|
-
# @param [ Array ] *args The name of the method.
|
150
|
-
#
|
151
|
-
# @return [ true, false ] True if it does, false if not.
|
152
|
-
#
|
153
|
-
# @since 1.0.0
|
154
|
-
def respond_to?(name, include_private = false)
|
155
|
-
super || (
|
156
|
-
Mongoid.allow_dynamic_fields &&
|
157
|
-
attributes &&
|
158
|
-
attributes.has_key?(name.to_s.reader) &&
|
159
|
-
name.to_s.valid_method_name?
|
160
|
-
)
|
161
|
-
end
|
162
|
-
|
163
153
|
# Write a single attribute to the document attribute hash. This will
|
164
154
|
# also fire the before and after update callbacks, and perform any
|
165
155
|
# necessary typecasting.
|
@@ -178,6 +168,7 @@ module Mongoid
|
|
178
168
|
access = database_field_name(name.to_s)
|
179
169
|
if attribute_writable?(access)
|
180
170
|
_assigning do
|
171
|
+
validate_attribute_value(access, value)
|
181
172
|
localized = fields[access].try(:localized?)
|
182
173
|
attributes_before_type_cast[name.to_s] = value
|
183
174
|
typed_value = typed_value_for(access, value)
|
@@ -207,12 +198,11 @@ module Mongoid
|
|
207
198
|
# person.assign_attributes({ :title => "Mr." }, :as => :admin)
|
208
199
|
#
|
209
200
|
# @param [ Hash ] attrs The new attributes to set.
|
210
|
-
# @param [ Hash ] options Supported options: :without_protection, :as
|
211
201
|
#
|
212
202
|
# @since 2.2.1
|
213
|
-
def assign_attributes(attrs = nil
|
203
|
+
def assign_attributes(attrs = nil)
|
214
204
|
_assigning do
|
215
|
-
process_attributes(attrs
|
205
|
+
process_attributes(attrs)
|
216
206
|
end
|
217
207
|
end
|
218
208
|
|
@@ -230,71 +220,46 @@ module Mongoid
|
|
230
220
|
# @param [ Boolean ] guard_protected_attributes False to skip mass assignment protection.
|
231
221
|
#
|
232
222
|
# @since 1.0.0
|
233
|
-
def write_attributes(attrs = nil
|
234
|
-
assign_attributes(attrs
|
223
|
+
def write_attributes(attrs = nil)
|
224
|
+
assign_attributes(attrs)
|
235
225
|
end
|
236
226
|
alias :attributes= :write_attributes
|
237
227
|
|
238
|
-
|
239
|
-
|
240
|
-
# Define a reader method for a dynamic attribute.
|
228
|
+
# Determine if the attribute is missing from the document, due to loading
|
229
|
+
# it from the database with missing fields.
|
241
230
|
#
|
242
|
-
# @
|
231
|
+
# @example Is the attribute missing?
|
232
|
+
# document.attribute_missing?("test")
|
243
233
|
#
|
244
|
-
# @
|
245
|
-
# model.define_dynamic_reader(:field)
|
234
|
+
# @param [ String ] name The name of the attribute.
|
246
235
|
#
|
247
|
-
# @
|
236
|
+
# @return [ true, false ] If the attribute is missing.
|
248
237
|
#
|
249
|
-
# @since
|
250
|
-
def
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
read_attribute(#{name.inspect})
|
257
|
-
end
|
258
|
-
READER
|
238
|
+
# @since 4.0.0
|
239
|
+
def attribute_missing?(name)
|
240
|
+
selection = __selected_fields
|
241
|
+
return false unless selection
|
242
|
+
field = fields[name]
|
243
|
+
(selection.values.first == 0 && selection_excluded?(name, selection, field)) ||
|
244
|
+
(selection.values.first == 1 && !selection_included?(name, selection, field))
|
259
245
|
end
|
260
246
|
|
261
|
-
|
262
|
-
#
|
263
|
-
# @api private
|
264
|
-
#
|
265
|
-
# @example Define a reader method for an attribute.
|
266
|
-
# model.define_dynamic_before_type_cast_reader(:field)
|
267
|
-
#
|
268
|
-
# @param [ String ] name The name of the field.
|
269
|
-
#
|
270
|
-
# @since 3.1.0
|
271
|
-
def define_dynamic_before_type_cast_reader(name)
|
272
|
-
class_eval <<-READER
|
273
|
-
def #{name}_before_type_cast
|
274
|
-
attribute_will_change!(#{name.inspect})
|
275
|
-
read_attribute_before_type_cast(#{name.inspect})
|
276
|
-
end
|
277
|
-
READER
|
278
|
-
end
|
247
|
+
private
|
279
248
|
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
# @param [ String ] name The name of the field.
|
288
|
-
#
|
289
|
-
# @since 3.0.0
|
290
|
-
def define_dynamic_writer(name)
|
291
|
-
return unless name.valid_method_name?
|
249
|
+
def selection_excluded?(name, selection, field)
|
250
|
+
if field && field.localized?
|
251
|
+
selection["#{name}.#{::I18n.locale}"] == 0
|
252
|
+
else
|
253
|
+
selection[name] == 0
|
254
|
+
end
|
255
|
+
end
|
292
256
|
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
257
|
+
def selection_included?(name, selection, field)
|
258
|
+
if field && field.localized?
|
259
|
+
selection.has_key?("#{name}.#{::I18n.locale}")
|
260
|
+
else
|
261
|
+
selection.has_key?(name)
|
262
|
+
end
|
298
263
|
end
|
299
264
|
|
300
265
|
# Does the string contain dot syntax for accessing hashes?
|
@@ -308,30 +273,7 @@ module Mongoid
|
|
308
273
|
#
|
309
274
|
# @since 3.0.15
|
310
275
|
def hash_dot_syntax?(string)
|
311
|
-
string
|
312
|
-
end
|
313
|
-
|
314
|
-
# Used for allowing accessor methods for dynamic attributes.
|
315
|
-
#
|
316
|
-
# @param [ String, Symbol ] name The name of the method.
|
317
|
-
# @param [ Array ] *args The arguments to the method.
|
318
|
-
def method_missing(name, *args)
|
319
|
-
attr = name.to_s
|
320
|
-
return super unless attributes.has_key?(attr.reader)
|
321
|
-
if attr.writer?
|
322
|
-
getter = attr.reader
|
323
|
-
define_dynamic_writer(getter)
|
324
|
-
write_attribute(getter, args.first)
|
325
|
-
elsif attr.before_type_cast?
|
326
|
-
define_dynamic_before_type_cast_reader(attr.reader)
|
327
|
-
attribute_will_change!(attr.reader)
|
328
|
-
read_attribute_before_type_cast(attr.reader)
|
329
|
-
else
|
330
|
-
getter = attr.reader
|
331
|
-
define_dynamic_reader(getter)
|
332
|
-
attribute_will_change!(attr.reader)
|
333
|
-
read_attribute(getter)
|
334
|
-
end
|
276
|
+
string.include?(".")
|
335
277
|
end
|
336
278
|
|
337
279
|
# Return the typecasted value for a field.
|
@@ -367,6 +309,7 @@ module Mongoid
|
|
367
309
|
#
|
368
310
|
# @since 2.3.0
|
369
311
|
def alias_attribute(name, original)
|
312
|
+
aliased_fields[name.to_s] = original.to_s
|
370
313
|
class_eval <<-RUBY
|
371
314
|
alias #{name} #{original}
|
372
315
|
alias #{name}= #{original}=
|
@@ -374,11 +317,32 @@ module Mongoid
|
|
374
317
|
alias #{name}_change #{original}_change
|
375
318
|
alias #{name}_changed? #{original}_changed?
|
376
319
|
alias reset_#{name}! reset_#{original}!
|
320
|
+
alias reset_#{name}_to_default! reset_#{original}_to_default!
|
377
321
|
alias #{name}_was #{original}_was
|
378
322
|
alias #{name}_will_change! #{original}_will_change!
|
379
323
|
alias #{name}_before_type_cast #{original}_before_type_cast
|
380
324
|
RUBY
|
381
325
|
end
|
382
326
|
end
|
327
|
+
|
328
|
+
private
|
329
|
+
|
330
|
+
# Validates an attribute value. This provides validation checking if
|
331
|
+
# the value is valid for given a field.
|
332
|
+
# For now, only Hash and Array fields are validated.
|
333
|
+
#
|
334
|
+
# @param [ String, Symbol ] name The name of the attribute to validate.
|
335
|
+
# @param [ Object ] value The to be validated.
|
336
|
+
#
|
337
|
+
# @since 3.0.10
|
338
|
+
def validate_attribute_value(access, value)
|
339
|
+
return unless fields[access] && value
|
340
|
+
validatable_types = [ Hash, Array ]
|
341
|
+
if validatable_types.include? fields[access].type
|
342
|
+
unless value.is_a? fields[access].type
|
343
|
+
raise Mongoid::Errors::InvalidValue.new(fields[access].type, value.class)
|
344
|
+
end
|
345
|
+
end
|
346
|
+
end
|
383
347
|
end
|
384
348
|
end
|