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
data/lib/mongoid/identity_map.rb
CHANGED
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
|
|
4
4
|
# Defines behaviour for the identity map in Mongoid.
|
|
5
5
|
class IdentityMap < Hash
|
|
6
6
|
|
|
7
|
+
# Clear out the loaded documents for the provided selector.
|
|
8
|
+
#
|
|
9
|
+
# @example Clear out the documents.
|
|
10
|
+
# map.clear_many(Post, { person_id: person.id })
|
|
11
|
+
#
|
|
12
|
+
# @param [ Class ] klass The class of the relation.
|
|
13
|
+
# @param [ Hash ] selector The selector.
|
|
14
|
+
#
|
|
15
|
+
# @return [ Array ] An empty array.
|
|
16
|
+
#
|
|
17
|
+
# @since 2.4.10
|
|
18
|
+
def clear_many(klass, selector)
|
|
19
|
+
documents = documents_for(klass)[selector]
|
|
20
|
+
documents.clear if documents
|
|
21
|
+
end
|
|
22
|
+
|
|
7
23
|
# Get a document from the identity map by its id.
|
|
8
24
|
#
|
|
9
25
|
# @example Get the document from the map.
|
|
@@ -16,8 +32,16 @@ module Mongoid #:nodoc:
|
|
|
16
32
|
#
|
|
17
33
|
# @since 2.1.0
|
|
18
34
|
def get(klass, identifier)
|
|
19
|
-
|
|
20
|
-
|
|
35
|
+
if Mongoid.using_identity_map? && klass
|
|
36
|
+
if identifier.is_a?(::Array)
|
|
37
|
+
documents = documents_for(klass)
|
|
38
|
+
identifier.map do |id|
|
|
39
|
+
documents[id] || (return nil)
|
|
40
|
+
end
|
|
41
|
+
else
|
|
42
|
+
documents_for(klass)[identifier]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
21
45
|
end
|
|
22
46
|
|
|
23
47
|
# Remove the document from the identity map.
|
|
@@ -31,8 +55,9 @@ module Mongoid #:nodoc:
|
|
|
31
55
|
#
|
|
32
56
|
# @since 2.1.0
|
|
33
57
|
def remove(document)
|
|
34
|
-
|
|
35
|
-
|
|
58
|
+
if Mongoid.using_identity_map? && document && document.id
|
|
59
|
+
documents_for(document.class).delete(document.id)
|
|
60
|
+
end
|
|
36
61
|
end
|
|
37
62
|
|
|
38
63
|
# Puts a document in the identity map, accessed by it's id.
|
|
@@ -46,8 +71,9 @@ module Mongoid #:nodoc:
|
|
|
46
71
|
#
|
|
47
72
|
# @since 2.1.0
|
|
48
73
|
def set(document)
|
|
49
|
-
|
|
50
|
-
|
|
74
|
+
if Mongoid.using_identity_map? && document && document.id
|
|
75
|
+
documents_for(document.class)[document.id] = document
|
|
76
|
+
end
|
|
51
77
|
end
|
|
52
78
|
|
|
53
79
|
# Set a document in the identity map for the provided selector.
|
|
@@ -93,8 +119,9 @@ module Mongoid #:nodoc:
|
|
|
93
119
|
#
|
|
94
120
|
# @since 2.1.0
|
|
95
121
|
def documents_for(klass)
|
|
96
|
-
|
|
97
|
-
|
|
122
|
+
if klass
|
|
123
|
+
self[klass.collection_name] ||= {}
|
|
124
|
+
end
|
|
98
125
|
end
|
|
99
126
|
|
|
100
127
|
class << self
|
|
@@ -110,11 +137,11 @@ module Mongoid #:nodoc:
|
|
|
110
137
|
# IdentityMap.set(document)
|
|
111
138
|
#
|
|
112
139
|
# @since 2.1.0
|
|
113
|
-
delegate
|
|
140
|
+
delegate(*(
|
|
114
141
|
Hash.public_instance_methods(false) +
|
|
115
142
|
IdentityMap.public_instance_methods(false) <<
|
|
116
|
-
{ :
|
|
117
|
-
)
|
|
143
|
+
{ to: :"Mongoid::Threaded.identity_map" }
|
|
144
|
+
))
|
|
118
145
|
end
|
|
119
146
|
end
|
|
120
147
|
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Indexes
|
|
4
|
+
module Validators
|
|
5
|
+
|
|
6
|
+
# Validates the options passed to the index macro.
|
|
7
|
+
module Options
|
|
8
|
+
extend self
|
|
9
|
+
|
|
10
|
+
VALID_OPTIONS = [ :background, :drop_dups, :name, :sparse, :unique ]
|
|
11
|
+
VALID_TYPES = [ 1, -1, "2d" ]
|
|
12
|
+
|
|
13
|
+
# Validate the index specification.
|
|
14
|
+
#
|
|
15
|
+
# @example Validate the index spec.
|
|
16
|
+
# Options.validate(Band, name: 1)
|
|
17
|
+
#
|
|
18
|
+
# @param [ Class ] klass The model class.
|
|
19
|
+
# @param [ Hash ] spec The index specification.
|
|
20
|
+
# @param [ Hash ] options The index options.
|
|
21
|
+
#
|
|
22
|
+
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
23
|
+
#
|
|
24
|
+
# @since 3.0.0
|
|
25
|
+
def validate(klass, spec, options)
|
|
26
|
+
validate_spec(klass, spec, options)
|
|
27
|
+
validate_options(klass, spec, options)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
# Validates the options of the index spec.
|
|
33
|
+
#
|
|
34
|
+
# @api private
|
|
35
|
+
#
|
|
36
|
+
# @example Validate the options.
|
|
37
|
+
# Options.validate_options(Band, name: 1)
|
|
38
|
+
#
|
|
39
|
+
# @param [ Class ] klass The model class.
|
|
40
|
+
# @param [ Hash ] spec The index specification.
|
|
41
|
+
# @param [ Hash ] options The index options.
|
|
42
|
+
#
|
|
43
|
+
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
44
|
+
#
|
|
45
|
+
# @since 3.0.0
|
|
46
|
+
def validate_options(klass, spec, options)
|
|
47
|
+
options.each_pair do |name, value|
|
|
48
|
+
unless VALID_OPTIONS.include?(name)
|
|
49
|
+
raise Errors::InvalidIndex.new(klass, spec, options)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Validates the index spec.
|
|
55
|
+
#
|
|
56
|
+
# @api private
|
|
57
|
+
#
|
|
58
|
+
# @example Validate the spec.
|
|
59
|
+
# Options.validate_spec(Band, name: 1)
|
|
60
|
+
#
|
|
61
|
+
# @param [ Class ] klass The model class.
|
|
62
|
+
# @param [ Hash ] spec The index specification.
|
|
63
|
+
# @param [ Hash ] options The index options.
|
|
64
|
+
#
|
|
65
|
+
# @raise [ Errors::InvalidIndex ] If validation failed.
|
|
66
|
+
#
|
|
67
|
+
# @since 3.0.0
|
|
68
|
+
def validate_spec(klass, spec, options)
|
|
69
|
+
raise Errors::InvalidIndex.new(klass, spec, options) if !spec.is_a?(::Hash)
|
|
70
|
+
spec.each_pair do |name, value|
|
|
71
|
+
next if name == :options
|
|
72
|
+
unless VALID_TYPES.include?(value)
|
|
73
|
+
raise Errors::InvalidIndex.new(klass, spec, options)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
data/lib/mongoid/indexes.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
require "mongoid/indexes/validators/options"
|
|
3
|
+
|
|
4
|
+
module Mongoid
|
|
5
|
+
module Indexes
|
|
4
6
|
extend ActiveSupport::Concern
|
|
5
7
|
|
|
6
8
|
included do
|
|
@@ -8,18 +10,37 @@ module Mongoid #:nodoc
|
|
|
8
10
|
self.index_options = {}
|
|
9
11
|
end
|
|
10
12
|
|
|
11
|
-
module ClassMethods
|
|
13
|
+
module ClassMethods
|
|
12
14
|
|
|
13
15
|
# Send the actual index creation comments to the MongoDB driver
|
|
14
16
|
#
|
|
15
17
|
# @example Create the indexes for the class.
|
|
16
18
|
# Person.create_indexes
|
|
19
|
+
#
|
|
20
|
+
# @return [ true ] If the operation succeeded.
|
|
21
|
+
#
|
|
22
|
+
# @since 1.0.0
|
|
17
23
|
def create_indexes
|
|
18
24
|
return unless index_options
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
index_options.each_pair do |spec, options|
|
|
26
|
+
collection.indexes.create(spec, options)
|
|
27
|
+
end and true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Send the actual index removal comments to the MongoDB driver,
|
|
31
|
+
# but lets _id untouched.
|
|
32
|
+
#
|
|
33
|
+
# @example Remove the indexes for the class.
|
|
34
|
+
# Person.remove_indexes
|
|
35
|
+
#
|
|
36
|
+
# @return [ true ] If the operation succeeded.
|
|
37
|
+
#
|
|
38
|
+
# @since 3.0.0
|
|
39
|
+
def remove_indexes
|
|
40
|
+
collection.indexes.each do |spec|
|
|
41
|
+
next if spec["name"] == "_id_"
|
|
42
|
+
collection.indexes.drop(spec["key"])
|
|
43
|
+
end and true
|
|
23
44
|
end
|
|
24
45
|
|
|
25
46
|
# Add the default indexes to the root document if they do not already
|
|
@@ -27,11 +48,15 @@ module Mongoid #:nodoc
|
|
|
27
48
|
#
|
|
28
49
|
# @example Add Mongoid internal indexes.
|
|
29
50
|
# Person.add_indexes
|
|
51
|
+
#
|
|
52
|
+
# @return [ true ] If the operation succeeded.
|
|
53
|
+
#
|
|
54
|
+
# @since 1.0.0
|
|
30
55
|
def add_indexes
|
|
31
|
-
if hereditary? && !index_options[:
|
|
32
|
-
|
|
56
|
+
if hereditary? && !index_options[{ _type: 1 }]
|
|
57
|
+
index({ _type: 1 }, { unique: false, background: true })
|
|
33
58
|
end
|
|
34
|
-
|
|
59
|
+
true
|
|
35
60
|
end
|
|
36
61
|
|
|
37
62
|
# Adds an index on the field specified. Options can be :unique => true or
|
|
@@ -40,14 +65,40 @@ module Mongoid #:nodoc
|
|
|
40
65
|
# @example Create a basic index.
|
|
41
66
|
# class Person
|
|
42
67
|
# include Mongoid::Document
|
|
43
|
-
# field :name, :
|
|
44
|
-
|
|
68
|
+
# field :name, type: String
|
|
69
|
+
|
|
70
|
+
# index({ name: 1 }, { background: true })
|
|
71
|
+
# end
|
|
45
72
|
#
|
|
46
73
|
# @param [ Symbol ] name The name of the field.
|
|
47
74
|
# @param [ Hash ] options The index options.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
75
|
+
#
|
|
76
|
+
# @return [ Hash ] The index options.
|
|
77
|
+
#
|
|
78
|
+
# @since 1.0.0
|
|
79
|
+
def index(spec, options = nil)
|
|
80
|
+
Validators::Options.validate(self, spec, options || {})
|
|
81
|
+
index_options[spec] = normalize_index_options(options)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
private
|
|
85
|
+
|
|
86
|
+
# Normalize the index options, if any are provided.
|
|
87
|
+
#
|
|
88
|
+
# @api private
|
|
89
|
+
#
|
|
90
|
+
# @example Normalize the index options.
|
|
91
|
+
# Model.normalize_index_options(drop_dups: true)
|
|
92
|
+
#
|
|
93
|
+
# @param [ Hash ] options The index options.
|
|
94
|
+
#
|
|
95
|
+
# @return [ Hash ] The normalized options.
|
|
96
|
+
#
|
|
97
|
+
# @since 3.0.0
|
|
98
|
+
def normalize_index_options(options)
|
|
99
|
+
opts = options || {}
|
|
100
|
+
opts[:dropDups] = opts.delete(:drop_dups) if opts.has_key?(:drop_dups)
|
|
101
|
+
opts
|
|
51
102
|
end
|
|
52
103
|
end
|
|
53
104
|
end
|
data/lib/mongoid/inspection.rb
CHANGED
data/lib/mongoid/javascript.rb
CHANGED
data/lib/mongoid/json.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
# This module is for hooking in to +ActiveModel+s serialization to let
|
|
4
4
|
# configuring the ability to include the root in JSON happen from the Mongoid
|
|
5
5
|
# config.
|
|
@@ -10,7 +10,7 @@ module Mongoid #:nodoc:
|
|
|
10
10
|
# similar to +ActiveRecord+.
|
|
11
11
|
included do
|
|
12
12
|
undef_method :include_root_in_json
|
|
13
|
-
delegate :include_root_in_json, :
|
|
13
|
+
delegate :include_root_in_json, to: ::Mongoid
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
|
|
4
|
+
# Contains logging behaviour.
|
|
5
|
+
module Loggable
|
|
6
|
+
|
|
7
|
+
# Get the logger.
|
|
8
|
+
#
|
|
9
|
+
# @note Will try to grab Rails' logger first before creating a new logger
|
|
10
|
+
# with stdout.
|
|
11
|
+
#
|
|
12
|
+
# @example Get the logger.
|
|
13
|
+
# Loggable.logger
|
|
14
|
+
#
|
|
15
|
+
# @return [ Logger ] The logger.
|
|
16
|
+
#
|
|
17
|
+
# @since 3.0.0
|
|
18
|
+
def logger
|
|
19
|
+
return @logger if defined?(@logger)
|
|
20
|
+
@logger = rails_logger || default_logger
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Set the logger.
|
|
24
|
+
#
|
|
25
|
+
# @example Set the logger.
|
|
26
|
+
# Loggable.logger = Logger.new($stdout)
|
|
27
|
+
#
|
|
28
|
+
# @param [ Logger ] The logger to set.
|
|
29
|
+
#
|
|
30
|
+
# @return [ Logger ] The new logger.
|
|
31
|
+
#
|
|
32
|
+
# @since 3.0.0
|
|
33
|
+
def logger=(logger)
|
|
34
|
+
@logger = logger
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
# Gets the default Mongoid logger - stdout.
|
|
40
|
+
#
|
|
41
|
+
# @api private
|
|
42
|
+
#
|
|
43
|
+
# @example Get the default logger.
|
|
44
|
+
# Loggable.default_logger
|
|
45
|
+
#
|
|
46
|
+
# @return [ Logger ] The default logger.
|
|
47
|
+
#
|
|
48
|
+
# @since 3.0.0
|
|
49
|
+
def default_logger
|
|
50
|
+
logger = Logger.new($stdout)
|
|
51
|
+
logger.level = Logger::INFO
|
|
52
|
+
logger
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Get the Rails logger if it's defined.
|
|
56
|
+
#
|
|
57
|
+
# @api private
|
|
58
|
+
#
|
|
59
|
+
# @example Get Rails' logger.
|
|
60
|
+
# Loggable.rails_logger
|
|
61
|
+
#
|
|
62
|
+
# @return [ Logger ] The Rails logger.
|
|
63
|
+
#
|
|
64
|
+
# @since 3.0.0
|
|
65
|
+
def rails_logger
|
|
66
|
+
defined?(::Rails) && ::Rails.respond_to?(:logger) && ::Rails.logger
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
data/lib/mongoid/matchers/all.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Matchers
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matchers
|
|
4
4
|
|
|
5
5
|
# Checks that all values match.
|
|
6
6
|
class All < Default
|
|
@@ -14,13 +14,12 @@ module Mongoid #:nodoc:
|
|
|
14
14
|
#
|
|
15
15
|
# @return [ true, false ] If the values match.
|
|
16
16
|
def matches?(value)
|
|
17
|
+
first = first(value)
|
|
18
|
+
return false if first.is_a?(Array) && first.empty?
|
|
19
|
+
|
|
17
20
|
attribute_array = Array.wrap(@attribute)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
attribute_array.any? { |_attribute| _attribute =~ e }
|
|
21
|
-
else
|
|
22
|
-
attribute_array.include?(e)
|
|
23
|
-
end
|
|
21
|
+
first.all? do |e|
|
|
22
|
+
attribute_array.any? { |_attribute| e === _attribute }
|
|
24
23
|
end
|
|
25
24
|
end
|
|
26
25
|
end
|
data/lib/mongoid/matchers/and.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Matchers
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matchers
|
|
4
4
|
|
|
5
5
|
# Defines behavior for handling $or expressions in embedded documents.
|
|
6
6
|
class And < Default
|
|
@@ -8,7 +8,7 @@ module Mongoid #:nodoc:
|
|
|
8
8
|
# Does the supplied query match the attribute?
|
|
9
9
|
#
|
|
10
10
|
# @example Does this match?
|
|
11
|
-
# matcher.matches?(
|
|
11
|
+
# matcher.matches?([ { field => value } ])
|
|
12
12
|
#
|
|
13
13
|
# @param [ Array ] conditions The or expression.
|
|
14
14
|
#
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Matchers
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matchers
|
|
4
4
|
|
|
5
5
|
# Contains all the default behavior for checking for matching documents
|
|
6
6
|
# given MongoDB expressions.
|
|
@@ -32,7 +32,7 @@ module Mongoid #:nodoc:
|
|
|
32
32
|
#
|
|
33
33
|
# @since 1.0.0
|
|
34
34
|
def matches?(value)
|
|
35
|
-
attribute.is_a?(Array) && !value.is_a?(Array) ? attribute.
|
|
35
|
+
attribute.is_a?(Array) && !value.is_a?(Array) ? attribute.any? { |_attribute| value === _attribute } : value === attribute
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
protected
|
|
@@ -63,7 +63,9 @@ module Mongoid #:nodoc:
|
|
|
63
63
|
#
|
|
64
64
|
# @since 1.0.0
|
|
65
65
|
def determine(value, operator)
|
|
66
|
-
attribute
|
|
66
|
+
attribute.__array__.any? {|attr|
|
|
67
|
+
attr ? attr.send(operator, first(value)) : false
|
|
68
|
+
}
|
|
67
69
|
end
|
|
68
70
|
end
|
|
69
71
|
end
|
data/lib/mongoid/matchers/gt.rb
CHANGED
data/lib/mongoid/matchers/gte.rb
CHANGED
data/lib/mongoid/matchers/in.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Matchers
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Matchers
|
|
4
4
|
|
|
5
5
|
# Performs matching for any value in an array.
|
|
6
6
|
class In < Default
|
|
@@ -16,11 +16,7 @@ module Mongoid #:nodoc:
|
|
|
16
16
|
def matches?(value)
|
|
17
17
|
attribute_array = Array.wrap(@attribute)
|
|
18
18
|
value.values.first.any? do |e|
|
|
19
|
-
|
|
20
|
-
attribute_array.any? { |_attribute| _attribute =~ e }
|
|
21
|
-
else
|
|
22
|
-
attribute_array.include?(e)
|
|
23
|
-
end
|
|
19
|
+
attribute_array.any? { |_attribute| e === _attribute }
|
|
24
20
|
end
|
|
25
21
|
end
|
|
26
22
|
end
|
data/lib/mongoid/matchers/lt.rb
CHANGED
data/lib/mongoid/matchers/lte.rb
CHANGED
data/lib/mongoid/matchers/ne.rb
CHANGED
data/lib/mongoid/matchers/nin.rb
CHANGED
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,14 +41,14 @@ 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 = {}
|
|
@@ -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
|