mongoid 2.4.10 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +949 -10
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +3 -17
- data/lib/config/locales/en.yml +455 -51
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- data/lib/mongoid/atomic/paths/root.rb +4 -5
- data/lib/mongoid/atomic.rb +70 -16
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/callbacks.rb +106 -43
- data/lib/mongoid/components.rb +12 -23
- data/lib/mongoid/config/environment.rb +7 -4
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config.rb +104 -225
- data/lib/mongoid/contextual/aggregable/memory.rb +109 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
- data/lib/mongoid/contextual/atomic.rb +179 -0
- data/lib/mongoid/contextual/command.rb +43 -0
- data/lib/mongoid/contextual/find_and_modify.rb +68 -0
- data/lib/mongoid/contextual/map_reduce.rb +273 -0
- data/lib/mongoid/contextual/memory.rb +406 -0
- data/lib/mongoid/contextual/mongo.rb +662 -0
- data/lib/mongoid/contextual.rb +50 -0
- data/lib/mongoid/copyable.rb +7 -25
- data/lib/mongoid/criteria.rb +515 -245
- data/lib/mongoid/criterion/inspection.rb +14 -8
- data/lib/mongoid/criterion/scoping.rb +114 -44
- data/lib/mongoid/dirty.rb +152 -67
- data/lib/mongoid/document.rb +71 -52
- data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
- data/lib/mongoid/errors/callback.rb +5 -6
- data/lib/mongoid/errors/delete_restriction.rb +29 -0
- data/lib/mongoid/errors/document_not_found.rb +98 -17
- data/lib/mongoid/errors/eager_load.rb +3 -6
- data/lib/mongoid/errors/invalid_collection.rb +3 -3
- data/lib/mongoid/errors/invalid_config_option.rb +27 -0
- data/lib/mongoid/errors/invalid_database.rb +3 -3
- data/lib/mongoid/errors/invalid_field.rb +54 -8
- data/lib/mongoid/errors/invalid_field_option.rb +35 -0
- data/lib/mongoid/errors/invalid_find.rb +3 -3
- data/lib/mongoid/errors/invalid_index.rb +28 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -4
- data/lib/mongoid/errors/invalid_scope.rb +24 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
- data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
- data/lib/mongoid/errors/invalid_time.rb +3 -6
- data/lib/mongoid/errors/inverse_not_found.rb +29 -0
- data/lib/mongoid/errors/mixed_relations.rb +4 -9
- data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
- data/lib/mongoid/errors/mongoid_error.rb +54 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
- data/lib/mongoid/errors/no_default_session.rb +23 -0
- data/lib/mongoid/errors/no_environment.rb +3 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
- data/lib/mongoid/errors/no_metadata.rb +21 -0
- data/lib/mongoid/errors/no_parent.rb +24 -0
- data/lib/mongoid/errors/no_session_config.rb +22 -0
- data/lib/mongoid/errors/no_session_database.rb +27 -0
- data/lib/mongoid/errors/no_session_hosts.rb +27 -0
- data/lib/mongoid/errors/no_sessions_config.rb +20 -0
- data/lib/mongoid/errors/readonly_attribute.rb +25 -0
- data/lib/mongoid/errors/scope_overwrite.rb +4 -4
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
- data/lib/mongoid/errors/unknown_attribute.rb +25 -0
- data/lib/mongoid/errors/unsaved_document.rb +4 -8
- data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
- data/lib/mongoid/errors/unsupported_version.rb +4 -4
- data/lib/mongoid/errors/validations.rb +7 -6
- data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
- data/lib/mongoid/errors.rb +23 -1
- data/lib/mongoid/evolvable.rb +19 -0
- data/lib/mongoid/extensions/array.rb +164 -0
- data/lib/mongoid/extensions/big_decimal.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +24 -0
- data/lib/mongoid/extensions/date.rb +70 -0
- data/lib/mongoid/extensions/date_time.rb +73 -0
- data/lib/mongoid/extensions/false_class.rb +38 -0
- data/lib/mongoid/extensions/float.rb +56 -0
- data/lib/mongoid/extensions/hash.rb +123 -0
- data/lib/mongoid/extensions/integer.rb +66 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +21 -0
- data/lib/mongoid/extensions/object.rb +238 -0
- data/lib/mongoid/extensions/object_id.rb +54 -0
- data/lib/mongoid/extensions/range.rb +79 -0
- data/lib/mongoid/extensions/regexp.rb +27 -0
- data/lib/mongoid/extensions/set.rb +55 -0
- data/lib/mongoid/extensions/string.rb +181 -0
- data/lib/mongoid/extensions/symbol.rb +54 -0
- data/lib/mongoid/extensions/time.rb +78 -0
- data/lib/mongoid/extensions/time_with_zone.rb +55 -0
- data/lib/mongoid/extensions/true_class.rb +38 -0
- data/lib/mongoid/extensions.rb +28 -76
- data/lib/mongoid/factory.rb +1 -1
- data/lib/mongoid/fields/foreign_key.rb +150 -0
- data/lib/mongoid/fields/localized.rb +73 -0
- data/lib/mongoid/fields/standard.rb +268 -0
- data/lib/mongoid/fields/validators/macro.rb +83 -0
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields.rb +142 -208
- data/lib/mongoid/finders.rb +45 -50
- data/lib/mongoid/hierarchy.rb +44 -15
- data/lib/mongoid/identity_map.rb +49 -21
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- data/lib/mongoid/indexes.rb +66 -15
- data/lib/mongoid/inspection.rb +1 -1
- data/lib/mongoid/json.rb +2 -2
- data/lib/mongoid/loggable.rb +69 -0
- data/lib/mongoid/matchers/all.rb +7 -8
- data/lib/mongoid/matchers/and.rb +3 -3
- data/lib/mongoid/matchers/default.rb +6 -4
- data/lib/mongoid/matchers/exists.rb +2 -2
- data/lib/mongoid/matchers/gt.rb +2 -2
- data/lib/mongoid/matchers/gte.rb +2 -2
- data/lib/mongoid/matchers/in.rb +3 -7
- data/lib/mongoid/matchers/lt.rb +2 -2
- data/lib/mongoid/matchers/lte.rb +2 -2
- data/lib/mongoid/matchers/ne.rb +2 -2
- data/lib/mongoid/matchers/nin.rb +2 -2
- data/lib/mongoid/matchers/or.rb +2 -2
- data/lib/mongoid/matchers/size.rb +2 -2
- data/lib/mongoid/matchers/strategies.rb +3 -3
- data/lib/mongoid/matchers.rb +1 -1
- data/lib/mongoid/multi_parameter_attributes.rb +9 -11
- data/lib/mongoid/nested_attributes.rb +17 -9
- data/lib/mongoid/observer.rb +1 -2
- data/lib/mongoid/paranoia.rb +10 -44
- data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
- data/lib/mongoid/persistence/atomic/bit.rb +5 -7
- data/lib/mongoid/persistence/atomic/inc.rb +5 -7
- data/lib/mongoid/persistence/atomic/operation.rb +45 -6
- data/lib/mongoid/persistence/atomic/pop.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
- data/lib/mongoid/persistence/atomic/push.rb +4 -10
- data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
- data/lib/mongoid/persistence/atomic/rename.rb +6 -7
- data/lib/mongoid/persistence/atomic/sets.rb +5 -7
- data/lib/mongoid/persistence/atomic/unset.rb +4 -5
- data/lib/mongoid/persistence/atomic.rb +2 -2
- data/lib/mongoid/persistence/deletion.rb +2 -2
- data/lib/mongoid/persistence/insertion.rb +10 -16
- data/lib/mongoid/persistence/modification.rb +5 -9
- data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
- data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
- data/lib/mongoid/persistence/operations/insert.rb +4 -4
- data/lib/mongoid/persistence/operations/remove.rb +4 -4
- data/lib/mongoid/persistence/operations/update.rb +5 -5
- data/lib/mongoid/persistence/operations/upsert.rb +28 -0
- data/lib/mongoid/persistence/operations.rb +22 -19
- data/lib/mongoid/persistence/upsertion.rb +30 -0
- data/lib/mongoid/persistence.rb +94 -39
- data/lib/mongoid/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations/accessors.rb +120 -20
- data/lib/mongoid/relations/auto_save.rb +59 -5
- data/lib/mongoid/relations/binding.rb +211 -2
- data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
- data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
- data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
- data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
- data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
- data/lib/mongoid/relations/builder.rb +4 -4
- data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
- data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
- data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -5
- data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/many.rb +6 -6
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
- data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
- data/lib/mongoid/relations/builders.rb +19 -16
- data/lib/mongoid/relations/cascading/delete.rb +3 -5
- data/lib/mongoid/relations/cascading/destroy.rb +3 -3
- data/lib/mongoid/relations/cascading/nullify.rb +3 -3
- data/lib/mongoid/relations/cascading/restrict.rb +37 -0
- data/lib/mongoid/relations/cascading.rb +10 -7
- data/lib/mongoid/relations/constraint.rb +4 -3
- data/lib/mongoid/relations/conversions.rb +6 -7
- data/lib/mongoid/relations/cyclic.rb +7 -7
- data/lib/mongoid/relations/embedded/batchable.rb +347 -0
- data/lib/mongoid/relations/embedded/in.rb +23 -12
- data/lib/mongoid/relations/embedded/many.rb +100 -161
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -60
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +277 -47
- data/lib/mongoid/relations/nested_builder.rb +4 -6
- data/lib/mongoid/relations/one.rb +2 -2
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/polymorphic.rb +9 -9
- data/lib/mongoid/relations/proxy.rb +62 -31
- data/lib/mongoid/relations/referenced/in.rb +40 -15
- data/lib/mongoid/relations/referenced/many.rb +162 -130
- data/lib/mongoid/relations/referenced/many_to_many.rb +104 -48
- data/lib/mongoid/relations/referenced/one.rb +34 -13
- data/lib/mongoid/relations/reflections.rb +3 -3
- data/lib/mongoid/relations/synchronization.rb +19 -23
- data/lib/mongoid/relations/targets/enumerable.rb +86 -57
- data/lib/mongoid/relations/touchable.rb +32 -0
- data/lib/mongoid/relations.rb +22 -6
- data/lib/mongoid/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +312 -0
- data/lib/mongoid/serialization.rb +94 -42
- data/lib/mongoid/sessions/factory.rb +108 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions.rb +383 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded/lifecycle.rb +21 -21
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/threaded.rb +219 -59
- data/lib/mongoid/timestamps/created.rb +8 -4
- data/lib/mongoid/timestamps/timeless.rb +6 -4
- data/lib/mongoid/timestamps/updated.rb +4 -3
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/unit_of_work.rb +61 -0
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +34 -4
- data/lib/mongoid/validations/uniqueness.rb +11 -12
- data/lib/mongoid/validations.rb +28 -20
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- data/lib/mongoid.rb +37 -37
- data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
- data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +65 -17
- data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
- data/lib/rails/generators/mongoid_generator.rb +5 -5
- data/lib/rails/mongoid.rb +73 -26
- metadata +103 -148
- data/lib/config/locales/bg.yml +0 -61
- data/lib/config/locales/de.yml +0 -61
- data/lib/config/locales/en-GB.yml +0 -64
- data/lib/config/locales/es.yml +0 -59
- data/lib/config/locales/fr.yml +0 -62
- data/lib/config/locales/hi.yml +0 -53
- data/lib/config/locales/hu.yml +0 -64
- data/lib/config/locales/id.yml +0 -62
- data/lib/config/locales/it.yml +0 -59
- data/lib/config/locales/ja.yml +0 -57
- data/lib/config/locales/kr.yml +0 -54
- data/lib/config/locales/nl.yml +0 -61
- data/lib/config/locales/pl.yml +0 -59
- data/lib/config/locales/pt-BR.yml +0 -60
- data/lib/config/locales/pt.yml +0 -60
- data/lib/config/locales/ro.yml +0 -66
- data/lib/config/locales/ru.yml +0 -61
- data/lib/config/locales/sv.yml +0 -60
- data/lib/config/locales/vi.yml +0 -62
- data/lib/config/locales/zh-CN.yml +0 -53
- data/lib/mongoid/collection.rb +0 -157
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/collections/retry.rb +0 -59
- data/lib/mongoid/collections.rb +0 -120
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/mongo.rb +0 -487
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/criterion/builder.rb +0 -34
- data/lib/mongoid/criterion/complex.rb +0 -84
- data/lib/mongoid/criterion/creational.rb +0 -34
- data/lib/mongoid/criterion/exclusion.rb +0 -108
- data/lib/mongoid/criterion/inclusion.rb +0 -290
- data/lib/mongoid/criterion/optional.rb +0 -259
- data/lib/mongoid/criterion/selector.rb +0 -177
- data/lib/mongoid/cursor.rb +0 -88
- data/lib/mongoid/default_scope.rb +0 -36
- data/lib/mongoid/errors/invalid_type.rb +0 -25
- data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/array/deletion.rb +0 -29
- data/lib/mongoid/extensions/false_class/equality.rb +0 -26
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
- data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/hash/scoping.rb +0 -25
- data/lib/mongoid/extensions/integer/checks.rb +0 -23
- data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
- data/lib/mongoid/extensions/object/checks.rb +0 -29
- data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
- data/lib/mongoid/extensions/object/reflections.rb +0 -48
- data/lib/mongoid/extensions/object/substitutable.rb +0 -15
- data/lib/mongoid/extensions/object/yoda.rb +0 -44
- data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
- data/lib/mongoid/extensions/proc/scoping.rb +0 -25
- data/lib/mongoid/extensions/string/checks.rb +0 -36
- data/lib/mongoid/extensions/string/conversions.rb +0 -22
- data/lib/mongoid/extensions/string/inflections.rb +0 -118
- data/lib/mongoid/extensions/symbol/checks.rb +0 -23
- data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
- data/lib/mongoid/extensions/true_class/equality.rb +0 -26
- data/lib/mongoid/extras.rb +0 -31
- data/lib/mongoid/fields/internal/array.rb +0 -76
- data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
- data/lib/mongoid/fields/internal/bignum.rb +0 -10
- data/lib/mongoid/fields/internal/binary.rb +0 -11
- data/lib/mongoid/fields/internal/boolean.rb +0 -58
- data/lib/mongoid/fields/internal/date.rb +0 -51
- data/lib/mongoid/fields/internal/date_time.rb +0 -28
- data/lib/mongoid/fields/internal/false_class.rb +0 -10
- data/lib/mongoid/fields/internal/fixnum.rb +0 -10
- data/lib/mongoid/fields/internal/float.rb +0 -47
- data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
- data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
- data/lib/mongoid/fields/internal/hash.rb +0 -11
- data/lib/mongoid/fields/internal/integer.rb +0 -59
- data/lib/mongoid/fields/internal/localized.rb +0 -62
- data/lib/mongoid/fields/internal/nil_class.rb +0 -53
- data/lib/mongoid/fields/internal/object.rb +0 -11
- data/lib/mongoid/fields/internal/object_id.rb +0 -46
- data/lib/mongoid/fields/internal/range.rb +0 -61
- data/lib/mongoid/fields/internal/set.rb +0 -57
- data/lib/mongoid/fields/internal/string.rb +0 -42
- data/lib/mongoid/fields/internal/symbol.rb +0 -43
- data/lib/mongoid/fields/internal/time.rb +0 -23
- data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
- data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
- data/lib/mongoid/fields/internal/true_class.rb +0 -10
- data/lib/mongoid/fields/mappings.rb +0 -42
- data/lib/mongoid/fields/serializable.rb +0 -270
- data/lib/mongoid/identity.rb +0 -92
- data/lib/mongoid/javascript/functions.yml +0 -63
- data/lib/mongoid/javascript.rb +0 -20
- data/lib/mongoid/keys.rb +0 -144
- data/lib/mongoid/logger.rb +0 -45
- data/lib/mongoid/multi_database.rb +0 -36
- data/lib/mongoid/named_scope.rb +0 -166
- data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
- data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
- data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
- data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
- data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
- data/lib/mongoid/relations/embedded/atomic.rb +0 -89
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/relations/referenced/batch.rb +0 -73
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
data/lib/mongoid/threaded.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require "mongoid/threaded/lifecycle"
|
|
3
3
|
|
|
4
|
-
module Mongoid
|
|
4
|
+
module Mongoid
|
|
5
5
|
|
|
6
6
|
# This module contains logic for easy access to objects that have a lifecycle
|
|
7
7
|
# on the current thread.
|
|
@@ -13,7 +13,7 @@ module Mongoid #:nodoc:
|
|
|
13
13
|
# @example Begin entry into the stack.
|
|
14
14
|
# Threaded.begin(:create)
|
|
15
15
|
#
|
|
16
|
-
# @param [
|
|
16
|
+
# @param [ String ] name The name of the stack
|
|
17
17
|
#
|
|
18
18
|
# @return [ true ] True.
|
|
19
19
|
#
|
|
@@ -22,6 +22,44 @@ module Mongoid #:nodoc:
|
|
|
22
22
|
stack(name).push(true)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
+
# Get the global database override.
|
|
26
|
+
#
|
|
27
|
+
# @example Get the global database override.
|
|
28
|
+
# Threaded.database_override
|
|
29
|
+
#
|
|
30
|
+
# @return [ String, Symbol ] The override.
|
|
31
|
+
#
|
|
32
|
+
# @since 3.0.0
|
|
33
|
+
def database_override
|
|
34
|
+
Thread.current["[mongoid]:db-override"]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Set the global database override.
|
|
38
|
+
#
|
|
39
|
+
# @example Set the global database override.
|
|
40
|
+
# Threaded.database_override = :testing
|
|
41
|
+
#
|
|
42
|
+
# @param [ String, Symbol ] The global override name.
|
|
43
|
+
#
|
|
44
|
+
# @return [ String, Symbol ] The override.
|
|
45
|
+
#
|
|
46
|
+
# @since 3.0.0
|
|
47
|
+
def database_override=(name)
|
|
48
|
+
Thread.current["[mongoid]:db-override"] = name
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Get the database sessions from the current thread.
|
|
52
|
+
#
|
|
53
|
+
# @example Get the database sessions.
|
|
54
|
+
# Threaded.sessions
|
|
55
|
+
#
|
|
56
|
+
# @return [ Hash ] The sessions.
|
|
57
|
+
#
|
|
58
|
+
# @since 3.0.0
|
|
59
|
+
def sessions
|
|
60
|
+
Thread.current["[mongoid]:sessions"] ||= {}
|
|
61
|
+
end
|
|
62
|
+
|
|
25
63
|
# Are in the middle of executing the named stack
|
|
26
64
|
#
|
|
27
65
|
# @example Are we in the stack execution?
|
|
@@ -61,7 +99,19 @@ module Mongoid #:nodoc:
|
|
|
61
99
|
#
|
|
62
100
|
# @since 2.4.0
|
|
63
101
|
def stack(name)
|
|
64
|
-
Thread.current[
|
|
102
|
+
Thread.current["[mongoid]:#{name}-stack"] ||= []
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Begin autosaving a document on the current thread.
|
|
106
|
+
#
|
|
107
|
+
# @example Begin autosave.
|
|
108
|
+
# Threaded.begin_autosave(doc)
|
|
109
|
+
#
|
|
110
|
+
# @param [ Document ] document The document to autosave.
|
|
111
|
+
#
|
|
112
|
+
# @since 3.0.0
|
|
113
|
+
def begin_autosave(document)
|
|
114
|
+
autosaves_for(document.class).push(document.id)
|
|
65
115
|
end
|
|
66
116
|
|
|
67
117
|
# Begin validating a document on the current thread.
|
|
@@ -76,16 +126,19 @@ module Mongoid #:nodoc:
|
|
|
76
126
|
validations_for(document.class).push(document.id)
|
|
77
127
|
end
|
|
78
128
|
|
|
79
|
-
# Clear out all the
|
|
129
|
+
# Clear out all the persistence options.
|
|
80
130
|
#
|
|
81
|
-
# @example Clear out the options.
|
|
82
|
-
# Threaded.
|
|
131
|
+
# @example Clear out the persistence options.
|
|
132
|
+
# Threaded.clear_persistence_options(Band)
|
|
83
133
|
#
|
|
84
|
-
# @
|
|
134
|
+
# @param [ Class ] klass The model class.
|
|
85
135
|
#
|
|
86
|
-
# @
|
|
87
|
-
|
|
88
|
-
|
|
136
|
+
# @return [ true ] true.
|
|
137
|
+
#
|
|
138
|
+
# @since 2.0.0
|
|
139
|
+
def clear_persistence_options(klass)
|
|
140
|
+
Thread.current["[mongoid][#{klass}]:persistence-options"] = nil
|
|
141
|
+
true
|
|
89
142
|
end
|
|
90
143
|
|
|
91
144
|
# Clear out all options set on a one-time basis.
|
|
@@ -95,10 +148,21 @@ module Mongoid #:nodoc:
|
|
|
95
148
|
#
|
|
96
149
|
# @since 2.3.0
|
|
97
150
|
def clear_options!
|
|
98
|
-
clear_safety_options!
|
|
99
151
|
self.timeless = false
|
|
100
152
|
end
|
|
101
153
|
|
|
154
|
+
# Exit autosaving a document on the current thread.
|
|
155
|
+
#
|
|
156
|
+
# @example Exit autosave.
|
|
157
|
+
# Threaded.exit_autosave(doc)
|
|
158
|
+
#
|
|
159
|
+
# @param [ Document ] document The document to autosave.
|
|
160
|
+
#
|
|
161
|
+
# @since 3.0.0
|
|
162
|
+
def exit_autosave(document)
|
|
163
|
+
autosaves_for(document.class).delete_one(document.id)
|
|
164
|
+
end
|
|
165
|
+
|
|
102
166
|
# Exit validating a document on the current thread.
|
|
103
167
|
#
|
|
104
168
|
# @example Exit validation.
|
|
@@ -120,7 +184,61 @@ module Mongoid #:nodoc:
|
|
|
120
184
|
#
|
|
121
185
|
# @since 2.1.0
|
|
122
186
|
def identity_map
|
|
123
|
-
Thread.current[
|
|
187
|
+
Thread.current["[mongoid]:identity-map"] ||= IdentityMap.new
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Is the identity map enabled on the current thread?
|
|
191
|
+
#
|
|
192
|
+
# @example Is the identity map enabled?
|
|
193
|
+
# Threaded.identity_map_enabled?
|
|
194
|
+
#
|
|
195
|
+
# @return [ true, false ] If the identity map is enabled.
|
|
196
|
+
#
|
|
197
|
+
# @since 3.0.0
|
|
198
|
+
def identity_map_enabled?
|
|
199
|
+
Thread.current["[mongoid]:identity-map-enabled"] != false
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# Disable the identity map on either the current thread or all threads.
|
|
203
|
+
#
|
|
204
|
+
# @example Disable the identity map on all threads.
|
|
205
|
+
# Threaded.disable_identity_map(:all)
|
|
206
|
+
#
|
|
207
|
+
# @example Disable the identity map on the current thread.
|
|
208
|
+
# Threaded.disable_identity_map(:current)
|
|
209
|
+
#
|
|
210
|
+
# @param [ Symbol ] option The disabling option.
|
|
211
|
+
#
|
|
212
|
+
# @since 3.0.0
|
|
213
|
+
def disable_identity_map(option)
|
|
214
|
+
if option == :all
|
|
215
|
+
Thread.list.each do |thread|
|
|
216
|
+
thread["[mongoid]:identity-map-enabled"] = false
|
|
217
|
+
end
|
|
218
|
+
else
|
|
219
|
+
Thread.current["[mongoid]:identity-map-enabled"] = false
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# Enable the identity map on either the current thread or all threads.
|
|
224
|
+
#
|
|
225
|
+
# @example Enable the identity map on all threads.
|
|
226
|
+
# Threaded.enable_identity_map(:all)
|
|
227
|
+
#
|
|
228
|
+
# @example Enable the identity map on the current thread.
|
|
229
|
+
# Threaded.enable_identity_map(:current)
|
|
230
|
+
#
|
|
231
|
+
# @param [ Symbol ] option The disabling option.
|
|
232
|
+
#
|
|
233
|
+
# @since 3.0.0
|
|
234
|
+
def enable_identity_map(option)
|
|
235
|
+
if option == :all
|
|
236
|
+
Thread.list.each do |thread|
|
|
237
|
+
thread["[mongoid]:identity-map-enabled"] = true
|
|
238
|
+
end
|
|
239
|
+
else
|
|
240
|
+
Thread.current["[mongoid]:identity-map-enabled"] = true
|
|
241
|
+
end
|
|
124
242
|
end
|
|
125
243
|
|
|
126
244
|
# Get the insert consumer from the current thread.
|
|
@@ -132,7 +250,7 @@ module Mongoid #:nodoc:
|
|
|
132
250
|
#
|
|
133
251
|
# @since 2.1.0
|
|
134
252
|
def insert(name)
|
|
135
|
-
Thread.current[
|
|
253
|
+
Thread.current["[mongoid][#{name}]:insert-consumer"]
|
|
136
254
|
end
|
|
137
255
|
|
|
138
256
|
# Set the insert consumer on the current thread.
|
|
@@ -146,33 +264,36 @@ module Mongoid #:nodoc:
|
|
|
146
264
|
#
|
|
147
265
|
# @since 2.1.0
|
|
148
266
|
def set_insert(name, consumer)
|
|
149
|
-
Thread.current[
|
|
267
|
+
Thread.current["[mongoid][#{name}]:insert-consumer"] = consumer
|
|
150
268
|
end
|
|
151
269
|
|
|
152
|
-
# Get the
|
|
270
|
+
# Get the persistence options for the current thread.
|
|
271
|
+
#
|
|
272
|
+
# @example Get the persistence options.
|
|
273
|
+
# Threaded.persistence_options(Band)
|
|
153
274
|
#
|
|
154
|
-
# @
|
|
155
|
-
# Threaded.safety_options
|
|
275
|
+
# @param [ Class ] klass The model class.
|
|
156
276
|
#
|
|
157
|
-
# @return [ Hash ] The current
|
|
277
|
+
# @return [ Hash ] The current persistence options.
|
|
158
278
|
#
|
|
159
279
|
# @since 2.1.0
|
|
160
|
-
def
|
|
161
|
-
Thread.current[
|
|
280
|
+
def persistence_options(klass)
|
|
281
|
+
Thread.current["[mongoid][#{klass}]:persistence-options"]
|
|
162
282
|
end
|
|
163
283
|
|
|
164
|
-
# Set the
|
|
284
|
+
# Set the persistence options on the current thread.
|
|
165
285
|
#
|
|
166
|
-
# @example Set the
|
|
167
|
-
# Threaded.
|
|
286
|
+
# @example Set the persistence options.
|
|
287
|
+
# Threaded.set_persistence_options(Band, { safe: { fsync: true }})
|
|
168
288
|
#
|
|
169
|
-
# @param [
|
|
289
|
+
# @param [ Class ] klass The model class.
|
|
290
|
+
# @param [ Hash ] options The persistence options.
|
|
170
291
|
#
|
|
171
|
-
# @return [ Hash ] The
|
|
292
|
+
# @return [ Hash ] The persistence options.
|
|
172
293
|
#
|
|
173
294
|
# @since 2.1.0
|
|
174
|
-
def
|
|
175
|
-
Thread.current[
|
|
295
|
+
def set_persistence_options(klass, options)
|
|
296
|
+
Thread.current["[mongoid][#{klass}]:persistence-options"] = options
|
|
176
297
|
end
|
|
177
298
|
|
|
178
299
|
# Get the field selection options from the current thread.
|
|
@@ -184,7 +305,7 @@ module Mongoid #:nodoc:
|
|
|
184
305
|
#
|
|
185
306
|
# @since 2.4.4
|
|
186
307
|
def selection
|
|
187
|
-
Thread.current[
|
|
308
|
+
Thread.current["[mongoid]:selection"]
|
|
188
309
|
end
|
|
189
310
|
|
|
190
311
|
# Set the field selection on the current thread.
|
|
@@ -198,7 +319,33 @@ module Mongoid #:nodoc:
|
|
|
198
319
|
#
|
|
199
320
|
# @since 2.4.4
|
|
200
321
|
def selection=(value)
|
|
201
|
-
Thread.current[
|
|
322
|
+
Thread.current["[mongoid]:selection"] = value
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
# Get the global session override.
|
|
326
|
+
#
|
|
327
|
+
# @example Get the global session override.
|
|
328
|
+
# Threaded.session_override
|
|
329
|
+
#
|
|
330
|
+
# @return [ String, Symbol ] The override.
|
|
331
|
+
#
|
|
332
|
+
# @since 3.0.0
|
|
333
|
+
def session_override
|
|
334
|
+
Thread.current["[mongoid]:session-override"]
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
# Set the global session override.
|
|
338
|
+
#
|
|
339
|
+
# @example Set the global session override.
|
|
340
|
+
# Threaded.session_override = :testing
|
|
341
|
+
#
|
|
342
|
+
# @param [ String, Symbol ] The global override name.
|
|
343
|
+
#
|
|
344
|
+
# @return [ String, Symbol ] The override.
|
|
345
|
+
#
|
|
346
|
+
# @since 3.0.0
|
|
347
|
+
def session_override=(name)
|
|
348
|
+
Thread.current["[mongoid]:session-override"] = name
|
|
202
349
|
end
|
|
203
350
|
|
|
204
351
|
# Get the mongoid scope stack for chained criteria.
|
|
@@ -210,7 +357,7 @@ module Mongoid #:nodoc:
|
|
|
210
357
|
#
|
|
211
358
|
# @since 2.1.0
|
|
212
359
|
def scope_stack
|
|
213
|
-
Thread.current[
|
|
360
|
+
Thread.current["[mongoid]:scope-stack"] ||= {}
|
|
214
361
|
end
|
|
215
362
|
|
|
216
363
|
# Get the value of the one-off timeless call.
|
|
@@ -222,7 +369,7 @@ module Mongoid #:nodoc:
|
|
|
222
369
|
#
|
|
223
370
|
# @since 2.3.0
|
|
224
371
|
def timeless
|
|
225
|
-
!!Thread.current[
|
|
372
|
+
!!Thread.current["[mongoid]:timeless"]
|
|
226
373
|
end
|
|
227
374
|
|
|
228
375
|
# Set the value of the one-off timeless call.
|
|
@@ -234,33 +381,7 @@ module Mongoid #:nodoc:
|
|
|
234
381
|
#
|
|
235
382
|
# @since 2.3.0
|
|
236
383
|
def timeless=(value)
|
|
237
|
-
Thread.current[
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
# Get the update consumer from the current thread.
|
|
241
|
-
#
|
|
242
|
-
# @example Get the update consumer.
|
|
243
|
-
# Threaded.update
|
|
244
|
-
#
|
|
245
|
-
# @return [ Object ] The atomic update consumer.
|
|
246
|
-
#
|
|
247
|
-
# @since 2.1.0
|
|
248
|
-
def update_consumer(klass)
|
|
249
|
-
Thread.current[:"[mongoid][#{klass}]:update-consumer"]
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
# Set the update consumer on the current thread.
|
|
253
|
-
#
|
|
254
|
-
# @example Set the update consumer.
|
|
255
|
-
# Threaded.update = consumer
|
|
256
|
-
#
|
|
257
|
-
# @param [ Object ] consumer The update consumer.
|
|
258
|
-
#
|
|
259
|
-
# @return [ Object ] The update consumer.
|
|
260
|
-
#
|
|
261
|
-
# @since 2.1.0
|
|
262
|
-
def set_update_consumer(klass, consumer)
|
|
263
|
-
Thread.current[:"[mongoid][#{klass}]:update-consumer"] = consumer
|
|
384
|
+
Thread.current["[mongoid]:timeless"] = value
|
|
264
385
|
end
|
|
265
386
|
|
|
266
387
|
# Is the current thread setting timestamps?
|
|
@@ -275,6 +396,20 @@ module Mongoid #:nodoc:
|
|
|
275
396
|
!timeless
|
|
276
397
|
end
|
|
277
398
|
|
|
399
|
+
# Is the document autosaved on the current thread?
|
|
400
|
+
#
|
|
401
|
+
# @example Is the document autosaved?
|
|
402
|
+
# Threaded.autosaved?(doc)
|
|
403
|
+
#
|
|
404
|
+
# @param [ Document ] document The document to check.
|
|
405
|
+
#
|
|
406
|
+
# @return [ true, false ] If the document is autosaved.
|
|
407
|
+
#
|
|
408
|
+
# @since 2.1.9
|
|
409
|
+
def autosaved?(document)
|
|
410
|
+
autosaves_for(document.class).include?(document.id)
|
|
411
|
+
end
|
|
412
|
+
|
|
278
413
|
# Is the document validated on the current thread?
|
|
279
414
|
#
|
|
280
415
|
# @example Is the document validated?
|
|
@@ -289,6 +424,18 @@ module Mongoid #:nodoc:
|
|
|
289
424
|
validations_for(document.class).include?(document.id)
|
|
290
425
|
end
|
|
291
426
|
|
|
427
|
+
# Get all autosaves on the current thread.
|
|
428
|
+
#
|
|
429
|
+
# @example Get all autosaves.
|
|
430
|
+
# Threaded.autosaves
|
|
431
|
+
#
|
|
432
|
+
# @return [ Hash ] The current autosaves.
|
|
433
|
+
#
|
|
434
|
+
# @since 3.0.0
|
|
435
|
+
def autosaves
|
|
436
|
+
Thread.current["[mongoid]:autosaves"] ||= {}
|
|
437
|
+
end
|
|
438
|
+
|
|
292
439
|
# Get all validations on the current thread.
|
|
293
440
|
#
|
|
294
441
|
# @example Get all validations.
|
|
@@ -298,9 +445,22 @@ module Mongoid #:nodoc:
|
|
|
298
445
|
#
|
|
299
446
|
# @since 2.1.9
|
|
300
447
|
def validations
|
|
301
|
-
Thread.current[
|
|
448
|
+
Thread.current["[mongoid]:validations"] ||= {}
|
|
302
449
|
end
|
|
303
450
|
|
|
451
|
+
# Get all autosaves on the current thread for the class.
|
|
452
|
+
#
|
|
453
|
+
# @example Get all autosaves.
|
|
454
|
+
# Threaded.autosaves_for(Person)
|
|
455
|
+
#
|
|
456
|
+
# @param [ Class ] The class to check.
|
|
457
|
+
#
|
|
458
|
+
# @return [ Array ] The current autosaves.
|
|
459
|
+
#
|
|
460
|
+
# @since 3.0.0
|
|
461
|
+
def autosaves_for(klass)
|
|
462
|
+
autosaves[klass] ||= []
|
|
463
|
+
end
|
|
304
464
|
# Get all validations on the current thread for the class.
|
|
305
465
|
#
|
|
306
466
|
# @example Get all validations.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
module Timestamps
|
|
4
4
|
# This module handles the behaviour for setting up document created at
|
|
5
5
|
# timestamp.
|
|
@@ -7,8 +7,8 @@ module Mongoid #:nodoc:
|
|
|
7
7
|
extend ActiveSupport::Concern
|
|
8
8
|
|
|
9
9
|
included do
|
|
10
|
-
field :created_at, :
|
|
11
|
-
set_callback :create, :before, :set_created_at, :
|
|
10
|
+
field :created_at, type: Time
|
|
11
|
+
set_callback :create, :before, :set_created_at, if: :timestamping?
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
# Update the created_at field on the Document to the current time. This is
|
|
@@ -17,7 +17,11 @@ module Mongoid #:nodoc:
|
|
|
17
17
|
# @example Set the created at time.
|
|
18
18
|
# person.set_created_at
|
|
19
19
|
def set_created_at
|
|
20
|
-
|
|
20
|
+
if !created_at
|
|
21
|
+
time = Time.now.utc
|
|
22
|
+
self.updated_at = time if is_a?(Updated) && !updated_at_changed?
|
|
23
|
+
self.created_at = time
|
|
24
|
+
end
|
|
21
25
|
end
|
|
22
26
|
end
|
|
23
27
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
module Timestamps
|
|
4
4
|
|
|
5
5
|
# This module adds behaviour for turning off timestamping in single or
|
|
@@ -16,7 +16,8 @@ module Mongoid #:nodoc:
|
|
|
16
16
|
#
|
|
17
17
|
# @since 2.3.0
|
|
18
18
|
def timeless
|
|
19
|
-
|
|
19
|
+
Threaded.timeless = true
|
|
20
|
+
self
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
# Are we currently timestamping?
|
|
@@ -31,7 +32,7 @@ module Mongoid #:nodoc:
|
|
|
31
32
|
Threaded.timestamping?
|
|
32
33
|
end
|
|
33
34
|
|
|
34
|
-
module ClassMethods
|
|
35
|
+
module ClassMethods
|
|
35
36
|
|
|
36
37
|
# Begin an execution that should skip timestamping.
|
|
37
38
|
#
|
|
@@ -42,7 +43,8 @@ module Mongoid #:nodoc:
|
|
|
42
43
|
#
|
|
43
44
|
# @since 2.3.0
|
|
44
45
|
def timeless
|
|
45
|
-
|
|
46
|
+
Threaded.timeless = true
|
|
47
|
+
self
|
|
46
48
|
end
|
|
47
49
|
end
|
|
48
50
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
2
|
+
module Mongoid
|
|
3
3
|
module Timestamps
|
|
4
4
|
# This module handles the behaviour for setting up document updated at
|
|
5
5
|
# timestamp.
|
|
@@ -7,8 +7,9 @@ module Mongoid #:nodoc:
|
|
|
7
7
|
extend ActiveSupport::Concern
|
|
8
8
|
|
|
9
9
|
included do
|
|
10
|
-
field :updated_at, :
|
|
11
|
-
set_callback :
|
|
10
|
+
field :updated_at, type: Time
|
|
11
|
+
set_callback :create, :before, :set_updated_at, if: :able_to_set_updated_at?
|
|
12
|
+
set_callback :update, :before, :set_updated_at, if: :able_to_set_updated_at?
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
# Update the updated_at field on the Document to the current time.
|
data/lib/mongoid/timestamps.rb
CHANGED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
|
|
4
|
+
# This module handles unit of work functionality with regards to the identity
|
|
5
|
+
# map.
|
|
6
|
+
module UnitOfWork
|
|
7
|
+
|
|
8
|
+
# We can process a unit of work in Mongoid and have the identity map
|
|
9
|
+
# automatically clear itself out after the work is complete.
|
|
10
|
+
#
|
|
11
|
+
# @example Process a unit of work.
|
|
12
|
+
# Mongoid.unit_of_work do
|
|
13
|
+
# Person.create(title: "Sir")
|
|
14
|
+
# end
|
|
15
|
+
#
|
|
16
|
+
# @example Process with identity map disabled on the current thread.
|
|
17
|
+
# Mongoid.unit_of_work(disable: :current) do
|
|
18
|
+
# Person.create(title: "Sir")
|
|
19
|
+
# end
|
|
20
|
+
#
|
|
21
|
+
# @example Process with identity map disabled on all threads.
|
|
22
|
+
# Mongoid.unit_of_work(disable: :all) do
|
|
23
|
+
# Person.create(title: "Sir")
|
|
24
|
+
# end
|
|
25
|
+
#
|
|
26
|
+
# @param [ Hash ] options The disabling options.
|
|
27
|
+
#
|
|
28
|
+
# @option [ Symbol ] :disable Either :all or :current to indicate whether
|
|
29
|
+
# to temporarily disable the identity map on the current thread or all
|
|
30
|
+
# threads.
|
|
31
|
+
#
|
|
32
|
+
# @return [ Object ] The result of the block.
|
|
33
|
+
#
|
|
34
|
+
# @since 2.1.0
|
|
35
|
+
def unit_of_work(options = {})
|
|
36
|
+
disable = options[:disable]
|
|
37
|
+
begin
|
|
38
|
+
Threaded.disable_identity_map(disable) if disable
|
|
39
|
+
yield if block_given?
|
|
40
|
+
ensure
|
|
41
|
+
if disable
|
|
42
|
+
Threaded.enable_identity_map(disable)
|
|
43
|
+
else
|
|
44
|
+
IdentityMap.clear
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Are we currently using the identity map?
|
|
50
|
+
#
|
|
51
|
+
# @example Is the identity map currently enabled?
|
|
52
|
+
# Mongoid.using_identity_map?
|
|
53
|
+
#
|
|
54
|
+
# @return [ true, false ] If the identity map is in use.
|
|
55
|
+
#
|
|
56
|
+
# @since 3.0.0
|
|
57
|
+
def using_identity_map?
|
|
58
|
+
Mongoid.identity_map_enabled? && Threaded.identity_map_enabled?
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Validations
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Validations
|
|
4
4
|
|
|
5
5
|
# Validates that the specified attributes are not blank (as defined by
|
|
6
6
|
# Object#blank?).
|
|
@@ -28,13 +28,43 @@ module Mongoid #:nodoc:
|
|
|
28
28
|
def validate_each(document, attribute, value)
|
|
29
29
|
field = document.fields[attribute.to_s]
|
|
30
30
|
if field.try(:localized?) && !value.blank?
|
|
31
|
-
value.each_pair do |
|
|
32
|
-
document.errors.add(
|
|
31
|
+
value.each_pair do |_locale, _value|
|
|
32
|
+
document.errors.add(
|
|
33
|
+
attribute,
|
|
34
|
+
:blank_in_locale,
|
|
35
|
+
options.merge(location: _locale)
|
|
36
|
+
) if _value.blank?
|
|
37
|
+
end
|
|
38
|
+
elsif document.relations.has_key?(attribute.to_s)
|
|
39
|
+
if relation_or_fk_missing?(document, attribute, value)
|
|
40
|
+
document.errors.add(attribute, :blank, options)
|
|
33
41
|
end
|
|
34
42
|
else
|
|
35
43
|
document.errors.add(attribute, :blank, options) if value.blank?
|
|
36
44
|
end
|
|
37
45
|
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
# Returns true if the relation is blank or the foreign key is blank.
|
|
50
|
+
#
|
|
51
|
+
# @api private
|
|
52
|
+
#
|
|
53
|
+
# @example Check is the relation or fk is blank.
|
|
54
|
+
# validator.relation_or_fk_mising(doc, :name, "")
|
|
55
|
+
#
|
|
56
|
+
# @param [ Document ] doc The document.
|
|
57
|
+
# @param [ Symbol ] attr The attribute.
|
|
58
|
+
# @param [ Object ] value The value.
|
|
59
|
+
#
|
|
60
|
+
# @return [ true, false ] If the doc is missing.
|
|
61
|
+
#
|
|
62
|
+
# @since 3.0.0
|
|
63
|
+
def relation_or_fk_missing?(doc, attr, value)
|
|
64
|
+
return true if value.blank? && doc.send(attr).blank?
|
|
65
|
+
metadata = doc.relations[attr.to_s]
|
|
66
|
+
metadata.stores_foreign_key? && doc.send(metadata.foreign_key).blank?
|
|
67
|
+
end
|
|
38
68
|
end
|
|
39
69
|
end
|
|
40
70
|
end
|