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
@@ -118,7 +118,7 @@ module Mongoid
|
|
118
118
|
#
|
119
119
|
# @note Only relevant for polymorphic associations.
|
120
120
|
#
|
121
|
-
# @return [ String
|
121
|
+
# @return [ String | nil ] The type field.
|
122
122
|
def type
|
123
123
|
@type ||= "#{as}_type" if polymorphic?
|
124
124
|
end
|
@@ -140,7 +140,7 @@ module Mongoid
|
|
140
140
|
|
141
141
|
# Is this association polymorphic?
|
142
142
|
#
|
143
|
-
# @return [ true
|
143
|
+
# @return [ true | false ] Whether this association is polymorphic.
|
144
144
|
def polymorphic?
|
145
145
|
@polymorphic ||= !!as
|
146
146
|
end
|
@@ -150,7 +150,7 @@ module Mongoid
|
|
150
150
|
#
|
151
151
|
# @param [ Document ] doc The document to be bound.
|
152
152
|
#
|
153
|
-
# @return [ true
|
153
|
+
# @return [ true | false ] Whether the document can be bound.
|
154
154
|
def bindable?(doc)
|
155
155
|
forced_nil_inverse? || (!!inverse && doc.fields.keys.include?(foreign_key))
|
156
156
|
end
|
@@ -60,7 +60,7 @@ module Mongoid
|
|
60
60
|
# @example Is the id acceptable?
|
61
61
|
# one.acceptable_id?
|
62
62
|
#
|
63
|
-
# @return [ true
|
63
|
+
# @return [ true | false ] If the id part of the logic will allow an update.
|
64
64
|
def acceptable_id?
|
65
65
|
id = convert_id(existing.class, attributes[:_id])
|
66
66
|
existing._id == id || id.nil? || (existing._id != id && update_only?)
|
@@ -71,7 +71,7 @@ module Mongoid
|
|
71
71
|
# @example Can the existing object be deleted?
|
72
72
|
# one.delete?
|
73
73
|
#
|
74
|
-
# @return [ true
|
74
|
+
# @return [ true | false ] If the association should be deleted.
|
75
75
|
def delete?
|
76
76
|
destroyable? && !attributes[:_id].nil?
|
77
77
|
end
|
@@ -81,7 +81,7 @@ module Mongoid
|
|
81
81
|
# @example Is the object destroyable?
|
82
82
|
# one.destroyable?({ :_destroy => "1" })
|
83
83
|
#
|
84
|
-
# @return [ true
|
84
|
+
# @return [ true | false ] If the association can potentially be
|
85
85
|
# destroyed.
|
86
86
|
def destroyable?
|
87
87
|
[ 1, "1", true, "true" ].include?(destroy) && allow_destroy?
|
@@ -92,7 +92,7 @@ module Mongoid
|
|
92
92
|
# @example Is the document to be replaced?
|
93
93
|
# one.replace?
|
94
94
|
#
|
95
|
-
# @return [ true
|
95
|
+
# @return [ true | false ] If the document should be replaced.
|
96
96
|
def replace?
|
97
97
|
!existing && !destroyable? && !attributes.blank?
|
98
98
|
end
|
@@ -102,7 +102,7 @@ module Mongoid
|
|
102
102
|
# @example Should the document be updated?
|
103
103
|
# one.update?
|
104
104
|
#
|
105
|
-
# @return [ true
|
105
|
+
# @return [ true | false ] If the object should have its attributes updated.
|
106
106
|
def update?
|
107
107
|
existing && !destroyable? && acceptable_id?
|
108
108
|
end
|
@@ -49,17 +49,14 @@ module Mongoid
|
|
49
49
|
#
|
50
50
|
# @return [ One ] The association.
|
51
51
|
def substitute(replacement)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
send(_association.dependent)
|
61
|
-
else
|
62
|
-
save if persisted?
|
52
|
+
if self != replacement
|
53
|
+
unbind_one
|
54
|
+
if persistable?
|
55
|
+
if _association.destructive?
|
56
|
+
send(_association.dependent)
|
57
|
+
else
|
58
|
+
save if persisted?
|
59
|
+
end
|
63
60
|
end
|
64
61
|
end
|
65
62
|
HasOne::Proxy.new(_base, replacement, _association) if replacement
|
@@ -82,7 +79,7 @@ module Mongoid
|
|
82
79
|
# @example Can we persist the association?
|
83
80
|
# relation.persistable?
|
84
81
|
#
|
85
|
-
# @return [ true
|
82
|
+
# @return [ true | false ] If the association is persistable.
|
86
83
|
def persistable?
|
87
84
|
_base.persisted? && !_binding? && !_building?
|
88
85
|
end
|
@@ -92,7 +92,7 @@ module Mongoid
|
|
92
92
|
|
93
93
|
# Is this association polymorphic?
|
94
94
|
#
|
95
|
-
# @return [ true
|
95
|
+
# @return [ true | false ] Whether this association is polymorphic.
|
96
96
|
def polymorphic?
|
97
97
|
@polymorphic ||= !!as
|
98
98
|
end
|
@@ -101,7 +101,7 @@ module Mongoid
|
|
101
101
|
#
|
102
102
|
# @note Only relevant for polymorphic associations.
|
103
103
|
#
|
104
|
-
# @return [ String
|
104
|
+
# @return [ String | nil ] The type field.
|
105
105
|
def type
|
106
106
|
@type ||= "#{as}_type" if polymorphic?
|
107
107
|
end
|
@@ -111,7 +111,7 @@ module Mongoid
|
|
111
111
|
#
|
112
112
|
# @param [ Document ] doc The document to be bound.
|
113
113
|
#
|
114
|
-
# @return [ true
|
114
|
+
# @return [ true | false ] Whether the document can be bound.
|
115
115
|
def bindable?(doc)
|
116
116
|
forced_nil_inverse? || (!!inverse && doc.fields.keys.include?(foreign_key))
|
117
117
|
end
|
@@ -16,7 +16,7 @@ module Mongoid
|
|
16
16
|
#
|
17
17
|
# @param [ Association ] association The association metadata.
|
18
18
|
#
|
19
|
-
# @return [ true
|
19
|
+
# @return [ true | false ] If we can sync.
|
20
20
|
def _syncable?(association)
|
21
21
|
!_synced?(association.foreign_key) && send(association.foreign_key_check)
|
22
22
|
end
|
@@ -38,7 +38,7 @@ module Mongoid
|
|
38
38
|
#
|
39
39
|
# @param [ String ] foreign_key The foreign key.
|
40
40
|
#
|
41
|
-
# @return [ true
|
41
|
+
# @return [ true | false ] If we can sync.
|
42
42
|
def _synced?(foreign_key)
|
43
43
|
!!_synced[foreign_key]
|
44
44
|
end
|
@@ -67,8 +67,8 @@ module Mongoid
|
|
67
67
|
#
|
68
68
|
# @return [ Object ] The updated values.
|
69
69
|
def update_inverse_keys(association)
|
70
|
-
if
|
71
|
-
old, new =
|
70
|
+
if previous_changes.has_key?(association.foreign_key)
|
71
|
+
old, new = previous_changes[association.foreign_key]
|
72
72
|
adds, subs = new - (old || []), (old || []) - new
|
73
73
|
|
74
74
|
# If we are autosaving we don't want a duplicate to get added - the
|
@@ -13,7 +13,7 @@ module Mongoid
|
|
13
13
|
# @example Find association metadata by name.
|
14
14
|
# person.reflect_on_association(:addresses)
|
15
15
|
#
|
16
|
-
# @param [ String
|
16
|
+
# @param [ String | Symbol ] name The name of the association to find.
|
17
17
|
#
|
18
18
|
# @return [ Association ] The matching association metadata.
|
19
19
|
def reflect_on_association(name)
|
@@ -39,7 +39,7 @@ module Mongoid
|
|
39
39
|
# @example Find association metadata by name.
|
40
40
|
# Person.reflect_on_association(:addresses)
|
41
41
|
#
|
42
|
-
# @param [ String
|
42
|
+
# @param [ String | Symbol ] name The name of the association to find.
|
43
43
|
#
|
44
44
|
# @return [ Association ] The matching association metadata.
|
45
45
|
def reflect_on_association(name)
|
@@ -69,7 +69,7 @@ module Mongoid
|
|
69
69
|
#
|
70
70
|
# @param [ Symbol ] callback_type The type of callback type.
|
71
71
|
#
|
72
|
-
# @return [ Array<Proc
|
72
|
+
# @return [ Array<Proc | Symbol> ] A list of the callbacks, either method
|
73
73
|
# names or Procs.
|
74
74
|
def get_callbacks(callback_type)
|
75
75
|
Array(options[callback_type])
|
@@ -88,7 +88,7 @@ module Mongoid
|
|
88
88
|
#
|
89
89
|
# @param [ Document ] doc The document to be bound.
|
90
90
|
#
|
91
|
-
# @return [ true
|
91
|
+
# @return [ true | false ] Whether the document can be bound.
|
92
92
|
def bindable?(doc); false; end
|
93
93
|
|
94
94
|
# Get the inverse names.
|
@@ -189,7 +189,7 @@ module Mongoid
|
|
189
189
|
# The foreign key field if this association stores a foreign key.
|
190
190
|
# Otherwise, the primary key.
|
191
191
|
#
|
192
|
-
# @return [ Symbol
|
192
|
+
# @return [ Symbol | String ] The primary key.
|
193
193
|
def key
|
194
194
|
stores_foreign_key? ? foreign_key : primary_key
|
195
195
|
end
|
@@ -242,13 +242,13 @@ module Mongoid
|
|
242
242
|
#
|
243
243
|
# @return [ String ] The foreign key check.
|
244
244
|
def foreign_key_check
|
245
|
-
@foreign_key_check ||= "#{foreign_key}
|
245
|
+
@foreign_key_check ||= "#{foreign_key}_previously_changed?" if (stores_foreign_key? && foreign_key)
|
246
246
|
end
|
247
247
|
|
248
248
|
# Create an association proxy object using the owner and target.
|
249
249
|
#
|
250
250
|
# @param [ Document ] owner The document this association hangs off of.
|
251
|
-
# @param [ Document
|
251
|
+
# @param [ Document | Array<Document> ] target The target (parent) of the
|
252
252
|
# association.
|
253
253
|
#
|
254
254
|
# @return [ Proxy ]
|
@@ -258,7 +258,7 @@ module Mongoid
|
|
258
258
|
|
259
259
|
# Whether the dependent method is destructive.
|
260
260
|
#
|
261
|
-
# @return [ true
|
261
|
+
# @return [ true | false ] If the dependent method is destructive.
|
262
262
|
def destructive?
|
263
263
|
@destructive ||= !!(dependent && (dependent == :delete_all || dependent == :destroy))
|
264
264
|
end
|
@@ -289,7 +289,7 @@ module Mongoid
|
|
289
289
|
|
290
290
|
# Whether the associated object(s) should be validated.
|
291
291
|
#
|
292
|
-
# @return [ true
|
292
|
+
# @return [ true | false ] If the associated object(s)
|
293
293
|
# should be validated.
|
294
294
|
def validate?
|
295
295
|
@validate ||= if @options[:validate].nil?
|
@@ -299,6 +299,35 @@ module Mongoid
|
|
299
299
|
end
|
300
300
|
end
|
301
301
|
|
302
|
+
# @return [ Array<String> ] The associations above this one in the inclusion tree.
|
303
|
+
attr_accessor :parent_inclusions
|
304
|
+
|
305
|
+
def parent_inclusions
|
306
|
+
@parent_inclusions ||= []
|
307
|
+
end
|
308
|
+
|
309
|
+
# Is this association an embeds_many or has_many association?
|
310
|
+
#
|
311
|
+
# @return [ true | false ] true if it is a *_many association, false if not.
|
312
|
+
def many?
|
313
|
+
[Referenced::HasMany, Embedded::EmbedsMany].any? { |a| self.is_a?(a) }
|
314
|
+
end
|
315
|
+
|
316
|
+
# Is this association an embeds_one or has_one association?
|
317
|
+
#
|
318
|
+
# @return [ true | false ] true if it is a *_one association, false if not.
|
319
|
+
def one?
|
320
|
+
[Referenced::HasOne, Embedded::EmbedsOne].any? { |a| self.is_a?(a) }
|
321
|
+
end
|
322
|
+
|
323
|
+
# Is this association an embedded_in or belongs_to association?
|
324
|
+
#
|
325
|
+
# @return [ true | false ] true if it is an embedded_in or belongs_to
|
326
|
+
# association, false if not.
|
327
|
+
def in_to?
|
328
|
+
[Referenced::BelongsTo, Embedded::EmbeddedIn].any? { |a| self.is_a?(a) }
|
329
|
+
end
|
330
|
+
|
302
331
|
private
|
303
332
|
|
304
333
|
# Gets the model classes with inverse associations of this model. This is used to determine
|
@@ -404,10 +433,15 @@ module Mongoid
|
|
404
433
|
def namespace_hierarchy(mod)
|
405
434
|
parent = Object
|
406
435
|
hier = [parent]
|
407
|
-
|
408
|
-
|
409
|
-
|
436
|
+
|
437
|
+
# name is not present on anonymous modules
|
438
|
+
if mod.name
|
439
|
+
mod.name.split('::').each do |part|
|
440
|
+
parent = parent.const_get(part)
|
441
|
+
hier << parent
|
442
|
+
end
|
410
443
|
end
|
444
|
+
|
411
445
|
hier.reverse
|
412
446
|
end
|
413
447
|
|
data/lib/mongoid/association.rb
CHANGED
@@ -56,7 +56,7 @@ module Mongoid
|
|
56
56
|
# @example Is the document embedded?
|
57
57
|
# address.embedded?
|
58
58
|
#
|
59
|
-
# @return [ true
|
59
|
+
# @return [ true | false ] True if the document has a parent document.
|
60
60
|
def embedded?
|
61
61
|
@embedded ||= (cyclic ? _parent.present? : self.class.embedded?)
|
62
62
|
end
|
@@ -66,7 +66,7 @@ module Mongoid
|
|
66
66
|
# @example Is the document in an embeds many?
|
67
67
|
# address.embedded_many?
|
68
68
|
#
|
69
|
-
# @return [ true
|
69
|
+
# @return [ true | false ] True if in an embeds many.
|
70
70
|
def embedded_many?
|
71
71
|
_association && _association.is_a?(Association::Embedded::EmbedsMany)
|
72
72
|
end
|
@@ -76,7 +76,7 @@ module Mongoid
|
|
76
76
|
# @example Is the document in an embeds one?
|
77
77
|
# address.embedded_one?
|
78
78
|
#
|
79
|
-
# @return [ true
|
79
|
+
# @return [ true | false ] True if in an embeds one.
|
80
80
|
def embedded_one?
|
81
81
|
_association && _association.is_a?(Association::Embedded::EmbedsOne)
|
82
82
|
end
|
@@ -100,7 +100,7 @@ module Mongoid
|
|
100
100
|
# @example Is the document in a references many?
|
101
101
|
# post.referenced_many?
|
102
102
|
#
|
103
|
-
# @return [ true
|
103
|
+
# @return [ true | false ] True if in a references many.
|
104
104
|
def referenced_many?
|
105
105
|
_association && _association.is_a?(Association::Referenced::HasMany)
|
106
106
|
end
|
@@ -110,7 +110,7 @@ module Mongoid
|
|
110
110
|
# @example Is the document in a references one?
|
111
111
|
# address.referenced_one?
|
112
112
|
#
|
113
|
-
# @return [ true
|
113
|
+
# @return [ true | false ] True if in a references one.
|
114
114
|
def referenced_one?
|
115
115
|
_association && _association.is_a?(Association::Referenced::HasOne)
|
116
116
|
end
|
@@ -153,7 +153,7 @@ module Mongoid
|
|
153
153
|
#
|
154
154
|
# @param [ String ] field The field.
|
155
155
|
#
|
156
|
-
# @return [ true
|
156
|
+
# @return [ true | false ] If this field is a conflict.
|
157
157
|
def set_conflict?(field)
|
158
158
|
name = field.split(".", 2)[0]
|
159
159
|
pull_fields.has_key?(name) || push_fields.has_key?(name)
|
@@ -166,7 +166,7 @@ module Mongoid
|
|
166
166
|
#
|
167
167
|
# @param [ String ] field The field.
|
168
168
|
#
|
169
|
-
# @return [ true
|
169
|
+
# @return [ true | false ] If this field is a conflict.
|
170
170
|
def push_conflict?(field)
|
171
171
|
name = field.split(".", 2)[0]
|
172
172
|
set_fields.has_key?(name) || pull_fields.has_key?(name) ||
|
@@ -34,6 +34,25 @@ module Mongoid
|
|
34
34
|
locator = document.new_record? ? "" : ".#{document._index}"
|
35
35
|
"#{pos}#{"." unless pos.blank?}#{document._association.store_as}#{locator}"
|
36
36
|
end
|
37
|
+
|
38
|
+
class << self
|
39
|
+
|
40
|
+
# Get the position of where the document would go for the given
|
41
|
+
# association. The use case for this function is when trying to
|
42
|
+
# persist an empty list for an embedded association. All of the
|
43
|
+
# existing functions for getting the position to store a document
|
44
|
+
# require passing in a document to store, which we don't have when
|
45
|
+
# trying to store the empty list.
|
46
|
+
#
|
47
|
+
# @param [ Document ] parent The parent document to store in.
|
48
|
+
# @param [ Association ] association The association.
|
49
|
+
#
|
50
|
+
# @return [ String ] The position string.
|
51
|
+
def position_without_document(parent, association)
|
52
|
+
pos = parent.atomic_position
|
53
|
+
"#{pos}#{"." unless pos.blank?}#{association.store_as}"
|
54
|
+
end
|
55
|
+
end
|
37
56
|
end
|
38
57
|
end
|
39
58
|
end
|
@@ -13,9 +13,9 @@ module Mongoid
|
|
13
13
|
# person.respond_to?(:title)
|
14
14
|
#
|
15
15
|
# @param [ Array ] name The name of the method.
|
16
|
-
# @param [ true
|
16
|
+
# @param [ true | false ] include_private
|
17
17
|
#
|
18
|
-
# @return [ true
|
18
|
+
# @return [ true | false ] True if it does, false if not.
|
19
19
|
def respond_to?(name, include_private = false)
|
20
20
|
super || (
|
21
21
|
attributes &&
|
@@ -114,7 +114,7 @@ module Mongoid
|
|
114
114
|
# @example Call through method_missing.
|
115
115
|
# document.method_missing(:test)
|
116
116
|
#
|
117
|
-
# @param [ String
|
117
|
+
# @param [ String | Symbol ] name The name of the method.
|
118
118
|
# @param [ Array ] args The arguments to the method.
|
119
119
|
#
|
120
120
|
# @return [ Object ] The result of the method call.
|
@@ -33,15 +33,15 @@ module Mongoid
|
|
33
33
|
# accepts_nested_attributes_for :addresses, :game, :posts
|
34
34
|
# end
|
35
35
|
#
|
36
|
-
# @param [ Array<Symbol
|
36
|
+
# @param [ Array<Symbol> | Hash ] args A list of association names, followed
|
37
37
|
# by a hash of options.
|
38
38
|
#
|
39
|
-
# @option *args [ true
|
40
|
-
# @option *args [ Proc
|
39
|
+
# @option *args [ true | false ] :allow_destroy Can deletion occur?
|
40
|
+
# @option *args [ Proc | Symbol ] :reject_if Block or symbol pointing
|
41
41
|
# to a class method to reject documents with.
|
42
42
|
# @option *args [ Integer ] :limit The max number to create.
|
43
|
-
# @option *args [ true
|
44
|
-
# @
|
43
|
+
# @option *args [ true | false ] :update_only Only update existing docs.
|
44
|
+
# @option *args [ true | false ] :autosave Whether autosave should be enabled on the
|
45
45
|
# association. Note that since the default is true, setting autosave to nil will still
|
46
46
|
# enable it.
|
47
47
|
def accepts_nested_attributes_for(*args)
|
@@ -40,14 +40,21 @@ module Mongoid
|
|
40
40
|
# @param [ Symbol ] key The name of the attribute.
|
41
41
|
# @param [ Object ] value The value of the attribute.
|
42
42
|
#
|
43
|
-
# @return [ true
|
43
|
+
# @return [ true | false ] True if pending, false if not.
|
44
44
|
def pending_attribute?(key, value)
|
45
45
|
name = key.to_s
|
46
|
-
|
46
|
+
|
47
|
+
aliased = if aliased_associations.key?(name)
|
48
|
+
aliased_associations[name]
|
49
|
+
else
|
50
|
+
name
|
51
|
+
end
|
52
|
+
|
53
|
+
if relations.has_key?(aliased)
|
47
54
|
pending_relations[name] = value
|
48
55
|
return true
|
49
56
|
end
|
50
|
-
if nested_attributes.has_key?(
|
57
|
+
if nested_attributes.has_key?(aliased)
|
51
58
|
pending_nested[name] = value
|
52
59
|
return true
|
53
60
|
end
|
@@ -41,7 +41,7 @@ module Mongoid
|
|
41
41
|
#
|
42
42
|
# @param [ String ] name The name of the attribute or a dot notation path.
|
43
43
|
#
|
44
|
-
# @return [ true
|
44
|
+
# @return [ true | false ] Whether the attribute is allowed by projection.
|
45
45
|
#
|
46
46
|
# @api private
|
47
47
|
def attribute_or_path_allowed?(name)
|
@@ -17,9 +17,9 @@ module Mongoid
|
|
17
17
|
# @example Can we write the attribute?
|
18
18
|
# model.attribute_writable?(:title)
|
19
19
|
#
|
20
|
-
# @param [ String
|
20
|
+
# @param [ String | Symbol ] name The name of the field.
|
21
21
|
#
|
22
|
-
# @return [ true
|
22
|
+
# @return [ true | false ] If the document is new, or if the field is not
|
23
23
|
# readonly.
|
24
24
|
def attribute_writable?(name)
|
25
25
|
new_record? || (!readonly_attributes.include?(name) && _loaded?(name))
|