mongoid 2.4.9 → 3.0.0.rc
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 +869 -8
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +2 -17
- data/lib/config/locales/en.yml +441 -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 +16 -6
- 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 +100 -42
- data/lib/mongoid/collections/retry.rb +2 -3
- data/lib/mongoid/components.rb +10 -22
- data/lib/mongoid/config/environment.rb +4 -3
- 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 +87 -233
- data/lib/mongoid/contextual/aggregable/memory.rb +98 -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 +66 -0
- data/lib/mongoid/contextual/map_reduce.rb +273 -0
- data/lib/mongoid/contextual/memory.rb +383 -0
- data/lib/mongoid/contextual/mongo.rb +543 -0
- data/lib/mongoid/contextual.rb +50 -0
- data/lib/mongoid/copyable.rb +2 -2
- data/lib/mongoid/criteria.rb +436 -248
- 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 +68 -49
- 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_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 +22 -1
- data/lib/mongoid/extensions/array.rb +127 -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 +68 -0
- data/lib/mongoid/extensions/false_class.rb +26 -0
- data/lib/mongoid/extensions/float.rb +44 -0
- data/lib/mongoid/extensions/hash.rb +91 -0
- data/lib/mongoid/extensions/integer.rb +54 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +21 -0
- data/lib/mongoid/extensions/object.rb +188 -0
- data/lib/mongoid/extensions/object_id.rb +53 -0
- data/lib/mongoid/extensions/range.rb +55 -0
- data/lib/mongoid/extensions/regexp.rb +27 -0
- data/lib/mongoid/extensions/set.rb +55 -0
- data/lib/mongoid/extensions/string.rb +155 -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 +26 -0
- data/lib/mongoid/extensions.rb +28 -76
- data/lib/mongoid/factory.rb +4 -4
- data/lib/mongoid/fields/foreign_key.rb +134 -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 +129 -194
- data/lib/mongoid/finders.rb +42 -43
- data/lib/mongoid/hierarchy.rb +25 -14
- data/lib/mongoid/identity_map.rb +39 -12
- 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/javascript.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 +8 -10
- data/lib/mongoid/nested_attributes.rb +17 -9
- data/lib/mongoid/observer.rb +1 -2
- data/lib/mongoid/paranoia.rb +13 -18
- 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.rb +6 -19
- data/lib/mongoid/persistence.rb +64 -27
- data/lib/mongoid/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations/accessors.rb +119 -19
- 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 +3 -3
- 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 +4 -4
- data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/many.rb +5 -5
- 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 +12 -4
- 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 +6 -4
- data/lib/mongoid/relations/constraint.rb +4 -3
- data/lib/mongoid/relations/conversions.rb +5 -6
- data/lib/mongoid/relations/cyclic.rb +7 -7
- data/lib/mongoid/relations/embedded/batchable.rb +346 -0
- data/lib/mongoid/relations/embedded/in.rb +23 -12
- data/lib/mongoid/relations/embedded/many.rb +99 -148
- 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 +231 -45
- data/lib/mongoid/relations/nested_builder.rb +3 -5
- data/lib/mongoid/relations/one.rb +14 -2
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/polymorphic.rb +9 -9
- data/lib/mongoid/relations/proxy.rb +60 -31
- data/lib/mongoid/relations/referenced/in.rb +40 -15
- data/lib/mongoid/relations/referenced/many.rb +116 -122
- data/lib/mongoid/relations/referenced/many_to_many.rb +101 -46
- 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 +6 -6
- data/lib/mongoid/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +329 -0
- data/lib/mongoid/serialization.rb +13 -30
- data/lib/mongoid/sessions/factory.rb +106 -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 +359 -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 +167 -59
- data/lib/mongoid/timestamps/created.rb +8 -4
- data/lib/mongoid/timestamps/timeless.rb +6 -4
- data/lib/mongoid/timestamps/updated.rb +3 -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 +103 -25
- data/lib/mongoid/validations.rb +62 -20
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- data/lib/mongoid.rb +24 -39
- 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 +59 -19
- 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 +69 -25
- metadata +93 -155
- 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.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 -485
- 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/keys.rb +0 -144
- data/lib/mongoid/logger.rb +0 -45
- data/lib/mongoid/multi_database.rb +0 -31
- 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,5 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
|
|
4
4
|
# Mongoid's implementation of Rails' nested attributes.
|
|
5
5
|
module NestedAttributes
|
|
@@ -7,12 +7,14 @@ module Mongoid #:nodoc:
|
|
|
7
7
|
|
|
8
8
|
included do
|
|
9
9
|
class_attribute :nested_attributes
|
|
10
|
-
self.nested_attributes =
|
|
10
|
+
self.nested_attributes = {}
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
module ClassMethods
|
|
13
|
+
module ClassMethods
|
|
14
14
|
|
|
15
|
-
REJECT_ALL_BLANK_PROC =
|
|
15
|
+
REJECT_ALL_BLANK_PROC = ->(attributes){
|
|
16
|
+
attributes.all? { |key, value| key == '_destroy' || value.blank? }
|
|
17
|
+
}
|
|
16
18
|
|
|
17
19
|
# Used when needing to update related models from a parent relation. Can
|
|
18
20
|
# be used on embedded or referenced relations.
|
|
@@ -33,18 +35,24 @@ module Mongoid #:nodoc:
|
|
|
33
35
|
# by a hash of options.
|
|
34
36
|
#
|
|
35
37
|
# @option *args [ true, false ] :allow_destroy Can deletion occur?
|
|
36
|
-
# @option *args [ Proc, Symbol ] :reject_if Block or symbol pointing
|
|
38
|
+
# @option *args [ Proc, Symbol ] :reject_if Block or symbol pointing
|
|
39
|
+
# to a class method to reject documents with.
|
|
37
40
|
# @option *args [ Integer ] :limit The max number to create.
|
|
38
41
|
# @option *args [ true, false ] :update_only Only update existing docs.
|
|
39
42
|
def accepts_nested_attributes_for(*args)
|
|
40
43
|
options = args.extract_options!
|
|
41
44
|
options[:reject_if] = REJECT_ALL_BLANK_PROC if options[:reject_if] == :all_blank
|
|
42
45
|
args.each do |name|
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
meth = "#{name}_attributes="
|
|
47
|
+
self.nested_attributes["#{name}_attributes"] = meth
|
|
48
|
+
metadata = relations[name.to_s]
|
|
49
|
+
unless metadata
|
|
50
|
+
raise Errors::NestedAttributesMetadataNotFound.new(self, name)
|
|
51
|
+
end
|
|
52
|
+
autosave(metadata.merge!(autosave: true))
|
|
53
|
+
re_define_method(meth) do |attrs|
|
|
45
54
|
_assigning do
|
|
46
|
-
|
|
47
|
-
relation.nested_builder(attrs, options).build(self)
|
|
55
|
+
metadata.nested_builder(attrs, options).build(self)
|
|
48
56
|
end
|
|
49
57
|
end
|
|
50
58
|
end
|
data/lib/mongoid/observer.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
|
|
4
4
|
# Observer classes respond to life cycle callbacks to implement trigger-like
|
|
5
5
|
# behavior outside the original class. This is a great way to reduce the
|
|
@@ -176,6 +176,5 @@ module Mongoid #:nodoc:
|
|
|
176
176
|
return false unless klass.respond_to?(:observers)
|
|
177
177
|
klass.observers.disabled_for?(self) || Mongoid.observers.disabled_for?(self)
|
|
178
178
|
end
|
|
179
|
-
|
|
180
179
|
end
|
|
181
180
|
end
|
data/lib/mongoid/paranoia.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
|
|
4
4
|
# Include this module to get soft deletion of root level documents.
|
|
5
5
|
# This will add a deleted_at field to the +Document+, managed automatically.
|
|
@@ -14,7 +14,7 @@ module Mongoid #:nodoc:
|
|
|
14
14
|
extend ActiveSupport::Concern
|
|
15
15
|
|
|
16
16
|
included do
|
|
17
|
-
field :deleted_at, :
|
|
17
|
+
field :deleted_at, type: Time
|
|
18
18
|
self.paranoid = true
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -56,11 +56,8 @@ module Mongoid #:nodoc:
|
|
|
56
56
|
# @since 1.0.0
|
|
57
57
|
def remove(options = {})
|
|
58
58
|
time = self.deleted_at = Time.now
|
|
59
|
-
paranoid_collection.
|
|
60
|
-
|
|
61
|
-
{ "$set" => { paranoid_field => time }},
|
|
62
|
-
Safety.merge_safety_options(options)
|
|
63
|
-
)
|
|
59
|
+
paranoid_collection.find(atomic_selector).
|
|
60
|
+
update({ "$set" => { paranoid_field => time }})
|
|
64
61
|
cascade!
|
|
65
62
|
@destroyed = true
|
|
66
63
|
IdentityMap.remove(self)
|
|
@@ -78,7 +75,7 @@ module Mongoid #:nodoc:
|
|
|
78
75
|
#
|
|
79
76
|
# @since 1.0.0
|
|
80
77
|
def destroyed?
|
|
81
|
-
@destroyed || !!deleted_at
|
|
78
|
+
(@destroyed ||= false) || !!deleted_at
|
|
82
79
|
end
|
|
83
80
|
|
|
84
81
|
# Restores a previously soft-deleted document. Handles this by removing the
|
|
@@ -91,10 +88,8 @@ module Mongoid #:nodoc:
|
|
|
91
88
|
#
|
|
92
89
|
# @since 1.0.0
|
|
93
90
|
def restore
|
|
94
|
-
paranoid_collection.
|
|
95
|
-
|
|
96
|
-
{ "$unset" => { paranoid_field => true }}
|
|
97
|
-
)
|
|
91
|
+
paranoid_collection.find(atomic_selector).
|
|
92
|
+
update({ "$unset" => { paranoid_field => true }})
|
|
98
93
|
attributes.delete("deleted_at")
|
|
99
94
|
end
|
|
100
95
|
|
|
@@ -124,21 +119,21 @@ module Mongoid #:nodoc:
|
|
|
124
119
|
embedded? ? "#{atomic_position}.deleted_at" : "deleted_at"
|
|
125
120
|
end
|
|
126
121
|
|
|
127
|
-
module ClassMethods
|
|
122
|
+
module ClassMethods
|
|
128
123
|
|
|
129
124
|
# Override the default +Criteria+ accessor to only get existing
|
|
130
|
-
# documents.
|
|
125
|
+
# documents.
|
|
131
126
|
#
|
|
132
127
|
# @example Override the criteria.
|
|
133
|
-
# Person.
|
|
128
|
+
# Person.queryable
|
|
134
129
|
#
|
|
135
130
|
# @param [ Array ] args The arguments.
|
|
136
131
|
#
|
|
137
132
|
# @return [ Criteria ] The paranoid compliant criteria.
|
|
138
133
|
#
|
|
139
|
-
# @since
|
|
140
|
-
def
|
|
141
|
-
|
|
134
|
+
# @since 3.0.0
|
|
135
|
+
def queryable
|
|
136
|
+
super.where(deleted_at: nil)
|
|
142
137
|
end
|
|
143
138
|
|
|
144
139
|
# Find deleted documents
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# This class provides the ability to perform an explicit $addToSet
|
|
7
7
|
# modification on a specific field.
|
|
@@ -23,12 +23,8 @@ module Mongoid #:nodoc:
|
|
|
23
23
|
Array.wrap(value).each do |val|
|
|
24
24
|
values.push(val) unless values.include?(val)
|
|
25
25
|
end
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
collection.update(document.atomic_selector, operation("$addToSet"), options)
|
|
29
|
-
document.remove_change(field)
|
|
30
|
-
end
|
|
31
|
-
end
|
|
26
|
+
execute("$addToSet")
|
|
27
|
+
values
|
|
32
28
|
end
|
|
33
29
|
end
|
|
34
30
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# This operation is for performing $bit atomic operations against the
|
|
7
7
|
# database.
|
|
@@ -25,10 +25,8 @@ module Mongoid #:nodoc:
|
|
|
25
25
|
result = result | val if bit.to_s == "or"
|
|
26
26
|
result
|
|
27
27
|
end
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
document.remove_change(field)
|
|
31
|
-
end
|
|
28
|
+
execute("$bit")
|
|
29
|
+
document[field]
|
|
32
30
|
end
|
|
33
31
|
end
|
|
34
32
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# This class provides atomic $inc behaviour.
|
|
7
7
|
class Inc
|
|
@@ -19,10 +19,8 @@ module Mongoid #:nodoc:
|
|
|
19
19
|
prepare do
|
|
20
20
|
current = document[field] || 0
|
|
21
21
|
document[field] = current + value
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
document.remove_change(field)
|
|
25
|
-
end
|
|
22
|
+
execute("$inc")
|
|
23
|
+
document[field]
|
|
26
24
|
end
|
|
27
25
|
end
|
|
28
26
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# This is the included module for all atomic operation objects.
|
|
7
7
|
module Operation
|
|
@@ -33,7 +33,7 @@ module Mongoid #:nodoc:
|
|
|
33
33
|
# @since 2.0.0
|
|
34
34
|
def initialize(document, field, value, options = {})
|
|
35
35
|
@document, @field, @value = document, field.to_s, value
|
|
36
|
-
@options =
|
|
36
|
+
@options = options
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
# Get the atomic operation to perform.
|
|
@@ -75,8 +75,47 @@ module Mongoid #:nodoc:
|
|
|
75
75
|
#
|
|
76
76
|
# @since 2.1.0
|
|
77
77
|
def prepare
|
|
78
|
-
yield(document)
|
|
79
|
-
|
|
78
|
+
doc = yield(document)
|
|
79
|
+
Threaded.clear_options!
|
|
80
|
+
doc
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
private
|
|
84
|
+
|
|
85
|
+
# Executes the common functionality between operations.
|
|
86
|
+
#
|
|
87
|
+
# @api private
|
|
88
|
+
#
|
|
89
|
+
# @example Execute the operation.
|
|
90
|
+
# operation.execute("$push")
|
|
91
|
+
#
|
|
92
|
+
# @param [ String ] name The name of the operation.
|
|
93
|
+
#
|
|
94
|
+
# @since 3.0.0
|
|
95
|
+
def execute(name)
|
|
96
|
+
if document.persisted?
|
|
97
|
+
collection.find(document.atomic_selector).update(operation(name))
|
|
98
|
+
document.remove_change(field)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Appends items to an array and executes the corresponding $push or
|
|
103
|
+
# $pushAll operation.
|
|
104
|
+
#
|
|
105
|
+
# @api private
|
|
106
|
+
#
|
|
107
|
+
# @example Execute the append.
|
|
108
|
+
# operation.append_with("$push")
|
|
109
|
+
#
|
|
110
|
+
# @param [ String ] name The name of the operation - $push or $pushAll.
|
|
111
|
+
#
|
|
112
|
+
# @since 3.0.0
|
|
113
|
+
def append_with(name)
|
|
114
|
+
prepare do
|
|
115
|
+
document[field] = [] unless document[field]
|
|
116
|
+
docs = document.send(field).concat(value.__array__)
|
|
117
|
+
execute(name)
|
|
118
|
+
docs
|
|
80
119
|
end
|
|
81
120
|
end
|
|
82
121
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# This class provides the ability to perform an explicit $pop
|
|
7
7
|
# modification on a specific field.
|
|
@@ -21,10 +21,8 @@ module Mongoid #:nodoc:
|
|
|
21
21
|
if document[field]
|
|
22
22
|
values = document.send(field)
|
|
23
23
|
value > 0 ? values.pop : values.shift
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
document.remove_change(field) if document.persisted?
|
|
27
|
-
end
|
|
24
|
+
execute("$pop")
|
|
25
|
+
values
|
|
28
26
|
end
|
|
29
27
|
end
|
|
30
28
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# This class provides the ability to perform an explicit $pull
|
|
7
7
|
# modification on a specific field.
|
|
@@ -21,10 +21,8 @@ module Mongoid #:nodoc:
|
|
|
21
21
|
if document[field]
|
|
22
22
|
values = document.send(field)
|
|
23
23
|
values.delete(value)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
document.remove_change(field) if document.persisted?
|
|
27
|
-
end
|
|
24
|
+
execute("$pull")
|
|
25
|
+
values
|
|
28
26
|
end
|
|
29
27
|
end
|
|
30
28
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# This class provides the ability to perform an explicit $pullAll
|
|
7
7
|
# modification on a specific field.
|
|
@@ -21,10 +21,8 @@ module Mongoid #:nodoc:
|
|
|
21
21
|
if document[field]
|
|
22
22
|
values = document.send(field)
|
|
23
23
|
values.delete_if { |val| value.include?(val) }
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
document.remove_change(field) if document.persisted?
|
|
27
|
-
end
|
|
24
|
+
execute("$pullAll")
|
|
25
|
+
values
|
|
28
26
|
end
|
|
29
27
|
end
|
|
30
28
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# This class provides the ability to perform an explicit $push modification
|
|
7
7
|
# on a specific field.
|
|
@@ -17,13 +17,7 @@ module Mongoid #:nodoc:
|
|
|
17
17
|
#
|
|
18
18
|
# @since 2.0.0
|
|
19
19
|
def persist
|
|
20
|
-
|
|
21
|
-
document[field] = [] unless document[field]
|
|
22
|
-
document.send(field).push(value).tap do |value|
|
|
23
|
-
collection.update(document.atomic_selector, operation("$push"), options)
|
|
24
|
-
document.remove_change(field)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
20
|
+
append_with("$push")
|
|
27
21
|
end
|
|
28
22
|
end
|
|
29
23
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# This class provides the ability to perform an explicit $pushAll modification
|
|
7
7
|
# on a specific field.
|
|
@@ -17,13 +17,7 @@ module Mongoid #:nodoc:
|
|
|
17
17
|
#
|
|
18
18
|
# @since 2.1.0
|
|
19
19
|
def persist
|
|
20
|
-
|
|
21
|
-
document[field] = [] unless document[field]
|
|
22
|
-
document.send(field).concat(value).tap do |value|
|
|
23
|
-
collection.update(document.atomic_selector, operation("$pushAll"), options)
|
|
24
|
-
document.remove_change(field)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
20
|
+
append_with("$pushAll")
|
|
27
21
|
end
|
|
28
22
|
end
|
|
29
23
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# Performs an atomic rename operation.
|
|
7
7
|
class Rename
|
|
@@ -19,10 +19,9 @@ module Mongoid #:nodoc:
|
|
|
19
19
|
prepare do
|
|
20
20
|
@value = value.to_s
|
|
21
21
|
document[value] = document.attributes.delete(field)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
end
|
|
22
|
+
execute("$rename")
|
|
23
|
+
document.remove_change(value)
|
|
24
|
+
document[value]
|
|
26
25
|
end
|
|
27
26
|
end
|
|
28
27
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# This class provides atomic $set behaviour.
|
|
7
7
|
class Sets
|
|
@@ -18,10 +18,8 @@ module Mongoid #:nodoc:
|
|
|
18
18
|
def persist
|
|
19
19
|
prepare do
|
|
20
20
|
document[field] = value
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
document.remove_change(field)
|
|
24
|
-
end
|
|
21
|
+
execute("$set")
|
|
22
|
+
document[field]
|
|
25
23
|
end
|
|
26
24
|
end
|
|
27
25
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Atomic
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Atomic
|
|
5
5
|
|
|
6
6
|
# Performs atomic $unset operations.
|
|
7
7
|
class Unset
|
|
@@ -18,8 +18,7 @@ module Mongoid #:nodoc:
|
|
|
18
18
|
def persist
|
|
19
19
|
prepare do
|
|
20
20
|
document.attributes.delete(field)
|
|
21
|
-
|
|
22
|
-
document.remove_change(value)
|
|
21
|
+
execute("$unset")
|
|
23
22
|
end
|
|
24
23
|
end
|
|
25
24
|
end
|
|
@@ -12,8 +12,8 @@ require "mongoid/persistence/atomic/rename"
|
|
|
12
12
|
require "mongoid/persistence/atomic/sets"
|
|
13
13
|
require "mongoid/persistence/atomic/unset"
|
|
14
14
|
|
|
15
|
-
module Mongoid
|
|
16
|
-
module Persistence
|
|
15
|
+
module Mongoid
|
|
16
|
+
module Persistence
|
|
17
17
|
|
|
18
18
|
# This module provides the explicit atomic operations helpers on the
|
|
19
19
|
# document itself.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
4
|
|
|
5
5
|
# Contains common logic for insertion operations.
|
|
6
6
|
module Insertion
|
|
@@ -19,23 +19,17 @@ module Mongoid #:nodoc:
|
|
|
19
19
|
#
|
|
20
20
|
# @since 2.1.0
|
|
21
21
|
def prepare(&block)
|
|
22
|
-
document.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
true
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
unless result == false
|
|
33
|
-
doc.reset_persisted_children
|
|
34
|
-
doc.move_changes
|
|
35
|
-
Threaded.clear_options!
|
|
22
|
+
unless validating? && document.invalid?(:create)
|
|
23
|
+
result = document.run_callbacks(:save) do
|
|
24
|
+
document.run_callbacks(:create) do
|
|
25
|
+
yield(document)
|
|
26
|
+
document.new_record = false
|
|
27
|
+
true
|
|
36
28
|
end
|
|
37
29
|
end
|
|
30
|
+
document.post_persist unless result == false
|
|
38
31
|
end
|
|
32
|
+
document
|
|
39
33
|
end
|
|
40
34
|
end
|
|
41
35
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
4
|
|
|
5
5
|
# Contains common logic for modification operations.
|
|
6
6
|
module Modification
|
|
@@ -20,17 +20,13 @@ module Mongoid #:nodoc:
|
|
|
20
20
|
# @since 2.1.0
|
|
21
21
|
def prepare(&block)
|
|
22
22
|
return false if validating? && document.invalid?(:update)
|
|
23
|
-
document.run_callbacks(:save) do
|
|
23
|
+
result = document.run_callbacks(:save) do
|
|
24
24
|
document.run_callbacks(:update) do
|
|
25
25
|
yield(document); true
|
|
26
26
|
end
|
|
27
|
-
end.tap do |result|
|
|
28
|
-
unless result == false
|
|
29
|
-
document.reset_persisted_children
|
|
30
|
-
document.move_changes
|
|
31
|
-
Threaded.clear_options!
|
|
32
|
-
end
|
|
33
27
|
end
|
|
28
|
+
document.post_persist unless result == false
|
|
29
|
+
result
|
|
34
30
|
end
|
|
35
31
|
end
|
|
36
32
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Operations
|
|
5
|
-
module Embedded
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Operations
|
|
5
|
+
module Embedded
|
|
6
6
|
|
|
7
7
|
# Insert is a persistence command responsible for taking a document that
|
|
8
8
|
# has not been saved to the database and saving it. This specific class
|
|
@@ -28,10 +28,11 @@ module Mongoid #:nodoc:
|
|
|
28
28
|
# @return [ Document ] The document to be inserted.
|
|
29
29
|
def persist
|
|
30
30
|
prepare do
|
|
31
|
-
|
|
31
|
+
raise Errors::NoParent.new(document.class.name) unless parent
|
|
32
|
+
if parent.new_record?
|
|
32
33
|
parent.insert
|
|
33
34
|
else
|
|
34
|
-
collection.
|
|
35
|
+
collection.find(parent.atomic_selector).update(inserts)
|
|
35
36
|
end
|
|
36
37
|
end
|
|
37
38
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Operations
|
|
5
|
-
module Embedded
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Operations
|
|
5
|
+
module Embedded
|
|
6
6
|
|
|
7
7
|
# Remove is a persistence command responsible for deleting a document from
|
|
8
8
|
# the database.
|
|
@@ -29,7 +29,7 @@ module Mongoid #:nodoc:
|
|
|
29
29
|
prepare do |doc|
|
|
30
30
|
parent.remove_child(doc) if notifying_parent?
|
|
31
31
|
if parent.persisted?
|
|
32
|
-
collection.
|
|
32
|
+
collection.find(parent.atomic_selector).update(deletes)
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Operations
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Operations
|
|
5
5
|
|
|
6
6
|
# Insert is a persistence command responsible for taking a document that
|
|
7
7
|
# has not been saved to the database and saving it.
|
|
@@ -24,7 +24,7 @@ module Mongoid #:nodoc:
|
|
|
24
24
|
# @return [ Document ] The document to be inserted.
|
|
25
25
|
def persist
|
|
26
26
|
prepare do |doc|
|
|
27
|
-
collection.insert(doc.as_document
|
|
27
|
+
collection.insert(doc.as_document)
|
|
28
28
|
IdentityMap.set(doc)
|
|
29
29
|
end
|
|
30
30
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Operations
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Operations
|
|
5
5
|
|
|
6
6
|
# Remove is a persistence command responsible for deleting a document from
|
|
7
7
|
# the database.
|
|
@@ -24,7 +24,7 @@ module Mongoid #:nodoc:
|
|
|
24
24
|
# @return [ true ] Always true.
|
|
25
25
|
def persist
|
|
26
26
|
prepare do |doc|
|
|
27
|
-
collection.
|
|
27
|
+
collection.find({ _id: doc.id }).remove
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
end
|