mongoid 7.4.3 → 8.0.7
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
- checksums.yaml.gz.sig +0 -0
- data/README.md +3 -3
- data/Rakefile +25 -0
- data/lib/config/locales/en.yml +52 -28
- data/lib/mongoid/association/accessors.rb +38 -9
- data/lib/mongoid/association/bindable.rb +50 -2
- data/lib/mongoid/association/builders.rb +4 -2
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/eager_loadable.rb +29 -7
- data/lib/mongoid/association/embedded/batchable.rb +33 -10
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
- data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
- data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +65 -41
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +23 -4
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/macros.rb +28 -1
- data/lib/mongoid/association/many.rb +11 -7
- data/lib/mongoid/association/nested/many.rb +5 -4
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +5 -5
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +14 -3
- data/lib/mongoid/association/referenced/auto_save.rb +4 -3
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
- data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -24
- data/lib/mongoid/association/referenced/has_many/proxy.rb +26 -16
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +4 -4
- data/lib/mongoid/association/reflections.rb +2 -2
- data/lib/mongoid/association/relatable.rb +44 -10
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic.rb +7 -0
- data/lib/mongoid/attributes/dynamic.rb +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +37 -6
- data/lib/mongoid/attributes/projector.rb +1 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/attributes.rb +43 -40
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/changeable.rb +43 -10
- data/lib/mongoid/clients/options.rb +5 -1
- data/lib/mongoid/clients/sessions.rb +2 -14
- data/lib/mongoid/clients/validators/storage.rb +3 -3
- data/lib/mongoid/config/options.rb +3 -0
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +62 -17
- data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/map_reduce.rb +2 -2
- data/lib/mongoid/contextual/memory.rb +180 -21
- data/lib/mongoid/contextual/mongo.rb +260 -217
- data/lib/mongoid/contextual/none.rb +67 -5
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -2
- data/lib/mongoid/copyable.rb +32 -8
- data/lib/mongoid/criteria/findable.rb +7 -4
- data/lib/mongoid/criteria/includable.rb +24 -20
- data/lib/mongoid/criteria/marshalable.rb +10 -2
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -14
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -15
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -9
- data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
- data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
- data/lib/mongoid/criteria/queryable/key.rb +3 -3
- data/lib/mongoid/criteria/queryable/mergeable.rb +21 -0
- data/lib/mongoid/criteria/queryable/optional.rb +5 -11
- data/lib/mongoid/criteria/queryable/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +31 -37
- data/lib/mongoid/criteria/queryable/selector.rb +93 -8
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable/storable.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria/translator.rb +45 -0
- data/lib/mongoid/criteria.rb +16 -35
- data/lib/mongoid/deprecable.rb +37 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +135 -34
- data/lib/mongoid/equality.rb +8 -8
- data/lib/mongoid/errors/document_not_found.rb +33 -12
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
- data/lib/mongoid/errors/invalid_field.rb +6 -2
- data/lib/mongoid/errors/invalid_field_type.rb +26 -0
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/errors.rb +2 -2
- data/lib/mongoid/extensions/array.rb +9 -7
- data/lib/mongoid/extensions/big_decimal.rb +33 -10
- data/lib/mongoid/extensions/binary.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +8 -2
- data/lib/mongoid/extensions/date.rb +26 -20
- data/lib/mongoid/extensions/date_time.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/float.rb +7 -4
- data/lib/mongoid/extensions/hash.rb +37 -8
- data/lib/mongoid/extensions/integer.rb +7 -4
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +8 -6
- data/lib/mongoid/extensions/range.rb +41 -10
- data/lib/mongoid/extensions/regexp.rb +11 -4
- data/lib/mongoid/extensions/set.rb +11 -4
- data/lib/mongoid/extensions/string.rb +11 -22
- data/lib/mongoid/extensions/symbol.rb +4 -15
- data/lib/mongoid/extensions/time.rb +27 -16
- data/lib/mongoid/extensions/time_with_zone.rb +1 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/factory.rb +55 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +9 -4
- data/lib/mongoid/fields/standard.rb +7 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +233 -40
- data/lib/mongoid/findable.rb +34 -13
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +185 -16
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +33 -13
- data/lib/mongoid/persistable/creatable.rb +18 -9
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +2 -2
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +19 -12
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistable.rb +3 -3
- data/lib/mongoid/persistence_context.rb +63 -10
- data/lib/mongoid/query_cache.rb +8 -260
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +10 -8
- data/lib/mongoid/scopable.rb +26 -22
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/shardable.rb +35 -11
- data/lib/mongoid/stateful.rb +35 -9
- data/lib/mongoid/tasks/database.rb +0 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +42 -12
- data/lib/mongoid/timestamps/created.rb +1 -1
- data/lib/mongoid/timestamps/updated.rb +2 -2
- data/lib/mongoid/touchable.rb +2 -3
- data/lib/mongoid/traversable.rb +5 -4
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +9 -8
- data/lib/mongoid/validatable.rb +6 -6
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/warnings.rb +28 -0
- data/lib/mongoid.rb +2 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -3
- data/spec/config/mongoid.yml +16 -0
- data/spec/integration/app_spec.rb +8 -12
- data/spec/integration/associations/belongs_to_spec.rb +18 -0
- data/spec/integration/associations/embedded_spec.rb +15 -0
- data/spec/integration/associations/embeds_many_spec.rb +15 -2
- data/spec/integration/associations/embeds_one_spec.rb +18 -0
- data/spec/integration/associations/foreign_key_spec.rb +9 -0
- data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
- data/spec/integration/associations/has_one_spec.rb +97 -1
- data/spec/integration/associations/scope_option_spec.rb +1 -1
- data/spec/integration/callbacks_models.rb +95 -1
- data/spec/integration/callbacks_spec.rb +246 -4
- data/spec/integration/criteria/range_spec.rb +95 -1
- data/spec/integration/discriminator_key_spec.rb +115 -76
- data/spec/integration/dots_and_dollars_spec.rb +277 -0
- data/spec/integration/i18n_fallbacks_spec.rb +1 -17
- data/spec/integration/matcher_examples_spec.rb +20 -13
- data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
- data/spec/integration/matcher_operator_spec.rb +3 -5
- data/spec/integration/persistence/range_field_spec.rb +350 -0
- data/spec/mongoid/association/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +9 -9
- data/spec/mongoid/association/eager_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
- data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
- data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +235 -40
- data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
- data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
- data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
- data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
- data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +202 -201
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +8 -8
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +160 -119
- data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
- data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
- data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
- data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
- data/spec/mongoid/association/syncable_spec.rb +14 -0
- data/spec/mongoid/atomic/paths_spec.rb +0 -14
- data/spec/mongoid/attributes/nested_spec.rb +80 -11
- data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
- data/spec/mongoid/attributes/projector_spec.rb +1 -5
- data/spec/mongoid/attributes_spec.rb +551 -27
- data/spec/mongoid/cacheable_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/options_spec.rb +1 -0
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +57 -2
- data/spec/mongoid/config_spec.rb +78 -18
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
- data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
- data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
- data/spec/mongoid/contextual/memory_spec.rb +1336 -69
- data/spec/mongoid/contextual/mongo_spec.rb +1253 -247
- data/spec/mongoid/contextual/none_spec.rb +38 -0
- data/spec/mongoid/copyable_spec.rb +451 -1
- data/spec/mongoid/criteria/findable_spec.rb +86 -210
- data/spec/mongoid/criteria/includable_spec.rb +1492 -0
- data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +289 -124
- data/spec/mongoid/criteria/queryable/selector_spec.rb +89 -4
- data/spec/mongoid/criteria/queryable/storable_spec.rb +72 -0
- data/spec/mongoid/criteria/translator_spec.rb +132 -0
- data/spec/mongoid/criteria_projection_spec.rb +0 -1
- data/spec/mongoid/criteria_spec.rb +475 -1199
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/errors/document_not_found_spec.rb +76 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
- data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
- data/spec/mongoid/errors/no_environment_spec.rb +3 -3
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
- data/spec/mongoid/extensions/array_spec.rb +16 -2
- data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
- data/spec/mongoid/extensions/binary_spec.rb +44 -9
- data/spec/mongoid/extensions/boolean_spec.rb +68 -82
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
- data/spec/mongoid/extensions/date_spec.rb +71 -1
- data/spec/mongoid/extensions/date_time_spec.rb +15 -9
- data/spec/mongoid/extensions/float_spec.rb +53 -74
- data/spec/mongoid/extensions/hash_spec.rb +33 -3
- data/spec/mongoid/extensions/integer_spec.rb +50 -64
- data/spec/mongoid/extensions/range_spec.rb +255 -54
- data/spec/mongoid/extensions/regexp_spec.rb +58 -33
- data/spec/mongoid/extensions/set_spec.rb +106 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -25
- data/spec/mongoid/extensions/symbol_spec.rb +18 -25
- data/spec/mongoid/extensions/time_spec.rb +634 -66
- data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
- data/spec/mongoid/factory_spec.rb +61 -1
- data/spec/mongoid/fields/localized_spec.rb +37 -12
- data/spec/mongoid/fields_spec.rb +364 -50
- data/spec/mongoid/findable_spec.rb +80 -15
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +39 -20
- data/spec/mongoid/interceptable_spec.rb +807 -27
- data/spec/mongoid/interceptable_spec_models.rb +235 -4
- data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
- data/spec/mongoid/mongoizable_spec.rb +285 -0
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +2 -2
- data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
- data/spec/mongoid/persistence_context_spec.rb +50 -1
- data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
- data/spec/mongoid/query_cache_spec.rb +0 -154
- data/spec/mongoid/reloadable_spec.rb +59 -2
- data/spec/mongoid/scopable_spec.rb +54 -16
- data/spec/mongoid/shardable_models.rb +14 -0
- data/spec/mongoid/shardable_spec.rb +157 -51
- data/spec/mongoid/stateful_spec.rb +28 -0
- data/spec/mongoid/timestamps_spec.rb +390 -0
- data/spec/mongoid/timestamps_spec_models.rb +67 -0
- data/spec/mongoid/touchable_spec.rb +116 -0
- data/spec/mongoid/touchable_spec_models.rb +12 -8
- data/spec/mongoid/traversable_spec.rb +4 -11
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +59 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/mongoid_spec.rb +1 -1
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/docker_runner.rb +7 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +10 -2
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +36 -40
- data/spec/shared/shlib/server.sh +32 -8
- data/spec/shared/shlib/set_env.sh +4 -4
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +46 -0
- data/spec/support/models/augmentation.rb +12 -0
- data/spec/support/models/band.rb +3 -0
- data/spec/support/models/catalog.rb +24 -0
- data/spec/support/models/circus.rb +3 -0
- data/spec/support/models/code.rb +2 -0
- data/spec/support/models/fanatic.rb +8 -0
- data/spec/support/models/implant.rb +9 -0
- data/spec/support/models/label.rb +2 -0
- data/spec/support/models/passport.rb +9 -0
- data/spec/support/models/person.rb +2 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -0
- data/spec/support/models/purse.rb +9 -0
- data/spec/support/models/registry.rb +1 -0
- data/spec/support/models/school.rb +14 -0
- data/spec/support/models/shield.rb +18 -0
- data/spec/support/models/student.rb +14 -0
- data/spec/support/models/weapon.rb +12 -0
- data.tar.gz.sig +4 -1
- metadata +682 -635
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/eager_load.rb +0 -23
- data/lib/mongoid/errors/invalid_value.rb +0 -17
- data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -57,7 +57,9 @@ module Mongoid
|
|
57
57
|
# @return [ Mongo::Collection ] The collection for this persistence
|
58
58
|
# context.
|
59
59
|
def collection(parent = nil)
|
60
|
-
parent ?
|
60
|
+
parent ?
|
61
|
+
parent.collection.with(client_options.except(:database, "database")) :
|
62
|
+
client[collection_name.to_sym]
|
61
63
|
end
|
62
64
|
|
63
65
|
# Get the collection name for this persistence context.
|
@@ -116,12 +118,27 @@ module Mongoid
|
|
116
118
|
#
|
117
119
|
# @param [ Object ] other The object to be compared with this one.
|
118
120
|
#
|
119
|
-
# @return [ true
|
121
|
+
# @return [ true | false ] Whether the two persistence contexts are equal.
|
120
122
|
def ==(other)
|
121
123
|
return false unless other.is_a?(PersistenceContext)
|
122
124
|
options == other.options
|
123
125
|
end
|
124
126
|
|
127
|
+
# Whether the client of the context can be reused later, and therefore should
|
128
|
+
# not be closed.
|
129
|
+
#
|
130
|
+
# If the persistence context is requested with :client option only, it means
|
131
|
+
# that the context should use a client configured in mongoid.yml.
|
132
|
+
# Such clients should not be closed when the context is cleared since they
|
133
|
+
# will be reused later.
|
134
|
+
#
|
135
|
+
# @return [ true | false ] True if client can be reused, otherwise false.
|
136
|
+
#
|
137
|
+
# @api private
|
138
|
+
def reusable_client?
|
139
|
+
@options.keys == [:client]
|
140
|
+
end
|
141
|
+
|
125
142
|
private
|
126
143
|
|
127
144
|
def set_options!(opts)
|
@@ -167,13 +184,12 @@ module Mongoid
|
|
167
184
|
# PersistenceContext.set(model)
|
168
185
|
#
|
169
186
|
# @param [ Object ] object The class or model instance.
|
170
|
-
# @param [ Hash
|
187
|
+
# @param [ Hash | Mongoid::PersistenceContext ] options_or_context The persistence
|
171
188
|
# options or a persistence context object.
|
172
189
|
#
|
173
190
|
# @return [ Mongoid::PersistenceContext ] The persistence context for the object.
|
174
191
|
def set(object, options_or_context)
|
175
|
-
|
176
|
-
existing_context = Thread.current[key]
|
192
|
+
existing_context = get_context(object)
|
177
193
|
existing_options = if existing_context
|
178
194
|
existing_context.options
|
179
195
|
else
|
@@ -184,7 +200,7 @@ module Mongoid
|
|
184
200
|
end
|
185
201
|
new_options = existing_options.merge(options_or_context)
|
186
202
|
context = PersistenceContext.new(object, new_options)
|
187
|
-
|
203
|
+
store_context(object, context)
|
188
204
|
end
|
189
205
|
|
190
206
|
# Get the persistence context for a particular class or model instance.
|
@@ -196,7 +212,7 @@ module Mongoid
|
|
196
212
|
#
|
197
213
|
# @return [ Mongoid::PersistenceContext ] The persistence context for the object.
|
198
214
|
def get(object)
|
199
|
-
|
215
|
+
get_context(object)
|
200
216
|
end
|
201
217
|
|
202
218
|
# Clear the persistence context for a particular class or model instance.
|
@@ -204,18 +220,55 @@ module Mongoid
|
|
204
220
|
# @example Clear the persistence context for a class or model instance.
|
205
221
|
# PersistenceContext.clear(model)
|
206
222
|
#
|
207
|
-
# @param [ Class
|
223
|
+
# @param [ Class | Object ] object The class or model instance.
|
208
224
|
# @param [ Mongo::Cluster ] cluster The original cluster before this context was used.
|
209
225
|
# @param [ Mongoid::PersistenceContext ] original_context The original persistence
|
210
226
|
# context that was set before this context was used.
|
211
227
|
def clear(object, cluster = nil, original_context = nil)
|
212
228
|
if context = get(object)
|
213
229
|
unless cluster.nil? || context.cluster.equal?(cluster)
|
214
|
-
context.client.close
|
230
|
+
context.client.close unless context.reusable_client?
|
215
231
|
end
|
216
232
|
end
|
217
233
|
ensure
|
218
|
-
|
234
|
+
store_context(object, original_context)
|
235
|
+
end
|
236
|
+
|
237
|
+
private
|
238
|
+
|
239
|
+
# Key to store persistence contexts in the thread local storage.
|
240
|
+
#
|
241
|
+
# @api private
|
242
|
+
PERSISTENCE_CONTEXT_KEY = :"[mongoid]:persistence_context"
|
243
|
+
|
244
|
+
# Get the persistence context for a given object from the thread local
|
245
|
+
# storage.
|
246
|
+
#
|
247
|
+
# @param [ Object ] object Object to get the persistance context for.
|
248
|
+
#
|
249
|
+
# @return [ Mongoid::PersistenceContext | nil ] The persistence context
|
250
|
+
# for the object if previously stored, otherwise nil.
|
251
|
+
#
|
252
|
+
# @api private
|
253
|
+
def get_context(object)
|
254
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY] ||= {}
|
255
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY][object.object_id]
|
256
|
+
end
|
257
|
+
|
258
|
+
# Store persistence context for a given object in the thread local
|
259
|
+
# storage.
|
260
|
+
#
|
261
|
+
# @param [ Object ] object Object to store the persistance context for.
|
262
|
+
# @param [ Mongoid::PersistenceContext ] context Context to store
|
263
|
+
#
|
264
|
+
# @api private
|
265
|
+
def store_context(object, context)
|
266
|
+
if context.nil?
|
267
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY]&.delete(object.object_id)
|
268
|
+
else
|
269
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY] ||= {}
|
270
|
+
Thread.current[PERSISTENCE_CONTEXT_KEY][object.object_id] = context
|
271
|
+
end
|
219
272
|
end
|
220
273
|
end
|
221
274
|
end
|
data/lib/mongoid/query_cache.rb
CHANGED
@@ -4,28 +4,8 @@ module Mongoid
|
|
4
4
|
|
5
5
|
# A cache of database queries on a per-request basis.
|
6
6
|
module QueryCache
|
7
|
-
# @api private
|
8
|
-
LEGACY_WARNING = <<~DOC
|
9
|
-
You are using the legacy Mongoid query cache which has known issues.
|
10
|
-
Please upgrade the `mongo' gem to at least 2.14.0 to use the improved driver query cache.
|
11
|
-
Refer to: https://docs.mongodb.com/mongoid/current/tutorials/mongoid-queries/#the-improved-driver-query-cache
|
12
|
-
DOC
|
13
7
|
|
14
8
|
class << self
|
15
|
-
# Get the cached queries.
|
16
|
-
#
|
17
|
-
# @example Get the cached queries from the current thread.
|
18
|
-
# QueryCache.cache_table
|
19
|
-
#
|
20
|
-
# @return [ Hash ] The hash of cached queries.
|
21
|
-
# @api private
|
22
|
-
def cache_table
|
23
|
-
if defined?(Mongo::QueryCache)
|
24
|
-
raise NotImplementedError, "Mongoid does not expose driver's query cache table"
|
25
|
-
else
|
26
|
-
Thread.current["[mongoid]:query_cache"] ||= {}
|
27
|
-
end
|
28
|
-
end
|
29
9
|
|
30
10
|
# Clear the query cache.
|
31
11
|
#
|
@@ -34,11 +14,7 @@ module Mongoid
|
|
34
14
|
#
|
35
15
|
# @return [ nil ] Always nil.
|
36
16
|
def clear_cache
|
37
|
-
|
38
|
-
Mongo::QueryCache.clear
|
39
|
-
else
|
40
|
-
Thread.current["[mongoid]:query_cache"] = nil
|
41
|
-
end
|
17
|
+
Mongo::QueryCache.clear
|
42
18
|
end
|
43
19
|
|
44
20
|
# Set whether the cache is enabled.
|
@@ -46,13 +22,9 @@ module Mongoid
|
|
46
22
|
# @example Set if the cache is enabled.
|
47
23
|
# QueryCache.enabled = true
|
48
24
|
#
|
49
|
-
# @param [ true
|
25
|
+
# @param [ true | false ] value The enabled value.
|
50
26
|
def enabled=(value)
|
51
|
-
|
52
|
-
Mongo::QueryCache.enabled = value
|
53
|
-
else
|
54
|
-
Thread.current["[mongoid]:query_cache:enabled"] = value
|
55
|
-
end
|
27
|
+
Mongo::QueryCache.enabled = value
|
56
28
|
end
|
57
29
|
|
58
30
|
# Is the query cache enabled on the current thread?
|
@@ -60,13 +32,9 @@ module Mongoid
|
|
60
32
|
# @example Is the query cache enabled?
|
61
33
|
# QueryCache.enabled?
|
62
34
|
#
|
63
|
-
# @return [ true
|
35
|
+
# @return [ true | false ] If the cache is enabled.
|
64
36
|
def enabled?
|
65
|
-
|
66
|
-
Mongo::QueryCache.enabled?
|
67
|
-
else
|
68
|
-
!!Thread.current["[mongoid]:query_cache:enabled"]
|
69
|
-
end
|
37
|
+
Mongo::QueryCache.enabled?
|
70
38
|
end
|
71
39
|
|
72
40
|
# Execute the block while using the query cache.
|
@@ -76,21 +44,7 @@ module Mongoid
|
|
76
44
|
#
|
77
45
|
# @return [ Object ] The result of the block.
|
78
46
|
def cache(&block)
|
79
|
-
|
80
|
-
Mongo::QueryCache.cache(&block)
|
81
|
-
else
|
82
|
-
@legacy_query_cache_warned ||= begin
|
83
|
-
Mongoid.logger.warn(LEGACY_WARNING)
|
84
|
-
true
|
85
|
-
end
|
86
|
-
enabled = QueryCache.enabled?
|
87
|
-
QueryCache.enabled = true
|
88
|
-
begin
|
89
|
-
yield
|
90
|
-
ensure
|
91
|
-
QueryCache.enabled = enabled
|
92
|
-
end
|
93
|
-
end
|
47
|
+
Mongo::QueryCache.cache(&block)
|
94
48
|
end
|
95
49
|
|
96
50
|
# Execute the block with the query cache disabled.
|
@@ -100,217 +54,11 @@ module Mongoid
|
|
100
54
|
#
|
101
55
|
# @return [ Object ] The result of the block.
|
102
56
|
def uncached(&block)
|
103
|
-
|
104
|
-
Mongo::QueryCache.uncached(&block)
|
105
|
-
else
|
106
|
-
enabled = QueryCache.enabled?
|
107
|
-
QueryCache.enabled = false
|
108
|
-
begin
|
109
|
-
yield
|
110
|
-
ensure
|
111
|
-
QueryCache.enabled = enabled
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
if defined?(Mongo::QueryCache::Middleware)
|
118
|
-
Middleware = Mongo::QueryCache::Middleware
|
119
|
-
else
|
120
|
-
# The middleware to be added to a rack application in order to activate the
|
121
|
-
# query cache.
|
122
|
-
class Middleware
|
123
|
-
|
124
|
-
# Instantiate the middleware.
|
125
|
-
#
|
126
|
-
# @example Create the new middleware.
|
127
|
-
# Middleware.new(app)
|
128
|
-
#
|
129
|
-
# @param [ Object ] app The rack application stack.
|
130
|
-
def initialize(app)
|
131
|
-
@app = app
|
132
|
-
end
|
133
|
-
|
134
|
-
# Execute the request, wrapping in a query cache.
|
135
|
-
#
|
136
|
-
# @example Execute the request.
|
137
|
-
# middleware.call(env)
|
138
|
-
#
|
139
|
-
# @param [ Object ] env The environment.
|
140
|
-
#
|
141
|
-
# @return [ Object ] The result of the call.
|
142
|
-
def call(env)
|
143
|
-
QueryCache.cache do
|
144
|
-
@app.call(env)
|
145
|
-
end
|
146
|
-
ensure
|
147
|
-
QueryCache.clear_cache
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
# A Cursor that attempts to load documents from memory first before hitting
|
153
|
-
# the database if the same query has already been executed.
|
154
|
-
# @deprecated This class is only used with driver versions 2.13 and lower.
|
155
|
-
class CachedCursor < Mongo::Cursor
|
156
|
-
|
157
|
-
# We iterate over the cached documents if they exist already in the
|
158
|
-
# cursor otherwise proceed as normal.
|
159
|
-
#
|
160
|
-
# @example Iterate over the documents.
|
161
|
-
# cursor.each do |doc|
|
162
|
-
# # ...
|
163
|
-
# end
|
164
|
-
def each
|
165
|
-
if @cached_documents
|
166
|
-
@cached_documents.each do |doc|
|
167
|
-
yield doc
|
168
|
-
end
|
169
|
-
else
|
170
|
-
super
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
# Get a human-readable string representation of +Cursor+.
|
175
|
-
#
|
176
|
-
# @example Inspect the cursor.
|
177
|
-
# cursor.inspect
|
178
|
-
#
|
179
|
-
# @return [ String ] A string representation of a +Cursor+ instance.
|
180
|
-
def inspect
|
181
|
-
"#<Mongoid::QueryCache::CachedCursor:0x#{object_id} @view=#{@view.inspect}>"
|
182
|
-
end
|
183
|
-
|
184
|
-
private
|
185
|
-
|
186
|
-
def process(result)
|
187
|
-
documents = super
|
188
|
-
if @cursor_id.zero? && !@after_first_batch
|
189
|
-
@cached_documents ||= []
|
190
|
-
@cached_documents.concat(documents)
|
191
|
-
end
|
192
|
-
@after_first_batch = true
|
193
|
-
documents
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
# Included to add behavior for clearing out the query cache on certain
|
198
|
-
# operations.
|
199
|
-
# @deprecated This module is only used with driver versions 2.13 and lower.
|
200
|
-
module Base
|
201
|
-
|
202
|
-
def alias_query_cache_clear(*method_names)
|
203
|
-
method_names.each do |method_name|
|
204
|
-
define_method("#{method_name}_with_clear_cache") do |*args|
|
205
|
-
QueryCache.clear_cache
|
206
|
-
send("#{method_name}_without_clear_cache", *args)
|
207
|
-
end
|
208
|
-
|
209
|
-
alias_method "#{method_name}_without_clear_cache", method_name
|
210
|
-
alias_method method_name, "#{method_name}_with_clear_cache"
|
211
|
-
end
|
57
|
+
Mongo::QueryCache.uncached(&block)
|
212
58
|
end
|
213
59
|
end
|
214
60
|
|
215
|
-
|
216
|
-
# cached cursor or a regular cursor on iteration.
|
217
|
-
# @deprecated This module is only used with driver versions 2.13 and lower.
|
218
|
-
module View
|
219
|
-
extend ActiveSupport::Concern
|
220
|
-
|
221
|
-
included do
|
222
|
-
extend QueryCache::Base
|
223
|
-
alias_query_cache_clear :delete_one,
|
224
|
-
:delete_many,
|
225
|
-
:update_one,
|
226
|
-
:update_many,
|
227
|
-
:replace_one,
|
228
|
-
:find_one_and_delete,
|
229
|
-
:find_one_and_replace,
|
230
|
-
:find_one_and_update
|
231
|
-
end
|
232
|
-
|
233
|
-
# Override the default enumeration to handle if the cursor can be cached
|
234
|
-
# or not.
|
235
|
-
#
|
236
|
-
# @example Iterate over the view.
|
237
|
-
# view.each do |doc|
|
238
|
-
# # ...
|
239
|
-
# end
|
240
|
-
def each
|
241
|
-
if system_collection? || !QueryCache.enabled? || (respond_to?(:write?, true) && write?)
|
242
|
-
super
|
243
|
-
else
|
244
|
-
@cursor = nil
|
245
|
-
unless @cursor = cached_cursor
|
246
|
-
session = client.send(:get_session, @options)
|
247
|
-
read_with_retry(session, server_selector) do |server|
|
248
|
-
result = send_initial_query(server, session)
|
249
|
-
if result.cursor_id == 0 || result.cursor_id.nil?
|
250
|
-
@cursor = CachedCursor.new(view, result, server, session: session)
|
251
|
-
QueryCache.cache_table[cache_key] = @cursor
|
252
|
-
else
|
253
|
-
@cursor = Mongo::Cursor.new(view, result, server, session: session)
|
254
|
-
end
|
255
|
-
end
|
256
|
-
end
|
257
|
-
if block_given?
|
258
|
-
if limit
|
259
|
-
@cursor.to_a[0...limit].each do |doc|
|
260
|
-
yield doc
|
261
|
-
end
|
262
|
-
else
|
263
|
-
@cursor.each do |doc|
|
264
|
-
yield doc
|
265
|
-
end
|
266
|
-
end
|
267
|
-
else
|
268
|
-
@cursor.to_enum
|
269
|
-
end
|
270
|
-
end
|
271
|
-
end
|
272
|
-
|
273
|
-
private
|
274
|
-
|
275
|
-
def cached_cursor
|
276
|
-
if limit
|
277
|
-
key = [ collection.namespace, selector, nil, skip, sort, projection, collation ]
|
278
|
-
cursor = QueryCache.cache_table[key]
|
279
|
-
end
|
280
|
-
cursor || QueryCache.cache_table[cache_key]
|
281
|
-
end
|
282
|
-
|
283
|
-
def cache_key
|
284
|
-
[ collection.namespace, selector, limit, skip, sort, projection, collation ]
|
285
|
-
end
|
286
|
-
|
287
|
-
def system_collection?
|
288
|
-
collection.name.start_with?('system.')
|
289
|
-
end
|
290
|
-
end
|
291
|
-
|
292
|
-
# Adds behavior to the query cache for collections.
|
293
|
-
# @deprecated This module is only used with driver versions 2.13 and lower.
|
294
|
-
module Collection
|
295
|
-
extend ActiveSupport::Concern
|
296
|
-
|
297
|
-
included do
|
298
|
-
extend QueryCache::Base
|
299
|
-
alias_query_cache_clear :insert_one, :insert_many
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
# Bypass the query cache when reloading a document.
|
304
|
-
module Document
|
305
|
-
def reload
|
306
|
-
QueryCache.uncached { super }
|
307
|
-
end
|
308
|
-
end
|
61
|
+
Middleware = Mongo::QueryCache::Middleware
|
309
62
|
end
|
310
63
|
end
|
311
64
|
|
312
|
-
unless defined?(Mongo::QueryCache)
|
313
|
-
Mongo::Collection.__send__(:include, Mongoid::QueryCache::Collection)
|
314
|
-
Mongo::Collection::View.__send__(:include, Mongoid::QueryCache::View)
|
315
|
-
Mongoid::Document.__send__(:include, Mongoid::QueryCache::Document)
|
316
|
-
end
|
data/lib/mongoid/reloadable.rb
CHANGED
@@ -16,18 +16,20 @@ module Mongoid
|
|
16
16
|
#
|
17
17
|
# @return [ Document ] The document, reloaded.
|
18
18
|
def reload
|
19
|
-
if @atomic_selector
|
20
|
-
# Clear atomic_selector cache for sharded clusters. MONGOID-5076
|
21
|
-
remove_instance_variable('@atomic_selector')
|
22
|
-
end
|
23
|
-
|
24
19
|
reloaded = _reload
|
25
20
|
if Mongoid.raise_not_found_error && (reloaded.nil? || reloaded.empty?)
|
26
|
-
|
21
|
+
shard_keys = atomic_selector.with_indifferent_access.slice(*shard_key_fields, :_id)
|
22
|
+
raise Errors::DocumentNotFound.new(self.class, _id, shard_keys)
|
27
23
|
end
|
24
|
+
|
25
|
+
reset_atomic_updates!
|
26
|
+
|
28
27
|
@attributes = reloaded
|
29
|
-
@attributes_before_type_cast =
|
30
|
-
changed_attributes
|
28
|
+
@attributes_before_type_cast = @attributes.dup
|
29
|
+
@changed_attributes = {}
|
30
|
+
@previous_changes = {}
|
31
|
+
@previous_attributes = {}
|
32
|
+
@previously_new_record = false
|
31
33
|
reset_readonly
|
32
34
|
apply_defaults
|
33
35
|
reload_relations
|
data/lib/mongoid/scopable.rb
CHANGED
@@ -23,7 +23,7 @@ module Mongoid
|
|
23
23
|
# @example Apply the default scoping.
|
24
24
|
# document.apply_default_scoping
|
25
25
|
#
|
26
|
-
# @return [ true
|
26
|
+
# @return [ true | false ] If default scoping was applied.
|
27
27
|
def apply_default_scoping
|
28
28
|
if default_scoping
|
29
29
|
default_scoping.call.selector.each do |field, value|
|
@@ -74,7 +74,7 @@ module Mongoid
|
|
74
74
|
# default_scope ->{ where(active: true) }
|
75
75
|
# end
|
76
76
|
#
|
77
|
-
# @param [ Proc
|
77
|
+
# @param [ Proc | Criteria ] value The default scope.
|
78
78
|
#
|
79
79
|
# @raise [ Errors::InvalidScope ] If the scope is not a proc or criteria.
|
80
80
|
#
|
@@ -90,7 +90,7 @@ module Mongoid
|
|
90
90
|
# @example Can the default scope be applied?
|
91
91
|
# Band.default_scopable?
|
92
92
|
#
|
93
|
-
# @return [ true
|
93
|
+
# @return [ true | false ] If the default scope can be applied.
|
94
94
|
def default_scopable?
|
95
95
|
default_scoping? && !Threaded.without_default_scope?(self)
|
96
96
|
end
|
@@ -168,9 +168,11 @@ module Mongoid
|
|
168
168
|
# Band.where(name: "Depeche Mode")
|
169
169
|
# end
|
170
170
|
#
|
171
|
-
# @note This will force the default scope to be removed
|
171
|
+
# @note This will force the default scope to be removed, but will not
|
172
|
+
# remove scopes declared with ``.with_scope``. This will be changed
|
173
|
+
# in Mongoid 9.
|
172
174
|
#
|
173
|
-
# @return [ Criteria
|
175
|
+
# @return [ Criteria | Object ] The unscoped criteria or result of the
|
174
176
|
# block.
|
175
177
|
def unscoped
|
176
178
|
if block_given?
|
@@ -240,7 +242,7 @@ module Mongoid
|
|
240
242
|
# @example Warn or raise error if name exists.
|
241
243
|
# Model.valid_scope_name?("test")
|
242
244
|
#
|
243
|
-
# @param [ String
|
245
|
+
# @param [ String | Symbol ] name The name of the scope.
|
244
246
|
#
|
245
247
|
# @raise [ Errors::ScopeOverwrite ] If the name exists and configured to
|
246
248
|
# raise the error.
|
@@ -249,12 +251,12 @@ module Mongoid
|
|
249
251
|
if Mongoid.scope_overwrite_exception
|
250
252
|
raise Errors::ScopeOverwrite.new(self.name, name)
|
251
253
|
else
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
254
|
+
Mongoid.logger.warn(
|
255
|
+
"Creating scope :#{name} which conflicts with #{self.name}.#{name}. " +
|
256
|
+
"Calls to `Mongoid::Criteria##{name}` will delegate to " +
|
257
|
+
"`Mongoid::Criteria##{name}` for criteria with klass #{self.name} " +
|
258
|
+
"and will ignore the declared scope."
|
259
|
+
)
|
258
260
|
end
|
259
261
|
end
|
260
262
|
end
|
@@ -289,15 +291,17 @@ module Mongoid
|
|
289
291
|
# @return [ Method ] The defined method.
|
290
292
|
def define_scope_method(name)
|
291
293
|
singleton_class.class_eval do
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
294
|
+
ruby2_keywords(
|
295
|
+
define_method(name) do |*args|
|
296
|
+
scoping = _declared_scopes[name]
|
297
|
+
scope = instance_exec(*args, &scoping[:scope])
|
298
|
+
extension = scoping[:extension]
|
299
|
+
to_merge = scope || queryable
|
300
|
+
criteria = to_merge.empty_and_chainable? ? to_merge : with_default_scope.merge(to_merge)
|
301
|
+
criteria.extend(extension)
|
302
|
+
criteria
|
303
|
+
end
|
304
|
+
)
|
301
305
|
end
|
302
306
|
end
|
303
307
|
|
@@ -309,7 +313,7 @@ module Mongoid
|
|
309
313
|
# @example Process the default scope.
|
310
314
|
# Model.process_default_scope(value)
|
311
315
|
#
|
312
|
-
# @param [ Criteria
|
316
|
+
# @param [ Criteria | Proc ] value The default scope value.
|
313
317
|
def process_default_scope(value)
|
314
318
|
if existing = default_scoping
|
315
319
|
->{ existing.call.merge(value.to_proc.call) }
|
data/lib/mongoid/selectable.rb
CHANGED
@@ -15,8 +15,7 @@ module Mongoid
|
|
15
15
|
#
|
16
16
|
# @return [ Hash ] The document's selector.
|
17
17
|
def atomic_selector
|
18
|
-
|
19
|
-
(embedded? ? embedded_atomic_selector : root_atomic_selector_in_db)
|
18
|
+
embedded? ? embedded_atomic_selector : root_atomic_selector_in_db
|
20
19
|
end
|
21
20
|
|
22
21
|
private
|
data/lib/mongoid/serializable.rb
CHANGED
@@ -33,10 +33,14 @@ module Mongoid
|
|
33
33
|
#
|
34
34
|
# @param [ Hash ] options The options to pass.
|
35
35
|
#
|
36
|
-
# @option options [ Symbol
|
37
|
-
#
|
38
|
-
# @option options [ Symbol
|
39
|
-
#
|
36
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :except
|
37
|
+
# Do not include these field(s).
|
38
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :include
|
39
|
+
# Which association(s) to include.
|
40
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :only
|
41
|
+
# Limit the field(s) to only these.
|
42
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :methods
|
43
|
+
# What methods to include.
|
40
44
|
#
|
41
45
|
# @return [ Hash ] The document, ready to be serialized.
|
42
46
|
def serializable_hash(options = nil)
|
@@ -137,7 +141,7 @@ module Mongoid
|
|
137
141
|
# @example Get the association names.
|
138
142
|
# document.relation_names(:include => [ :addresses ])
|
139
143
|
#
|
140
|
-
# @param [ Hash
|
144
|
+
# @param [ Hash | Symbol | Array<Symbol> ] inclusions The inclusions.
|
141
145
|
#
|
142
146
|
# @return [ Array<Symbol> ] The names of the included associations.
|
143
147
|
def relation_names(inclusions)
|
@@ -150,7 +154,7 @@ module Mongoid
|
|
150
154
|
# @example Get the association options.
|
151
155
|
# document.relation_names(:include => [ :addresses ])
|
152
156
|
#
|
153
|
-
# @param [ Hash
|
157
|
+
# @param [ Hash | Symbol | Array<Symbol> ] inclusions The inclusions.
|
154
158
|
# @param [ Hash ] options The options.
|
155
159
|
# @param [ Symbol ] name The name of the association.
|
156
160
|
#
|