mongoid 2.8.1 → 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 +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
|