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
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
|
|
5
|
-
# This module contains the behaviour for auto-saving relations in
|
|
6
|
-
# different collections.
|
|
7
|
-
module AutoSave
|
|
8
|
-
extend ActiveSupport::Concern
|
|
9
|
-
|
|
10
|
-
# Used to prevent infinite loops in associated autosaves.
|
|
11
|
-
#
|
|
12
|
-
# @example Is the document autosaved?
|
|
13
|
-
# document.autosaved?
|
|
14
|
-
#
|
|
15
|
-
# @return [ true, false ] Has the document already been autosaved?
|
|
16
|
-
#
|
|
17
|
-
# @since 3.0.0
|
|
18
|
-
def autosaved?
|
|
19
|
-
Threaded.autosaved?(self)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# Begin the associated autosave.
|
|
23
|
-
#
|
|
24
|
-
# @example Begin autosave.
|
|
25
|
-
# document.__autosaving__
|
|
26
|
-
#
|
|
27
|
-
# @since 3.1.3
|
|
28
|
-
def __autosaving__
|
|
29
|
-
Threaded.begin_autosave(self)
|
|
30
|
-
yield
|
|
31
|
-
ensure
|
|
32
|
-
Threaded.exit_autosave(self)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# Check if there is changes for auto-saving
|
|
36
|
-
#
|
|
37
|
-
# @example Return true if there is changes on self or in
|
|
38
|
-
# autosaved relations.
|
|
39
|
-
# document.changed_for_autosave?
|
|
40
|
-
#
|
|
41
|
-
# @since 3.1.3
|
|
42
|
-
def changed_for_autosave?(doc)
|
|
43
|
-
doc.new_record? || doc.changed? || doc.marked_for_destruction?
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
module ClassMethods
|
|
47
|
-
|
|
48
|
-
# Set up the autosave behaviour for references many and references one
|
|
49
|
-
# relations. When the option is set to true, these relations will get
|
|
50
|
-
# saved automatically when the parent saved, if they are dirty.
|
|
51
|
-
#
|
|
52
|
-
# @example Set up autosave options.
|
|
53
|
-
# Person.autosave(metadata)
|
|
54
|
-
#
|
|
55
|
-
# @param [ Metadata ] metadata The relation metadata.
|
|
56
|
-
#
|
|
57
|
-
# @since 2.0.0.rc.1
|
|
58
|
-
def autosave(metadata)
|
|
59
|
-
if metadata.autosave? && !metadata.embedded?
|
|
60
|
-
save_method = :"autosave_documents_for_#{metadata.name}"
|
|
61
|
-
define_method(save_method) do
|
|
62
|
-
if before_callback_halted?
|
|
63
|
-
self.before_callback_halted = false
|
|
64
|
-
else
|
|
65
|
-
__autosaving__ do
|
|
66
|
-
if relation = ivar(metadata.name)
|
|
67
|
-
if :belongs_to == metadata.macro
|
|
68
|
-
if changed_for_autosave?(relation)
|
|
69
|
-
relation.with(persistence_context) do |_relation|
|
|
70
|
-
_relation.save
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
else
|
|
74
|
-
Array(relation).each do |doc|
|
|
75
|
-
if changed_for_autosave?(doc)
|
|
76
|
-
doc.with(persistence_context) do |d|
|
|
77
|
-
d.save
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
after_save save_method, unless: :autosaved?
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
require "mongoid/relations/binding"
|
|
3
|
-
require "mongoid/relations/bindings/embedded/in"
|
|
4
|
-
require "mongoid/relations/bindings/embedded/many"
|
|
5
|
-
require "mongoid/relations/bindings/embedded/one"
|
|
6
|
-
require "mongoid/relations/bindings/referenced/in"
|
|
7
|
-
require "mongoid/relations/bindings/referenced/many"
|
|
8
|
-
require "mongoid/relations/bindings/referenced/many_to_many"
|
|
9
|
-
require "mongoid/relations/bindings/referenced/one"
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Bindings
|
|
5
|
-
module Embedded
|
|
6
|
-
|
|
7
|
-
# Binding class for embedded_in relations.
|
|
8
|
-
class In < Binding
|
|
9
|
-
|
|
10
|
-
# Binds the base object to the inverse of the relation. This is so we
|
|
11
|
-
# are referenced to the actual objects themselves on both sides.
|
|
12
|
-
#
|
|
13
|
-
# This case sets the metadata on the inverse object as well as the
|
|
14
|
-
# document itself.
|
|
15
|
-
#
|
|
16
|
-
# @example Bind the documents.
|
|
17
|
-
# name.person.bind(:continue => true)
|
|
18
|
-
# name.person = Person.new
|
|
19
|
-
#
|
|
20
|
-
# @option options [ true, false ] :continue Continue binding the inverse.
|
|
21
|
-
# @option options [ true, false ] :binding Are we in build mode?
|
|
22
|
-
#
|
|
23
|
-
# @since 2.0.0.rc.1
|
|
24
|
-
def bind_one
|
|
25
|
-
base.__metadata = metadata.inverse_metadata(target) unless base.__metadata
|
|
26
|
-
base.parentize(target)
|
|
27
|
-
binding do
|
|
28
|
-
if base.embedded_many?
|
|
29
|
-
target.do_or_do_not(metadata.inverse(target)).push(base)
|
|
30
|
-
else
|
|
31
|
-
target.do_or_do_not(metadata.inverse_setter(target), base)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Unbinds the base object and the inverse, caused by setting the
|
|
37
|
-
# reference to nil.
|
|
38
|
-
#
|
|
39
|
-
# @example Unbind the document.
|
|
40
|
-
# name.person.unbind(:continue => true)
|
|
41
|
-
# name.person = nil
|
|
42
|
-
#
|
|
43
|
-
# @option options [ true, false ] :continue Do we continue unbinding?
|
|
44
|
-
#
|
|
45
|
-
# @since 2.0.0.rc.1
|
|
46
|
-
def unbind_one
|
|
47
|
-
binding do
|
|
48
|
-
if base.embedded_many?
|
|
49
|
-
target.do_or_do_not(metadata.inverse(target)).delete(base)
|
|
50
|
-
else
|
|
51
|
-
target.do_or_do_not(metadata.inverse_setter(target), nil)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Bindings
|
|
5
|
-
module Referenced
|
|
6
|
-
|
|
7
|
-
# Binding class for all referenced_in relations.
|
|
8
|
-
class In < Binding
|
|
9
|
-
|
|
10
|
-
# Binds the base object to the inverse of the relation. This is so we
|
|
11
|
-
# are referenced to the actual objects themselves on both sides.
|
|
12
|
-
#
|
|
13
|
-
# This case sets the metadata on the inverse object as well as the
|
|
14
|
-
# document itself.
|
|
15
|
-
#
|
|
16
|
-
# @example Bind the documents.
|
|
17
|
-
# game.person.bind(:continue => true)
|
|
18
|
-
# game.person = Person.new
|
|
19
|
-
#
|
|
20
|
-
# @since 2.0.0.rc.1
|
|
21
|
-
def bind_one
|
|
22
|
-
binding do
|
|
23
|
-
check_inverses!(target)
|
|
24
|
-
bind_foreign_key(base, record_id(target))
|
|
25
|
-
bind_polymorphic_inverse_type(base, target.class.name)
|
|
26
|
-
if inverse = metadata.inverse(target)
|
|
27
|
-
if set_base_metadata
|
|
28
|
-
if base.referenced_many?
|
|
29
|
-
target.__send__(inverse).push(base)
|
|
30
|
-
else
|
|
31
|
-
target.set_relation(inverse, base)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Unbinds the base object and the inverse, caused by setting the
|
|
39
|
-
# reference to nil.
|
|
40
|
-
#
|
|
41
|
-
# @example Unbind the document.
|
|
42
|
-
# game.person.unbind(:continue => true)
|
|
43
|
-
# game.person = nil
|
|
44
|
-
#
|
|
45
|
-
# @since 2.0.0.rc.1
|
|
46
|
-
def unbind_one
|
|
47
|
-
binding do
|
|
48
|
-
inverse = metadata.inverse(target)
|
|
49
|
-
bind_foreign_key(base, nil)
|
|
50
|
-
bind_polymorphic_inverse_type(base, nil)
|
|
51
|
-
if inverse
|
|
52
|
-
set_base_metadata
|
|
53
|
-
if base.referenced_many?
|
|
54
|
-
target.__send__(inverse).delete(base)
|
|
55
|
-
else
|
|
56
|
-
target.set_relation(inverse, nil)
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Bindings
|
|
5
|
-
module Referenced
|
|
6
|
-
|
|
7
|
-
# Binding class for all references_and_referenced_in_many relations.
|
|
8
|
-
class ManyToMany < Binding
|
|
9
|
-
|
|
10
|
-
# Binds a single document with the inverse relation. Used
|
|
11
|
-
# specifically when appending to the proxy.
|
|
12
|
-
#
|
|
13
|
-
# @example Bind one document.
|
|
14
|
-
# person.preferences.bind_one(preference)
|
|
15
|
-
#
|
|
16
|
-
# @param [ Document ] doc The single document to bind.
|
|
17
|
-
#
|
|
18
|
-
# @since 2.0.0.rc.1
|
|
19
|
-
def bind_one(doc)
|
|
20
|
-
binding do
|
|
21
|
-
inverse_keys = doc.you_must(metadata.inverse_foreign_key)
|
|
22
|
-
if inverse_keys
|
|
23
|
-
record_id = inverse_record_id(doc)
|
|
24
|
-
unless inverse_keys.include?(record_id)
|
|
25
|
-
doc.you_must(metadata.inverse_foreign_key_setter, inverse_keys.push(record_id))
|
|
26
|
-
end
|
|
27
|
-
doc.reset_relation_criteria(metadata.inverse)
|
|
28
|
-
end
|
|
29
|
-
base._synced[metadata.foreign_key] = true
|
|
30
|
-
doc._synced[metadata.inverse_foreign_key] = true
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Unbind a single document.
|
|
35
|
-
#
|
|
36
|
-
# @example Unbind the document.
|
|
37
|
-
# person.preferences.unbind_one(document)
|
|
38
|
-
#
|
|
39
|
-
# @since 2.0.0.rc.1
|
|
40
|
-
def unbind_one(doc)
|
|
41
|
-
binding do
|
|
42
|
-
base.send(metadata.foreign_key).delete_one(record_id(doc))
|
|
43
|
-
inverse_keys = doc.you_must(metadata.inverse_foreign_key)
|
|
44
|
-
if inverse_keys
|
|
45
|
-
inverse_keys.delete_one(inverse_record_id(doc))
|
|
46
|
-
doc.reset_relation_criteria(metadata.inverse)
|
|
47
|
-
end
|
|
48
|
-
base._synced[metadata.foreign_key] = true
|
|
49
|
-
doc._synced[metadata.inverse_foreign_key] = true
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Find the inverse id referenced by inverse_keys
|
|
54
|
-
def inverse_record_id(doc)
|
|
55
|
-
inverse_metadata = determine_inverse_metadata(doc)
|
|
56
|
-
if inverse_metadata
|
|
57
|
-
base.__send__(inverse_metadata.primary_key)
|
|
58
|
-
else
|
|
59
|
-
base._id
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def determine_inverse_metadata(doc)
|
|
64
|
-
doc.relations[base.class.name.demodulize.underscore.pluralize]
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
|
|
5
|
-
# Superclass for all builder objects. Builders are responsible for either
|
|
6
|
-
# looking up a relation's target from the database, or creating them from a
|
|
7
|
-
# supplied attributes hash.
|
|
8
|
-
class Builder
|
|
9
|
-
include Threaded::Lifecycle
|
|
10
|
-
|
|
11
|
-
attr_reader :base, :metadata, :object
|
|
12
|
-
|
|
13
|
-
# Instantiate the new builder for a relation.
|
|
14
|
-
#
|
|
15
|
-
# @example Create the builder.
|
|
16
|
-
# Builder.new(metadata, { :field => "value })
|
|
17
|
-
#
|
|
18
|
-
# @param [ Document ] base The base document.
|
|
19
|
-
# @param [ Metdata ] metadata The metadata for the relation.
|
|
20
|
-
# @param [ Hash, BSON::ObjectId ] object The attributes to build from or
|
|
21
|
-
# id to query with.
|
|
22
|
-
#
|
|
23
|
-
# @since 2.0.0.rc.1
|
|
24
|
-
def initialize(base, metadata, object)
|
|
25
|
-
@base, @metadata, @object = base, metadata, object
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
protected
|
|
29
|
-
|
|
30
|
-
# Get the class from the metadata.
|
|
31
|
-
#
|
|
32
|
-
# @example Get the class.
|
|
33
|
-
# builder.klass
|
|
34
|
-
#
|
|
35
|
-
# @return [ Class ] The class from the metadata.
|
|
36
|
-
#
|
|
37
|
-
# @since 2.3.2
|
|
38
|
-
def klass
|
|
39
|
-
@klass ||= metadata.klass
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Do we need to perform a database query? It will be so if the object we
|
|
43
|
-
# have is not a document.
|
|
44
|
-
#
|
|
45
|
-
# @example Should we query the database?
|
|
46
|
-
# builder.query?
|
|
47
|
-
#
|
|
48
|
-
# @return [ true, false ] Whether a database query should happen.
|
|
49
|
-
#
|
|
50
|
-
# @since 2.0.0.rc.1
|
|
51
|
-
def query?
|
|
52
|
-
obj = object.__array__.first
|
|
53
|
-
!obj.is_a?(Mongoid::Document) && !obj.nil?
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
require "mongoid/relations/builder"
|
|
3
|
-
require "mongoid/relations/nested_builder"
|
|
4
|
-
require "mongoid/relations/builders/embedded/in"
|
|
5
|
-
require "mongoid/relations/builders/embedded/many"
|
|
6
|
-
require "mongoid/relations/builders/embedded/one"
|
|
7
|
-
require "mongoid/relations/builders/nested_attributes/one"
|
|
8
|
-
require "mongoid/relations/builders/nested_attributes/many"
|
|
9
|
-
require "mongoid/relations/builders/referenced/in"
|
|
10
|
-
require "mongoid/relations/builders/referenced/many"
|
|
11
|
-
require "mongoid/relations/builders/referenced/many_to_many"
|
|
12
|
-
require "mongoid/relations/builders/referenced/one"
|
|
13
|
-
|
|
14
|
-
module Mongoid
|
|
15
|
-
module Relations
|
|
16
|
-
|
|
17
|
-
# This module is responsible for defining the build and create methods used
|
|
18
|
-
# in one to one relations.
|
|
19
|
-
#
|
|
20
|
-
# @example Methods that get created.
|
|
21
|
-
#
|
|
22
|
-
# class Person
|
|
23
|
-
# include Mongoid::Document
|
|
24
|
-
# embeds_one :name
|
|
25
|
-
# end
|
|
26
|
-
#
|
|
27
|
-
# # The following methods get created:
|
|
28
|
-
# person.build_name({ :first_name => "Durran" })
|
|
29
|
-
# person.create_name({ :first_name => "Durran" })
|
|
30
|
-
#
|
|
31
|
-
# @since 2.0.0.rc.1
|
|
32
|
-
module Builders
|
|
33
|
-
extend ActiveSupport::Concern
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
-
|
|
37
|
-
# Parse out the attributes and the options from the args passed to a
|
|
38
|
-
# build_ or create_ methods.
|
|
39
|
-
#
|
|
40
|
-
# @example Parse the args.
|
|
41
|
-
# doc.parse_args(:name => "Joe")
|
|
42
|
-
#
|
|
43
|
-
# @param [ Array ] args The arguments.
|
|
44
|
-
#
|
|
45
|
-
# @return [ Array<Hash> ] The attributes and options.
|
|
46
|
-
#
|
|
47
|
-
# @since 2.3.4
|
|
48
|
-
def parse_args(*args)
|
|
49
|
-
[ args.first || {}, args.size > 1 ? args[1] : {} ]
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
module ClassMethods
|
|
53
|
-
|
|
54
|
-
# Defines a builder method for an embeds_one relation. This is
|
|
55
|
-
# defined as #build_name.
|
|
56
|
-
#
|
|
57
|
-
# @example
|
|
58
|
-
# Person.builder("name")
|
|
59
|
-
#
|
|
60
|
-
# @param [ String, Symbol ] name The name of the relation.
|
|
61
|
-
#
|
|
62
|
-
# @return [ Class ] The class being set up.
|
|
63
|
-
#
|
|
64
|
-
# @since 2.0.0.rc.1
|
|
65
|
-
def builder(name, metadata)
|
|
66
|
-
re_define_method("build_#{name}") do |*args|
|
|
67
|
-
attributes, _options = parse_args(*args)
|
|
68
|
-
document = Factory.build(metadata.klass, attributes)
|
|
69
|
-
_building do
|
|
70
|
-
child = send("#{name}=", document)
|
|
71
|
-
child.run_callbacks(:build)
|
|
72
|
-
child
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
self
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
# Defines a creator method for an embeds_one relation. This is
|
|
79
|
-
# defined as #create_name. After the object is built it will
|
|
80
|
-
# immediately save.
|
|
81
|
-
#
|
|
82
|
-
# @example
|
|
83
|
-
# Person.creator("name")
|
|
84
|
-
#
|
|
85
|
-
# @param [ String, Symbol ] name The name of the relation.
|
|
86
|
-
#
|
|
87
|
-
# @return [ Class ] The class being set up.
|
|
88
|
-
#
|
|
89
|
-
# @since 2.0.0.rc.1
|
|
90
|
-
def creator(name, metadata)
|
|
91
|
-
re_define_method("create_#{name}") do |*args|
|
|
92
|
-
attributes, _options = parse_args(*args)
|
|
93
|
-
document = Factory.build(metadata.klass, attributes)
|
|
94
|
-
doc = _assigning do
|
|
95
|
-
send("#{name}=", document)
|
|
96
|
-
end
|
|
97
|
-
doc.save
|
|
98
|
-
save if new_record? && metadata.stores_foreign_key?
|
|
99
|
-
doc
|
|
100
|
-
end
|
|
101
|
-
self
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|