mongoid 2.4.10 → 3.0.0
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.
- data/CHANGELOG.md +949 -10
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +3 -17
- data/lib/config/locales/en.yml +455 -51
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- data/lib/mongoid/atomic/paths/root.rb +4 -5
- data/lib/mongoid/atomic.rb +70 -16
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/callbacks.rb +106 -43
- data/lib/mongoid/components.rb +12 -23
- data/lib/mongoid/config/environment.rb +7 -4
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config.rb +104 -225
- data/lib/mongoid/contextual/aggregable/memory.rb +109 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
- data/lib/mongoid/contextual/atomic.rb +179 -0
- data/lib/mongoid/contextual/command.rb +43 -0
- data/lib/mongoid/contextual/find_and_modify.rb +68 -0
- data/lib/mongoid/contextual/map_reduce.rb +273 -0
- data/lib/mongoid/contextual/memory.rb +406 -0
- data/lib/mongoid/contextual/mongo.rb +662 -0
- data/lib/mongoid/contextual.rb +50 -0
- data/lib/mongoid/copyable.rb +7 -25
- data/lib/mongoid/criteria.rb +515 -245
- data/lib/mongoid/criterion/inspection.rb +14 -8
- data/lib/mongoid/criterion/scoping.rb +114 -44
- data/lib/mongoid/dirty.rb +152 -67
- data/lib/mongoid/document.rb +71 -52
- data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
- data/lib/mongoid/errors/callback.rb +5 -6
- data/lib/mongoid/errors/delete_restriction.rb +29 -0
- data/lib/mongoid/errors/document_not_found.rb +98 -17
- data/lib/mongoid/errors/eager_load.rb +3 -6
- data/lib/mongoid/errors/invalid_collection.rb +3 -3
- data/lib/mongoid/errors/invalid_config_option.rb +27 -0
- data/lib/mongoid/errors/invalid_database.rb +3 -3
- data/lib/mongoid/errors/invalid_field.rb +54 -8
- data/lib/mongoid/errors/invalid_field_option.rb +35 -0
- data/lib/mongoid/errors/invalid_find.rb +3 -3
- data/lib/mongoid/errors/invalid_index.rb +28 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -4
- data/lib/mongoid/errors/invalid_scope.rb +24 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
- data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
- data/lib/mongoid/errors/invalid_time.rb +3 -6
- data/lib/mongoid/errors/inverse_not_found.rb +29 -0
- data/lib/mongoid/errors/mixed_relations.rb +4 -9
- data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
- data/lib/mongoid/errors/mongoid_error.rb +54 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
- data/lib/mongoid/errors/no_default_session.rb +23 -0
- data/lib/mongoid/errors/no_environment.rb +3 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
- data/lib/mongoid/errors/no_metadata.rb +21 -0
- data/lib/mongoid/errors/no_parent.rb +24 -0
- data/lib/mongoid/errors/no_session_config.rb +22 -0
- data/lib/mongoid/errors/no_session_database.rb +27 -0
- data/lib/mongoid/errors/no_session_hosts.rb +27 -0
- data/lib/mongoid/errors/no_sessions_config.rb +20 -0
- data/lib/mongoid/errors/readonly_attribute.rb +25 -0
- data/lib/mongoid/errors/scope_overwrite.rb +4 -4
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
- data/lib/mongoid/errors/unknown_attribute.rb +25 -0
- data/lib/mongoid/errors/unsaved_document.rb +4 -8
- data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
- data/lib/mongoid/errors/unsupported_version.rb +4 -4
- data/lib/mongoid/errors/validations.rb +7 -6
- data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
- data/lib/mongoid/errors.rb +23 -1
- data/lib/mongoid/evolvable.rb +19 -0
- data/lib/mongoid/extensions/array.rb +164 -0
- data/lib/mongoid/extensions/big_decimal.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +24 -0
- data/lib/mongoid/extensions/date.rb +70 -0
- data/lib/mongoid/extensions/date_time.rb +73 -0
- data/lib/mongoid/extensions/false_class.rb +38 -0
- data/lib/mongoid/extensions/float.rb +56 -0
- data/lib/mongoid/extensions/hash.rb +123 -0
- data/lib/mongoid/extensions/integer.rb +66 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +21 -0
- data/lib/mongoid/extensions/object.rb +238 -0
- data/lib/mongoid/extensions/object_id.rb +54 -0
- data/lib/mongoid/extensions/range.rb +79 -0
- data/lib/mongoid/extensions/regexp.rb +27 -0
- data/lib/mongoid/extensions/set.rb +55 -0
- data/lib/mongoid/extensions/string.rb +181 -0
- data/lib/mongoid/extensions/symbol.rb +54 -0
- data/lib/mongoid/extensions/time.rb +78 -0
- data/lib/mongoid/extensions/time_with_zone.rb +55 -0
- data/lib/mongoid/extensions/true_class.rb +38 -0
- data/lib/mongoid/extensions.rb +28 -76
- data/lib/mongoid/factory.rb +1 -1
- data/lib/mongoid/fields/foreign_key.rb +150 -0
- data/lib/mongoid/fields/localized.rb +73 -0
- data/lib/mongoid/fields/standard.rb +268 -0
- data/lib/mongoid/fields/validators/macro.rb +83 -0
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields.rb +142 -208
- data/lib/mongoid/finders.rb +45 -50
- data/lib/mongoid/hierarchy.rb +44 -15
- data/lib/mongoid/identity_map.rb +49 -21
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- data/lib/mongoid/indexes.rb +66 -15
- data/lib/mongoid/inspection.rb +1 -1
- data/lib/mongoid/json.rb +2 -2
- data/lib/mongoid/loggable.rb +69 -0
- data/lib/mongoid/matchers/all.rb +7 -8
- data/lib/mongoid/matchers/and.rb +3 -3
- data/lib/mongoid/matchers/default.rb +6 -4
- data/lib/mongoid/matchers/exists.rb +2 -2
- data/lib/mongoid/matchers/gt.rb +2 -2
- data/lib/mongoid/matchers/gte.rb +2 -2
- data/lib/mongoid/matchers/in.rb +3 -7
- data/lib/mongoid/matchers/lt.rb +2 -2
- data/lib/mongoid/matchers/lte.rb +2 -2
- data/lib/mongoid/matchers/ne.rb +2 -2
- data/lib/mongoid/matchers/nin.rb +2 -2
- data/lib/mongoid/matchers/or.rb +2 -2
- data/lib/mongoid/matchers/size.rb +2 -2
- data/lib/mongoid/matchers/strategies.rb +3 -3
- data/lib/mongoid/matchers.rb +1 -1
- data/lib/mongoid/multi_parameter_attributes.rb +9 -11
- data/lib/mongoid/nested_attributes.rb +17 -9
- data/lib/mongoid/observer.rb +1 -2
- data/lib/mongoid/paranoia.rb +10 -44
- data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
- data/lib/mongoid/persistence/atomic/bit.rb +5 -7
- data/lib/mongoid/persistence/atomic/inc.rb +5 -7
- data/lib/mongoid/persistence/atomic/operation.rb +45 -6
- data/lib/mongoid/persistence/atomic/pop.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
- data/lib/mongoid/persistence/atomic/push.rb +4 -10
- data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
- data/lib/mongoid/persistence/atomic/rename.rb +6 -7
- data/lib/mongoid/persistence/atomic/sets.rb +5 -7
- data/lib/mongoid/persistence/atomic/unset.rb +4 -5
- data/lib/mongoid/persistence/atomic.rb +2 -2
- data/lib/mongoid/persistence/deletion.rb +2 -2
- data/lib/mongoid/persistence/insertion.rb +10 -16
- data/lib/mongoid/persistence/modification.rb +5 -9
- data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
- data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
- data/lib/mongoid/persistence/operations/insert.rb +4 -4
- data/lib/mongoid/persistence/operations/remove.rb +4 -4
- data/lib/mongoid/persistence/operations/update.rb +5 -5
- data/lib/mongoid/persistence/operations/upsert.rb +28 -0
- data/lib/mongoid/persistence/operations.rb +22 -19
- data/lib/mongoid/persistence/upsertion.rb +30 -0
- data/lib/mongoid/persistence.rb +94 -39
- data/lib/mongoid/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations/accessors.rb +120 -20
- data/lib/mongoid/relations/auto_save.rb +59 -5
- data/lib/mongoid/relations/binding.rb +211 -2
- data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
- data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
- data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
- data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
- data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
- data/lib/mongoid/relations/builder.rb +4 -4
- data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
- data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
- data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -5
- data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/many.rb +6 -6
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
- data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
- data/lib/mongoid/relations/builders.rb +19 -16
- data/lib/mongoid/relations/cascading/delete.rb +3 -5
- data/lib/mongoid/relations/cascading/destroy.rb +3 -3
- data/lib/mongoid/relations/cascading/nullify.rb +3 -3
- data/lib/mongoid/relations/cascading/restrict.rb +37 -0
- data/lib/mongoid/relations/cascading.rb +10 -7
- data/lib/mongoid/relations/constraint.rb +4 -3
- data/lib/mongoid/relations/conversions.rb +6 -7
- data/lib/mongoid/relations/cyclic.rb +7 -7
- data/lib/mongoid/relations/embedded/batchable.rb +347 -0
- data/lib/mongoid/relations/embedded/in.rb +23 -12
- data/lib/mongoid/relations/embedded/many.rb +100 -161
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -60
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +277 -47
- data/lib/mongoid/relations/nested_builder.rb +4 -6
- data/lib/mongoid/relations/one.rb +2 -2
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/polymorphic.rb +9 -9
- data/lib/mongoid/relations/proxy.rb +62 -31
- data/lib/mongoid/relations/referenced/in.rb +40 -15
- data/lib/mongoid/relations/referenced/many.rb +162 -130
- data/lib/mongoid/relations/referenced/many_to_many.rb +104 -48
- data/lib/mongoid/relations/referenced/one.rb +34 -13
- data/lib/mongoid/relations/reflections.rb +3 -3
- data/lib/mongoid/relations/synchronization.rb +19 -23
- data/lib/mongoid/relations/targets/enumerable.rb +86 -57
- data/lib/mongoid/relations/touchable.rb +32 -0
- data/lib/mongoid/relations.rb +22 -6
- data/lib/mongoid/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +312 -0
- data/lib/mongoid/serialization.rb +94 -42
- data/lib/mongoid/sessions/factory.rb +108 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions.rb +383 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded/lifecycle.rb +21 -21
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/threaded.rb +219 -59
- data/lib/mongoid/timestamps/created.rb +8 -4
- data/lib/mongoid/timestamps/timeless.rb +6 -4
- data/lib/mongoid/timestamps/updated.rb +4 -3
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/unit_of_work.rb +61 -0
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +34 -4
- data/lib/mongoid/validations/uniqueness.rb +11 -12
- data/lib/mongoid/validations.rb +28 -20
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- data/lib/mongoid.rb +37 -37
- data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
- data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +65 -17
- data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
- data/lib/rails/generators/mongoid_generator.rb +5 -5
- data/lib/rails/mongoid.rb +73 -26
- metadata +103 -148
- data/lib/config/locales/bg.yml +0 -61
- data/lib/config/locales/de.yml +0 -61
- data/lib/config/locales/en-GB.yml +0 -64
- data/lib/config/locales/es.yml +0 -59
- data/lib/config/locales/fr.yml +0 -62
- data/lib/config/locales/hi.yml +0 -53
- data/lib/config/locales/hu.yml +0 -64
- data/lib/config/locales/id.yml +0 -62
- data/lib/config/locales/it.yml +0 -59
- data/lib/config/locales/ja.yml +0 -57
- data/lib/config/locales/kr.yml +0 -54
- data/lib/config/locales/nl.yml +0 -61
- data/lib/config/locales/pl.yml +0 -59
- data/lib/config/locales/pt-BR.yml +0 -60
- data/lib/config/locales/pt.yml +0 -60
- data/lib/config/locales/ro.yml +0 -66
- data/lib/config/locales/ru.yml +0 -61
- data/lib/config/locales/sv.yml +0 -60
- data/lib/config/locales/vi.yml +0 -62
- data/lib/config/locales/zh-CN.yml +0 -53
- data/lib/mongoid/collection.rb +0 -157
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/collections/retry.rb +0 -59
- data/lib/mongoid/collections.rb +0 -120
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/mongo.rb +0 -487
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/criterion/builder.rb +0 -34
- data/lib/mongoid/criterion/complex.rb +0 -84
- data/lib/mongoid/criterion/creational.rb +0 -34
- data/lib/mongoid/criterion/exclusion.rb +0 -108
- data/lib/mongoid/criterion/inclusion.rb +0 -290
- data/lib/mongoid/criterion/optional.rb +0 -259
- data/lib/mongoid/criterion/selector.rb +0 -177
- data/lib/mongoid/cursor.rb +0 -88
- data/lib/mongoid/default_scope.rb +0 -36
- data/lib/mongoid/errors/invalid_type.rb +0 -25
- data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/array/deletion.rb +0 -29
- data/lib/mongoid/extensions/false_class/equality.rb +0 -26
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
- data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/hash/scoping.rb +0 -25
- data/lib/mongoid/extensions/integer/checks.rb +0 -23
- data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
- data/lib/mongoid/extensions/object/checks.rb +0 -29
- data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
- data/lib/mongoid/extensions/object/reflections.rb +0 -48
- data/lib/mongoid/extensions/object/substitutable.rb +0 -15
- data/lib/mongoid/extensions/object/yoda.rb +0 -44
- data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
- data/lib/mongoid/extensions/proc/scoping.rb +0 -25
- data/lib/mongoid/extensions/string/checks.rb +0 -36
- data/lib/mongoid/extensions/string/conversions.rb +0 -22
- data/lib/mongoid/extensions/string/inflections.rb +0 -118
- data/lib/mongoid/extensions/symbol/checks.rb +0 -23
- data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
- data/lib/mongoid/extensions/true_class/equality.rb +0 -26
- data/lib/mongoid/extras.rb +0 -31
- data/lib/mongoid/fields/internal/array.rb +0 -76
- data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
- data/lib/mongoid/fields/internal/bignum.rb +0 -10
- data/lib/mongoid/fields/internal/binary.rb +0 -11
- data/lib/mongoid/fields/internal/boolean.rb +0 -58
- data/lib/mongoid/fields/internal/date.rb +0 -51
- data/lib/mongoid/fields/internal/date_time.rb +0 -28
- data/lib/mongoid/fields/internal/false_class.rb +0 -10
- data/lib/mongoid/fields/internal/fixnum.rb +0 -10
- data/lib/mongoid/fields/internal/float.rb +0 -47
- data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
- data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
- data/lib/mongoid/fields/internal/hash.rb +0 -11
- data/lib/mongoid/fields/internal/integer.rb +0 -59
- data/lib/mongoid/fields/internal/localized.rb +0 -62
- data/lib/mongoid/fields/internal/nil_class.rb +0 -53
- data/lib/mongoid/fields/internal/object.rb +0 -11
- data/lib/mongoid/fields/internal/object_id.rb +0 -46
- data/lib/mongoid/fields/internal/range.rb +0 -61
- data/lib/mongoid/fields/internal/set.rb +0 -57
- data/lib/mongoid/fields/internal/string.rb +0 -42
- data/lib/mongoid/fields/internal/symbol.rb +0 -43
- data/lib/mongoid/fields/internal/time.rb +0 -23
- data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
- data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
- data/lib/mongoid/fields/internal/true_class.rb +0 -10
- data/lib/mongoid/fields/mappings.rb +0 -42
- data/lib/mongoid/fields/serializable.rb +0 -270
- data/lib/mongoid/identity.rb +0 -92
- data/lib/mongoid/javascript/functions.yml +0 -63
- data/lib/mongoid/javascript.rb +0 -20
- data/lib/mongoid/keys.rb +0 -144
- data/lib/mongoid/logger.rb +0 -45
- data/lib/mongoid/multi_database.rb +0 -36
- data/lib/mongoid/named_scope.rb +0 -166
- data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
- data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
- data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
- data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
- data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
- data/lib/mongoid/relations/embedded/atomic.rb +0 -89
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/relations/referenced/batch.rb +0 -73
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Bindings
|
|
5
|
-
module Embedded
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Bindings
|
|
5
|
+
module Embedded
|
|
6
6
|
|
|
7
7
|
# Binding class for embedded_in relations.
|
|
8
8
|
class In < Binding
|
|
@@ -23,20 +23,17 @@ module Mongoid # :nodoc:
|
|
|
23
23
|
# @option options [ true, false ] :binding Are we in build mode?
|
|
24
24
|
#
|
|
25
25
|
# @since 2.0.0.rc.1
|
|
26
|
-
def
|
|
26
|
+
def bind_one
|
|
27
27
|
base.metadata = metadata.inverse_metadata(target) unless base.metadata
|
|
28
28
|
base.parentize(target)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
target.do_or_do_not(metadata.inverse_setter(target), base)
|
|
35
|
-
end
|
|
29
|
+
binding do
|
|
30
|
+
if base.embedded_many?
|
|
31
|
+
target.do_or_do_not(metadata.inverse(target)).push(base)
|
|
32
|
+
else
|
|
33
|
+
target.do_or_do_not(metadata.inverse_setter(target), base)
|
|
36
34
|
end
|
|
37
35
|
end
|
|
38
36
|
end
|
|
39
|
-
alias :bind_one :bind
|
|
40
37
|
|
|
41
38
|
# Unbinds the base object and the inverse, caused by setting the
|
|
42
39
|
# reference to nil.
|
|
@@ -50,18 +47,15 @@ module Mongoid # :nodoc:
|
|
|
50
47
|
# @option options [ true, false ] :continue Do we continue unbinding?
|
|
51
48
|
#
|
|
52
49
|
# @since 2.0.0.rc.1
|
|
53
|
-
def
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
target.do_or_do_not(metadata.inverse_setter(target), nil)
|
|
60
|
-
end
|
|
50
|
+
def unbind_one
|
|
51
|
+
binding do
|
|
52
|
+
if base.embedded_many?
|
|
53
|
+
target.do_or_do_not(metadata.inverse(target)).delete(base)
|
|
54
|
+
else
|
|
55
|
+
target.do_or_do_not(metadata.inverse_setter(target), nil)
|
|
61
56
|
end
|
|
62
57
|
end
|
|
63
58
|
end
|
|
64
|
-
alias :unbind_one :unbind
|
|
65
59
|
end
|
|
66
60
|
end
|
|
67
61
|
end
|
|
@@ -1,32 +1,12 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Bindings
|
|
5
|
-
module Embedded
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Bindings
|
|
5
|
+
module Embedded
|
|
6
6
|
|
|
7
7
|
# Binding class for embeds_many relations.
|
|
8
8
|
class Many < Binding
|
|
9
9
|
|
|
10
|
-
# Binds the base object to the inverse of the relation. This is so we
|
|
11
|
-
# are referenced to the actual objects themselves on both sides.
|
|
12
|
-
#
|
|
13
|
-
# This case sets the metadata on the inverse object as well as the
|
|
14
|
-
# document itself.
|
|
15
|
-
#
|
|
16
|
-
# @example Bind all the documents.
|
|
17
|
-
# person.addresses.bind
|
|
18
|
-
# person.addresses = [ Address.new ]
|
|
19
|
-
#
|
|
20
|
-
# @param [ Hash ] options The binding options.
|
|
21
|
-
#
|
|
22
|
-
# @option options [ true, false ] :continue Continue binding the inverse.
|
|
23
|
-
# @option options [ true, false ] :binding Are we in build mode?
|
|
24
|
-
#
|
|
25
|
-
# @since 2.0.0.rc.1
|
|
26
|
-
def bind
|
|
27
|
-
target.each { |doc| bind_one(doc) }
|
|
28
|
-
end
|
|
29
|
-
|
|
30
10
|
# Binds a single document with the inverse relation. Used
|
|
31
11
|
# specifically when appending to the proxy.
|
|
32
12
|
#
|
|
@@ -42,32 +22,13 @@ module Mongoid # :nodoc:
|
|
|
42
22
|
# @since 2.0.0.rc.1
|
|
43
23
|
def bind_one(doc)
|
|
44
24
|
doc.parentize(base)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
doc.do_or_do_not(metadata.inverse_setter(target), base)
|
|
49
|
-
end
|
|
25
|
+
binding do
|
|
26
|
+
unless metadata.versioned?
|
|
27
|
+
doc.do_or_do_not(metadata.inverse_setter(target), base)
|
|
50
28
|
end
|
|
51
29
|
end
|
|
52
30
|
end
|
|
53
31
|
|
|
54
|
-
# Unbinds the base object and the inverse, caused by setting the
|
|
55
|
-
# reference to nil.
|
|
56
|
-
#
|
|
57
|
-
# @example Unbind the documents.
|
|
58
|
-
# person.addresses.unbind
|
|
59
|
-
# person.addresses = nil
|
|
60
|
-
#
|
|
61
|
-
# @param [ Hash ] options The binding options.
|
|
62
|
-
#
|
|
63
|
-
# @option options [ true, false ] :continue Continue binding the inverse.
|
|
64
|
-
# @option options [ true, false ] :binding Are we in build mode?
|
|
65
|
-
#
|
|
66
|
-
# @since 2.0.0.rc.1
|
|
67
|
-
def unbind
|
|
68
|
-
target.each { |doc| unbind_one(doc) }
|
|
69
|
-
end
|
|
70
|
-
|
|
71
32
|
# Unbind a single document.
|
|
72
33
|
#
|
|
73
34
|
# @example Unbind the document.
|
|
@@ -80,10 +41,8 @@ module Mongoid # :nodoc:
|
|
|
80
41
|
#
|
|
81
42
|
# @since 2.0.0.rc.1
|
|
82
43
|
def unbind_one(doc)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
doc.do_or_do_not(metadata.inverse_setter(target), nil)
|
|
86
|
-
end
|
|
44
|
+
binding do
|
|
45
|
+
doc.do_or_do_not(metadata.inverse_setter(target), nil)
|
|
87
46
|
end
|
|
88
47
|
end
|
|
89
48
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Bindings
|
|
5
|
-
module Embedded
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Bindings
|
|
5
|
+
module Embedded
|
|
6
6
|
|
|
7
7
|
# Binding class for embeds_one relations.
|
|
8
8
|
class One < Binding
|
|
@@ -23,15 +23,12 @@ module Mongoid # :nodoc:
|
|
|
23
23
|
# @option options [ true, false ] :binding Are we in build mode?
|
|
24
24
|
#
|
|
25
25
|
# @since 2.0.0.rc.1
|
|
26
|
-
def
|
|
26
|
+
def bind_one
|
|
27
27
|
target.parentize(base)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
target.do_or_do_not(metadata.inverse_setter(target), base)
|
|
31
|
-
end
|
|
28
|
+
binding do
|
|
29
|
+
target.do_or_do_not(metadata.inverse_setter(target), base)
|
|
32
30
|
end
|
|
33
31
|
end
|
|
34
|
-
alias :bind_one :bind
|
|
35
32
|
|
|
36
33
|
# Unbinds the base object and the inverse, caused by setting the
|
|
37
34
|
# reference to nil.
|
|
@@ -46,14 +43,11 @@ module Mongoid # :nodoc:
|
|
|
46
43
|
# @option options [ true, false ] :binding Are we in build mode?
|
|
47
44
|
#
|
|
48
45
|
# @since 2.0.0.rc.1
|
|
49
|
-
def
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
target.do_or_do_not(metadata.inverse_setter(target), nil)
|
|
53
|
-
end
|
|
46
|
+
def unbind_one
|
|
47
|
+
binding do
|
|
48
|
+
target.do_or_do_not(metadata.inverse_setter(target), nil)
|
|
54
49
|
end
|
|
55
50
|
end
|
|
56
|
-
alias :unbind_one :unbind
|
|
57
51
|
end
|
|
58
52
|
end
|
|
59
53
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Bindings
|
|
5
|
-
module Referenced
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Bindings
|
|
5
|
+
module Referenced
|
|
6
6
|
|
|
7
7
|
# Binding class for all referenced_in relations.
|
|
8
8
|
class In < Binding
|
|
@@ -18,27 +18,23 @@ module Mongoid # :nodoc:
|
|
|
18
18
|
# game.person = Person.new
|
|
19
19
|
#
|
|
20
20
|
# @since 2.0.0.rc.1
|
|
21
|
-
def
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
base
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
else
|
|
34
|
-
target.do_or_do_not(metadata.inverse_setter(target), base)
|
|
35
|
-
end
|
|
21
|
+
def bind_one
|
|
22
|
+
binding do
|
|
23
|
+
check_inverses!(target)
|
|
24
|
+
bind_foreign_key(base, target.id)
|
|
25
|
+
bind_polymorphic_inverse_type(base, target.class.model_name)
|
|
26
|
+
if inverse = metadata.inverse(target)
|
|
27
|
+
if set_base_metadata
|
|
28
|
+
bind_inverse_of_field(base, base.metadata_name)
|
|
29
|
+
if base.referenced_many?
|
|
30
|
+
target.__send__(inverse).push(base) unless Mongoid.using_identity_map?
|
|
31
|
+
else
|
|
32
|
+
target.do_or_do_not(metadata.inverse_setter(target), base)
|
|
36
33
|
end
|
|
37
34
|
end
|
|
38
35
|
end
|
|
39
36
|
end
|
|
40
37
|
end
|
|
41
|
-
alias :bind_one :bind
|
|
42
38
|
|
|
43
39
|
# Unbinds the base object and the inverse, caused by setting the
|
|
44
40
|
# reference to nil.
|
|
@@ -48,47 +44,25 @@ module Mongoid # :nodoc:
|
|
|
48
44
|
# game.person = nil
|
|
49
45
|
#
|
|
50
46
|
# @since 2.0.0.rc.1
|
|
51
|
-
def
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
47
|
+
def unbind_one
|
|
48
|
+
binding do
|
|
49
|
+
inverse = metadata.inverse(target)
|
|
50
|
+
if !inverse && metadata.inverse_of_field
|
|
51
|
+
inverse = base.__send__(metadata.inverse_of_field)
|
|
52
|
+
end
|
|
53
|
+
bind_foreign_key(base, nil)
|
|
54
|
+
bind_polymorphic_inverse_type(base, nil)
|
|
55
|
+
bind_inverse_of_field(base, nil)
|
|
56
|
+
if inverse
|
|
57
|
+
set_base_metadata
|
|
58
|
+
if base.referenced_many?
|
|
59
|
+
target.__send__(inverse).delete(base)
|
|
60
|
+
else
|
|
61
|
+
target.__send__("#{inverse}=", nil)
|
|
66
62
|
end
|
|
67
63
|
end
|
|
68
64
|
end
|
|
69
65
|
end
|
|
70
|
-
alias :unbind_one :unbind
|
|
71
|
-
|
|
72
|
-
private
|
|
73
|
-
|
|
74
|
-
# Ensure that the metadata on the base is correct, for the cases
|
|
75
|
-
# where we have multiple belongs to definitions and were are setting
|
|
76
|
-
# different parents in memory in order.
|
|
77
|
-
#
|
|
78
|
-
# @api private
|
|
79
|
-
#
|
|
80
|
-
# @example Set the base metadata.
|
|
81
|
-
# binding.set_base_metadata
|
|
82
|
-
#
|
|
83
|
-
# @return [ true, false ] If the metadata changed.
|
|
84
|
-
#
|
|
85
|
-
# @since 2.4.4
|
|
86
|
-
def set_base_metadata
|
|
87
|
-
inverse_metadata = metadata.inverse_metadata(target)
|
|
88
|
-
if inverse_metadata != metadata && !inverse_metadata.nil?
|
|
89
|
-
base.metadata = inverse_metadata
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
66
|
end
|
|
93
67
|
end
|
|
94
68
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Bindings
|
|
5
|
-
module Referenced
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Bindings
|
|
5
|
+
module Referenced
|
|
6
6
|
|
|
7
7
|
# Binding class for references_many relations.
|
|
8
8
|
class Many < Binding
|
|
@@ -17,14 +17,8 @@ module Mongoid # :nodoc:
|
|
|
17
17
|
#
|
|
18
18
|
# @since 2.0.0.rc.1
|
|
19
19
|
def bind_one(doc)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
doc.you_must(metadata.type_setter, base.class.model_name)
|
|
23
|
-
end
|
|
24
|
-
unless _binding?
|
|
25
|
-
_binding do
|
|
26
|
-
doc.send(metadata.inverse_setter, base)
|
|
27
|
-
end
|
|
20
|
+
binding do
|
|
21
|
+
bind_from_relational_parent(doc)
|
|
28
22
|
end
|
|
29
23
|
end
|
|
30
24
|
|
|
@@ -37,14 +31,8 @@ module Mongoid # :nodoc:
|
|
|
37
31
|
#
|
|
38
32
|
# @since 2.0.0.rc.1
|
|
39
33
|
def unbind_one(doc)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
doc.you_must(metadata.type_setter, nil)
|
|
43
|
-
end
|
|
44
|
-
unless _binding?
|
|
45
|
-
_binding do
|
|
46
|
-
doc.send(metadata.inverse_setter, nil)
|
|
47
|
-
end
|
|
34
|
+
binding do
|
|
35
|
+
unbind_from_relational_parent(doc)
|
|
48
36
|
end
|
|
49
37
|
end
|
|
50
38
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Bindings
|
|
5
|
-
module Referenced
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Bindings
|
|
5
|
+
module Referenced
|
|
6
6
|
|
|
7
7
|
# Binding class for all references_and_referenced_in_many relations.
|
|
8
8
|
class ManyToMany < Binding
|
|
@@ -17,13 +17,11 @@ module Mongoid # :nodoc:
|
|
|
17
17
|
#
|
|
18
18
|
# @since 2.0.0.rc.1
|
|
19
19
|
def bind_one(doc)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
doc.synced[metadata.inverse_foreign_key] = true
|
|
26
|
-
end
|
|
20
|
+
binding do
|
|
21
|
+
inverse_keys = doc.you_must(metadata.inverse_foreign_key)
|
|
22
|
+
inverse_keys.push(base.id) if inverse_keys
|
|
23
|
+
base.synced[metadata.foreign_key] = true
|
|
24
|
+
doc.synced[metadata.inverse_foreign_key] = true
|
|
27
25
|
end
|
|
28
26
|
end
|
|
29
27
|
|
|
@@ -34,14 +32,12 @@ module Mongoid # :nodoc:
|
|
|
34
32
|
#
|
|
35
33
|
# @since 2.0.0.rc.1
|
|
36
34
|
def unbind_one(doc)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
doc.synced[metadata.inverse_foreign_key] = true
|
|
44
|
-
end
|
|
35
|
+
binding do
|
|
36
|
+
base.send(metadata.foreign_key).delete_one(doc.id)
|
|
37
|
+
inverse_keys = doc.you_must(metadata.inverse_foreign_key)
|
|
38
|
+
inverse_keys.delete_one(base.id) if inverse_keys
|
|
39
|
+
base.synced[metadata.foreign_key] = true
|
|
40
|
+
doc.synced[metadata.inverse_foreign_key] = true
|
|
45
41
|
end
|
|
46
42
|
end
|
|
47
43
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Bindings
|
|
5
|
-
module Referenced
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Bindings
|
|
5
|
+
module Referenced
|
|
6
6
|
|
|
7
7
|
# Binding class for references_one relations.
|
|
8
8
|
class One < Binding
|
|
@@ -18,18 +18,11 @@ module Mongoid # :nodoc:
|
|
|
18
18
|
# person.game = Game.new
|
|
19
19
|
#
|
|
20
20
|
# @since 2.0.0.rc.1
|
|
21
|
-
def
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
target.you_must(metadata.type_setter, base.class.model_name)
|
|
25
|
-
end
|
|
26
|
-
unless _binding?
|
|
27
|
-
_binding do
|
|
28
|
-
target.send(metadata.inverse_setter, base)
|
|
29
|
-
end
|
|
21
|
+
def bind_one
|
|
22
|
+
binding do
|
|
23
|
+
bind_from_relational_parent(target)
|
|
30
24
|
end
|
|
31
25
|
end
|
|
32
|
-
alias :bind_one :bind
|
|
33
26
|
|
|
34
27
|
# Unbinds the base object and the inverse, caused by setting the
|
|
35
28
|
# reference to nil.
|
|
@@ -39,18 +32,11 @@ module Mongoid # :nodoc:
|
|
|
39
32
|
# person.game = nil
|
|
40
33
|
#
|
|
41
34
|
# @since 2.0.0.rc.1
|
|
42
|
-
def
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
target.you_must(metadata.type_setter, nil)
|
|
46
|
-
end
|
|
47
|
-
unless _binding?
|
|
48
|
-
_binding do
|
|
49
|
-
target.send(metadata.inverse_setter, nil)
|
|
50
|
-
end
|
|
35
|
+
def unbind_one
|
|
36
|
+
binding do
|
|
37
|
+
unbind_from_relational_parent(target)
|
|
51
38
|
end
|
|
52
39
|
end
|
|
53
|
-
alias :unbind_one :unbind
|
|
54
40
|
end
|
|
55
41
|
end
|
|
56
42
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
4
|
|
|
5
5
|
# Superclass for all builder objects. Builders are responsible for either
|
|
6
6
|
# looking up a relation's target from the database, or creating them from a
|
|
@@ -17,7 +17,7 @@ module Mongoid # :nodoc:
|
|
|
17
17
|
#
|
|
18
18
|
# @param [ Document ] base The base document.
|
|
19
19
|
# @param [ Metdata ] metadata The metadata for the relation.
|
|
20
|
-
# @param [ Hash, BSON::ObjectId ] object The attributes to build from or
|
|
20
|
+
# @param [ Hash, Moped::BSON::ObjectId ] object The attributes to build from or
|
|
21
21
|
# id to query with.
|
|
22
22
|
#
|
|
23
23
|
# @since 2.0.0.rc.1
|
|
@@ -49,7 +49,7 @@ module Mongoid # :nodoc:
|
|
|
49
49
|
#
|
|
50
50
|
# @since 2.0.0.rc.1
|
|
51
51
|
def query?
|
|
52
|
-
obj =
|
|
52
|
+
obj = object.__array__.first
|
|
53
53
|
!obj.is_a?(Mongoid::Document) && !obj.nil?
|
|
54
54
|
end
|
|
55
55
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Builders
|
|
5
|
-
module Embedded
|
|
6
|
-
class In < Builder
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Builders
|
|
5
|
+
module Embedded
|
|
6
|
+
class In < Builder
|
|
7
7
|
|
|
8
8
|
# This builder doesn't actually build anything, just returns the
|
|
9
9
|
# parent since it should already be instantiated.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Builders
|
|
5
|
-
module Embedded
|
|
6
|
-
class Many < Builder
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Builders
|
|
5
|
+
module Embedded
|
|
6
|
+
class Many < Builder
|
|
7
7
|
|
|
8
8
|
# Builds the document out of the attributes using the provided
|
|
9
9
|
# metadata on the relation. Instantiates through the factory in order
|
|
@@ -19,15 +19,15 @@ module Mongoid # :nodoc:
|
|
|
19
19
|
def build(type = nil)
|
|
20
20
|
return [] if object.blank?
|
|
21
21
|
return object if object.first.is_a?(Document)
|
|
22
|
-
[]
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
end
|
|
22
|
+
docs = []
|
|
23
|
+
object.each do |attrs|
|
|
24
|
+
if _loading? && base.persisted?
|
|
25
|
+
docs.push(Factory.from_db(klass, attrs))
|
|
26
|
+
else
|
|
27
|
+
docs.push(Factory.build(klass, attrs))
|
|
29
28
|
end
|
|
30
29
|
end
|
|
30
|
+
docs
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Builders
|
|
5
|
-
module Embedded
|
|
6
|
-
class One < Builder
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Builders
|
|
5
|
+
module Embedded
|
|
6
|
+
class One < Builder
|
|
7
7
|
|
|
8
8
|
# Builds the document out of the attributes using the provided
|
|
9
9
|
# metadata on the relation. Instantiates through the factory in order
|
|
@@ -17,7 +17,7 @@ module Mongoid # :nodoc:
|
|
|
17
17
|
# @return [ Document ] A single document.
|
|
18
18
|
def build(type = nil)
|
|
19
19
|
return object unless object.is_a?(Hash)
|
|
20
|
-
if _loading?
|
|
20
|
+
if _loading? && base.persisted?
|
|
21
21
|
Factory.from_db(klass, object)
|
|
22
22
|
else
|
|
23
23
|
Factory.build(klass, object)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Builders
|
|
5
|
-
module NestedAttributes
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Builders
|
|
5
|
+
module NestedAttributes
|
|
6
6
|
class Many < NestedBuilder
|
|
7
7
|
|
|
8
8
|
# Builds the relation depending on the attributes and the options
|
|
@@ -25,9 +25,9 @@ module Mongoid # :nodoc:
|
|
|
25
25
|
end
|
|
26
26
|
attributes.each do |attrs|
|
|
27
27
|
if attrs.respond_to?(:with_indifferent_access)
|
|
28
|
-
|
|
28
|
+
process_attributes(parent, attrs)
|
|
29
29
|
else
|
|
30
|
-
|
|
30
|
+
process_attributes(parent, attrs[1])
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -86,10 +86,10 @@ module Mongoid # :nodoc:
|
|
|
86
86
|
# new, existing, or ignored document.
|
|
87
87
|
#
|
|
88
88
|
# @example Process the attributes
|
|
89
|
-
# builder.
|
|
89
|
+
# builder.process_attributes({ "id" => 1, "street" => "Bond" })
|
|
90
90
|
#
|
|
91
91
|
# @param [ Hash ] attrs The single document attributes to process.
|
|
92
|
-
def
|
|
92
|
+
def process_attributes(parent, attrs)
|
|
93
93
|
return if reject?(parent, attrs)
|
|
94
94
|
if id = attrs.extract_id
|
|
95
95
|
first = existing.first
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Builders
|
|
5
|
-
module NestedAttributes
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Builders
|
|
5
|
+
module NestedAttributes
|
|
6
6
|
class One < NestedBuilder
|
|
7
7
|
|
|
8
8
|
attr_accessor :destroy
|
|
@@ -27,7 +27,7 @@ module Mongoid # :nodoc:
|
|
|
27
27
|
if update?
|
|
28
28
|
existing.attributes = attributes
|
|
29
29
|
elsif replace?
|
|
30
|
-
parent.send(metadata.setter,
|
|
30
|
+
parent.send(metadata.setter, Factory.build(metadata.klass, attributes))
|
|
31
31
|
elsif delete?
|
|
32
32
|
parent.send(metadata.setter, nil)
|
|
33
33
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Relations
|
|
4
|
-
module Builders
|
|
5
|
-
module Referenced
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Relations
|
|
4
|
+
module Builders
|
|
5
|
+
module Referenced
|
|
6
6
|
class In < Builder
|
|
7
7
|
|
|
8
8
|
# This builder either takes a foreign key and queries for the
|