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
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Threaded
|
2
|
+
module Mongoid
|
3
|
+
module Threaded
|
4
4
|
|
5
5
|
# This module contains convenience methods for document lifecycle that
|
6
6
|
# resides on thread locals.
|
@@ -22,10 +22,10 @@ module Mongoid #:nodoc:
|
|
22
22
|
#
|
23
23
|
# @since 2.2.0
|
24
24
|
def _assigning
|
25
|
-
Threaded.begin(
|
25
|
+
Threaded.begin("assign")
|
26
26
|
yield
|
27
27
|
ensure
|
28
|
-
Threaded.exit(
|
28
|
+
Threaded.exit("assign")
|
29
29
|
end
|
30
30
|
|
31
31
|
# Is the current thread in assigning mode?
|
@@ -37,7 +37,7 @@ module Mongoid #:nodoc:
|
|
37
37
|
#
|
38
38
|
# @since 2.1.0
|
39
39
|
def _assigning?
|
40
|
-
Threaded.executing?(
|
40
|
+
Threaded.executing?("assign")
|
41
41
|
end
|
42
42
|
|
43
43
|
# Execute a block in binding mode.
|
@@ -51,10 +51,10 @@ module Mongoid #:nodoc:
|
|
51
51
|
#
|
52
52
|
# @since 2.1.0
|
53
53
|
def _binding
|
54
|
-
Threaded.begin(
|
54
|
+
Threaded.begin("bind")
|
55
55
|
yield
|
56
56
|
ensure
|
57
|
-
Threaded.exit(
|
57
|
+
Threaded.exit("bind")
|
58
58
|
end
|
59
59
|
|
60
60
|
# Is the current thread in binding mode?
|
@@ -66,7 +66,7 @@ module Mongoid #:nodoc:
|
|
66
66
|
#
|
67
67
|
# @since 2.1.0
|
68
68
|
def _binding?
|
69
|
-
Threaded.executing?(
|
69
|
+
Threaded.executing?("bind")
|
70
70
|
end
|
71
71
|
|
72
72
|
# Execute a block in building mode.
|
@@ -80,10 +80,10 @@ module Mongoid #:nodoc:
|
|
80
80
|
#
|
81
81
|
# @since 2.1.0
|
82
82
|
def _building
|
83
|
-
Threaded.begin(
|
83
|
+
Threaded.begin("build")
|
84
84
|
yield
|
85
85
|
ensure
|
86
|
-
Threaded.exit(
|
86
|
+
Threaded.exit("build")
|
87
87
|
end
|
88
88
|
|
89
89
|
# Is the current thread in building mode?
|
@@ -95,7 +95,7 @@ module Mongoid #:nodoc:
|
|
95
95
|
#
|
96
96
|
# @since 2.1.0
|
97
97
|
def _building?
|
98
|
-
Threaded.executing?(
|
98
|
+
Threaded.executing?("build")
|
99
99
|
end
|
100
100
|
|
101
101
|
# Is the current thread in creating mode?
|
@@ -107,7 +107,7 @@ module Mongoid #:nodoc:
|
|
107
107
|
#
|
108
108
|
# @since 2.1.0
|
109
109
|
def _creating?
|
110
|
-
Threaded.executing?(
|
110
|
+
Threaded.executing?("create")
|
111
111
|
end
|
112
112
|
|
113
113
|
# Execute a block in loading mode.
|
@@ -121,10 +121,10 @@ module Mongoid #:nodoc:
|
|
121
121
|
#
|
122
122
|
# @since 2.3.2
|
123
123
|
def _loading
|
124
|
-
Threaded.begin(
|
124
|
+
Threaded.begin("load")
|
125
125
|
yield
|
126
126
|
ensure
|
127
|
-
Threaded.exit(
|
127
|
+
Threaded.exit("load")
|
128
128
|
end
|
129
129
|
|
130
130
|
# Is the current thread in loading mode?
|
@@ -136,7 +136,7 @@ module Mongoid #:nodoc:
|
|
136
136
|
#
|
137
137
|
# @since 2.3.2
|
138
138
|
def _loading?
|
139
|
-
Threaded.executing?(
|
139
|
+
Threaded.executing?("load")
|
140
140
|
end
|
141
141
|
|
142
142
|
# Execute a block in loading revision mode.
|
@@ -150,13 +150,13 @@ module Mongoid #:nodoc:
|
|
150
150
|
#
|
151
151
|
# @since 2.3.4
|
152
152
|
def _loading_revision
|
153
|
-
Threaded.begin(
|
153
|
+
Threaded.begin("load_revision")
|
154
154
|
yield
|
155
155
|
ensure
|
156
|
-
Threaded.exit(
|
156
|
+
Threaded.exit("load_revision")
|
157
157
|
end
|
158
158
|
|
159
|
-
module ClassMethods
|
159
|
+
module ClassMethods
|
160
160
|
|
161
161
|
# Execute a block in creating mode.
|
162
162
|
#
|
@@ -169,11 +169,10 @@ module Mongoid #:nodoc:
|
|
169
169
|
#
|
170
170
|
# @since 2.1.0
|
171
171
|
def _creating
|
172
|
-
Threaded.begin(
|
172
|
+
Threaded.begin("create")
|
173
173
|
yield
|
174
174
|
ensure
|
175
|
-
Threaded.exit(
|
176
|
-
Threaded.clear_safety_options!
|
175
|
+
Threaded.exit("create")
|
177
176
|
end
|
178
177
|
|
179
178
|
# Is the current thread in loading revision mode?
|
@@ -185,7 +184,7 @@ module Mongoid #:nodoc:
|
|
185
184
|
#
|
186
185
|
# @since 2.3.4
|
187
186
|
def _loading_revision?
|
188
|
-
Threaded.executing?(
|
187
|
+
Threaded.executing?("load_revision")
|
189
188
|
end
|
190
189
|
end
|
191
190
|
end
|
File without changes
|
data/lib/mongoid/timestamps.rb
CHANGED
@@ -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)
|
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,8 @@ module Mongoid #:nodoc:
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
included do
|
10
|
-
field :updated_at, :
|
11
|
-
set_callback :save, :before, :set_updated_at, :
|
10
|
+
field :updated_at, type: Time
|
11
|
+
set_callback :save, :before, :set_updated_at, if: :able_to_set_updated_at?
|
12
12
|
end
|
13
13
|
|
14
14
|
# Update the updated_at field on the Document to the current time.
|
@@ -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
|
data/lib/mongoid/validations.rb
CHANGED
@@ -6,7 +6,7 @@ require "mongoid/validations/length"
|
|
6
6
|
require "mongoid/validations/presence"
|
7
7
|
require "mongoid/validations/uniqueness"
|
8
8
|
|
9
|
-
module Mongoid
|
9
|
+
module Mongoid
|
10
10
|
|
11
11
|
# This module provides additional validations that ActiveModel does not
|
12
12
|
# provide: validates_associated and validates_uniqueness_of.
|
@@ -53,7 +53,7 @@ module Mongoid #:nodoc:
|
|
53
53
|
relation = send(attr)
|
54
54
|
exit_validate
|
55
55
|
relation.do_or_do_not(:in_memory) || relation
|
56
|
-
elsif fields[attribute]
|
56
|
+
elsif fields[attribute].try(:localized?)
|
57
57
|
attributes[attribute]
|
58
58
|
else
|
59
59
|
send(attr)
|
@@ -74,7 +74,7 @@ module Mongoid #:nodoc:
|
|
74
74
|
#
|
75
75
|
# @since 2.0.0.rc.6
|
76
76
|
def valid?(context = nil)
|
77
|
-
super context ? context : (
|
77
|
+
super context ? context : (new_record? ? :create : :update)
|
78
78
|
end
|
79
79
|
|
80
80
|
# Used to prevent infinite loops in associated validations.
|
@@ -89,22 +89,7 @@ module Mongoid #:nodoc:
|
|
89
89
|
Threaded.validated?(self)
|
90
90
|
end
|
91
91
|
|
92
|
-
module ClassMethods
|
93
|
-
|
94
|
-
# Validates whether or not a field matches a certain regular expression.
|
95
|
-
#
|
96
|
-
# @example
|
97
|
-
# class Person
|
98
|
-
# include Mongoid::Document
|
99
|
-
# field :website
|
100
|
-
#
|
101
|
-
# validates_format_of :website, :with => URI.regexp
|
102
|
-
# end
|
103
|
-
#
|
104
|
-
# @param [ Array ] *args The arguments to pass to the validator.
|
105
|
-
def validates_format_of(*args)
|
106
|
-
validates_with(FormatValidator, _merge_attributes(args))
|
107
|
-
end
|
92
|
+
module ClassMethods
|
108
93
|
|
109
94
|
# Validates whether or not an association is valid or not. Will correctly
|
110
95
|
# handle has one and has many associations.
|
@@ -192,6 +177,29 @@ module Mongoid #:nodoc:
|
|
192
177
|
validates_with(PresenceValidator, _merge_attributes(args))
|
193
178
|
end
|
194
179
|
|
180
|
+
# Add validation with the supplied validators forthe provided fields
|
181
|
+
# with options.
|
182
|
+
#
|
183
|
+
# @example Validate with a specific validator.
|
184
|
+
# validates_with MyValidator, on: :create
|
185
|
+
#
|
186
|
+
# @param [ Class<Array>, Hash ] *args The validator classes and options.
|
187
|
+
#
|
188
|
+
# @note See ActiveModel::Validations::With for full options. This is
|
189
|
+
# overridden to add autosave functionality when presence validation is
|
190
|
+
# added.
|
191
|
+
#
|
192
|
+
# @since 3.0.0
|
193
|
+
def validates_with(*args, &block)
|
194
|
+
if args.first == PresenceValidator
|
195
|
+
args.last[:attributes].each do |name|
|
196
|
+
metadata = relations[name.to_s]
|
197
|
+
autosave(metadata.merge!(autosave: true)) if metadata
|
198
|
+
end
|
199
|
+
end
|
200
|
+
super
|
201
|
+
end
|
202
|
+
|
195
203
|
protected
|
196
204
|
|
197
205
|
# Adds an associated validator for the relation if the validate option
|
@@ -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,17 +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?
|
33
37
|
end
|
34
38
|
elsif document.relations.has_key?(attribute.to_s)
|
35
|
-
if
|
39
|
+
if relation_or_fk_missing?(document, attribute, value)
|
36
40
|
document.errors.add(attribute, :blank, options)
|
37
41
|
end
|
38
42
|
else
|
39
43
|
document.errors.add(attribute, :blank, options) if value.blank?
|
40
44
|
end
|
41
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
|
42
68
|
end
|
43
69
|
end
|
44
70
|
end
|