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
data/lib/mongoid/matchers/or.rb
CHANGED
|
@@ -13,8 +13,8 @@ require "mongoid/matchers/nin"
|
|
|
13
13
|
require "mongoid/matchers/or"
|
|
14
14
|
require "mongoid/matchers/size"
|
|
15
15
|
|
|
16
|
-
module Mongoid
|
|
17
|
-
module Matchers
|
|
16
|
+
module Mongoid
|
|
17
|
+
module Matchers
|
|
18
18
|
|
|
19
19
|
# This module is responsible for returning the correct matcher given a
|
|
20
20
|
# MongoDB query expression.
|
|
@@ -81,7 +81,7 @@ module Mongoid #:nodoc:
|
|
|
81
81
|
# @since 2.2.1
|
|
82
82
|
def extract_attribute(document, key)
|
|
83
83
|
if (key_string = key.to_s) =~ /.+\..+/
|
|
84
|
-
key_string.split('.').inject(document.
|
|
84
|
+
key_string.split('.').inject(document.as_document) do |_attribs, _key|
|
|
85
85
|
if _attribs.is_a?(::Array)
|
|
86
86
|
_attribs.map { |doc| doc.try(:[], _key) }
|
|
87
87
|
else
|
data/lib/mongoid/matchers.rb
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
|
|
4
4
|
# Adds Rails' multi-parameter attribute support to Mongoid.
|
|
5
5
|
#
|
|
6
6
|
# @todo: Durran: This module needs an overhaul.
|
|
7
7
|
module MultiParameterAttributes
|
|
8
8
|
|
|
9
|
-
module Errors
|
|
9
|
+
module Errors
|
|
10
10
|
|
|
11
11
|
# Raised when an error occurred while doing a mass assignment to an
|
|
12
12
|
# attribute through the <tt>attributes=</tt> method. The exception
|
|
@@ -41,21 +41,21 @@ module Mongoid #:nodoc:
|
|
|
41
41
|
# put into the document's attributes.
|
|
42
42
|
#
|
|
43
43
|
# @example Process the attributes.
|
|
44
|
-
# person.
|
|
44
|
+
# person.process_attributes(:title => "sir", :age => 40)
|
|
45
45
|
#
|
|
46
46
|
# @param [ Hash ] attrs The attributes to set.
|
|
47
47
|
# @param [ Symbol ] role A role for scoped mass assignment.
|
|
48
48
|
# @param [ Boolean ] guard_protected_attributes False to skip mass assignment protection.
|
|
49
49
|
#
|
|
50
50
|
# @since 2.0.0.rc.7
|
|
51
|
-
def
|
|
51
|
+
def process_attributes(attrs = nil, role = :default, guard_protected_attributes = true)
|
|
52
52
|
if attrs
|
|
53
53
|
errors = []
|
|
54
54
|
attributes = {}
|
|
55
55
|
multi_parameter_attributes = {}
|
|
56
56
|
|
|
57
57
|
attrs.each_pair do |key, value|
|
|
58
|
-
if key =~
|
|
58
|
+
if key =~ /\A([^\(]+)\((\d+)([if])\)$/
|
|
59
59
|
key, index = $1, $2.to_i
|
|
60
60
|
(multi_parameter_attributes[key] ||= {})[index] = value.empty? ? nil : value.send("to_#{$3}")
|
|
61
61
|
else
|
|
@@ -66,7 +66,7 @@ module Mongoid #:nodoc:
|
|
|
66
66
|
multi_parameter_attributes.each_pair do |key, values|
|
|
67
67
|
begin
|
|
68
68
|
values = (values.keys.min..values.keys.max).map { |i| values[i] }
|
|
69
|
-
field = self.class.fields[key]
|
|
69
|
+
field = self.class.fields[aliased_fields[key] || key]
|
|
70
70
|
attributes[key] = instantiate_object(field, values)
|
|
71
71
|
rescue => e
|
|
72
72
|
errors << Errors::AttributeAssignmentError.new(
|
|
@@ -76,10 +76,8 @@ module Mongoid #:nodoc:
|
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
unless errors.empty?
|
|
79
|
-
raise(
|
|
80
|
-
Errors::MultiparameterAssignmentErrors.new(errors),
|
|
79
|
+
raise Errors::MultiparameterAssignmentErrors.new(errors),
|
|
81
80
|
"#{errors.size} error(s) on assignment of multiparameter attributes"
|
|
82
|
-
)
|
|
83
81
|
end
|
|
84
82
|
|
|
85
83
|
super attributes, role, guard_protected_attributes
|
|
@@ -95,9 +93,9 @@ module Mongoid #:nodoc:
|
|
|
95
93
|
values = values_with_empty_parameters.collect { |v| v.nil? ? 1 : v }
|
|
96
94
|
klass = field.type
|
|
97
95
|
if klass == DateTime || klass == Date || klass == Time
|
|
98
|
-
field.
|
|
96
|
+
field.mongoize(values)
|
|
99
97
|
elsif klass
|
|
100
|
-
klass.new
|
|
98
|
+
klass.new(*values)
|
|
101
99
|
else
|
|
102
100
|
values
|
|
103
101
|
end
|
|
@@ -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,8 +14,11 @@ 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
|
+
|
|
20
|
+
default_scope where(deleted_at: nil)
|
|
21
|
+
scope :deleted, ne(deleted_at: nil)
|
|
19
22
|
end
|
|
20
23
|
|
|
21
24
|
# Delete the paranoid +Document+ from the database completely. This will
|
|
@@ -56,11 +59,8 @@ module Mongoid #:nodoc:
|
|
|
56
59
|
# @since 1.0.0
|
|
57
60
|
def remove(options = {})
|
|
58
61
|
time = self.deleted_at = Time.now
|
|
59
|
-
paranoid_collection.
|
|
60
|
-
|
|
61
|
-
{ "$set" => { paranoid_field => time }},
|
|
62
|
-
Safety.merge_safety_options(options)
|
|
63
|
-
)
|
|
62
|
+
paranoid_collection.find(atomic_selector).
|
|
63
|
+
update({ "$set" => { paranoid_field => time }})
|
|
64
64
|
cascade!
|
|
65
65
|
@destroyed = true
|
|
66
66
|
IdentityMap.remove(self)
|
|
@@ -78,7 +78,7 @@ module Mongoid #:nodoc:
|
|
|
78
78
|
#
|
|
79
79
|
# @since 1.0.0
|
|
80
80
|
def destroyed?
|
|
81
|
-
@destroyed || !!deleted_at
|
|
81
|
+
(@destroyed ||= false) || !!deleted_at
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
# Restores a previously soft-deleted document. Handles this by removing the
|
|
@@ -91,10 +91,8 @@ module Mongoid #:nodoc:
|
|
|
91
91
|
#
|
|
92
92
|
# @since 1.0.0
|
|
93
93
|
def restore
|
|
94
|
-
paranoid_collection.
|
|
95
|
-
|
|
96
|
-
{ "$unset" => { paranoid_field => true }}
|
|
97
|
-
)
|
|
94
|
+
paranoid_collection.find(atomic_selector).
|
|
95
|
+
update({ "$unset" => { paranoid_field => true }})
|
|
98
96
|
attributes.delete("deleted_at")
|
|
99
97
|
end
|
|
100
98
|
|
|
@@ -123,37 +121,5 @@ module Mongoid #:nodoc:
|
|
|
123
121
|
def paranoid_field
|
|
124
122
|
embedded? ? "#{atomic_position}.deleted_at" : "deleted_at"
|
|
125
123
|
end
|
|
126
|
-
|
|
127
|
-
module ClassMethods #:nodoc:
|
|
128
|
-
|
|
129
|
-
# Override the default +Criteria+ accessor to only get existing
|
|
130
|
-
# documents. Passes all arguments up to +NamedScope.criteria+
|
|
131
|
-
#
|
|
132
|
-
# @example Override the criteria.
|
|
133
|
-
# Person.criteria
|
|
134
|
-
#
|
|
135
|
-
# @param [ Array ] args The arguments.
|
|
136
|
-
#
|
|
137
|
-
# @return [ Criteria ] The paranoid compliant criteria.
|
|
138
|
-
#
|
|
139
|
-
# @since 1.0.0
|
|
140
|
-
def criteria(embedded = false, scoped = true)
|
|
141
|
-
scoped ? super.where(:deleted_at => nil) : super
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
# Find deleted documents
|
|
145
|
-
#
|
|
146
|
-
# @example Find deleted documents.
|
|
147
|
-
# Person.deleted
|
|
148
|
-
# Company.first.employees.deleted
|
|
149
|
-
# Person.deleted.find("4c188dea7b17235a2a000001").first
|
|
150
|
-
#
|
|
151
|
-
# @return [ Criteria ] The deleted criteria.
|
|
152
|
-
#
|
|
153
|
-
# @since 1.0.0
|
|
154
|
-
def deleted
|
|
155
|
-
where(:deleted_at.ne => nil)
|
|
156
|
-
end
|
|
157
|
-
end
|
|
158
124
|
end
|
|
159
125
|
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 $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.new_record?
|
|
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.
|