mongoid 3.1.7 → 4.0.0.alpha1
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 +317 -11
- data/README.md +4 -5
- data/lib/config/locales/en.yml +9 -12
- data/lib/mongoid.rb +6 -75
- data/lib/mongoid/atomic.rb +0 -11
- data/lib/mongoid/atomic/paths/embedded.rb +0 -30
- data/lib/mongoid/atomic/paths/root.rb +0 -13
- data/lib/mongoid/attributes.rb +30 -108
- 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} +5 -2
- data/lib/mongoid/composable.rb +104 -0
- data/lib/mongoid/config.rb +3 -9
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
- data/lib/mongoid/contextual/atomic.rb +53 -53
- data/lib/mongoid/contextual/command.rb +26 -0
- data/lib/mongoid/contextual/map_reduce.rb +1 -1
- data/lib/mongoid/contextual/memory.rb +6 -5
- data/lib/mongoid/contextual/mongo.rb +59 -28
- data/lib/mongoid/contextual/text_search.rb +180 -0
- data/lib/mongoid/copyable.rb +2 -3
- data/lib/mongoid/criteria.rb +13 -33
- data/lib/mongoid/criteria/{#findable.rb# → findable.rb} +0 -2
- 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 +1 -1
- data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
- data/lib/mongoid/document.rb +28 -12
- data/lib/mongoid/errors.rb +1 -1
- data/lib/mongoid/errors/document_not_found.rb +2 -1
- data/lib/mongoid/errors/invalid_value.rb +16 -0
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/extensions.rb +2 -7
- data/lib/mongoid/extensions/array.rb +2 -2
- data/lib/mongoid/extensions/boolean.rb +14 -17
- data/lib/mongoid/extensions/float.rb +1 -0
- data/lib/mongoid/extensions/hash.rb +1 -1
- data/lib/mongoid/extensions/object.rb +4 -4
- data/lib/mongoid/extensions/object_id.rb +5 -5
- data/lib/mongoid/extensions/range.rb +8 -2
- data/lib/mongoid/extensions/string.rb +5 -17
- data/lib/mongoid/extensions/time.rb +2 -2
- data/lib/mongoid/factory.rb +3 -3
- data/lib/mongoid/fields.rb +9 -8
- data/lib/mongoid/fields/foreign_key.rb +3 -3
- data/lib/mongoid/fields/standard.rb +4 -16
- data/lib/mongoid/fields/validators/macro.rb +11 -3
- data/lib/mongoid/{finders.rb → findable.rb} +6 -2
- 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} +3 -52
- data/lib/mongoid/log_subscriber.rb +22 -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 +1 -1
- 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 +212 -0
- data/lib/mongoid/persistable/creatable.rb +188 -0
- data/lib/mongoid/persistable/deletable.rb +148 -0
- data/lib/mongoid/persistable/destroyable.rb +55 -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 +151 -0
- data/lib/mongoid/persistable/upsertable.rb +55 -0
- data/lib/mongoid/positional.rb +71 -0
- data/lib/mongoid/railtie.rb +32 -45
- data/lib/mongoid/railties/database.rake +12 -6
- data/lib/mongoid/relations.rb +3 -3
- data/lib/mongoid/relations/accessors.rb +13 -46
- data/lib/mongoid/relations/auto_save.rb +15 -36
- data/lib/mongoid/relations/binding.rb +0 -23
- 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 +3 -1
- data/lib/mongoid/relations/builder.rb +1 -1
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
- 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 +47 -0
- data/lib/mongoid/relations/eager/base.rb +57 -0
- data/lib/mongoid/relations/eager/belongs_to.rb +30 -0
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +40 -0
- data/lib/mongoid/relations/eager/has_many.rb +37 -0
- data/lib/mongoid/relations/eager/has_one.rb +29 -0
- data/lib/mongoid/relations/embedded/batchable.rb +3 -4
- data/lib/mongoid/relations/embedded/many.rb +7 -27
- data/lib/mongoid/relations/macros.rb +2 -4
- data/lib/mongoid/relations/many.rb +30 -31
- data/lib/mongoid/relations/metadata.rb +6 -75
- data/lib/mongoid/relations/nested_builder.rb +2 -2
- data/lib/mongoid/relations/options.rb +1 -0
- data/lib/mongoid/relations/polymorphic.rb +0 -1
- data/lib/mongoid/relations/proxy.rb +10 -32
- data/lib/mongoid/relations/referenced/in.rb +2 -18
- data/lib/mongoid/relations/referenced/many.rb +9 -22
- data/lib/mongoid/relations/referenced/many_to_many.rb +10 -33
- data/lib/mongoid/relations/referenced/one.rb +2 -21
- data/lib/mongoid/relations/synchronization.rb +3 -3
- data/lib/mongoid/relations/touchable.rb +33 -0
- data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
- data/lib/mongoid/{scoping.rb → scopable.rb} +26 -3
- data/lib/mongoid/selectable.rb +59 -0
- data/lib/mongoid/{serialization.rb → serializable.rb} +10 -1
- data/lib/mongoid/sessions.rb +37 -345
- data/lib/mongoid/sessions/factory.rb +2 -0
- data/lib/mongoid/sessions/options.rb +176 -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 +15 -1
- data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
- data/lib/mongoid/support/query_counter.rb +23 -0
- data/lib/mongoid/threaded.rb +0 -110
- data/lib/mongoid/threaded/lifecycle.rb +0 -28
- data/lib/mongoid/timestamps/updated/short.rb +2 -2
- data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
- data/lib/mongoid/{validations.rb → validatable.rb} +23 -9
- data/lib/mongoid/{validations → validatable}/associated.rb +3 -1
- 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 +3 -3
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +9 -13
- 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 +59 -57
- data/lib/support/ruby_version.rb +1 -1
- data/spec/app/models/account.rb +2 -6
- data/spec/app/models/acolyte.rb +1 -0
- data/spec/app/models/actor.rb +0 -1
- data/spec/app/models/address.rb +6 -1
- data/spec/app/models/animal.rb +1 -1
- data/spec/app/models/appointment.rb +2 -2
- 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/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/dragon.rb +4 -0
- data/spec/app/models/drug.rb +1 -3
- data/spec/app/models/dungeon.rb +4 -0
- 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 +0 -2
- 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/login.rb +1 -1
- data/spec/app/models/movie.rb +1 -0
- data/spec/app/models/name.rb +3 -3
- data/spec/app/models/note.rb +1 -1
- data/spec/app/models/oscar.rb +1 -1
- data/spec/app/models/parent_doc.rb +1 -1
- data/spec/app/models/person.rb +13 -8
- data/spec/app/models/phone.rb +1 -3
- data/spec/app/models/player.rb +1 -1
- data/spec/app/models/post.rb +2 -1
- data/spec/app/models/quiz.rb +0 -3
- data/spec/app/models/record.rb +5 -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/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 +1 -1
- data/spec/app/models/video.rb +0 -4
- data/spec/app/models/wiki_page.rb +1 -4
- 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/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} +335 -448
- data/spec/mongoid/attributes/readonly_spec.rb +16 -16
- data/spec/mongoid/attributes_spec.rb +188 -434
- data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +117 -148
- 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 +46 -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 +94 -94
- data/spec/mongoid/contextual/mongo_spec.rb +225 -139
- data/spec/mongoid/contextual/text_search_spec.rb +207 -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 +1063 -0
- data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +31 -31
- data/spec/mongoid/criteria_spec.rb +530 -2207
- data/spec/mongoid/document_spec.rb +166 -120
- 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_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 +3 -3
- 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 +7 -7
- 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/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 +9 -9
- 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 +15 -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 +23 -23
- data/spec/mongoid/fields/standard_spec.rb +12 -12
- data/spec/mongoid/fields_spec.rb +168 -209
- data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +62 -27
- 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} +105 -105
- data/spec/mongoid/log_subscriber_spec.rb +74 -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/{matchers → matchable}/ne_spec.rb +3 -3
- 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 +512 -0
- data/spec/mongoid/persistable/deletable_spec.rb +205 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +148 -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 +432 -0
- data/spec/mongoid/persistable/settable_spec.rb +139 -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} +19 -14
- 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 +36 -16
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +6 -6
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +2 -2
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +3 -3
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +12 -12
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +6 -6
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +9 -9
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +6 -6
- 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 +22 -33
- 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 +11 -24
- data/spec/mongoid/relations/builders_spec.rb +21 -21
- data/spec/mongoid/relations/cascading/delete_spec.rb +7 -7
- data/spec/mongoid/relations/cascading/destroy_spec.rb +2 -2
- data/spec/mongoid/relations/cascading/nullify_spec.rb +2 -2
- data/spec/mongoid/relations/cascading/restrict_spec.rb +3 -3
- 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 +143 -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 +55 -56
- data/spec/mongoid/relations/embedded/many_spec.rb +357 -367
- data/spec/mongoid/relations/embedded/one_spec.rb +98 -139
- data/spec/mongoid/relations/macros_spec.rb +108 -102
- data/spec/mongoid/relations/metadata_spec.rb +147 -241
- 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 +379 -522
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +345 -417
- data/spec/mongoid/relations/referenced/one_spec.rb +148 -263
- 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 +116 -116
- data/spec/mongoid/relations/touchable_spec.rb +296 -0
- data/spec/mongoid/relations_spec.rb +16 -15
- data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +20 -60
- data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +74 -126
- data/spec/mongoid/selectable_spec.rb +134 -0
- data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +111 -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 +92 -0
- data/spec/mongoid/sessions_spec.rb +288 -177
- data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
- data/spec/mongoid/state_spec.rb +10 -10
- 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/updated/short_spec.rb +10 -10
- data/spec/mongoid/timestamps/updated_spec.rb +8 -12
- data/spec/mongoid/timestamps_spec.rb +7 -11
- data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
- data/spec/mongoid/{validations → validatable}/associated_spec.rb +18 -18
- data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
- data/spec/mongoid/{validations → validatable}/length_spec.rb +7 -7
- data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
- data/spec/mongoid/{validations → validatable}/presence_spec.rb +31 -38
- data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +126 -183
- data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
- data/spec/mongoid_spec.rb +8 -8
- data/spec/rails/mongoid_spec.rb +72 -87
- data/spec/spec_helper.rb +19 -17
- metadata +261 -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/criterion/findable.rb +0 -179
- 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/draft.rb +0 -9
- 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/#atomic_spec.rb# +0 -365
- 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/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/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,6 +30,32 @@ module Mongoid
|
|
30
30
|
def session
|
31
31
|
collection.database.session
|
32
32
|
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Execute the block setting field limitations.
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
#
|
40
|
+
# @example Execute with field limitations.
|
41
|
+
# text_search.selecting do
|
42
|
+
# #...
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# @param [ Symbol ] param The name of the command parameter.
|
46
|
+
#
|
47
|
+
# @return [ Object ] The result of the yield.
|
48
|
+
#
|
49
|
+
# @since 4.0.0
|
50
|
+
def selecting(param)
|
51
|
+
begin
|
52
|
+
fields = command[param]
|
53
|
+
Threaded.set_selection(criteria.object_id, fields) unless fields.blank?
|
54
|
+
yield
|
55
|
+
ensure
|
56
|
+
Threaded.delete_selection(criteria.object_id)
|
57
|
+
end
|
58
|
+
end
|
33
59
|
end
|
34
60
|
end
|
35
61
|
end
|
@@ -1,14 +1,15 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "mongoid/contextual/aggregable/memory"
|
3
|
+
require "mongoid/relations/eager"
|
3
4
|
|
4
5
|
module Mongoid
|
5
6
|
module Contextual
|
6
7
|
class Memory
|
7
8
|
include Enumerable
|
8
9
|
include Aggregable::Memory
|
9
|
-
include Eager
|
10
|
+
include Relations::Eager
|
10
11
|
include Queryable
|
11
|
-
include
|
12
|
+
include Positional
|
12
13
|
|
13
14
|
# @attribute [r] root The root document.
|
14
15
|
# @attribute [r] path The atomic path.
|
@@ -102,7 +103,7 @@ module Mongoid
|
|
102
103
|
documents_for_iteration.each do |doc|
|
103
104
|
yield(doc)
|
104
105
|
end
|
105
|
-
|
106
|
+
self
|
106
107
|
else
|
107
108
|
to_enum
|
108
109
|
end
|
@@ -130,7 +131,7 @@ module Mongoid
|
|
130
131
|
# @since 3.0.0
|
131
132
|
def first
|
132
133
|
doc = documents.first
|
133
|
-
eager_load_one(doc)
|
134
|
+
eager_load_one(doc)
|
134
135
|
doc
|
135
136
|
end
|
136
137
|
alias :one :first
|
@@ -164,7 +165,7 @@ module Mongoid
|
|
164
165
|
# @since 3.0.0
|
165
166
|
def last
|
166
167
|
doc = documents.last
|
167
|
-
eager_load_one(doc)
|
168
|
+
eager_load_one(doc)
|
168
169
|
doc
|
169
170
|
end
|
170
171
|
|
@@ -2,10 +2,11 @@
|
|
2
2
|
require "mongoid/contextual/atomic"
|
3
3
|
require "mongoid/contextual/aggregable/mongo"
|
4
4
|
require "mongoid/contextual/command"
|
5
|
-
require "mongoid/contextual/eager"
|
6
5
|
require "mongoid/contextual/find_and_modify"
|
7
6
|
require "mongoid/contextual/geo_near"
|
8
7
|
require "mongoid/contextual/map_reduce"
|
8
|
+
require "mongoid/contextual/text_search"
|
9
|
+
require "mongoid/relations/eager"
|
9
10
|
|
10
11
|
module Mongoid
|
11
12
|
module Contextual
|
@@ -13,7 +14,7 @@ module Mongoid
|
|
13
14
|
include Enumerable
|
14
15
|
include Aggregable::Mongo
|
15
16
|
include Atomic
|
16
|
-
include Eager
|
17
|
+
include Relations::Eager
|
17
18
|
include Queryable
|
18
19
|
|
19
20
|
# @attribute [r] query The Moped query.
|
@@ -56,7 +57,7 @@ module Mongoid
|
|
56
57
|
return collection.find(criteria.and(_id: document.id).selector).count
|
57
58
|
end
|
58
59
|
return query.count(document) if document
|
59
|
-
|
60
|
+
try_cache(:count) { query.count }
|
60
61
|
end
|
61
62
|
|
62
63
|
# Delete all documents in the database that match the selector.
|
@@ -123,7 +124,7 @@ module Mongoid
|
|
123
124
|
yield_document(doc, &block)
|
124
125
|
end
|
125
126
|
@cache_loaded = true
|
126
|
-
|
127
|
+
self
|
127
128
|
end
|
128
129
|
else
|
129
130
|
to_enum
|
@@ -143,7 +144,12 @@ module Mongoid
|
|
143
144
|
#
|
144
145
|
# @since 3.0.0
|
145
146
|
def exists?
|
146
|
-
|
147
|
+
return !documents.empty? if cached? && cache_loaded?
|
148
|
+
return @count > 0 if instance_variable_defined?(:@count)
|
149
|
+
|
150
|
+
try_cache(:exists) do
|
151
|
+
!!(query.dup.select(_id: 1).limit(1).first)
|
152
|
+
end
|
147
153
|
end
|
148
154
|
|
149
155
|
# Run an explain on the criteria.
|
@@ -189,9 +195,8 @@ module Mongoid
|
|
189
195
|
#
|
190
196
|
# @since 3.0.0
|
191
197
|
def first
|
192
|
-
if cached? && cache_loaded?
|
193
|
-
|
194
|
-
else
|
198
|
+
return documents.first if cached? && cache_loaded?
|
199
|
+
try_cache(:first) do
|
195
200
|
with_sorting do
|
196
201
|
with_eager_loading(query.first)
|
197
202
|
end
|
@@ -257,7 +262,7 @@ module Mongoid
|
|
257
262
|
# @since 3.0.0
|
258
263
|
def initialize(criteria)
|
259
264
|
@criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
|
260
|
-
@collection = klass.collection
|
265
|
+
@collection = @klass.with(criteria.persistence_options || {}).collection
|
261
266
|
criteria.send(:merge_type_selection)
|
262
267
|
@query = collection.find(criteria.selector)
|
263
268
|
apply_options
|
@@ -274,8 +279,10 @@ module Mongoid
|
|
274
279
|
#
|
275
280
|
# @since 3.0.0
|
276
281
|
def last
|
277
|
-
|
278
|
-
|
282
|
+
try_cache(:last) do
|
283
|
+
with_inverse_sorting do
|
284
|
+
with_eager_loading(query.first)
|
285
|
+
end
|
279
286
|
end
|
280
287
|
end
|
281
288
|
|
@@ -330,14 +337,24 @@ module Mongoid
|
|
330
337
|
# @note This method will return the raw db values - it performs no custom
|
331
338
|
# serialization.
|
332
339
|
#
|
333
|
-
# @param [ String, Symbol ] field
|
340
|
+
# @param [ String, Symbol, Array ] field Fields to pluck.
|
334
341
|
#
|
335
|
-
# @return [ Array<Object> ] The plucked values.
|
342
|
+
# @return [ Array<Object, Array> ] The plucked values.
|
336
343
|
#
|
337
344
|
# @since 3.1.0
|
338
|
-
def pluck(
|
339
|
-
|
340
|
-
|
345
|
+
def pluck(*fields)
|
346
|
+
normalized_select = fields.inject({}) do |hash, f|
|
347
|
+
hash[klass.database_field_name(f)] = 1
|
348
|
+
hash
|
349
|
+
end
|
350
|
+
|
351
|
+
query.dup.select(normalized_select).map do |doc|
|
352
|
+
if normalized_select.size == 1
|
353
|
+
doc[normalized_select.keys.first]
|
354
|
+
else
|
355
|
+
normalized_select.keys.map { |n| doc[n] }.compact
|
356
|
+
end
|
357
|
+
end.compact
|
341
358
|
end
|
342
359
|
|
343
360
|
# Skips the provided number of documents.
|
@@ -376,6 +393,20 @@ module Mongoid
|
|
376
393
|
end
|
377
394
|
end
|
378
395
|
|
396
|
+
# Execute a text command against the database.
|
397
|
+
#
|
398
|
+
# @example Find documents with the text "phase"
|
399
|
+
# context.text_search("phase")
|
400
|
+
#
|
401
|
+
# @param [ String ] query The text search query.
|
402
|
+
#
|
403
|
+
# @return [ TextSearch ] The TextSearch command.
|
404
|
+
#
|
405
|
+
# @since 4.0.0
|
406
|
+
def text_search(query)
|
407
|
+
TextSearch.new(collection, criteria, query)
|
408
|
+
end
|
409
|
+
|
379
410
|
# Update the first matching document atomically.
|
380
411
|
#
|
381
412
|
# @example Update the first matching document.
|
@@ -393,7 +424,7 @@ module Mongoid
|
|
393
424
|
# Update all the matching documents atomically.
|
394
425
|
#
|
395
426
|
# @example Update all the matching documents.
|
396
|
-
# context.
|
427
|
+
# context.update_all({ "$set" => { name: "Smiths" }})
|
397
428
|
#
|
398
429
|
# @param [ Hash ] attributes The new attributes for each document.
|
399
430
|
#
|
@@ -406,21 +437,21 @@ module Mongoid
|
|
406
437
|
|
407
438
|
private
|
408
439
|
|
409
|
-
#
|
440
|
+
# yield the block given or return the cached value
|
410
441
|
#
|
411
|
-
# @
|
412
|
-
#
|
413
|
-
# @example Check for document existsence.
|
414
|
-
# context.check_existence
|
442
|
+
# @param [ String, Symbol ] key The instance variable name
|
415
443
|
#
|
416
|
-
# @return
|
444
|
+
# @return the result of the block
|
417
445
|
#
|
418
|
-
# @since 3.1.
|
419
|
-
def
|
420
|
-
|
421
|
-
|
446
|
+
# @since 3.1.4
|
447
|
+
def try_cache(key, &block)
|
448
|
+
unless cached?
|
449
|
+
yield
|
422
450
|
else
|
423
|
-
|
451
|
+
unless ret = instance_variable_get("@#{key}")
|
452
|
+
instance_variable_set("@#{key}", ret = yield)
|
453
|
+
end
|
454
|
+
ret
|
424
455
|
end
|
425
456
|
end
|
426
457
|
|
@@ -0,0 +1,180 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Contextual
|
4
|
+
|
5
|
+
# Wraps behaviour around a lazy text search command.
|
6
|
+
#
|
7
|
+
# @since 4.0.0
|
8
|
+
class TextSearch
|
9
|
+
include Enumerable
|
10
|
+
include Command
|
11
|
+
|
12
|
+
delegate :[], to: :results
|
13
|
+
delegate :==, :empty?, to: :entries
|
14
|
+
|
15
|
+
# Iterate over the results of the text search command.
|
16
|
+
#
|
17
|
+
# @example Iterate over the results.
|
18
|
+
# text_search.each do |doc|
|
19
|
+
# #...
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# @return [ Enumerator ] The enumerator.
|
23
|
+
#
|
24
|
+
# @since 4.0.0
|
25
|
+
def each
|
26
|
+
if block_given?
|
27
|
+
selecting(:project) do
|
28
|
+
documents.each do |doc|
|
29
|
+
yield doc
|
30
|
+
end
|
31
|
+
end
|
32
|
+
else
|
33
|
+
to_enum
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Instantiate a new text search lazy proxy.
|
38
|
+
#
|
39
|
+
# @example Instantiate the text search.
|
40
|
+
# TextSearch.new(collection, criteria, "test")
|
41
|
+
#
|
42
|
+
# @param [ Moped::Collection ] collection The collection to execute on.
|
43
|
+
# @param [ Criteria ] criteria The criteria to filter results.
|
44
|
+
# @param [ String ] search_string The search string.
|
45
|
+
#
|
46
|
+
# @since 4.0.0
|
47
|
+
def initialize(collection, criteria, search_string)
|
48
|
+
@collection, @criteria = collection, criteria
|
49
|
+
command[:text] = collection.name.to_s
|
50
|
+
command[:search] = search_string
|
51
|
+
apply_criteria_options
|
52
|
+
end
|
53
|
+
|
54
|
+
# Inspect the text search object.
|
55
|
+
#
|
56
|
+
# @example Inspect the text search.
|
57
|
+
# text_search.inspect
|
58
|
+
#
|
59
|
+
# @return [ String ] The inspection.
|
60
|
+
#
|
61
|
+
# @since 4.0.0
|
62
|
+
def inspect
|
63
|
+
%Q{#<Mongoid::Contextual::TextSearch
|
64
|
+
selector: #{criteria.selector.inspect}
|
65
|
+
class: #{criteria.klass}
|
66
|
+
search: #{command[:search]}
|
67
|
+
filter: #{command[:filter] || "N/A"}
|
68
|
+
project: #{command[:project] || "N/A"}
|
69
|
+
limit: #{command[:limit] || "N/A"}
|
70
|
+
language: #{command[:language] || "default"}>
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
# Execute the text search command, and return the raw results (in hash
|
75
|
+
# form).
|
76
|
+
#
|
77
|
+
# @example Execute the command.
|
78
|
+
# text_search.execute
|
79
|
+
#
|
80
|
+
# @return [ Hash ] The raw results.
|
81
|
+
#
|
82
|
+
# @since 4.0.0
|
83
|
+
def execute
|
84
|
+
results
|
85
|
+
end
|
86
|
+
|
87
|
+
# Set the language of the text search.
|
88
|
+
#
|
89
|
+
# @example Set the text search language.
|
90
|
+
# text_search.language("deutsch")
|
91
|
+
#
|
92
|
+
# @param [ String ] value The name of the language.
|
93
|
+
#
|
94
|
+
# @return [ TextSearch ] The modified text search.
|
95
|
+
#
|
96
|
+
# @since 4.0.0
|
97
|
+
def language(value)
|
98
|
+
command[:language] = value
|
99
|
+
self
|
100
|
+
end
|
101
|
+
|
102
|
+
# Limits the fields returned by the text search for each document. By
|
103
|
+
# default, _id is always included.
|
104
|
+
#
|
105
|
+
# @example Limit the returned fields.
|
106
|
+
# text_search.project(name: 1, title: 1)
|
107
|
+
#
|
108
|
+
# @param [ Hash ] value The fields to project.
|
109
|
+
#
|
110
|
+
# @return [ TextSearch ] The modified text search.
|
111
|
+
#
|
112
|
+
# @since 4.0.0
|
113
|
+
def project(value)
|
114
|
+
command[:project] = value
|
115
|
+
self
|
116
|
+
end
|
117
|
+
|
118
|
+
# Get the raw statistics returned from the text search.
|
119
|
+
#
|
120
|
+
# @example Get the stats.
|
121
|
+
# text_search.stats
|
122
|
+
#
|
123
|
+
# @return [ Hash ] The raw statistics.
|
124
|
+
#
|
125
|
+
# @since 4.0.0
|
126
|
+
def stats
|
127
|
+
results["stats"]
|
128
|
+
end
|
129
|
+
|
130
|
+
private
|
131
|
+
|
132
|
+
# Apply the options from the criteria to the text search command.
|
133
|
+
#
|
134
|
+
# @api private
|
135
|
+
#
|
136
|
+
# @example Apply the criteria options, filter and limit only.
|
137
|
+
# text_search.apply_criteria_options
|
138
|
+
#
|
139
|
+
# @return [ nil ] Nothing.
|
140
|
+
#
|
141
|
+
# @since 4.0.0
|
142
|
+
def apply_criteria_options
|
143
|
+
command[:filter] = criteria.selector
|
144
|
+
if limit = criteria.options[:limit]
|
145
|
+
command[:limit] = limit
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# Get the results of the text search as documents.
|
150
|
+
#
|
151
|
+
# @api private
|
152
|
+
#
|
153
|
+
# @example Get the results as documents.
|
154
|
+
# text_search.documents
|
155
|
+
#
|
156
|
+
# @return [ Array<Document> ] The documents.
|
157
|
+
#
|
158
|
+
# @since 4.0.0
|
159
|
+
def documents
|
160
|
+
results["results"].map do |attributes|
|
161
|
+
Factory.from_db(criteria.klass, attributes["obj"], criteria.object_id)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
# Get the raw results.
|
166
|
+
#
|
167
|
+
# @api private
|
168
|
+
#
|
169
|
+
# @example Get the raw results.
|
170
|
+
# text_search.results
|
171
|
+
#
|
172
|
+
# @return [ Hash ] The raw results.
|
173
|
+
#
|
174
|
+
# @since 4.0.0
|
175
|
+
def results
|
176
|
+
@results ||= session.command(command)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
data/lib/mongoid/copyable.rb
CHANGED
@@ -6,7 +6,7 @@ module Mongoid
|
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
8
|
# Clone or dup the current +Document+. This will return all attributes with
|
9
|
-
# the exception of the document's id
|
9
|
+
# the exception of the document's id, and will reset all the
|
10
10
|
# instance variables.
|
11
11
|
#
|
12
12
|
# This clone also includes embedded documents.
|
@@ -22,7 +22,7 @@ module Mongoid
|
|
22
22
|
# _id and id field in the document would cause problems with Mongoid
|
23
23
|
# elsewhere.
|
24
24
|
attrs = clone_document.except("_id", "id")
|
25
|
-
self.class.new(attrs
|
25
|
+
self.class.new(attrs)
|
26
26
|
end
|
27
27
|
alias :dup :clone
|
28
28
|
|
@@ -40,7 +40,6 @@ module Mongoid
|
|
40
40
|
# @since 3.0.22
|
41
41
|
def clone_document
|
42
42
|
attrs = as_document.__deep_copy__
|
43
|
-
attrs["version"] = 1 if attrs.delete("versions")
|
44
43
|
process_localized_attributes(attrs)
|
45
44
|
attrs
|
46
45
|
end
|