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
@@ -30,11 +30,11 @@ describe Mongoid::Sessions::Factory do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "returns a session" do
|
33
|
-
session.
|
33
|
+
expect(session).to be_a(Moped::Session)
|
34
34
|
end
|
35
35
|
|
36
36
|
it "sets the cluster's seeds" do
|
37
|
-
cluster.seeds.
|
37
|
+
expect(cluster.seeds.first.address.resolved).to eq("127.0.0.1:27017")
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -64,15 +64,15 @@ describe Mongoid::Sessions::Factory do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
it "returns a session" do
|
67
|
-
session.
|
67
|
+
expect(session).to be_a(Moped::Session)
|
68
68
|
end
|
69
69
|
|
70
70
|
it "sets the cluster's seed ports to 27017" do
|
71
|
-
cluster.seeds.
|
71
|
+
expect(cluster.seeds.first.address.original).to eq("localhost:27017")
|
72
72
|
end
|
73
73
|
|
74
74
|
it "sets ips with no ports to 27017" do
|
75
|
-
default.cluster.seeds.
|
75
|
+
expect(default.cluster.seeds.first.address.original).to eq("127.0.0.1:27017")
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
@@ -100,30 +100,30 @@ describe Mongoid::Sessions::Factory do
|
|
100
100
|
end
|
101
101
|
|
102
102
|
it "returns a session" do
|
103
|
-
session.
|
103
|
+
expect(session).to be_a(Moped::Session)
|
104
104
|
end
|
105
105
|
|
106
106
|
it "sets the cluster's seeds" do
|
107
|
-
cluster.seeds.
|
107
|
+
expect(cluster.seeds.first.address.original).to eq("localhost:27017")
|
108
108
|
end
|
109
109
|
|
110
110
|
it "sets the database" do
|
111
|
-
session.options[:database].
|
111
|
+
expect(session.options[:database]).to eq("mongoid_test")
|
112
112
|
end
|
113
113
|
|
114
114
|
it "sets the database in the configuration" do
|
115
115
|
session
|
116
|
-
Mongoid.sessions[:secondary].
|
116
|
+
expect(Mongoid.sessions[:secondary]).to include(:database)
|
117
117
|
end
|
118
118
|
|
119
119
|
it "sets the hosts in the configuration" do
|
120
120
|
session
|
121
|
-
Mongoid.sessions[:secondary].
|
121
|
+
expect(Mongoid.sessions[:secondary]).to include(:hosts)
|
122
122
|
end
|
123
123
|
|
124
124
|
it "removes the uri from the configuration" do
|
125
125
|
session
|
126
|
-
Mongoid.sessions[:secondary].
|
126
|
+
expect(Mongoid.sessions[:secondary]).to_not include(:uri)
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
@@ -148,31 +148,35 @@ describe Mongoid::Sessions::Factory do
|
|
148
148
|
session.cluster
|
149
149
|
end
|
150
150
|
|
151
|
+
let(:seeds) do
|
152
|
+
cluster.seeds.map{ |node| node.address.original }
|
153
|
+
end
|
154
|
+
|
151
155
|
it "returns a session" do
|
152
|
-
session.
|
156
|
+
expect(session).to be_a(Moped::Session)
|
153
157
|
end
|
154
158
|
|
155
159
|
it "sets the cluster's seeds" do
|
156
|
-
|
160
|
+
expect(seeds).to eq([ "localhost:27017", "localhost:27017" ])
|
157
161
|
end
|
158
162
|
|
159
163
|
it "sets the database" do
|
160
|
-
session.options[:database].
|
164
|
+
expect(session.options[:database]).to eq("mongoid_test")
|
161
165
|
end
|
162
166
|
|
163
167
|
it "sets the database in the configuration" do
|
164
168
|
session
|
165
|
-
Mongoid.sessions[:secondary].
|
169
|
+
expect(Mongoid.sessions[:secondary]).to include(:database)
|
166
170
|
end
|
167
171
|
|
168
172
|
it "sets the hosts in the configuration" do
|
169
173
|
session
|
170
|
-
Mongoid.sessions[:secondary].
|
174
|
+
expect(Mongoid.sessions[:secondary]).to include(:hosts)
|
171
175
|
end
|
172
176
|
|
173
177
|
it "removes the uri from the configuration" do
|
174
178
|
session
|
175
|
-
Mongoid.sessions[:secondary].
|
179
|
+
expect(Mongoid.sessions[:secondary]).to_not include(:uri)
|
176
180
|
end
|
177
181
|
end
|
178
182
|
end
|
@@ -206,12 +210,16 @@ describe Mongoid::Sessions::Factory do
|
|
206
210
|
session.cluster
|
207
211
|
end
|
208
212
|
|
213
|
+
let(:seeds) do
|
214
|
+
cluster.seeds.map{ |node| node.address.original }
|
215
|
+
end
|
216
|
+
|
209
217
|
it "returns the default session" do
|
210
|
-
session.
|
218
|
+
expect(session).to be_a(Moped::Session)
|
211
219
|
end
|
212
220
|
|
213
221
|
it "sets the cluster's seeds" do
|
214
|
-
|
222
|
+
expect(seeds).to eq([ "localhost:27017" ])
|
215
223
|
end
|
216
224
|
end
|
217
225
|
|
@@ -247,12 +255,16 @@ describe Mongoid::Sessions::Factory do
|
|
247
255
|
session.cluster
|
248
256
|
end
|
249
257
|
|
258
|
+
let(:seeds) do
|
259
|
+
cluster.seeds.map{ |node| node.address.original }
|
260
|
+
end
|
261
|
+
|
250
262
|
it "returns the default session" do
|
251
|
-
session.
|
263
|
+
expect(session).to be_a(Moped::Session)
|
252
264
|
end
|
253
265
|
|
254
266
|
it "sets the cluster's seeds" do
|
255
|
-
|
267
|
+
expect(seeds).to eq([ "localhost:27017" ])
|
256
268
|
end
|
257
269
|
end
|
258
270
|
|
@@ -267,7 +279,8 @@ describe Mongoid::Sessions::Factory do
|
|
267
279
|
"down_interval" => 10,
|
268
280
|
"max_retries" => 5,
|
269
281
|
"refresh_interval" => 30,
|
270
|
-
"retry_interval" => 0.1
|
282
|
+
"retry_interval" => 0.1,
|
283
|
+
"write" => { "w" => 1 }
|
271
284
|
}
|
272
285
|
}
|
273
286
|
}
|
@@ -285,28 +298,36 @@ describe Mongoid::Sessions::Factory do
|
|
285
298
|
session.cluster
|
286
299
|
end
|
287
300
|
|
301
|
+
let(:seeds) do
|
302
|
+
cluster.seeds.map{ |node| node.address.original }
|
303
|
+
end
|
304
|
+
|
288
305
|
it "returns the default session" do
|
289
|
-
session.
|
306
|
+
expect(session).to be_a(Moped::Session)
|
290
307
|
end
|
291
308
|
|
292
309
|
it "sets the cluster's seeds" do
|
293
|
-
|
310
|
+
expect(seeds).to eq([ "localhost:27017" ])
|
294
311
|
end
|
295
312
|
|
296
313
|
it "sets the cluster down interval" do
|
297
|
-
cluster.down_interval.
|
314
|
+
expect(cluster.down_interval).to eq(10)
|
298
315
|
end
|
299
316
|
|
300
317
|
it "sets the cluster max retries" do
|
301
|
-
cluster.max_retries.
|
318
|
+
expect(cluster.max_retries).to eq(5)
|
302
319
|
end
|
303
320
|
|
304
321
|
it "sets the cluster refresh interval" do
|
305
|
-
cluster.refresh_interval.
|
322
|
+
expect(cluster.refresh_interval).to eq(30)
|
306
323
|
end
|
307
324
|
|
308
325
|
it "sets the cluster retry interval" do
|
309
|
-
cluster.retry_interval.
|
326
|
+
expect(cluster.retry_interval).to eq(0.1)
|
327
|
+
end
|
328
|
+
|
329
|
+
it "sets the write concern" do
|
330
|
+
expect(session.write_concern).to be_a(Moped::WriteConcern::Propagate)
|
310
331
|
end
|
311
332
|
end
|
312
333
|
end
|
@@ -17,7 +17,7 @@ describe Mongoid::Sessions::MongoUri do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "returns the database name" do
|
20
|
-
uri.database.
|
20
|
+
expect(uri.database).to eq("mongoid_test")
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -30,7 +30,7 @@ describe Mongoid::Sessions::MongoUri do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "returns an array with 1 node" do
|
33
|
-
uri.hosts.
|
33
|
+
expect(uri.hosts).to eq([ "localhost:27017" ])
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -41,7 +41,7 @@ describe Mongoid::Sessions::MongoUri do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it "returns an array with 2 nodes" do
|
44
|
-
uri.hosts.
|
44
|
+
expect(uri.hosts).to eq([ "localhost:27017", "localhost:27017" ])
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -53,7 +53,7 @@ describe Mongoid::Sessions::MongoUri do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "returns the password" do
|
56
|
-
uri.password.
|
56
|
+
expect(uri.password).to eq("pass")
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -66,7 +66,7 @@ describe Mongoid::Sessions::MongoUri do
|
|
66
66
|
end
|
67
67
|
|
68
68
|
it "does not include the username and password" do
|
69
|
-
uri.to_hash.
|
69
|
+
expect(uri.to_hash).to eq({
|
70
70
|
hosts: [ "localhost:27017", "localhost:27017" ],
|
71
71
|
database: "mongoid_test"
|
72
72
|
})
|
@@ -80,7 +80,7 @@ describe Mongoid::Sessions::MongoUri do
|
|
80
80
|
end
|
81
81
|
|
82
82
|
it "includes the username and password" do
|
83
|
-
uri.to_hash.
|
83
|
+
expect(uri.to_hash).to eq({
|
84
84
|
hosts: [ "localhost:27017" ],
|
85
85
|
database: "mongoid_test",
|
86
86
|
username: "user",
|
@@ -97,7 +97,7 @@ describe Mongoid::Sessions::MongoUri do
|
|
97
97
|
end
|
98
98
|
|
99
99
|
it "returns the userame" do
|
100
|
-
uri.username.
|
100
|
+
expect(uri.username).to eq("user")
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Sessions::Options do
|
4
|
+
|
5
|
+
describe "#with" do
|
6
|
+
|
7
|
+
context "when passing some options" do
|
8
|
+
|
9
|
+
let(:options) { { database: 'test' } }
|
10
|
+
|
11
|
+
let!(:klass) do
|
12
|
+
Band.with(options)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "sets the options into the class" do
|
16
|
+
expect(klass.persistence_options).to eq(options)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "sets the options into the instance" do
|
20
|
+
expect(klass.new.persistence_options).to eq(options)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "doesnt set the options on class level" do
|
24
|
+
expect(Band.new.persistence_options).to be_nil
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when calling .collection method" do
|
28
|
+
|
29
|
+
before do
|
30
|
+
klass.collection
|
31
|
+
end
|
32
|
+
|
33
|
+
it "keeps the options" do
|
34
|
+
expect(klass.persistence_options).to eq(options)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when returning a criteria" do
|
39
|
+
|
40
|
+
let(:criteria) do
|
41
|
+
klass.all
|
42
|
+
end
|
43
|
+
|
44
|
+
it "sets the options into the criteria object" do
|
45
|
+
expect(criteria.persistence_options).to eq(options)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "doesnt set the options on class level" do
|
49
|
+
expect(Band.new.persistence_options).to be_nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe ".with" do
|
56
|
+
|
57
|
+
let(:options) { { database: 'test' } }
|
58
|
+
|
59
|
+
let(:instance) do
|
60
|
+
Band.new.with(options)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "sets the options into" do
|
64
|
+
expect(instance.persistence_options).to eq(options)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "passes down the options to collection" do
|
68
|
+
session = Band.mongo_session
|
69
|
+
expect_any_instance_of(Moped::Session).to receive(:with).with(options).and_return(session)
|
70
|
+
instance.collection
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "#persistence_options" do
|
75
|
+
|
76
|
+
it "touches the thread local" do
|
77
|
+
expect(Thread.current).to receive(:[]).with("[mongoid][Band]:persistence-options").and_return({foo: :bar})
|
78
|
+
expect(Band.persistence_options).to eq({foo: :bar})
|
79
|
+
end
|
80
|
+
|
81
|
+
it "cannot force a value on thread local" do
|
82
|
+
expect {
|
83
|
+
Band.set_persistence_options(Band, {})
|
84
|
+
}.to raise_error(NoMethodError)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe ".persistence_options" do
|
89
|
+
|
90
|
+
context "when options exist on the current thread" do
|
91
|
+
|
92
|
+
let(:klass) do
|
93
|
+
Band.with(write: { w: 2 })
|
94
|
+
end
|
95
|
+
|
96
|
+
it "returns the options" do
|
97
|
+
expect(klass.persistence_options).to eq(write: { w: 2 })
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
context "when there are no options on the current thread" do
|
102
|
+
|
103
|
+
it "returns nil" do
|
104
|
+
expect(Band.persistence_options).to be_nil
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -2,104 +2,83 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Mongoid::Sessions do
|
4
4
|
|
5
|
-
describe "
|
6
|
-
|
7
|
-
context "when options exist on the current thread" do
|
8
|
-
|
9
|
-
before do
|
10
|
-
Band.with(safe: true)
|
11
|
-
end
|
5
|
+
describe "#collection" do
|
12
6
|
|
13
|
-
|
14
|
-
Band.clear_persistence_options
|
15
|
-
end
|
7
|
+
shared_examples_for "an overridden collection at the class level" do
|
16
8
|
|
17
|
-
|
18
|
-
|
9
|
+
let(:band) do
|
10
|
+
klass.new
|
19
11
|
end
|
20
12
|
|
21
|
-
it "returns
|
22
|
-
|
13
|
+
it "returns the collection for the model" do
|
14
|
+
expect(band.collection).to be_a(Moped::Collection)
|
23
15
|
end
|
24
|
-
end
|
25
16
|
|
26
|
-
|
27
|
-
|
28
|
-
it "returns true" do
|
29
|
-
Band.clear_persistence_options.should be_true
|
17
|
+
it "sets the correct collection name" do
|
18
|
+
expect(band.collection.name).to eq("artists")
|
30
19
|
end
|
31
|
-
end
|
32
|
-
end
|
33
20
|
|
34
|
-
|
35
|
-
|
36
|
-
context "when overriding the default with store_in" do
|
37
|
-
|
38
|
-
shared_examples_for "an overridden collection at the class level" do
|
39
|
-
|
40
|
-
let(:band) do
|
41
|
-
Band.new
|
42
|
-
end
|
21
|
+
context "when accessing from the class level" do
|
43
22
|
|
44
23
|
it "returns the collection for the model" do
|
45
|
-
|
24
|
+
expect(klass.collection).to be_a(Moped::Collection)
|
46
25
|
end
|
47
26
|
|
48
27
|
it "sets the correct collection name" do
|
49
|
-
|
28
|
+
expect(klass.collection.name).to eq("artists")
|
50
29
|
end
|
30
|
+
end
|
31
|
+
end
|
51
32
|
|
52
|
-
|
53
|
-
|
54
|
-
it "returns the collection for the model" do
|
55
|
-
Band.collection.should be_a(Moped::Collection)
|
56
|
-
end
|
33
|
+
context "when overriding the persistence options" do
|
57
34
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
end
|
35
|
+
let(:klass) do
|
36
|
+
Band.with(collection: "artists")
|
37
|
+
end
|
62
38
|
|
63
|
-
|
39
|
+
it_behaves_like "an overridden collection at the class level"
|
40
|
+
end
|
64
41
|
|
65
|
-
|
42
|
+
context "when overriding store_in and persistence options" do
|
66
43
|
|
67
|
-
|
68
|
-
|
69
|
-
|
44
|
+
let(:klass) do
|
45
|
+
Band.with(collection: "artists")
|
46
|
+
end
|
70
47
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
48
|
+
before do
|
49
|
+
Band.store_in collection: "foo"
|
50
|
+
end
|
75
51
|
|
76
|
-
|
77
|
-
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
52
|
+
after do
|
53
|
+
Band.reset_storage_options!
|
81
54
|
end
|
82
55
|
|
56
|
+
it_behaves_like "an overridden collection at the class level"
|
57
|
+
end
|
58
|
+
|
59
|
+
context "when overriding the default with store_in" do
|
60
|
+
|
83
61
|
after do
|
84
|
-
Band.
|
62
|
+
Band.reset_storage_options!
|
85
63
|
end
|
86
64
|
|
87
65
|
context "when called multiple times with different options" do
|
66
|
+
|
88
67
|
before do
|
89
68
|
Band.store_in collection: "artists"
|
90
69
|
Band.store_in session: "another"
|
91
70
|
end
|
92
71
|
|
93
72
|
it "should merge the options together" do
|
94
|
-
Band.storage_options.
|
95
|
-
|
96
|
-
session: "another"
|
97
|
-
}
|
73
|
+
expect(Band.storage_options[:collection]).to eq("artists")
|
74
|
+
expect(Band.storage_options[:session]).to eq("another")
|
98
75
|
end
|
99
76
|
end
|
100
77
|
|
101
78
|
context "when overriding with a proc" do
|
102
79
|
|
80
|
+
let(:klass) { Band }
|
81
|
+
|
103
82
|
before do
|
104
83
|
Band.store_in(collection: ->{ "artists" })
|
105
84
|
end
|
@@ -109,17 +88,29 @@ describe Mongoid::Sessions do
|
|
109
88
|
|
110
89
|
context "when overriding with a string" do
|
111
90
|
|
91
|
+
let(:klass) { Band }
|
92
|
+
|
112
93
|
before do
|
113
94
|
Band.store_in(collection: "artists")
|
114
95
|
end
|
115
96
|
|
97
|
+
after do
|
98
|
+
Band.reset_storage_options!
|
99
|
+
end
|
100
|
+
|
116
101
|
it_behaves_like "an overridden collection at the class level"
|
117
102
|
end
|
118
103
|
|
119
104
|
context "when overriding with a symbol" do
|
120
105
|
|
106
|
+
let(:klass) { Band }
|
107
|
+
|
121
108
|
before do
|
122
|
-
|
109
|
+
klass.store_in(collection: :artists)
|
110
|
+
end
|
111
|
+
|
112
|
+
after do
|
113
|
+
klass.reset_storage_options!
|
123
114
|
end
|
124
115
|
|
125
116
|
it_behaves_like "an overridden collection at the class level"
|
@@ -133,21 +124,21 @@ describe Mongoid::Sessions do
|
|
133
124
|
end
|
134
125
|
|
135
126
|
it "returns the collection for the model" do
|
136
|
-
band.collection.
|
127
|
+
expect(band.collection).to be_a(Moped::Collection)
|
137
128
|
end
|
138
129
|
|
139
130
|
it "sets the correct collection name" do
|
140
|
-
band.collection.name.to_s.
|
131
|
+
expect(band.collection.name.to_s).to eq("bands")
|
141
132
|
end
|
142
133
|
|
143
134
|
context "when accessing from the class level" do
|
144
135
|
|
145
136
|
it "returns the collection for the model" do
|
146
|
-
Band.collection.
|
137
|
+
expect(Band.collection).to be_a(Moped::Collection)
|
147
138
|
end
|
148
139
|
|
149
140
|
it "sets the correct collection name" do
|
150
|
-
Band.collection.name.to_s.
|
141
|
+
expect(Band.collection.name.to_s).to eq("bands")
|
151
142
|
end
|
152
143
|
end
|
153
144
|
end
|
@@ -155,31 +146,59 @@ describe Mongoid::Sessions do
|
|
155
146
|
|
156
147
|
describe "#collection_name" do
|
157
148
|
|
158
|
-
|
149
|
+
shared_examples_for "an overridden collection name at the class level" do
|
159
150
|
|
160
|
-
|
151
|
+
let(:band) do
|
152
|
+
klass.new
|
153
|
+
end
|
161
154
|
|
162
|
-
|
163
|
-
|
155
|
+
context "when accessing from the instance" do
|
156
|
+
|
157
|
+
it "returns the overridden value" do
|
158
|
+
expect(band.collection_name).to eq(:artists)
|
164
159
|
end
|
160
|
+
end
|
165
161
|
|
166
|
-
|
162
|
+
context "when accessing from the class level" do
|
167
163
|
|
168
|
-
|
169
|
-
|
170
|
-
end
|
164
|
+
it "returns the overridden value" do
|
165
|
+
expect(klass.collection_name).to eq(:artists)
|
171
166
|
end
|
167
|
+
end
|
168
|
+
end
|
172
169
|
|
173
|
-
|
170
|
+
context "when overriding the persistence options" do
|
174
171
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
172
|
+
let(:klass) do
|
173
|
+
Band.with(collection: "artists")
|
174
|
+
end
|
175
|
+
|
176
|
+
it_behaves_like "an overridden collection name at the class level"
|
177
|
+
end
|
178
|
+
|
179
|
+
context "when overriding store_in and persistence options" do
|
180
|
+
|
181
|
+
let(:klass) do
|
182
|
+
Band.with(collection: "artists")
|
183
|
+
end
|
184
|
+
|
185
|
+
before do
|
186
|
+
Band.store_in collection: "foo"
|
179
187
|
end
|
180
188
|
|
181
189
|
after do
|
182
|
-
Band.
|
190
|
+
Band.reset_storage_options!
|
191
|
+
end
|
192
|
+
|
193
|
+
it_behaves_like "an overridden collection name at the class level"
|
194
|
+
end
|
195
|
+
|
196
|
+
context "when overriding the default with store_in" do
|
197
|
+
|
198
|
+
let(:klass) { Band }
|
199
|
+
|
200
|
+
after do
|
201
|
+
Band.reset_storage_options!
|
183
202
|
end
|
184
203
|
|
185
204
|
context "when overriding with a proc" do
|
@@ -217,13 +236,13 @@ describe Mongoid::Sessions do
|
|
217
236
|
end
|
218
237
|
|
219
238
|
it "returns the pluralized model name" do
|
220
|
-
band.collection_name.
|
239
|
+
expect(band.collection_name).to eq(:bands)
|
221
240
|
end
|
222
241
|
|
223
242
|
context "when accessing from the class level" do
|
224
243
|
|
225
244
|
it "returns the pluralized model name" do
|
226
|
-
Band.collection_name.
|
245
|
+
expect(Band.collection_name).to eq(:bands)
|
227
246
|
end
|
228
247
|
end
|
229
248
|
end
|
@@ -235,14 +254,120 @@ describe Mongoid::Sessions do
|
|
235
254
|
end
|
236
255
|
|
237
256
|
it "returns the root class pluralized model name" do
|
238
|
-
firefox.collection_name.
|
257
|
+
expect(firefox.collection_name).to eq(:canvases)
|
239
258
|
end
|
240
259
|
|
241
260
|
context "when accessing from the class level" do
|
242
261
|
|
243
262
|
it "returns the root class pluralized model name" do
|
244
|
-
Firefox.collection_name.
|
263
|
+
expect(Firefox.collection_name).to eq(:canvases)
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
describe "#database_name" do
|
270
|
+
|
271
|
+
shared_examples_for "an overridden database name" do
|
272
|
+
|
273
|
+
let(:band) do
|
274
|
+
klass.new
|
275
|
+
end
|
276
|
+
|
277
|
+
context "when accessing from the instance" do
|
278
|
+
|
279
|
+
it "returns the overridden value" do
|
280
|
+
expect(band.mongo_session.options[:database].to_s).to eq(database_id_alt)
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
context "when accessing from the class level" do
|
285
|
+
|
286
|
+
it "returns the overridden value" do
|
287
|
+
expect(klass.database_name.to_s).to eq(database_id_alt)
|
288
|
+
end
|
289
|
+
|
290
|
+
it "session returns the overridden value" do
|
291
|
+
expect(klass.mongo_session.options[:database].to_s).to eq(database_id_alt)
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
context "when overriding the persistence options" do
|
297
|
+
|
298
|
+
let(:klass) do
|
299
|
+
Band.with(database: database_id_alt)
|
300
|
+
end
|
301
|
+
|
302
|
+
it_behaves_like "an overridden database name"
|
303
|
+
end
|
304
|
+
|
305
|
+
context "when overriding with store_in" do
|
306
|
+
|
307
|
+
let(:klass) { Band }
|
308
|
+
|
309
|
+
before do
|
310
|
+
Band.store_in database: database_id_alt
|
311
|
+
end
|
312
|
+
|
313
|
+
after do
|
314
|
+
Band.reset_storage_options!
|
315
|
+
end
|
316
|
+
|
317
|
+
it_behaves_like "an overridden database name"
|
318
|
+
end
|
319
|
+
|
320
|
+
context "when overriding store_in and persistence options" do
|
321
|
+
|
322
|
+
let(:klass) do
|
323
|
+
Band.with(database: database_id_alt)
|
324
|
+
end
|
325
|
+
|
326
|
+
before do
|
327
|
+
Band.store_in database: "foo"
|
328
|
+
end
|
329
|
+
|
330
|
+
after do
|
331
|
+
Band.reset_storage_options!
|
332
|
+
end
|
333
|
+
|
334
|
+
it_behaves_like "an overridden database name"
|
335
|
+
end
|
336
|
+
|
337
|
+
context "when overriding using the session" do
|
338
|
+
|
339
|
+
let(:session_name) { :alternative }
|
340
|
+
|
341
|
+
before do
|
342
|
+
Mongoid.sessions[session_name] = { database: database_id_alt, hosts: [ "#{HOST}:#{PORT}" ] }
|
343
|
+
end
|
344
|
+
|
345
|
+
after do
|
346
|
+
Mongoid.sessions.delete(session_name)
|
347
|
+
end
|
348
|
+
|
349
|
+
context "when overriding the persistence options" do
|
350
|
+
|
351
|
+
let(:klass) do
|
352
|
+
Band.with(session: session_name)
|
245
353
|
end
|
354
|
+
|
355
|
+
it_behaves_like "an overridden database name"
|
356
|
+
end
|
357
|
+
|
358
|
+
context "when overriding with store_in" do
|
359
|
+
|
360
|
+
let(:klass) { Band }
|
361
|
+
|
362
|
+
before do
|
363
|
+
Band.store_in(session: session_name)
|
364
|
+
end
|
365
|
+
|
366
|
+
after do
|
367
|
+
Band.reset_storage_options!
|
368
|
+
end
|
369
|
+
|
370
|
+
it_behaves_like "an overridden database name"
|
246
371
|
end
|
247
372
|
end
|
248
373
|
end
|
@@ -259,10 +384,6 @@ describe Mongoid::Sessions do
|
|
259
384
|
Mongoid.sessions[:default][:database] = database_id
|
260
385
|
end
|
261
386
|
|
262
|
-
after do
|
263
|
-
Band.storage_options = nil
|
264
|
-
end
|
265
|
-
|
266
387
|
context "when getting the default" do
|
267
388
|
|
268
389
|
let(:file) do
|
@@ -270,16 +391,11 @@ describe Mongoid::Sessions do
|
|
270
391
|
end
|
271
392
|
|
272
393
|
before do
|
273
|
-
Band.storage_options = nil
|
274
394
|
described_class.clear
|
275
395
|
Mongoid.load!(file, :test)
|
276
396
|
Mongoid.sessions[:default][:database] = database_id
|
277
397
|
end
|
278
398
|
|
279
|
-
after do
|
280
|
-
Band.storage_options = nil
|
281
|
-
end
|
282
|
-
|
283
399
|
let!(:band) do
|
284
400
|
Band.new
|
285
401
|
end
|
@@ -289,7 +405,37 @@ describe Mongoid::Sessions do
|
|
289
405
|
end
|
290
406
|
|
291
407
|
it "returns the default session" do
|
292
|
-
mongo_session.options[:database].
|
408
|
+
expect(mongo_session.options[:database].to_s).to eq(database_id)
|
409
|
+
end
|
410
|
+
end
|
411
|
+
|
412
|
+
context "when overridden the database with store_in" do
|
413
|
+
|
414
|
+
before do
|
415
|
+
Band.store_in(database: database_id_alt)
|
416
|
+
end
|
417
|
+
|
418
|
+
context "on instance level" do
|
419
|
+
|
420
|
+
let(:band) do
|
421
|
+
Band.new.with({:read=>:primary})
|
422
|
+
end
|
423
|
+
|
424
|
+
it "uses the new database" do
|
425
|
+
expect(band.mongo_session.send(:current_database).name).to eq database_id_alt
|
426
|
+
end
|
427
|
+
|
428
|
+
context "when using another database before" do
|
429
|
+
|
430
|
+
before do
|
431
|
+
band
|
432
|
+
User.create!
|
433
|
+
end
|
434
|
+
|
435
|
+
it "uses the new database" do
|
436
|
+
expect(band.mongo_session.send(:current_database).name).to eq database_id_alt
|
437
|
+
end
|
438
|
+
end
|
293
439
|
end
|
294
440
|
end
|
295
441
|
|
@@ -306,7 +452,7 @@ describe Mongoid::Sessions do
|
|
306
452
|
end
|
307
453
|
|
308
454
|
it "returns the default session" do
|
309
|
-
single_session.options[:database].
|
455
|
+
expect(single_session.options[:database].to_s).to eq(ENV["MONGOHQ_SINGLE_NAME"])
|
310
456
|
end
|
311
457
|
end
|
312
458
|
|
@@ -350,8 +496,12 @@ describe Mongoid::Sessions do
|
|
350
496
|
|
351
497
|
shared_examples_for "an overridden session to a mongohq replica set" do
|
352
498
|
|
353
|
-
|
354
|
-
replica_session.
|
499
|
+
let(:seeds) do
|
500
|
+
replica_session.cluster.seeds.map{ |node| node.address.original }
|
501
|
+
end
|
502
|
+
|
503
|
+
it "returns the overridden session" do
|
504
|
+
expect(seeds).to eq([ ENV["MONGOHQ_REPL_1_URL"], ENV["MONGOHQ_REPL_2_URL"] ])
|
355
505
|
end
|
356
506
|
end
|
357
507
|
|
@@ -397,8 +547,12 @@ describe Mongoid::Sessions do
|
|
397
547
|
band.mongo_session
|
398
548
|
end
|
399
549
|
|
400
|
-
|
401
|
-
repl_session.
|
550
|
+
let(:seeds) do
|
551
|
+
repl_session.cluster.seeds.map{ |node| node.address.original }
|
552
|
+
end
|
553
|
+
|
554
|
+
it "returns the overridden session" do
|
555
|
+
expect(seeds).to eq([ ENV["MONGOHQ_REPL_1_URL"], ENV["MONGOHQ_REPL_2_URL"] ])
|
402
556
|
end
|
403
557
|
end
|
404
558
|
|
@@ -433,7 +587,7 @@ describe Mongoid::Sessions do
|
|
433
587
|
end
|
434
588
|
|
435
589
|
after do
|
436
|
-
Band.
|
590
|
+
Band.reset_storage_options!
|
437
591
|
end
|
438
592
|
|
439
593
|
context "when getting the default" do
|
@@ -443,7 +597,7 @@ describe Mongoid::Sessions do
|
|
443
597
|
end
|
444
598
|
|
445
599
|
before do
|
446
|
-
Band.
|
600
|
+
Band.reset_storage_options!
|
447
601
|
described_class.clear
|
448
602
|
Mongoid.load!(file, :test)
|
449
603
|
Mongoid.sessions[:default][:database] = database_id
|
@@ -454,7 +608,7 @@ describe Mongoid::Sessions do
|
|
454
608
|
end
|
455
609
|
|
456
610
|
it "returns the default session" do
|
457
|
-
mongo_session.options[:database].
|
611
|
+
expect(mongo_session.options[:database].to_s).to eq(database_id)
|
458
612
|
end
|
459
613
|
end
|
460
614
|
|
@@ -469,7 +623,7 @@ describe Mongoid::Sessions do
|
|
469
623
|
end
|
470
624
|
|
471
625
|
it "returns the default session" do
|
472
|
-
session.options[:database].
|
626
|
+
expect(session.options[:database].to_s).to eq(ENV["MONGOHQ_SINGLE_NAME"])
|
473
627
|
end
|
474
628
|
end
|
475
629
|
|
@@ -483,8 +637,12 @@ describe Mongoid::Sessions do
|
|
483
637
|
Band.mongo_session
|
484
638
|
end
|
485
639
|
|
486
|
-
|
487
|
-
repl_session.
|
640
|
+
let(:seeds) do
|
641
|
+
repl_session.cluster.seeds.map{ |node| node.address.original }
|
642
|
+
end
|
643
|
+
|
644
|
+
it "returns the overridden session" do
|
645
|
+
expect(seeds).to eq([ ENV["MONGOHQ_REPL_1_URL"], ENV["MONGOHQ_REPL_2_URL"] ])
|
488
646
|
end
|
489
647
|
end
|
490
648
|
|
@@ -502,39 +660,27 @@ describe Mongoid::Sessions do
|
|
502
660
|
end
|
503
661
|
end
|
504
662
|
|
505
|
-
describe ".
|
506
|
-
|
507
|
-
context "when options exist on the current thread" do
|
508
|
-
|
509
|
-
before do
|
510
|
-
Band.with(safe: { w: 2 })
|
511
|
-
end
|
663
|
+
describe ".store_in" do
|
512
664
|
|
513
|
-
|
514
|
-
Band.clear_persistence_options
|
515
|
-
end
|
665
|
+
context "when provided a non hash" do
|
516
666
|
|
517
|
-
it "
|
518
|
-
|
667
|
+
it "raises an error" do
|
668
|
+
expect {
|
669
|
+
Band.store_in :artists
|
670
|
+
}.to raise_error(Mongoid::Errors::InvalidStorageOptions)
|
519
671
|
end
|
520
672
|
end
|
521
673
|
|
522
|
-
context "when
|
674
|
+
context "when provided a class that extend another document" do
|
523
675
|
|
524
|
-
|
525
|
-
Band
|
676
|
+
let(:klass) do
|
677
|
+
Class.new(Band)
|
526
678
|
end
|
527
|
-
end
|
528
|
-
end
|
529
|
-
|
530
|
-
describe ".store_in" do
|
531
|
-
|
532
|
-
context "when provided a non hash" do
|
533
679
|
|
534
680
|
it "raises an error" do
|
535
681
|
expect {
|
536
|
-
|
537
|
-
}.to raise_error(Mongoid::Errors::
|
682
|
+
klass.store_in(database: :artists)
|
683
|
+
}.to raise_error(Mongoid::Errors::InvalidStorageParent)
|
538
684
|
end
|
539
685
|
end
|
540
686
|
|
@@ -556,13 +702,13 @@ describe Mongoid::Sessions do
|
|
556
702
|
context "when sending operations to a different database" do
|
557
703
|
|
558
704
|
after do
|
559
|
-
Band.with(database:
|
705
|
+
Band.with(database: database_id_alt).delete_all
|
560
706
|
end
|
561
707
|
|
562
708
|
describe ".create" do
|
563
709
|
|
564
710
|
let!(:band) do
|
565
|
-
Band.with(database:
|
711
|
+
Band.with(database: database_id_alt).create
|
566
712
|
end
|
567
713
|
|
568
714
|
it "does not persist to the default database" do
|
@@ -572,15 +718,15 @@ describe Mongoid::Sessions do
|
|
572
718
|
end
|
573
719
|
|
574
720
|
let(:from_db) do
|
575
|
-
Band.with(database:
|
721
|
+
Band.with(database: database_id_alt).find(band.id)
|
576
722
|
end
|
577
723
|
|
578
724
|
it "persists to the specified database" do
|
579
|
-
from_db.
|
725
|
+
expect(from_db).to eq(band)
|
580
726
|
end
|
581
727
|
|
582
728
|
it "persists the correct number of documents" do
|
583
|
-
Band.with(database:
|
729
|
+
expect(Band.with(database: database_id_alt).count).to eq(1)
|
584
730
|
end
|
585
731
|
end
|
586
732
|
|
@@ -605,40 +751,40 @@ describe Mongoid::Sessions do
|
|
605
751
|
end
|
606
752
|
|
607
753
|
before do
|
608
|
-
Band.with(database:
|
754
|
+
Band.with(database: database_id_alt).delete_all
|
609
755
|
end
|
610
756
|
|
611
757
|
let!(:depeche_mode) do
|
612
|
-
Band.with(database:
|
758
|
+
Band.with(database: database_id_alt).
|
613
759
|
create(name: "Depeche Mode", likes: 200)
|
614
760
|
end
|
615
761
|
|
616
762
|
let!(:tool) do
|
617
|
-
Band.with(database:
|
763
|
+
Band.with(database: database_id_alt).
|
618
764
|
create(name: "Tool", likes: 100)
|
619
765
|
end
|
620
766
|
|
621
767
|
context "when outputting in memory" do
|
622
768
|
|
623
769
|
let(:results) do
|
624
|
-
Band.with(database:
|
770
|
+
Band.with(database: database_id_alt).
|
625
771
|
map_reduce(map, reduce).out(inline: 1)
|
626
772
|
end
|
627
773
|
|
628
774
|
it "executes the map/reduce on the correct database" do
|
629
|
-
results.first["value"].
|
775
|
+
expect(results.first["value"]).to eq({ "likes" => 200 })
|
630
776
|
end
|
631
777
|
end
|
632
778
|
|
633
779
|
context "when outputting to a collection" do
|
634
780
|
|
635
781
|
let(:results) do
|
636
|
-
Band.with(database:
|
782
|
+
Band.with(database: database_id_alt).
|
637
783
|
map_reduce(map, reduce).out(replace: "bands_output")
|
638
784
|
end
|
639
785
|
|
640
786
|
it "executes the map/reduce on the correct database" do
|
641
|
-
results.first["value"].
|
787
|
+
expect(results.first["value"]).to eq({ "likes" => 200 })
|
642
788
|
end
|
643
789
|
end
|
644
790
|
end
|
@@ -663,11 +809,11 @@ describe Mongoid::Sessions do
|
|
663
809
|
end
|
664
810
|
|
665
811
|
it "persists to the specified database" do
|
666
|
-
from_db.
|
812
|
+
expect(from_db).to eq(band)
|
667
813
|
end
|
668
814
|
|
669
815
|
it "persists the correct number of documents" do
|
670
|
-
Band.with(collection: "artists").count.
|
816
|
+
expect(Band.with(collection: "artists").count).to eq(1)
|
671
817
|
end
|
672
818
|
end
|
673
819
|
|
@@ -711,7 +857,7 @@ describe Mongoid::Sessions do
|
|
711
857
|
end
|
712
858
|
|
713
859
|
it "executes the map/reduce on the correct collection" do
|
714
|
-
results.first["value"].
|
860
|
+
expect(results.first["value"]).to eq({ "likes" => 200 })
|
715
861
|
end
|
716
862
|
end
|
717
863
|
end
|
@@ -746,7 +892,7 @@ describe Mongoid::Sessions do
|
|
746
892
|
end
|
747
893
|
|
748
894
|
it "persists to the specified database" do
|
749
|
-
from_db.
|
895
|
+
expect(from_db).to eq(band)
|
750
896
|
end
|
751
897
|
end
|
752
898
|
|
@@ -767,7 +913,7 @@ describe Mongoid::Sessions do
|
|
767
913
|
end
|
768
914
|
|
769
915
|
it "persists to the specified database" do
|
770
|
-
from_db.
|
916
|
+
expect(from_db).to eq(band)
|
771
917
|
end
|
772
918
|
end
|
773
919
|
|
@@ -788,7 +934,7 @@ describe Mongoid::Sessions do
|
|
788
934
|
end
|
789
935
|
|
790
936
|
it "persists to the specified database" do
|
791
|
-
from_db.
|
937
|
+
expect(from_db).to eq(band)
|
792
938
|
end
|
793
939
|
end
|
794
940
|
end
|
@@ -851,7 +997,7 @@ describe Mongoid::Sessions do
|
|
851
997
|
end
|
852
998
|
|
853
999
|
it "executes the map/reduce on the correct session" do
|
854
|
-
results.first["value"].
|
1000
|
+
expect(results.first["value"]).to eq({ "likes" => 200 })
|
855
1001
|
end
|
856
1002
|
end
|
857
1003
|
end
|
@@ -861,33 +1007,34 @@ describe Mongoid::Sessions do
|
|
861
1007
|
describe ".create" do
|
862
1008
|
|
863
1009
|
before do
|
864
|
-
Person.
|
1010
|
+
Person.create_indexes
|
1011
|
+
Person.create(ssn: "432-97-1111")
|
865
1012
|
end
|
866
1013
|
|
867
1014
|
context "when no error occurs" do
|
868
1015
|
|
869
1016
|
it "inserts the document" do
|
870
|
-
Person.count.
|
1017
|
+
expect(Person.count).to eq(1)
|
871
1018
|
end
|
872
1019
|
end
|
873
1020
|
|
874
1021
|
context "when a mongodb error occurs" do
|
875
1022
|
|
876
|
-
before do
|
877
|
-
Person.create_indexes
|
878
|
-
end
|
879
|
-
|
880
1023
|
it "bubbles up to the caller" do
|
881
1024
|
expect {
|
882
|
-
Person.
|
1025
|
+
Person.create(ssn: "432-97-1111")
|
883
1026
|
}.to raise_error(Moped::Errors::OperationFailure)
|
884
1027
|
end
|
885
1028
|
end
|
886
1029
|
|
887
|
-
context "when using
|
1030
|
+
context "when using write -1" do
|
1031
|
+
|
1032
|
+
let(:new_person) do
|
1033
|
+
Person.with(write: {w: -1}).create(ssn: "432-97-1111")
|
1034
|
+
end
|
888
1035
|
|
889
1036
|
it "ignores mongodb error" do
|
890
|
-
|
1037
|
+
expect(new_person).to_not be nil
|
891
1038
|
end
|
892
1039
|
end
|
893
1040
|
end
|
@@ -895,13 +1042,13 @@ describe Mongoid::Sessions do
|
|
895
1042
|
describe ".create!" do
|
896
1043
|
|
897
1044
|
before do
|
898
|
-
Person.
|
1045
|
+
Person.create!(ssn: "432-97-1112")
|
899
1046
|
end
|
900
1047
|
|
901
1048
|
context "when no error occurs" do
|
902
1049
|
|
903
1050
|
it "inserts the document" do
|
904
|
-
Person.count.
|
1051
|
+
expect(Person.count).to eq(1)
|
905
1052
|
end
|
906
1053
|
end
|
907
1054
|
|
@@ -913,7 +1060,7 @@ describe Mongoid::Sessions do
|
|
913
1060
|
|
914
1061
|
it "bubbles up to the caller" do
|
915
1062
|
expect {
|
916
|
-
Person.
|
1063
|
+
Person.create!(ssn: "432-97-1112")
|
917
1064
|
}.to raise_error(Moped::Errors::OperationFailure)
|
918
1065
|
end
|
919
1066
|
end
|
@@ -922,7 +1069,7 @@ describe Mongoid::Sessions do
|
|
922
1069
|
|
923
1070
|
it "raises the validation error" do
|
924
1071
|
expect {
|
925
|
-
Account.
|
1072
|
+
Account.create!(name: "this name is way too long")
|
926
1073
|
}.to raise_error(Mongoid::Errors::Validations)
|
927
1074
|
end
|
928
1075
|
end
|
@@ -931,7 +1078,7 @@ describe Mongoid::Sessions do
|
|
931
1078
|
describe ".save" do
|
932
1079
|
|
933
1080
|
before do
|
934
|
-
Person.
|
1081
|
+
Person.create(ssn: "432-97-1113")
|
935
1082
|
end
|
936
1083
|
|
937
1084
|
context "when a mongodb error occurs" do
|
@@ -946,7 +1093,7 @@ describe Mongoid::Sessions do
|
|
946
1093
|
|
947
1094
|
it "bubbles up to the caller" do
|
948
1095
|
expect {
|
949
|
-
person.
|
1096
|
+
person.save
|
950
1097
|
}.to raise_error(Moped::Errors::OperationFailure)
|
951
1098
|
end
|
952
1099
|
end
|
@@ -955,7 +1102,7 @@ describe Mongoid::Sessions do
|
|
955
1102
|
describe ".save!" do
|
956
1103
|
|
957
1104
|
before do
|
958
|
-
Person.
|
1105
|
+
Person.create!(ssn: "432-97-1114")
|
959
1106
|
end
|
960
1107
|
|
961
1108
|
context "when a mongodb error occurs" do
|
@@ -970,7 +1117,7 @@ describe Mongoid::Sessions do
|
|
970
1117
|
|
971
1118
|
it "bubbles up to the caller" do
|
972
1119
|
expect {
|
973
|
-
person.
|
1120
|
+
person.save!
|
974
1121
|
}.to raise_error(Moped::Errors::OperationFailure)
|
975
1122
|
end
|
976
1123
|
end
|
@@ -983,7 +1130,7 @@ describe Mongoid::Sessions do
|
|
983
1130
|
|
984
1131
|
it "raises the validation error" do
|
985
1132
|
expect {
|
986
|
-
account.
|
1133
|
+
account.save!
|
987
1134
|
}.to raise_error(Mongoid::Errors::Validations)
|
988
1135
|
end
|
989
1136
|
end
|
@@ -1013,7 +1160,7 @@ describe Mongoid::Sessions do
|
|
1013
1160
|
end
|
1014
1161
|
|
1015
1162
|
it "persists the document to the correct database" do
|
1016
|
-
Band.find(band.id).
|
1163
|
+
expect(Band.find(band.id)).to eq(band)
|
1017
1164
|
end
|
1018
1165
|
end
|
1019
1166
|
end
|
@@ -1045,7 +1192,7 @@ describe Mongoid::Sessions do
|
|
1045
1192
|
|
1046
1193
|
it "persists to the overridden database" do
|
1047
1194
|
Band.mongo_session.with(database: :mongoid_optional) do |sess|
|
1048
|
-
sess[:bands].find(name: "Tool").
|
1195
|
+
expect(sess[:bands].find(name: "Tool")).to_not be_nil
|
1049
1196
|
end
|
1050
1197
|
end
|
1051
1198
|
end
|
@@ -1055,19 +1202,13 @@ describe Mongoid::Sessions do
|
|
1055
1202
|
|
1056
1203
|
context "when the override is configured with a uri" do
|
1057
1204
|
|
1058
|
-
let(:
|
1059
|
-
"
|
1060
|
-
end
|
1061
|
-
|
1062
|
-
let(:config) do
|
1063
|
-
{ default: { uri: "mongodb://localhost:#{PORT}/#{database_id}" },
|
1064
|
-
session1: { uri: "mongodb://localhost:#{PORT}/#{database_name}" }}
|
1205
|
+
let(:file) do
|
1206
|
+
File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
|
1065
1207
|
end
|
1066
1208
|
|
1067
1209
|
before do
|
1068
|
-
Mongoid::
|
1069
|
-
Mongoid.
|
1070
|
-
Mongoid.override_session(:session1)
|
1210
|
+
Mongoid::Config.load!(file, :test)
|
1211
|
+
Mongoid.override_session(:mongohq_repl_uri)
|
1071
1212
|
end
|
1072
1213
|
|
1073
1214
|
after do
|
@@ -1075,7 +1216,7 @@ describe Mongoid::Sessions do
|
|
1075
1216
|
end
|
1076
1217
|
|
1077
1218
|
it "has some database name on session" do
|
1078
|
-
Band.mongo_session.options[:database].
|
1219
|
+
expect(Band.mongo_session.options[:database]).to eq(:mongoid_replica)
|
1079
1220
|
end
|
1080
1221
|
end
|
1081
1222
|
|
@@ -1104,7 +1245,7 @@ describe Mongoid::Sessions do
|
|
1104
1245
|
end
|
1105
1246
|
|
1106
1247
|
it "persists to the overridden session" do
|
1107
|
-
persisted.
|
1248
|
+
expect(persisted).to eq(band)
|
1108
1249
|
end
|
1109
1250
|
end
|
1110
1251
|
end
|