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
|
@@ -4,7 +4,7 @@ require "mongoid/contextual/aggregable/mongo"
|
|
|
4
4
|
require "mongoid/contextual/command"
|
|
5
5
|
require "mongoid/contextual/geo_near"
|
|
6
6
|
require "mongoid/contextual/map_reduce"
|
|
7
|
-
require "mongoid/
|
|
7
|
+
require "mongoid/association/eager_loadable"
|
|
8
8
|
|
|
9
9
|
module Mongoid
|
|
10
10
|
module Contextual
|
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
|
12
12
|
include Enumerable
|
|
13
13
|
include Aggregable::Mongo
|
|
14
14
|
include Atomic
|
|
15
|
-
include
|
|
15
|
+
include Association::EagerLoadable
|
|
16
16
|
include Queryable
|
|
17
17
|
|
|
18
18
|
# Options constant.
|
|
@@ -95,8 +95,7 @@ module Mongoid
|
|
|
95
95
|
def destroy
|
|
96
96
|
each.inject(0) do |count, doc|
|
|
97
97
|
doc.destroy
|
|
98
|
-
count += 1
|
|
99
|
-
count
|
|
98
|
+
count += 1
|
|
100
99
|
end
|
|
101
100
|
end
|
|
102
101
|
alias :destroy_all :destroy
|
|
@@ -341,7 +340,7 @@ module Mongoid
|
|
|
341
340
|
@criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
|
|
342
341
|
@collection = @klass.collection
|
|
343
342
|
criteria.send(:merge_type_selection)
|
|
344
|
-
@view = collection.find(criteria.selector
|
|
343
|
+
@view = collection.find(criteria.selector)
|
|
345
344
|
apply_options
|
|
346
345
|
end
|
|
347
346
|
|
|
@@ -487,16 +486,12 @@ module Mongoid
|
|
|
487
486
|
# context.update({ "$set" => { name: "Smiths" }})
|
|
488
487
|
#
|
|
489
488
|
# @param [ Hash ] attributes The new attributes for the document.
|
|
490
|
-
# @param [ Hash ] opts The update operation options.
|
|
491
|
-
#
|
|
492
|
-
# @option opts [ Array ] :array_filters A set of filters specifying to which array elements
|
|
493
|
-
# an update should apply.
|
|
494
489
|
#
|
|
495
490
|
# @return [ nil, false ] False if no attributes were provided.
|
|
496
491
|
#
|
|
497
492
|
# @since 3.0.0
|
|
498
|
-
def update(attributes = nil
|
|
499
|
-
update_documents(attributes
|
|
493
|
+
def update(attributes = nil)
|
|
494
|
+
update_documents(attributes)
|
|
500
495
|
end
|
|
501
496
|
|
|
502
497
|
# Update all the matching documents atomically.
|
|
@@ -505,16 +500,12 @@ module Mongoid
|
|
|
505
500
|
# context.update_all({ "$set" => { name: "Smiths" }})
|
|
506
501
|
#
|
|
507
502
|
# @param [ Hash ] attributes The new attributes for each document.
|
|
508
|
-
# @param [ Hash ] opts The update operation options.
|
|
509
|
-
#
|
|
510
|
-
# @option opts [ Array ] :array_filters A set of filters specifying to which array elements
|
|
511
|
-
# an update should apply.
|
|
512
503
|
#
|
|
513
504
|
# @return [ nil, false ] False if no attributes were provided.
|
|
514
505
|
#
|
|
515
506
|
# @since 3.0.0
|
|
516
|
-
def update_all(attributes = nil
|
|
517
|
-
update_documents(attributes, :update_many
|
|
507
|
+
def update_all(attributes = nil)
|
|
508
|
+
update_documents(attributes, :update_many)
|
|
518
509
|
end
|
|
519
510
|
|
|
520
511
|
private
|
|
@@ -550,10 +541,10 @@ module Mongoid
|
|
|
550
541
|
# @return [ true, false ] If the update succeeded.
|
|
551
542
|
#
|
|
552
543
|
# @since 3.0.4
|
|
553
|
-
def update_documents(attributes, method = :update_one
|
|
544
|
+
def update_documents(attributes, method = :update_one)
|
|
554
545
|
return false unless attributes
|
|
555
546
|
attributes = Hash[attributes.map { |k, v| [klass.database_field_name(k.to_s), v] }]
|
|
556
|
-
view.send(method, attributes.__consolidate__(klass)
|
|
547
|
+
view.send(method, attributes.__consolidate__(klass))
|
|
557
548
|
end
|
|
558
549
|
|
|
559
550
|
# Apply the field limitations.
|
|
@@ -705,14 +696,6 @@ module Mongoid
|
|
|
705
696
|
yield(doc)
|
|
706
697
|
documents.push(doc) if cacheable?
|
|
707
698
|
end
|
|
708
|
-
|
|
709
|
-
def _session
|
|
710
|
-
@criteria.send(:_session)
|
|
711
|
-
end
|
|
712
|
-
|
|
713
|
-
def acknowledged_write?
|
|
714
|
-
collection.write_concern.nil? || collection.write_concern.acknowledged?
|
|
715
|
-
end
|
|
716
699
|
end
|
|
717
700
|
end
|
|
718
701
|
end
|
data/lib/mongoid/copyable.rb
CHANGED
|
@@ -69,15 +69,15 @@ module Mongoid
|
|
|
69
69
|
attrs["#{name}_translations"] = value
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
|
-
klass.embedded_relations.each do |_,
|
|
73
|
-
next unless attrs.present? && attrs[
|
|
72
|
+
klass.embedded_relations.each do |_, association|
|
|
73
|
+
next unless attrs.present? && attrs[association.key].present?
|
|
74
74
|
|
|
75
|
-
if
|
|
76
|
-
attrs[
|
|
77
|
-
process_localized_attributes(
|
|
75
|
+
if association.is_a?(Association::Embedded::EmbedsMany)
|
|
76
|
+
attrs[association.key].each do |attr|
|
|
77
|
+
process_localized_attributes(association.klass, attr)
|
|
78
78
|
end
|
|
79
79
|
else
|
|
80
|
-
process_localized_attributes(
|
|
80
|
+
process_localized_attributes(association.klass, attrs[association.key])
|
|
81
81
|
end
|
|
82
82
|
end
|
|
83
83
|
end
|
data/lib/mongoid/criteria.rb
CHANGED
|
@@ -28,7 +28,6 @@ module Mongoid
|
|
|
28
28
|
include Scopable
|
|
29
29
|
include Clients::Options
|
|
30
30
|
include Options
|
|
31
|
-
include Clients::Sessions
|
|
32
31
|
|
|
33
32
|
# Static array used to check with method missing - we only need to ever
|
|
34
33
|
# instantiate once.
|
|
@@ -36,7 +35,7 @@ module Mongoid
|
|
|
36
35
|
# @since 4.0.0
|
|
37
36
|
CHECK = []
|
|
38
37
|
|
|
39
|
-
attr_accessor :embedded, :klass, :parent_document, :
|
|
38
|
+
attr_accessor :embedded, :klass, :parent_document, :association
|
|
40
39
|
|
|
41
40
|
# Returns true if the supplied +Enumerable+ or +Criteria+ is equal to the results
|
|
42
41
|
# of this +Criteria+ or the criteria itself.
|
|
@@ -36,7 +36,7 @@ module Mongoid
|
|
|
36
36
|
# @example Get the eager loading inclusions.
|
|
37
37
|
# Person.includes(:game).inclusions
|
|
38
38
|
#
|
|
39
|
-
# @return [ Array<
|
|
39
|
+
# @return [ Array<Association> ] The inclusions.
|
|
40
40
|
#
|
|
41
41
|
# @since 2.2.0
|
|
42
42
|
def inclusions
|
|
@@ -46,11 +46,11 @@ module Mongoid
|
|
|
46
46
|
# Set the inclusions for the criteria.
|
|
47
47
|
#
|
|
48
48
|
# @example Set the inclusions.
|
|
49
|
-
# criteria.inclusions = [
|
|
49
|
+
# criteria.inclusions = [ association ]
|
|
50
50
|
#
|
|
51
|
-
# @param [ Array<
|
|
51
|
+
# @param [ Array<Association> ] value The inclusions.
|
|
52
52
|
#
|
|
53
|
-
# @return [ Array<
|
|
53
|
+
# @return [ Array<Association> ] The new inclusions.
|
|
54
54
|
#
|
|
55
55
|
# @since 3.0.0
|
|
56
56
|
def inclusions=(value)
|
|
@@ -65,28 +65,28 @@ module Mongoid
|
|
|
65
65
|
# criteria.add_inclusion(Person, :posts)
|
|
66
66
|
#
|
|
67
67
|
# @param [ Class, String, Symbol ] _klass The class or string/symbol of the class name.
|
|
68
|
-
# @param [ Symbol ]
|
|
68
|
+
# @param [ Symbol ] association The relation.
|
|
69
69
|
#
|
|
70
70
|
# @raise [ Errors::InvalidIncludes ] If no relation is found.
|
|
71
71
|
#
|
|
72
72
|
# @since 5.1.0
|
|
73
|
-
def add_inclusion(_klass,
|
|
74
|
-
inclusions.push(
|
|
73
|
+
def add_inclusion(_klass, association)
|
|
74
|
+
inclusions.push(association) unless inclusions.include?(association)
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
def extract_includes_list(_parent_class, *relations_list)
|
|
78
78
|
relations_list.flatten.each do |relation_object|
|
|
79
79
|
if relation_object.is_a?(Hash)
|
|
80
80
|
relation_object.each do |relation, _includes|
|
|
81
|
-
|
|
82
|
-
raise Errors::InvalidIncludes.new(_klass, [ relation ]) unless
|
|
83
|
-
add_inclusion(_parent_class,
|
|
84
|
-
extract_includes_list(
|
|
81
|
+
association = _parent_class.reflect_on_association(relation)
|
|
82
|
+
raise Errors::InvalidIncludes.new(_klass, [ relation ]) unless association
|
|
83
|
+
add_inclusion(_parent_class, association)
|
|
84
|
+
extract_includes_list(association.klass, _includes)
|
|
85
85
|
end
|
|
86
86
|
else
|
|
87
|
-
|
|
88
|
-
raise Errors::InvalidIncludes.new(_parent_class, [ relation_object ]) unless
|
|
89
|
-
add_inclusion(_parent_class,
|
|
87
|
+
association = _parent_class.reflect_on_association(relation_object)
|
|
88
|
+
raise Errors::InvalidIncludes.new(_parent_class, [ relation_object ]) unless association
|
|
89
|
+
add_inclusion(_parent_class, association)
|
|
90
90
|
end
|
|
91
91
|
end
|
|
92
92
|
end
|
|
@@ -3,10 +3,6 @@ module Mongoid
|
|
|
3
3
|
class Criteria
|
|
4
4
|
module Modifiable
|
|
5
5
|
|
|
6
|
-
# @attribute [r] create_attrs Additional attributes to add to the Document upon creation.
|
|
7
|
-
# @api private
|
|
8
|
-
attr_reader :create_attrs
|
|
9
|
-
|
|
10
6
|
# Build a document given the selector and return it.
|
|
11
7
|
# Complex criteria, such as $in and $or operations will get ignored.
|
|
12
8
|
#
|
|
@@ -61,9 +57,6 @@ module Mongoid
|
|
|
61
57
|
|
|
62
58
|
# Define attributes with which new documents will be created.
|
|
63
59
|
#
|
|
64
|
-
# Note that if `find_or_create_by` is called after this in a method chain, the attributes in
|
|
65
|
-
# the query will override those from this method.
|
|
66
|
-
#
|
|
67
60
|
# @example Define attributes to be used when a new document is created.
|
|
68
61
|
# Person.create_with(job: 'Engineer').find_or_create_by(employer: 'MongoDB')
|
|
69
62
|
#
|
|
@@ -71,9 +64,7 @@ module Mongoid
|
|
|
71
64
|
#
|
|
72
65
|
# @since 5.1.0
|
|
73
66
|
def create_with(attrs = {})
|
|
74
|
-
|
|
75
|
-
(@create_attrs ||= {}).merge!(attrs)
|
|
76
|
-
end
|
|
67
|
+
where(selector.merge(attrs))
|
|
77
68
|
end
|
|
78
69
|
|
|
79
70
|
# Find the first +Document+ given the conditions, or creates a new document
|
|
@@ -181,8 +172,7 @@ module Mongoid
|
|
|
181
172
|
#
|
|
182
173
|
# @since 3.0.0
|
|
183
174
|
def create_document(method, attrs = nil, &block)
|
|
184
|
-
|
|
185
|
-
attributes = selector.reduce(attrs) do |hash, (key, value)|
|
|
175
|
+
attributes = selector.reduce(attrs ? attrs.dup : {}) do |hash, (key, value)|
|
|
186
176
|
unless invalid_key?(hash, key) || invalid_embedded_doc?(value)
|
|
187
177
|
hash[key] = value
|
|
188
178
|
end
|
|
@@ -190,9 +180,13 @@ module Mongoid
|
|
|
190
180
|
end
|
|
191
181
|
if embedded?
|
|
192
182
|
attributes[:_parent] = parent_document
|
|
193
|
-
attributes[:
|
|
183
|
+
attributes[:_association] = association
|
|
184
|
+
end
|
|
185
|
+
if polymorphic? && @criterion
|
|
186
|
+
klass.__send__(method, attributes.merge(@criterion), &block)
|
|
187
|
+
else
|
|
188
|
+
klass.__send__(method, attributes, &block)
|
|
194
189
|
end
|
|
195
|
-
klass.__send__(method, attributes, &block)
|
|
196
190
|
end
|
|
197
191
|
|
|
198
192
|
# Find the first object or create/initialize it.
|
|
@@ -259,9 +259,7 @@ module Mongoid
|
|
|
259
259
|
def prepare(field, operator, value)
|
|
260
260
|
unless operator =~ /exists|type|size/
|
|
261
261
|
value = value.__expand_complex__
|
|
262
|
-
|
|
263
|
-
name = aliases[field] || field
|
|
264
|
-
serializer = serializers[name]
|
|
262
|
+
serializer = serializers[field]
|
|
265
263
|
value = serializer ? serializer.evolve(value) : value
|
|
266
264
|
end
|
|
267
265
|
selection = { operator => value }
|
|
@@ -72,16 +72,21 @@ module Mongoid
|
|
|
72
72
|
#
|
|
73
73
|
# @example Add the unwind.
|
|
74
74
|
# pipeline.unwind(:field)
|
|
75
|
+
# pipeline.unwind(document)
|
|
75
76
|
#
|
|
76
|
-
# @param [ String, Symbol ]
|
|
77
|
+
# @param [ String, Symbol, Hash ] field_or_doc The name of the field or a document.
|
|
77
78
|
#
|
|
78
79
|
# @return [ Pipeline ] The pipeline.
|
|
79
80
|
#
|
|
80
81
|
# @since 2.0.0
|
|
81
|
-
def unwind(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
def unwind(field_or_doc)
|
|
83
|
+
unless field_or_doc.respond_to? :keys
|
|
84
|
+
normalized = field_or_doc.to_s
|
|
85
|
+
name = aliases[normalized] || normalized
|
|
86
|
+
push("$unwind" => name.__mongo_expression__)
|
|
87
|
+
else
|
|
88
|
+
push("$unwind" => field_or_doc)
|
|
89
|
+
end
|
|
85
90
|
end
|
|
86
91
|
|
|
87
92
|
private
|
|
@@ -24,7 +24,7 @@ module Mongoid
|
|
|
24
24
|
# @since 2.0.0
|
|
25
25
|
POLYGON = "Polygon"
|
|
26
26
|
|
|
27
|
-
# @attribute [rw] negating If the next
|
|
27
|
+
# @attribute [rw] negating If the next spression is negated.
|
|
28
28
|
# @attribute [rw] selector The query selector.
|
|
29
29
|
attr_accessor :negating, :selector
|
|
30
30
|
|
|
@@ -134,21 +134,13 @@ module Mongoid
|
|
|
134
134
|
::Boolean.evolve(value)
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
-
# Add a $geoIntersects or $geoWithin selection. Symbol operators must
|
|
138
|
-
#
|
|
137
|
+
# Add a $geoIntersects or $geoWithin selection. Symbol operators must be used as shown in
|
|
138
|
+
# the examples to expand the criteria.
|
|
139
139
|
#
|
|
140
140
|
# @note The only valid geometry shapes for a $geoIntersects are:
|
|
141
141
|
# :intersects_line, :intersects_point, and :intersects_polygon.
|
|
142
142
|
#
|
|
143
|
-
# @note The only valid
|
|
144
|
-
# shape :within_polygon and the operator :within_box.
|
|
145
|
-
#
|
|
146
|
-
# @note The :within_box operator for the $geoWithin query expects the
|
|
147
|
-
# lower left (south west) coordinate pair as the first argument and
|
|
148
|
-
# the upper right (north east) as the second argument.
|
|
149
|
-
# Important: When latitude and longitude are passed, longitude is
|
|
150
|
-
# expected as the first element of the coordinate pair.
|
|
151
|
-
# Source: https://docs.mongodb.com/manual/reference/operator/query/box/
|
|
143
|
+
# @note The only valid geometry shape for a $geoWithin is :within_polygon
|
|
152
144
|
#
|
|
153
145
|
# @example Add a geo intersect criterion for a line.
|
|
154
146
|
# query.geo_spacial(:location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
|
|
@@ -162,9 +154,6 @@ module Mongoid
|
|
|
162
154
|
# @example Add a geo within criterion for a polygon.
|
|
163
155
|
# query.geo_spacial(:location.within_polygon => [[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]])
|
|
164
156
|
#
|
|
165
|
-
# @example Add a geo within criterion for a box.
|
|
166
|
-
# query.geo_spacial(:location.within_box => [[ 1, 10 ], [ 2, 10 ])
|
|
167
|
-
#
|
|
168
157
|
# @param [ Hash ] criterion The criterion.
|
|
169
158
|
#
|
|
170
159
|
# @return [ Selectable ] The cloned selectable.
|
|
@@ -185,7 +174,6 @@ module Mongoid
|
|
|
185
174
|
key :within_polygon, :override, "$geoWithin", "$geometry" do |value|
|
|
186
175
|
{ "type" => POLYGON, "coordinates" => value }
|
|
187
176
|
end
|
|
188
|
-
key :within_box, :override, "$geoWithin", "$box"
|
|
189
177
|
|
|
190
178
|
# Add the $gt criterion to the selector.
|
|
191
179
|
#
|
|
@@ -513,11 +501,6 @@ module Mongoid
|
|
|
513
501
|
# @example Construct a text search selector with options.
|
|
514
502
|
# selectable.text_search("testing", :$language => "fr")
|
|
515
503
|
#
|
|
516
|
-
# @note Per https://docs.mongodb.com/manual/reference/operator/query/text/
|
|
517
|
-
# it is not currently possible to supply multiple text search
|
|
518
|
-
# conditions in a query. Mongoid will build such a query but the
|
|
519
|
-
# server will return an error when trying to execute it.
|
|
520
|
-
#
|
|
521
504
|
# @param [ String, Symbol ] terms A string of terms that MongoDB parses
|
|
522
505
|
# and uses to query the text index.
|
|
523
506
|
# @param [ Hash ] opts Text search options. See MongoDB documentation
|
|
@@ -529,19 +512,9 @@ module Mongoid
|
|
|
529
512
|
def text_search(terms, opts = nil)
|
|
530
513
|
clone.tap do |query|
|
|
531
514
|
if terms
|
|
532
|
-
criterion = {
|
|
533
|
-
criterion[
|
|
534
|
-
|
|
535
|
-
# Per https://docs.mongodb.com/manual/reference/operator/query/text/
|
|
536
|
-
# multiple $text expressions are not currently supported by
|
|
537
|
-
# MongoDB server, but build the query correctly instead of
|
|
538
|
-
# overwriting previous text search condition with the currently
|
|
539
|
-
# given one.
|
|
540
|
-
Mongoid.logger.warn('Multiple $text expressions per query are not currently supported by the server')
|
|
541
|
-
query.selector = {'$and' => [query.selector]}.merge(criterion)
|
|
542
|
-
else
|
|
543
|
-
query.selector = query.selector.merge(criterion)
|
|
544
|
-
end
|
|
515
|
+
criterion = { :$text => { :$search => terms } }
|
|
516
|
+
criterion[:$text].merge!(opts) if opts
|
|
517
|
+
query.selector = criterion
|
|
545
518
|
end
|
|
546
519
|
end
|
|
547
520
|
end
|
|
@@ -562,6 +535,9 @@ module Mongoid
|
|
|
562
535
|
#
|
|
563
536
|
# @since 1.0.0
|
|
564
537
|
def where(criterion = nil)
|
|
538
|
+
# We need to save the criterion in an instance variable so Modifiable methods
|
|
539
|
+
# know how to create a polymorphic object.
|
|
540
|
+
@criterion = criterion
|
|
565
541
|
criterion.is_a?(String) ? js_query(criterion) : expr_query(criterion)
|
|
566
542
|
end
|
|
567
543
|
|
data/lib/mongoid/document.rb
CHANGED
|
@@ -4,7 +4,6 @@ require "mongoid/evolvable"
|
|
|
4
4
|
require "mongoid/extensions"
|
|
5
5
|
require "mongoid/errors"
|
|
6
6
|
require "mongoid/threaded"
|
|
7
|
-
require "mongoid/relations"
|
|
8
7
|
require "mongoid/atomic"
|
|
9
8
|
require "mongoid/attributes"
|
|
10
9
|
require "mongoid/contextual"
|
|
@@ -14,6 +13,7 @@ require "mongoid/criteria"
|
|
|
14
13
|
require "mongoid/factory"
|
|
15
14
|
require "mongoid/fields"
|
|
16
15
|
require "mongoid/timestamps"
|
|
16
|
+
require "mongoid/association"
|
|
17
17
|
require "mongoid/composable"
|
|
18
18
|
|
|
19
19
|
module Mongoid
|
|
@@ -190,11 +190,11 @@ module Mongoid
|
|
|
190
190
|
#
|
|
191
191
|
# @since 5.1.0
|
|
192
192
|
def as_json(options = nil)
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
193
|
+
if options && (options[:compact] == true)
|
|
194
|
+
super(options).reject! { |k,v| v.nil? }
|
|
195
|
+
else
|
|
196
|
+
super(options)
|
|
196
197
|
end
|
|
197
|
-
rv
|
|
198
198
|
end
|
|
199
199
|
|
|
200
200
|
# Returns an instance of the specified class with the attributes,
|
|
@@ -281,7 +281,7 @@ module Mongoid
|
|
|
281
281
|
without_autobuild do
|
|
282
282
|
relation, stored = send(name), meta.store_as
|
|
283
283
|
if attributes.key?(stored) || !relation.blank?
|
|
284
|
-
if relation
|
|
284
|
+
if !relation.nil?
|
|
285
285
|
attributes[stored] = relation.send(:as_attributes)
|
|
286
286
|
else
|
|
287
287
|
attributes.delete(stored)
|
data/lib/mongoid/errors.rb
CHANGED
|
@@ -8,6 +8,7 @@ require "mongoid/errors/eager_load"
|
|
|
8
8
|
require "mongoid/errors/in_memory_collation_not_supported"
|
|
9
9
|
require "mongoid/errors/invalid_collection"
|
|
10
10
|
require "mongoid/errors/invalid_config_option"
|
|
11
|
+
require "mongoid/errors/invalid_dependent_strategy"
|
|
11
12
|
require "mongoid/errors/invalid_field"
|
|
12
13
|
require "mongoid/errors/invalid_field_option"
|
|
13
14
|
require "mongoid/errors/invalid_find"
|
|
@@ -17,8 +18,8 @@ require "mongoid/errors/invalid_options"
|
|
|
17
18
|
require "mongoid/errors/invalid_path"
|
|
18
19
|
require "mongoid/errors/invalid_persistence_option"
|
|
19
20
|
require "mongoid/errors/invalid_relation"
|
|
21
|
+
require "mongoid/errors/invalid_relation_option"
|
|
20
22
|
require "mongoid/errors/invalid_scope"
|
|
21
|
-
require "mongoid/errors/invalid_session_use"
|
|
22
23
|
require "mongoid/errors/invalid_set_polymorphic_relation"
|
|
23
24
|
require "mongoid/errors/invalid_storage_options"
|
|
24
25
|
require "mongoid/errors/invalid_storage_parent"
|
|
@@ -42,6 +43,7 @@ require "mongoid/errors/readonly_document"
|
|
|
42
43
|
require "mongoid/errors/scope_overwrite"
|
|
43
44
|
require "mongoid/errors/too_many_nested_attribute_records"
|
|
44
45
|
require "mongoid/errors/unknown_attribute"
|
|
46
|
+
require "mongoid/errors/unknown_model"
|
|
45
47
|
require "mongoid/errors/unsaved_document"
|
|
46
48
|
require "mongoid/errors/unsupported_javascript"
|
|
47
49
|
require "mongoid/errors/validations"
|