mongoid 3.1.7 → 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 +470 -9
- data/README.md +10 -7
- data/lib/config/locales/en.yml +34 -20
- 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/embedded.rb +0 -30
- data/lib/mongoid/atomic/paths/root.rb +0 -13
- data/lib/mongoid/atomic.rb +3 -14
- 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/attributes.rb +63 -99
- data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
- data/lib/mongoid/composable.rb +105 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config.rb +3 -9
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -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/contextual.rb +2 -0
- data/lib/mongoid/copyable.rb +2 -3
- 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/criteria.rb +39 -34
- data/lib/mongoid/document.rb +39 -24
- 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/errors.rb +4 -1
- 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/extensions.rb +15 -7
- data/lib/mongoid/factory.rb +8 -6
- 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/fields.rb +41 -8
- data/lib/mongoid/{finders.rb → findable.rb} +35 -7
- data/lib/mongoid/indexable/specification.rb +104 -0
- data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
- data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
- 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/{matchers → matchable}/all.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/ne.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
- data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
- data/lib/mongoid/matchable.rb +152 -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/persistable.rb +216 -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/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/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/builders.rb +2 -2
- 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/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/eager.rb +46 -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/relations.rb +11 -25
- 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/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/sessions.rb +37 -345
- 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/lifecycle.rb +0 -28
- data/lib/mongoid/threaded.rb +26 -172
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
- 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/{validations.rb → validatable.rb} +23 -10
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid.rb +10 -76
- 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/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/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 +334 -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 +46 -38
- data/spec/mongoid/contextual/atomic_spec.rb +59 -55
- 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 +713 -2419
- 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/{matchers → matchable}/ne_spec.rb +3 -3
- data/spec/mongoid/matchable/nin_spec.rb +48 -0
- data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
- data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
- data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
- data/spec/mongoid/persistable/creatable_spec.rb +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} +9 -9
- 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 -350
- data/spec/spec_helper.rb +26 -15
- metadata +262 -247
- 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/strategies.rb +0 -97
- data/lib/mongoid/matchers.rb +0 -32
- 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/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/atomic.rb +0 -231
- 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/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/operations.rb +0 -214
- data/lib/mongoid/persistence/upsertion.rb +0 -31
- data/lib/mongoid/persistence.rb +0 -357
- data/lib/mongoid/unit_of_work.rb +0 -61
- data/lib/mongoid/versioning.rb +0 -217
- data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
- data/lib/rack/mongoid.rb +0 -2
- 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/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/lib/mongoid/document.rb
CHANGED
|
@@ -1,13 +1,30 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
require "mongoid/positional"
|
|
3
|
+
require "mongoid/evolvable"
|
|
4
|
+
require "mongoid/extensions"
|
|
5
|
+
require "mongoid/errors"
|
|
6
|
+
require "mongoid/threaded"
|
|
7
|
+
require "mongoid/relations"
|
|
8
|
+
require "mongoid/atomic"
|
|
9
|
+
require "mongoid/attributes"
|
|
10
|
+
require "mongoid/contextual"
|
|
11
|
+
require "mongoid/copyable"
|
|
12
|
+
require "mongoid/equality"
|
|
13
|
+
require "mongoid/criteria"
|
|
14
|
+
require "mongoid/factory"
|
|
15
|
+
require "mongoid/fields"
|
|
16
|
+
require "mongoid/timestamps"
|
|
17
|
+
require "mongoid/composable"
|
|
18
|
+
|
|
2
19
|
module Mongoid
|
|
3
20
|
|
|
4
21
|
# This is the base module for all domain objects that need to be persisted to
|
|
5
22
|
# the database as documents.
|
|
6
23
|
module Document
|
|
7
24
|
extend ActiveSupport::Concern
|
|
8
|
-
include
|
|
25
|
+
include Composable
|
|
9
26
|
|
|
10
|
-
attr_accessor :
|
|
27
|
+
attr_accessor :__selected_fields
|
|
11
28
|
attr_reader :new_record
|
|
12
29
|
|
|
13
30
|
included do
|
|
@@ -56,16 +73,16 @@ module Mongoid
|
|
|
56
73
|
|
|
57
74
|
# A Document's is identified absolutely by its class and database id:
|
|
58
75
|
#
|
|
59
|
-
# Person.first.identity #=> [Person,
|
|
76
|
+
# Person.first.identity #=> [Person, BSON::ObjectId('4f775130a04745933a000003')]
|
|
60
77
|
#
|
|
61
78
|
# @example Get the identity
|
|
62
79
|
# document.identity
|
|
63
80
|
#
|
|
64
|
-
# @return [ Array ] An array containing [document.class, document.
|
|
81
|
+
# @return [ Array ] An array containing [document.class, document._id]
|
|
65
82
|
#
|
|
66
83
|
# @since 3.0.0
|
|
67
84
|
def identity
|
|
68
|
-
[ self.class, self.
|
|
85
|
+
[ self.class, self._id ]
|
|
69
86
|
end
|
|
70
87
|
|
|
71
88
|
# Instantiate a new +Document+, setting the Document's attributes if
|
|
@@ -73,25 +90,24 @@ module Mongoid
|
|
|
73
90
|
# an empty +Hash+.
|
|
74
91
|
#
|
|
75
92
|
# If a primary key is defined, the document's id will be set to that key,
|
|
76
|
-
# otherwise it will be set to a fresh +
|
|
93
|
+
# otherwise it will be set to a fresh +BSON::ObjectId+ string.
|
|
77
94
|
#
|
|
78
95
|
# @example Create a new document.
|
|
79
96
|
# Person.new(:title => "Sir")
|
|
80
97
|
#
|
|
81
98
|
# @param [ Hash ] attrs The attributes to set up the document with.
|
|
82
|
-
# @param [ Hash ] options A mass-assignment protection options. Supports
|
|
83
|
-
# :as and :without_protection
|
|
84
99
|
#
|
|
85
100
|
# @return [ Document ] A new document.
|
|
86
101
|
#
|
|
87
102
|
# @since 1.0.0
|
|
88
|
-
def initialize(attrs = nil
|
|
103
|
+
def initialize(attrs = nil)
|
|
89
104
|
_building do
|
|
90
105
|
@new_record = true
|
|
91
106
|
@attributes ||= {}
|
|
92
|
-
|
|
107
|
+
with(self.class.persistence_options)
|
|
93
108
|
apply_pre_processed_defaults
|
|
94
|
-
|
|
109
|
+
apply_default_scoping
|
|
110
|
+
process_attributes(attrs) do
|
|
95
111
|
yield(self) if block_given?
|
|
96
112
|
end
|
|
97
113
|
apply_post_processed_defaults
|
|
@@ -118,11 +134,11 @@ module Mongoid
|
|
|
118
134
|
# @example Return the key.
|
|
119
135
|
# document.to_key
|
|
120
136
|
#
|
|
121
|
-
# @return [
|
|
137
|
+
# @return [ String ] The id of the document or nil if new.
|
|
122
138
|
#
|
|
123
139
|
# @since 2.4.0
|
|
124
140
|
def to_key
|
|
125
|
-
(persisted? || destroyed?) ? [ id ] : nil
|
|
141
|
+
(persisted? || destroyed?) ? [ id.to_s ] : nil
|
|
126
142
|
end
|
|
127
143
|
|
|
128
144
|
# Return an array with this +Document+ only in it.
|
|
@@ -182,10 +198,11 @@ module Mongoid
|
|
|
182
198
|
raise ArgumentError, "A class which includes Mongoid::Document is expected"
|
|
183
199
|
end
|
|
184
200
|
|
|
185
|
-
became = klass.new(clone_document
|
|
186
|
-
became.
|
|
201
|
+
became = klass.new(clone_document)
|
|
202
|
+
became._id = _id
|
|
187
203
|
became.instance_variable_set(:@changed_attributes, changed_attributes)
|
|
188
|
-
became.instance_variable_set(:@errors,
|
|
204
|
+
became.instance_variable_set(:@errors, ActiveModel::Errors.new(became))
|
|
205
|
+
became.errors.instance_variable_set(:@messages, errors.instance_variable_get(:@messages))
|
|
189
206
|
became.instance_variable_set(:@new_record, new_record?)
|
|
190
207
|
became.instance_variable_set(:@destroyed, destroyed?)
|
|
191
208
|
became.changed_attributes["_type"] = self.class.to_s
|
|
@@ -201,7 +218,6 @@ module Mongoid
|
|
|
201
218
|
end
|
|
202
219
|
end
|
|
203
220
|
|
|
204
|
-
IdentityMap.set(became) unless became.new_record?
|
|
205
221
|
became
|
|
206
222
|
end
|
|
207
223
|
|
|
@@ -209,7 +225,7 @@ module Mongoid
|
|
|
209
225
|
# plural model name.
|
|
210
226
|
#
|
|
211
227
|
# If new_record? - will append /new
|
|
212
|
-
# If not - will append /id-updated_at.to_s(:
|
|
228
|
+
# If not - will append /id-updated_at.to_s(:nsec)
|
|
213
229
|
# Without updated_at - will append /id
|
|
214
230
|
#
|
|
215
231
|
# This is usually called insode a cache() block
|
|
@@ -222,7 +238,7 @@ module Mongoid
|
|
|
222
238
|
# @since 2.4.0
|
|
223
239
|
def cache_key
|
|
224
240
|
return "#{model_key}/new" if new_record?
|
|
225
|
-
return "#{model_key}/#{id}-#{updated_at.utc.to_s(:
|
|
241
|
+
return "#{model_key}/#{id}-#{updated_at.utc.to_s(:nsec)}" if do_or_do_not(:updated_at)
|
|
226
242
|
"#{model_key}/#{id}"
|
|
227
243
|
end
|
|
228
244
|
|
|
@@ -284,19 +300,18 @@ module Mongoid
|
|
|
284
300
|
# Person.instantiate(:title => "Sir", :age => 30)
|
|
285
301
|
#
|
|
286
302
|
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
|
287
|
-
# @param [ Integer ]
|
|
288
|
-
#
|
|
303
|
+
# @param [ Integer ] selected_fields The selected fields from the
|
|
304
|
+
# criteria.
|
|
289
305
|
#
|
|
290
306
|
# @return [ Document ] A new document.
|
|
291
307
|
#
|
|
292
308
|
# @since 1.0.0
|
|
293
|
-
def instantiate(attrs = nil,
|
|
309
|
+
def instantiate(attrs = nil, selected_fields = nil)
|
|
294
310
|
attributes = attrs || {}
|
|
295
311
|
doc = allocate
|
|
296
|
-
doc.
|
|
312
|
+
doc.__selected_fields = selected_fields
|
|
297
313
|
doc.instance_variable_set(:@attributes, attributes)
|
|
298
314
|
doc.apply_defaults
|
|
299
|
-
IdentityMap.set(doc) unless _loading_revision?
|
|
300
315
|
yield(doc) if block_given?
|
|
301
316
|
doc.run_callbacks(:find) unless doc._find_callbacks.empty?
|
|
302
317
|
doc.run_callbacks(:initialize) unless doc._initialize_callbacks.empty?
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
|
+
|
|
5
|
+
# Raised when attempting to destroy a document that had destory callbacks
|
|
6
|
+
# return false.
|
|
7
|
+
#
|
|
8
|
+
# @since 4.0.0
|
|
9
|
+
class DocumentNotDestroyed < MongoidError
|
|
10
|
+
|
|
11
|
+
# Instnatiate the exception.
|
|
12
|
+
#
|
|
13
|
+
# @example Create the error.
|
|
14
|
+
# DocumentNotDestroyed.new(Band)
|
|
15
|
+
#
|
|
16
|
+
# @param [ Object ] id The document id.
|
|
17
|
+
# @param [ Class ] klass The document class.
|
|
18
|
+
#
|
|
19
|
+
# @since 4.0.0
|
|
20
|
+
def initialize(id, klass)
|
|
21
|
+
super(compose_message("document_not_destroyed", { id: id.inspect, klass: klass }))
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -22,8 +22,9 @@ module Mongoid
|
|
|
22
22
|
# @param [ Array ] unmatched The unmatched ids, if appropriate
|
|
23
23
|
def initialize(klass, params, unmatched = nil)
|
|
24
24
|
if !unmatched && !params.is_a?(Hash)
|
|
25
|
-
|
|
25
|
+
unmatched = Array(params)
|
|
26
26
|
end
|
|
27
|
+
|
|
27
28
|
@klass, @params = klass, params
|
|
28
29
|
super(
|
|
29
30
|
compose_message(
|
|
@@ -8,7 +8,7 @@ module Mongoid
|
|
|
8
8
|
# Create the new error.
|
|
9
9
|
#
|
|
10
10
|
# @example Create the new error.
|
|
11
|
-
# InvalidStorageOptions.new(:
|
|
11
|
+
# InvalidStorageOptions.new(Person, invalid_option: 'name')
|
|
12
12
|
#
|
|
13
13
|
# @param [ Class ] klass The model class.
|
|
14
14
|
# @param [ Hash, String, Symbol ] options The provided options.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
|
+
|
|
5
|
+
# Raised when calling store_in in a sub-class of Mongoid::Document
|
|
6
|
+
class InvalidStorageParent < MongoidError
|
|
7
|
+
|
|
8
|
+
# Create the new error.
|
|
9
|
+
#
|
|
10
|
+
# @example Create the new error.
|
|
11
|
+
# InvalidStorageParent.new(Person)
|
|
12
|
+
#
|
|
13
|
+
# @param [ Class ] klass The model class.
|
|
14
|
+
#
|
|
15
|
+
# @since 4.0.0
|
|
16
|
+
def initialize(klass)
|
|
17
|
+
super(
|
|
18
|
+
compose_message(
|
|
19
|
+
"invalid_storage_parent",
|
|
20
|
+
{ klass: klass }
|
|
21
|
+
)
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
|
+
|
|
5
|
+
# This error is raised when trying to set an attribute with an invalid value.
|
|
6
|
+
# For example when try to set an Array value to a Hash attribute.
|
|
7
|
+
#
|
|
8
|
+
class InvalidValue < MongoidError
|
|
9
|
+
def initialize(field_class, value_class)
|
|
10
|
+
super(
|
|
11
|
+
compose_message("invalid_value", { value_class: value_class, field_class: field_class })
|
|
12
|
+
)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -40,7 +40,7 @@ module Mongoid
|
|
|
40
40
|
#
|
|
41
41
|
# @return [ String ] A localized error message string.
|
|
42
42
|
def translate(key, options)
|
|
43
|
-
::I18n.translate("#{BASE_KEY}.#{key}",
|
|
43
|
+
::I18n.translate("#{BASE_KEY}.#{key}", options)
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
# Create the problem.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
|
+
|
|
5
|
+
# Raised when attempting to persist a document that was loaded from the
|
|
6
|
+
# database with partial fields.
|
|
7
|
+
#
|
|
8
|
+
# @since 4.0.0
|
|
9
|
+
class ReadonlyDocument < MongoidError
|
|
10
|
+
|
|
11
|
+
# Instnatiate the exception.
|
|
12
|
+
#
|
|
13
|
+
# @example Create the error.
|
|
14
|
+
# ReadonlyDocument.new(Band)
|
|
15
|
+
#
|
|
16
|
+
# @param [ Class ] klass The document class.
|
|
17
|
+
#
|
|
18
|
+
# @since 4.0.0
|
|
19
|
+
def initialize(klass)
|
|
20
|
+
super(compose_message("readonly_document", { klass: klass }))
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/lib/mongoid/errors.rb
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
require "mongoid/errors/mongoid_error"
|
|
3
3
|
require "mongoid/errors/ambiguous_relationship"
|
|
4
4
|
require "mongoid/errors/callback"
|
|
5
|
+
require "mongoid/errors/document_not_destroyed"
|
|
5
6
|
require "mongoid/errors/document_not_found"
|
|
6
7
|
require "mongoid/errors/eager_load"
|
|
7
8
|
require "mongoid/errors/invalid_collection"
|
|
@@ -16,7 +17,9 @@ require "mongoid/errors/invalid_path"
|
|
|
16
17
|
require "mongoid/errors/invalid_scope"
|
|
17
18
|
require "mongoid/errors/invalid_set_polymorphic_relation"
|
|
18
19
|
require "mongoid/errors/invalid_storage_options"
|
|
20
|
+
require "mongoid/errors/invalid_storage_parent"
|
|
19
21
|
require "mongoid/errors/invalid_time"
|
|
22
|
+
require "mongoid/errors/invalid_value"
|
|
20
23
|
require "mongoid/errors/inverse_not_found"
|
|
21
24
|
require "mongoid/errors/mixed_relations"
|
|
22
25
|
require "mongoid/errors/mixed_session_configuration"
|
|
@@ -31,11 +34,11 @@ require "mongoid/errors/no_sessions_config"
|
|
|
31
34
|
require "mongoid/errors/no_session_database"
|
|
32
35
|
require "mongoid/errors/no_session_hosts"
|
|
33
36
|
require "mongoid/errors/readonly_attribute"
|
|
37
|
+
require "mongoid/errors/readonly_document"
|
|
34
38
|
require "mongoid/errors/scope_overwrite"
|
|
35
39
|
require "mongoid/errors/too_many_nested_attribute_records"
|
|
36
40
|
require "mongoid/errors/unknown_attribute"
|
|
37
41
|
require "mongoid/errors/unsaved_document"
|
|
38
42
|
require "mongoid/errors/unsupported_javascript"
|
|
39
43
|
require "mongoid/errors/validations"
|
|
40
|
-
require "mongoid/errors/versioning_not_on_root"
|
|
41
44
|
require "mongoid/errors/delete_restriction"
|
|
@@ -8,7 +8,7 @@ module Mongoid
|
|
|
8
8
|
# @example Evolve the array to object ids.
|
|
9
9
|
# [ id ].__evolve_object_id__
|
|
10
10
|
#
|
|
11
|
-
# @return [ Array<
|
|
11
|
+
# @return [ Array<BSON::ObjectId> ] The converted array.
|
|
12
12
|
#
|
|
13
13
|
# @since 3.0.0
|
|
14
14
|
def __evolve_object_id__
|
|
@@ -33,7 +33,7 @@ module Mongoid
|
|
|
33
33
|
# @example Evolve the array to object ids.
|
|
34
34
|
# [ id ].__mongoize_object_id__
|
|
35
35
|
#
|
|
36
|
-
# @return [ Array<
|
|
36
|
+
# @return [ Array<BSON::ObjectId> ] The converted array.
|
|
37
37
|
#
|
|
38
38
|
# @since 3.0.0
|
|
39
39
|
def __mongoize_object_id__
|
|
@@ -177,4 +177,4 @@ module Mongoid
|
|
|
177
177
|
end
|
|
178
178
|
|
|
179
179
|
::Array.__send__(:include, Mongoid::Extensions::Array)
|
|
180
|
-
::Array.
|
|
180
|
+
::Array.extend(Mongoid::Extensions::Array::ClassMethods)
|
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
module Mongoid
|
|
3
|
-
|
|
4
|
-
module Boolean
|
|
5
|
-
module ClassMethods
|
|
3
|
+
class Boolean
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
class << self
|
|
6
|
+
|
|
7
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
8
|
+
# type.
|
|
9
|
+
#
|
|
10
|
+
# @example Mongoize the object.
|
|
11
|
+
# Boolean.mongoize("123.11")
|
|
12
|
+
#
|
|
13
|
+
# @return [ String ] The object mongoized.
|
|
14
|
+
#
|
|
15
|
+
# @since 3.0.0
|
|
16
|
+
def mongoize(object)
|
|
17
|
+
::Boolean.evolve(object)
|
|
19
18
|
end
|
|
19
|
+
alias :evolve :mongoize
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
|
-
|
|
24
|
-
::Boolean.__send__(:extend, Mongoid::Extensions::Boolean::ClassMethods)
|
|
@@ -12,9 +12,9 @@ module Mongoid
|
|
|
12
12
|
#
|
|
13
13
|
# @since 3.0.0
|
|
14
14
|
def __mongoize_time__
|
|
15
|
-
return
|
|
15
|
+
return to_time if utc? && Mongoid.use_utc?
|
|
16
16
|
if Mongoid.use_activesupport_time_zone?
|
|
17
|
-
in_time_zone(::Time.zone)
|
|
17
|
+
in_time_zone(::Time.zone).to_time
|
|
18
18
|
else
|
|
19
19
|
time = to_time
|
|
20
20
|
time.respond_to?(:getlocal) ? time.getlocal : time
|
|
@@ -70,4 +70,4 @@ module Mongoid
|
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
::DateTime.__send__(:include, Mongoid::Extensions::DateTime)
|
|
73
|
-
::DateTime.
|
|
73
|
+
::DateTime.extend(Mongoid::Extensions::DateTime::ClassMethods)
|
|
@@ -47,10 +47,11 @@ module Mongoid
|
|
|
47
47
|
nil
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
|
+
alias :demongoize :mongoize
|
|
50
51
|
end
|
|
51
52
|
end
|
|
52
53
|
end
|
|
53
54
|
end
|
|
54
55
|
|
|
55
56
|
::Float.__send__(:include, Mongoid::Extensions::Float)
|
|
56
|
-
::Float.
|
|
57
|
+
::Float.extend(Mongoid::Extensions::Float::ClassMethods)
|
|
@@ -40,7 +40,7 @@ module Mongoid
|
|
|
40
40
|
each_pair do |key, value|
|
|
41
41
|
if key =~ /\$/
|
|
42
42
|
value.each_pair do |_key, _value|
|
|
43
|
-
value[_key] = mongoize_for(key, klass, _key, _value)
|
|
43
|
+
value[_key] = (key == "$rename") ? _value.to_s : mongoize_for(key, klass, _key, _value)
|
|
44
44
|
end
|
|
45
45
|
(consolidated[key] ||= {}).merge!(value)
|
|
46
46
|
else
|
|
@@ -170,7 +170,7 @@ module Mongoid
|
|
|
170
170
|
field = klass.fields[key.to_s]
|
|
171
171
|
if field
|
|
172
172
|
val = field.mongoize(value)
|
|
173
|
-
if Mongoid::
|
|
173
|
+
if Mongoid::Persistable::LIST_OPERATIONS.include?(operator) && field.resizable?
|
|
174
174
|
val = val.first if !value.is_a?(Array)
|
|
175
175
|
end
|
|
176
176
|
val
|
|
@@ -214,4 +214,4 @@ module Mongoid
|
|
|
214
214
|
end
|
|
215
215
|
|
|
216
216
|
::Hash.__send__(:include, Mongoid::Extensions::Hash)
|
|
217
|
-
::Hash.
|
|
217
|
+
::Hash.extend(Mongoid::Extensions::Hash::ClassMethods)
|
|
@@ -104,19 +104,19 @@ module Mongoid
|
|
|
104
104
|
send(name, *args) if name && respond_to?(name)
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
-
# Get the value for an instance variable or
|
|
107
|
+
# Get the value for an instance variable or false if it doesn't exist.
|
|
108
108
|
#
|
|
109
109
|
# @example Get the value for an instance var.
|
|
110
110
|
# document.ivar("person")
|
|
111
111
|
#
|
|
112
112
|
# @param [ String ] name The name of the variable.
|
|
113
113
|
#
|
|
114
|
-
# @return [ Object,
|
|
114
|
+
# @return [ Object, false ] The value or false.
|
|
115
115
|
#
|
|
116
116
|
# @since 2.0.0.rc.1
|
|
117
117
|
def ivar(name)
|
|
118
|
-
if instance_variable_defined?("
|
|
119
|
-
return instance_variable_get("
|
|
118
|
+
if instance_variable_defined?("@_#{name}")
|
|
119
|
+
return instance_variable_get("@_#{name}")
|
|
120
120
|
else
|
|
121
121
|
false
|
|
122
122
|
end
|
|
@@ -170,8 +170,8 @@ module Mongoid
|
|
|
170
170
|
#
|
|
171
171
|
# @since 2.1.0
|
|
172
172
|
def remove_ivar(name)
|
|
173
|
-
if instance_variable_defined?("
|
|
174
|
-
return remove_instance_variable("
|
|
173
|
+
if instance_variable_defined?("@_#{name}")
|
|
174
|
+
return remove_instance_variable("@_#{name}")
|
|
175
175
|
else
|
|
176
176
|
false
|
|
177
177
|
end
|
|
@@ -271,4 +271,4 @@ module Mongoid
|
|
|
271
271
|
end
|
|
272
272
|
|
|
273
273
|
::Object.__send__(:include, Mongoid::Extensions::Object)
|
|
274
|
-
::Object.
|
|
274
|
+
::Object.extend(Mongoid::Extensions::Object::ClassMethods)
|
|
@@ -8,7 +8,7 @@ module Mongoid
|
|
|
8
8
|
# @example Evolve the object id.
|
|
9
9
|
# object_id.__evolve_object_id__
|
|
10
10
|
#
|
|
11
|
-
# @return [
|
|
11
|
+
# @return [ BSON::ObjectId ] self.
|
|
12
12
|
#
|
|
13
13
|
# @since 3.0.0
|
|
14
14
|
def __evolve_object_id__
|
|
@@ -25,7 +25,7 @@ module Mongoid
|
|
|
25
25
|
#
|
|
26
26
|
# @param [ Object ] object The object to evolve.
|
|
27
27
|
#
|
|
28
|
-
# @return [
|
|
28
|
+
# @return [ BSON::ObjectId ] The object id.
|
|
29
29
|
#
|
|
30
30
|
# @since 3.0.0
|
|
31
31
|
def evolve(object)
|
|
@@ -39,7 +39,7 @@ module Mongoid
|
|
|
39
39
|
#
|
|
40
40
|
# @param [ Object ] object The object to convert.
|
|
41
41
|
#
|
|
42
|
-
# @return [
|
|
42
|
+
# @return [ BSON::ObjectId ] The object id.
|
|
43
43
|
#
|
|
44
44
|
# @since 3.0.0
|
|
45
45
|
def mongoize(object)
|
|
@@ -50,5 +50,5 @@ module Mongoid
|
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
BSON::ObjectId.__send__(:include, Mongoid::Extensions::ObjectId)
|
|
54
|
+
BSON::ObjectId.extend(Mongoid::Extensions::ObjectId::ClassMethods)
|
|
@@ -53,7 +53,7 @@ module Mongoid
|
|
|
53
53
|
#
|
|
54
54
|
# @since 3.0.0
|
|
55
55
|
def demongoize(object)
|
|
56
|
-
object.nil? ? nil : ::Range.new(object["min"], object["max"])
|
|
56
|
+
object.nil? ? nil : ::Range.new(object["min"], object["max"], object["exclude_end"])
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
@@ -68,7 +68,13 @@ module Mongoid
|
|
|
68
68
|
#
|
|
69
69
|
# @since 3.0.0
|
|
70
70
|
def mongoize(object)
|
|
71
|
-
|
|
71
|
+
return nil if object.nil?
|
|
72
|
+
return object if object.is_a?(::Hash)
|
|
73
|
+
hash = { "min" => object.first, "max" => object.last }
|
|
74
|
+
if object.respond_to?(:exclude_end?) && object.exclude_end?
|
|
75
|
+
hash.merge!("exclude_end" => true)
|
|
76
|
+
end
|
|
77
|
+
hash
|
|
72
78
|
end
|
|
73
79
|
end
|
|
74
80
|
end
|
|
@@ -76,4 +82,4 @@ module Mongoid
|
|
|
76
82
|
end
|
|
77
83
|
|
|
78
84
|
::Range.__send__(:include, Mongoid::Extensions::Range)
|
|
79
|
-
::Range.
|
|
85
|
+
::Range.extend(Mongoid::Extensions::Range::ClassMethods)
|
|
@@ -11,7 +11,7 @@ module Mongoid
|
|
|
11
11
|
# @example Evolve the string.
|
|
12
12
|
# "test".__evolve_object_id__
|
|
13
13
|
#
|
|
14
|
-
# @return [ String,
|
|
14
|
+
# @return [ String, BSON::ObjectId ] The evolved string.
|
|
15
15
|
#
|
|
16
16
|
# @since 3.0.0
|
|
17
17
|
def __evolve_object_id__
|
|
@@ -23,7 +23,7 @@ module Mongoid
|
|
|
23
23
|
# @example Evolve the string.
|
|
24
24
|
# "test".__mongoize_object_id__
|
|
25
25
|
#
|
|
26
|
-
# @return [ String,
|
|
26
|
+
# @return [ String, BSON::ObjectId, nil ] The mongoized string.
|
|
27
27
|
#
|
|
28
28
|
# @since 3.0.0
|
|
29
29
|
def __mongoize_object_id__
|
|
@@ -96,18 +96,6 @@ module Mongoid
|
|
|
96
96
|
delete("=").sub(/\_before\_type\_cast$/, '')
|
|
97
97
|
end
|
|
98
98
|
|
|
99
|
-
# Convert the string to an array with the string in it.
|
|
100
|
-
#
|
|
101
|
-
# @example Convert the string to an array.
|
|
102
|
-
# "Testing".to_a
|
|
103
|
-
#
|
|
104
|
-
# @return [ Array ] An array with only the string in it.
|
|
105
|
-
#
|
|
106
|
-
# @since 1.0.0
|
|
107
|
-
def to_a
|
|
108
|
-
[ self ]
|
|
109
|
-
end
|
|
110
|
-
|
|
111
99
|
# Is this string a writer?
|
|
112
100
|
#
|
|
113
101
|
# @example Is the string a setter method?
|
|
@@ -129,7 +117,7 @@ module Mongoid
|
|
|
129
117
|
#
|
|
130
118
|
# @since 3.0.15
|
|
131
119
|
def valid_method_name?
|
|
132
|
-
/[@$"]/ !~
|
|
120
|
+
/[@$"]/ !~ self
|
|
133
121
|
end
|
|
134
122
|
|
|
135
123
|
# Does the string end with _before_type_cast?
|
|
@@ -165,11 +153,11 @@ module Mongoid
|
|
|
165
153
|
# @example Convert to the object id.
|
|
166
154
|
# string.convert_to_object_id
|
|
167
155
|
#
|
|
168
|
-
# @return [ String,
|
|
156
|
+
# @return [ String, BSON::ObjectId ] The string or the id.
|
|
169
157
|
#
|
|
170
158
|
# @since 3.0.0
|
|
171
159
|
def convert_to_object_id
|
|
172
|
-
|
|
160
|
+
BSON::ObjectId.legal?(self) ? BSON::ObjectId.from_string(self) : self
|
|
173
161
|
end
|
|
174
162
|
|
|
175
163
|
module ClassMethods
|
|
@@ -208,4 +196,4 @@ module Mongoid
|
|
|
208
196
|
end
|
|
209
197
|
|
|
210
198
|
::String.__send__(:include, Mongoid::Extensions::String)
|
|
211
|
-
::String.
|
|
199
|
+
::String.extend(Mongoid::Extensions::String::ClassMethods)
|