mongoid 6.4.8 → 7.0.0.beta
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Rakefile +0 -26
- data/lib/config/locales/en.yml +17 -21
- data/lib/mongoid.rb +2 -2
- data/lib/mongoid/association.rb +150 -0
- data/lib/mongoid/association/accessors.rb +339 -0
- data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
- data/lib/mongoid/association/builders.rb +92 -0
- data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
- data/lib/mongoid/association/depending.rb +116 -0
- data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
- data/lib/mongoid/association/embedded.rb +4 -0
- data/lib/mongoid/{relations → association}/embedded/batchable.rb +27 -53
- data/lib/mongoid/association/embedded/cyclic.rb +109 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
- data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
- data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
- data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +529 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
- data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
- data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
- data/lib/mongoid/association/macros.rb +204 -0
- data/lib/mongoid/{relations → association}/many.rb +18 -52
- data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
- data/lib/mongoid/association/nested.rb +15 -0
- data/lib/mongoid/association/nested/many.rb +200 -0
- data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
- data/lib/mongoid/association/nested/one.rb +127 -0
- data/lib/mongoid/{relations → association}/one.rb +6 -6
- data/lib/mongoid/association/options.rb +152 -0
- data/lib/mongoid/{relations → association}/proxy.rb +31 -58
- data/lib/mongoid/association/referenced.rb +7 -0
- data/lib/mongoid/association/referenced/auto_save.rb +79 -0
- data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
- data/lib/mongoid/association/referenced/eager.rb +159 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +310 -0
- data/lib/mongoid/association/referenced/has_many.rb +273 -0
- data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
- data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +479 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +577 -0
- data/lib/mongoid/association/referenced/has_one.rb +204 -0
- data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
- data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
- data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
- data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
- data/lib/mongoid/association/referenced/syncable.rb +170 -0
- data/lib/mongoid/{relations → association}/reflections.rb +21 -17
- data/lib/mongoid/association/relatable.rb +415 -0
- data/lib/mongoid/association/touchable.rb +97 -0
- data/lib/mongoid/atomic.rb +6 -6
- data/lib/mongoid/atomic/modifiers.rb +8 -12
- data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
- data/lib/mongoid/attributes.rb +2 -1
- data/lib/mongoid/attributes/nested.rb +10 -10
- data/lib/mongoid/attributes/processing.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +2 -4
- data/lib/mongoid/clients.rb +0 -2
- data/lib/mongoid/clients/options.rb +1 -1
- data/lib/mongoid/clients/storage_options.rb +0 -1
- data/lib/mongoid/composable.rb +3 -4
- data/lib/mongoid/config.rb +1 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +3 -6
- data/lib/mongoid/contextual/map_reduce.rb +3 -7
- data/lib/mongoid/contextual/memory.rb +5 -10
- data/lib/mongoid/contextual/mongo.rb +10 -27
- data/lib/mongoid/copyable.rb +6 -6
- data/lib/mongoid/criteria.rb +1 -2
- data/lib/mongoid/criteria/includable.rb +14 -14
- data/lib/mongoid/criteria/modifiable.rb +8 -14
- data/lib/mongoid/criteria/queryable/mergeable.rb +1 -3
- data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
- data/lib/mongoid/criteria/queryable/selectable.rb +10 -34
- data/lib/mongoid/document.rb +6 -6
- data/lib/mongoid/errors.rb +3 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
- data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
- data/lib/mongoid/errors/unknown_model.rb +25 -0
- data/lib/mongoid/extensions/array.rb +5 -5
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/object.rb +4 -4
- data/lib/mongoid/extensions/range.rb +1 -0
- data/lib/mongoid/extensions/regexp.rb +0 -1
- data/lib/mongoid/extensions/string.rb +1 -3
- data/lib/mongoid/factory.rb +4 -3
- data/lib/mongoid/fields.rb +1 -1
- data/lib/mongoid/fields/foreign_key.rb +5 -5
- data/lib/mongoid/fields/standard.rb +2 -14
- data/lib/mongoid/fields/validators/macro.rb +1 -1
- data/lib/mongoid/indexable.rb +8 -5
- data/lib/mongoid/interceptable.rb +5 -5
- data/lib/mongoid/matchable.rb +0 -3
- data/lib/mongoid/persistable.rb +4 -5
- data/lib/mongoid/persistable/creatable.rb +2 -4
- data/lib/mongoid/persistable/deletable.rb +9 -10
- data/lib/mongoid/persistable/destroyable.rb +5 -1
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +5 -5
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +1 -2
- data/lib/mongoid/persistence_context.rb +4 -9
- data/lib/mongoid/query_cache.rb +18 -65
- data/lib/mongoid/railtie.rb +0 -17
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +3 -3
- data/lib/mongoid/tasks/database.rb +2 -3
- data/lib/mongoid/threaded.rb +0 -74
- data/lib/mongoid/traversable.rb +2 -2
- data/lib/mongoid/validatable.rb +8 -8
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +4 -4
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -4
- data/spec/app/models/animal.rb +2 -1
- data/spec/app/models/band.rb +0 -1
- data/spec/app/models/bomb.rb +1 -1
- data/spec/app/models/message.rb +1 -1
- data/spec/app/models/person.rb +5 -2
- data/spec/app/models/vertex.rb +6 -0
- data/spec/app/models/wiki_page.rb +1 -1
- data/spec/config/mongoid.yml +1 -0
- data/spec/mongoid/{relations → association}/accessors_spec.rb +1 -1
- data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
- data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
- data/spec/mongoid/association/constrainable_spec.rb +115 -0
- data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
- data/spec/mongoid/association/depending_spec.rb +613 -0
- data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
- data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
- data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
- data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
- data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
- data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
- data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
- data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
- data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +140 -428
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
- data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
- data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
- data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
- data/spec/mongoid/{relations → association}/macros_spec.rb +148 -93
- data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
- data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
- data/spec/mongoid/association/options_spec.rb +1321 -0
- data/spec/mongoid/{relations → association}/polymorphic_spec.rb +7 -34
- data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
- data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
- data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +9 -9
- data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +1963 -0
- data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
- data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +5 -5
- data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
- data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
- data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +11 -11
- data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +1 -109
- data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
- data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
- data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
- data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
- data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
- data/spec/mongoid/association/referenced/has_one_spec.rb +1244 -0
- data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
- data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
- data/spec/mongoid/{relations → association}/touchable_spec.rb +19 -1
- data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
- data/spec/mongoid/atomic_spec.rb +17 -17
- data/spec/mongoid/attributes/nested_spec.rb +14 -12
- data/spec/mongoid/attributes/readonly_spec.rb +80 -125
- data/spec/mongoid/clients/factory_spec.rb +28 -52
- data/spec/mongoid/clients/options_spec.rb +65 -69
- data/spec/mongoid/config_spec.rb +24 -0
- data/spec/mongoid/contextual/geo_near_spec.rb +0 -1
- data/spec/mongoid/contextual/mongo_spec.rb +4 -112
- data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +6 -74
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
- data/spec/mongoid/criteria/scopable_spec.rb +0 -81
- data/spec/mongoid/criteria_spec.rb +16 -19
- data/spec/mongoid/document_spec.rb +2 -56
- data/spec/mongoid/extensions/array_spec.rb +11 -15
- data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
- data/spec/mongoid/extensions/object_spec.rb +7 -11
- data/spec/mongoid/extensions/range_spec.rb +7 -0
- data/spec/mongoid/extensions/regexp_spec.rb +0 -23
- data/spec/mongoid/extensions/string_spec.rb +7 -35
- data/spec/mongoid/factory_spec.rb +18 -11
- data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
- data/spec/mongoid/fields_spec.rb +2 -2
- data/spec/mongoid/findable_spec.rb +1 -1
- data/spec/mongoid/indexable_spec.rb +18 -8
- data/spec/mongoid/interceptable_spec.rb +21 -2
- data/spec/mongoid/matchable_spec.rb +1 -26
- data/spec/mongoid/persistable/deletable_spec.rb +0 -19
- data/spec/mongoid/persistable/destroyable_spec.rb +0 -19
- data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
- data/spec/mongoid/persistable/savable_spec.rb +3 -3
- data/spec/mongoid/persistable/settable_spec.rb +1 -35
- data/spec/mongoid/persistable/updatable_spec.rb +2 -2
- data/spec/mongoid/persistable_spec.rb +16 -16
- data/spec/mongoid/persistence_context_spec.rb +0 -14
- data/spec/mongoid/positional_spec.rb +10 -10
- data/spec/mongoid/query_cache_spec.rb +18 -87
- data/spec/mongoid/relations/proxy_spec.rb +124 -124
- data/spec/mongoid/scopable_spec.rb +0 -13
- data/spec/mongoid/threaded_spec.rb +0 -68
- data/spec/mongoid/validatable/associated_spec.rb +1 -1
- data/spec/mongoid/validatable/presence_spec.rb +7 -6
- data/spec/mongoid/validatable_spec.rb +1 -1
- data/spec/spec_helper.rb +7 -83
- metadata +586 -611
- metadata.gz.sig +2 -5
- data/lib/mongoid/clients/sessions.rb +0 -113
- data/lib/mongoid/errors/invalid_session_use.rb +0 -24
- data/lib/mongoid/matchable/nor.rb +0 -37
- data/lib/mongoid/railties/controller_runtime.rb +0 -86
- data/lib/mongoid/relations.rb +0 -148
- data/lib/mongoid/relations/accessors.rb +0 -267
- data/lib/mongoid/relations/auto_save.rb +0 -94
- data/lib/mongoid/relations/bindings.rb +0 -9
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
- data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
- data/lib/mongoid/relations/builder.rb +0 -57
- data/lib/mongoid/relations/builders.rb +0 -106
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
- data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
- data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
- data/lib/mongoid/relations/cascading.rb +0 -56
- data/lib/mongoid/relations/cascading/delete.rb +0 -44
- data/lib/mongoid/relations/cascading/destroy.rb +0 -43
- data/lib/mongoid/relations/cascading/nullify.rb +0 -35
- data/lib/mongoid/relations/cascading/restrict.rb +0 -39
- data/lib/mongoid/relations/conversions.rb +0 -34
- data/lib/mongoid/relations/counter_cache.rb +0 -160
- data/lib/mongoid/relations/cyclic.rb +0 -107
- data/lib/mongoid/relations/eager/base.rb +0 -153
- data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
- data/lib/mongoid/relations/eager/has_many.rb +0 -38
- data/lib/mongoid/relations/eager/has_one.rb +0 -30
- data/lib/mongoid/relations/embedded/in.rb +0 -241
- data/lib/mongoid/relations/embedded/many.rb +0 -683
- data/lib/mongoid/relations/embedded/one.rb +0 -235
- data/lib/mongoid/relations/macros.rb +0 -367
- data/lib/mongoid/relations/metadata.rb +0 -1179
- data/lib/mongoid/relations/nested_builder.rb +0 -74
- data/lib/mongoid/relations/options.rb +0 -49
- data/lib/mongoid/relations/polymorphic.rb +0 -39
- data/lib/mongoid/relations/referenced/in.rb +0 -304
- data/lib/mongoid/relations/referenced/many.rb +0 -812
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
- data/lib/mongoid/relations/referenced/one.rb +0 -290
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/targets/enumerable.rb +0 -493
- data/lib/mongoid/relations/touchable.rb +0 -97
- data/spec/app/models/array_field.rb +0 -7
- data/spec/app/models/delegating_patient.rb +0 -16
- data/spec/integration/document_spec.rb +0 -22
- data/spec/mongoid/clients/sessions_spec.rb +0 -334
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
- data/spec/mongoid/matchable/nor_spec.rb +0 -209
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
- data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
- data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
- data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
- data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
- data/spec/mongoid/relations/cascading_spec.rb +0 -355
- data/spec/mongoid/relations/constraint_spec.rb +0 -75
- data/spec/mongoid/relations/conversions_spec.rb +0 -128
- data/spec/mongoid/relations/metadata_spec.rb +0 -1985
- data/spec/mongoid/relations/options_spec.rb +0 -35
- data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -110
- data/spec/support/cluster_config.rb +0 -158
- data/spec/support/constraints.rb +0 -101
- data/spec/support/macros.rb +0 -20
- data/spec/support/session_registry.rb +0 -50
- data/spec/support/spec_config.rb +0 -42
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
|
+
|
|
5
|
+
# This error is raised when an invalid strategy is defined for an association dependency.
|
|
6
|
+
class InvalidDependentStrategy < MongoidError
|
|
7
|
+
|
|
8
|
+
# Create the new error.
|
|
9
|
+
#
|
|
10
|
+
# @example Create the new error.
|
|
11
|
+
# InvalidDependentStrategy.new(association, invalid_strategy, valid_strategies)
|
|
12
|
+
#
|
|
13
|
+
# @param [ Mongoid::Association ] association The association for which this
|
|
14
|
+
# dependency is defined.
|
|
15
|
+
# @param [ Symbol, String ] invalid_strategy The attempted invalid strategy.
|
|
16
|
+
# @param [ Array<Symbol> ] valid_strategies The valid strategies.
|
|
17
|
+
#
|
|
18
|
+
# @since 7.0.0
|
|
19
|
+
def initialize(association, invalid_strategy, valid_strategies)
|
|
20
|
+
super(
|
|
21
|
+
compose_message(
|
|
22
|
+
"invalid_dependent_strategy",
|
|
23
|
+
{ association: association,
|
|
24
|
+
invalid_strategy: invalid_strategy,
|
|
25
|
+
valid_strategies: valid_strategies
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
|
+
|
|
5
|
+
# Raised when an option provided for a relation is invalid.
|
|
6
|
+
class InvalidRelationOption < MongoidError
|
|
7
|
+
|
|
8
|
+
# Create the new error.
|
|
9
|
+
#
|
|
10
|
+
# @example Create the new error.
|
|
11
|
+
# InvalidRelationOption.new(Person, invalid_option: 'make_me_a_sandwich')
|
|
12
|
+
#
|
|
13
|
+
# @param [ Class ] klass The model class.
|
|
14
|
+
# @param [ String, Symbol ] name The relation name.
|
|
15
|
+
# @param [ Symbol ] option The invalid option.
|
|
16
|
+
# @param [ Array<Symbol> ] valid_options The valid option.
|
|
17
|
+
#
|
|
18
|
+
# @since 3.0.0
|
|
19
|
+
def initialize(klass, name, option, valid_options)
|
|
20
|
+
super(
|
|
21
|
+
compose_message(
|
|
22
|
+
"invalid_relation_option",
|
|
23
|
+
{ klass: klass, name: name, option: option, valid_options: valid_options }
|
|
24
|
+
)
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Errors
|
|
4
|
+
|
|
5
|
+
# This error is raised when trying to instantiate a model object from the value in
|
|
6
|
+
# the '_type' field of a document and the class doesn't exist.
|
|
7
|
+
class UnknownModel < MongoidError
|
|
8
|
+
|
|
9
|
+
# Create the new error.
|
|
10
|
+
#
|
|
11
|
+
# @example Instantiate the error.
|
|
12
|
+
# UnknownModel.new('InvalidClass', "invalid_class")
|
|
13
|
+
#
|
|
14
|
+
# @param [ String ] klass The model class.
|
|
15
|
+
# @param [ String ] value The value used to determine the (invalid) class.
|
|
16
|
+
#
|
|
17
|
+
# @since 7.0.0
|
|
18
|
+
def initialize(klass, value)
|
|
19
|
+
super(
|
|
20
|
+
compose_message("unknown_model", { klass: klass, value: value })
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -122,22 +122,22 @@ module Mongoid
|
|
|
122
122
|
|
|
123
123
|
module ClassMethods
|
|
124
124
|
|
|
125
|
-
# Convert the provided object to a
|
|
125
|
+
# Convert the provided object to a proper array of foreign keys.
|
|
126
126
|
#
|
|
127
127
|
# @example Mongoize the object.
|
|
128
128
|
# Array.__mongoize_fk__(constraint, object)
|
|
129
129
|
#
|
|
130
|
-
# @param [
|
|
130
|
+
# @param [ Association ] association The association metadata.
|
|
131
131
|
# @param [ Object ] object The object to convert.
|
|
132
132
|
#
|
|
133
133
|
# @return [ Array ] The array of ids.
|
|
134
134
|
#
|
|
135
135
|
# @since 3.0.0
|
|
136
|
-
def __mongoize_fk__(
|
|
136
|
+
def __mongoize_fk__(association, object)
|
|
137
137
|
if object.resizable?
|
|
138
|
-
object.blank? ? object :
|
|
138
|
+
object.blank? ? object : association.convert_to_foreign_key(object)
|
|
139
139
|
else
|
|
140
|
-
object.blank? ? [] :
|
|
140
|
+
object.blank? ? [] : association.convert_to_foreign_key(Array(object))
|
|
141
141
|
end
|
|
142
142
|
end
|
|
143
143
|
|
|
@@ -53,7 +53,7 @@ module Mongoid
|
|
|
53
53
|
#
|
|
54
54
|
# @since 3.0.0
|
|
55
55
|
def demongoize(object)
|
|
56
|
-
object && object.numeric? ? BigDecimal(object.to_s) : nil
|
|
56
|
+
object && object.numeric? ? ::BigDecimal.new(object.to_s) : nil
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
# Mongoize an object of any type to how it's stored in the db as a String.
|
|
@@ -225,17 +225,17 @@ module Mongoid
|
|
|
225
225
|
# contstraint.
|
|
226
226
|
#
|
|
227
227
|
# @example Convert the object to a fk.
|
|
228
|
-
# Object.__mongoize_fk__(
|
|
228
|
+
# Object.__mongoize_fk__(association, object)
|
|
229
229
|
#
|
|
230
|
-
# @param [
|
|
230
|
+
# @param [ Association ] association The association metadata.
|
|
231
231
|
# @param [ Object ] object The object to convert.
|
|
232
232
|
#
|
|
233
233
|
# @return [ Object ] The converted object.
|
|
234
234
|
#
|
|
235
235
|
# @since 3.0.0
|
|
236
|
-
def __mongoize_fk__(
|
|
236
|
+
def __mongoize_fk__(association, object)
|
|
237
237
|
return nil if !object || object == ""
|
|
238
|
-
|
|
238
|
+
association.convert_to_foreign_key(object)
|
|
239
239
|
end
|
|
240
240
|
|
|
241
241
|
# Convert the object from its mongo friendly ruby type to this type.
|
|
@@ -70,6 +70,7 @@ module Mongoid
|
|
|
70
70
|
def mongoize(object)
|
|
71
71
|
return nil if object.nil?
|
|
72
72
|
return object if object.is_a?(::Hash)
|
|
73
|
+
return object if object.is_a?(String)
|
|
73
74
|
hash = { "min" => object.first, "max" => object.last }
|
|
74
75
|
if object.respond_to?(:exclude_end?) && object.exclude_end?
|
|
75
76
|
hash.merge!("exclude_end" => true)
|
data/lib/mongoid/factory.rb
CHANGED
|
@@ -17,8 +17,7 @@ module Mongoid
|
|
|
17
17
|
#
|
|
18
18
|
# @return [ Document ] The instantiated document.
|
|
19
19
|
def build(klass, attributes = nil)
|
|
20
|
-
attributes
|
|
21
|
-
type = attributes[TYPE] || attributes[TYPE.to_sym]
|
|
20
|
+
type = (attributes || {})[TYPE]
|
|
22
21
|
if type && klass._types.include?(type)
|
|
23
22
|
type.constantize.new(attributes)
|
|
24
23
|
else
|
|
@@ -43,7 +42,9 @@ module Mongoid
|
|
|
43
42
|
if type.blank?
|
|
44
43
|
klass.instantiate(attributes, selected_fields)
|
|
45
44
|
else
|
|
46
|
-
type.camelize
|
|
45
|
+
camelized = type.camelize
|
|
46
|
+
raise Errors::UnknownModel.new(camelized, type) unless Object.const_defined?(camelized)
|
|
47
|
+
camelized.constantize.instantiate(attributes, selected_fields)
|
|
47
48
|
end
|
|
48
49
|
end
|
|
49
50
|
end
|
data/lib/mongoid/fields.rb
CHANGED
|
@@ -63,8 +63,8 @@ module Mongoid
|
|
|
63
63
|
# @since 3.0.0
|
|
64
64
|
def evolve(object)
|
|
65
65
|
if object_id_field? || object.is_a?(Document)
|
|
66
|
-
if
|
|
67
|
-
|
|
66
|
+
if association.polymorphic?
|
|
67
|
+
association.convert_to_foreign_key(object)
|
|
68
68
|
else
|
|
69
69
|
object.__evolve_object_id__
|
|
70
70
|
end
|
|
@@ -97,7 +97,7 @@ module Mongoid
|
|
|
97
97
|
# @since 3.0.0
|
|
98
98
|
def mongoize(object)
|
|
99
99
|
if type.resizable? || object_id_field?
|
|
100
|
-
type.__mongoize_fk__(
|
|
100
|
+
type.__mongoize_fk__(association, object)
|
|
101
101
|
else
|
|
102
102
|
related_id_field.mongoize(object)
|
|
103
103
|
end
|
|
@@ -113,7 +113,7 @@ module Mongoid
|
|
|
113
113
|
# @since 2.2.0
|
|
114
114
|
def object_id_field?
|
|
115
115
|
@object_id_field ||=
|
|
116
|
-
|
|
116
|
+
association.polymorphic? ? true : association.klass.using_object_ids?
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
# Returns true if an array, false if not.
|
|
@@ -156,7 +156,7 @@ module Mongoid
|
|
|
156
156
|
#
|
|
157
157
|
# @since 3.0.0
|
|
158
158
|
def related_id_field
|
|
159
|
-
@related_id_field ||=
|
|
159
|
+
@related_id_field ||= association.klass.fields["_id"]
|
|
160
160
|
end
|
|
161
161
|
|
|
162
162
|
# This is used when default values need to be serialized. Most of the
|
|
@@ -26,18 +26,6 @@ module Mongoid
|
|
|
26
26
|
mods[key] = new
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
# Get the constraint from the metadata once.
|
|
30
|
-
#
|
|
31
|
-
# @example Get the constraint.
|
|
32
|
-
# field.constraint
|
|
33
|
-
#
|
|
34
|
-
# @return [ Constraint ] The relation's contraint.
|
|
35
|
-
#
|
|
36
|
-
# @since 2.1.0
|
|
37
|
-
def constraint
|
|
38
|
-
@constraint ||= metadata.constraint
|
|
39
|
-
end
|
|
40
|
-
|
|
41
29
|
# Evaluate the default value and return it. Will handle the
|
|
42
30
|
# serialization, proc calls, and duplication if necessary.
|
|
43
31
|
#
|
|
@@ -127,8 +115,8 @@ module Mongoid
|
|
|
127
115
|
# @return [ Metadata ] The relation metadata.
|
|
128
116
|
#
|
|
129
117
|
# @since 2.2.0
|
|
130
|
-
def
|
|
131
|
-
@
|
|
118
|
+
def association
|
|
119
|
+
@association ||= options[:association]
|
|
132
120
|
end
|
|
133
121
|
|
|
134
122
|
# Is the field a BSON::ObjectId?
|
data/lib/mongoid/indexable.rb
CHANGED
|
@@ -28,14 +28,17 @@ module Mongoid
|
|
|
28
28
|
# @since 1.0.0
|
|
29
29
|
def create_indexes
|
|
30
30
|
return unless index_specifications
|
|
31
|
+
|
|
32
|
+
default_options = {background: Config.background_indexing}
|
|
33
|
+
|
|
31
34
|
index_specifications.each do |spec|
|
|
32
|
-
key, options = spec.key, spec.options
|
|
35
|
+
key, options = spec.key, default_options.merge(spec.options)
|
|
33
36
|
if database = options[:database]
|
|
34
37
|
with(database: database) do |klass|
|
|
35
|
-
klass.collection.indexes
|
|
38
|
+
klass.collection.indexes.create_one(key, options.except(:database))
|
|
36
39
|
end
|
|
37
40
|
else
|
|
38
|
-
collection.indexes
|
|
41
|
+
collection.indexes.create_one(key, options)
|
|
39
42
|
end
|
|
40
43
|
end and true
|
|
41
44
|
end
|
|
@@ -53,9 +56,9 @@ module Mongoid
|
|
|
53
56
|
indexed_database_names.each do |database|
|
|
54
57
|
with(database: database) do |klass|
|
|
55
58
|
begin
|
|
56
|
-
klass.collection.indexes
|
|
59
|
+
klass.collection.indexes.each do |spec|
|
|
57
60
|
unless spec["name"] == "_id_"
|
|
58
|
-
klass.collection.indexes
|
|
61
|
+
klass.collection.indexes.drop_one(spec["key"])
|
|
59
62
|
logger.info(
|
|
60
63
|
"MONGOID: Removed index '#{spec["name"]}' on collection " +
|
|
61
64
|
"'#{klass.collection.name}' in database '#{database}'."
|
|
@@ -160,8 +160,8 @@ module Mongoid
|
|
|
160
160
|
#
|
|
161
161
|
# @since 2.3.0
|
|
162
162
|
def cascadable_children(kind, children = Set.new)
|
|
163
|
-
embedded_relations.each_pair do |name,
|
|
164
|
-
next unless
|
|
163
|
+
embedded_relations.each_pair do |name, association|
|
|
164
|
+
next unless association.cascading_callbacks?
|
|
165
165
|
without_autobuild do
|
|
166
166
|
delayed_pulls = delayed_atomic_pulls[name]
|
|
167
167
|
delayed_unsets = delayed_atomic_unsets[name]
|
|
@@ -170,7 +170,7 @@ module Mongoid
|
|
|
170
170
|
relation = send(name)
|
|
171
171
|
Array.wrap(relation).each do |child|
|
|
172
172
|
next if children.include?(child)
|
|
173
|
-
children.add(child) if cascadable_child?(kind, child,
|
|
173
|
+
children.add(child) if cascadable_child?(kind, child, association)
|
|
174
174
|
child.send(:cascadable_children, kind, children)
|
|
175
175
|
end
|
|
176
176
|
end
|
|
@@ -189,9 +189,9 @@ module Mongoid
|
|
|
189
189
|
# @return [ true, false ] If the child should fire the callback.
|
|
190
190
|
#
|
|
191
191
|
# @since 2.3.0
|
|
192
|
-
def cascadable_child?(kind, child,
|
|
192
|
+
def cascadable_child?(kind, child, association)
|
|
193
193
|
return false if kind == :initialize || kind == :find || kind == :touch
|
|
194
|
-
return false if kind == :validate &&
|
|
194
|
+
return false if kind == :validate && association.validate?
|
|
195
195
|
child.callback_executable?(kind) ? child.in_callback_state?(kind) : false
|
|
196
196
|
end
|
|
197
197
|
|
data/lib/mongoid/matchable.rb
CHANGED
|
@@ -11,7 +11,6 @@ require "mongoid/matchable/lte"
|
|
|
11
11
|
require "mongoid/matchable/ne"
|
|
12
12
|
require "mongoid/matchable/nin"
|
|
13
13
|
require "mongoid/matchable/or"
|
|
14
|
-
require "mongoid/matchable/nor"
|
|
15
14
|
require "mongoid/matchable/size"
|
|
16
15
|
require "mongoid/matchable/elem_match"
|
|
17
16
|
require "mongoid/matchable/regexp"
|
|
@@ -41,7 +40,6 @@ module Mongoid
|
|
|
41
40
|
"$ne" => Ne,
|
|
42
41
|
"$nin" => Nin,
|
|
43
42
|
"$or" => Or,
|
|
44
|
-
"$nor" => Nor,
|
|
45
43
|
"$size" => Size
|
|
46
44
|
}.with_indifferent_access.freeze
|
|
47
45
|
|
|
@@ -126,7 +124,6 @@ module Mongoid
|
|
|
126
124
|
case key.to_s
|
|
127
125
|
when "$or" then Or.new(value, document)
|
|
128
126
|
when "$and" then And.new(value, document)
|
|
129
|
-
when "$nor" then Nor.new(value, document)
|
|
130
127
|
else Default.new(extract_attribute(document, key))
|
|
131
128
|
end
|
|
132
129
|
end
|
data/lib/mongoid/persistable.rb
CHANGED
|
@@ -162,10 +162,9 @@ module Mongoid
|
|
|
162
162
|
# @since 4.0.0
|
|
163
163
|
def process_atomic_operations(operations)
|
|
164
164
|
operations.each do |field, value|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
end
|
|
165
|
+
access = database_field_name(field)
|
|
166
|
+
yield(access, value)
|
|
167
|
+
remove_change(access)
|
|
169
168
|
end
|
|
170
169
|
end
|
|
171
170
|
|
|
@@ -204,7 +203,7 @@ module Mongoid
|
|
|
204
203
|
def persist_atomic_operations(operations)
|
|
205
204
|
if persisted? && operations
|
|
206
205
|
selector = atomic_selector
|
|
207
|
-
_root.collection.find(selector).update_one(positionally(selector, operations)
|
|
206
|
+
_root.collection.find(selector).update_one(positionally(selector, operations))
|
|
208
207
|
end
|
|
209
208
|
end
|
|
210
209
|
end
|
|
@@ -61,9 +61,7 @@ module Mongoid
|
|
|
61
61
|
_parent.insert
|
|
62
62
|
else
|
|
63
63
|
selector = _parent.atomic_selector
|
|
64
|
-
_root.collection.find(selector).update_one(
|
|
65
|
-
positionally(selector, atomic_inserts),
|
|
66
|
-
session: _session)
|
|
64
|
+
_root.collection.find(selector).update_one(positionally(selector, atomic_inserts))
|
|
67
65
|
end
|
|
68
66
|
end
|
|
69
67
|
|
|
@@ -78,7 +76,7 @@ module Mongoid
|
|
|
78
76
|
#
|
|
79
77
|
# @since 4.0.0
|
|
80
78
|
def insert_as_root
|
|
81
|
-
collection.insert_one(as_attributes
|
|
79
|
+
collection.insert_one(as_attributes)
|
|
82
80
|
end
|
|
83
81
|
|
|
84
82
|
# Post process an insert, which sets the new record attribute to false
|
|
@@ -21,10 +21,12 @@ module Mongoid
|
|
|
21
21
|
def delete(options = {})
|
|
22
22
|
raise Errors::ReadonlyDocument.new(self.class) if readonly?
|
|
23
23
|
prepare_delete do
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
unless options[:persist] == false
|
|
25
|
+
if embedded?
|
|
26
|
+
delete_as_embedded(options)
|
|
27
|
+
else
|
|
28
|
+
delete_as_root
|
|
29
|
+
end
|
|
28
30
|
end
|
|
29
31
|
end
|
|
30
32
|
end
|
|
@@ -62,9 +64,7 @@ module Mongoid
|
|
|
62
64
|
_parent.remove_child(self) if notifying_parent?(options)
|
|
63
65
|
if _parent.persisted?
|
|
64
66
|
selector = _parent.atomic_selector
|
|
65
|
-
_root.collection.find(selector).update_one(
|
|
66
|
-
positionally(selector, atomic_deletes),
|
|
67
|
-
session: _session)
|
|
67
|
+
_root.collection.find(selector).update_one(positionally(selector, atomic_deletes))
|
|
68
68
|
end
|
|
69
69
|
true
|
|
70
70
|
end
|
|
@@ -80,7 +80,7 @@ module Mongoid
|
|
|
80
80
|
#
|
|
81
81
|
# @since 4.0.0
|
|
82
82
|
def delete_as_root
|
|
83
|
-
collection.find(atomic_selector).delete_one
|
|
83
|
+
collection.find(atomic_selector).delete_one
|
|
84
84
|
true
|
|
85
85
|
end
|
|
86
86
|
|
|
@@ -113,11 +113,10 @@ module Mongoid
|
|
|
113
113
|
#
|
|
114
114
|
# @since 4.0.0
|
|
115
115
|
def prepare_delete
|
|
116
|
-
|
|
116
|
+
return false unless catch(:abort) { apply_delete_dependencies! }
|
|
117
117
|
yield(self)
|
|
118
118
|
freeze
|
|
119
119
|
self.destroyed = true
|
|
120
|
-
true
|
|
121
120
|
end
|
|
122
121
|
|
|
123
122
|
module ClassMethods
|