mongoid 7.5.0 → 8.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
- checksums.yaml.gz.sig +0 -0
- data/README.md +3 -3
- data/lib/config/locales/en.yml +47 -30
- 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 +53 -13
- 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 +50 -28
- 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 +2 -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 +66 -13
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -28
- data/lib/mongoid/association/referenced/has_many/proxy.rb +24 -18
- 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/paths/embedded/many.rb +19 -0
- data/lib/mongoid/attributes/dynamic.rb +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +10 -3
- 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/changeable.rb +42 -7
- 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/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +27 -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 +59 -32
- data/lib/mongoid/contextual/mongo.rb +184 -256
- data/lib/mongoid/contextual/none.rb +34 -16
- 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 +2 -15
- 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 +0 -16
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
- 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 +3 -3
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -2
- 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/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 +5 -27
- data/lib/mongoid/criteria/queryable/selector.rb +92 -7
- data/lib/mongoid/criteria/queryable/smash.rb +40 -7
- data/lib/mongoid/criteria/queryable.rb +12 -7
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria.rb +15 -37
- data/lib/mongoid/deprecable.rb +36 -0
- data/lib/mongoid/deprecation.rb +25 -0
- data/lib/mongoid/document.rb +98 -36
- data/lib/mongoid/equality.rb +12 -12
- data/lib/mongoid/errors/document_not_found.rb +10 -6
- 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 +29 -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 +4 -5
- data/lib/mongoid/extensions/hash.rb +13 -6
- data/lib/mongoid/extensions/integer.rb +4 -5
- 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 +42 -7
- data/lib/mongoid/fields/foreign_key.rb +11 -4
- data/lib/mongoid/fields/localized.rb +2 -2
- data/lib/mongoid/fields/standard.rb +7 -7
- data/lib/mongoid/fields/validators/macro.rb +3 -9
- data/lib/mongoid/fields.rb +57 -15
- data/lib/mongoid/findable.rb +28 -22
- data/lib/mongoid/indexable/specification.rb +2 -2
- data/lib/mongoid/indexable/validators/options.rb +6 -2
- data/lib/mongoid/interceptable.rb +73 -13
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +12 -7
- 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 +22 -5
- data/lib/mongoid/query_cache.rb +8 -260
- data/lib/mongoid/railties/controller_runtime.rb +1 -1
- data/lib/mongoid/reloadable.rb +7 -3
- data/lib/mongoid/scopable.rb +17 -15
- data/lib/mongoid/selectable.rb +1 -2
- data/lib/mongoid/serializable.rb +10 -6
- 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 +9 -9
- 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 +4 -3
- 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 +3 -4
- data/lib/mongoid.rb +1 -0
- 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 +226 -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 -15
- 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 +219 -8
- data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -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 +67 -4
- 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 +2 -56
- data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -13
- 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 +524 -27
- data/spec/mongoid/changeable_spec.rb +130 -13
- data/spec/mongoid/clients/factory_spec.rb +23 -30
- data/spec/mongoid/clients/sessions_spec.rb +0 -38
- data/spec/mongoid/clients_spec.rb +32 -2
- data/spec/mongoid/config_spec.rb +58 -13
- 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 +521 -14
- data/spec/mongoid/contextual/mongo_spec.rb +564 -394
- data/spec/mongoid/contextual/none_spec.rb +11 -19
- 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/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 +0 -484
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
- data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
- data/spec/mongoid/criteria_spec.rb +469 -1201
- data/spec/mongoid/document_fields_spec.rb +173 -24
- data/spec/mongoid/document_spec.rb +32 -41
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
- 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 +697 -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 +48 -76
- data/spec/mongoid/extensions/hash_spec.rb +30 -0
- data/spec/mongoid/extensions/integer_spec.rb +45 -66
- 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_spec.rb +321 -50
- data/spec/mongoid/findable_spec.rb +64 -29
- data/spec/mongoid/indexable/specification_spec.rb +2 -2
- data/spec/mongoid/indexable_spec.rb +39 -20
- data/spec/mongoid/interceptable_spec.rb +584 -5
- 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 +35 -2
- data/spec/mongoid/scopable_spec.rb +54 -16
- data/spec/mongoid/shardable_spec.rb +14 -0
- 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 +60 -31
- data/spec/mongoid/warnings_spec.rb +35 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
- data/spec/rails/mongoid_spec.rb +4 -16
- data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
- data/spec/support/constraints.rb +24 -0
- data/spec/support/macros.rb +30 -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/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 +1 -0
- data/spec/support/models/player.rb +2 -0
- data/spec/support/models/powerup.rb +12 -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 +0 -0
- metadata +49 -13
- 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
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
@@ -23,11 +23,15 @@ module Mongoid
|
|
23
23
|
|
24
24
|
reloaded = _reload
|
25
25
|
if Mongoid.raise_not_found_error && (reloaded.nil? || reloaded.empty?)
|
26
|
-
|
26
|
+
shard_keys = atomic_selector.with_indifferent_access.slice(*shard_key_fields, :_id)
|
27
|
+
raise Errors::DocumentNotFound.new(self.class, _id, shard_keys)
|
27
28
|
end
|
28
29
|
@attributes = reloaded
|
29
|
-
@attributes_before_type_cast =
|
30
|
-
changed_attributes
|
30
|
+
@attributes_before_type_cast = @attributes.dup
|
31
|
+
@changed_attributes = {}
|
32
|
+
@previous_changes = {}
|
33
|
+
@previous_attributes = {}
|
34
|
+
@previously_new_record = false
|
31
35
|
reset_readonly
|
32
36
|
apply_defaults
|
33
37
|
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
|
@@ -170,7 +170,7 @@ module Mongoid
|
|
170
170
|
#
|
171
171
|
# @note This will force the default scope to be removed.
|
172
172
|
#
|
173
|
-
# @return [ Criteria
|
173
|
+
# @return [ Criteria | Object ] The unscoped criteria or result of the
|
174
174
|
# block.
|
175
175
|
def unscoped
|
176
176
|
if block_given?
|
@@ -240,7 +240,7 @@ module Mongoid
|
|
240
240
|
# @example Warn or raise error if name exists.
|
241
241
|
# Model.valid_scope_name?("test")
|
242
242
|
#
|
243
|
-
# @param [ String
|
243
|
+
# @param [ String | Symbol ] name The name of the scope.
|
244
244
|
#
|
245
245
|
# @raise [ Errors::ScopeOverwrite ] If the name exists and configured to
|
246
246
|
# raise the error.
|
@@ -289,15 +289,17 @@ module Mongoid
|
|
289
289
|
# @return [ Method ] The defined method.
|
290
290
|
def define_scope_method(name)
|
291
291
|
singleton_class.class_eval do
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
292
|
+
ruby2_keywords(
|
293
|
+
define_method(name) do |*args|
|
294
|
+
scoping = _declared_scopes[name]
|
295
|
+
scope = instance_exec(*args, &scoping[:scope])
|
296
|
+
extension = scoping[:extension]
|
297
|
+
to_merge = scope || queryable
|
298
|
+
criteria = to_merge.empty_and_chainable? ? to_merge : with_default_scope.merge(to_merge)
|
299
|
+
criteria.extend(extension)
|
300
|
+
criteria
|
301
|
+
end
|
302
|
+
)
|
301
303
|
end
|
302
304
|
end
|
303
305
|
|
@@ -309,7 +311,7 @@ module Mongoid
|
|
309
311
|
# @example Process the default scope.
|
310
312
|
# Model.process_default_scope(value)
|
311
313
|
#
|
312
|
-
# @param [ Criteria
|
314
|
+
# @param [ Criteria | Proc ] value The default scope value.
|
313
315
|
def process_default_scope(value)
|
314
316
|
if existing = default_scoping
|
315
317
|
->{ 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
|
#
|
data/lib/mongoid/stateful.rb
CHANGED
@@ -6,7 +6,15 @@ module Mongoid
|
|
6
6
|
# document can transition through.
|
7
7
|
module Stateful
|
8
8
|
|
9
|
-
attr_writer :destroyed, :flagged_for_destroy, :
|
9
|
+
attr_writer :destroyed, :flagged_for_destroy, :previously_new_record
|
10
|
+
|
11
|
+
def new_record=(new_value)
|
12
|
+
@new_record ||= false
|
13
|
+
if @new_record && !new_value
|
14
|
+
@previously_new_record = true
|
15
|
+
end
|
16
|
+
@new_record = new_value
|
17
|
+
end
|
10
18
|
|
11
19
|
# Returns true if the +Document+ has not been persisted to the database,
|
12
20
|
# false if it has. This is determined by the variable @new_record
|
@@ -15,29 +23,47 @@ module Mongoid
|
|
15
23
|
# @example Is the document new?
|
16
24
|
# person.new_record?
|
17
25
|
#
|
18
|
-
# @return [ true
|
26
|
+
# @return [ true | false ] True if new, false if not.
|
19
27
|
def new_record?
|
20
28
|
@new_record ||= false
|
21
29
|
end
|
22
30
|
|
31
|
+
# Returns true if this document was just created -- that is, prior to the last
|
32
|
+
# save, the object didn't exist in the database and new_record? would have
|
33
|
+
# returned true.
|
34
|
+
#
|
35
|
+
# @return [ true | false ] True if was just created, false if not.
|
36
|
+
def previously_new_record?
|
37
|
+
@previously_new_record ||= false
|
38
|
+
end
|
39
|
+
|
23
40
|
# Checks if the document has been saved to the database. Returns false
|
24
41
|
# if the document has been destroyed.
|
25
42
|
#
|
26
43
|
# @example Is the document persisted?
|
27
44
|
# person.persisted?
|
28
45
|
#
|
29
|
-
# @return [ true
|
46
|
+
# @return [ true | false ] True if persisted, false if not.
|
30
47
|
def persisted?
|
31
48
|
!new_record? && !destroyed?
|
32
49
|
end
|
33
50
|
|
51
|
+
# Checks if the document was previously saved to the database
|
52
|
+
# but now it has been deleted.
|
53
|
+
#
|
54
|
+
# @return [ true | false ] True if was persisted but now destroyed,
|
55
|
+
# otherwise false.
|
56
|
+
def previously_persisted?
|
57
|
+
!new_record? && destroyed?
|
58
|
+
end
|
59
|
+
|
34
60
|
# Returns whether or not the document has been flagged for deletion, but
|
35
61
|
# not destroyed yet. Used for atomic pulls of child documents.
|
36
62
|
#
|
37
63
|
# @example Is the document flagged?
|
38
64
|
# document.flagged_for_destroy?
|
39
65
|
#
|
40
|
-
# @return [ true
|
66
|
+
# @return [ true | false ] If the document is flagged.
|
41
67
|
def flagged_for_destroy?
|
42
68
|
@flagged_for_destroy ||= false
|
43
69
|
end
|
@@ -51,7 +77,7 @@ module Mongoid
|
|
51
77
|
# @example Is the document destroyed?
|
52
78
|
# person.destroyed?
|
53
79
|
#
|
54
|
-
# @return [ true
|
80
|
+
# @return [ true | false ] True if destroyed, false if not.
|
55
81
|
def destroyed?
|
56
82
|
@destroyed ||= false
|
57
83
|
end
|
@@ -61,7 +87,7 @@ module Mongoid
|
|
61
87
|
# @example Is this pushable?
|
62
88
|
# person.pushable?
|
63
89
|
#
|
64
|
-
# @return [ true
|
90
|
+
# @return [ true | false ] Is the document new and embedded?
|
65
91
|
def pushable?
|
66
92
|
new_record? &&
|
67
93
|
embedded_many? &&
|
@@ -74,7 +100,7 @@ module Mongoid
|
|
74
100
|
# @example Is the document readonly?
|
75
101
|
# document.readonly?
|
76
102
|
#
|
77
|
-
# @return [ true
|
103
|
+
# @return [ true | false ] If the document is readonly.
|
78
104
|
def readonly?
|
79
105
|
__selected_fields != nil
|
80
106
|
end
|
@@ -84,7 +110,7 @@ module Mongoid
|
|
84
110
|
# @example Is this settable?
|
85
111
|
# person.settable?
|
86
112
|
#
|
87
|
-
# @return [ true
|
113
|
+
# @return [ true | false ] Is this document a new embeds one?
|
88
114
|
def settable?
|
89
115
|
new_record? && embedded_one? && _parent.persisted?
|
90
116
|
end
|
@@ -94,7 +120,7 @@ module Mongoid
|
|
94
120
|
# @example Is the document updateable?
|
95
121
|
# person.updateable?
|
96
122
|
#
|
97
|
-
# @return [ true
|
123
|
+
# @return [ true | false ] If the document is changed and persisted.
|
98
124
|
def updateable?
|
99
125
|
persisted? && changed?
|
100
126
|
end
|
@@ -36,7 +36,6 @@ module Mongoid
|
|
36
36
|
# Mongoid::Tasks::Database.undefined_indexes
|
37
37
|
#
|
38
38
|
# @return [ Array<Hash> ] The list of undefined indexes by model.
|
39
|
-
#
|
40
39
|
def undefined_indexes(models = ::Mongoid.models)
|
41
40
|
undefined_by_model = {}
|
42
41
|
|
@@ -90,7 +89,6 @@ module Mongoid
|
|
90
89
|
# Mongoid::Tasks::Database.remove_indexes
|
91
90
|
#
|
92
91
|
# @return [ Array<Class> ] The un-indexed models.
|
93
|
-
#
|
94
92
|
def remove_indexes(models = ::Mongoid.models)
|
95
93
|
models.each do |model|
|
96
94
|
next if model.embedded?
|
@@ -37,7 +37,7 @@ module Mongoid
|
|
37
37
|
# @example Is the current thread in assigning mode?
|
38
38
|
# proxy._assigning?
|
39
39
|
#
|
40
|
-
# @return [ true
|
40
|
+
# @return [ true | false ] If the thread is assigning.
|
41
41
|
def _assigning?
|
42
42
|
Threaded.executing?(ASSIGN)
|
43
43
|
end
|
@@ -62,7 +62,7 @@ module Mongoid
|
|
62
62
|
# @example Is the current thread in binding mode?
|
63
63
|
# proxy.binding?
|
64
64
|
#
|
65
|
-
# @return [ true
|
65
|
+
# @return [ true | false ] If the thread is binding.
|
66
66
|
def _binding?
|
67
67
|
Threaded.executing?(BIND)
|
68
68
|
end
|
@@ -87,7 +87,7 @@ module Mongoid
|
|
87
87
|
# @example Is the current thread in building mode?
|
88
88
|
# proxy._building?
|
89
89
|
#
|
90
|
-
# @return [ true
|
90
|
+
# @return [ true | false ] If the thread is building.
|
91
91
|
def _building?
|
92
92
|
Threaded.executing?(BUILD)
|
93
93
|
end
|
@@ -97,7 +97,7 @@ module Mongoid
|
|
97
97
|
# @example Is the current thread in creating mode?
|
98
98
|
# proxy.creating?
|
99
99
|
#
|
100
|
-
# @return [ true
|
100
|
+
# @return [ true | false ] If the thread is creating.
|
101
101
|
def _creating?
|
102
102
|
Threaded.executing?(CREATE)
|
103
103
|
end
|
@@ -122,7 +122,7 @@ module Mongoid
|
|
122
122
|
# @example Is the current thread in loading mode?
|
123
123
|
# proxy._loading?
|
124
124
|
#
|
125
|
-
# @return [ true
|
125
|
+
# @return [ true | false ] If the thread is loading.
|
126
126
|
def _loading?
|
127
127
|
Threaded.executing?(LOAD)
|
128
128
|
end
|