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
@@ -1,231 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require "mongoid/persistence/atomic/operation"
|
3
|
-
require "mongoid/persistence/atomic/add_to_set"
|
4
|
-
require "mongoid/persistence/atomic/bit"
|
5
|
-
require "mongoid/persistence/atomic/inc"
|
6
|
-
require "mongoid/persistence/atomic/pop"
|
7
|
-
require "mongoid/persistence/atomic/pull"
|
8
|
-
require "mongoid/persistence/atomic/pull_all"
|
9
|
-
require "mongoid/persistence/atomic/push"
|
10
|
-
require "mongoid/persistence/atomic/push_all"
|
11
|
-
require "mongoid/persistence/atomic/rename"
|
12
|
-
require "mongoid/persistence/atomic/sets"
|
13
|
-
require "mongoid/persistence/atomic/unset"
|
14
|
-
|
15
|
-
module Mongoid
|
16
|
-
module Persistence
|
17
|
-
|
18
|
-
# This module provides the explicit atomic operations helpers on the
|
19
|
-
# document itself.
|
20
|
-
module Atomic
|
21
|
-
|
22
|
-
# Performs an atomic $addToSet of the provided value on the supplied field.
|
23
|
-
# If the field does not exist it will be initialized as an empty array.
|
24
|
-
#
|
25
|
-
# If the value already exists on the array it will not be added.
|
26
|
-
#
|
27
|
-
# @example Add only a unique value on the field.
|
28
|
-
# person.add_to_set(:aliases, "Bond")
|
29
|
-
#
|
30
|
-
# @example Add only the unique values to the field.
|
31
|
-
# person.add_to_set(:aliases, [ "Bond", "James" ])
|
32
|
-
#
|
33
|
-
# @param [ Symbol ] field The name of the field.
|
34
|
-
# @param [ Object, Array<Object> ] value The value or values to add.
|
35
|
-
# @param [ Hash ] options The mongo persistence options.
|
36
|
-
#
|
37
|
-
# @return [ Array<Object> ] The new value of the field.
|
38
|
-
#
|
39
|
-
# @since 2.0.0
|
40
|
-
def add_to_set(field, value, options = {})
|
41
|
-
AddToSet.new(self, field, value, options).persist
|
42
|
-
end
|
43
|
-
|
44
|
-
# Performs an atomic $bit operation on the field with the provided hash
|
45
|
-
# of bitwise ops to execute in order.
|
46
|
-
#
|
47
|
-
# @example Execute a bitwise and on the field.
|
48
|
-
# person.bit(:age, { :and => 12 })
|
49
|
-
#
|
50
|
-
# @example Execute a bitwise or on the field.
|
51
|
-
# person.bit(:age, { :or => 12 })
|
52
|
-
#
|
53
|
-
# @example Execute a chain of bitwise operations.
|
54
|
-
# person.bit(:age, { :and => 10, :or => 12 })
|
55
|
-
#
|
56
|
-
# @param [ Symbol ] field The name of the field.
|
57
|
-
# @param [ Hash ] value The bitwise operations to perform.
|
58
|
-
# @param [ Hash ] options The mongo persistence options.
|
59
|
-
#
|
60
|
-
# @return [ Integer ] The new value of the field.
|
61
|
-
#
|
62
|
-
# @since 2.1.0
|
63
|
-
def bit(field, value, options = {})
|
64
|
-
Bit.new(self, field, value, options).persist
|
65
|
-
end
|
66
|
-
|
67
|
-
# Performs an atomic $inc of the provided value on the supplied
|
68
|
-
# field. If the field does not exist it will be initialized as
|
69
|
-
# the provided value.
|
70
|
-
#
|
71
|
-
# @example Increment a field.
|
72
|
-
# person.inc(:score, 2)
|
73
|
-
#
|
74
|
-
# @param [ Symbol ] field The name of the field.
|
75
|
-
# @param [ Numeric ] value The value to increment.
|
76
|
-
# @param [ Hash ] options The mongo persistence options.
|
77
|
-
#
|
78
|
-
# @return [ Array<Object> ] The new value of the field.
|
79
|
-
#
|
80
|
-
# @since 2.0.0
|
81
|
-
def inc(field, value, options = {})
|
82
|
-
Inc.new(self, field, value, options).persist
|
83
|
-
end
|
84
|
-
|
85
|
-
# Performs an atomic $pop of the provided value on the supplied
|
86
|
-
# field.
|
87
|
-
#
|
88
|
-
# @example Pop the last value from the array.
|
89
|
-
# person.pop(:aliases, 1)
|
90
|
-
#
|
91
|
-
# @example Pop the first value from the array.
|
92
|
-
# person.pop(:aliases, -1)
|
93
|
-
#
|
94
|
-
# @param [ Symbol ] field The name of the field.
|
95
|
-
# @param [ Integer ] value Whether to pop the first or last.
|
96
|
-
# @param [ Hash ] options The mongo persistence options.
|
97
|
-
#
|
98
|
-
# @return [ Array<Object> ] The new value of the field.
|
99
|
-
#
|
100
|
-
# @since 2.1.0
|
101
|
-
def pop(field, value, options = {})
|
102
|
-
Pop.new(self, field, value, options).persist
|
103
|
-
end
|
104
|
-
|
105
|
-
# Performs an atomic $pull of the provided value on the supplied
|
106
|
-
# field.
|
107
|
-
#
|
108
|
-
# @note Support for a $pull with an expression is not yet supported.
|
109
|
-
#
|
110
|
-
# @example Pull the value from the field.
|
111
|
-
# person.pull(:aliases, "Bond")
|
112
|
-
#
|
113
|
-
# @param [ Symbol ] field The name of the field.
|
114
|
-
# @param [ Object ] value The value to pull.
|
115
|
-
# @param [ Hash ] options The mongo persistence options.
|
116
|
-
#
|
117
|
-
# @return [ Array<Object> ] The new value of the field.
|
118
|
-
#
|
119
|
-
# @since 2.1.0
|
120
|
-
def pull(field, value, options = {})
|
121
|
-
Pull.new(self, field, value, options).persist
|
122
|
-
end
|
123
|
-
|
124
|
-
# Performs an atomic $pullAll of the provided value on the supplied
|
125
|
-
# field. If the field does not exist it will be initialized as an
|
126
|
-
# empty array.
|
127
|
-
#
|
128
|
-
# @example Pull the values from the field.
|
129
|
-
# person.pull_all(:aliases, [ "Bond", "James" ])
|
130
|
-
#
|
131
|
-
# @param [ Symbol ] field The name of the field.
|
132
|
-
# @param [ Array<Object> ] value The values to pull.
|
133
|
-
# @param [ Hash ] options The mongo persistence options.
|
134
|
-
#
|
135
|
-
# @return [ Array<Object> ] The new value of the field.
|
136
|
-
#
|
137
|
-
# @since 2.0.0
|
138
|
-
def pull_all(field, value, options = {})
|
139
|
-
PullAll.new(self, field, value, options).persist
|
140
|
-
end
|
141
|
-
|
142
|
-
# Performs an atomic $push of the provided value on the supplied field. If
|
143
|
-
# the field does not exist it will be initialized as an empty array.
|
144
|
-
#
|
145
|
-
# @example Push a value on the field.
|
146
|
-
# person.push(:aliases, "Bond")
|
147
|
-
#
|
148
|
-
# @param [ Symbol ] field The name of the field.
|
149
|
-
# @param [ Object ] value The value to push.
|
150
|
-
# @param [ Hash ] options The mongo persistence options.
|
151
|
-
#
|
152
|
-
# @return [ Array<Object> ] The new value of the field.
|
153
|
-
#
|
154
|
-
# @since 2.0.0
|
155
|
-
def push(field, value, options = {})
|
156
|
-
Push.new(self, field, value, options).persist
|
157
|
-
end
|
158
|
-
|
159
|
-
# Performs an atomic $pushAll of the provided value on the supplied field. If
|
160
|
-
# the field does not exist it will be initialized as an empty array.
|
161
|
-
#
|
162
|
-
# @example Push the values onto the field.
|
163
|
-
# person.push_all(:aliases, [ "Bond", "James" ])
|
164
|
-
#
|
165
|
-
# @param [ Symbol ] field The name of the field.
|
166
|
-
# @param [ Array<Object> ] value The values to push.
|
167
|
-
# @param [ Hash ] options The mongo persistence options.
|
168
|
-
#
|
169
|
-
# @return [ Array<Object> ] The new value of the field.
|
170
|
-
#
|
171
|
-
# @since 2.1.0
|
172
|
-
def push_all(field, value, options = {})
|
173
|
-
PushAll.new(self, field, value, options).persist
|
174
|
-
end
|
175
|
-
|
176
|
-
# Performs the atomic $rename from the old field to the new field name.
|
177
|
-
#
|
178
|
-
# @example Rename the field.
|
179
|
-
# person.rename(:age, :years)
|
180
|
-
#
|
181
|
-
# @param [ Symbol ] field The old field name.
|
182
|
-
# @param [ Symbol ] value The new field name.
|
183
|
-
# @param [ Hash ] options The mongo persistence options.
|
184
|
-
#
|
185
|
-
# @return [ Object ] The value of the new field.
|
186
|
-
#
|
187
|
-
# @since 2.1.0
|
188
|
-
def rename(field, value, options = {})
|
189
|
-
Rename.new(self, field, value, options).persist
|
190
|
-
end
|
191
|
-
|
192
|
-
# Performs an atomic $set of the provided value on the supplied
|
193
|
-
# field. If the field does not exist it will be initialized as
|
194
|
-
# the provided value.
|
195
|
-
#
|
196
|
-
# @example Set a field.
|
197
|
-
# person.set(:score, 2)
|
198
|
-
#
|
199
|
-
# @param [ Symbol ] field The name of the field.
|
200
|
-
# @param [ Integer ] value The value to set.
|
201
|
-
# @param [ Hash ] options The mongo persistence options.
|
202
|
-
#
|
203
|
-
# @return [ Array<Object> ] The new value of the field.
|
204
|
-
#
|
205
|
-
# @since 2.1.0
|
206
|
-
def set(field, value = nil, options = {})
|
207
|
-
Sets.new(self, field, value, options).persist
|
208
|
-
end
|
209
|
-
|
210
|
-
# Performs the atomic $unset on the supplied field.
|
211
|
-
#
|
212
|
-
# @example
|
213
|
-
# Remove the field.
|
214
|
-
# person.unset(:age)
|
215
|
-
# Remove fields age and score.
|
216
|
-
# person.unset([:age, :score])
|
217
|
-
#
|
218
|
-
# @param [ Symbol, Array<Object> ] fields The fields name.
|
219
|
-
# @param [ Hash ] options The mongo persistence options.
|
220
|
-
#
|
221
|
-
# @return [ nil ] Always nil.
|
222
|
-
#
|
223
|
-
# @since 2.1.0
|
224
|
-
def unset(*args)
|
225
|
-
fields = args.__find_args__
|
226
|
-
options = fields[-1].is_a?(Hash) ? fields.delete_at(-1) : {}
|
227
|
-
Unset.new(self, fields, true, options).persist
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
5
|
-
|
6
|
-
# This class provides the ability to perform an explicit $addToSet
|
7
|
-
# modification on a specific field.
|
8
|
-
class AddToSet
|
9
|
-
include Operation
|
10
|
-
|
11
|
-
# Sends the atomic $addToSet operation to the database.
|
12
|
-
#
|
13
|
-
# @example Persist the new values.
|
14
|
-
# addToSet.persist
|
15
|
-
#
|
16
|
-
# @return [ Object ] The new array value.
|
17
|
-
#
|
18
|
-
# @since 2.0.0
|
19
|
-
def persist
|
20
|
-
prepare do
|
21
|
-
document[field] = [] unless document[field]
|
22
|
-
values = document.send(field)
|
23
|
-
Array.wrap(value).each do |val|
|
24
|
-
values.push(val) unless values.include?(val)
|
25
|
-
end
|
26
|
-
execute("$addToSet")
|
27
|
-
values
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# Get the atomic operation to perform.
|
32
|
-
#
|
33
|
-
# @example Get the operation.
|
34
|
-
# add_to_set.operation("$addToSet")
|
35
|
-
#
|
36
|
-
# @param [ String ] modifier The modifier to use.
|
37
|
-
#
|
38
|
-
# @return [ Hash ] The atomic operation for the field and addition.
|
39
|
-
#
|
40
|
-
# @since 2.0.0
|
41
|
-
def operation(modifier)
|
42
|
-
{ modifier => { path => value.is_a?(Array) ? { "$each" => value } : value}}
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
5
|
-
|
6
|
-
# This operation is for performing $bit atomic operations against the
|
7
|
-
# database.
|
8
|
-
class Bit
|
9
|
-
include Operation
|
10
|
-
|
11
|
-
# Execute the bitwise operation. This correlates to a $bit in MongoDB.
|
12
|
-
#
|
13
|
-
# @example Execute the op.
|
14
|
-
# bit.persist
|
15
|
-
#
|
16
|
-
# @return [ Integer ] The new value.
|
17
|
-
#
|
18
|
-
# @since 2.1.0
|
19
|
-
def persist
|
20
|
-
prepare do
|
21
|
-
current = document[field]
|
22
|
-
return nil unless current
|
23
|
-
document[field] = value.inject(current) do |result, (bit, val)|
|
24
|
-
result = result & val if bit.to_s == "and"
|
25
|
-
result = result | val if bit.to_s == "or"
|
26
|
-
result
|
27
|
-
end
|
28
|
-
execute("$bit")
|
29
|
-
document[field]
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
5
|
-
|
6
|
-
# This class provides atomic $inc behaviour.
|
7
|
-
class Inc
|
8
|
-
include Operation
|
9
|
-
|
10
|
-
# Sends the atomic $inc operation to the database.
|
11
|
-
#
|
12
|
-
# @example Persist the new values.
|
13
|
-
# inc.persist
|
14
|
-
#
|
15
|
-
# @return [ Object ] The new numeric value.
|
16
|
-
#
|
17
|
-
# @since 2.0.0
|
18
|
-
def persist
|
19
|
-
prepare do
|
20
|
-
current = document[field] || 0
|
21
|
-
document[field] = current + value
|
22
|
-
execute("$inc")
|
23
|
-
document[field]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
# In case we need to cast going to the database.
|
30
|
-
#
|
31
|
-
# @api private
|
32
|
-
#
|
33
|
-
# @example Cast the value.
|
34
|
-
# operation.cast_value
|
35
|
-
#
|
36
|
-
# @return [ Integer, Float ] The value casted.
|
37
|
-
#
|
38
|
-
# @since 3.0.3
|
39
|
-
def cast_value
|
40
|
-
value.__to_inc__
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,154 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Persistence
|
4
|
-
module Atomic
|
5
|
-
|
6
|
-
# This is the included module for all atomic operation objects.
|
7
|
-
module Operation
|
8
|
-
include Mongoid::Atomic::Positionable
|
9
|
-
|
10
|
-
attr_accessor :document, :fields, :value, :options
|
11
|
-
|
12
|
-
# Get the collection to be used for persistence.
|
13
|
-
#
|
14
|
-
# @example Get the collection.
|
15
|
-
# operation.collection
|
16
|
-
#
|
17
|
-
# @return [ Collection ] The root collection.
|
18
|
-
#
|
19
|
-
# @since 2.1.0
|
20
|
-
def collection
|
21
|
-
document._root.collection
|
22
|
-
end
|
23
|
-
|
24
|
-
# Initialize the new pullAll operation.
|
25
|
-
#
|
26
|
-
# @example Create a new pullAll operation.
|
27
|
-
# PullAll.new(document, :aliases, [ "Bond" ])
|
28
|
-
#
|
29
|
-
# @param [ Document ] document The document to pullAll onto.
|
30
|
-
# @param [ Symbol ] field The name of the array field.
|
31
|
-
# @param [ Object ] value The value to pullAll.
|
32
|
-
# @param [ Hash ] options The persistence options.
|
33
|
-
#
|
34
|
-
# @since 2.0.0
|
35
|
-
def initialize(document, fields, value, options = {})
|
36
|
-
@document, @value = document, value
|
37
|
-
@options = options
|
38
|
-
|
39
|
-
@fields = Array.wrap(fields).collect do |field|
|
40
|
-
document.database_field_name(field.to_s)
|
41
|
-
end
|
42
|
-
|
43
|
-
self.class.send(:define_method, :field) do
|
44
|
-
@fields.first
|
45
|
-
end if @fields.length == 1
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
# Get the atomic operation to perform.
|
50
|
-
#
|
51
|
-
# @example Get the operation.
|
52
|
-
# inc.operation
|
53
|
-
#
|
54
|
-
# @param [ String ] modifier The modifier to use.
|
55
|
-
#
|
56
|
-
# @return [ Hash ] The atomic operation for the field and addition.
|
57
|
-
#
|
58
|
-
# @since 2.0.0
|
59
|
-
def operation(modifier)
|
60
|
-
hash = Hash[fields.collect do |field|
|
61
|
-
[path(field), cast_value]
|
62
|
-
end]
|
63
|
-
{ modifier => hash }
|
64
|
-
end
|
65
|
-
|
66
|
-
# Get the path to the field that is getting atomically updated.
|
67
|
-
#
|
68
|
-
# @example Get the path.
|
69
|
-
# operation.path
|
70
|
-
#
|
71
|
-
# @return [ String, Symbol ] The path to the field.
|
72
|
-
#
|
73
|
-
# @since 2.1.0
|
74
|
-
def path(field = field)
|
75
|
-
position = document.atomic_position
|
76
|
-
position.blank? ? field : "#{position}.#{field}"
|
77
|
-
end
|
78
|
-
|
79
|
-
# All atomic operations use this with a block to ensure saftey options
|
80
|
-
# clear out after the execution.
|
81
|
-
#
|
82
|
-
# @example Prepare the operation.
|
83
|
-
# prepare do
|
84
|
-
# collection.update
|
85
|
-
# end
|
86
|
-
#
|
87
|
-
# @return [ Object ] The yielded value.
|
88
|
-
#
|
89
|
-
# @since 2.1.0
|
90
|
-
def prepare
|
91
|
-
yield(document)
|
92
|
-
end
|
93
|
-
|
94
|
-
private
|
95
|
-
|
96
|
-
# In case we need to cast going to the database.
|
97
|
-
#
|
98
|
-
# @api private
|
99
|
-
#
|
100
|
-
# @example Cast the value.
|
101
|
-
# operation.cast_value
|
102
|
-
#
|
103
|
-
# @return [ Object ] The value.
|
104
|
-
#
|
105
|
-
# @since 3.0.3
|
106
|
-
def cast_value
|
107
|
-
value.mongoize
|
108
|
-
end
|
109
|
-
|
110
|
-
# Executes the common functionality between operations.
|
111
|
-
#
|
112
|
-
# @api private
|
113
|
-
#
|
114
|
-
# @example Execute the operation.
|
115
|
-
# operation.execute("$push")
|
116
|
-
#
|
117
|
-
# @param [ String ] name The name of the operation.
|
118
|
-
#
|
119
|
-
# @since 3.0.0
|
120
|
-
def execute(name)
|
121
|
-
unless document.new_record?
|
122
|
-
selector = document.atomic_selector
|
123
|
-
collection.find(selector).update(positionally(selector, operation(name)))
|
124
|
-
if fields.length > 1
|
125
|
-
document.remove_change(fields)
|
126
|
-
else
|
127
|
-
document.remove_change(field)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
# Appends items to an array and executes the corresponding $push or
|
133
|
-
# $pushAll operation.
|
134
|
-
#
|
135
|
-
# @api private
|
136
|
-
#
|
137
|
-
# @example Execute the append.
|
138
|
-
# operation.append_with("$push")
|
139
|
-
#
|
140
|
-
# @param [ String ] name The name of the operation - $push or $pushAll.
|
141
|
-
#
|
142
|
-
# @since 3.0.0
|
143
|
-
def append_with(name)
|
144
|
-
prepare do
|
145
|
-
document[field] = [] unless document[field]
|
146
|
-
docs = document.send(field).concat(value.__array__)
|
147
|
-
execute(name)
|
148
|
-
docs
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|