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,6 +1,6 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
2
|
|
|
3
|
-
describe Mongoid::
|
|
3
|
+
describe Mongoid::Association::Referenced::HasMany::Binding do
|
|
4
4
|
|
|
5
5
|
let(:person) do
|
|
6
6
|
Person.new
|
|
@@ -11,17 +11,17 @@ describe Mongoid::Relations::Bindings::Referenced::Many do
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
let(:target) do
|
|
14
|
-
Mongoid::
|
|
14
|
+
Mongoid::Association::Referenced::HasMany::Targets::Enumerable.new([ post ])
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
let(:
|
|
17
|
+
let(:association) do
|
|
18
18
|
Person.relations["posts"]
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
describe "#bind_one" do
|
|
22
22
|
|
|
23
23
|
let(:binding) do
|
|
24
|
-
described_class.new(person, target,
|
|
24
|
+
described_class.new(person, target, association)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
context "when the document is bindable" do
|
|
@@ -55,7 +55,7 @@ describe Mongoid::Relations::Bindings::Referenced::Many do
|
|
|
55
55
|
describe "#unbind_one" do
|
|
56
56
|
|
|
57
57
|
let(:binding) do
|
|
58
|
-
described_class.new(person, target,
|
|
58
|
+
described_class.new(person, target, association)
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
context "when the documents are unbindable" do
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Association::Referenced::HasMany::Buildable do
|
|
4
|
+
|
|
5
|
+
let(:base) do
|
|
6
|
+
double
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "#build" do
|
|
10
|
+
|
|
11
|
+
let(:documents) do
|
|
12
|
+
association.build(base, object)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
let(:options) do
|
|
16
|
+
{}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
let(:association) do
|
|
20
|
+
Mongoid::Association::Referenced::HasMany.new(Person, :posts, options)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "when provided an id" do
|
|
24
|
+
|
|
25
|
+
let(:object) do
|
|
26
|
+
BSON::ObjectId.new
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
let(:criteria) do
|
|
30
|
+
Post.where(association.foreign_key => object)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "returns the criteria" do
|
|
34
|
+
expect(documents).to eq(criteria)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context "when order is specified" do
|
|
39
|
+
|
|
40
|
+
let(:options) do
|
|
41
|
+
{
|
|
42
|
+
order: :rating.asc,
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
let(:object) do
|
|
47
|
+
BSON::ObjectId.new
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
let(:criteria) do
|
|
51
|
+
Post.where(association.foreign_key => object).order_by(options[:order])
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "adds the ordering to the criteria" do
|
|
55
|
+
expect(documents).to eq(criteria)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
context "when the relation is polymorphic" do
|
|
60
|
+
|
|
61
|
+
let(:options) do
|
|
62
|
+
{
|
|
63
|
+
as: :ratable
|
|
64
|
+
}
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
let(:object) do
|
|
68
|
+
BSON::ObjectId.new
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
let(:base) do
|
|
72
|
+
Rating.new
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
let(:criteria) do
|
|
76
|
+
Post.where(association.foreign_key => object, 'ratable_type' => 'Rating')
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "adds the type to the criteria" do
|
|
80
|
+
expect(documents).to eq(criteria)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
context "when provided a object" do
|
|
85
|
+
|
|
86
|
+
let(:object) do
|
|
87
|
+
[ Person.new ]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "returns the object" do
|
|
91
|
+
expect(documents).to eq(object)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
context "when no documents found in the database" do
|
|
96
|
+
|
|
97
|
+
context "when the ids are empty" do
|
|
98
|
+
|
|
99
|
+
let(:object) do
|
|
100
|
+
[ nil ]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "returns an empty array" do
|
|
104
|
+
expect(documents).to be_empty
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context "during initialization" do
|
|
108
|
+
|
|
109
|
+
it "returns an empty array" do
|
|
110
|
+
Person.new do |p|
|
|
111
|
+
expect(p.posts).to be_empty
|
|
112
|
+
expect(p.posts._association).to_not be_nil
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
2
|
|
|
3
|
-
describe Mongoid::
|
|
3
|
+
describe Mongoid::Association::Referenced::HasMany::Eager do
|
|
4
4
|
|
|
5
5
|
describe ".grouped_docs" do
|
|
6
6
|
|
|
@@ -12,13 +12,13 @@ describe Mongoid::Relations::Eager::HasMany do
|
|
|
12
12
|
Person.create!
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
let(:
|
|
15
|
+
let(:association) do
|
|
16
16
|
Person.reflect_on_association(:posts)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
let(:eager) do
|
|
20
|
-
described_class.new([
|
|
21
|
-
b.
|
|
20
|
+
described_class.new([association], docs).tap do |b|
|
|
21
|
+
b.send(:shift_association)
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -27,7 +27,7 @@ describe Mongoid::Relations::Eager::HasMany do
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
it "aggregates by the parent primary key" do
|
|
30
|
-
expect(eager.grouped_docs.keys).to eq([person.id])
|
|
30
|
+
expect(eager.send(:grouped_docs).keys).to eq([person.id])
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
@@ -41,13 +41,13 @@ describe Mongoid::Relations::Eager::HasMany do
|
|
|
41
41
|
Person.create!
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
let(:
|
|
44
|
+
let(:association) do
|
|
45
45
|
Person.reflect_on_association(:posts)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
let(:eager) do
|
|
49
|
-
described_class.new([
|
|
50
|
-
b.
|
|
49
|
+
described_class.new([association], docs).tap do |b|
|
|
50
|
+
b.send(:shift_association)
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -58,14 +58,14 @@ describe Mongoid::Relations::Eager::HasMany do
|
|
|
58
58
|
|
|
59
59
|
it "sets the relation into the parent" do
|
|
60
60
|
docs.each do |doc|
|
|
61
|
-
expect(doc).to receive(:__build__).once.with(:posts, :foo,
|
|
61
|
+
expect(doc).to receive(:__build__).once.with(:posts, :foo, association)
|
|
62
62
|
end
|
|
63
|
-
eager.set_on_parent
|
|
63
|
+
eager.send(:set_on_parent, person.id, :foo)
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
it "doesnt call an extra query" do
|
|
67
67
|
expect_query(0) do
|
|
68
|
-
eager.set_on_parent
|
|
68
|
+
eager.send(:set_on_parent, person.id, :foo)
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
end
|
|
@@ -91,6 +91,15 @@ describe Mongoid::Relations::Eager::HasMany do
|
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
end
|
|
94
|
+
|
|
95
|
+
it "does not query when accessing the base on each document" do
|
|
96
|
+
persons = Person.all.includes(:drugs).to_a
|
|
97
|
+
expect_query(0) do
|
|
98
|
+
persons.each do |person|
|
|
99
|
+
person.drugs.collect(&:person)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
94
103
|
end
|
|
95
104
|
|
|
96
105
|
context "when the relation is not polymorphic" do
|
|
@@ -120,6 +129,12 @@ describe Mongoid::Relations::Eager::HasMany do
|
|
|
120
129
|
eager.posts.first.title = "New title"
|
|
121
130
|
end
|
|
122
131
|
end
|
|
132
|
+
|
|
133
|
+
it "does not query when accessing the base on each document" do
|
|
134
|
+
expect_query(0) do
|
|
135
|
+
eager.posts.collect(&:person)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
123
138
|
end
|
|
124
139
|
|
|
125
140
|
context "when the eager load has not returned documents" do
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
2
|
|
|
3
|
-
describe Mongoid::
|
|
3
|
+
describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
|
|
4
4
|
|
|
5
5
|
describe "#==" do
|
|
6
6
|
|
|
@@ -189,6 +189,12 @@ describe Mongoid::Relations::Targets::Enumerable do
|
|
|
189
189
|
it "returns the added documents" do
|
|
190
190
|
expect(added).to eq([ post ])
|
|
191
191
|
end
|
|
192
|
+
|
|
193
|
+
it "sets the base on the new document" do
|
|
194
|
+
expect_query(0) do
|
|
195
|
+
added.collect(&:person)
|
|
196
|
+
end
|
|
197
|
+
end
|
|
192
198
|
end
|
|
193
199
|
end
|
|
194
200
|
|
|
@@ -622,6 +628,22 @@ describe Mongoid::Relations::Targets::Enumerable do
|
|
|
622
628
|
it "becomes loaded" do
|
|
623
629
|
expect(enumerable).to be__loaded
|
|
624
630
|
end
|
|
631
|
+
|
|
632
|
+
context 'when the base relation is accessed from each document' do
|
|
633
|
+
|
|
634
|
+
let(:persons) do
|
|
635
|
+
described_class.new(criteria).collect(&:person)
|
|
636
|
+
end
|
|
637
|
+
|
|
638
|
+
before do
|
|
639
|
+
Post.create(person_id: person.id)
|
|
640
|
+
Post.create(person_id: person.id)
|
|
641
|
+
end
|
|
642
|
+
|
|
643
|
+
it 'sets the base relation from the criteria' do
|
|
644
|
+
expect(persons.uniq.size).to eq(1)
|
|
645
|
+
end
|
|
646
|
+
end
|
|
625
647
|
end
|
|
626
648
|
|
|
627
649
|
context "when only an array target exists" do
|
|
@@ -1822,4 +1844,103 @@ describe Mongoid::Relations::Targets::Enumerable do
|
|
|
1822
1844
|
expect(enumerable).to be__loaded
|
|
1823
1845
|
end
|
|
1824
1846
|
end
|
|
1847
|
+
|
|
1848
|
+
describe 'setting the same parent object on enumerated children objects' do
|
|
1849
|
+
|
|
1850
|
+
let(:person) do
|
|
1851
|
+
Person.create
|
|
1852
|
+
end
|
|
1853
|
+
|
|
1854
|
+
context 'when a single child is fetched' do
|
|
1855
|
+
|
|
1856
|
+
let!(:post) do
|
|
1857
|
+
person.posts << Post.new
|
|
1858
|
+
person.posts.first
|
|
1859
|
+
end
|
|
1860
|
+
|
|
1861
|
+
it 'does not query the database to access the parent' do
|
|
1862
|
+
expect_query(0) do
|
|
1863
|
+
expect(post.person).to eq(person)
|
|
1864
|
+
end
|
|
1865
|
+
end
|
|
1866
|
+
end
|
|
1867
|
+
|
|
1868
|
+
context 'when a single child is fetched with a scope' do
|
|
1869
|
+
|
|
1870
|
+
let!(:post) do
|
|
1871
|
+
person.posts << Post.new(title: 'open')
|
|
1872
|
+
person.posts.open.first
|
|
1873
|
+
end
|
|
1874
|
+
|
|
1875
|
+
it 'does not query the database to access the parent' do
|
|
1876
|
+
expect_query(0) do
|
|
1877
|
+
expect(post.person).to eq(person)
|
|
1878
|
+
end
|
|
1879
|
+
end
|
|
1880
|
+
end
|
|
1881
|
+
|
|
1882
|
+
context 'when multiple children are fetched' do
|
|
1883
|
+
|
|
1884
|
+
let!(:posts) do
|
|
1885
|
+
person.posts << Post.new
|
|
1886
|
+
person.posts << Post.new
|
|
1887
|
+
person.posts << Post.new
|
|
1888
|
+
person.posts.to_a
|
|
1889
|
+
end
|
|
1890
|
+
|
|
1891
|
+
it 'does not query the database to access the parent' do
|
|
1892
|
+
expect_query(0) do
|
|
1893
|
+
expect(posts.all? { |post| post.person == person }).to be(true)
|
|
1894
|
+
end
|
|
1895
|
+
end
|
|
1896
|
+
end
|
|
1897
|
+
|
|
1898
|
+
context 'when multiple children are fetched with query criteria' do
|
|
1899
|
+
|
|
1900
|
+
let!(:posts) do
|
|
1901
|
+
person.posts << Post.new(title: 'open')
|
|
1902
|
+
person.posts << Post.new(title: 'open')
|
|
1903
|
+
person.posts << Post.new(title: 'not-a-test')
|
|
1904
|
+
person.posts.where(title: 'open').to_a
|
|
1905
|
+
end
|
|
1906
|
+
|
|
1907
|
+
it 'does not query the database to access the parent' do
|
|
1908
|
+
expect_query(0) do
|
|
1909
|
+
expect(posts.all? { |post| post.person == person }).to be(true)
|
|
1910
|
+
end
|
|
1911
|
+
end
|
|
1912
|
+
end
|
|
1913
|
+
|
|
1914
|
+
context 'when multiple children are fetched with a scope' do
|
|
1915
|
+
|
|
1916
|
+
let!(:posts) do
|
|
1917
|
+
person.posts << Post.new(title: 'open')
|
|
1918
|
+
person.posts << Post.new(title: 'open')
|
|
1919
|
+
person.posts << Post.new(title: 'not-a-test')
|
|
1920
|
+
person.posts.open.to_a
|
|
1921
|
+
end
|
|
1922
|
+
|
|
1923
|
+
it 'does not query the database to access the parent' do
|
|
1924
|
+
expect_query(0) do
|
|
1925
|
+
expect(posts.all? { |post| post.person == person }).to be(true)
|
|
1926
|
+
end
|
|
1927
|
+
end
|
|
1928
|
+
end
|
|
1929
|
+
|
|
1930
|
+
context 'when the parent is updated in memory' do
|
|
1931
|
+
|
|
1932
|
+
let!(:posts) do
|
|
1933
|
+
person.posts << Post.new
|
|
1934
|
+
person.posts << Post.new
|
|
1935
|
+
person.username = 'emily'
|
|
1936
|
+
person.posts.to_a
|
|
1937
|
+
end
|
|
1938
|
+
|
|
1939
|
+
it 'does not query the database to access the parent' do
|
|
1940
|
+
expect_query(0) do
|
|
1941
|
+
expect(posts.all? { |post| post.person.username == 'emily' }).to be(true)
|
|
1942
|
+
end
|
|
1943
|
+
end
|
|
1944
|
+
end
|
|
1945
|
+
end
|
|
1825
1946
|
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
4
|
+
require_relative '../has_many_models'
|
|
5
|
+
|
|
6
|
+
describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
7
|
+
context 'with primary_key and foreign_key given' do
|
|
8
|
+
let(:company) { HmmCompany.create!(p: 123) }
|
|
9
|
+
let(:criteria) { company.emails }
|
|
10
|
+
|
|
11
|
+
it 'generates correct query' do
|
|
12
|
+
expect(criteria.selector).to eq('f' => 123)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context 'unscoped' do
|
|
16
|
+
let(:criteria) { company.emails.unscoped }
|
|
17
|
+
|
|
18
|
+
it 'generates correct query' do
|
|
19
|
+
expect(criteria.selector).to eq('f' => 123)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
2
|
|
|
3
|
-
describe Mongoid::
|
|
3
|
+
describe Mongoid::Association::Referenced::HasMany::Proxy do
|
|
4
4
|
|
|
5
5
|
before :all do
|
|
6
6
|
Mongoid.raise_not_found_error = true
|
|
@@ -401,7 +401,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
401
401
|
end
|
|
402
402
|
|
|
403
403
|
it "sets the target of the relation" do
|
|
404
|
-
expect(person.posts.
|
|
404
|
+
expect(person.posts._target).to eq([ post ])
|
|
405
405
|
end
|
|
406
406
|
|
|
407
407
|
it "sets the foreign key on the relation" do
|
|
@@ -432,7 +432,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
432
432
|
end
|
|
433
433
|
|
|
434
434
|
it "sets the target of the relation" do
|
|
435
|
-
expect(person.posts.
|
|
435
|
+
expect(person.posts._target).to eq([ post ])
|
|
436
436
|
end
|
|
437
437
|
|
|
438
438
|
it "sets the foreign key of the relation" do
|
|
@@ -593,7 +593,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
593
593
|
end
|
|
594
594
|
|
|
595
595
|
it "sets the target of the relation" do
|
|
596
|
-
expect(movie.ratings.
|
|
596
|
+
expect(movie.ratings._target).to eq([ rating ])
|
|
597
597
|
end
|
|
598
598
|
|
|
599
599
|
it "sets the foreign key on the relation" do
|
|
@@ -624,7 +624,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
624
624
|
end
|
|
625
625
|
|
|
626
626
|
it "sets the target of the relation" do
|
|
627
|
-
expect(movie.ratings.
|
|
627
|
+
expect(movie.ratings._target).to eq([ rating ])
|
|
628
628
|
end
|
|
629
629
|
|
|
630
630
|
it "sets the foreign key of the relation" do
|
|
@@ -1039,27 +1039,6 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
1039
1039
|
end
|
|
1040
1040
|
end
|
|
1041
1041
|
|
|
1042
|
-
describe ".builder" do
|
|
1043
|
-
|
|
1044
|
-
let(:builder_klass) do
|
|
1045
|
-
Mongoid::Relations::Builders::Referenced::Many
|
|
1046
|
-
end
|
|
1047
|
-
|
|
1048
|
-
let(:document) do
|
|
1049
|
-
double
|
|
1050
|
-
end
|
|
1051
|
-
|
|
1052
|
-
let(:metadata) do
|
|
1053
|
-
double(extension?: false)
|
|
1054
|
-
end
|
|
1055
|
-
|
|
1056
|
-
it "returns the embedded in builder" do
|
|
1057
|
-
expect(
|
|
1058
|
-
described_class.builder(nil, metadata, document)
|
|
1059
|
-
).to be_a_kind_of(builder_klass)
|
|
1060
|
-
end
|
|
1061
|
-
end
|
|
1062
|
-
|
|
1063
1042
|
describe "#clear" do
|
|
1064
1043
|
|
|
1065
1044
|
context "when the relation is not polymorphic" do
|
|
@@ -1835,44 +1814,48 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
1835
1814
|
end
|
|
1836
1815
|
end
|
|
1837
1816
|
|
|
1838
|
-
describe "
|
|
1817
|
+
describe "#criteria" do
|
|
1839
1818
|
|
|
1840
|
-
let(:
|
|
1841
|
-
|
|
1819
|
+
let(:base) do
|
|
1820
|
+
Movie.new
|
|
1842
1821
|
end
|
|
1843
1822
|
|
|
1844
1823
|
context "when the relation is polymorphic" do
|
|
1845
1824
|
|
|
1846
|
-
let(:
|
|
1825
|
+
let(:association) do
|
|
1847
1826
|
Movie.relations["ratings"]
|
|
1848
1827
|
end
|
|
1849
1828
|
|
|
1850
1829
|
let(:criteria) do
|
|
1851
|
-
|
|
1830
|
+
association.criteria(base)
|
|
1852
1831
|
end
|
|
1853
1832
|
|
|
1854
1833
|
it "includes the type in the criteria" do
|
|
1855
1834
|
expect(criteria.selector).to eq(
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1835
|
+
{
|
|
1836
|
+
"ratable_id" => base.id,
|
|
1837
|
+
"ratable_type" => "Movie"
|
|
1838
|
+
}
|
|
1839
|
+
)
|
|
1861
1840
|
end
|
|
1862
1841
|
end
|
|
1863
1842
|
|
|
1864
1843
|
context "when the relation is not polymorphic" do
|
|
1865
1844
|
|
|
1866
|
-
let(:
|
|
1845
|
+
let(:association) do
|
|
1867
1846
|
Person.relations["posts"]
|
|
1868
1847
|
end
|
|
1869
1848
|
|
|
1849
|
+
let(:base) do
|
|
1850
|
+
Person.new
|
|
1851
|
+
end
|
|
1852
|
+
|
|
1870
1853
|
let(:criteria) do
|
|
1871
|
-
|
|
1854
|
+
association.criteria(base)
|
|
1872
1855
|
end
|
|
1873
1856
|
|
|
1874
1857
|
it "does not include the type in the criteria" do
|
|
1875
|
-
expect(criteria.selector).to eq({ "person_id" => id })
|
|
1858
|
+
expect(criteria.selector).to eq({ "person_id" => base.id })
|
|
1876
1859
|
end
|
|
1877
1860
|
end
|
|
1878
1861
|
end
|
|
@@ -2785,13 +2768,6 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
2785
2768
|
end
|
|
2786
2769
|
end
|
|
2787
2770
|
|
|
2788
|
-
describe ".foreign_key_suffix" do
|
|
2789
|
-
|
|
2790
|
-
it "returns _id" do
|
|
2791
|
-
expect(described_class.foreign_key_suffix).to eq("_id")
|
|
2792
|
-
end
|
|
2793
|
-
end
|
|
2794
|
-
|
|
2795
2771
|
describe "#initialize" do
|
|
2796
2772
|
|
|
2797
2773
|
context "when an illegal mixed relation exists" do
|
|
@@ -2848,13 +2824,6 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
2848
2824
|
end
|
|
2849
2825
|
end
|
|
2850
2826
|
|
|
2851
|
-
describe ".macro" do
|
|
2852
|
-
|
|
2853
|
-
it "returns has_many" do
|
|
2854
|
-
expect(described_class.macro).to eq(:has_many)
|
|
2855
|
-
end
|
|
2856
|
-
end
|
|
2857
|
-
|
|
2858
2827
|
describe "#max" do
|
|
2859
2828
|
|
|
2860
2829
|
let(:person) do
|
|
@@ -3178,7 +3147,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
3178
3147
|
end
|
|
3179
3148
|
end
|
|
3180
3149
|
|
|
3181
|
-
Mongoid::
|
|
3150
|
+
Mongoid::Association::Referenced::HasMany::Proxy.public_instance_methods.each do |method|
|
|
3182
3151
|
|
|
3183
3152
|
context "when checking #{method}" do
|
|
3184
3153
|
|
|
@@ -3199,13 +3168,6 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
3199
3168
|
end
|
|
3200
3169
|
end
|
|
3201
3170
|
|
|
3202
|
-
describe ".stores_foreign_key?" do
|
|
3203
|
-
|
|
3204
|
-
it "returns false" do
|
|
3205
|
-
expect(described_class.stores_foreign_key?).to be false
|
|
3206
|
-
end
|
|
3207
|
-
end
|
|
3208
|
-
|
|
3209
3171
|
describe "#scoped" do
|
|
3210
3172
|
|
|
3211
3173
|
let(:person) do
|
|
@@ -3311,33 +3273,6 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
3311
3273
|
end
|
|
3312
3274
|
end
|
|
3313
3275
|
|
|
3314
|
-
describe ".valid_options" do
|
|
3315
|
-
|
|
3316
|
-
it "returns the valid options" do
|
|
3317
|
-
expect(described_class.valid_options).to eq(
|
|
3318
|
-
[
|
|
3319
|
-
:after_add,
|
|
3320
|
-
:after_remove,
|
|
3321
|
-
:as,
|
|
3322
|
-
:autosave,
|
|
3323
|
-
:before_add,
|
|
3324
|
-
:before_remove,
|
|
3325
|
-
:dependent,
|
|
3326
|
-
:foreign_key,
|
|
3327
|
-
:order,
|
|
3328
|
-
:primary_key
|
|
3329
|
-
]
|
|
3330
|
-
)
|
|
3331
|
-
end
|
|
3332
|
-
end
|
|
3333
|
-
|
|
3334
|
-
describe ".validation_default" do
|
|
3335
|
-
|
|
3336
|
-
it "returns true" do
|
|
3337
|
-
expect(described_class.validation_default).to be true
|
|
3338
|
-
end
|
|
3339
|
-
end
|
|
3340
|
-
|
|
3341
3276
|
context "when the association has an order defined" do
|
|
3342
3277
|
|
|
3343
3278
|
let(:person) do
|
|
@@ -3363,14 +3298,14 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
3363
3298
|
|
|
3364
3299
|
it "order documents" do
|
|
3365
3300
|
expect(person.ordered_posts(true)).to eq(
|
|
3366
|
-
|
|
3367
|
-
|
|
3301
|
+
[post_two, post_three, post_one]
|
|
3302
|
+
)
|
|
3368
3303
|
end
|
|
3369
3304
|
|
|
3370
3305
|
it "chaining order criterias" do
|
|
3371
3306
|
expect(person.ordered_posts.order_by(:title.desc).to_a).to eq(
|
|
3372
|
-
|
|
3373
|
-
|
|
3307
|
+
[post_three, post_two, post_one]
|
|
3308
|
+
)
|
|
3374
3309
|
end
|
|
3375
3310
|
end
|
|
3376
3311
|
|
|
@@ -3396,7 +3331,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
|
3396
3331
|
|
|
3397
3332
|
before do
|
|
3398
3333
|
Post.collection.find({ _id: post_one.id }).
|
|
3399
|
-
|
|
3334
|
+
update_one({ "$set" => { title: "reloaded" }})
|
|
3400
3335
|
end
|
|
3401
3336
|
|
|
3402
3337
|
let(:reloaded) do
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class HmmCompany
|
|
2
|
+
include Mongoid::Document
|
|
3
|
+
|
|
4
|
+
field :p, type: Integer
|
|
5
|
+
has_many :emails, primary_key: :p, foreign_key: :f, class_name: 'HmmEmail'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class HmmEmail
|
|
9
|
+
include Mongoid::Document
|
|
10
|
+
|
|
11
|
+
field :f, type: Integer
|
|
12
|
+
belongs_to :company, primary_key: :p, foreign_key: :f, class_name: 'HmmCompany'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class HmmSchool
|
|
16
|
+
include Mongoid::Document
|
|
17
|
+
|
|
18
|
+
has_many :students, class_name: 'HmmStudent'
|
|
19
|
+
|
|
20
|
+
field :district, type: String
|
|
21
|
+
field :team, type: String
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class HmmStudent
|
|
25
|
+
include Mongoid::Document
|
|
26
|
+
|
|
27
|
+
belongs_to :school, class_name: 'HmmSchool'
|
|
28
|
+
|
|
29
|
+
field :name, type: String
|
|
30
|
+
field :grade, type: Integer, default: 3
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class HmmTicket
|
|
34
|
+
include Mongoid::Document
|
|
35
|
+
|
|
36
|
+
belongs_to :person
|
|
37
|
+
end
|