mongoid 2.8.1 → 3.0.0.rc
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +802 -58
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +2 -8
- data/lib/config/locales/en.yml +441 -51
- data/lib/mongoid.rb +24 -39
- data/lib/mongoid/atomic.rb +16 -33
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- 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/root.rb +4 -5
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/callbacks.rb +90 -27
- data/lib/mongoid/collections/retry.rb +2 -3
- data/lib/mongoid/components.rb +11 -23
- data/lib/mongoid/config.rb +87 -233
- data/lib/mongoid/config/environment.rb +5 -6
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/contextual.rb +50 -0
- 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/copyable.rb +3 -34
- data/lib/mongoid/criteria.rb +436 -250
- 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 +69 -50
- data/lib/mongoid/errors.rb +22 -1
- 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/extensions.rb +28 -76
- 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/factory.rb +1 -1
- data/lib/mongoid/fields.rb +129 -194
- 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.rb +2 -0
- data/lib/mongoid/fields/validators/macro.rb +83 -0
- data/lib/mongoid/finders.rb +42 -43
- data/lib/mongoid/hierarchy.rb +25 -14
- data/lib/mongoid/identity_map.rb +31 -19
- data/lib/mongoid/indexes.rb +66 -15
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- 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.rb +1 -1
- 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/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.rb +43 -39
- data/lib/mongoid/persistence/atomic.rb +2 -2
- 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/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.rb +6 -19
- 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/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations.rb +4 -6
- 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.rb +19 -16
- 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/cascading.rb +6 -4
- 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/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 -161
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -61
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +200 -45
- data/lib/mongoid/relations/nested_builder.rb +3 -5
- 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 +60 -31
- data/lib/mongoid/relations/referenced/in.rb +40 -15
- data/lib/mongoid/relations/referenced/many.rb +117 -132
- 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/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +329 -0
- data/lib/mongoid/serialization.rb +8 -27
- data/lib/mongoid/sessions.rb +359 -0
- data/lib/mongoid/sessions/factory.rb +106 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded.rb +167 -59
- data/lib/mongoid/threaded/lifecycle.rb +21 -22
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/timestamps.rb +1 -1
- 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/unit_of_work.rb +61 -0
- data/lib/mongoid/validations.rb +27 -19
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +31 -5
- data/lib/mongoid/validations/uniqueness.rb +9 -12
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- 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 +110 -137
- checksums.yaml +0 -7
- 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.rb +0 -120
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/mongo.rb +0 -487
- 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 -110
- 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 -77
- 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 -36
- data/lib/mongoid/named_scope.rb +0 -166
- data/lib/mongoid/relations/embedded/atomic.rb +0 -89
- 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/referenced/batch.rb +0 -73
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
data/lib/mongoid/document.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
2
|
+
module Mongoid
|
3
3
|
|
4
4
|
# This is the base module for all domain objects that need to be persisted to
|
5
5
|
# the database as documents.
|
@@ -17,6 +17,8 @@ module Mongoid #:nodoc:
|
|
17
17
|
# @param [ Document ] other The document to compare with.
|
18
18
|
#
|
19
19
|
# @return [ Integer ] -1, 0, 1.
|
20
|
+
#
|
21
|
+
# @since 1.0.0
|
20
22
|
def <=>(other)
|
21
23
|
attributes["_id"].to_s <=> other.attributes["_id"].to_s
|
22
24
|
end
|
@@ -30,6 +32,8 @@ module Mongoid #:nodoc:
|
|
30
32
|
# @param [ Document, Object ] other The other object to compare with.
|
31
33
|
#
|
32
34
|
# @return [ true, false ] True if the ids are equal, false if not.
|
35
|
+
#
|
36
|
+
# @since 1.0.0
|
33
37
|
def ==(other)
|
34
38
|
self.class == other.class &&
|
35
39
|
attributes["_id"] == other.attributes["_id"]
|
@@ -43,12 +47,10 @@ module Mongoid #:nodoc:
|
|
43
47
|
# @param [ Document, Object ] other The other object to compare with.
|
44
48
|
#
|
45
49
|
# @return [ true, false ] True if the classes are equal, false if not.
|
50
|
+
#
|
51
|
+
# @since 1.0.0
|
46
52
|
def ===(other)
|
47
|
-
|
48
|
-
self.class === other
|
49
|
-
else
|
50
|
-
id == other.id
|
51
|
-
end
|
53
|
+
other.class == Class ? self.class === other : self == other
|
52
54
|
end
|
53
55
|
|
54
56
|
# Delegates to ==. Used when needing checks in hashes.
|
@@ -59,6 +61,8 @@ module Mongoid #:nodoc:
|
|
59
61
|
# @param [ Document, Object ] other The object to check against.
|
60
62
|
#
|
61
63
|
# @return [ true, false ] True if equal, false if not.
|
64
|
+
#
|
65
|
+
# @since 1.0.0
|
62
66
|
def eql?(other)
|
63
67
|
self == (other)
|
64
68
|
end
|
@@ -72,7 +76,7 @@ module Mongoid #:nodoc:
|
|
72
76
|
#
|
73
77
|
# @since 2.0.0
|
74
78
|
def freeze
|
75
|
-
|
79
|
+
as_document.freeze and self
|
76
80
|
end
|
77
81
|
|
78
82
|
# Checks if the document is frozen
|
@@ -87,8 +91,8 @@ module Mongoid #:nodoc:
|
|
87
91
|
attributes.frozen?
|
88
92
|
end
|
89
93
|
|
90
|
-
# Delegates to
|
91
|
-
# work with something like:
|
94
|
+
# Delegates to identity in order to allow two records of the same identity
|
95
|
+
# to work with something like:
|
92
96
|
#
|
93
97
|
# [ Person.find(1), Person.find(2), Person.find(3) ] &
|
94
98
|
# [ Person.find(1), Person.find(4) ] # => [ Person.find(1) ]
|
@@ -96,19 +100,25 @@ module Mongoid #:nodoc:
|
|
96
100
|
# @example Get the hash.
|
97
101
|
# document.hash
|
98
102
|
#
|
99
|
-
# @return [ Integer ] The hash of the document's
|
103
|
+
# @return [ Integer ] The hash of the document's identity.
|
104
|
+
#
|
105
|
+
# @since 1.0.0
|
100
106
|
def hash
|
101
|
-
|
107
|
+
identity.hash
|
102
108
|
end
|
103
109
|
|
104
|
-
#
|
110
|
+
# A Document's is identified absolutely by it's class and database id:
|
111
|
+
#
|
112
|
+
# Person.first.identity #=> [Person, BSON::ObjectId('4f775130a04745933a000003')]
|
113
|
+
#
|
114
|
+
# @example Get the identity
|
115
|
+
# document.identity
|
105
116
|
#
|
106
|
-
# @
|
107
|
-
# person.identify
|
117
|
+
# @return [ Array ] An array containing [document.class, document.id]
|
108
118
|
#
|
109
|
-
# @
|
110
|
-
def
|
111
|
-
|
119
|
+
# @since 3.0.0
|
120
|
+
def identity
|
121
|
+
[ self.class, self.id ]
|
112
122
|
end
|
113
123
|
|
114
124
|
# Instantiate a new +Document+, setting the Document's attributes if
|
@@ -126,19 +136,19 @@ module Mongoid #:nodoc:
|
|
126
136
|
# :as and :without_protection
|
127
137
|
#
|
128
138
|
# @return [ Document ] A new document.
|
139
|
+
#
|
140
|
+
# @since 1.0.0
|
129
141
|
def initialize(attrs = nil, options = nil)
|
130
142
|
_building do
|
131
143
|
@new_record = true
|
132
144
|
@attributes ||= {}
|
133
145
|
options ||= {}
|
134
|
-
|
135
|
-
|
136
|
-
process(attrs, options[:as] || :default, !options[:without_protection]) do
|
137
|
-
identify unless using_object_ids?
|
146
|
+
apply_pre_processed_defaults
|
147
|
+
process_attributes(attrs, options[:as] || :default, !options[:without_protection]) do
|
138
148
|
yield(self) if block_given?
|
139
149
|
end
|
140
|
-
|
141
|
-
run_callbacks(:initialize)
|
150
|
+
apply_post_processed_defaults
|
151
|
+
run_callbacks(:initialize) if _initialize_callbacks.any?
|
142
152
|
end
|
143
153
|
end
|
144
154
|
|
@@ -151,11 +161,7 @@ module Mongoid #:nodoc:
|
|
151
161
|
#
|
152
162
|
# @since 2.4.0
|
153
163
|
def to_key
|
154
|
-
|
155
|
-
[ id ]
|
156
|
-
else
|
157
|
-
persisted? ? [ id ] : nil
|
158
|
-
end
|
164
|
+
(persisted? || destroyed?) ? [ id ] : nil
|
159
165
|
end
|
160
166
|
|
161
167
|
# Return an array with this +Document+ only in it.
|
@@ -164,6 +170,8 @@ module Mongoid #:nodoc:
|
|
164
170
|
# document.to_a
|
165
171
|
#
|
166
172
|
# @return [ Array<Document> ] An array with the document as its only item.
|
173
|
+
#
|
174
|
+
# @since 1.0.0
|
167
175
|
def to_a
|
168
176
|
[ self ]
|
169
177
|
end
|
@@ -176,16 +184,17 @@ module Mongoid #:nodoc:
|
|
176
184
|
# person.as_document
|
177
185
|
#
|
178
186
|
# @return [ Hash ] A hash of all attributes in the hierarchy.
|
187
|
+
#
|
188
|
+
# @since 1.0.0
|
179
189
|
def as_document
|
180
|
-
attributes
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
attrs[name] = relation.as_document unless relation.blank?
|
186
|
-
end
|
190
|
+
return attributes if frozen?
|
191
|
+
embedded_relations.each_pair do |name, meta|
|
192
|
+
without_autobuild do
|
193
|
+
relation = send(name)
|
194
|
+
attributes[meta.store_as] = relation.as_document unless relation.blank?
|
187
195
|
end
|
188
196
|
end
|
197
|
+
attributes
|
189
198
|
end
|
190
199
|
|
191
200
|
# Returns an instance of the specified class with the attributes
|
@@ -199,16 +208,18 @@ module Mongoid #:nodoc:
|
|
199
208
|
# @param [ Class ] klass The class to become.
|
200
209
|
#
|
201
210
|
# @return [ Document ] An instance of the specified class.
|
211
|
+
#
|
212
|
+
# @since 2.0.0
|
202
213
|
def becomes(klass)
|
203
214
|
unless klass.include?(Mongoid::Document)
|
204
215
|
raise ArgumentError, "A class which includes Mongoid::Document is expected"
|
205
216
|
end
|
206
|
-
klass.instantiate(frozen? ? attributes.dup : attributes)
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
217
|
+
became = klass.instantiate(frozen? ? attributes.dup : attributes)
|
218
|
+
became.instance_variable_set(:@errors, errors)
|
219
|
+
became.instance_variable_set(:@new_record, new_record?)
|
220
|
+
became.instance_variable_set(:@destroyed, destroyed?)
|
221
|
+
became._type = klass.to_s
|
222
|
+
became
|
212
223
|
end
|
213
224
|
|
214
225
|
# Print out the cache key. This will append different values on the
|
@@ -228,7 +239,7 @@ module Mongoid #:nodoc:
|
|
228
239
|
# @since 2.4.0
|
229
240
|
def cache_key
|
230
241
|
return "#{model_key}/new" if new_record?
|
231
|
-
return "#{model_key}/#{id}-#{updated_at.utc.to_s(:number)}"
|
242
|
+
return "#{model_key}/#{id}-#{updated_at.utc.to_s(:number)}" if updated_at
|
232
243
|
"#{model_key}/#{id}"
|
233
244
|
end
|
234
245
|
|
@@ -267,7 +278,7 @@ module Mongoid #:nodoc:
|
|
267
278
|
nil
|
268
279
|
end
|
269
280
|
|
270
|
-
module ClassMethods
|
281
|
+
module ClassMethods
|
271
282
|
|
272
283
|
# Performs class equality checking.
|
273
284
|
#
|
@@ -292,14 +303,16 @@ module Mongoid #:nodoc:
|
|
292
303
|
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
293
304
|
#
|
294
305
|
# @return [ Document ] A new document.
|
306
|
+
#
|
307
|
+
# @since 1.0.0
|
295
308
|
def instantiate(attrs = nil)
|
296
309
|
attributes = attrs || {}
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
310
|
+
doc = allocate
|
311
|
+
doc.instance_variable_set(:@attributes, attributes)
|
312
|
+
doc.apply_defaults
|
313
|
+
IdentityMap.set(doc) unless _loading_revision?
|
314
|
+
doc.run_callbacks(:initialize) if doc._initialize_callbacks.any?
|
315
|
+
doc
|
303
316
|
end
|
304
317
|
|
305
318
|
# Returns all types to query for when using this class as the base.
|
@@ -308,13 +321,17 @@ module Mongoid #:nodoc:
|
|
308
321
|
# document._types
|
309
322
|
#
|
310
323
|
# @return [ Array<Class> ] All subclasses of the current document.
|
324
|
+
#
|
325
|
+
# @since 1.0.0
|
311
326
|
def _types
|
312
|
-
@_type ||=
|
327
|
+
@_type ||= (descendants + [ self ]).uniq.map { |t| t.to_s }
|
313
328
|
end
|
314
329
|
|
315
330
|
# Set the i18n scope to overwrite ActiveModel.
|
316
331
|
#
|
317
332
|
# @return [ Symbol ] :mongoid
|
333
|
+
#
|
334
|
+
# @since 2.0.0
|
318
335
|
def i18n_scope
|
319
336
|
:mongoid
|
320
337
|
end
|
@@ -333,3 +350,5 @@ module Mongoid #:nodoc:
|
|
333
350
|
end
|
334
351
|
end
|
335
352
|
end
|
353
|
+
|
354
|
+
ActiveSupport.run_load_hooks(:mongoid, Mongoid::Document)
|
data/lib/mongoid/errors.rb
CHANGED
@@ -1,19 +1,40 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "mongoid/errors/mongoid_error"
|
3
|
+
require "mongoid/errors/ambiguous_relationship"
|
3
4
|
require "mongoid/errors/callback"
|
4
5
|
require "mongoid/errors/document_not_found"
|
5
6
|
require "mongoid/errors/eager_load"
|
6
7
|
require "mongoid/errors/invalid_collection"
|
8
|
+
require "mongoid/errors/invalid_config_option"
|
7
9
|
require "mongoid/errors/invalid_database"
|
8
10
|
require "mongoid/errors/invalid_field"
|
11
|
+
require "mongoid/errors/invalid_field_option"
|
9
12
|
require "mongoid/errors/invalid_find"
|
13
|
+
require "mongoid/errors/invalid_index"
|
10
14
|
require "mongoid/errors/invalid_options"
|
15
|
+
require "mongoid/errors/invalid_scope"
|
16
|
+
require "mongoid/errors/invalid_set_polymorphic_relation"
|
17
|
+
require "mongoid/errors/invalid_storage_options"
|
11
18
|
require "mongoid/errors/invalid_time"
|
12
|
-
require "mongoid/errors/
|
19
|
+
require "mongoid/errors/inverse_not_found"
|
13
20
|
require "mongoid/errors/mixed_relations"
|
21
|
+
require "mongoid/errors/mixed_session_configuration"
|
22
|
+
require "mongoid/errors/nested_attributes_metadata_not_found"
|
23
|
+
require "mongoid/errors/no_default_session"
|
14
24
|
require "mongoid/errors/no_environment"
|
25
|
+
require "mongoid/errors/no_map_reduce_output"
|
26
|
+
require "mongoid/errors/no_parent"
|
27
|
+
require "mongoid/errors/no_session_config"
|
28
|
+
require "mongoid/errors/no_sessions_config"
|
29
|
+
require "mongoid/errors/no_session_database"
|
30
|
+
require "mongoid/errors/no_session_hosts"
|
31
|
+
require "mongoid/errors/readonly_attribute"
|
15
32
|
require "mongoid/errors/scope_overwrite"
|
16
33
|
require "mongoid/errors/too_many_nested_attribute_records"
|
34
|
+
require "mongoid/errors/unknown_attribute"
|
17
35
|
require "mongoid/errors/unsaved_document"
|
36
|
+
require "mongoid/errors/unsupported_javascript"
|
18
37
|
require "mongoid/errors/unsupported_version"
|
19
38
|
require "mongoid/errors/validations"
|
39
|
+
require "mongoid/errors/versioning_not_on_root"
|
40
|
+
require "mongoid/errors/delete_restriction"
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
# This error is raised in case of an ambigous relationship.
|
6
|
+
#
|
7
|
+
# @example An ambigous relationship.
|
8
|
+
# class Person
|
9
|
+
# include Mongoid::Document
|
10
|
+
#
|
11
|
+
# has_many :invitations, inverse_of: :person
|
12
|
+
# has_many :referred_invitations, class_name: "Invitation", inverse_of: :referred_by
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# class Invitation
|
16
|
+
# include Mongoid::Document
|
17
|
+
#
|
18
|
+
# belongs_to :person
|
19
|
+
# belongs_to :referred_by, class_name: "Person"
|
20
|
+
# end
|
21
|
+
class AmbiguousRelationship < MongoidError
|
22
|
+
|
23
|
+
# Create the new error.
|
24
|
+
#
|
25
|
+
# @example Create the error.
|
26
|
+
# AmbiguousRelationship.new(
|
27
|
+
# Person, Drug, :person, [ :drugs, # :evil_drugs ]
|
28
|
+
# )
|
29
|
+
#
|
30
|
+
# @param [ Class ] klass The base class.
|
31
|
+
# @param [ Class ] inverse The inverse class.
|
32
|
+
# @param [ Symbol ] name The relation name.
|
33
|
+
# @param [ Array<Symbol> ] candidates The potential inverses.
|
34
|
+
#
|
35
|
+
# @since 3.0.0
|
36
|
+
def initialize(klass, inverse, name, candidates)
|
37
|
+
super(
|
38
|
+
compose_message(
|
39
|
+
"ambiguous_relationship",
|
40
|
+
{
|
41
|
+
klass: klass,
|
42
|
+
inverse: inverse,
|
43
|
+
name: name.inspect,
|
44
|
+
candidates: candidates.map(&:inspect).join(", ")
|
45
|
+
}
|
46
|
+
)
|
47
|
+
)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -1,13 +1,11 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Errors
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
4
4
|
|
5
5
|
# This error is raised when calling #save! or .create! on a model when one
|
6
6
|
# of the callbacks returns false.
|
7
7
|
class Callback < MongoidError
|
8
8
|
|
9
|
-
attr_reader :klass, :method
|
10
|
-
|
11
9
|
# Create the new callbacks error.
|
12
10
|
#
|
13
11
|
# @example Create the new callbacks error.
|
@@ -18,8 +16,9 @@ module Mongoid #:nodoc
|
|
18
16
|
#
|
19
17
|
# @since 2.2.0
|
20
18
|
def initialize(klass, method)
|
21
|
-
|
22
|
-
|
19
|
+
super(
|
20
|
+
compose_message("callbacks", { klass: klass, method: method })
|
21
|
+
)
|
23
22
|
end
|
24
23
|
end
|
25
24
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
# This error is raised when calling #save! or .create! on a model when one
|
6
|
+
# of the callbacks returns false.
|
7
|
+
class DeleteRestriction < MongoidError
|
8
|
+
|
9
|
+
# Create the new callbacks error.
|
10
|
+
#
|
11
|
+
# @example Create the new callbacks error.
|
12
|
+
# Callbacks.new(Post, :create!)
|
13
|
+
#
|
14
|
+
# @param [ Class ] klass The class of the document.
|
15
|
+
# @param [ Symbol ] method The name of the method.
|
16
|
+
#
|
17
|
+
# @since 3.0.0
|
18
|
+
def initialize(document, relation)
|
19
|
+
super(
|
20
|
+
compose_message(
|
21
|
+
"delete_restriction",
|
22
|
+
{ document: document.class, relation: relation }
|
23
|
+
)
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
@@ -1,28 +1,109 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Errors
|
4
|
-
|
5
|
-
# Raised when querying the database for a document by a specific id which
|
6
|
-
# does not exist. If multiple ids were passed then it will display all of
|
7
|
-
# those.
|
8
|
-
#
|
9
|
-
# @example Create the error.
|
10
|
-
# DocumentNotFound.new(Person, ["1", "2"])
|
11
|
-
class DocumentNotFound < MongoidError
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
12
4
|
|
13
|
-
|
5
|
+
# Raised when querying the database for a document by a specific id or by
|
6
|
+
# set of attributes which does not exist. If multiple ids were passed then
|
7
|
+
# it will display all of those.
|
8
|
+
class DocumentNotFound < MongoidError
|
14
9
|
|
15
|
-
|
16
|
-
@klass = klass
|
17
|
-
@identifiers = ids.is_a?(Array) ? ids.join(", ") : ids
|
10
|
+
attr_reader :params
|
18
11
|
|
12
|
+
# Create the new error.
|
13
|
+
#
|
14
|
+
# @example Create the error.
|
15
|
+
# DocumentNotFound.new(Person, ["1", "2"])
|
16
|
+
#
|
17
|
+
# @example Create the error with attributes instead of ids
|
18
|
+
# DocumentNotFound.new(Person, :ssn => "1234", :name => "Helen")
|
19
|
+
#
|
20
|
+
# @param [ Class ] klass The model class.
|
21
|
+
# @param [ Hash, Array, Object ] params The attributes or ids.
|
22
|
+
# @param [ Array ] unmatched The unmatched ids, if appropriate
|
23
|
+
def initialize(klass, params, unmatched = nil)
|
24
|
+
if !unmatched && !params.is_a?(Hash)
|
25
|
+
raise ArgumentError, 'please also supply the unmatched ids'
|
26
|
+
end
|
19
27
|
super(
|
20
|
-
|
21
|
-
|
22
|
-
{
|
28
|
+
compose_message(
|
29
|
+
message_key(params),
|
30
|
+
{
|
31
|
+
klass: klass.name,
|
32
|
+
searched: searched(params),
|
33
|
+
attributes: params,
|
34
|
+
total: total(params),
|
35
|
+
missing: missing(unmatched)
|
36
|
+
}
|
23
37
|
)
|
24
38
|
)
|
25
39
|
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# Get the string to display the document params that were unmatched.
|
44
|
+
#
|
45
|
+
# @example Get the missing string.
|
46
|
+
# error.missing(1)
|
47
|
+
#
|
48
|
+
# @param [ Object, Array ] unmatched The ids that did not match.
|
49
|
+
#
|
50
|
+
# @return [ String ] The missing string.
|
51
|
+
#
|
52
|
+
# @since 3.0.0
|
53
|
+
def missing(unmatched)
|
54
|
+
if unmatched.is_a?(::Array)
|
55
|
+
unmatched.join(", ")
|
56
|
+
else
|
57
|
+
unmatched
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Get the string to display the document params that were searched for.
|
62
|
+
#
|
63
|
+
# @example Get the searched string.
|
64
|
+
# error.searched(1)
|
65
|
+
#
|
66
|
+
# @param [ Object, Array ] params The ids that were searched for.
|
67
|
+
#
|
68
|
+
# @return [ String ] The searched string.
|
69
|
+
#
|
70
|
+
# @since 3.0.0
|
71
|
+
def searched(params)
|
72
|
+
if params.is_a?(::Array)
|
73
|
+
params.take(3).join(", ") + " ..."
|
74
|
+
else
|
75
|
+
params
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Get the total number of expected documents.
|
80
|
+
#
|
81
|
+
# @example Get the total.
|
82
|
+
# error.total([ 1, 2, 3 ])
|
83
|
+
#
|
84
|
+
# @param [ Object, Array ] params What was searched for.
|
85
|
+
#
|
86
|
+
# @return [ Integer ] The total number.
|
87
|
+
#
|
88
|
+
# @since 3.0.0
|
89
|
+
def total(params)
|
90
|
+
params.is_a?(::Array) ? params.count : 1
|
91
|
+
end
|
92
|
+
|
93
|
+
# Create the problem.
|
94
|
+
#
|
95
|
+
# @example Create the problem.
|
96
|
+
# error.problem
|
97
|
+
#
|
98
|
+
# @return [ String ] The problem.
|
99
|
+
#
|
100
|
+
# @since 3.0.0
|
101
|
+
def message_key(params)
|
102
|
+
case params
|
103
|
+
when Hash then "document_with_attributes_not_found"
|
104
|
+
else "document_not_found"
|
105
|
+
end
|
106
|
+
end
|
26
107
|
end
|
27
108
|
end
|
28
109
|
end
|