mongoid 6.4.2 → 7.0.3
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
- data/README.md +1 -1
- data/lib/config/locales/en.yml +17 -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 +137 -0
- data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
- data/lib/mongoid/{relations → association}/embedded/batchable.rb +19 -19
- data/lib/mongoid/association/embedded/cyclic.rb +109 -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/embedded_in.rb +154 -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 +552 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +210 -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/embedded/embeds_one.rb +173 -0
- data/lib/mongoid/association/embedded.rb +4 -0
- data/lib/mongoid/association/macros.rb +204 -0
- data/lib/mongoid/{relations → association}/many.rb +19 -49
- data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
- 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/association/nested.rb +15 -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/auto_save.rb +79 -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/belongs_to.rb +248 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
- data/lib/mongoid/association/referenced/eager.rb +162 -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 +312 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -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 +510 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +578 -0
- data/lib/mongoid/association/referenced/has_many.rb +275 -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/has_one.rb +204 -0
- data/lib/mongoid/association/referenced/syncable.rb +170 -0
- data/lib/mongoid/association/referenced.rb +7 -0
- data/lib/mongoid/{relations → association}/reflections.rb +21 -17
- data/lib/mongoid/association/relatable.rb +509 -0
- data/lib/mongoid/{relations.rb → association.rb} +57 -56
- data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
- data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
- data/lib/mongoid/atomic.rb +4 -4
- data/lib/mongoid/attributes/dynamic.rb +2 -2
- data/lib/mongoid/attributes/nested.rb +22 -11
- data/lib/mongoid/attributes/processing.rb +2 -2
- data/lib/mongoid/attributes/readonly.rb +2 -4
- data/lib/mongoid/attributes.rb +22 -13
- data/lib/mongoid/changeable.rb +1 -1
- data/lib/mongoid/clients/options.rb +7 -5
- data/lib/mongoid/composable.rb +4 -4
- data/lib/mongoid/config.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +1 -1
- data/lib/mongoid/contextual/memory.rb +21 -3
- data/lib/mongoid/contextual/mongo.rb +10 -8
- data/lib/mongoid/copyable.rb +7 -6
- data/lib/mongoid/criteria/includable.rb +14 -14
- data/lib/mongoid/criteria/modifiable.rb +8 -14
- data/lib/mongoid/criteria/options.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/string.rb +1 -1
- data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
- data/lib/mongoid/criteria/queryable/selectable.rb +37 -7
- data/lib/mongoid/criteria.rb +2 -2
- data/lib/mongoid/document.rb +15 -6
- 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/errors.rb +3 -0
- data/lib/mongoid/extensions/array.rb +5 -5
- data/lib/mongoid/extensions/big_decimal.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +5 -2
- data/lib/mongoid/extensions/object.rb +4 -4
- data/lib/mongoid/extensions/range.rb +1 -0
- data/lib/mongoid/extensions/regexp.rb +1 -0
- data/lib/mongoid/extensions.rb +0 -4
- data/lib/mongoid/factory.rb +13 -3
- 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/fields.rb +3 -3
- data/lib/mongoid/indexable.rb +4 -1
- data/lib/mongoid/interceptable.rb +5 -5
- data/lib/mongoid/matchable/and.rb +1 -1
- data/lib/mongoid/matchable/elem_match.rb +9 -3
- data/lib/mongoid/matchable/eq.rb +22 -0
- data/lib/mongoid/matchable/ne.rb +1 -1
- data/lib/mongoid/matchable.rb +3 -1
- data/lib/mongoid/persistable/deletable.rb +7 -6
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +57 -12
- data/lib/mongoid/persistable.rb +4 -5
- data/lib/mongoid/persistence_context.rb +20 -5
- data/lib/mongoid/query_cache.rb +8 -4
- data/lib/mongoid/railtie.rb +17 -0
- data/lib/mongoid/railties/controller_runtime.rb +86 -0
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +4 -4
- data/lib/mongoid/shardable.rb +1 -1
- data/lib/mongoid/threaded.rb +36 -0
- data/lib/mongoid/touchable.rb +102 -0
- data/lib/mongoid/traversable.rb +3 -3
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +4 -4
- data/lib/mongoid/validatable.rb +8 -8
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -0
- data/spec/app/models/animal.rb +2 -1
- data/spec/app/models/bomb.rb +1 -1
- data/spec/app/models/message.rb +1 -1
- data/spec/app/models/minim.rb +7 -0
- data/spec/app/models/person.rb +5 -2
- data/spec/app/models/shipment_address.rb +1 -0
- data/spec/app/models/store_as_dup_test3.rb +7 -0
- data/spec/app/models/store_as_dup_test4.rb +7 -0
- data/spec/app/models/updatable.rb +7 -0
- data/spec/app/models/vertex.rb +6 -0
- data/spec/app/models/wiki_page.rb +1 -1
- data/spec/config/mongoid.yml +13 -3
- data/spec/integration/associations/belongs_to_spec.rb +13 -0
- data/spec/lite_spec_helper.rb +56 -0
- data/spec/mongoid/{relations → association}/accessors_spec.rb +40 -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 +866 -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/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} +124 -182
- 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 -73
- 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 +66 -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} +33 -14
- 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 +2006 -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} +26 -7
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +56 -0
- 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_models.rb +26 -0
- 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} +26 -11
- data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +122 -1
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
- data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
- data/spec/mongoid/association/referenced/has_many_models.rb +37 -0
- 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_models.rb +48 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1350 -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_spec.rb → association_spec.rb} +1 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +2 -2
- data/spec/mongoid/atomic_spec.rb +4 -4
- data/spec/mongoid/attributes/nested_spec.rb +29 -11
- data/spec/mongoid/attributes/readonly_spec.rb +80 -125
- data/spec/mongoid/attributes_spec.rb +38 -2
- data/spec/mongoid/clients/factory_spec.rb +24 -18
- data/spec/mongoid/clients/options_spec.rb +58 -44
- data/spec/mongoid/clients/sessions_spec.rb +1 -1
- data/spec/mongoid/clients/transactions_spec.rb +369 -0
- data/spec/mongoid/clients_spec.rb +68 -8
- data/spec/mongoid/config_spec.rb +27 -1
- data/spec/mongoid/contextual/memory_spec.rb +19 -0
- data/spec/mongoid/contextual/mongo_spec.rb +33 -5
- data/spec/mongoid/copyable_spec.rb +90 -6
- data/spec/mongoid/copyable_spec_models.rb +17 -0
- 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/extensions/string_spec.rb +43 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +42 -3
- data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
- data/spec/mongoid/criteria/scopable_spec.rb +81 -0
- data/spec/mongoid/criteria_spec.rb +33 -18
- data/spec/mongoid/document_spec.rb +83 -4
- data/spec/mongoid/extensions/array_spec.rb +11 -15
- data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
- data/spec/mongoid/extensions/hash_spec.rb +18 -1
- 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 +23 -0
- data/spec/mongoid/factory_spec.rb +19 -1
- 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 +22 -1
- data/spec/mongoid/matchable/elem_match_spec.rb +20 -0
- data/spec/mongoid/matchable/eq_spec.rb +48 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
- data/spec/mongoid/persistable/savable_spec.rb +2 -2
- data/spec/mongoid/persistable/settable_spec.rb +95 -10
- data/spec/mongoid/persistable_spec.rb +21 -6
- data/spec/mongoid/persistence_context_spec.rb +1 -1
- data/spec/mongoid/query_cache_spec.rb +61 -22
- data/spec/mongoid/relations/proxy_spec.rb +124 -124
- data/spec/mongoid/scopable_spec.rb +13 -0
- data/spec/mongoid/shardable_spec.rb +32 -12
- data/spec/mongoid/threaded_spec.rb +68 -0
- data/spec/mongoid/{relations/touchable_spec.rb → touchable_spec.rb} +40 -1
- 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/rails/controller_extension/controller_runtime_spec.rb +110 -0
- data/spec/spec_helper.rb +51 -25
- data/spec/support/constraints.rb +101 -0
- data/spec/support/macros.rb +20 -0
- data/spec/support/spec_config.rb +39 -0
- metadata +602 -582
- checksums.yaml.gz.sig +0 -2
- data/lib/mongoid/relations/accessors.rb +0 -267
- data/lib/mongoid/relations/auto_save.rb +0 -94
- 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/bindings.rb +0 -9
- data/lib/mongoid/relations/builder.rb +0 -57
- 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/builders.rb +0 -106
- 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/cascading.rb +0 -56
- 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/enumerable.rb +0 -493
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -97
- 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/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.tar.gz.sig +0 -0
- metadata.gz.sig +0 -0
- /data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
|
|
5
|
-
# This is the superclass for builders that are in charge of handling
|
|
6
|
-
# creation, deletion, and updates of documents through that ever so lovely
|
|
7
|
-
# #accepts_nested_attributes_for.
|
|
8
|
-
class NestedBuilder
|
|
9
|
-
attr_accessor :attributes, :existing, :metadata, :options
|
|
10
|
-
|
|
11
|
-
# Determines if destroys are allowed for this document.
|
|
12
|
-
#
|
|
13
|
-
# @example Do we allow a destroy?
|
|
14
|
-
# builder.allow_destroy?
|
|
15
|
-
#
|
|
16
|
-
# @return [ true, false ] True if the allow destroy option was set.
|
|
17
|
-
#
|
|
18
|
-
# @since 2.0.0.rc.1
|
|
19
|
-
def allow_destroy?
|
|
20
|
-
options[:allow_destroy] || false
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Returns the reject if option defined with the macro.
|
|
24
|
-
#
|
|
25
|
-
# @example Is there a reject proc?
|
|
26
|
-
# builder.reject?
|
|
27
|
-
#
|
|
28
|
-
# @param [ Document ] document The parent document of the relation
|
|
29
|
-
# @param [ Hash ] attrs The attributes to check for rejection.
|
|
30
|
-
#
|
|
31
|
-
# @return [ true, false ] True and call proc or method if rejectable, false if not.
|
|
32
|
-
#
|
|
33
|
-
# @since 2.0.0.rc.1
|
|
34
|
-
def reject?(document, attrs)
|
|
35
|
-
case callback = options[:reject_if]
|
|
36
|
-
when Symbol
|
|
37
|
-
document.method(callback).arity == 0 ? document.send(callback) : document.send(callback, attrs)
|
|
38
|
-
when Proc
|
|
39
|
-
callback.call(attrs)
|
|
40
|
-
else
|
|
41
|
-
false
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Determines if only updates can occur. Only valid for one-to-one
|
|
46
|
-
# relations.
|
|
47
|
-
#
|
|
48
|
-
# @example Is this update only?
|
|
49
|
-
# builder.update_only?
|
|
50
|
-
#
|
|
51
|
-
# @return [ true, false ] True if the update_only option was set.
|
|
52
|
-
#
|
|
53
|
-
# @since 2.0.0.rc.1
|
|
54
|
-
def update_only?
|
|
55
|
-
options[:update_only] || false
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Convert an id to its appropriate type.
|
|
59
|
-
#
|
|
60
|
-
# @example Convert the id.
|
|
61
|
-
# builder.convert_id(Person, "4d371b444835d98b8b000010")
|
|
62
|
-
#
|
|
63
|
-
# @param [ Class ] klass The class we're trying to convert for.
|
|
64
|
-
# @param [ String ] id The id, usually coming from the form.
|
|
65
|
-
#
|
|
66
|
-
# @return [ BSON::ObjectId, String, Object ] The converted id.
|
|
67
|
-
#
|
|
68
|
-
# @since 2.0.0.rc.6
|
|
69
|
-
def convert_id(klass, id)
|
|
70
|
-
klass.using_object_ids? ? BSON::ObjectId.mongoize(id) : id
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
|
|
5
|
-
# This module contains the validating logic for options passed to relation
|
|
6
|
-
# macros.
|
|
7
|
-
module Options
|
|
8
|
-
extend self
|
|
9
|
-
|
|
10
|
-
# These options are available to all relations.
|
|
11
|
-
COMMON = [
|
|
12
|
-
:class_name,
|
|
13
|
-
:counter_cache,
|
|
14
|
-
:extend,
|
|
15
|
-
:inverse_class_name,
|
|
16
|
-
:inverse_of,
|
|
17
|
-
:name,
|
|
18
|
-
:relation,
|
|
19
|
-
:validate
|
|
20
|
-
].freeze
|
|
21
|
-
|
|
22
|
-
# Determine if the provided options are valid for the relation.
|
|
23
|
-
#
|
|
24
|
-
# @example Check the options.
|
|
25
|
-
# Options.validate!(:name => :comments)
|
|
26
|
-
#
|
|
27
|
-
# @param [ Hash ] options The options to check.
|
|
28
|
-
#
|
|
29
|
-
# @raise [ ArgumentError ] If the options are invalid.
|
|
30
|
-
#
|
|
31
|
-
# @return [ true, false ] If the options are valid.
|
|
32
|
-
#
|
|
33
|
-
# @since 2.1.0
|
|
34
|
-
def validate!(options)
|
|
35
|
-
valid_options = options[:relation]::VALID_OPTIONS + COMMON
|
|
36
|
-
options.keys.each do |key|
|
|
37
|
-
if !valid_options.include?(key)
|
|
38
|
-
raise Errors::InvalidOptions.new(
|
|
39
|
-
options[:name],
|
|
40
|
-
key,
|
|
41
|
-
valid_options
|
|
42
|
-
)
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
true
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
|
|
5
|
-
# This module contains the behaviour for handling polymorphic relational
|
|
6
|
-
# associations.
|
|
7
|
-
module Polymorphic
|
|
8
|
-
extend ActiveSupport::Concern
|
|
9
|
-
|
|
10
|
-
included do
|
|
11
|
-
class_attribute :polymorphic
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
module ClassMethods
|
|
15
|
-
|
|
16
|
-
# Attempts to set up the information needed to handle a polymorphic
|
|
17
|
-
# relation, if the metadata checks out.
|
|
18
|
-
#
|
|
19
|
-
# @example Set up the polymorphic information.
|
|
20
|
-
# Movie.polymorph(metadata)
|
|
21
|
-
#
|
|
22
|
-
# @param [ Metadata ] metadata The relation metadata.
|
|
23
|
-
#
|
|
24
|
-
# @return [ Class ] The class being set up.
|
|
25
|
-
#
|
|
26
|
-
# @since 2.0.0.rc.1
|
|
27
|
-
def polymorph(metadata)
|
|
28
|
-
if metadata.polymorphic?
|
|
29
|
-
self.polymorphic = true
|
|
30
|
-
if metadata.relation.stores_foreign_key?
|
|
31
|
-
field(metadata.inverse_type, type: String)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
self
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Referenced
|
|
5
|
-
|
|
6
|
-
# This class handles all behaviour for relations that are either
|
|
7
|
-
# one-to-many or one-to-one, where the foreign key is store on this side
|
|
8
|
-
# of the relation and the reference is to document(s) in another
|
|
9
|
-
# collection.
|
|
10
|
-
class In < Relations::One
|
|
11
|
-
include Evolvable
|
|
12
|
-
|
|
13
|
-
# The allowed options when defining this relation.
|
|
14
|
-
#
|
|
15
|
-
# @return [ Array<Symbol> ] The allowed options when defining this relation.
|
|
16
|
-
#
|
|
17
|
-
# @since 6.0.0
|
|
18
|
-
VALID_OPTIONS = [
|
|
19
|
-
:autobuild,
|
|
20
|
-
:autosave,
|
|
21
|
-
:dependent,
|
|
22
|
-
:foreign_key,
|
|
23
|
-
:index,
|
|
24
|
-
:polymorphic,
|
|
25
|
-
:primary_key,
|
|
26
|
-
:touch,
|
|
27
|
-
:optional,
|
|
28
|
-
:required
|
|
29
|
-
].freeze
|
|
30
|
-
|
|
31
|
-
# Instantiate a new referenced_in relation.
|
|
32
|
-
#
|
|
33
|
-
# @example Create the new relation.
|
|
34
|
-
# Referenced::In.new(game, person, metadata)
|
|
35
|
-
#
|
|
36
|
-
# @param [ Document ] base The document this relation hangs off of.
|
|
37
|
-
# @param [ Document, Array<Document> ] target The target (parent) of the
|
|
38
|
-
# relation.
|
|
39
|
-
# @param [ Metadata ] metadata The relation's metadata.
|
|
40
|
-
def initialize(base, target, metadata)
|
|
41
|
-
init(base, target, metadata) do
|
|
42
|
-
characterize_one(target)
|
|
43
|
-
bind_one
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# Removes the association between the base document and the target
|
|
48
|
-
# document by deleting the foreign key and the reference, orphaning
|
|
49
|
-
# the target document in the process.
|
|
50
|
-
#
|
|
51
|
-
# @example Nullify the relation.
|
|
52
|
-
# person.game.nullify
|
|
53
|
-
#
|
|
54
|
-
def nullify
|
|
55
|
-
unbind_one
|
|
56
|
-
target.save
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# Substitutes the supplied target documents for the existing document
|
|
60
|
-
# in the relation.
|
|
61
|
-
#
|
|
62
|
-
# @example Substitute the relation.
|
|
63
|
-
# name.substitute(new_name)
|
|
64
|
-
#
|
|
65
|
-
# @param [ Document, Array<Document> ] replacement The replacement.
|
|
66
|
-
#
|
|
67
|
-
# @return [ In, nil ] The relation or nil.
|
|
68
|
-
#
|
|
69
|
-
# @since 2.0.0.rc.1
|
|
70
|
-
def substitute(replacement)
|
|
71
|
-
unbind_one
|
|
72
|
-
return nil unless replacement
|
|
73
|
-
self.target = normalize(replacement)
|
|
74
|
-
bind_one
|
|
75
|
-
self
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
private
|
|
79
|
-
|
|
80
|
-
# Instantiate the binding associated with this relation.
|
|
81
|
-
#
|
|
82
|
-
# @example Get the binding object.
|
|
83
|
-
# binding([ address ])
|
|
84
|
-
#
|
|
85
|
-
# @return [ Binding ] The binding object.
|
|
86
|
-
#
|
|
87
|
-
# @since 2.0.0.rc.1
|
|
88
|
-
def binding
|
|
89
|
-
Bindings::Referenced::In.new(base, target, __metadata)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# Normalize the value provided as a replacement for substitution.
|
|
93
|
-
#
|
|
94
|
-
# @api private
|
|
95
|
-
#
|
|
96
|
-
# @example Normalize the substitute.
|
|
97
|
-
# proxy.normalize(id)
|
|
98
|
-
#
|
|
99
|
-
# @param [ Document, Object ] replacement The replacement object.
|
|
100
|
-
#
|
|
101
|
-
# @return [ Document ] The document.
|
|
102
|
-
#
|
|
103
|
-
# @since 3.1.5
|
|
104
|
-
def normalize(replacement)
|
|
105
|
-
return replacement if replacement.is_a?(Document)
|
|
106
|
-
__metadata.builder(klass, replacement).build
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# Are we able to persist this relation?
|
|
110
|
-
#
|
|
111
|
-
# @example Can we persist the relation?
|
|
112
|
-
# relation.persistable?
|
|
113
|
-
#
|
|
114
|
-
# @return [ true, false ] If the relation is persistable.
|
|
115
|
-
#
|
|
116
|
-
# @since 2.1.0
|
|
117
|
-
def persistable?
|
|
118
|
-
target.persisted? && !_binding? && !_building?
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
class << self
|
|
122
|
-
|
|
123
|
-
# Return the builder that is responsible for generating the documents
|
|
124
|
-
# that will be used by this relation.
|
|
125
|
-
#
|
|
126
|
-
# @example Get the builder.
|
|
127
|
-
# Referenced::In.builder(meta, object)
|
|
128
|
-
#
|
|
129
|
-
# @param [ Document ] base The base document.
|
|
130
|
-
# @param [ Metadata ] meta The metadata of the relation.
|
|
131
|
-
# @param [ Document, Hash ] object A document or attributes to build
|
|
132
|
-
# with.
|
|
133
|
-
#
|
|
134
|
-
# @return [ Builder ] A new builder object.
|
|
135
|
-
#
|
|
136
|
-
# @since 2.0.0.rc.1
|
|
137
|
-
def builder(base, meta, object)
|
|
138
|
-
Builders::Referenced::In.new(base, meta, object)
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
# Get the standard criteria used for querying this relation.
|
|
142
|
-
#
|
|
143
|
-
# @example Get the criteria.
|
|
144
|
-
# Proxy.criteria(meta, id, Model)
|
|
145
|
-
#
|
|
146
|
-
# @param [ Metadata ] metadata The metadata.
|
|
147
|
-
# @param [ Object ] object The value of the foreign key.
|
|
148
|
-
# @param [ Class ] type The optional type.
|
|
149
|
-
#
|
|
150
|
-
# @return [ Criteria ] The criteria.
|
|
151
|
-
#
|
|
152
|
-
# @since 2.1.0
|
|
153
|
-
def criteria(metadata, object, type = nil)
|
|
154
|
-
type.where(metadata.primary_key => object)
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
def eager_load_klass
|
|
158
|
-
Relations::Eager::BelongsTo
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
# Returns true if the relation is an embedded one. In this case
|
|
162
|
-
# always false.
|
|
163
|
-
#
|
|
164
|
-
# @example Is this relation embedded?
|
|
165
|
-
# Referenced::In.embedded?
|
|
166
|
-
#
|
|
167
|
-
# @return [ false ] Always false.
|
|
168
|
-
#
|
|
169
|
-
# @since 2.0.0.rc.1
|
|
170
|
-
def embedded?
|
|
171
|
-
false
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
# Get the foreign key for the provided name.
|
|
175
|
-
#
|
|
176
|
-
# @example Get the foreign key.
|
|
177
|
-
# Referenced::In.foreign_key(:person)
|
|
178
|
-
#
|
|
179
|
-
# @param [ Symbol ] name The name.
|
|
180
|
-
#
|
|
181
|
-
# @return [ String ] The foreign key.
|
|
182
|
-
#
|
|
183
|
-
# @since 3.0.0
|
|
184
|
-
def foreign_key(name)
|
|
185
|
-
"#{name}#{foreign_key_suffix}"
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
# Get the default value for the foreign key.
|
|
189
|
-
#
|
|
190
|
-
# @example Get the default.
|
|
191
|
-
# Referenced::In.foreign_key_default
|
|
192
|
-
#
|
|
193
|
-
# @return [ nil ] Always nil.
|
|
194
|
-
#
|
|
195
|
-
# @since 2.0.0.rc.1
|
|
196
|
-
def foreign_key_default
|
|
197
|
-
nil
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
# Returns the suffix of the foreign key field, either "_id" or "_ids".
|
|
201
|
-
#
|
|
202
|
-
# @example Get the suffix for the foreign key.
|
|
203
|
-
# Referenced::In.foreign_key_suffix
|
|
204
|
-
#
|
|
205
|
-
# @return [ String ] "_id"
|
|
206
|
-
#
|
|
207
|
-
# @since 2.0.0.rc.1
|
|
208
|
-
def foreign_key_suffix
|
|
209
|
-
"_id"
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
# Returns the macro for this relation. Used mostly as a helper in
|
|
213
|
-
# reflection.
|
|
214
|
-
#
|
|
215
|
-
# @example Get the macro.
|
|
216
|
-
# Referenced::In.macro
|
|
217
|
-
#
|
|
218
|
-
# @return [ Symbol ] :belongs_to
|
|
219
|
-
def macro
|
|
220
|
-
:belongs_to
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
# Return the nested builder that is responsible for generating the documents
|
|
224
|
-
# that will be used by this relation.
|
|
225
|
-
#
|
|
226
|
-
# @example Get the nested builder.
|
|
227
|
-
# Referenced::In.builder(attributes, options)
|
|
228
|
-
#
|
|
229
|
-
# @param [ Metadata ] metadata The relation metadata.
|
|
230
|
-
# @param [ Hash ] attributes The attributes to build with.
|
|
231
|
-
# @param [ Hash ] options The options for the builder.
|
|
232
|
-
#
|
|
233
|
-
# @option options [ true, false ] :allow_destroy Can documents be
|
|
234
|
-
# deleted?
|
|
235
|
-
# @option options [ Integer ] :limit Max number of documents to
|
|
236
|
-
# create at once.
|
|
237
|
-
# @option options [ Proc, Symbol ] :reject_if If documents match this
|
|
238
|
-
# option then they are ignored.
|
|
239
|
-
# @option options [ true, false ] :update_only Only existing documents
|
|
240
|
-
# can be modified.
|
|
241
|
-
#
|
|
242
|
-
# @return [ NestedBuilder ] A newly instantiated nested builder object.
|
|
243
|
-
#
|
|
244
|
-
# @since 2.0.0.rc.1
|
|
245
|
-
def nested_builder(metadata, attributes, options)
|
|
246
|
-
Builders::NestedAttributes::One.new(metadata, attributes, options)
|
|
247
|
-
end
|
|
248
|
-
|
|
249
|
-
# Get the path calculator for the supplied document.
|
|
250
|
-
#
|
|
251
|
-
# @example Get the path calculator.
|
|
252
|
-
# Proxy.path(document)
|
|
253
|
-
#
|
|
254
|
-
# @param [ Document ] document The document to calculate on.
|
|
255
|
-
#
|
|
256
|
-
# @return [ Root ] The root atomic path calculator.
|
|
257
|
-
#
|
|
258
|
-
# @since 2.1.0
|
|
259
|
-
def path(document)
|
|
260
|
-
Mongoid::Atomic::Paths::Root.new(document)
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
# Tells the caller if this relation is one that stores the foreign
|
|
264
|
-
# key on its own objects.
|
|
265
|
-
#
|
|
266
|
-
# @example Does this relation store a foreign key?
|
|
267
|
-
# Referenced::In.stores_foreign_key?
|
|
268
|
-
#
|
|
269
|
-
# @return [ true ] Always true.
|
|
270
|
-
#
|
|
271
|
-
# @since 2.0.0.rc.1
|
|
272
|
-
def stores_foreign_key?
|
|
273
|
-
true
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
# Get the valid options allowed with this relation.
|
|
277
|
-
#
|
|
278
|
-
# @example Get the valid options.
|
|
279
|
-
# Relation.valid_options
|
|
280
|
-
#
|
|
281
|
-
# @return [ Array<Symbol> ] The valid options.
|
|
282
|
-
#
|
|
283
|
-
# @since 2.1.0
|
|
284
|
-
def valid_options
|
|
285
|
-
VALID_OPTIONS
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
# Get the default validation setting for the relation. Determines if
|
|
289
|
-
# by default a validates associated will occur.
|
|
290
|
-
#
|
|
291
|
-
# @example Get the validation default.
|
|
292
|
-
# Proxy.validation_default
|
|
293
|
-
#
|
|
294
|
-
# @return [ true, false ] The validation default.
|
|
295
|
-
#
|
|
296
|
-
# @since 2.1.9
|
|
297
|
-
def validation_default
|
|
298
|
-
false
|
|
299
|
-
end
|
|
300
|
-
end
|
|
301
|
-
end
|
|
302
|
-
end
|
|
303
|
-
end
|
|
304
|
-
end
|