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
@@ -75,7 +75,7 @@ module Mongoid
|
|
75
75
|
|
76
76
|
# Is this association polymorphic?
|
77
77
|
#
|
78
|
-
# @return [ true
|
78
|
+
# @return [ true | false ] Whether this association is polymorphic.
|
79
79
|
def polymorphic?
|
80
80
|
!!@options[:polymorphic]
|
81
81
|
end
|
@@ -114,7 +114,8 @@ module Mongoid
|
|
114
114
|
rel.as == name &&
|
115
115
|
rel.relation_class_name == inverse_class_name
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
|
+
matches.map { |m| m.name }
|
118
119
|
end
|
119
120
|
end
|
120
121
|
|
@@ -31,7 +31,7 @@ module Mongoid
|
|
31
31
|
docs = []
|
32
32
|
object.each do |attrs|
|
33
33
|
if _loading? && base.persisted?
|
34
|
-
docs.push(Factory.
|
34
|
+
docs.push(Factory.execute_from_db(klass, attrs, nil, selected_fields, execute_callbacks: false))
|
35
35
|
else
|
36
36
|
docs.push(Factory.build(klass, attrs))
|
37
37
|
end
|
@@ -19,7 +19,7 @@ module Mongoid
|
|
19
19
|
# @example Push a document.
|
20
20
|
# person.addresses.push(address)
|
21
21
|
#
|
22
|
-
# @param [ Document
|
22
|
+
# @param [ Document | Array<Document> ] args Any number of documents.
|
23
23
|
def <<(*args)
|
24
24
|
docs = args.flatten
|
25
25
|
return concat(docs) if docs.size > 1
|
@@ -67,10 +67,11 @@ module Mongoid
|
|
67
67
|
#
|
68
68
|
# @return [ Document ] The new document.
|
69
69
|
def build(attributes = {}, type = nil)
|
70
|
-
doc = Factory.
|
70
|
+
doc = Factory.execute_build(type || _association.klass, attributes, execute_callbacks: false)
|
71
71
|
append(doc)
|
72
72
|
doc.apply_post_processed_defaults
|
73
73
|
yield(doc) if block_given?
|
74
|
+
doc.run_pending_callbacks
|
74
75
|
doc.run_callbacks(:build) { doc }
|
75
76
|
_base._reset_memoized_descendants!
|
76
77
|
doc
|
@@ -94,6 +95,7 @@ module Mongoid
|
|
94
95
|
# @return [ self ] The empty association.
|
95
96
|
def clear
|
96
97
|
batch_clear(_target.dup)
|
98
|
+
update_attributes_hash
|
97
99
|
self
|
98
100
|
end
|
99
101
|
|
@@ -115,7 +117,7 @@ module Mongoid
|
|
115
117
|
# @example Use #persisted? inside block to count persisted documents.
|
116
118
|
# person.addresses.count { |a| a.persisted? && a.country == "FR" }
|
117
119
|
#
|
118
|
-
# @param [ Object
|
120
|
+
# @param [ Object | Array<Object> ] args Args to delegate to the target.
|
119
121
|
#
|
120
122
|
# @return [ Integer ] The total number of persisted embedded docs, as
|
121
123
|
# flagged by the #persisted? method.
|
@@ -133,22 +135,23 @@ module Mongoid
|
|
133
135
|
#
|
134
136
|
# @param [ Document ] document The document to be deleted.
|
135
137
|
#
|
136
|
-
# @return [ Document
|
138
|
+
# @return [ Document | nil ] The deleted document or nil if nothing deleted.
|
137
139
|
def delete(document)
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
140
|
+
execute_callbacks_around(:remove, document) do
|
141
|
+
doc = _target.delete_one(document)
|
142
|
+
if doc && !_binding?
|
143
|
+
_unscoped.delete_one(doc)
|
144
|
+
if _assigning?
|
145
|
+
_base.add_atomic_pull(doc)
|
146
|
+
else
|
147
|
+
doc.delete(suppress: true)
|
148
|
+
unbind_one(doc)
|
149
|
+
end
|
150
|
+
update_attributes_hash
|
147
151
|
end
|
152
|
+
reindex
|
153
|
+
doc
|
148
154
|
end
|
149
|
-
reindex
|
150
|
-
execute_callback :after_remove, document
|
151
|
-
doc
|
152
155
|
end
|
153
156
|
|
154
157
|
# Delete all the documents in the association without running callbacks.
|
@@ -173,7 +176,7 @@ module Mongoid
|
|
173
176
|
# doc.state == "GA"
|
174
177
|
# end
|
175
178
|
#
|
176
|
-
# @return [ Many
|
179
|
+
# @return [ Many | Enumerator ] The association or an enumerator if no
|
177
180
|
# block was provided.
|
178
181
|
def delete_if
|
179
182
|
if block_given?
|
@@ -207,9 +210,9 @@ module Mongoid
|
|
207
210
|
# @example Are there persisted documents?
|
208
211
|
# person.posts.exists?
|
209
212
|
#
|
210
|
-
# @return [ true
|
213
|
+
# @return [ true | false ] True is persisted documents exist, false if not.
|
211
214
|
def exists?
|
212
|
-
|
215
|
+
_target.any? { |doc| doc.persisted? }
|
213
216
|
end
|
214
217
|
|
215
218
|
# Finds a document in this association through several different
|
@@ -256,6 +259,7 @@ module Mongoid
|
|
256
259
|
integrate(doc)
|
257
260
|
doc._index = index
|
258
261
|
end
|
262
|
+
update_attributes_hash
|
259
263
|
@_unscoped = _target.dup
|
260
264
|
@_target = scope(_target)
|
261
265
|
end
|
@@ -283,7 +287,7 @@ module Mongoid
|
|
283
287
|
# @param [ Integer ] count The number of documents to pop, or 1 if not
|
284
288
|
# provided.
|
285
289
|
#
|
286
|
-
# @return [ Document
|
290
|
+
# @return [ Document | Array<Document> ] The popped document(s).
|
287
291
|
def pop(count = nil)
|
288
292
|
if count
|
289
293
|
if docs = _target[_target.size - count, _target.size]
|
@@ -291,6 +295,8 @@ module Mongoid
|
|
291
295
|
end
|
292
296
|
else
|
293
297
|
delete(_target[-1])
|
298
|
+
end.tap do
|
299
|
+
update_attributes_hash
|
294
300
|
end
|
295
301
|
end
|
296
302
|
|
@@ -306,7 +312,7 @@ module Mongoid
|
|
306
312
|
# @param [ Integer ] count The number of documents to shift, or 1 if not
|
307
313
|
# provided.
|
308
314
|
#
|
309
|
-
# @return [ Document
|
315
|
+
# @return [ Document | Array<Document> ] The shifted document(s).
|
310
316
|
def shift(count = nil)
|
311
317
|
if count
|
312
318
|
if _target.size > 0 && docs = _target[0, count]
|
@@ -314,6 +320,8 @@ module Mongoid
|
|
314
320
|
end
|
315
321
|
else
|
316
322
|
delete(_target[0])
|
323
|
+
end.tap do
|
324
|
+
update_attributes_hash
|
317
325
|
end
|
318
326
|
end
|
319
327
|
|
@@ -328,6 +336,7 @@ module Mongoid
|
|
328
336
|
# @return [ Many ] The proxied association.
|
329
337
|
def substitute(docs)
|
330
338
|
batch_replace(docs)
|
339
|
+
update_attributes_hash
|
331
340
|
self
|
332
341
|
end
|
333
342
|
|
@@ -365,6 +374,7 @@ module Mongoid
|
|
365
374
|
end
|
366
375
|
_unscoped.push(document)
|
367
376
|
integrate(document)
|
377
|
+
update_attributes_hash
|
368
378
|
document._index = _unscoped.size - 1
|
369
379
|
execute_callback :after_add, document
|
370
380
|
end
|
@@ -398,6 +408,7 @@ module Mongoid
|
|
398
408
|
def delete_one(document)
|
399
409
|
_target.delete_one(document)
|
400
410
|
_unscoped.delete_one(document)
|
411
|
+
update_attributes_hash
|
401
412
|
reindex
|
402
413
|
end
|
403
414
|
|
@@ -418,7 +429,7 @@ module Mongoid
|
|
418
429
|
#
|
419
430
|
# If the method exists on the array, use the default proxy behavior.
|
420
431
|
#
|
421
|
-
# @param [ Symbol
|
432
|
+
# @param [ Symbol | String ] name The name of the method.
|
422
433
|
# @param [ Array ] args The method args
|
423
434
|
# @param [ Proc ] block Optional block to pass.
|
424
435
|
#
|
@@ -435,7 +446,7 @@ module Mongoid
|
|
435
446
|
# @example Can we persist the association?
|
436
447
|
# relation.persistable?
|
437
448
|
#
|
438
|
-
# @return [ true
|
449
|
+
# @return [ true | false ] If the association is persistable.
|
439
450
|
def persistable?
|
440
451
|
_base.persisted? && !_binding?
|
441
452
|
end
|
@@ -479,13 +490,14 @@ module Mongoid
|
|
479
490
|
# relation.remove_all({ :num => 1 }, true)
|
480
491
|
#
|
481
492
|
# @param [ Hash ] conditions Conditions to filter by.
|
482
|
-
# @param [ true
|
493
|
+
# @param [ true | false ] method :delete or :destroy.
|
483
494
|
#
|
484
495
|
# @return [ Integer ] The number of documents removed.
|
485
496
|
def remove_all(conditions = {}, method = :delete)
|
486
497
|
criteria = where(conditions || {})
|
487
498
|
removed = criteria.size
|
488
499
|
batch_remove(criteria, method)
|
500
|
+
update_attributes_hash
|
489
501
|
removed
|
490
502
|
end
|
491
503
|
|
@@ -511,12 +523,22 @@ module Mongoid
|
|
511
523
|
@_unscoped = docs
|
512
524
|
end
|
513
525
|
|
526
|
+
# Returns a list of attributes hashes for each document.
|
527
|
+
#
|
528
|
+
# @return [ Array<Hash> ] The list of attributes hashes
|
514
529
|
def as_attributes
|
515
|
-
|
516
|
-
|
517
|
-
|
530
|
+
_unscoped.map { |doc| doc.send(:as_attributes) }
|
531
|
+
end
|
532
|
+
|
533
|
+
# Update the _base's attributes hash with the _target's attributes
|
534
|
+
#
|
535
|
+
# @api private
|
536
|
+
def update_attributes_hash
|
537
|
+
if !_target.empty?
|
538
|
+
_base.attributes.merge!(_association.store_as => _target.map(&:attributes))
|
539
|
+
else
|
540
|
+
_base.attributes.delete(_association.store_as)
|
518
541
|
end
|
519
|
-
attributes
|
520
542
|
end
|
521
543
|
|
522
544
|
class << self
|
@@ -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 ||= !!@options[:as]
|
98
98
|
end
|
@@ -101,7 +101,7 @@ module Mongoid
|
|
101
101
|
#
|
102
102
|
# @note Only relevant if the association is polymorphic.
|
103
103
|
#
|
104
|
-
# @return [ String
|
104
|
+
# @return [ String | nil ] The field for storing the associated object's type.
|
105
105
|
def type
|
106
106
|
@type ||= "#{as}_type" if polymorphic?
|
107
107
|
end
|
@@ -25,11 +25,25 @@ module Mongoid
|
|
25
25
|
#
|
26
26
|
# @return [ Document ] A single document.
|
27
27
|
def build(base, object, _type = nil, selected_fields = nil)
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
if object.is_a?(Hash)
|
29
|
+
if _loading? && base.persisted?
|
30
|
+
Factory.execute_from_db(klass, object, nil, selected_fields, execute_callbacks: false)
|
31
|
+
else
|
32
|
+
Factory.build(klass, object)
|
33
|
+
end
|
31
34
|
else
|
32
|
-
|
35
|
+
clear_associated(object)
|
36
|
+
object
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def clear_associated(doc)
|
43
|
+
if doc && (inv = inverse(doc))
|
44
|
+
if associated = doc.ivar(inv)
|
45
|
+
associated.substitute(nil)
|
46
|
+
end
|
33
47
|
end
|
34
48
|
end
|
35
49
|
end
|
@@ -31,6 +31,7 @@ module Mongoid
|
|
31
31
|
characterize_one(_target)
|
32
32
|
bind_one
|
33
33
|
characterize_one(_target)
|
34
|
+
update_attributes_hash(_target)
|
34
35
|
_base._reset_memoized_descendants!
|
35
36
|
_target.save if persistable?
|
36
37
|
end
|
@@ -44,7 +45,7 @@ module Mongoid
|
|
44
45
|
#
|
45
46
|
# @param [ Document ] replacement A document to replace the target.
|
46
47
|
#
|
47
|
-
# @return [ Document
|
48
|
+
# @return [ Document | nil ] The association or nil.
|
48
49
|
def substitute(replacement)
|
49
50
|
if replacement != self
|
50
51
|
if _assigning?
|
@@ -80,11 +81,15 @@ module Mongoid
|
|
80
81
|
end
|
81
82
|
end
|
82
83
|
unbind_one
|
83
|
-
|
84
|
+
unless replacement
|
85
|
+
update_attributes_hash(replacement)
|
86
|
+
return nil
|
87
|
+
end
|
84
88
|
replacement = Factory.build(klass, replacement) if replacement.is_a?(::Hash)
|
85
89
|
self._target = replacement
|
86
|
-
bind_one
|
87
90
|
characterize_one(_target)
|
91
|
+
bind_one
|
92
|
+
update_attributes_hash(_target)
|
88
93
|
_target.save if persistable?
|
89
94
|
end
|
90
95
|
self
|
@@ -107,11 +112,25 @@ module Mongoid
|
|
107
112
|
# @example Can we persist the association?
|
108
113
|
# relation.persistable?
|
109
114
|
#
|
110
|
-
# @return [ true
|
115
|
+
# @return [ true | false ] If the association is persistable.
|
111
116
|
def persistable?
|
112
117
|
_base.persisted? && !_binding? && !_building? && !_assigning?
|
113
118
|
end
|
114
119
|
|
120
|
+
# Update the _base's attributes hash with the _target's attributes
|
121
|
+
#
|
122
|
+
# @param replacement [ Document | nil ] The doc to use to update the
|
123
|
+
# attributes hash.
|
124
|
+
#
|
125
|
+
# @api private
|
126
|
+
def update_attributes_hash(replacement)
|
127
|
+
if replacement
|
128
|
+
_base.attributes.merge!(_association.store_as => replacement.attributes)
|
129
|
+
else
|
130
|
+
_base.attributes.delete(_association.store_as)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
115
134
|
class << self
|
116
135
|
|
117
136
|
# Returns true if the association is an embedded one. In this case
|
@@ -66,7 +66,7 @@ module Mongoid
|
|
66
66
|
# @example Get the validation default.
|
67
67
|
# Proxy.validation_default
|
68
68
|
#
|
69
|
-
# @return [ true
|
69
|
+
# @return [ true | false ] The validation default.
|
70
70
|
def validation_default; true; end
|
71
71
|
|
72
72
|
# Does this association type store the foreign key?
|
@@ -88,7 +88,7 @@ module Mongoid
|
|
88
88
|
|
89
89
|
# Is this association polymorphic?
|
90
90
|
#
|
91
|
-
# @return [ true
|
91
|
+
# @return [ true | false ] Whether this association is polymorphic.
|
92
92
|
def polymorphic?
|
93
93
|
@polymorphic ||= !!@options[:as]
|
94
94
|
end
|
@@ -97,7 +97,7 @@ module Mongoid
|
|
97
97
|
#
|
98
98
|
# @note Only relevant if the association is polymorphic.
|
99
99
|
#
|
100
|
-
# @return [ String
|
100
|
+
# @return [ String | nil ] The field for storing the associated object's type.
|
101
101
|
def type
|
102
102
|
@type ||= "#{as}_type" if polymorphic?
|
103
103
|
end
|
@@ -34,6 +34,7 @@ module Mongoid
|
|
34
34
|
#
|
35
35
|
# @api private
|
36
36
|
class_attribute :aliased_associations
|
37
|
+
|
37
38
|
self.embedded = false
|
38
39
|
self.embedded_relations = BSON::Document.new
|
39
40
|
self.relations = BSON::Document.new
|
@@ -216,7 +217,7 @@ module Mongoid
|
|
216
217
|
Association::MACRO_MAPPING[macro_name].new(self, name, options, &block).tap do |assoc|
|
217
218
|
assoc.setup!
|
218
219
|
self.relations = self.relations.merge(name => assoc)
|
219
|
-
if assoc.respond_to?(:store_as) && assoc.store_as != name
|
220
|
+
if assoc.embedded? && assoc.respond_to?(:store_as) && assoc.store_as != name
|
220
221
|
self.aliased_associations[assoc.store_as] = name
|
221
222
|
end
|
222
223
|
end
|
@@ -17,7 +17,7 @@ module Mongoid
|
|
17
17
|
# @example Is the association empty??
|
18
18
|
# person.addresses.blank?
|
19
19
|
#
|
20
|
-
# @return [ true
|
20
|
+
# @return [ true | false ] If the association is empty or not.
|
21
21
|
def blank?
|
22
22
|
!any?
|
23
23
|
end
|
@@ -28,7 +28,6 @@ module Mongoid
|
|
28
28
|
# @example Create and save the new document.
|
29
29
|
# person.posts.create(:text => "Testing")
|
30
30
|
#
|
31
|
-
#
|
32
31
|
# @param [ Hash ] attributes The attributes to create with.
|
33
32
|
# @param [ Class ] type The optional type of document to create.
|
34
33
|
#
|
@@ -61,6 +60,11 @@ module Mongoid
|
|
61
60
|
attributes.map { |attrs| create!(attrs, type, &block) }
|
62
61
|
else
|
63
62
|
doc = build(attributes, type, &block)
|
63
|
+
|
64
|
+
Array(doc).each do |doc|
|
65
|
+
doc.try(:run_pending_callbacks)
|
66
|
+
end
|
67
|
+
|
64
68
|
_base.persisted? ? doc.save! : raise_unsaved(doc)
|
65
69
|
doc
|
66
70
|
end
|
@@ -126,9 +130,9 @@ module Mongoid
|
|
126
130
|
# relation.respond_to?(:name)
|
127
131
|
#
|
128
132
|
# @param [ Symbol ] name The method name.
|
129
|
-
# @param [ true
|
133
|
+
# @param [ true | false ] include_private Whether to include private methods.
|
130
134
|
#
|
131
|
-
# @return [ true
|
135
|
+
# @return [ true | false ] If the proxy responds to the method.
|
132
136
|
def respond_to?(name, include_private = false)
|
133
137
|
[].respond_to?(name, include_private) ||
|
134
138
|
klass.respond_to?(name, include_private) || super
|
@@ -153,9 +157,9 @@ module Mongoid
|
|
153
157
|
#
|
154
158
|
# @param [ Hash ] options The options to pass.
|
155
159
|
#
|
156
|
-
# @option options [ Symbol ] :
|
157
|
-
# @option options [ Symbol ] :
|
158
|
-
# @option options [ Symbol ] :
|
160
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :except Do not include these field(s).
|
161
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :include Which association(s) to include.
|
162
|
+
# @option options [ Symbol | String | Array<Symbol | String> ] :only Limit the field(s) to only these.
|
159
163
|
#
|
160
164
|
# @return [ Hash ] The documents, ready to be serialized.
|
161
165
|
def serializable_hash(options = {})
|
@@ -65,7 +65,7 @@ module Mongoid
|
|
65
65
|
#
|
66
66
|
# @param [ Hash ] attributes The attributes to pull the flag from.
|
67
67
|
#
|
68
|
-
# @return [ true
|
68
|
+
# @return [ true | false ] If the association can potentially be deleted.
|
69
69
|
def destroyable?(attributes)
|
70
70
|
destroy = attributes.delete(:_destroy)
|
71
71
|
Nested::DESTROY_FLAGS.include?(destroy) && allow_destroy?
|
@@ -79,7 +79,7 @@ module Mongoid
|
|
79
79
|
#
|
80
80
|
# @param [ Hash ] attributes The attributes being set.
|
81
81
|
#
|
82
|
-
# @return [ true
|
82
|
+
# @return [ true | false ] If the attributes exceed the limit.
|
83
83
|
def over_limit?(attributes)
|
84
84
|
limit = options[:limit]
|
85
85
|
limit ? attributes.size > limit : false
|
@@ -134,8 +134,9 @@ module Mongoid
|
|
134
134
|
# @param [ Proxy ] relation The association proxy.
|
135
135
|
# @param [ Document ] doc The document to delete.
|
136
136
|
def destroy_document(relation, doc)
|
137
|
+
res = doc.destroy unless doc.embedded? || doc.destroyed?
|
137
138
|
relation.delete(doc)
|
138
|
-
|
139
|
+
res
|
139
140
|
end
|
140
141
|
|
141
142
|
# Update the document.
|
@@ -164,7 +165,7 @@ module Mongoid
|
|
164
165
|
# builder.update_nested_relation(parent, id, attrs)
|
165
166
|
#
|
166
167
|
# @param [ Document ] parent The parent document.
|
167
|
-
# @param [ String
|
168
|
+
# @param [ String | BSON::ObjectId ] id of the related document.
|
168
169
|
# @param [ Hash ] attrs The single document attributes to process.
|
169
170
|
def update_nested_relation(parent, id, attrs)
|
170
171
|
first = existing.first
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
# @example Do we allow a destroy?
|
13
13
|
# builder.allow_destroy?
|
14
14
|
#
|
15
|
-
# @return [ true
|
15
|
+
# @return [ true | false ] True if the allow destroy option was set.
|
16
16
|
def allow_destroy?
|
17
17
|
options[:allow_destroy] || false
|
18
18
|
end
|
@@ -25,7 +25,7 @@ module Mongoid
|
|
25
25
|
# @param [ Document ] document The parent document of the association
|
26
26
|
# @param [ Hash ] attrs The attributes to check for rejection.
|
27
27
|
#
|
28
|
-
# @return [ true
|
28
|
+
# @return [ true | false ] True and call proc or method if rejectable, false if not.
|
29
29
|
def reject?(document, attrs)
|
30
30
|
case callback = options[:reject_if]
|
31
31
|
when Symbol
|
@@ -43,7 +43,7 @@ module Mongoid
|
|
43
43
|
# @example Is this update only?
|
44
44
|
# builder.update_only?
|
45
45
|
#
|
46
|
-
# @return [ true
|
46
|
+
# @return [ true | false ] True if the update_only option was set.
|
47
47
|
def update_only?
|
48
48
|
options[:update_only] || false
|
49
49
|
end
|
@@ -56,7 +56,7 @@ module Mongoid
|
|
56
56
|
# @param [ Class ] klass The class we're trying to convert for.
|
57
57
|
# @param [ String ] id The id, usually coming from the form.
|
58
58
|
#
|
59
|
-
# @return [ BSON::ObjectId
|
59
|
+
# @return [ BSON::ObjectId | String | Object ] The converted id.
|
60
60
|
def convert_id(klass, id)
|
61
61
|
klass.using_object_ids? ? BSON::ObjectId.mongoize(id) : id
|
62
62
|
end
|
@@ -62,7 +62,7 @@ module Mongoid
|
|
62
62
|
# @example Is the id acceptable?
|
63
63
|
# one.acceptable_id?
|
64
64
|
#
|
65
|
-
# @return [ true
|
65
|
+
# @return [ true | false ] If the id part of the logic will allow an update.
|
66
66
|
def acceptable_id?
|
67
67
|
id = association.klass.extract_id_field(attributes)
|
68
68
|
id = convert_id(existing.class, id)
|
@@ -74,7 +74,7 @@ module Mongoid
|
|
74
74
|
# @example Can the existing object be deleted?
|
75
75
|
# one.delete?
|
76
76
|
#
|
77
|
-
# @return [ true
|
77
|
+
# @return [ true | false ] If the association should be deleted.
|
78
78
|
def delete?
|
79
79
|
id = association.klass.extract_id_field(attributes)
|
80
80
|
destroyable? && !id.nil?
|
@@ -85,7 +85,7 @@ module Mongoid
|
|
85
85
|
# @example Is the object destroyable?
|
86
86
|
# one.destroyable?({ :_destroy => "1" })
|
87
87
|
#
|
88
|
-
# @return [ true
|
88
|
+
# @return [ true | false ] If the association can potentially be
|
89
89
|
# destroyed.
|
90
90
|
def destroyable?
|
91
91
|
Nested::DESTROY_FLAGS.include?(destroy) && allow_destroy?
|
@@ -96,7 +96,7 @@ module Mongoid
|
|
96
96
|
# @example Is the document to be replaced?
|
97
97
|
# one.replace?
|
98
98
|
#
|
99
|
-
# @return [ true
|
99
|
+
# @return [ true | false ] If the document should be replaced.
|
100
100
|
def replace?
|
101
101
|
!existing && !destroyable? && !attributes.blank?
|
102
102
|
end
|
@@ -106,7 +106,7 @@ module Mongoid
|
|
106
106
|
# @example Should the document be updated?
|
107
107
|
# one.update?
|
108
108
|
#
|
109
|
-
# @return [ true
|
109
|
+
# @return [ true | false ] If the object should have its attributes updated.
|
110
110
|
def update?
|
111
111
|
existing && !destroyable? && acceptable_id?
|
112
112
|
end
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
# @example Clear the relation.
|
13
13
|
# relation.clear
|
14
14
|
#
|
15
|
-
# @return [ true
|
15
|
+
# @return [ true | false ] If the delete succeeded.
|
16
16
|
def clear
|
17
17
|
_target.delete
|
18
18
|
end
|
@@ -34,7 +34,7 @@ module Mongoid
|
|
34
34
|
#
|
35
35
|
# @param [ Symbol ] name The method name.
|
36
36
|
#
|
37
|
-
# @return [ true
|
37
|
+
# @return [ true | false ] If the proxy responds to the method.
|
38
38
|
def respond_to?(name, include_private = false)
|
39
39
|
_target.respond_to?(name, include_private) || super
|
40
40
|
end
|
@@ -7,7 +7,7 @@ module Mongoid
|
|
7
7
|
|
8
8
|
# Returns the name of the parent to a polymorphic child.
|
9
9
|
#
|
10
|
-
# @return [ String
|
10
|
+
# @return [ String | Symbol ] The name.
|
11
11
|
def as
|
12
12
|
@options[:as]
|
13
13
|
end
|
@@ -28,21 +28,21 @@ module Mongoid
|
|
28
28
|
|
29
29
|
# Whether to index the primary or foreign key field.
|
30
30
|
#
|
31
|
-
# @return [ true
|
31
|
+
# @return [ true | false ]
|
32
32
|
def indexed?
|
33
33
|
@indexed ||= !!@options[:index]
|
34
34
|
end
|
35
35
|
|
36
36
|
# Whether the association is autobuilding.
|
37
37
|
#
|
38
|
-
# @return [ true
|
38
|
+
# @return [ true | false ]
|
39
39
|
def autobuilding?
|
40
40
|
!!@options[:autobuild]
|
41
41
|
end
|
42
42
|
|
43
43
|
# Is the association cyclic.
|
44
44
|
#
|
45
|
-
# @return [ true
|
45
|
+
# @return [ true | false ] Whether the association is cyclic.
|
46
46
|
def cyclic?
|
47
47
|
!!@options[:cyclic]
|
48
48
|
end
|
@@ -57,7 +57,7 @@ module Mongoid
|
|
57
57
|
# Mongoid assumes that the field used to hold the primary key of the association is id.
|
58
58
|
# You can override this and explicitly specify the primary key with the :primary_key option.
|
59
59
|
#
|
60
|
-
# @return [ Symbol
|
60
|
+
# @return [ Symbol | String ] The primary key.
|
61
61
|
def primary_key
|
62
62
|
@primary_key ||= @options[:primary_key] ? @options[:primary_key].to_s : Relatable::PRIMARY_KEY_DEFAULT
|
63
63
|
end
|
@@ -65,7 +65,7 @@ module Mongoid
|
|
65
65
|
# Options to save any loaded members and destroy members that are marked for destruction
|
66
66
|
# when the parent object is saved.
|
67
67
|
#
|
68
|
-
# @return [ true
|
68
|
+
# @return [ true | false ] The autosave option.
|
69
69
|
def autosave
|
70
70
|
!!@options[:autosave]
|
71
71
|
end
|
@@ -73,19 +73,19 @@ module Mongoid
|
|
73
73
|
|
74
74
|
# Whether the association is counter-cached.
|
75
75
|
#
|
76
|
-
# @return [ true
|
76
|
+
# @return [ true | false ]
|
77
77
|
def counter_cached?
|
78
78
|
!!@options[:counter_cache]
|
79
79
|
end
|
80
80
|
|
81
81
|
# Whether this association is polymorphic.
|
82
82
|
#
|
83
|
-
# @return [ true
|
83
|
+
# @return [ true | false ] Whether the association is polymorphic.
|
84
84
|
def polymorphic?; false; end
|
85
85
|
|
86
86
|
# Whether the association has callbacks cascaded down from the parent.
|
87
87
|
#
|
88
|
-
# @return [ true
|
88
|
+
# @return [ true | false ] Whether callbacks are cascaded.
|
89
89
|
def cascading_callbacks?
|
90
90
|
!!@options[:cascade_callbacks]
|
91
91
|
end
|