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
@@ -9,7 +9,7 @@ describe Mongoid::Fields::Standard do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
it "returns false" do
|
12
|
-
field.
|
12
|
+
expect(field).to_not be_lazy
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -42,7 +42,7 @@ describe Mongoid::Fields::Standard do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it "returns true" do
|
45
|
-
field.
|
45
|
+
expect(field).to be_pre_processed
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -58,7 +58,7 @@ describe Mongoid::Fields::Standard do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it "returns false" do
|
61
|
-
field.
|
61
|
+
expect(field).to_not be_pre_processed
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
@@ -75,7 +75,7 @@ describe Mongoid::Fields::Standard do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
it "returns true" do
|
78
|
-
field.
|
78
|
+
expect(field).to be_pre_processed
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
@@ -90,7 +90,7 @@ describe Mongoid::Fields::Standard do
|
|
90
90
|
end
|
91
91
|
|
92
92
|
it "returns false" do
|
93
|
-
field.
|
93
|
+
expect(field).to_not be_pre_processed
|
94
94
|
end
|
95
95
|
end
|
96
96
|
end
|
@@ -102,7 +102,7 @@ describe Mongoid::Fields::Standard do
|
|
102
102
|
end
|
103
103
|
|
104
104
|
it "does not conflict with the ruby core hash" do
|
105
|
-
image.hash_is_hash.
|
105
|
+
expect(image.hash_is_hash).to be true
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
@@ -119,14 +119,14 @@ describe Mongoid::Fields::Standard do
|
|
119
119
|
end
|
120
120
|
|
121
121
|
it "allows normal hash access" do
|
122
|
-
hash[:key].
|
122
|
+
expect(hash[:key]).to eq("value")
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
126
|
context "when getting a non existant value" do
|
127
127
|
|
128
128
|
it "returns nil" do
|
129
|
-
hash[:key].
|
129
|
+
expect(hash[:key]).to be_nil
|
130
130
|
end
|
131
131
|
end
|
132
132
|
end
|
@@ -138,11 +138,11 @@ describe Mongoid::Fields::Standard do
|
|
138
138
|
end
|
139
139
|
|
140
140
|
it "inherits the parents deserialize method" do
|
141
|
-
Thumbnail.demongoize("testy").name.
|
141
|
+
expect(Thumbnail.demongoize("testy").name).to eq("testy")
|
142
142
|
end
|
143
143
|
|
144
144
|
it "inherits the parents serialize method" do
|
145
|
-
thumbnail.mongoize.
|
145
|
+
expect(thumbnail.mongoize).to eq("test")
|
146
146
|
end
|
147
147
|
|
148
148
|
context "when instantiating the class" do
|
@@ -155,11 +155,11 @@ describe Mongoid::Fields::Standard do
|
|
155
155
|
end
|
156
156
|
|
157
157
|
it "deserializes the parent type" do
|
158
|
-
movie.poster.name.
|
158
|
+
expect(movie.poster.name).to eq("poster")
|
159
159
|
end
|
160
160
|
|
161
161
|
it "deserializes the child type" do
|
162
|
-
movie.poster_thumb.name.
|
162
|
+
expect(movie.poster_thumb.name).to eq("thumb")
|
163
163
|
end
|
164
164
|
end
|
165
165
|
end
|
data/spec/mongoid/fields_spec.rb
CHANGED
@@ -31,10 +31,14 @@ describe Mongoid::Fields do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it "returns all the translations" do
|
34
|
-
translations.
|
34
|
+
expect(translations).to eq(
|
35
35
|
{ "en" => "test", "de" => "The best" }
|
36
36
|
)
|
37
37
|
end
|
38
|
+
|
39
|
+
it "returns translations as a HashWithIndifferentAccess" do
|
40
|
+
expect(translations[:en]).to eq("test")
|
41
|
+
end
|
38
42
|
end
|
39
43
|
|
40
44
|
context "when translations do not exist" do
|
@@ -42,25 +46,33 @@ describe Mongoid::Fields do
|
|
42
46
|
context "when no default is provided" do
|
43
47
|
|
44
48
|
it "returns an empty hash" do
|
45
|
-
product.description_translations.
|
49
|
+
expect(product.description_translations).to be_empty
|
46
50
|
end
|
47
51
|
end
|
48
52
|
|
49
53
|
context "when a default is provided" do
|
50
54
|
|
51
55
|
it "returns the translations with the default" do
|
52
|
-
product.name_translations.
|
56
|
+
expect(product.name_translations).to eq(
|
53
57
|
{ "en" => "no translation" }
|
54
58
|
)
|
55
59
|
end
|
56
60
|
end
|
57
61
|
end
|
62
|
+
|
63
|
+
it "should have alias method #\{field}_t" do
|
64
|
+
expect(product.method(:name_t)).to eq product.method(:name_translations)
|
65
|
+
end
|
58
66
|
end
|
59
67
|
|
60
68
|
context "when the field is not localized" do
|
61
69
|
|
62
70
|
it "does not respond to the method" do
|
63
|
-
product.
|
71
|
+
expect(product).to_not respond_to(:price_translations)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "does not respond to the alias method" do
|
75
|
+
expect(product).to_not respond_to(:price_t)
|
64
76
|
end
|
65
77
|
end
|
66
78
|
end
|
@@ -88,7 +100,7 @@ describe Mongoid::Fields do
|
|
88
100
|
end
|
89
101
|
|
90
102
|
it "sets the raw values of the translations" do
|
91
|
-
product.description_translations.
|
103
|
+
expect(product.description_translations).to eq(translations)
|
92
104
|
end
|
93
105
|
|
94
106
|
context "when saving the new translations" do
|
@@ -98,7 +110,7 @@ describe Mongoid::Fields do
|
|
98
110
|
end
|
99
111
|
|
100
112
|
it "persists the changes" do
|
101
|
-
product.reload.description_translations.
|
113
|
+
expect(product.reload.description_translations).to eq(translations)
|
102
114
|
end
|
103
115
|
|
104
116
|
context "when updating the translations" do
|
@@ -109,7 +121,7 @@ describe Mongoid::Fields do
|
|
109
121
|
end
|
110
122
|
|
111
123
|
it "persists the changes" do
|
112
|
-
product.reload.description_translations.
|
124
|
+
expect(product.reload.description_translations).to eq(
|
113
125
|
{ "en" => "overwritten" }
|
114
126
|
)
|
115
127
|
end
|
@@ -128,7 +140,7 @@ describe Mongoid::Fields do
|
|
128
140
|
end
|
129
141
|
|
130
142
|
it "sets the mongoized values of the translations" do
|
131
|
-
dictionary.description_translations.
|
143
|
+
expect(dictionary.description_translations).to eq(
|
132
144
|
{ "en" => "1", "de" => "2" }
|
133
145
|
)
|
134
146
|
end
|
@@ -140,7 +152,7 @@ describe Mongoid::Fields do
|
|
140
152
|
end
|
141
153
|
|
142
154
|
it "persists the changes" do
|
143
|
-
dictionary.reload.description_translations.
|
155
|
+
expect(dictionary.reload.description_translations).to eq(
|
144
156
|
{ "en" => "1", "de" => "2" }
|
145
157
|
)
|
146
158
|
end
|
@@ -153,19 +165,27 @@ describe Mongoid::Fields do
|
|
153
165
|
end
|
154
166
|
|
155
167
|
it "persists the changes" do
|
156
|
-
dictionary.reload.description_translations.
|
168
|
+
expect(dictionary.reload.description_translations).to eq(
|
157
169
|
{ "en" => "overwritten" }
|
158
170
|
)
|
159
171
|
end
|
160
172
|
end
|
161
173
|
end
|
162
174
|
end
|
175
|
+
|
176
|
+
it "should have alias method #\{field}_t=" do
|
177
|
+
expect(product.method(:name_t=)).to eq product.method(:name_translations=)
|
178
|
+
end
|
163
179
|
end
|
164
180
|
|
165
181
|
context "when the field is not localized" do
|
166
182
|
|
167
183
|
it "does not respond to the method" do
|
168
|
-
product.
|
184
|
+
expect(product).to_not respond_to(:price_translations=)
|
185
|
+
end
|
186
|
+
|
187
|
+
it "does not respond to the alias method" do
|
188
|
+
expect(product).to_not respond_to(:price_t=)
|
169
189
|
end
|
170
190
|
end
|
171
191
|
end
|
@@ -179,7 +199,7 @@ describe Mongoid::Fields do
|
|
179
199
|
context "when the document is subclassed" do
|
180
200
|
|
181
201
|
it "does not include the child aliases" do
|
182
|
-
person.aliased_fields.keys.
|
202
|
+
expect(person.aliased_fields.keys).to_not include("spec")
|
183
203
|
end
|
184
204
|
end
|
185
205
|
end
|
@@ -193,19 +213,19 @@ describe Mongoid::Fields do
|
|
193
213
|
end
|
194
214
|
|
195
215
|
it "includes the _id field" do
|
196
|
-
shape.attribute_names.
|
216
|
+
expect(shape.attribute_names).to include("_id")
|
197
217
|
end
|
198
218
|
|
199
219
|
it "includes the _type field" do
|
200
|
-
shape.attribute_names.
|
220
|
+
expect(shape.attribute_names).to include("_type")
|
201
221
|
end
|
202
222
|
|
203
223
|
it "includes its own fields" do
|
204
|
-
shape.attribute_names.
|
224
|
+
expect(shape.attribute_names).to include("x")
|
205
225
|
end
|
206
226
|
|
207
227
|
it "does not return subclass fields" do
|
208
|
-
shape.attribute_names.
|
228
|
+
expect(shape.attribute_names).to_not include("radius")
|
209
229
|
end
|
210
230
|
end
|
211
231
|
|
@@ -216,23 +236,23 @@ describe Mongoid::Fields do
|
|
216
236
|
end
|
217
237
|
|
218
238
|
it "includes the _id field" do
|
219
|
-
circle.attribute_names.
|
239
|
+
expect(circle.attribute_names).to include("_id")
|
220
240
|
end
|
221
241
|
|
222
242
|
it "includes the _type field" do
|
223
|
-
circle.attribute_names.
|
243
|
+
expect(circle.attribute_names).to include("_type")
|
224
244
|
end
|
225
245
|
|
226
246
|
it "includes the first parent field" do
|
227
|
-
circle.attribute_names.
|
247
|
+
expect(circle.attribute_names).to include("x")
|
228
248
|
end
|
229
249
|
|
230
250
|
it "includes the second parent field" do
|
231
|
-
circle.attribute_names.
|
251
|
+
expect(circle.attribute_names).to include("y")
|
232
252
|
end
|
233
253
|
|
234
254
|
it "includes the child fields" do
|
235
|
-
circle.attribute_names.
|
255
|
+
expect(circle.attribute_names).to include("radius")
|
236
256
|
end
|
237
257
|
end
|
238
258
|
end
|
@@ -242,42 +262,42 @@ describe Mongoid::Fields do
|
|
242
262
|
context "when the class is a parent" do
|
243
263
|
|
244
264
|
it "includes the _id field" do
|
245
|
-
Shape.attribute_names.
|
265
|
+
expect(Shape.attribute_names).to include("_id")
|
246
266
|
end
|
247
267
|
|
248
268
|
it "includes the _type field" do
|
249
|
-
Shape.attribute_names.
|
269
|
+
expect(Shape.attribute_names).to include("_type")
|
250
270
|
end
|
251
271
|
|
252
272
|
it "includes its own fields" do
|
253
|
-
Shape.attribute_names.
|
273
|
+
expect(Shape.attribute_names).to include("x")
|
254
274
|
end
|
255
275
|
|
256
276
|
it "does not return subclass fields" do
|
257
|
-
Shape.attribute_names.
|
277
|
+
expect(Shape.attribute_names).to_not include("radius")
|
258
278
|
end
|
259
279
|
end
|
260
280
|
|
261
281
|
context "when the class is a subclass" do
|
262
282
|
|
263
283
|
it "includes the _id field" do
|
264
|
-
Circle.attribute_names.
|
284
|
+
expect(Circle.attribute_names).to include("_id")
|
265
285
|
end
|
266
286
|
|
267
287
|
it "includes the _type field" do
|
268
|
-
Circle.attribute_names.
|
288
|
+
expect(Circle.attribute_names).to include("_type")
|
269
289
|
end
|
270
290
|
|
271
291
|
it "includes the first parent field" do
|
272
|
-
Circle.attribute_names.
|
292
|
+
expect(Circle.attribute_names).to include("x")
|
273
293
|
end
|
274
294
|
|
275
295
|
it "includes the second parent field" do
|
276
|
-
Circle.attribute_names.
|
296
|
+
expect(Circle.attribute_names).to include("y")
|
277
297
|
end
|
278
298
|
|
279
299
|
it "includes the child fields" do
|
280
|
-
Circle.attribute_names.
|
300
|
+
expect(Circle.attribute_names).to include("radius")
|
281
301
|
end
|
282
302
|
end
|
283
303
|
end
|
@@ -289,6 +309,92 @@ describe Mongoid::Fields do
|
|
289
309
|
end
|
290
310
|
end
|
291
311
|
|
312
|
+
context "when providing a root Boolean type" do
|
313
|
+
|
314
|
+
let(:klass) do
|
315
|
+
Class.new do
|
316
|
+
include Mongoid::Document
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
it "converts to Mongoid::Boolean" do
|
321
|
+
expect(klass.field(:test, type: Boolean).type).to be(Mongoid::Boolean)
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
context "when using symbol types" do
|
326
|
+
|
327
|
+
let(:klass) do
|
328
|
+
Class.new do
|
329
|
+
include Mongoid::Document
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
it "converts :array to Array" do
|
334
|
+
expect(klass.field(:test, type: :array).type).to be(Array)
|
335
|
+
end
|
336
|
+
|
337
|
+
it "converts :big_decimal to BigDecimal" do
|
338
|
+
expect(klass.field(:test, type: :big_decimal).type).to be(BigDecimal)
|
339
|
+
end
|
340
|
+
|
341
|
+
it "converts :binary to BSON::Binary" do
|
342
|
+
expect(klass.field(:test, type: :binary).type).to be(BSON::Binary)
|
343
|
+
end
|
344
|
+
|
345
|
+
it "converts :boolean to Mongoid::Boolean" do
|
346
|
+
expect(klass.field(:test, type: :boolean).type).to be(Mongoid::Boolean)
|
347
|
+
end
|
348
|
+
|
349
|
+
it "converts :date to Date" do
|
350
|
+
expect(klass.field(:test, type: :date).type).to be(Date)
|
351
|
+
end
|
352
|
+
|
353
|
+
it "converts :date_time to DateTime" do
|
354
|
+
expect(klass.field(:test, type: :date_time).type).to be(DateTime)
|
355
|
+
end
|
356
|
+
|
357
|
+
it "converts :float to Float" do
|
358
|
+
expect(klass.field(:test, type: :float).type).to be(Float)
|
359
|
+
end
|
360
|
+
|
361
|
+
it "converts :hash to Hash" do
|
362
|
+
expect(klass.field(:test, type: :hash).type).to be(Hash)
|
363
|
+
end
|
364
|
+
|
365
|
+
it "converts :integer to Integer" do
|
366
|
+
expect(klass.field(:test, type: :integer).type).to be(Integer)
|
367
|
+
end
|
368
|
+
|
369
|
+
it "converts :object_id to BSON::ObjectId" do
|
370
|
+
expect(klass.field(:test, type: :object_id).type).to be(BSON::ObjectId)
|
371
|
+
end
|
372
|
+
|
373
|
+
it "converts :range to Range" do
|
374
|
+
expect(klass.field(:test, type: :range).type).to be(Range)
|
375
|
+
end
|
376
|
+
|
377
|
+
it "converts :regexp to Rexegp" do
|
378
|
+
expect(klass.field(:test, type: :regexp).type).to be(Regexp)
|
379
|
+
end
|
380
|
+
|
381
|
+
it "converts :set to Set" do
|
382
|
+
expect(klass.field(:test, type: :set).type).to be(Set)
|
383
|
+
end
|
384
|
+
|
385
|
+
it "converts :string to String" do
|
386
|
+
expect(klass.field(:test, type: :string).type).to be(String)
|
387
|
+
end
|
388
|
+
|
389
|
+
it "converts :symbol to Symbol" do
|
390
|
+
expect(klass.field(:test, type: :symbol).type).to be(Symbol)
|
391
|
+
end
|
392
|
+
|
393
|
+
it "converts :time to Time" do
|
394
|
+
expect(klass.field(:test, type: :time).type).to be(Time)
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
292
398
|
context "when the options are valid" do
|
293
399
|
|
294
400
|
context "when the options are all standard" do
|
@@ -302,7 +408,7 @@ describe Mongoid::Fields do
|
|
302
408
|
end
|
303
409
|
|
304
410
|
it "adds the field to the model" do
|
305
|
-
Band.fields["acceptable"].
|
411
|
+
expect(Band.fields["acceptable"]).to_not be_nil
|
306
412
|
end
|
307
413
|
end
|
308
414
|
|
@@ -313,7 +419,7 @@ describe Mongoid::Fields do
|
|
313
419
|
end
|
314
420
|
|
315
421
|
it "adds the field to the model" do
|
316
|
-
Band.fields["acceptable"].
|
422
|
+
expect(Band.fields["acceptable"]).to_not be_nil
|
317
423
|
end
|
318
424
|
end
|
319
425
|
end
|
@@ -333,7 +439,7 @@ describe Mongoid::Fields do
|
|
333
439
|
context "when the field is binary" do
|
334
440
|
|
335
441
|
let(:binary) do
|
336
|
-
|
442
|
+
BSON::Binary.new("testing", :md5)
|
337
443
|
end
|
338
444
|
|
339
445
|
let(:registry) do
|
@@ -341,7 +447,7 @@ describe Mongoid::Fields do
|
|
341
447
|
end
|
342
448
|
|
343
449
|
it "returns the binary data intact" do
|
344
|
-
registry.data.
|
450
|
+
expect(registry.data).to eq(binary)
|
345
451
|
end
|
346
452
|
end
|
347
453
|
|
@@ -362,7 +468,7 @@ describe Mongoid::Fields do
|
|
362
468
|
end
|
363
469
|
|
364
470
|
it "returns the default locale value" do
|
365
|
-
description.
|
471
|
+
expect(description).to eq("The best")
|
366
472
|
end
|
367
473
|
end
|
368
474
|
|
@@ -382,7 +488,7 @@ describe Mongoid::Fields do
|
|
382
488
|
end
|
383
489
|
|
384
490
|
it "returns the set locale value" do
|
385
|
-
description.
|
491
|
+
expect(description).to eq("The best")
|
386
492
|
end
|
387
493
|
end
|
388
494
|
|
@@ -403,7 +509,7 @@ describe Mongoid::Fields do
|
|
403
509
|
end
|
404
510
|
|
405
511
|
it "returns the current locale value" do
|
406
|
-
description.
|
512
|
+
expect(description).to eq("Cheaper drinks")
|
407
513
|
end
|
408
514
|
end
|
409
515
|
end
|
@@ -417,7 +523,7 @@ describe Mongoid::Fields do
|
|
417
523
|
context "when the attribute has not been assigned" do
|
418
524
|
|
419
525
|
it "delgates to the getter" do
|
420
|
-
person.age_before_type_cast.
|
526
|
+
expect(person.age_before_type_cast).to eq(person.age)
|
421
527
|
end
|
422
528
|
end
|
423
529
|
|
@@ -425,7 +531,7 @@ describe Mongoid::Fields do
|
|
425
531
|
|
426
532
|
it "returns the attribute before type cast" do
|
427
533
|
person.age = "old"
|
428
|
-
person.age_before_type_cast.
|
534
|
+
expect(person.age_before_type_cast).to eq("old")
|
429
535
|
end
|
430
536
|
end
|
431
537
|
end
|
@@ -436,10 +542,24 @@ describe Mongoid::Fields do
|
|
436
542
|
Product.new
|
437
543
|
end
|
438
544
|
|
545
|
+
context "when setting via the setter" do
|
546
|
+
|
547
|
+
it "returns the set value" do
|
548
|
+
expect(product.price = 10).to eq(10)
|
549
|
+
end
|
550
|
+
end
|
551
|
+
|
552
|
+
context "when setting via send" do
|
553
|
+
|
554
|
+
it "returns the set value" do
|
555
|
+
expect(product.send(:price=, 10)).to eq(10)
|
556
|
+
end
|
557
|
+
end
|
558
|
+
|
439
559
|
context "when the field is binary" do
|
440
560
|
|
441
561
|
let(:binary) do
|
442
|
-
|
562
|
+
BSON::Binary.new("testing", :md5)
|
443
563
|
end
|
444
564
|
|
445
565
|
let(:registry) do
|
@@ -451,7 +571,7 @@ describe Mongoid::Fields do
|
|
451
571
|
end
|
452
572
|
|
453
573
|
it "returns the binary data intact" do
|
454
|
-
registry.data.
|
574
|
+
expect(registry.data).to eq(binary)
|
455
575
|
end
|
456
576
|
end
|
457
577
|
|
@@ -470,7 +590,7 @@ describe Mongoid::Fields do
|
|
470
590
|
end
|
471
591
|
|
472
592
|
it "allows the set" do
|
473
|
-
product.stores.
|
593
|
+
expect(product.stores).to be_nil
|
474
594
|
end
|
475
595
|
end
|
476
596
|
|
@@ -482,11 +602,11 @@ describe Mongoid::Fields do
|
|
482
602
|
end
|
483
603
|
|
484
604
|
it "allows the set of nil values" do
|
485
|
-
product.stores.
|
605
|
+
expect(product.stores).to eq([ "kadewe", nil ])
|
486
606
|
end
|
487
607
|
|
488
608
|
it "persists the nil values" do
|
489
|
-
product.reload.stores.
|
609
|
+
expect(product.reload.stores).to eq([ "kadewe", nil ])
|
490
610
|
end
|
491
611
|
end
|
492
612
|
|
@@ -498,11 +618,11 @@ describe Mongoid::Fields do
|
|
498
618
|
end
|
499
619
|
|
500
620
|
it "reverses the values" do
|
501
|
-
product.stores.
|
621
|
+
expect(product.stores).to eq([ "karstadt", "kadewe" ])
|
502
622
|
end
|
503
623
|
|
504
624
|
it "persists the changes" do
|
505
|
-
product.reload.stores.
|
625
|
+
expect(product.reload.stores).to eq([ "karstadt", "kadewe" ])
|
506
626
|
end
|
507
627
|
end
|
508
628
|
end
|
@@ -520,7 +640,7 @@ describe Mongoid::Fields do
|
|
520
640
|
end
|
521
641
|
|
522
642
|
it "sets the value in the default locale" do
|
523
|
-
description.
|
643
|
+
expect(description).to eq({ "en" => "Cheap drinks" })
|
524
644
|
end
|
525
645
|
end
|
526
646
|
|
@@ -540,7 +660,7 @@ describe Mongoid::Fields do
|
|
540
660
|
end
|
541
661
|
|
542
662
|
it "sets the value in the default locale" do
|
543
|
-
description.
|
663
|
+
expect(description).to eq({ "de" => "Cheaper drinks" })
|
544
664
|
end
|
545
665
|
end
|
546
666
|
|
@@ -561,7 +681,7 @@ describe Mongoid::Fields do
|
|
561
681
|
end
|
562
682
|
|
563
683
|
it "sets the value in both locales" do
|
564
|
-
description.
|
684
|
+
expect(description).to eq(
|
565
685
|
{ "de" => "Cheaper drinks", "en" => "Cheap drinks" }
|
566
686
|
)
|
567
687
|
end
|
@@ -584,7 +704,7 @@ describe Mongoid::Fields do
|
|
584
704
|
context "when provided a default array" do
|
585
705
|
|
586
706
|
before do
|
587
|
-
Person.field(:array_testing, type: Array, default: [])
|
707
|
+
Person.field(:array_testing, type: Array, default: [], overwrite: true)
|
588
708
|
end
|
589
709
|
|
590
710
|
after do
|
@@ -593,7 +713,7 @@ describe Mongoid::Fields do
|
|
593
713
|
end
|
594
714
|
|
595
715
|
it "returns an equal object of a different instance" do
|
596
|
-
person_one.array_testing.object_id.
|
716
|
+
expect(person_one.array_testing.object_id).to_not eq(
|
597
717
|
person_two.array_testing.object_id
|
598
718
|
)
|
599
719
|
end
|
@@ -602,7 +722,7 @@ describe Mongoid::Fields do
|
|
602
722
|
context "when provided a default hash" do
|
603
723
|
|
604
724
|
before do
|
605
|
-
Person.field(:hash_testing, type: Hash, default: {})
|
725
|
+
Person.field(:hash_testing, type: Hash, default: {}, overwrite: true)
|
606
726
|
end
|
607
727
|
|
608
728
|
after do
|
@@ -610,7 +730,7 @@ describe Mongoid::Fields do
|
|
610
730
|
end
|
611
731
|
|
612
732
|
it "returns an equal object of a different instance" do
|
613
|
-
person_one.hash_testing.object_id.
|
733
|
+
expect(person_one.hash_testing.object_id).to_not eq(
|
614
734
|
person_two.hash_testing.object_id
|
615
735
|
)
|
616
736
|
end
|
@@ -624,7 +744,8 @@ describe Mongoid::Fields do
|
|
624
744
|
Person.field(
|
625
745
|
:generated_testing,
|
626
746
|
type: Float,
|
627
|
-
default: ->{ Time.now.to_f }
|
747
|
+
default: ->{ Time.now.to_f },
|
748
|
+
overwrite: true
|
628
749
|
)
|
629
750
|
end
|
630
751
|
|
@@ -634,7 +755,7 @@ describe Mongoid::Fields do
|
|
634
755
|
end
|
635
756
|
|
636
757
|
it "returns an equal object of a different instance" do
|
637
|
-
person_one.generated_testing.object_id.
|
758
|
+
expect(person_one.generated_testing.object_id).to_not eq(
|
638
759
|
person_two.generated_testing.object_id
|
639
760
|
)
|
640
761
|
end
|
@@ -646,7 +767,8 @@ describe Mongoid::Fields do
|
|
646
767
|
Person.field(
|
647
768
|
:rank,
|
648
769
|
type: Integer,
|
649
|
-
default: ->{ title? ? 1 : 2 }
|
770
|
+
default: ->{ title? ? 1 : 2 },
|
771
|
+
overwrite: true
|
650
772
|
)
|
651
773
|
end
|
652
774
|
|
@@ -656,7 +778,7 @@ describe Mongoid::Fields do
|
|
656
778
|
end
|
657
779
|
|
658
780
|
it "yields the document to the proc" do
|
659
|
-
Person.new.rank.
|
781
|
+
expect(Person.new.rank).to eq(2)
|
660
782
|
end
|
661
783
|
end
|
662
784
|
end
|
@@ -669,7 +791,7 @@ describe Mongoid::Fields do
|
|
669
791
|
end
|
670
792
|
|
671
793
|
it "does not return subclass defaults" do
|
672
|
-
shape.pre_processed_defaults.
|
794
|
+
expect(shape.pre_processed_defaults).to eq([ "_id", "x", "y", "_type" ])
|
673
795
|
end
|
674
796
|
end
|
675
797
|
|
@@ -680,7 +802,7 @@ describe Mongoid::Fields do
|
|
680
802
|
end
|
681
803
|
|
682
804
|
it "has the parent and child defaults" do
|
683
|
-
circle.pre_processed_defaults.
|
805
|
+
expect(circle.pre_processed_defaults).to eq([ "_id", "x", "y", "_type", "radius" ])
|
684
806
|
end
|
685
807
|
end
|
686
808
|
end
|
@@ -688,21 +810,46 @@ describe Mongoid::Fields do
|
|
688
810
|
describe ".field" do
|
689
811
|
|
690
812
|
it "returns the generated field" do
|
691
|
-
Person.field(:testing).
|
813
|
+
expect(Person.field(:testing)).to eq(Person.fields["testing"])
|
692
814
|
end
|
693
815
|
|
694
816
|
context "when the field name conflicts with mongoid's internals" do
|
695
817
|
|
696
|
-
|
818
|
+
[:__metadata, :invalid].each do |meth|
|
819
|
+
context "when the field is named #{meth}" do
|
697
820
|
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
821
|
+
it "raises an error" do
|
822
|
+
expect {
|
823
|
+
Person.field(meth)
|
824
|
+
}.to raise_error(Mongoid::Errors::InvalidField)
|
825
|
+
end
|
702
826
|
end
|
703
827
|
end
|
704
828
|
end
|
705
829
|
|
830
|
+
context "when field already exist and validate_duplicate is enable" do
|
831
|
+
|
832
|
+
before do
|
833
|
+
Mongoid.duplicate_fields_exception = true
|
834
|
+
end
|
835
|
+
|
836
|
+
after do
|
837
|
+
Mongoid.duplicate_fields_exception = false
|
838
|
+
end
|
839
|
+
|
840
|
+
it "raises an error" do
|
841
|
+
expect {
|
842
|
+
Person.field(:title)
|
843
|
+
}.to raise_error(Mongoid::Errors::InvalidField)
|
844
|
+
end
|
845
|
+
|
846
|
+
it "doesn't raise an error" do
|
847
|
+
expect {
|
848
|
+
Class.new(Person)
|
849
|
+
}.to_not raise_error
|
850
|
+
end
|
851
|
+
end
|
852
|
+
|
706
853
|
context "when the field is a time" do
|
707
854
|
|
708
855
|
let!(:time) do
|
@@ -724,7 +871,7 @@ describe Mongoid::Fields do
|
|
724
871
|
end
|
725
872
|
|
726
873
|
it "performs the necessary time conversions" do
|
727
|
-
person.lunch_time.to_s.
|
874
|
+
expect(person.lunch_time.to_s).to eq(time.getlocal.to_s)
|
728
875
|
end
|
729
876
|
end
|
730
877
|
end
|
@@ -732,7 +879,7 @@ describe Mongoid::Fields do
|
|
732
879
|
context "when providing no options" do
|
733
880
|
|
734
881
|
before do
|
735
|
-
Person.field(:testing)
|
882
|
+
Person.field(:testing, overwrite: true)
|
736
883
|
end
|
737
884
|
|
738
885
|
let(:person) do
|
@@ -740,15 +887,15 @@ describe Mongoid::Fields do
|
|
740
887
|
end
|
741
888
|
|
742
889
|
it "adds a reader for the fields defined" do
|
743
|
-
person.testing.
|
890
|
+
expect(person.testing).to eq("Test")
|
744
891
|
end
|
745
892
|
|
746
893
|
it "adds a writer for the fields defined" do
|
747
|
-
(person.testing = "Testy").
|
894
|
+
(person.testing = expect("Testy")).to eq("Testy")
|
748
895
|
end
|
749
896
|
|
750
897
|
it "adds an existance method" do
|
751
|
-
Person.new.testing
|
898
|
+
expect(Person.new.testing?).to be false
|
752
899
|
end
|
753
900
|
|
754
901
|
context "when overwriting an existing field" do
|
@@ -765,7 +912,7 @@ describe Mongoid::Fields do
|
|
765
912
|
end
|
766
913
|
|
767
914
|
it "properly overwrites the method" do
|
768
|
-
person.testing_override_called.
|
915
|
+
expect(person.testing_override_called).to be true
|
769
916
|
end
|
770
917
|
end
|
771
918
|
end
|
@@ -777,7 +924,7 @@ describe Mongoid::Fields do
|
|
777
924
|
end
|
778
925
|
|
779
926
|
it "returns the given value" do
|
780
|
-
bob.reading.
|
927
|
+
expect(bob.reading).to eq(10.023)
|
781
928
|
end
|
782
929
|
end
|
783
930
|
|
@@ -788,7 +935,7 @@ describe Mongoid::Fields do
|
|
788
935
|
end
|
789
936
|
|
790
937
|
it "adds an accessor method with a question mark" do
|
791
|
-
person.terms
|
938
|
+
expect(person.terms?).to be true
|
792
939
|
end
|
793
940
|
end
|
794
941
|
|
@@ -799,39 +946,39 @@ describe Mongoid::Fields do
|
|
799
946
|
end
|
800
947
|
|
801
948
|
before do
|
802
|
-
Person.field :aliased, as: :alias, type: Boolean
|
949
|
+
Person.field :aliased, as: :alias, type: Boolean, overwrite: true
|
803
950
|
end
|
804
951
|
|
805
952
|
it "uses the alias to write the attribute" do
|
806
|
-
(person.alias = true).
|
953
|
+
(person.alias = expect(true)).to be true
|
807
954
|
end
|
808
955
|
|
809
956
|
it "uses the alias to read the attribute" do
|
810
|
-
person.alias.
|
957
|
+
expect(person.alias).to be true
|
811
958
|
end
|
812
959
|
|
813
960
|
it "uses the alias for the query method" do
|
814
|
-
person.
|
961
|
+
expect(person).to be_alias
|
815
962
|
end
|
816
963
|
|
817
964
|
it "uses the name to write the attribute" do
|
818
|
-
(person.aliased = true).
|
965
|
+
(person.aliased = expect(true)).to be true
|
819
966
|
end
|
820
967
|
|
821
968
|
it "uses the name to read the attribute" do
|
822
|
-
person.aliased.
|
969
|
+
expect(person.aliased).to be true
|
823
970
|
end
|
824
971
|
|
825
972
|
it "uses the name for the query method" do
|
826
|
-
person.
|
973
|
+
expect(person).to be_aliased
|
827
974
|
end
|
828
975
|
|
829
976
|
it "creates dirty methods for the name" do
|
830
|
-
person.
|
977
|
+
expect(person).to respond_to(:aliased_changed?)
|
831
978
|
end
|
832
979
|
|
833
980
|
it "creates dirty methods for the alias" do
|
834
|
-
person.
|
981
|
+
expect(person).to respond_to(:alias_changed?)
|
835
982
|
end
|
836
983
|
|
837
984
|
context "when changing the name" do
|
@@ -841,11 +988,11 @@ describe Mongoid::Fields do
|
|
841
988
|
end
|
842
989
|
|
843
990
|
it "sets name_changed?" do
|
844
|
-
person.aliased_changed
|
991
|
+
expect(person.aliased_changed?).to be true
|
845
992
|
end
|
846
993
|
|
847
994
|
it "sets alias_changed?" do
|
848
|
-
person.alias_changed
|
995
|
+
expect(person.alias_changed?).to be true
|
849
996
|
end
|
850
997
|
end
|
851
998
|
|
@@ -856,11 +1003,11 @@ describe Mongoid::Fields do
|
|
856
1003
|
end
|
857
1004
|
|
858
1005
|
it "sets name_changed?" do
|
859
|
-
person.aliased_changed
|
1006
|
+
expect(person.aliased_changed?).to be true
|
860
1007
|
end
|
861
1008
|
|
862
1009
|
it "sets alias_changed?" do
|
863
|
-
person.alias_changed
|
1010
|
+
expect(person.alias_changed?).to be true
|
864
1011
|
end
|
865
1012
|
end
|
866
1013
|
|
@@ -871,7 +1018,7 @@ describe Mongoid::Fields do
|
|
871
1018
|
end
|
872
1019
|
|
873
1020
|
it "properly serializes the aliased field" do
|
874
|
-
criteria.selector.
|
1021
|
+
expect(criteria.selector).to eq({ "aliased" => true })
|
875
1022
|
end
|
876
1023
|
end
|
877
1024
|
end
|
@@ -889,44 +1036,24 @@ describe Mongoid::Fields do
|
|
889
1036
|
context "when option is provided" do
|
890
1037
|
|
891
1038
|
it "calls the handler with the model" do
|
892
|
-
|
893
|
-
|
894
|
-
end
|
895
|
-
|
896
|
-
User.field :custom, option: true
|
897
|
-
end
|
898
|
-
|
899
|
-
it "calls the handler with the field" do
|
900
|
-
handler.should_receive(:call).with do |_,field,_|
|
901
|
-
field.should eql User.fields["custom"]
|
902
|
-
end
|
903
|
-
|
904
|
-
User.field :custom, option: true
|
905
|
-
end
|
906
|
-
|
907
|
-
it "calls the handler with the option value" do
|
908
|
-
handler.should_receive(:call).with do |_,_,value|
|
909
|
-
value.should eql true
|
910
|
-
end
|
911
|
-
|
912
|
-
User.field :custom, option: true
|
1039
|
+
User.field :custom, option: true, overwrite: true
|
1040
|
+
expect(User.fields["custom"].options[:option]).to be_truthy
|
913
1041
|
end
|
914
1042
|
end
|
915
1043
|
|
916
1044
|
context "when option is nil" do
|
917
1045
|
|
918
1046
|
it "calls the handler" do
|
919
|
-
handler.
|
920
|
-
User.field :custom, option: nil
|
1047
|
+
expect(handler).to receive(:call)
|
1048
|
+
User.field :custom, option: nil, overwrite: true
|
921
1049
|
end
|
922
1050
|
end
|
923
1051
|
|
924
1052
|
context "when option is not provided" do
|
925
1053
|
|
926
1054
|
it "does not call the handler" do
|
927
|
-
handler.
|
928
|
-
|
929
|
-
User.field :custom
|
1055
|
+
expect(handler).to receive(:call).never
|
1056
|
+
User.field :custom, overwrite: true
|
930
1057
|
end
|
931
1058
|
end
|
932
1059
|
end
|
@@ -941,11 +1068,11 @@ describe Mongoid::Fields do
|
|
941
1068
|
end
|
942
1069
|
|
943
1070
|
it "includes its own fields" do
|
944
|
-
shape.fields.keys.
|
1071
|
+
expect(shape.fields.keys).to include("x")
|
945
1072
|
end
|
946
1073
|
|
947
1074
|
it "does not return subclass fields" do
|
948
|
-
shape.fields.keys.
|
1075
|
+
expect(shape.fields.keys).to_not include("radius")
|
949
1076
|
end
|
950
1077
|
end
|
951
1078
|
|
@@ -956,15 +1083,15 @@ describe Mongoid::Fields do
|
|
956
1083
|
end
|
957
1084
|
|
958
1085
|
it "includes the first parent field" do
|
959
|
-
circle.fields.keys.
|
1086
|
+
expect(circle.fields.keys).to include("x")
|
960
1087
|
end
|
961
1088
|
|
962
1089
|
it "includes the second parent field" do
|
963
|
-
circle.fields.keys.
|
1090
|
+
expect(circle.fields.keys).to include("y")
|
964
1091
|
end
|
965
1092
|
|
966
1093
|
it "includes the child fields" do
|
967
|
-
circle.fields.keys.
|
1094
|
+
expect(circle.fields.keys).to include("radius")
|
968
1095
|
end
|
969
1096
|
end
|
970
1097
|
end
|
@@ -972,7 +1099,7 @@ describe Mongoid::Fields do
|
|
972
1099
|
describe ".replace_field" do
|
973
1100
|
|
974
1101
|
let!(:original) do
|
975
|
-
Person.field(:id_test, type:
|
1102
|
+
Person.field(:id_test, type: BSON::ObjectId, label: "id")
|
976
1103
|
end
|
977
1104
|
|
978
1105
|
let!(:altered) do
|
@@ -988,11 +1115,11 @@ describe Mongoid::Fields do
|
|
988
1115
|
end
|
989
1116
|
|
990
1117
|
it "sets the new type on the field" do
|
991
|
-
new_field.type.
|
1118
|
+
expect(new_field.type).to eq(String)
|
992
1119
|
end
|
993
1120
|
|
994
1121
|
it "keeps the options from the old field" do
|
995
|
-
new_field.options[:label].
|
1122
|
+
expect(new_field.options[:label]).to eq("id")
|
996
1123
|
end
|
997
1124
|
end
|
998
1125
|
|
@@ -1009,7 +1136,7 @@ describe Mongoid::Fields do
|
|
1009
1136
|
end
|
1010
1137
|
|
1011
1138
|
it "resets the fields" do
|
1012
|
-
fields.keys.
|
1139
|
+
expect(fields.keys).to include("user_id")
|
1013
1140
|
end
|
1014
1141
|
end
|
1015
1142
|
|
@@ -1020,7 +1147,7 @@ describe Mongoid::Fields do
|
|
1020
1147
|
end
|
1021
1148
|
|
1022
1149
|
it "resets the fields" do
|
1023
|
-
fields.keys.
|
1150
|
+
expect(fields.keys).to include("user_id")
|
1024
1151
|
end
|
1025
1152
|
end
|
1026
1153
|
end
|
@@ -1032,88 +1159,7 @@ describe Mongoid::Fields do
|
|
1032
1159
|
end
|
1033
1160
|
|
1034
1161
|
it "sets the default value pre process" do
|
1035
|
-
person.map_with_default.
|
1036
|
-
end
|
1037
|
-
end
|
1038
|
-
|
1039
|
-
context "when dealing with auto protection" do
|
1040
|
-
|
1041
|
-
context "when auto protect ids and types is true" do
|
1042
|
-
|
1043
|
-
context "when redefining as accessible" do
|
1044
|
-
|
1045
|
-
before do
|
1046
|
-
Person.attr_accessible :id, :_id, :_type
|
1047
|
-
end
|
1048
|
-
|
1049
|
-
after do
|
1050
|
-
Person.attr_protected :id, :_id, :_type
|
1051
|
-
end
|
1052
|
-
|
1053
|
-
let(:bson_id) do
|
1054
|
-
Moped::BSON::ObjectId.new
|
1055
|
-
end
|
1056
|
-
|
1057
|
-
it "allows mass assignment of id" do
|
1058
|
-
Person.new(_id: bson_id).id.should eq(bson_id)
|
1059
|
-
end
|
1060
|
-
|
1061
|
-
it "allows mass assignment of type" do
|
1062
|
-
Person.new(_type: "Something")._type.should eq("Something")
|
1063
|
-
end
|
1064
|
-
end
|
1065
|
-
|
1066
|
-
context "when redefining as protected" do
|
1067
|
-
|
1068
|
-
before do
|
1069
|
-
Person.attr_protected :id, :_id, :_type
|
1070
|
-
end
|
1071
|
-
|
1072
|
-
let(:bson_id) do
|
1073
|
-
Moped::BSON::ObjectId.new
|
1074
|
-
end
|
1075
|
-
|
1076
|
-
it "protects assignment of id" do
|
1077
|
-
Person.new(_id: bson_id).id.should_not eq(bson_id)
|
1078
|
-
end
|
1079
|
-
|
1080
|
-
it "protects assignment of type" do
|
1081
|
-
Person.new(_type: "Something")._type.should_not eq("Something")
|
1082
|
-
end
|
1083
|
-
end
|
1084
|
-
end
|
1085
|
-
|
1086
|
-
context "when auto protecting ids and types is false" do
|
1087
|
-
|
1088
|
-
before do
|
1089
|
-
Mongoid.protect_sensitive_fields = false
|
1090
|
-
end
|
1091
|
-
|
1092
|
-
after do
|
1093
|
-
Mongoid.protect_sensitive_fields = true
|
1094
|
-
end
|
1095
|
-
|
1096
|
-
let(:klass) do
|
1097
|
-
Class.new do
|
1098
|
-
include Mongoid::Document
|
1099
|
-
end
|
1100
|
-
end
|
1101
|
-
|
1102
|
-
let(:bson_id) do
|
1103
|
-
Moped::BSON::ObjectId.new
|
1104
|
-
end
|
1105
|
-
|
1106
|
-
let(:model) do
|
1107
|
-
klass.new(id: bson_id, _type: "Model")
|
1108
|
-
end
|
1109
|
-
|
1110
|
-
it "allows mass assignment of id" do
|
1111
|
-
model.id.should eq(bson_id)
|
1112
|
-
end
|
1113
|
-
|
1114
|
-
it "allows mass assignment of type" do
|
1115
|
-
model._type.should eq("Model")
|
1116
|
-
end
|
1162
|
+
expect(person.map_with_default).to eq({ "key" => "testing" })
|
1117
1163
|
end
|
1118
1164
|
end
|
1119
1165
|
|
@@ -1134,11 +1180,11 @@ describe Mongoid::Fields do
|
|
1134
1180
|
end
|
1135
1181
|
|
1136
1182
|
it "properly persists as a string" do
|
1137
|
-
band.attributes["sales"].
|
1183
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
1138
1184
|
end
|
1139
1185
|
|
1140
1186
|
it "returns the proper big decimal" do
|
1141
|
-
band.sales.
|
1187
|
+
expect(band.sales).to eq(decimal)
|
1142
1188
|
end
|
1143
1189
|
end
|
1144
1190
|
|
@@ -1149,11 +1195,11 @@ describe Mongoid::Fields do
|
|
1149
1195
|
end
|
1150
1196
|
|
1151
1197
|
it "properly persists as a string" do
|
1152
|
-
band.attributes["sales"].
|
1198
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
1153
1199
|
end
|
1154
1200
|
|
1155
1201
|
it "returns the proper big decimal" do
|
1156
|
-
band.sales.
|
1202
|
+
expect(band.sales).to eq(decimal)
|
1157
1203
|
end
|
1158
1204
|
end
|
1159
1205
|
|
@@ -1164,11 +1210,11 @@ describe Mongoid::Fields do
|
|
1164
1210
|
end
|
1165
1211
|
|
1166
1212
|
it "properly persists as a string" do
|
1167
|
-
band.attributes["sales"].
|
1213
|
+
expect(band.attributes["sales"]).to eq("1000000")
|
1168
1214
|
end
|
1169
1215
|
|
1170
1216
|
it "returns the proper big decimal" do
|
1171
|
-
band.sales.
|
1217
|
+
expect(band.sales).to eq(decimal)
|
1172
1218
|
end
|
1173
1219
|
end
|
1174
1220
|
|
@@ -1179,11 +1225,11 @@ describe Mongoid::Fields do
|
|
1179
1225
|
end
|
1180
1226
|
|
1181
1227
|
it "properly persists as a string" do
|
1182
|
-
band.attributes["sales"].
|
1228
|
+
expect(band.attributes["sales"]).to eq(decimal.to_s)
|
1183
1229
|
end
|
1184
1230
|
|
1185
1231
|
it "returns the proper big decimal" do
|
1186
|
-
band.sales.
|
1232
|
+
expect(band.sales).to eq(decimal)
|
1187
1233
|
end
|
1188
1234
|
end
|
1189
1235
|
end
|
@@ -1209,7 +1255,7 @@ describe Mongoid::Fields do
|
|
1209
1255
|
end
|
1210
1256
|
|
1211
1257
|
it "properly updates the hash" do
|
1212
|
-
person.map.
|
1258
|
+
expect(person.map).to eq(
|
1213
1259
|
{
|
1214
1260
|
"stack1" => [ 4, 3, 2, 1 ],
|
1215
1261
|
"stack2" => [ 1, 2, 3, 4 ],
|
@@ -1219,7 +1265,7 @@ describe Mongoid::Fields do
|
|
1219
1265
|
end
|
1220
1266
|
|
1221
1267
|
it "persists the changes" do
|
1222
|
-
person.reload.map.
|
1268
|
+
expect(person.reload.map).to eq(
|
1223
1269
|
{
|
1224
1270
|
"stack1" => [ 4, 3, 2, 1 ],
|
1225
1271
|
"stack2" => [ 1, 2, 3, 4 ],
|
@@ -1242,11 +1288,11 @@ describe Mongoid::Fields do
|
|
1242
1288
|
end
|
1243
1289
|
|
1244
1290
|
it "does not override the parent" do
|
1245
|
-
canvas.foo.
|
1291
|
+
expect(canvas.foo).to eq("original")
|
1246
1292
|
end
|
1247
1293
|
|
1248
1294
|
it "overrides the default" do
|
1249
|
-
test.foo.
|
1295
|
+
expect(test.foo).to eq("overridden")
|
1250
1296
|
end
|
1251
1297
|
end
|
1252
1298
|
end
|