mongoid 3.1.6 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +479 -8
- data/README.md +10 -7
- data/lib/config/locales/en.yml +34 -20
- data/lib/mongoid.rb +10 -76
- data/lib/mongoid/atomic.rb +3 -14
- data/lib/mongoid/atomic/paths/embedded.rb +0 -30
- data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
- data/lib/mongoid/atomic/paths/root.rb +0 -13
- data/lib/mongoid/attributes.rb +65 -101
- data/lib/mongoid/attributes/dynamic.rb +154 -0
- data/lib/mongoid/attributes/nested.rb +82 -0
- data/lib/mongoid/attributes/processing.rb +13 -66
- data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
- data/lib/mongoid/composable.rb +105 -0
- data/lib/mongoid/config.rb +3 -9
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -0
- data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
- data/lib/mongoid/contextual/atomic.rb +53 -53
- data/lib/mongoid/contextual/geo_near.rb +1 -1
- data/lib/mongoid/contextual/map_reduce.rb +4 -2
- data/lib/mongoid/contextual/memory.rb +23 -11
- data/lib/mongoid/contextual/mongo.rb +75 -57
- data/lib/mongoid/contextual/none.rb +90 -0
- data/lib/mongoid/contextual/text_search.rb +178 -0
- data/lib/mongoid/copyable.rb +2 -3
- data/lib/mongoid/criteria.rb +39 -34
- data/lib/mongoid/criteria/#findable.rb# +141 -0
- data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
- data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
- data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
- data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
- data/lib/mongoid/criteria/permission.rb +70 -0
- data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
- data/lib/mongoid/document.rb +39 -24
- data/lib/mongoid/errors.rb +4 -1
- data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
- data/lib/mongoid/errors/document_not_found.rb +2 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
- data/lib/mongoid/errors/invalid_value.rb +16 -0
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/errors/readonly_document.rb +24 -0
- data/lib/mongoid/extensions.rb +15 -7
- data/lib/mongoid/extensions/array.rb +3 -3
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/boolean.rb +15 -17
- data/lib/mongoid/extensions/date.rb +1 -1
- data/lib/mongoid/extensions/date_time.rb +3 -3
- data/lib/mongoid/extensions/float.rb +2 -1
- data/lib/mongoid/extensions/hash.rb +3 -3
- data/lib/mongoid/extensions/integer.rb +1 -1
- data/lib/mongoid/extensions/object.rb +7 -7
- data/lib/mongoid/extensions/object_id.rb +5 -5
- data/lib/mongoid/extensions/range.rb +9 -3
- data/lib/mongoid/extensions/regexp.rb +1 -1
- data/lib/mongoid/extensions/set.rb +1 -1
- data/lib/mongoid/extensions/string.rb +6 -18
- data/lib/mongoid/extensions/symbol.rb +1 -1
- data/lib/mongoid/extensions/time.rb +3 -3
- data/lib/mongoid/extensions/time_with_zone.rb +1 -1
- data/lib/mongoid/factory.rb +8 -6
- data/lib/mongoid/fields.rb +41 -8
- data/lib/mongoid/fields/foreign_key.rb +3 -3
- data/lib/mongoid/fields/localized.rb +1 -1
- data/lib/mongoid/fields/standard.rb +5 -17
- data/lib/mongoid/fields/validators/macro.rb +15 -5
- data/lib/mongoid/{finders.rb → findable.rb} +35 -7
- data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
- data/lib/mongoid/indexable/specification.rb +104 -0
- data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
- data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
- data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
- data/lib/mongoid/log_subscriber.rb +55 -0
- data/lib/mongoid/matchable.rb +152 -0
- data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
- data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
- data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
- data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
- data/lib/mongoid/persistable.rb +216 -0
- data/lib/mongoid/persistable/creatable.rb +189 -0
- data/lib/mongoid/persistable/deletable.rb +149 -0
- data/lib/mongoid/persistable/destroyable.rb +60 -0
- data/lib/mongoid/persistable/incrementable.rb +36 -0
- data/lib/mongoid/persistable/logical.rb +38 -0
- data/lib/mongoid/persistable/poppable.rb +39 -0
- data/lib/mongoid/persistable/pullable.rb +55 -0
- data/lib/mongoid/persistable/pushable.rb +62 -0
- data/lib/mongoid/persistable/renamable.rb +35 -0
- data/lib/mongoid/persistable/savable.rb +52 -0
- data/lib/mongoid/persistable/settable.rb +33 -0
- data/lib/mongoid/persistable/unsettable.rb +36 -0
- data/lib/mongoid/persistable/updatable.rb +153 -0
- data/lib/mongoid/persistable/upsertable.rb +55 -0
- data/lib/mongoid/positional.rb +71 -0
- data/lib/mongoid/query_cache.rb +255 -0
- data/lib/mongoid/railtie.rb +34 -60
- data/lib/mongoid/railties/database.rake +9 -25
- data/lib/mongoid/relations.rb +11 -25
- data/lib/mongoid/relations/accessors.rb +15 -51
- data/lib/mongoid/relations/auto_save.rb +15 -36
- data/lib/mongoid/relations/binding.rb +2 -25
- data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
- data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
- data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
- data/lib/mongoid/relations/builder.rb +1 -1
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
- data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
- data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
- data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
- data/lib/mongoid/relations/cascading.rb +3 -5
- data/lib/mongoid/relations/constraint.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/counter_cache.rb +39 -15
- data/lib/mongoid/relations/eager.rb +46 -0
- data/lib/mongoid/relations/eager/base.rb +149 -0
- data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
- data/lib/mongoid/relations/eager/has_many.rb +38 -0
- data/lib/mongoid/relations/eager/has_one.rb +30 -0
- data/lib/mongoid/relations/embedded/batchable.rb +4 -5
- data/lib/mongoid/relations/embedded/in.rb +4 -4
- data/lib/mongoid/relations/embedded/many.rb +14 -32
- data/lib/mongoid/relations/embedded/one.rb +1 -1
- data/lib/mongoid/relations/macros.rb +3 -4
- data/lib/mongoid/relations/many.rb +51 -31
- data/lib/mongoid/relations/marshalable.rb +3 -3
- data/lib/mongoid/relations/metadata.rb +14 -79
- data/lib/mongoid/relations/nested_builder.rb +2 -2
- data/lib/mongoid/relations/one.rb +1 -1
- data/lib/mongoid/relations/options.rb +1 -0
- data/lib/mongoid/relations/polymorphic.rb +0 -1
- data/lib/mongoid/relations/proxy.rb +21 -41
- data/lib/mongoid/relations/referenced/in.rb +4 -20
- data/lib/mongoid/relations/referenced/many.rb +22 -35
- data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
- data/lib/mongoid/relations/referenced/one.rb +6 -25
- data/lib/mongoid/relations/synchronization.rb +4 -4
- data/lib/mongoid/relations/targets/enumerable.rb +10 -10
- data/lib/mongoid/relations/touchable.rb +34 -1
- data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
- data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
- data/lib/mongoid/selectable.rb +59 -0
- data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
- data/lib/mongoid/sessions.rb +37 -345
- data/lib/mongoid/sessions/factory.rb +2 -0
- data/lib/mongoid/sessions/options.rb +185 -0
- data/lib/mongoid/sessions/storage_options.rb +140 -0
- data/lib/mongoid/sessions/thread_options.rb +19 -0
- data/lib/mongoid/sessions/validators/storage.rb +16 -3
- data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
- data/lib/mongoid/{state.rb → stateful.rb} +13 -1
- data/lib/mongoid/support/query_counter.rb +23 -0
- data/lib/mongoid/tasks/database.rake +31 -0
- data/lib/mongoid/tasks/database.rb +107 -0
- data/lib/mongoid/threaded.rb +26 -172
- data/lib/mongoid/threaded/lifecycle.rb +0 -28
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
- data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
- data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
- data/lib/mongoid/{validations → validatable}/format.rb +1 -1
- data/lib/mongoid/{validations → validatable}/length.rb +1 -1
- data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
- data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
- data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
- data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
- data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
- data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
- data/lib/rails/generators/mongoid_generator.rb +3 -40
- data/lib/rails/mongoid.rb +0 -122
- data/lib/support/ruby_version.rb +1 -1
- data/spec/app/models/account.rb +2 -6
- data/spec/app/models/acolyte.rb +2 -1
- data/spec/app/models/actor.rb +0 -1
- data/spec/app/models/address.rb +8 -3
- data/spec/app/models/animal.rb +1 -1
- data/spec/app/models/appointment.rb +3 -3
- data/spec/app/models/article.rb +1 -4
- data/spec/app/models/audio.rb +5 -0
- data/spec/app/models/author.rb +0 -2
- data/spec/app/models/band.rb +3 -2
- data/spec/app/models/bar.rb +1 -0
- data/spec/app/models/book.rb +1 -0
- data/spec/app/models/building.rb +0 -2
- data/spec/app/models/building_address.rb +0 -2
- data/spec/app/models/bus.rb +1 -1
- data/spec/app/models/canvas.rb +1 -1
- data/spec/app/models/contextable_item.rb +5 -0
- data/spec/app/models/contractor.rb +0 -2
- data/spec/app/models/country_code.rb +1 -1
- data/spec/app/models/definition.rb +2 -2
- data/spec/app/models/dog.rb +1 -1
- data/spec/app/models/draft.rb +9 -0
- data/spec/app/models/dragon.rb +4 -0
- data/spec/app/models/drug.rb +1 -3
- data/spec/app/models/dungeon.rb +4 -0
- data/spec/app/models/edit.rb +5 -0
- data/spec/app/models/even.rb +7 -0
- data/spec/app/models/event.rb +1 -1
- data/spec/app/models/filesystem.rb +1 -0
- data/spec/app/models/fish.rb +0 -1
- data/spec/app/models/fruits.rb +6 -0
- data/spec/app/models/game.rb +0 -2
- data/spec/app/models/house.rb +1 -3
- data/spec/app/models/id_key.rb +6 -0
- data/spec/app/models/item.rb +1 -5
- data/spec/app/models/jar.rb +1 -1
- data/spec/app/models/label.rb +4 -4
- data/spec/app/models/line_item.rb +1 -1
- data/spec/app/models/login.rb +1 -1
- data/spec/app/models/message.rb +8 -0
- data/spec/app/models/movie.rb +1 -0
- data/spec/app/models/name.rb +3 -3
- data/spec/app/models/note.rb +3 -1
- data/spec/app/models/odd.rb +7 -0
- data/spec/app/models/oscar.rb +1 -1
- data/spec/app/models/parent_doc.rb +1 -1
- data/spec/app/models/person.rb +16 -10
- data/spec/app/models/phone.rb +1 -3
- data/spec/app/models/player.rb +3 -3
- data/spec/app/models/post.rb +5 -3
- data/spec/app/models/preference.rb +1 -1
- data/spec/app/models/quiz.rb +0 -3
- data/spec/app/models/record.rb +10 -5
- data/spec/app/models/registry.rb +1 -1
- data/spec/app/models/server.rb +1 -1
- data/spec/app/models/service.rb +3 -3
- data/spec/app/models/sound.rb +5 -0
- data/spec/app/models/symptom.rb +1 -1
- data/spec/app/models/template.rb +1 -1
- data/spec/app/models/title.rb +0 -1
- data/spec/app/models/track.rb +5 -5
- data/spec/app/models/tree.rb +3 -3
- data/spec/app/models/video.rb +1 -5
- data/spec/app/models/wiki_page.rb +2 -5
- data/spec/app/models/word.rb +3 -0
- data/spec/app/models/word_origin.rb +1 -1
- data/spec/config/mongoid.yml +7 -8
- data/spec/helpers.rb +18 -0
- data/spec/mongoid/#atomic_spec.rb# +365 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
- data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
- data/spec/mongoid/atomic/paths_spec.rb +19 -19
- data/spec/mongoid/atomic_spec.rb +19 -19
- data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
- data/spec/mongoid/attributes/readonly_spec.rb +58 -18
- data/spec/mongoid/attributes_spec.rb +349 -434
- data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
- data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
- data/spec/mongoid/config/environment_spec.rb +3 -3
- data/spec/mongoid/config/options_spec.rb +6 -6
- data/spec/mongoid/config_spec.rb +24 -48
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
- data/spec/mongoid/contextual/atomic_spec.rb +60 -56
- data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
- data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
- data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
- data/spec/mongoid/contextual/memory_spec.rb +156 -94
- data/spec/mongoid/contextual/mongo_spec.rb +238 -150
- data/spec/mongoid/contextual/none_spec.rb +127 -0
- data/spec/mongoid/contextual/text_search_spec.rb +209 -0
- data/spec/mongoid/copyable_spec.rb +56 -68
- data/spec/mongoid/criteria/findable_spec.rb +991 -0
- data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
- data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
- data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
- data/spec/mongoid/criteria_spec.rb +715 -2421
- data/spec/mongoid/document_spec.rb +171 -121
- data/spec/mongoid/equality_spec.rb +22 -22
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
- data/spec/mongoid/errors/callback_spec.rb +3 -3
- data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
- data/spec/mongoid/errors/eager_load_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
- data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
- data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
- data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
- data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
- data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
- data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
- data/spec/mongoid/errors/no_parent_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
- data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
- data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
- data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
- data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
- data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
- data/spec/mongoid/errors/validations_spec.rb +7 -7
- data/spec/mongoid/extensions/array_spec.rb +61 -61
- data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
- data/spec/mongoid/extensions/binary_spec.rb +12 -12
- data/spec/mongoid/extensions/boolean_spec.rb +18 -18
- data/spec/mongoid/extensions/date_spec.rb +13 -13
- data/spec/mongoid/extensions/date_time_spec.rb +8 -8
- data/spec/mongoid/extensions/false_class_spec.rb +5 -5
- data/spec/mongoid/extensions/float_spec.rb +29 -15
- data/spec/mongoid/extensions/hash_spec.rb +29 -29
- data/spec/mongoid/extensions/integer_spec.rb +15 -15
- data/spec/mongoid/extensions/module_spec.rb +2 -2
- data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
- data/spec/mongoid/extensions/object_id_spec.rb +134 -134
- data/spec/mongoid/extensions/object_spec.rb +26 -26
- data/spec/mongoid/extensions/range_spec.rb +61 -12
- data/spec/mongoid/extensions/regexp_spec.rb +4 -4
- data/spec/mongoid/extensions/set_spec.rb +4 -4
- data/spec/mongoid/extensions/string_spec.rb +35 -46
- data/spec/mongoid/extensions/symbol_spec.rb +9 -9
- data/spec/mongoid/extensions/time_spec.rb +49 -49
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
- data/spec/mongoid/extensions/true_class_spec.rb +5 -5
- data/spec/mongoid/extensions_spec.rb +29 -0
- data/spec/mongoid/factory_spec.rb +15 -15
- data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
- data/spec/mongoid/fields/localized_spec.rb +38 -23
- data/spec/mongoid/fields/standard_spec.rb +12 -12
- data/spec/mongoid/fields_spec.rb +263 -217
- data/spec/mongoid/findable_spec.rb +509 -0
- data/spec/mongoid/indexable/specification_spec.rb +102 -0
- data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
- data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
- data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
- data/spec/mongoid/log_subscriber_spec.rb +75 -0
- data/spec/mongoid/loggable_spec.rb +1 -1
- data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
- data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
- data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
- data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
- data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
- data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
- data/spec/mongoid/matchable/in_spec.rb +49 -0
- data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
- data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
- data/spec/mongoid/matchable/ne_spec.rb +46 -0
- data/spec/mongoid/matchable/nin_spec.rb +48 -0
- data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
- data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
- data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
- data/spec/mongoid/persistable/creatable_spec.rb +553 -0
- data/spec/mongoid/persistable/deletable_spec.rb +218 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
- data/spec/mongoid/persistable/logical_spec.rb +143 -0
- data/spec/mongoid/persistable/poppable_spec.rb +115 -0
- data/spec/mongoid/persistable/pullable_spec.rb +228 -0
- data/spec/mongoid/persistable/pushable_spec.rb +258 -0
- data/spec/mongoid/persistable/renamable_spec.rb +135 -0
- data/spec/mongoid/persistable/savable_spec.rb +498 -0
- data/spec/mongoid/persistable/settable_spec.rb +162 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
- data/spec/mongoid/persistable/updatable_spec.rb +558 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
- data/spec/mongoid/persistable_spec.rb +206 -0
- data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
- data/spec/mongoid/query_cache_spec.rb +263 -0
- data/spec/mongoid/railties/document_spec.rb +2 -2
- data/spec/mongoid/relations/accessors_spec.rb +53 -145
- data/spec/mongoid/relations/auto_save_spec.rb +37 -17
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
- data/spec/mongoid/relations/builders_spec.rb +21 -21
- data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
- data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
- data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
- data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
- data/spec/mongoid/relations/cascading_spec.rb +16 -16
- data/spec/mongoid/relations/constraint_spec.rb +8 -7
- data/spec/mongoid/relations/conversions_spec.rb +16 -14
- data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
- data/spec/mongoid/relations/cyclic_spec.rb +18 -18
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
- data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
- data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
- data/spec/mongoid/relations/eager_spec.rb +228 -0
- data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
- data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
- data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
- data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
- data/spec/mongoid/relations/macros_spec.rb +108 -102
- data/spec/mongoid/relations/metadata_spec.rb +180 -255
- data/spec/mongoid/relations/options_spec.rb +1 -1
- data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
- data/spec/mongoid/relations/proxy_spec.rb +2 -2
- data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
- data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
- data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
- data/spec/mongoid/relations/reflections_spec.rb +6 -6
- data/spec/mongoid/relations/synchronization_spec.rb +46 -50
- data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
- data/spec/mongoid/relations/touchable_spec.rb +333 -0
- data/spec/mongoid/relations_spec.rb +16 -15
- data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
- data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
- data/spec/mongoid/selectable_spec.rb +134 -0
- data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
- data/spec/mongoid/sessions/factory_spec.rb +49 -28
- data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
- data/spec/mongoid/sessions/options_spec.rb +108 -0
- data/spec/mongoid/sessions_spec.rb +319 -178
- data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
- data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
- data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
- data/spec/mongoid/tasks/database_spec.rb +160 -0
- data/spec/mongoid/threaded_spec.rb +17 -70
- data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
- data/spec/mongoid/timestamps/created_spec.rb +5 -5
- data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
- data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
- data/spec/mongoid/timestamps/updated_spec.rb +9 -13
- data/spec/mongoid/timestamps_spec.rb +9 -13
- data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
- data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
- data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
- data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
- data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
- data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
- data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
- data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
- data/spec/mongoid_spec.rb +8 -8
- data/spec/rails/mongoid_spec.rb +19 -335
- data/spec/spec_helper.rb +31 -13
- metadata +303 -283
- data/lib/mongoid/atomic/positionable.rb +0 -73
- data/lib/mongoid/components.rb +0 -92
- data/lib/mongoid/config/inflections.rb +0 -6
- data/lib/mongoid/contextual/eager.rb +0 -158
- data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
- data/lib/mongoid/identity_map.rb +0 -163
- data/lib/mongoid/json.rb +0 -16
- data/lib/mongoid/matchers.rb +0 -32
- data/lib/mongoid/matchers/strategies.rb +0 -97
- data/lib/mongoid/multi_parameter_attributes.rb +0 -105
- data/lib/mongoid/nested_attributes.rb +0 -78
- data/lib/mongoid/observer.rb +0 -192
- data/lib/mongoid/paranoia.rb +0 -136
- data/lib/mongoid/persistence.rb +0 -357
- data/lib/mongoid/persistence/atomic.rb +0 -231
- data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
- data/lib/mongoid/persistence/atomic/bit.rb +0 -35
- data/lib/mongoid/persistence/atomic/inc.rb +0 -45
- data/lib/mongoid/persistence/atomic/operation.rb +0 -154
- data/lib/mongoid/persistence/atomic/pop.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull.rb +0 -32
- data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
- data/lib/mongoid/persistence/atomic/push.rb +0 -25
- data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
- data/lib/mongoid/persistence/atomic/rename.rb +0 -30
- data/lib/mongoid/persistence/atomic/sets.rb +0 -28
- data/lib/mongoid/persistence/atomic/unset.rb +0 -27
- data/lib/mongoid/persistence/deletion.rb +0 -31
- data/lib/mongoid/persistence/insertion.rb +0 -38
- data/lib/mongoid/persistence/modification.rb +0 -35
- data/lib/mongoid/persistence/operations.rb +0 -214
- data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
- data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
- data/lib/mongoid/persistence/operations/insert.rb +0 -34
- data/lib/mongoid/persistence/operations/remove.rb +0 -33
- data/lib/mongoid/persistence/operations/update.rb +0 -59
- data/lib/mongoid/persistence/operations/upsert.rb +0 -28
- data/lib/mongoid/persistence/upsertion.rb +0 -31
- data/lib/mongoid/unit_of_work.rb +0 -61
- data/lib/mongoid/versioning.rb +0 -217
- data/lib/rack/mongoid.rb +0 -2
- data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
- data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
- data/spec/app/models/actor_observer.rb +0 -15
- data/spec/app/models/callback_recorder.rb +0 -25
- data/spec/app/models/paranoid_phone.rb +0 -25
- data/spec/app/models/paranoid_post.rb +0 -36
- data/spec/app/models/phone_observer.rb +0 -6
- data/spec/mongoid/attributes/processing_spec.rb +0 -149
- data/spec/mongoid/criterion/destructive_spec.rb +0 -101
- data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
- data/spec/mongoid/criterion/modification_spec.rb +0 -402
- data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
- data/spec/mongoid/finders_spec.rb +0 -321
- data/spec/mongoid/identity_map_spec.rb +0 -564
- data/spec/mongoid/json_spec.rb +0 -33
- data/spec/mongoid/matchers/in_spec.rb +0 -25
- data/spec/mongoid/matchers/ne_spec.rb +0 -25
- data/spec/mongoid/matchers/nin_spec.rb +0 -25
- data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
- data/spec/mongoid/observer_spec.rb +0 -290
- data/spec/mongoid/paranoia_spec.rb +0 -759
- data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
- data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
- data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
- data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
- data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
- data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
- data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
- data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
- data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
- data/spec/mongoid/persistence/atomic_spec.rb +0 -216
- data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
- data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
- data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
- data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
- data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
- data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
- data/spec/mongoid/persistence/operations_spec.rb +0 -313
- data/spec/mongoid/persistence_spec.rb +0 -2279
- data/spec/mongoid/unit_of_work_spec.rb +0 -196
- data/spec/mongoid/versioning_spec.rb +0 -540
- data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -11,7 +11,7 @@ describe Mongoid::Document do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "does not respond to _destroy" do
|
14
|
-
person.
|
14
|
+
expect(person).to_not respond_to(:_destroy)
|
15
15
|
end
|
16
16
|
|
17
17
|
describe ".included" do
|
@@ -44,25 +44,25 @@ describe Mongoid::Document do
|
|
44
44
|
|
45
45
|
context "when Document has been included in a model" do
|
46
46
|
it ".models should include that model" do
|
47
|
-
models.
|
47
|
+
expect(models).to include(klass)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
51
|
context "before Document has been included" do
|
52
52
|
it ".models should *not* include that model" do
|
53
|
-
models.
|
53
|
+
expect(models).to_not include(new_klass)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
57
|
context "after Document has been included" do
|
58
58
|
it ".models should include that model" do
|
59
|
-
models.
|
59
|
+
expect(models).to include(new_model)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
context "after Document has been included multiple times" do
|
64
64
|
it ".models should include that model just once" do
|
65
|
-
models.count(twice_a_new_model).
|
65
|
+
expect(models.count(twice_a_new_model)).to be_eql(1)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
@@ -76,11 +76,11 @@ describe Mongoid::Document do
|
|
76
76
|
end
|
77
77
|
|
78
78
|
it "includes the root" do
|
79
|
-
types.
|
79
|
+
expect(types).to include("Person")
|
80
80
|
end
|
81
81
|
|
82
82
|
it "includes the subclasses" do
|
83
|
-
types.
|
83
|
+
expect(types).to include("Doctor")
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
@@ -91,7 +91,7 @@ describe Mongoid::Document do
|
|
91
91
|
end
|
92
92
|
|
93
93
|
it "returns the document" do
|
94
|
-
types.
|
94
|
+
expect(types).to eq([ "Address" ])
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
@@ -106,7 +106,7 @@ describe Mongoid::Document do
|
|
106
106
|
end
|
107
107
|
|
108
108
|
it "should clear descendants' cache" do
|
109
|
-
Person._types.
|
109
|
+
expect(Person._types).to include(descendant.to_s)
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
@@ -118,7 +118,7 @@ describe Mongoid::Document do
|
|
118
118
|
end
|
119
119
|
|
120
120
|
it "returns the attributes with indifferent access" do
|
121
|
-
person[:title].
|
121
|
+
expect(person[:title]).to eq("Sir")
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
@@ -131,7 +131,7 @@ describe Mongoid::Document do
|
|
131
131
|
context "when the document is new" do
|
132
132
|
|
133
133
|
it "has a new key name" do
|
134
|
-
document.cache_key.
|
134
|
+
expect(document.cache_key).to eq("dokuments/new")
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
@@ -144,11 +144,11 @@ describe Mongoid::Document do
|
|
144
144
|
context "with updated_at" do
|
145
145
|
|
146
146
|
let!(:updated_at) do
|
147
|
-
document.updated_at.utc.to_s(:
|
147
|
+
document.updated_at.utc.to_s(:nsec)
|
148
148
|
end
|
149
149
|
|
150
150
|
it "has the id and updated_at key name" do
|
151
|
-
document.cache_key.
|
151
|
+
expect(document.cache_key).to eq("dokuments/#{document.id}-#{updated_at}")
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
@@ -159,23 +159,35 @@ describe Mongoid::Document do
|
|
159
159
|
end
|
160
160
|
|
161
161
|
it "has the id key name" do
|
162
|
-
document.cache_key.
|
162
|
+
expect(document.cache_key).to eq("dokuments/#{document.id}")
|
163
163
|
end
|
164
164
|
end
|
165
|
+
end
|
165
166
|
|
166
|
-
|
167
|
-
let(:artist) do
|
168
|
-
Artist.new
|
169
|
-
end
|
170
|
-
before do
|
171
|
-
artist.save
|
172
|
-
end
|
167
|
+
context "when model dont have Timestamps" do
|
173
168
|
|
174
|
-
|
175
|
-
|
176
|
-
|
169
|
+
let(:artist) do
|
170
|
+
Artist.create!
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should have the id key name" do
|
174
|
+
expect(artist.cache_key).to eq("artists/#{artist.id}")
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context "when model has Short Timestamps" do
|
179
|
+
|
180
|
+
let(:agent) do
|
181
|
+
ShortAgent.create!
|
182
|
+
end
|
183
|
+
|
184
|
+
let!(:updated_at) do
|
185
|
+
agent.updated_at.utc.to_s(:nsec)
|
177
186
|
end
|
178
187
|
|
188
|
+
it "has the id and updated_at key name" do
|
189
|
+
expect(agent.cache_key).to eq("short_agents/#{agent.id}-#{updated_at}")
|
190
|
+
end
|
179
191
|
end
|
180
192
|
end
|
181
193
|
|
@@ -186,7 +198,7 @@ describe Mongoid::Document do
|
|
186
198
|
end
|
187
199
|
|
188
200
|
it "returns a [doc.class, doc.id] array" do
|
189
|
-
person.identity.
|
201
|
+
expect(person.identity).to eq([person.class, person.id])
|
190
202
|
end
|
191
203
|
end
|
192
204
|
|
@@ -197,7 +209,7 @@ describe Mongoid::Document do
|
|
197
209
|
end
|
198
210
|
|
199
211
|
it "returns the identity hash" do
|
200
|
-
person.hash.
|
212
|
+
expect(person.hash).to eq(person.identity.hash)
|
201
213
|
end
|
202
214
|
end
|
203
215
|
|
@@ -208,15 +220,40 @@ describe Mongoid::Document do
|
|
208
220
|
end
|
209
221
|
|
210
222
|
it "sets persisted to false" do
|
211
|
-
person.
|
223
|
+
expect(person).to_not be_persisted
|
212
224
|
end
|
213
225
|
|
214
226
|
it "creates an id for the document" do
|
215
|
-
person.id.
|
227
|
+
expect(person.id).to be_a(BSON::ObjectId)
|
216
228
|
end
|
217
229
|
|
218
230
|
it "sets the attributes" do
|
219
|
-
person.title.
|
231
|
+
expect(person.title).to eq("Sir")
|
232
|
+
end
|
233
|
+
|
234
|
+
context "when the model has a default scope" do
|
235
|
+
|
236
|
+
context "when the default scope is settable" do
|
237
|
+
|
238
|
+
let(:sound) do
|
239
|
+
Sound.new
|
240
|
+
end
|
241
|
+
|
242
|
+
it "sets the default scoping on the model" do
|
243
|
+
expect(sound).to be_active
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
context "when the default scope is not settable" do
|
248
|
+
|
249
|
+
let(:audio) do
|
250
|
+
Audio.new
|
251
|
+
end
|
252
|
+
|
253
|
+
it "does not set the default scoping" do
|
254
|
+
expect(audio.likes).to be_nil
|
255
|
+
end
|
256
|
+
end
|
220
257
|
end
|
221
258
|
|
222
259
|
context "when accessing a relation from an overridden setter" do
|
@@ -226,11 +263,11 @@ describe Mongoid::Document do
|
|
226
263
|
end
|
227
264
|
|
228
265
|
it "allows access to the relation" do
|
229
|
-
doctor.users.first.
|
266
|
+
expect(doctor.users.first).to be_a(User)
|
230
267
|
end
|
231
268
|
|
232
269
|
it "properly allows super calls" do
|
233
|
-
doctor.specialty.
|
270
|
+
expect(doctor.specialty).to eq("surgery")
|
234
271
|
end
|
235
272
|
end
|
236
273
|
|
@@ -249,7 +286,7 @@ describe Mongoid::Document do
|
|
249
286
|
end
|
250
287
|
|
251
288
|
it "runs the callbacks" do
|
252
|
-
person.title.
|
289
|
+
expect(person.title).to eq("Madam")
|
253
290
|
end
|
254
291
|
end
|
255
292
|
|
@@ -270,14 +307,14 @@ describe Mongoid::Document do
|
|
270
307
|
end
|
271
308
|
|
272
309
|
it "runs the callbacks" do
|
273
|
-
person.game.name.
|
310
|
+
expect(person.game.name).to eq("Ms. Pacman")
|
274
311
|
end
|
275
312
|
end
|
276
313
|
|
277
314
|
context "when instantiating model" do
|
278
315
|
|
279
316
|
let(:person) do
|
280
|
-
Person.instantiate("_id" =>
|
317
|
+
Person.instantiate("_id" => BSON::ObjectId.new, "title" => "Sir")
|
281
318
|
end
|
282
319
|
|
283
320
|
before do
|
@@ -291,7 +328,7 @@ describe Mongoid::Document do
|
|
291
328
|
end
|
292
329
|
|
293
330
|
it "runs the callbacks" do
|
294
|
-
person.title.
|
331
|
+
expect(person.title).to eq("Madam")
|
295
332
|
end
|
296
333
|
end
|
297
334
|
end
|
@@ -299,7 +336,7 @@ describe Mongoid::Document do
|
|
299
336
|
context "when defaults are defined" do
|
300
337
|
|
301
338
|
it "sets the default values" do
|
302
|
-
person.age.
|
339
|
+
expect(person.age).to eq(100)
|
303
340
|
end
|
304
341
|
end
|
305
342
|
|
@@ -312,7 +349,7 @@ describe Mongoid::Document do
|
|
312
349
|
end
|
313
350
|
|
314
351
|
it "yields to the block" do
|
315
|
-
person.title.
|
352
|
+
expect(person.title).to eq("King")
|
316
353
|
end
|
317
354
|
end
|
318
355
|
end
|
@@ -322,7 +359,7 @@ describe Mongoid::Document do
|
|
322
359
|
context "when passing a block" do
|
323
360
|
|
324
361
|
let(:id) do
|
325
|
-
|
362
|
+
BSON::ObjectId.new
|
326
363
|
end
|
327
364
|
|
328
365
|
let(:document) do
|
@@ -332,22 +369,14 @@ describe Mongoid::Document do
|
|
332
369
|
end
|
333
370
|
|
334
371
|
it "yields to the block" do
|
335
|
-
document.likes.
|
372
|
+
expect(document.likes).to eq(1000)
|
336
373
|
end
|
337
374
|
end
|
338
375
|
|
339
376
|
context "when an id exists" do
|
340
377
|
|
341
|
-
before do
|
342
|
-
Mongoid.identity_map_enabled = true
|
343
|
-
end
|
344
|
-
|
345
|
-
after do
|
346
|
-
Mongoid.identity_map_enabled = false
|
347
|
-
end
|
348
|
-
|
349
378
|
let(:id) do
|
350
|
-
|
379
|
+
BSON::ObjectId.new
|
351
380
|
end
|
352
381
|
|
353
382
|
let!(:person) do
|
@@ -355,15 +384,11 @@ describe Mongoid::Document do
|
|
355
384
|
end
|
356
385
|
|
357
386
|
it "sets the attributes" do
|
358
|
-
person.title.
|
387
|
+
expect(person.title).to eq("Sir")
|
359
388
|
end
|
360
389
|
|
361
390
|
it "sets persisted to true" do
|
362
|
-
person.
|
363
|
-
end
|
364
|
-
|
365
|
-
it "puts the document in the identity map" do
|
366
|
-
Mongoid::IdentityMap.get(Person, id).should eq(person)
|
391
|
+
expect(person).to be_persisted
|
367
392
|
end
|
368
393
|
end
|
369
394
|
|
@@ -374,7 +399,7 @@ describe Mongoid::Document do
|
|
374
399
|
end
|
375
400
|
|
376
401
|
it "creates a new document" do
|
377
|
-
person.
|
402
|
+
expect(person).to be_a(Person)
|
378
403
|
end
|
379
404
|
end
|
380
405
|
end
|
@@ -386,7 +411,7 @@ describe Mongoid::Document do
|
|
386
411
|
end
|
387
412
|
|
388
413
|
it "returns the class model name" do
|
389
|
-
person.model_name.
|
414
|
+
expect(person.model_name).to eq("Person")
|
390
415
|
end
|
391
416
|
end
|
392
417
|
|
@@ -397,7 +422,7 @@ describe Mongoid::Document do
|
|
397
422
|
end
|
398
423
|
|
399
424
|
it "returns the internal attributes" do
|
400
|
-
person.raw_attributes["title"].
|
425
|
+
expect(person.raw_attributes["title"]).to eq("Sir")
|
401
426
|
end
|
402
427
|
end
|
403
428
|
|
@@ -412,7 +437,7 @@ describe Mongoid::Document do
|
|
412
437
|
end
|
413
438
|
|
414
439
|
it "returns the document in an array" do
|
415
|
-
people.
|
440
|
+
expect(people).to eq([ person ])
|
416
441
|
end
|
417
442
|
end
|
418
443
|
|
@@ -435,15 +460,15 @@ describe Mongoid::Document do
|
|
435
460
|
end
|
436
461
|
|
437
462
|
it "includes embeds one attributes" do
|
438
|
-
person.as_document.
|
463
|
+
expect(person.as_document).to have_key("name")
|
439
464
|
end
|
440
465
|
|
441
466
|
it "includes embeds many attributes" do
|
442
|
-
person.as_document.
|
467
|
+
expect(person.as_document).to have_key("addresses")
|
443
468
|
end
|
444
469
|
|
445
470
|
it "includes second level embeds many attributes" do
|
446
|
-
person.as_document["addresses"].first.
|
471
|
+
expect(person.as_document["addresses"].first).to have_key("locations")
|
447
472
|
end
|
448
473
|
|
449
474
|
context "with relation define store_as option in embeded_many" do
|
@@ -453,11 +478,11 @@ describe Mongoid::Document do
|
|
453
478
|
end
|
454
479
|
|
455
480
|
it 'includes the store_as key association' do
|
456
|
-
person.as_document.
|
481
|
+
expect(person.as_document).to have_key("mobile_phones")
|
457
482
|
end
|
458
483
|
|
459
484
|
it 'should not include the key of association' do
|
460
|
-
person.as_document.
|
485
|
+
expect(person.as_document).to_not have_key("phones")
|
461
486
|
end
|
462
487
|
end
|
463
488
|
|
@@ -469,7 +494,7 @@ describe Mongoid::Document do
|
|
469
494
|
end
|
470
495
|
|
471
496
|
it "does not include the document in the hash" do
|
472
|
-
person.as_document["addresses"].
|
497
|
+
expect(person.as_document["addresses"]).to be_empty
|
473
498
|
end
|
474
499
|
end
|
475
500
|
|
@@ -483,7 +508,7 @@ describe Mongoid::Document do
|
|
483
508
|
end
|
484
509
|
|
485
510
|
it "does not include the document in the hash" do
|
486
|
-
person.as_document.
|
511
|
+
expect(person.as_document).to_not have_key("name")
|
487
512
|
end
|
488
513
|
end
|
489
514
|
end
|
@@ -497,31 +522,35 @@ describe Mongoid::Document do
|
|
497
522
|
end
|
498
523
|
|
499
524
|
it "returns nil" do
|
500
|
-
person.to_key.
|
525
|
+
expect(person.to_key).to be_nil
|
501
526
|
end
|
502
527
|
end
|
503
528
|
|
504
529
|
context "when the document is not new" do
|
505
530
|
|
506
531
|
let(:person) do
|
507
|
-
Person.
|
532
|
+
Person.create!
|
508
533
|
end
|
509
534
|
|
510
535
|
it "returns the id in an array" do
|
511
|
-
person.to_key.
|
536
|
+
expect(person.to_key).to eq([ person.id.to_s ])
|
537
|
+
end
|
538
|
+
|
539
|
+
it "can query using the key" do
|
540
|
+
expect(person.id).to eq Person.find(person.to_key).first.id
|
512
541
|
end
|
513
542
|
end
|
514
543
|
|
515
544
|
context "when the document is destroyed" do
|
516
545
|
|
517
546
|
let(:person) do
|
518
|
-
Person.instantiate("_id" =>
|
547
|
+
Person.instantiate("_id" => BSON::ObjectId.new).tap do |peep|
|
519
548
|
peep.destroyed = true
|
520
549
|
end
|
521
550
|
end
|
522
551
|
|
523
552
|
it "returns the id in an array" do
|
524
|
-
person.to_key.
|
553
|
+
expect(person.to_key).to eq([ person.id.to_s ])
|
525
554
|
end
|
526
555
|
end
|
527
556
|
end
|
@@ -535,18 +564,18 @@ describe Mongoid::Document do
|
|
535
564
|
end
|
536
565
|
|
537
566
|
it "returns nil" do
|
538
|
-
person.to_param.
|
567
|
+
expect(person.to_param).to be_nil
|
539
568
|
end
|
540
569
|
end
|
541
570
|
|
542
571
|
context "when the document is not new" do
|
543
572
|
|
544
573
|
let(:person) do
|
545
|
-
Person.instantiate("_id" =>
|
574
|
+
Person.instantiate("_id" => BSON::ObjectId.new)
|
546
575
|
end
|
547
576
|
|
548
577
|
it "returns the id as a string" do
|
549
|
-
person.to_param.
|
578
|
+
expect(person.to_param).to eq(person.id.to_s)
|
550
579
|
end
|
551
580
|
end
|
552
581
|
end
|
@@ -560,7 +589,7 @@ describe Mongoid::Document do
|
|
560
589
|
context "when attributes are not frozen" do
|
561
590
|
|
562
591
|
it "return false" do
|
563
|
-
person.
|
592
|
+
expect(person).to_not be_frozen
|
564
593
|
expect {
|
565
594
|
person.title = "something"
|
566
595
|
}.to_not raise_error
|
@@ -573,7 +602,7 @@ describe Mongoid::Document do
|
|
573
602
|
end
|
574
603
|
|
575
604
|
it "return true" do
|
576
|
-
person.
|
605
|
+
expect(person).to be_frozen
|
577
606
|
end
|
578
607
|
end
|
579
608
|
end
|
@@ -587,7 +616,7 @@ describe Mongoid::Document do
|
|
587
616
|
context "when not frozen" do
|
588
617
|
|
589
618
|
it "freezes attributes" do
|
590
|
-
person.freeze.
|
619
|
+
expect(person.freeze).to eq(person)
|
591
620
|
expect { person.title = "something" }.to raise_error
|
592
621
|
end
|
593
622
|
end
|
@@ -610,7 +639,7 @@ describe Mongoid::Document do
|
|
610
639
|
describe ".logger" do
|
611
640
|
|
612
641
|
it "returns the mongoid logger" do
|
613
|
-
Person.logger.
|
642
|
+
expect(Person.logger).to eq(Mongoid.logger)
|
614
643
|
end
|
615
644
|
end
|
616
645
|
|
@@ -621,7 +650,7 @@ describe Mongoid::Document do
|
|
621
650
|
end
|
622
651
|
|
623
652
|
it "returns the mongoid logger" do
|
624
|
-
person.send(:logger).
|
653
|
+
expect(person.send(:logger)).to eq(Mongoid.logger)
|
625
654
|
end
|
626
655
|
end
|
627
656
|
|
@@ -632,7 +661,7 @@ describe Mongoid::Document do
|
|
632
661
|
end
|
633
662
|
|
634
663
|
it "resets to the global scope" do
|
635
|
-
movie.global_set.
|
664
|
+
expect(movie.global_set).to be_a(::Set)
|
636
665
|
end
|
637
666
|
end
|
638
667
|
context "when a model name conflicts with a mongoid internal" do
|
@@ -642,7 +671,7 @@ describe Mongoid::Document do
|
|
642
671
|
end
|
643
672
|
|
644
673
|
it "allows the model name" do
|
645
|
-
scheduler.strategy.
|
674
|
+
expect(scheduler.strategy).to be_a(Strategy)
|
646
675
|
end
|
647
676
|
end
|
648
677
|
|
@@ -652,16 +681,16 @@ describe Mongoid::Document do
|
|
652
681
|
|
653
682
|
it "sets the defaults before yielding" do
|
654
683
|
Person.new do |person|
|
655
|
-
person.age.
|
684
|
+
expect(person.age).to eq(100)
|
656
685
|
end
|
657
686
|
end
|
658
687
|
end
|
659
688
|
end
|
660
689
|
|
661
|
-
context "defining a
|
690
|
+
context "defining a BSON::ObjectId as a field" do
|
662
691
|
|
663
692
|
let(:bson_id) do
|
664
|
-
|
693
|
+
BSON::ObjectId.new
|
665
694
|
end
|
666
695
|
|
667
696
|
let(:person) do
|
@@ -673,11 +702,11 @@ describe Mongoid::Document do
|
|
673
702
|
end
|
674
703
|
|
675
704
|
it "persists the correct type" do
|
676
|
-
person.reload.bson_id.
|
705
|
+
expect(person.reload.bson_id).to be_a(BSON::ObjectId)
|
677
706
|
end
|
678
707
|
|
679
708
|
it "has the correct value" do
|
680
|
-
person.bson_id.
|
709
|
+
expect(person.bson_id).to eq(bson_id)
|
681
710
|
end
|
682
711
|
end
|
683
712
|
|
@@ -692,7 +721,7 @@ describe Mongoid::Document do
|
|
692
721
|
end
|
693
722
|
|
694
723
|
it "converts them to nil" do
|
695
|
-
post.person_id.
|
724
|
+
expect(post.person_id).to be_nil
|
696
725
|
end
|
697
726
|
end
|
698
727
|
|
@@ -742,15 +771,15 @@ describe Mongoid::Document do
|
|
742
771
|
end
|
743
772
|
|
744
773
|
it "copies attributes" do
|
745
|
-
person.title.
|
774
|
+
expect(person.title).to eq('Sir')
|
746
775
|
end
|
747
776
|
|
748
777
|
it "keeps the same object id" do
|
749
|
-
person.id.
|
778
|
+
expect(person.id).to eq(manager.id)
|
750
779
|
end
|
751
780
|
|
752
781
|
it "sets the class type" do
|
753
|
-
person._type.
|
782
|
+
expect(person._type).to eq("Person")
|
754
783
|
end
|
755
784
|
|
756
785
|
it "raises an error when inappropriate class is provided" do
|
@@ -773,11 +802,11 @@ describe Mongoid::Document do
|
|
773
802
|
end
|
774
803
|
|
775
804
|
it "copies the embedded documents" do
|
776
|
-
person.appointments.first.
|
805
|
+
expect(person.appointments.first).to eq(appointment)
|
777
806
|
end
|
778
807
|
|
779
808
|
it "returns new instances" do
|
780
|
-
person.appointments.first.
|
809
|
+
expect(person.appointments.first).to_not equal(appointment)
|
781
810
|
end
|
782
811
|
end
|
783
812
|
|
@@ -794,11 +823,11 @@ describe Mongoid::Document do
|
|
794
823
|
end
|
795
824
|
|
796
825
|
it "copies the embedded documents" do
|
797
|
-
person.addresses.first.
|
826
|
+
expect(person.addresses.first).to eq(address)
|
798
827
|
end
|
799
828
|
|
800
829
|
it "returns new instances" do
|
801
|
-
person.addresses.first.
|
830
|
+
expect(person.addresses.first).to_not equal(address)
|
802
831
|
end
|
803
832
|
end
|
804
833
|
|
@@ -821,11 +850,11 @@ describe Mongoid::Document do
|
|
821
850
|
end
|
822
851
|
|
823
852
|
it "copies the embedded documents" do
|
824
|
-
person.addresses.first.
|
853
|
+
expect(person.addresses.first).to eq(address)
|
825
854
|
end
|
826
855
|
|
827
856
|
it "copies the embedded documents only once" do
|
828
|
-
person.reload.addresses.length.
|
857
|
+
expect(person.reload.addresses.length).to eq(1)
|
829
858
|
end
|
830
859
|
end
|
831
860
|
end
|
@@ -842,7 +871,7 @@ describe Mongoid::Document do
|
|
842
871
|
end
|
843
872
|
|
844
873
|
it "copies the localize attribute" do
|
845
|
-
person.desc.
|
874
|
+
expect(person.desc).to eq("description")
|
846
875
|
end
|
847
876
|
end
|
848
877
|
|
@@ -853,7 +882,7 @@ describe Mongoid::Document do
|
|
853
882
|
end
|
854
883
|
|
855
884
|
it "copies the state" do
|
856
|
-
person.
|
885
|
+
expect(person).to be_a_new_record
|
857
886
|
end
|
858
887
|
end
|
859
888
|
|
@@ -868,7 +897,7 @@ describe Mongoid::Document do
|
|
868
897
|
end
|
869
898
|
|
870
899
|
it "copies the state" do
|
871
|
-
person.
|
900
|
+
expect(person).to be_persisted
|
872
901
|
end
|
873
902
|
end
|
874
903
|
|
@@ -883,7 +912,7 @@ describe Mongoid::Document do
|
|
883
912
|
end
|
884
913
|
|
885
914
|
it "copies the state" do
|
886
|
-
person.
|
915
|
+
expect(person).to be_destroyed
|
887
916
|
end
|
888
917
|
end
|
889
918
|
|
@@ -899,11 +928,11 @@ describe Mongoid::Document do
|
|
899
928
|
end
|
900
929
|
|
901
930
|
it "copies over the dirty changes" do
|
902
|
-
person.changes["ssn"].
|
931
|
+
expect(person.changes["ssn"]).to eq([ nil, "123-22-1234" ])
|
903
932
|
end
|
904
933
|
|
905
934
|
it "adds the _type change" do
|
906
|
-
person.changes["_type"].
|
935
|
+
expect(person.changes["_type"]).to eq([ "Manager", "Person" ])
|
907
936
|
end
|
908
937
|
end
|
909
938
|
|
@@ -919,7 +948,7 @@ describe Mongoid::Document do
|
|
919
948
|
end
|
920
949
|
|
921
950
|
it "copies the errors" do
|
922
|
-
person.errors.
|
951
|
+
expect(person.errors).to include(:ssn)
|
923
952
|
end
|
924
953
|
end
|
925
954
|
end
|
@@ -937,15 +966,15 @@ describe Mongoid::Document do
|
|
937
966
|
end
|
938
967
|
|
939
968
|
it "copies attributes" do
|
940
|
-
manager.title.
|
969
|
+
expect(manager.title).to eq('Sir')
|
941
970
|
end
|
942
971
|
|
943
972
|
it "keeps the same object id" do
|
944
|
-
manager.id.
|
973
|
+
expect(manager.id).to eq(person.id)
|
945
974
|
end
|
946
975
|
|
947
976
|
it "sets the class type" do
|
948
|
-
manager._type.
|
977
|
+
expect(manager._type).to eq("Manager")
|
949
978
|
end
|
950
979
|
|
951
980
|
it "raises an error when inappropriate class is provided" do
|
@@ -966,11 +995,11 @@ describe Mongoid::Document do
|
|
966
995
|
end
|
967
996
|
|
968
997
|
it "copies the embedded documents" do
|
969
|
-
manager.addresses.first.
|
998
|
+
expect(manager.addresses.first).to eq(address)
|
970
999
|
end
|
971
1000
|
|
972
1001
|
it "returns new instances" do
|
973
|
-
manager.addresses.first.
|
1002
|
+
expect(manager.addresses.first).to_not equal(address)
|
974
1003
|
end
|
975
1004
|
end
|
976
1005
|
|
@@ -981,7 +1010,7 @@ describe Mongoid::Document do
|
|
981
1010
|
end
|
982
1011
|
|
983
1012
|
it "copies the state" do
|
984
|
-
manager.
|
1013
|
+
expect(manager).to be_a_new_record
|
985
1014
|
end
|
986
1015
|
end
|
987
1016
|
|
@@ -996,7 +1025,7 @@ describe Mongoid::Document do
|
|
996
1025
|
end
|
997
1026
|
|
998
1027
|
it "copies the state" do
|
999
|
-
manager.
|
1028
|
+
expect(manager).to be_persisted
|
1000
1029
|
end
|
1001
1030
|
|
1002
1031
|
context "when downcasted document is saved" do
|
@@ -1006,15 +1035,19 @@ describe Mongoid::Document do
|
|
1006
1035
|
end
|
1007
1036
|
|
1008
1037
|
it "keeps the type" do
|
1009
|
-
manager.
|
1038
|
+
expect(manager).to be_an_instance_of(Manager)
|
1039
|
+
end
|
1040
|
+
|
1041
|
+
it "copies over the dirty changes" do
|
1042
|
+
expect(manager.changes["ssn"]).to eq(person.changes["ssn"])
|
1010
1043
|
end
|
1011
1044
|
|
1012
1045
|
it "can by queried by the parent class" do
|
1013
|
-
Person.find(manager.id).
|
1046
|
+
expect(Person.find(manager.id)).to be_an_instance_of(Manager)
|
1014
1047
|
end
|
1015
1048
|
|
1016
1049
|
it "can by queried by the main class" do
|
1017
|
-
Manager.find(manager.id).
|
1050
|
+
expect(Manager.find(manager.id)).to be_an_instance_of(Manager)
|
1018
1051
|
end
|
1019
1052
|
end
|
1020
1053
|
end
|
@@ -1030,7 +1063,7 @@ describe Mongoid::Document do
|
|
1030
1063
|
end
|
1031
1064
|
|
1032
1065
|
it "copies the state" do
|
1033
|
-
manager.
|
1066
|
+
expect(manager).to be_destroyed
|
1034
1067
|
end
|
1035
1068
|
end
|
1036
1069
|
|
@@ -1046,11 +1079,11 @@ describe Mongoid::Document do
|
|
1046
1079
|
end
|
1047
1080
|
|
1048
1081
|
it "copies over the dirty changes" do
|
1049
|
-
manager.changes["ssn"].
|
1082
|
+
expect(manager.changes["ssn"]).to eq([ nil, "123-22-1234" ])
|
1050
1083
|
end
|
1051
1084
|
|
1052
1085
|
it "adds the _type change" do
|
1053
|
-
manager.changes["_type"].
|
1086
|
+
expect(manager.changes["_type"]).to eq([ "Person", "Manager" ])
|
1054
1087
|
end
|
1055
1088
|
end
|
1056
1089
|
|
@@ -1066,7 +1099,24 @@ describe Mongoid::Document do
|
|
1066
1099
|
end
|
1067
1100
|
|
1068
1101
|
it "copies the errors" do
|
1069
|
-
manager.errors.
|
1102
|
+
expect(manager.errors).to include(:ssn)
|
1103
|
+
end
|
1104
|
+
|
1105
|
+
end
|
1106
|
+
|
1107
|
+
context "when the subclass validates attributes not present on the parent class" do
|
1108
|
+
|
1109
|
+
before do
|
1110
|
+
Manager.validates_inclusion_of(:level, in: [1, 2])
|
1111
|
+
end
|
1112
|
+
|
1113
|
+
let(:manager) do
|
1114
|
+
person.becomes(Manager)
|
1115
|
+
end
|
1116
|
+
|
1117
|
+
it "validates the instance of the subclass" do
|
1118
|
+
manager.level = 3
|
1119
|
+
expect(manager.valid?).to be false
|
1070
1120
|
end
|
1071
1121
|
end
|
1072
1122
|
|
@@ -1077,7 +1127,7 @@ describe Mongoid::Document do
|
|
1077
1127
|
end
|
1078
1128
|
|
1079
1129
|
it "applies default attributes" do
|
1080
|
-
manager.level.
|
1130
|
+
expect(manager.level).to eq(1)
|
1081
1131
|
end
|
1082
1132
|
end
|
1083
1133
|
end
|
@@ -1132,13 +1182,13 @@ describe Mongoid::Document do
|
|
1132
1182
|
end
|
1133
1183
|
|
1134
1184
|
it "stores the parent object" do
|
1135
|
-
cache.fetch("key") { person }.
|
1136
|
-
cache.fetch("key").
|
1185
|
+
expect(cache.fetch("key") { person }).to eq(person)
|
1186
|
+
expect(cache.fetch("key")).to eq(person)
|
1137
1187
|
end
|
1138
1188
|
|
1139
1189
|
it "stores the embedded object" do
|
1140
|
-
cache.fetch("key") { account }.
|
1141
|
-
cache.fetch("key").
|
1190
|
+
expect(cache.fetch("key") { account }).to eq(account)
|
1191
|
+
expect(cache.fetch("key")).to eq(account)
|
1142
1192
|
end
|
1143
1193
|
end
|
1144
1194
|
end
|