mongoid 3.1.6 → 4.0.0
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 +432 -8
- data/README.md +5 -6
- data/lib/config/locales/en.yml +32 -18
- 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 +1 -12
- 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 -101
- 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/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 +18 -6
- data/lib/mongoid/contextual/mongo.rb +64 -56
- 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 +32 -17
- 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 +2 -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} +8 -2
- 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 +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/matchable.rb +152 -0
- data/lib/mongoid/persistable/creatable.rb +188 -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 +152 -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 +247 -0
- data/lib/mongoid/railtie.rb +32 -45
- data/lib/mongoid/railties/database.rake +9 -25
- data/lib/mongoid/relations/accessors.rb +13 -49
- data/lib/mongoid/relations/auto_save.rb +15 -36
- data/lib/mongoid/relations/binding.rb +1 -24
- 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 +3 -1
- data/lib/mongoid/relations/builder.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
- data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
- data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
- data/lib/mongoid/relations/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 +30 -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/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 +19 -32
- data/lib/mongoid/relations/referenced/many_to_many.rb +15 -38
- data/lib/mongoid/relations/referenced/one.rb +6 -25
- data/lib/mongoid/relations/synchronization.rb +3 -3
- data/lib/mongoid/relations/touchable.rb +34 -1
- data/lib/mongoid/relations.rb +11 -25
- data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
- 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 +180 -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 +0 -157
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
- 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 +23 -19
- 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 +13 -24
- 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/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/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} +335 -448
- data/spec/mongoid/attributes/readonly_spec.rb +58 -18
- data/spec/mongoid/attributes_spec.rb +315 -436
- 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 +68 -58
- 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 +151 -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 +1255 -0
- data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
- data/spec/mongoid/criteria_spec.rb +578 -2295
- data/spec/mongoid/document_spec.rb +166 -120
- data/spec/mongoid/equality_spec.rb +22 -22
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
- data/spec/mongoid/errors/callback_spec.rb +3 -3
- data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
- data/spec/mongoid/errors/document_not_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 +15 -0
- data/spec/mongoid/factory_spec.rb +15 -15
- data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
- data/spec/mongoid/fields/localized_spec.rb +38 -23
- data/spec/mongoid/fields/standard_spec.rb +12 -12
- data/spec/mongoid/fields_spec.rb +263 -217
- data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +127 -27
- data/spec/mongoid/indexable/specification_spec.rb +102 -0
- data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
- data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
- data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +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 +512 -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 +461 -0
- data/spec/mongoid/persistable/settable_spec.rb +139 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
- data/spec/mongoid/persistable/updatable_spec.rb +558 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
- data/spec/mongoid/persistable_spec.rb +206 -0
- data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +9 -9
- data/spec/mongoid/query_cache_spec.rb +231 -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 +393 -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 +434 -527
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +352 -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} +20 -60
- 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 +107 -0
- data/spec/mongoid/sessions_spec.rb +289 -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 +29 -13
- metadata +296 -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/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/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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
module Mongoid
|
|
3
|
-
|
|
3
|
+
class Criteria
|
|
4
4
|
module Modifiable
|
|
5
5
|
|
|
6
6
|
# Build a document given the selector and return it.
|
|
@@ -68,6 +68,22 @@ module Mongoid
|
|
|
68
68
|
find_or(:create, attrs, &block)
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
+
# Find the first +Document+ given the conditions, or creates a new document
|
|
72
|
+
# with the conditions that were supplied. If validation fails an
|
|
73
|
+
# exception will be raised.
|
|
74
|
+
#
|
|
75
|
+
# @example Find or create the document.
|
|
76
|
+
# Person.find_or_create_by!(:attribute => "value")
|
|
77
|
+
#
|
|
78
|
+
# @param [ Hash ] attrs The attributes to check.
|
|
79
|
+
#
|
|
80
|
+
# @raise [ Errors::Validations ] on validation error.
|
|
81
|
+
#
|
|
82
|
+
# @return [ Document ] A matching or newly created document.
|
|
83
|
+
def find_or_create_by!(attrs = {}, &block)
|
|
84
|
+
find_or(:create!, attrs, &block)
|
|
85
|
+
end
|
|
86
|
+
|
|
71
87
|
# Find the first +Document+ given the conditions, or initializes a new document
|
|
72
88
|
# with the conditions that were supplied.
|
|
73
89
|
#
|
|
@@ -144,13 +160,17 @@ module Mongoid
|
|
|
144
160
|
#
|
|
145
161
|
# @since 3.0.0
|
|
146
162
|
def create_document(method, attrs = nil, &block)
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
163
|
+
attributes = selector.reduce(attrs || {}) do |hash, (key, value)|
|
|
164
|
+
unless key.to_s =~ /\$/ || value.is_a?(Hash)
|
|
165
|
+
hash[key] = value
|
|
166
|
+
end
|
|
167
|
+
hash
|
|
168
|
+
end
|
|
169
|
+
if embedded?
|
|
170
|
+
attributes[:_parent] = parent_document
|
|
171
|
+
attributes[:__metadata] = metadata
|
|
172
|
+
end
|
|
173
|
+
klass.__send__(method, attributes, &block)
|
|
154
174
|
end
|
|
155
175
|
|
|
156
176
|
# Find the first object or create/initialize it.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
class Criteria
|
|
4
|
+
module Permission
|
|
5
|
+
|
|
6
|
+
[:all,
|
|
7
|
+
:all_in,
|
|
8
|
+
:and,
|
|
9
|
+
:all_of,
|
|
10
|
+
:between,
|
|
11
|
+
:elem_match,
|
|
12
|
+
:exists,
|
|
13
|
+
:gt,
|
|
14
|
+
:gte,
|
|
15
|
+
:in,
|
|
16
|
+
:any_in,
|
|
17
|
+
:lt,
|
|
18
|
+
:lte,
|
|
19
|
+
:max_distance,
|
|
20
|
+
:mod,
|
|
21
|
+
:ne,
|
|
22
|
+
:excludes,
|
|
23
|
+
:near,
|
|
24
|
+
:near_sphere,
|
|
25
|
+
:nin,
|
|
26
|
+
:not_in,
|
|
27
|
+
:nor,
|
|
28
|
+
:negating?,
|
|
29
|
+
:not,
|
|
30
|
+
:or,
|
|
31
|
+
:any_of,
|
|
32
|
+
:with_size,
|
|
33
|
+
:with_type,
|
|
34
|
+
:where,
|
|
35
|
+
:within_box,
|
|
36
|
+
:within_circle,
|
|
37
|
+
:within_polygon,
|
|
38
|
+
:within_spherical_circle
|
|
39
|
+
].each do |method|
|
|
40
|
+
define_method(method) do |*criteria|
|
|
41
|
+
raise Errors::CriteriaNotPermitted.new(klass, method, criteria) unless should_permit?(criteria)
|
|
42
|
+
super(*criteria)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
# Ensure that the criteria are permitted.
|
|
49
|
+
#
|
|
50
|
+
# @example Ignoring ActionController::Parameters
|
|
51
|
+
# should_permit?({_id: ActionController::Parameters.new("$size" => 1)})
|
|
52
|
+
#
|
|
53
|
+
# @api private
|
|
54
|
+
#
|
|
55
|
+
# @param [ Object ] criteria
|
|
56
|
+
# @return [ Boolean ] if should permit
|
|
57
|
+
def should_permit?(criteria)
|
|
58
|
+
if criteria.respond_to?(:permitted?)
|
|
59
|
+
return criteria.permitted?
|
|
60
|
+
elsif criteria.respond_to?(:each)
|
|
61
|
+
criteria.each do |criterion|
|
|
62
|
+
return false unless should_permit?(criterion)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
true
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
data/lib/mongoid/criteria.rb
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
require "mongoid/
|
|
3
|
-
require "mongoid/
|
|
4
|
-
require "mongoid/
|
|
5
|
-
require "mongoid/
|
|
6
|
-
require "mongoid/
|
|
2
|
+
require "mongoid/criteria/findable"
|
|
3
|
+
require "mongoid/criteria/inspectable"
|
|
4
|
+
require "mongoid/criteria/marshalable"
|
|
5
|
+
require "mongoid/criteria/modifiable"
|
|
6
|
+
require "mongoid/criteria/scopable"
|
|
7
|
+
require "mongoid/sessions/options"
|
|
7
8
|
|
|
8
9
|
module Mongoid
|
|
9
10
|
|
|
@@ -17,11 +18,12 @@ module Mongoid
|
|
|
17
18
|
include Enumerable
|
|
18
19
|
include Contextual
|
|
19
20
|
include Origin::Queryable
|
|
20
|
-
include
|
|
21
|
-
include
|
|
22
|
-
include
|
|
23
|
-
include
|
|
24
|
-
include
|
|
21
|
+
include Findable
|
|
22
|
+
include Inspectable
|
|
23
|
+
include Marshalable
|
|
24
|
+
include Modifiable
|
|
25
|
+
include Scopable
|
|
26
|
+
include Sessions::Options
|
|
25
27
|
|
|
26
28
|
# Static array used to check with method missing - we only need to ever
|
|
27
29
|
# instantiate once.
|
|
@@ -29,7 +31,7 @@ module Mongoid
|
|
|
29
31
|
# @since 4.0.0
|
|
30
32
|
CHECK = []
|
|
31
33
|
|
|
32
|
-
attr_accessor :embedded, :klass
|
|
34
|
+
attr_accessor :embedded, :klass, :parent_document, :metadata
|
|
33
35
|
|
|
34
36
|
# Returns true if the supplied +Enumerable+ or +Criteria+ is equal to the results
|
|
35
37
|
# of this +Criteria+ or the criteria itself.
|
|
@@ -197,9 +199,6 @@ module Mongoid
|
|
|
197
199
|
# into the identity map who's ids match based on the extra query for the
|
|
198
200
|
# ids.
|
|
199
201
|
#
|
|
200
|
-
# @note This will only work if Mongoid's identity map is enabled. To do
|
|
201
|
-
# so set identity_map_enabled: true in your mongoid.yml
|
|
202
|
-
#
|
|
203
202
|
# @note This will work for embedded relations that reference another
|
|
204
203
|
# collection via belongs_to as well.
|
|
205
204
|
#
|
|
@@ -298,6 +297,31 @@ module Mongoid
|
|
|
298
297
|
self
|
|
299
298
|
end
|
|
300
299
|
|
|
300
|
+
# Returns a criteria that will always contain zero results and never hits
|
|
301
|
+
# the database.
|
|
302
|
+
#
|
|
303
|
+
# @example Return a none criteria.
|
|
304
|
+
# criteria.none
|
|
305
|
+
#
|
|
306
|
+
# @return [ Criteria ] The none criteria.
|
|
307
|
+
#
|
|
308
|
+
# @since 4.0.0
|
|
309
|
+
def none
|
|
310
|
+
@none = true and self
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
# Is the criteria an empty but chainable criteria?
|
|
314
|
+
#
|
|
315
|
+
# @example Is the criteria a none criteria?
|
|
316
|
+
# criteria.empty_and_chainable?
|
|
317
|
+
#
|
|
318
|
+
# @return [ true, false ] If the criteria is a none.
|
|
319
|
+
#
|
|
320
|
+
# @since 4.0.0
|
|
321
|
+
def empty_and_chainable?
|
|
322
|
+
!!@none
|
|
323
|
+
end
|
|
324
|
+
|
|
301
325
|
# Overriden to include _type in the fields.
|
|
302
326
|
#
|
|
303
327
|
# @example Limit the fields returned from the database.
|
|
@@ -396,25 +420,6 @@ module Mongoid
|
|
|
396
420
|
super
|
|
397
421
|
end
|
|
398
422
|
|
|
399
|
-
# Tell the next persistance operation to query from a specific collection,
|
|
400
|
-
# database or session.
|
|
401
|
-
#
|
|
402
|
-
# @example Send the criteria to another collection.
|
|
403
|
-
# Band.where(name: "Depeche Mode").with(collection: "artists")
|
|
404
|
-
#
|
|
405
|
-
# @param [ Hash ] options The storage options.
|
|
406
|
-
#
|
|
407
|
-
# @option options [ String, Symbol ] :collection The collection name.
|
|
408
|
-
# @option options [ String, Symbol ] :database The database name.
|
|
409
|
-
# @option options [ String, Symbol ] :session The session name.
|
|
410
|
-
#
|
|
411
|
-
# @return [ Criteria ] The criteria.
|
|
412
|
-
#
|
|
413
|
-
# @since 3.0.0
|
|
414
|
-
def with(options)
|
|
415
|
-
Threaded.set_persistence_options(klass, options)
|
|
416
|
-
self
|
|
417
|
-
end
|
|
418
423
|
|
|
419
424
|
# Get a version of this criteria without the options.
|
|
420
425
|
#
|
|
@@ -445,7 +450,7 @@ module Mongoid
|
|
|
445
450
|
#
|
|
446
451
|
# @since 3.1.0
|
|
447
452
|
def for_js(javascript, scope = {})
|
|
448
|
-
js_query(
|
|
453
|
+
js_query(BSON::CodeWithScope.new(javascript, scope))
|
|
449
454
|
end
|
|
450
455
|
|
|
451
456
|
private
|
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,7 +73,7 @@ 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
|
|
@@ -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
|
|
@@ -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
|
|
201
|
+
became = klass.new(clone_document)
|
|
186
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
|
|
|
@@ -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)
|