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
@@ -0,0 +1,134 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Selectable do
|
4
|
+
|
5
|
+
describe "#atomic_selector" do
|
6
|
+
|
7
|
+
context "when the document is a root document" do
|
8
|
+
|
9
|
+
context "when the document has a shard key" do
|
10
|
+
|
11
|
+
let(:profile) do
|
12
|
+
Profile.create(name: "google")
|
13
|
+
end
|
14
|
+
|
15
|
+
let!(:selector) do
|
16
|
+
profile.atomic_selector
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns the id and shard key in the hash" do
|
20
|
+
expect(selector).to eq({ "_id" => profile.id, "name" => profile.name })
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when the document does not have a shard key" do
|
25
|
+
|
26
|
+
context "when using object ids" do
|
27
|
+
|
28
|
+
let(:band) do
|
29
|
+
Band.create
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:selector) do
|
33
|
+
band.atomic_selector
|
34
|
+
end
|
35
|
+
|
36
|
+
it "returns the hash with the id" do
|
37
|
+
expect(selector).to eq({ "_id" => band.id })
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when using a custom id" do
|
42
|
+
|
43
|
+
let(:account) do
|
44
|
+
Account.create(name: "savings")
|
45
|
+
end
|
46
|
+
|
47
|
+
let(:selector) do
|
48
|
+
account.atomic_selector
|
49
|
+
end
|
50
|
+
|
51
|
+
context "when the id has not changed" do
|
52
|
+
|
53
|
+
it "returns the hash with the key" do
|
54
|
+
expect(selector).to eq({ "_id" => "savings" })
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "when the composite key has changed" do
|
59
|
+
|
60
|
+
before do
|
61
|
+
account.new_record = false
|
62
|
+
account.name = "current"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "returns the hash with the old key" do
|
66
|
+
expect(selector).to eq({ "_id" => "savings" })
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "when the document is embedded" do
|
74
|
+
|
75
|
+
let(:person) do
|
76
|
+
Person.create
|
77
|
+
end
|
78
|
+
|
79
|
+
context "when the document is an embeds one" do
|
80
|
+
|
81
|
+
let(:name) do
|
82
|
+
person.create_name(first_name: "test", last_name: "user")
|
83
|
+
end
|
84
|
+
|
85
|
+
it "returns the hash with the selector" do
|
86
|
+
expect(name.atomic_selector).to eq(
|
87
|
+
{ "_id" => person.id, "name._id" => name.id }
|
88
|
+
)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "when the document is an embeds many" do
|
93
|
+
|
94
|
+
let(:address) do
|
95
|
+
person.addresses.create(street: "kreuzbergstr")
|
96
|
+
end
|
97
|
+
|
98
|
+
it "returns the hash with the selector" do
|
99
|
+
expect(address.atomic_selector).to eq(
|
100
|
+
{ "_id" => person.id, "addresses._id" => address.id }
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
context "when the document's id changes" do
|
105
|
+
|
106
|
+
before do
|
107
|
+
address._id = "hobrecht"
|
108
|
+
end
|
109
|
+
|
110
|
+
it "returns only the parent selector" do
|
111
|
+
expect(address.atomic_selector).to eq(person.atomic_selector)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
context "when the document is embedded multiple levels" do
|
116
|
+
|
117
|
+
let(:location) do
|
118
|
+
address.locations.create
|
119
|
+
end
|
120
|
+
|
121
|
+
it "returns a hash with the selector" do
|
122
|
+
expect(location.atomic_selector).to eq(
|
123
|
+
{
|
124
|
+
"_id" => person.id,
|
125
|
+
"addresses._id" => address.id,
|
126
|
+
"addresses.0.locations._id" => location.id
|
127
|
+
}
|
128
|
+
)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Mongoid::
|
3
|
+
describe Mongoid::Serializable do
|
4
4
|
|
5
5
|
describe "#field_names" do
|
6
6
|
|
@@ -9,7 +9,36 @@ describe Mongoid::Serialization do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
it "does not duplicate fields" do
|
12
|
-
band.send(:field_names, {}).
|
12
|
+
expect(band.send(:field_names, {})).to eq(band.fields.except("_type").keys.sort)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe ".include_root_in_json" do
|
17
|
+
|
18
|
+
let(:person) do
|
19
|
+
Person.new
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when config set to true" do
|
23
|
+
|
24
|
+
before do
|
25
|
+
Mongoid.include_root_in_json = true
|
26
|
+
end
|
27
|
+
|
28
|
+
it "returns true" do
|
29
|
+
expect(person.include_root_in_json).to be true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when config set to false" do
|
34
|
+
|
35
|
+
before do
|
36
|
+
Mongoid.include_root_in_json = false
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns false" do
|
40
|
+
expect(person.include_root_in_json).to be false
|
41
|
+
end
|
13
42
|
end
|
14
43
|
end
|
15
44
|
|
@@ -30,7 +59,7 @@ describe Mongoid::Serialization do
|
|
30
59
|
end
|
31
60
|
|
32
61
|
it "grabs the attribute direct from the hash" do
|
33
|
-
attributes["loop"].
|
62
|
+
expect(attributes["loop"]).to eq("testing")
|
34
63
|
end
|
35
64
|
end
|
36
65
|
|
@@ -45,7 +74,7 @@ describe Mongoid::Serialization do
|
|
45
74
|
end
|
46
75
|
|
47
76
|
it "uses the overridden method" do
|
48
|
-
attributes["override_me"].
|
77
|
+
expect(attributes["override_me"]).to eq("1")
|
49
78
|
end
|
50
79
|
end
|
51
80
|
|
@@ -62,7 +91,7 @@ describe Mongoid::Serialization do
|
|
62
91
|
end
|
63
92
|
|
64
93
|
it "includes the embedded documents" do
|
65
|
-
attributes["addresses"].first.
|
94
|
+
expect(attributes["addresses"].first).to eq(address.serializable_hash)
|
66
95
|
end
|
67
96
|
end
|
68
97
|
|
@@ -77,11 +106,11 @@ describe Mongoid::Serialization do
|
|
77
106
|
end
|
78
107
|
|
79
108
|
it "uses the options" do
|
80
|
-
attributes["id"].
|
109
|
+
expect(attributes["id"]).to eq(person.id)
|
81
110
|
end
|
82
111
|
|
83
112
|
it "uses the options on embedded documents" do
|
84
|
-
address_attributes["id"].
|
113
|
+
expect(address_attributes["id"]).to eq(address.id)
|
85
114
|
end
|
86
115
|
end
|
87
116
|
|
@@ -96,7 +125,7 @@ describe Mongoid::Serialization do
|
|
96
125
|
end
|
97
126
|
|
98
127
|
it "includes the deeply nested document" do
|
99
|
-
attributes["addresses"][0]["locations"].
|
128
|
+
expect(attributes["addresses"][0]["locations"]).to_not be_empty
|
100
129
|
end
|
101
130
|
end
|
102
131
|
end
|
@@ -116,7 +145,7 @@ describe Mongoid::Serialization do
|
|
116
145
|
end
|
117
146
|
|
118
147
|
it "converts the objects to the defined type" do
|
119
|
-
attributes["dob"].
|
148
|
+
expect(attributes["dob"]).to eq(date)
|
120
149
|
end
|
121
150
|
end
|
122
151
|
|
@@ -127,7 +156,7 @@ describe Mongoid::Serialization do
|
|
127
156
|
end
|
128
157
|
|
129
158
|
before do
|
130
|
-
person.write_attributes(attributes
|
159
|
+
person.write_attributes(attributes)
|
131
160
|
end
|
132
161
|
|
133
162
|
let(:field_names) do
|
@@ -135,15 +164,15 @@ describe Mongoid::Serialization do
|
|
135
164
|
end
|
136
165
|
|
137
166
|
it "serializes assigned attributes" do
|
138
|
-
person.serializable_hash.
|
167
|
+
expect(person.serializable_hash).to include attributes
|
139
168
|
end
|
140
169
|
|
141
170
|
it "includes all defined fields except _type" do
|
142
|
-
person.serializable_hash.keys.
|
171
|
+
expect(person.serializable_hash.keys).to include(*field_names)
|
143
172
|
end
|
144
173
|
|
145
174
|
it "does not include _type" do
|
146
|
-
person.serializable_hash.keys.
|
175
|
+
expect(person.serializable_hash.keys).to_not include "_type"
|
147
176
|
end
|
148
177
|
|
149
178
|
context "when providing options" do
|
@@ -157,7 +186,7 @@ describe Mongoid::Serialization do
|
|
157
186
|
end
|
158
187
|
|
159
188
|
it "does not modify the options in the argument" do
|
160
|
-
options[:except].
|
189
|
+
expect(options[:except]).to be_nil
|
161
190
|
end
|
162
191
|
end
|
163
192
|
|
@@ -172,14 +201,14 @@ describe Mongoid::Serialization do
|
|
172
201
|
end
|
173
202
|
|
174
203
|
it "includes _type field" do
|
175
|
-
person.serializable_hash.keys.
|
204
|
+
expect(person.serializable_hash.keys).to include '_type'
|
176
205
|
end
|
177
206
|
end
|
178
207
|
|
179
208
|
context "when specifying which fields to only include" do
|
180
209
|
|
181
210
|
it "only includes the specified fields" do
|
182
|
-
person.serializable_hash(only: [:title]).
|
211
|
+
expect(person.serializable_hash(only: [:title])).to eq(
|
183
212
|
{ "title" => attributes["title"] }
|
184
213
|
)
|
185
214
|
end
|
@@ -188,20 +217,38 @@ describe Mongoid::Serialization do
|
|
188
217
|
context "when specifying extra inclusions" do
|
189
218
|
|
190
219
|
it "includes the extra fields" do
|
191
|
-
person.serializable_hash(
|
220
|
+
expect(person.serializable_hash(
|
192
221
|
methods: [ :_type ]
|
193
|
-
).has_key?("_type").
|
222
|
+
).has_key?("_type")).to be true
|
194
223
|
end
|
195
224
|
end
|
196
225
|
|
197
226
|
context "when specifying which fields to exclude" do
|
198
227
|
|
199
228
|
it "excludes the specified fields" do
|
200
|
-
person.serializable_hash(except: [:title]).
|
229
|
+
expect(person.serializable_hash(except: [:title])).to_not include(
|
201
230
|
"title" => attributes["title"]
|
202
231
|
)
|
203
232
|
end
|
204
233
|
end
|
234
|
+
|
235
|
+
context "when only two attributes are loaded" do
|
236
|
+
before do
|
237
|
+
person.save
|
238
|
+
end
|
239
|
+
|
240
|
+
let(:from_db) do
|
241
|
+
Person.only("_id", "username").first
|
242
|
+
end
|
243
|
+
|
244
|
+
let(:hash) do
|
245
|
+
from_db.serializable_hash
|
246
|
+
end
|
247
|
+
|
248
|
+
it "returns those two attributes only" do
|
249
|
+
expect(hash.keys).to eq(["_id", "username"])
|
250
|
+
end
|
251
|
+
end
|
205
252
|
end
|
206
253
|
|
207
254
|
context "when a model has dynamic fields" do
|
@@ -219,13 +266,13 @@ describe Mongoid::Serialization do
|
|
219
266
|
end
|
220
267
|
|
221
268
|
it "includes dynamic fields" do
|
222
|
-
person.serializable_hash[dynamic_field_name].
|
269
|
+
expect(person.serializable_hash[dynamic_field_name]).to eq(dynamic_value)
|
223
270
|
end
|
224
271
|
|
225
272
|
context "when specifying which dynamic fields to only include" do
|
226
273
|
|
227
274
|
it "only includes the specified dynamic fields" do
|
228
|
-
person.serializable_hash(only: [dynamic_field_name]).
|
275
|
+
expect(person.serializable_hash(only: [dynamic_field_name])).to eq(
|
229
276
|
{ dynamic_field_name => dynamic_value }
|
230
277
|
)
|
231
278
|
end
|
@@ -234,7 +281,7 @@ describe Mongoid::Serialization do
|
|
234
281
|
context "when specified which dynamic fields to exclude" do
|
235
282
|
|
236
283
|
it "excludes the specified fields" do
|
237
|
-
person.serializable_hash(except: [dynamic_field_name]).
|
284
|
+
expect(person.serializable_hash(except: [dynamic_field_name])).to_not include(
|
238
285
|
dynamic_field_name => dynamic_value
|
239
286
|
)
|
240
287
|
end
|
@@ -248,7 +295,7 @@ describe Mongoid::Serialization do
|
|
248
295
|
end
|
249
296
|
|
250
297
|
before do
|
251
|
-
person.write_attributes(attributes
|
298
|
+
person.write_attributes(attributes)
|
252
299
|
end
|
253
300
|
|
254
301
|
context "when the model is saved before the relation is added" do
|
@@ -268,7 +315,7 @@ describe Mongoid::Serialization do
|
|
268
315
|
end
|
269
316
|
|
270
317
|
it "includes the relation" do
|
271
|
-
person.serializable_hash.keys.
|
318
|
+
expect(person.serializable_hash.keys).to include('addresses')
|
272
319
|
end
|
273
320
|
end
|
274
321
|
|
@@ -282,7 +329,7 @@ describe Mongoid::Serialization do
|
|
282
329
|
end
|
283
330
|
|
284
331
|
it "includes the relation" do
|
285
|
-
person.serializable_hash.keys.
|
332
|
+
expect(person.serializable_hash.keys).to include('name')
|
286
333
|
end
|
287
334
|
end
|
288
335
|
end
|
@@ -300,7 +347,7 @@ describe Mongoid::Serialization do
|
|
300
347
|
end
|
301
348
|
|
302
349
|
it "includes the relation" do
|
303
|
-
person.serializable_hash.keys.
|
350
|
+
expect(person.serializable_hash.keys).to include('addresses')
|
304
351
|
end
|
305
352
|
end
|
306
353
|
|
@@ -314,7 +361,7 @@ describe Mongoid::Serialization do
|
|
314
361
|
end
|
315
362
|
|
316
363
|
it "includes the relation" do
|
317
|
-
person.serializable_hash.keys.
|
364
|
+
expect(person.serializable_hash.keys).to include('name')
|
318
365
|
end
|
319
366
|
end
|
320
367
|
end
|
@@ -323,7 +370,7 @@ describe Mongoid::Serialization do
|
|
323
370
|
context "when including methods" do
|
324
371
|
|
325
372
|
it "includes the method result" do
|
326
|
-
person.serializable_hash(methods: [:foo]).
|
373
|
+
expect(person.serializable_hash(methods: [:foo])).to include(
|
327
374
|
"foo" => person.foo
|
328
375
|
)
|
329
376
|
end
|
@@ -362,7 +409,7 @@ describe Mongoid::Serialization do
|
|
362
409
|
end
|
363
410
|
|
364
411
|
it "does not generate new ids" do
|
365
|
-
hash["addresses"].first["_id"].
|
412
|
+
expect(hash["addresses"].first["_id"]).to be_nil
|
366
413
|
end
|
367
414
|
end
|
368
415
|
|
@@ -373,12 +420,12 @@ describe Mongoid::Serialization do
|
|
373
420
|
end
|
374
421
|
|
375
422
|
it "includes the first relation" do
|
376
|
-
relation_hash[0].
|
423
|
+
expect(relation_hash[0]).to include
|
377
424
|
{ "_id" => "kudamm", "street" => "Kudamm" }
|
378
425
|
end
|
379
426
|
|
380
427
|
it "includes the second relation" do
|
381
|
-
relation_hash[1].
|
428
|
+
expect(relation_hash[1]).to include
|
382
429
|
{ "_id" => "tauentzienstr", "street" => "Tauentzienstr" }
|
383
430
|
end
|
384
431
|
end
|
@@ -390,12 +437,12 @@ describe Mongoid::Serialization do
|
|
390
437
|
end
|
391
438
|
|
392
439
|
it "includes the first relation" do
|
393
|
-
relation_hash[0].
|
440
|
+
expect(relation_hash[0]).to include
|
394
441
|
{ "_id" => "kudamm", "street" => "Kudamm" }
|
395
442
|
end
|
396
443
|
|
397
444
|
it "includes the second relation" do
|
398
|
-
relation_hash[1].
|
445
|
+
expect(relation_hash[1]).to include
|
399
446
|
{ "_id" => "tauentzienstr", "street" => "Tauentzienstr" }
|
400
447
|
end
|
401
448
|
end
|
@@ -409,11 +456,11 @@ describe Mongoid::Serialization do
|
|
409
456
|
end
|
410
457
|
|
411
458
|
it "includes the first relation sans exceptions" do
|
412
|
-
relation_hash[0].
|
459
|
+
expect(relation_hash[0]).to include({ "street" => "Kudamm" })
|
413
460
|
end
|
414
461
|
|
415
462
|
it "includes the second relation sans exceptions" do
|
416
|
-
relation_hash[1].
|
463
|
+
expect(relation_hash[1]).to include({ "street" => "Tauentzienstr" })
|
417
464
|
end
|
418
465
|
end
|
419
466
|
|
@@ -432,9 +479,9 @@ describe Mongoid::Serialization do
|
|
432
479
|
end
|
433
480
|
|
434
481
|
it "includes the first relation" do
|
435
|
-
relation_hash[0]["locations"].any? do |location|
|
482
|
+
expect(relation_hash[0]["locations"].any? do |location|
|
436
483
|
location["name"] == "Home"
|
437
|
-
end.
|
484
|
+
end).to be true
|
438
485
|
end
|
439
486
|
|
440
487
|
context "after retrieved from database" do
|
@@ -460,12 +507,12 @@ describe Mongoid::Serialization do
|
|
460
507
|
end
|
461
508
|
|
462
509
|
it "includes the specific ralations" do
|
463
|
-
relation_hash[0]["locations"].map do |location|
|
510
|
+
expect(relation_hash[0]["locations"].map do |location|
|
464
511
|
location["name"]
|
465
|
-
end.
|
466
|
-
relation_hash[1]["locations"].map do |location|
|
512
|
+
end).to include "Home"
|
513
|
+
expect(relation_hash[1]["locations"].map do |location|
|
467
514
|
location["name"]
|
468
|
-
end.
|
515
|
+
end).to include "Hotel"
|
469
516
|
end
|
470
517
|
end
|
471
518
|
end
|
@@ -484,15 +531,15 @@ describe Mongoid::Serialization do
|
|
484
531
|
end
|
485
532
|
|
486
533
|
it "does not contain the root exclusion" do
|
487
|
-
hash["_id"].
|
534
|
+
expect(hash["_id"]).to be_nil
|
488
535
|
end
|
489
536
|
|
490
537
|
it "does not include the embedded many exclusion" do
|
491
|
-
relation_hash[0]["_id"].
|
538
|
+
expect(relation_hash[0]["_id"]).to be_nil
|
492
539
|
end
|
493
540
|
|
494
541
|
it "does not include the embedded one exclusion" do
|
495
|
-
hash["name"]["_id"].
|
542
|
+
expect(hash["name"]["_id"]).to be_nil
|
496
543
|
end
|
497
544
|
end
|
498
545
|
end
|
@@ -515,7 +562,7 @@ describe Mongoid::Serialization do
|
|
515
562
|
end
|
516
563
|
|
517
564
|
it "includes the specified relation" do
|
518
|
-
relation_hash.
|
565
|
+
expect(relation_hash).to include
|
519
566
|
{ "_id" => "leo-marvin", "first_name" => "Leo", "last_name" => "Marvin" }
|
520
567
|
end
|
521
568
|
end
|
@@ -527,7 +574,7 @@ describe Mongoid::Serialization do
|
|
527
574
|
end
|
528
575
|
|
529
576
|
it "includes the specified relation" do
|
530
|
-
relation_hash.
|
577
|
+
expect(relation_hash).to include
|
531
578
|
{ "_id" => "leo-marvin", "first_name" => "Leo", "last_name" => "Marvin" }
|
532
579
|
end
|
533
580
|
end
|
@@ -539,7 +586,7 @@ describe Mongoid::Serialization do
|
|
539
586
|
end
|
540
587
|
|
541
588
|
it "includes the specified relation sans exceptions" do
|
542
|
-
relation_hash.
|
589
|
+
expect(relation_hash).to include
|
543
590
|
{ "first_name" => "Leo", "last_name" => "Marvin" }
|
544
591
|
end
|
545
592
|
end
|
@@ -566,15 +613,15 @@ describe Mongoid::Serialization do
|
|
566
613
|
end
|
567
614
|
|
568
615
|
it "includes the specified relation" do
|
569
|
-
relation_hash.
|
616
|
+
expect(relation_hash).to_not be_nil
|
570
617
|
end
|
571
618
|
|
572
619
|
it "includes the first document related fields" do
|
573
|
-
relation_hash[0]["title"].
|
620
|
+
expect(relation_hash[0]["title"]).to eq("First")
|
574
621
|
end
|
575
622
|
|
576
623
|
it "includes the second document related fields" do
|
577
|
-
relation_hash[1]["title"].
|
624
|
+
expect(relation_hash[1]["title"]).to eq("Second")
|
578
625
|
end
|
579
626
|
end
|
580
627
|
|
@@ -585,15 +632,15 @@ describe Mongoid::Serialization do
|
|
585
632
|
end
|
586
633
|
|
587
634
|
it "includes the specified relation" do
|
588
|
-
relation_hash.
|
635
|
+
expect(relation_hash).to_not be_nil
|
589
636
|
end
|
590
637
|
|
591
638
|
it "includes the first document related fields" do
|
592
|
-
relation_hash[0]["title"].
|
639
|
+
expect(relation_hash[0]["title"]).to eq("First")
|
593
640
|
end
|
594
641
|
|
595
642
|
it "includes the second document related fields" do
|
596
|
-
relation_hash[1]["title"].
|
643
|
+
expect(relation_hash[1]["title"]).to eq("Second")
|
597
644
|
end
|
598
645
|
end
|
599
646
|
|
@@ -604,23 +651,23 @@ describe Mongoid::Serialization do
|
|
604
651
|
end
|
605
652
|
|
606
653
|
it "includes the specified relation" do
|
607
|
-
relation_hash.
|
654
|
+
expect(relation_hash).to_not be_nil
|
608
655
|
end
|
609
656
|
|
610
657
|
it "includes the first document related fields" do
|
611
|
-
relation_hash[0]["title"].
|
658
|
+
expect(relation_hash[0]["title"]).to eq("First")
|
612
659
|
end
|
613
660
|
|
614
661
|
it "includes the second document related fields" do
|
615
|
-
relation_hash[1]["title"].
|
662
|
+
expect(relation_hash[1]["title"]).to eq("Second")
|
616
663
|
end
|
617
664
|
|
618
665
|
it "does not include the first document exceptions" do
|
619
|
-
relation_hash[0]["_id"].
|
666
|
+
expect(relation_hash[0]["_id"]).to be_nil
|
620
667
|
end
|
621
668
|
|
622
669
|
it "does not include the second document exceptions" do
|
623
|
-
relation_hash[1]["_id"].
|
670
|
+
expect(relation_hash[1]["_id"]).to be_nil
|
624
671
|
end
|
625
672
|
end
|
626
673
|
end
|
@@ -646,15 +693,15 @@ describe Mongoid::Serialization do
|
|
646
693
|
end
|
647
694
|
|
648
695
|
it "includes the specified relation" do
|
649
|
-
relation_hash.
|
696
|
+
expect(relation_hash).to_not be_nil
|
650
697
|
end
|
651
698
|
|
652
699
|
it "includes the first document related fields" do
|
653
|
-
relation_hash[0]["name"].
|
700
|
+
expect(relation_hash[0]["name"]).to eq("First")
|
654
701
|
end
|
655
702
|
|
656
703
|
it "includes the second document related fields" do
|
657
|
-
relation_hash[1]["name"].
|
704
|
+
expect(relation_hash[1]["name"]).to eq("Second")
|
658
705
|
end
|
659
706
|
end
|
660
707
|
|
@@ -665,15 +712,15 @@ describe Mongoid::Serialization do
|
|
665
712
|
end
|
666
713
|
|
667
714
|
it "includes the specified relation" do
|
668
|
-
relation_hash.
|
715
|
+
expect(relation_hash).to_not be_nil
|
669
716
|
end
|
670
717
|
|
671
718
|
it "includes the first document related fields" do
|
672
|
-
relation_hash[0]["name"].
|
719
|
+
expect(relation_hash[0]["name"]).to eq("First")
|
673
720
|
end
|
674
721
|
|
675
722
|
it "includes the second document related fields" do
|
676
|
-
relation_hash[1]["name"].
|
723
|
+
expect(relation_hash[1]["name"]).to eq("Second")
|
677
724
|
end
|
678
725
|
end
|
679
726
|
|
@@ -691,27 +738,27 @@ describe Mongoid::Serialization do
|
|
691
738
|
end
|
692
739
|
|
693
740
|
it "includes the specified relation" do
|
694
|
-
relation_hash.
|
741
|
+
expect(relation_hash).to_not be_nil
|
695
742
|
end
|
696
743
|
|
697
744
|
it "includes the first document related fields" do
|
698
|
-
relation_hash[0]["name"].
|
745
|
+
expect(relation_hash[0]["name"]).to eq("First")
|
699
746
|
end
|
700
747
|
|
701
748
|
it "includes the second document related fields" do
|
702
|
-
relation_hash[1]["name"].
|
749
|
+
expect(relation_hash[1]["name"]).to eq("Second")
|
703
750
|
end
|
704
751
|
|
705
752
|
it "does not include the first document exceptions" do
|
706
|
-
relation_hash[0]["_id"].
|
753
|
+
expect(relation_hash[0]["_id"]).to be_nil
|
707
754
|
end
|
708
755
|
|
709
756
|
it "does not include the second document exceptions" do
|
710
|
-
relation_hash[1]["_id"].
|
757
|
+
expect(relation_hash[1]["_id"]).to be_nil
|
711
758
|
end
|
712
759
|
|
713
760
|
it "does not include the root exceptions" do
|
714
|
-
hash["preference_ids"].
|
761
|
+
expect(hash["preference_ids"]).to be_nil
|
715
762
|
end
|
716
763
|
end
|
717
764
|
end
|
@@ -732,7 +779,7 @@ describe Mongoid::Serialization do
|
|
732
779
|
end
|
733
780
|
|
734
781
|
it "uses the mongoid configuration" do
|
735
|
-
person.to_json.
|
782
|
+
expect(person.to_json).to include("person")
|
736
783
|
end
|
737
784
|
end
|
738
785
|
|
@@ -743,7 +790,7 @@ describe Mongoid::Serialization do
|
|
743
790
|
end
|
744
791
|
|
745
792
|
it "uses the mongoid configuration" do
|
746
|
-
person.to_json.
|
793
|
+
expect(person.to_json).to_not include("person")
|
747
794
|
end
|
748
795
|
end
|
749
796
|
|
@@ -760,7 +807,7 @@ describe Mongoid::Serialization do
|
|
760
807
|
end
|
761
808
|
|
762
809
|
it "serializes only the relation" do
|
763
|
-
json.
|
810
|
+
expect(json).to include(address.street)
|
764
811
|
end
|
765
812
|
end
|
766
813
|
|
@@ -775,7 +822,7 @@ describe Mongoid::Serialization do
|
|
775
822
|
end
|
776
823
|
|
777
824
|
it "serializes only the relation" do
|
778
|
-
json.
|
825
|
+
expect(json).to include(post.title)
|
779
826
|
end
|
780
827
|
end
|
781
828
|
end
|
@@ -783,14 +830,14 @@ describe Mongoid::Serialization do
|
|
783
830
|
|
784
831
|
describe "#to_xml" do
|
785
832
|
|
786
|
-
context "
|
833
|
+
context "BSON::ObjectId" do
|
787
834
|
|
788
835
|
let(:person) do
|
789
836
|
Person.new
|
790
837
|
end
|
791
838
|
|
792
839
|
it "serializes as string" do
|
793
|
-
person.to_xml.
|
840
|
+
expect(person.to_xml).to include("<_id>#{person.id}</_id>")
|
794
841
|
end
|
795
842
|
end
|
796
843
|
|
@@ -803,12 +850,12 @@ describe Mongoid::Serialization do
|
|
803
850
|
end
|
804
851
|
|
805
852
|
it "properly types the array" do
|
806
|
-
person.to_xml.
|
853
|
+
expect(person.to_xml).to include("<aliases type=\"array\">")
|
807
854
|
end
|
808
855
|
|
809
856
|
it "serializes the array" do
|
810
|
-
person.to_xml.
|
811
|
-
person.to_xml.
|
857
|
+
expect(person.to_xml).to include("<alias>Kelly</alias>")
|
858
|
+
expect(person.to_xml).to include("<alias>Machine Gun</alias>")
|
812
859
|
end
|
813
860
|
end
|
814
861
|
|
@@ -821,12 +868,12 @@ describe Mongoid::Serialization do
|
|
821
868
|
end
|
822
869
|
|
823
870
|
it "properly types the hash" do
|
824
|
-
person.to_xml.
|
871
|
+
expect(person.to_xml).to include("<map>")
|
825
872
|
end
|
826
873
|
|
827
874
|
it "serializes the hash" do
|
828
|
-
person.to_xml.
|
829
|
-
person.to_xml.
|
875
|
+
expect(person.to_xml).to include("<lat type=\"float\">24.5</lat>")
|
876
|
+
expect(person.to_xml).to include("<long type=\"float\">22.1</long>")
|
830
877
|
end
|
831
878
|
end
|
832
879
|
end
|