mongoid-multi-db 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 +615 -0
- data/LICENSE +20 -0
- data/README.md +62 -0
- data/Rakefile +49 -0
- data/lib/config/locales/bg.yml +54 -0
- data/lib/config/locales/de.yml +54 -0
- data/lib/config/locales/en-GB.yml +55 -0
- data/lib/config/locales/en.yml +55 -0
- data/lib/config/locales/es.yml +52 -0
- data/lib/config/locales/fr.yml +55 -0
- data/lib/config/locales/hi.yml +46 -0
- data/lib/config/locales/hu.yml +57 -0
- data/lib/config/locales/id.yml +55 -0
- data/lib/config/locales/it.yml +52 -0
- data/lib/config/locales/ja.yml +50 -0
- data/lib/config/locales/kr.yml +47 -0
- data/lib/config/locales/nl.yml +52 -0
- data/lib/config/locales/pl.yml +52 -0
- data/lib/config/locales/pt-BR.yml +53 -0
- data/lib/config/locales/pt.yml +53 -0
- data/lib/config/locales/ro.yml +59 -0
- data/lib/config/locales/ru.yml +54 -0
- data/lib/config/locales/sv.yml +53 -0
- data/lib/config/locales/vi.yml +55 -0
- data/lib/config/locales/zh-CN.yml +46 -0
- data/lib/mongoid.rb +148 -0
- data/lib/mongoid/atomic.rb +230 -0
- data/lib/mongoid/atomic/modifiers.rb +243 -0
- data/lib/mongoid/atomic/paths.rb +3 -0
- data/lib/mongoid/atomic/paths/embedded.rb +43 -0
- data/lib/mongoid/atomic/paths/embedded/many.rb +44 -0
- data/lib/mongoid/atomic/paths/embedded/one.rb +43 -0
- data/lib/mongoid/atomic/paths/root.rb +40 -0
- data/lib/mongoid/attributes.rb +234 -0
- data/lib/mongoid/attributes/processing.rb +146 -0
- data/lib/mongoid/callbacks.rb +135 -0
- data/lib/mongoid/collection.rb +153 -0
- data/lib/mongoid/collection_proxy.rb +59 -0
- data/lib/mongoid/collections.rb +120 -0
- data/lib/mongoid/collections/master.rb +45 -0
- data/lib/mongoid/collections/operations.rb +44 -0
- data/lib/mongoid/collections/retry.rb +46 -0
- data/lib/mongoid/components.rb +96 -0
- data/lib/mongoid/config.rb +347 -0
- data/lib/mongoid/config/database.rb +186 -0
- data/lib/mongoid/config/replset_database.rb +82 -0
- data/lib/mongoid/connection_proxy.rb +30 -0
- data/lib/mongoid/contexts.rb +25 -0
- data/lib/mongoid/contexts/enumerable.rb +288 -0
- data/lib/mongoid/contexts/enumerable/sort.rb +43 -0
- data/lib/mongoid/contexts/mongo.rb +409 -0
- data/lib/mongoid/copyable.rb +48 -0
- data/lib/mongoid/criteria.rb +418 -0
- data/lib/mongoid/criterion/builder.rb +34 -0
- data/lib/mongoid/criterion/complex.rb +84 -0
- data/lib/mongoid/criterion/creational.rb +34 -0
- data/lib/mongoid/criterion/exclusion.rb +108 -0
- data/lib/mongoid/criterion/inclusion.rb +305 -0
- data/lib/mongoid/criterion/inspection.rb +22 -0
- data/lib/mongoid/criterion/optional.rb +232 -0
- data/lib/mongoid/criterion/selector.rb +153 -0
- data/lib/mongoid/cursor.rb +86 -0
- data/lib/mongoid/database_proxy.rb +97 -0
- data/lib/mongoid/default_scope.rb +36 -0
- data/lib/mongoid/dirty.rb +110 -0
- data/lib/mongoid/document.rb +280 -0
- data/lib/mongoid/errors.rb +17 -0
- data/lib/mongoid/errors/callback.rb +26 -0
- data/lib/mongoid/errors/document_not_found.rb +28 -0
- data/lib/mongoid/errors/eager_load.rb +25 -0
- data/lib/mongoid/errors/invalid_collection.rb +18 -0
- data/lib/mongoid/errors/invalid_database.rb +19 -0
- data/lib/mongoid/errors/invalid_field.rb +18 -0
- data/lib/mongoid/errors/invalid_find.rb +19 -0
- data/lib/mongoid/errors/invalid_options.rb +28 -0
- data/lib/mongoid/errors/invalid_time.rb +25 -0
- data/lib/mongoid/errors/invalid_type.rb +25 -0
- data/lib/mongoid/errors/mixed_relations.rb +37 -0
- data/lib/mongoid/errors/mongoid_error.rb +26 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +20 -0
- data/lib/mongoid/errors/unsaved_document.rb +23 -0
- data/lib/mongoid/errors/unsupported_version.rb +20 -0
- data/lib/mongoid/errors/validations.rb +23 -0
- data/lib/mongoid/extensions.rb +82 -0
- data/lib/mongoid/extensions/array/deletion.rb +29 -0
- data/lib/mongoid/extensions/false_class/equality.rb +26 -0
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +45 -0
- data/lib/mongoid/extensions/hash/scoping.rb +25 -0
- data/lib/mongoid/extensions/integer/checks.rb +23 -0
- data/lib/mongoid/extensions/nil/collectionization.rb +23 -0
- data/lib/mongoid/extensions/object/checks.rb +29 -0
- data/lib/mongoid/extensions/object/reflections.rb +48 -0
- data/lib/mongoid/extensions/object/substitutable.rb +15 -0
- data/lib/mongoid/extensions/object/yoda.rb +44 -0
- data/lib/mongoid/extensions/object_id/conversions.rb +60 -0
- data/lib/mongoid/extensions/proc/scoping.rb +25 -0
- data/lib/mongoid/extensions/string/checks.rb +36 -0
- data/lib/mongoid/extensions/string/conversions.rb +22 -0
- data/lib/mongoid/extensions/string/inflections.rb +118 -0
- data/lib/mongoid/extensions/symbol/checks.rb +23 -0
- data/lib/mongoid/extensions/symbol/inflections.rb +66 -0
- data/lib/mongoid/extensions/true_class/equality.rb +26 -0
- data/lib/mongoid/extras.rb +31 -0
- data/lib/mongoid/factory.rb +46 -0
- data/lib/mongoid/fields.rb +332 -0
- data/lib/mongoid/fields/mappings.rb +41 -0
- data/lib/mongoid/fields/serializable.rb +201 -0
- data/lib/mongoid/fields/serializable/array.rb +49 -0
- data/lib/mongoid/fields/serializable/big_decimal.rb +42 -0
- data/lib/mongoid/fields/serializable/bignum.rb +10 -0
- data/lib/mongoid/fields/serializable/binary.rb +11 -0
- data/lib/mongoid/fields/serializable/boolean.rb +43 -0
- data/lib/mongoid/fields/serializable/date.rb +51 -0
- data/lib/mongoid/fields/serializable/date_time.rb +28 -0
- data/lib/mongoid/fields/serializable/fixnum.rb +10 -0
- data/lib/mongoid/fields/serializable/float.rb +32 -0
- data/lib/mongoid/fields/serializable/foreign_keys/array.rb +42 -0
- data/lib/mongoid/fields/serializable/foreign_keys/object.rb +47 -0
- data/lib/mongoid/fields/serializable/hash.rb +11 -0
- data/lib/mongoid/fields/serializable/integer.rb +44 -0
- data/lib/mongoid/fields/serializable/localized.rb +41 -0
- data/lib/mongoid/fields/serializable/nil_class.rb +38 -0
- data/lib/mongoid/fields/serializable/object.rb +11 -0
- data/lib/mongoid/fields/serializable/object_id.rb +31 -0
- data/lib/mongoid/fields/serializable/range.rb +42 -0
- data/lib/mongoid/fields/serializable/set.rb +42 -0
- data/lib/mongoid/fields/serializable/string.rb +27 -0
- data/lib/mongoid/fields/serializable/symbol.rb +27 -0
- data/lib/mongoid/fields/serializable/time.rb +23 -0
- data/lib/mongoid/fields/serializable/time_with_zone.rb +23 -0
- data/lib/mongoid/fields/serializable/timekeeping.rb +106 -0
- data/lib/mongoid/finders.rb +152 -0
- data/lib/mongoid/hierarchy.rb +120 -0
- data/lib/mongoid/identity.rb +92 -0
- data/lib/mongoid/identity_map.rb +119 -0
- data/lib/mongoid/indexes.rb +54 -0
- data/lib/mongoid/inspection.rb +54 -0
- data/lib/mongoid/javascript.rb +20 -0
- data/lib/mongoid/javascript/functions.yml +63 -0
- data/lib/mongoid/json.rb +16 -0
- data/lib/mongoid/keys.rb +144 -0
- data/lib/mongoid/logger.rb +39 -0
- data/lib/mongoid/matchers.rb +32 -0
- data/lib/mongoid/matchers/all.rb +21 -0
- data/lib/mongoid/matchers/and.rb +30 -0
- data/lib/mongoid/matchers/default.rb +70 -0
- data/lib/mongoid/matchers/exists.rb +23 -0
- data/lib/mongoid/matchers/gt.rb +21 -0
- data/lib/mongoid/matchers/gte.rb +21 -0
- data/lib/mongoid/matchers/in.rb +21 -0
- data/lib/mongoid/matchers/lt.rb +21 -0
- data/lib/mongoid/matchers/lte.rb +21 -0
- data/lib/mongoid/matchers/ne.rb +21 -0
- data/lib/mongoid/matchers/nin.rb +21 -0
- data/lib/mongoid/matchers/or.rb +33 -0
- data/lib/mongoid/matchers/size.rb +21 -0
- data/lib/mongoid/matchers/strategies.rb +93 -0
- data/lib/mongoid/multi_database.rb +31 -0
- data/lib/mongoid/multi_parameter_attributes.rb +106 -0
- data/lib/mongoid/named_scope.rb +146 -0
- data/lib/mongoid/nested_attributes.rb +54 -0
- data/lib/mongoid/observer.rb +170 -0
- data/lib/mongoid/paranoia.rb +158 -0
- data/lib/mongoid/persistence.rb +264 -0
- data/lib/mongoid/persistence/atomic.rb +223 -0
- data/lib/mongoid/persistence/atomic/add_to_set.rb +35 -0
- data/lib/mongoid/persistence/atomic/bit.rb +37 -0
- data/lib/mongoid/persistence/atomic/inc.rb +31 -0
- data/lib/mongoid/persistence/atomic/operation.rb +85 -0
- data/lib/mongoid/persistence/atomic/pop.rb +34 -0
- data/lib/mongoid/persistence/atomic/pull.rb +34 -0
- data/lib/mongoid/persistence/atomic/pull_all.rb +34 -0
- data/lib/mongoid/persistence/atomic/push.rb +31 -0
- data/lib/mongoid/persistence/atomic/push_all.rb +31 -0
- data/lib/mongoid/persistence/atomic/rename.rb +31 -0
- data/lib/mongoid/persistence/atomic/sets.rb +30 -0
- data/lib/mongoid/persistence/atomic/unset.rb +28 -0
- data/lib/mongoid/persistence/deletion.rb +32 -0
- data/lib/mongoid/persistence/insertion.rb +41 -0
- data/lib/mongoid/persistence/modification.rb +37 -0
- data/lib/mongoid/persistence/operations.rb +211 -0
- data/lib/mongoid/persistence/operations/embedded/insert.rb +42 -0
- data/lib/mongoid/persistence/operations/embedded/remove.rb +40 -0
- data/lib/mongoid/persistence/operations/insert.rb +34 -0
- data/lib/mongoid/persistence/operations/remove.rb +33 -0
- data/lib/mongoid/persistence/operations/update.rb +64 -0
- data/lib/mongoid/railtie.rb +126 -0
- data/lib/mongoid/railties/database.rake +182 -0
- data/lib/mongoid/railties/document.rb +12 -0
- data/lib/mongoid/relations.rb +144 -0
- data/lib/mongoid/relations/accessors.rb +138 -0
- data/lib/mongoid/relations/auto_save.rb +38 -0
- data/lib/mongoid/relations/binding.rb +26 -0
- data/lib/mongoid/relations/bindings.rb +9 -0
- data/lib/mongoid/relations/bindings/embedded/in.rb +69 -0
- data/lib/mongoid/relations/bindings/embedded/many.rb +93 -0
- data/lib/mongoid/relations/bindings/embedded/one.rb +61 -0
- data/lib/mongoid/relations/bindings/referenced/in.rb +76 -0
- data/lib/mongoid/relations/bindings/referenced/many.rb +54 -0
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +51 -0
- data/lib/mongoid/relations/bindings/referenced/one.rb +58 -0
- data/lib/mongoid/relations/builder.rb +57 -0
- data/lib/mongoid/relations/builders.rb +83 -0
- data/lib/mongoid/relations/builders/embedded/in.rb +29 -0
- data/lib/mongoid/relations/builders/embedded/many.rb +40 -0
- data/lib/mongoid/relations/builders/embedded/one.rb +30 -0
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +110 -0
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +135 -0
- data/lib/mongoid/relations/builders/referenced/in.rb +26 -0
- data/lib/mongoid/relations/builders/referenced/many.rb +27 -0
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +38 -0
- data/lib/mongoid/relations/builders/referenced/one.rb +26 -0
- data/lib/mongoid/relations/cascading.rb +56 -0
- data/lib/mongoid/relations/cascading/delete.rb +19 -0
- data/lib/mongoid/relations/cascading/destroy.rb +26 -0
- data/lib/mongoid/relations/cascading/nullify.rb +18 -0
- data/lib/mongoid/relations/cascading/strategy.rb +26 -0
- data/lib/mongoid/relations/constraint.rb +42 -0
- data/lib/mongoid/relations/conversions.rb +35 -0
- data/lib/mongoid/relations/cyclic.rb +103 -0
- data/lib/mongoid/relations/embedded/atomic.rb +89 -0
- data/lib/mongoid/relations/embedded/atomic/operation.rb +63 -0
- data/lib/mongoid/relations/embedded/atomic/pull.rb +65 -0
- data/lib/mongoid/relations/embedded/atomic/push_all.rb +59 -0
- data/lib/mongoid/relations/embedded/atomic/set.rb +61 -0
- data/lib/mongoid/relations/embedded/atomic/unset.rb +41 -0
- data/lib/mongoid/relations/embedded/in.rb +220 -0
- data/lib/mongoid/relations/embedded/many.rb +560 -0
- data/lib/mongoid/relations/embedded/one.rb +206 -0
- data/lib/mongoid/relations/embedded/sort.rb +31 -0
- data/lib/mongoid/relations/macros.rb +310 -0
- data/lib/mongoid/relations/many.rb +135 -0
- data/lib/mongoid/relations/metadata.rb +919 -0
- data/lib/mongoid/relations/nested_builder.rb +75 -0
- data/lib/mongoid/relations/one.rb +36 -0
- data/lib/mongoid/relations/options.rb +47 -0
- data/lib/mongoid/relations/polymorphic.rb +40 -0
- data/lib/mongoid/relations/proxy.rb +145 -0
- data/lib/mongoid/relations/referenced/batch.rb +72 -0
- data/lib/mongoid/relations/referenced/batch/insert.rb +57 -0
- data/lib/mongoid/relations/referenced/in.rb +262 -0
- data/lib/mongoid/relations/referenced/many.rb +623 -0
- data/lib/mongoid/relations/referenced/many_to_many.rb +396 -0
- data/lib/mongoid/relations/referenced/one.rb +272 -0
- data/lib/mongoid/relations/reflections.rb +62 -0
- data/lib/mongoid/relations/synchronization.rb +153 -0
- data/lib/mongoid/relations/targets.rb +2 -0
- data/lib/mongoid/relations/targets/enumerable.rb +372 -0
- data/lib/mongoid/reloading.rb +91 -0
- data/lib/mongoid/safety.rb +105 -0
- data/lib/mongoid/scope.rb +31 -0
- data/lib/mongoid/serialization.rb +134 -0
- data/lib/mongoid/sharding.rb +61 -0
- data/lib/mongoid/state.rb +97 -0
- data/lib/mongoid/threaded.rb +530 -0
- data/lib/mongoid/threaded/lifecycle.rb +192 -0
- data/lib/mongoid/timestamps.rb +15 -0
- data/lib/mongoid/timestamps/created.rb +24 -0
- data/lib/mongoid/timestamps/timeless.rb +50 -0
- data/lib/mongoid/timestamps/updated.rb +26 -0
- data/lib/mongoid/validations.rb +140 -0
- data/lib/mongoid/validations/associated.rb +46 -0
- data/lib/mongoid/validations/uniqueness.rb +145 -0
- data/lib/mongoid/version.rb +4 -0
- data/lib/mongoid/versioning.rb +185 -0
- data/lib/rack/mongoid.rb +2 -0
- data/lib/rack/mongoid/middleware/identity_map.rb +38 -0
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +20 -0
- data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +19 -0
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +17 -0
- data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +4 -0
- data/lib/rails/generators/mongoid_generator.rb +70 -0
- data/lib/rails/mongoid.rb +91 -0
- metadata +465 -0
@@ -0,0 +1,192 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Threaded #:nodoc:
|
4
|
+
|
5
|
+
# This module contains convenience methods for document lifecycle that
|
6
|
+
# resides on thread locals.
|
7
|
+
module Lifecycle
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
# Begin the assignment of attributes. While in this block embedded
|
13
|
+
# documents will not autosave themselves in order to allow the document to
|
14
|
+
# be in a valid state.
|
15
|
+
#
|
16
|
+
# @example Execute the assignment.
|
17
|
+
# _assigning do
|
18
|
+
# person.attributes = { :addresses => [ address ] }
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# @return [ Object ] The yielded value.
|
22
|
+
#
|
23
|
+
# @since 2.2.0
|
24
|
+
def _assigning
|
25
|
+
Threaded.begin_assign
|
26
|
+
yield
|
27
|
+
ensure
|
28
|
+
Threaded.exit_assign
|
29
|
+
end
|
30
|
+
|
31
|
+
# Is the current thread in assigning mode?
|
32
|
+
#
|
33
|
+
# @example Is the current thread in assigning mode?
|
34
|
+
# proxy._assigning?
|
35
|
+
#
|
36
|
+
# @return [ true, false ] If the thread is assigning.
|
37
|
+
#
|
38
|
+
# @since 2.1.0
|
39
|
+
def _assigning?
|
40
|
+
Threaded.assigning?
|
41
|
+
end
|
42
|
+
|
43
|
+
# Execute a block in binding mode.
|
44
|
+
#
|
45
|
+
# @example Execute in binding mode.
|
46
|
+
# binding do
|
47
|
+
# relation.push(doc)
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# @return [ Object ] The return value of the block.
|
51
|
+
#
|
52
|
+
# @since 2.1.0
|
53
|
+
def _binding
|
54
|
+
Threaded.begin_bind
|
55
|
+
yield
|
56
|
+
ensure
|
57
|
+
Threaded.exit_bind
|
58
|
+
end
|
59
|
+
|
60
|
+
# Is the current thread in binding mode?
|
61
|
+
#
|
62
|
+
# @example Is the current thread in binding mode?
|
63
|
+
# proxy.binding?
|
64
|
+
#
|
65
|
+
# @return [ true, false ] If the thread is binding.
|
66
|
+
#
|
67
|
+
# @since 2.1.0
|
68
|
+
def _binding?
|
69
|
+
Threaded.binding?
|
70
|
+
end
|
71
|
+
|
72
|
+
# Execute a block in building mode.
|
73
|
+
#
|
74
|
+
# @example Execute in building mode.
|
75
|
+
# _building do
|
76
|
+
# relation.push(doc)
|
77
|
+
# end
|
78
|
+
#
|
79
|
+
# @return [ Object ] The return value of the block.
|
80
|
+
#
|
81
|
+
# @since 2.1.0
|
82
|
+
def _building
|
83
|
+
Threaded.begin_build
|
84
|
+
yield
|
85
|
+
ensure
|
86
|
+
Threaded.exit_build
|
87
|
+
end
|
88
|
+
|
89
|
+
# Is the current thread in building mode?
|
90
|
+
#
|
91
|
+
# @example Is the current thread in building mode?
|
92
|
+
# proxy._building?
|
93
|
+
#
|
94
|
+
# @return [ true, false ] If the thread is building.
|
95
|
+
#
|
96
|
+
# @since 2.1.0
|
97
|
+
def _building?
|
98
|
+
Threaded.building?
|
99
|
+
end
|
100
|
+
|
101
|
+
# Is the current thread in creating mode?
|
102
|
+
#
|
103
|
+
# @example Is the current thread in creating mode?
|
104
|
+
# proxy.creating?
|
105
|
+
#
|
106
|
+
# @return [ true, false ] If the thread is creating.
|
107
|
+
#
|
108
|
+
# @since 2.1.0
|
109
|
+
def _creating?
|
110
|
+
Threaded.creating?
|
111
|
+
end
|
112
|
+
|
113
|
+
# Execute a block in loading mode.
|
114
|
+
#
|
115
|
+
# @example Execute in loading mode.
|
116
|
+
# _loading do
|
117
|
+
# relation.push(doc)
|
118
|
+
# end
|
119
|
+
#
|
120
|
+
# @return [ Object ] The return value of the block.
|
121
|
+
#
|
122
|
+
# @since 2.3.2
|
123
|
+
def _loading
|
124
|
+
Threaded.begin_load
|
125
|
+
yield
|
126
|
+
ensure
|
127
|
+
Threaded.exit_load
|
128
|
+
end
|
129
|
+
|
130
|
+
# Is the current thread in loading mode?
|
131
|
+
#
|
132
|
+
# @example Is the current thread in loading mode?
|
133
|
+
# proxy._loading?
|
134
|
+
#
|
135
|
+
# @return [ true, false ] If the thread is loading.
|
136
|
+
#
|
137
|
+
# @since 2.3.2
|
138
|
+
def _loading?
|
139
|
+
Threaded.loading?
|
140
|
+
end
|
141
|
+
|
142
|
+
# Execute a block in loading revision mode.
|
143
|
+
#
|
144
|
+
# @example Execute in loading revision mode.
|
145
|
+
# _loading_revision do
|
146
|
+
# load_revision
|
147
|
+
# end
|
148
|
+
#
|
149
|
+
# @return [ Object ] The return value of the block.
|
150
|
+
#
|
151
|
+
# @since 2.3.4
|
152
|
+
def _loading_revision
|
153
|
+
Threaded.begin_load_revision
|
154
|
+
yield
|
155
|
+
ensure
|
156
|
+
Threaded.exit_load_revision
|
157
|
+
end
|
158
|
+
|
159
|
+
module ClassMethods #:nodoc:
|
160
|
+
|
161
|
+
# Execute a block in creating mode.
|
162
|
+
#
|
163
|
+
# @example Execute in creating mode.
|
164
|
+
# creating do
|
165
|
+
# relation.push(doc)
|
166
|
+
# end
|
167
|
+
#
|
168
|
+
# @return [ Object ] The return value of the block.
|
169
|
+
#
|
170
|
+
# @since 2.1.0
|
171
|
+
def _creating
|
172
|
+
Threaded.begin_create
|
173
|
+
yield
|
174
|
+
ensure
|
175
|
+
Threaded.exit_create
|
176
|
+
end
|
177
|
+
|
178
|
+
# Is the current thread in loading revision mode?
|
179
|
+
#
|
180
|
+
# @example Is the current thread in loading revision mode?
|
181
|
+
# proxy._loading_revision?
|
182
|
+
#
|
183
|
+
# @return [ true, false ] If the thread is loading a revision.
|
184
|
+
#
|
185
|
+
# @since 2.3.4
|
186
|
+
def _loading_revision?
|
187
|
+
Threaded.loading_revision?
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "mongoid/timestamps/created"
|
3
|
+
require "mongoid/timestamps/updated"
|
4
|
+
require "mongoid/timestamps/timeless"
|
5
|
+
|
6
|
+
module Mongoid #:nodoc:
|
7
|
+
|
8
|
+
# This module handles the behaviour for setting up document created at and
|
9
|
+
# updated at timestamps.
|
10
|
+
module Timestamps
|
11
|
+
extend ActiveSupport::Concern
|
12
|
+
include Created
|
13
|
+
include Updated
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Timestamps
|
4
|
+
# This module handles the behaviour for setting up document created at
|
5
|
+
# timestamp.
|
6
|
+
module Created
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
field :created_at, :type => Time
|
11
|
+
set_callback :create, :before, :set_created_at, :if => :timestamping?
|
12
|
+
end
|
13
|
+
|
14
|
+
# Update the created_at field on the Document to the current time. This is
|
15
|
+
# only called on create.
|
16
|
+
#
|
17
|
+
# @example Set the created at time.
|
18
|
+
# person.set_created_at
|
19
|
+
def set_created_at
|
20
|
+
self.created_at = Time.now.utc if !created_at
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Timestamps
|
4
|
+
|
5
|
+
# This module adds behaviour for turning off timestamping in single or
|
6
|
+
# multiple calls.
|
7
|
+
module Timeless
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
# Begin an execution that should skip timestamping.
|
11
|
+
#
|
12
|
+
# @example Save a document but don't timestamp.
|
13
|
+
# person.timeless.save
|
14
|
+
#
|
15
|
+
# @return [ Document ] The document this was called on.
|
16
|
+
#
|
17
|
+
# @since 2.3.0
|
18
|
+
def timeless
|
19
|
+
tap { Threaded.timeless = true }
|
20
|
+
end
|
21
|
+
|
22
|
+
# Are we currently timestamping?
|
23
|
+
#
|
24
|
+
# @example Should timestamps be applied?
|
25
|
+
# person.timestamping?
|
26
|
+
#
|
27
|
+
# @return [ true, false ] If the current thread is timestamping.
|
28
|
+
#
|
29
|
+
# @since 2.3.0
|
30
|
+
def timestamping?
|
31
|
+
Threaded.timestamping?
|
32
|
+
end
|
33
|
+
|
34
|
+
module ClassMethods #:nodoc
|
35
|
+
|
36
|
+
# Begin an execution that should skip timestamping.
|
37
|
+
#
|
38
|
+
# @example Create a document but don't timestamp.
|
39
|
+
# Person.timeless.create(:title => "Sir")
|
40
|
+
#
|
41
|
+
# @return [ Class ] The class this was called on.
|
42
|
+
#
|
43
|
+
# @since 2.3.0
|
44
|
+
def timeless
|
45
|
+
tap { Threaded.timeless = true }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
module Timestamps
|
4
|
+
# This module handles the behaviour for setting up document updated at
|
5
|
+
# timestamp.
|
6
|
+
module Updated
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
field :updated_at, :type => Time, :versioned => false
|
11
|
+
set_callback :save, :before, :set_updated_at, :if => Proc.new { |doc|
|
12
|
+
doc.timestamping? && (doc.new_record? || doc.changed?)
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
# Update the updated_at field on the Document to the current time.
|
17
|
+
# This is only called on create and on save.
|
18
|
+
#
|
19
|
+
# @example Set the updated at time.
|
20
|
+
# person.set_updated_at
|
21
|
+
def set_updated_at
|
22
|
+
self.updated_at = Time.now.utc unless updated_at_changed?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "mongoid/validations/associated"
|
3
|
+
require "mongoid/validations/uniqueness"
|
4
|
+
|
5
|
+
module Mongoid #:nodoc:
|
6
|
+
|
7
|
+
# This module provides additional validations that ActiveModel does not
|
8
|
+
# provide: validates_associated and validates_uniqueness_of.
|
9
|
+
module Validations
|
10
|
+
extend ActiveSupport::Concern
|
11
|
+
include ActiveModel::Validations
|
12
|
+
|
13
|
+
# Begin the associated validation.
|
14
|
+
#
|
15
|
+
# @example Begin validation.
|
16
|
+
# document.begin_validate
|
17
|
+
#
|
18
|
+
# @since 2.1.9
|
19
|
+
def begin_validate
|
20
|
+
Threaded.begin_validate(self)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Exit the associated validation.
|
24
|
+
#
|
25
|
+
# @example Exit validation.
|
26
|
+
# document.exit_validate
|
27
|
+
#
|
28
|
+
# @since 2.1.9
|
29
|
+
def exit_validate
|
30
|
+
Threaded.exit_validate(self)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Overrides the default ActiveModel behaviour since we need to handle
|
34
|
+
# validations of relations slightly different than just calling the
|
35
|
+
# getter.
|
36
|
+
#
|
37
|
+
# @example Read the value.
|
38
|
+
# person.read_attribute_for_validation(:addresses)
|
39
|
+
#
|
40
|
+
# @param [ Symbol ] attr The name of the field or relation.
|
41
|
+
#
|
42
|
+
# @return [ Object ] The value of the field or the relation.
|
43
|
+
#
|
44
|
+
# @since 2.0.0.rc.1
|
45
|
+
def read_attribute_for_validation(attr)
|
46
|
+
if relations[attr.to_s]
|
47
|
+
begin_validate
|
48
|
+
relation = send(attr)
|
49
|
+
exit_validate
|
50
|
+
relation.do_or_do_not(:in_memory) || relation
|
51
|
+
else
|
52
|
+
send(attr)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Determine if the document is valid.
|
57
|
+
#
|
58
|
+
# @example Is the document valid?
|
59
|
+
# person.valid?
|
60
|
+
#
|
61
|
+
# @example Is the document valid in a context?
|
62
|
+
# person.valid?(:create)
|
63
|
+
#
|
64
|
+
# @param [ Symbol ] context The optional validation context.
|
65
|
+
#
|
66
|
+
# @return [ true, false ] True if valid, false if not.
|
67
|
+
#
|
68
|
+
# @since 2.0.0.rc.6
|
69
|
+
def valid?(context = nil)
|
70
|
+
super context ? context : (new? ? :create : :update)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Used to prevent infinite loops in associated validations.
|
74
|
+
#
|
75
|
+
# @example Is the document validated?
|
76
|
+
# document.validated?
|
77
|
+
#
|
78
|
+
# @return [ true, false ] Has the document already been validated?
|
79
|
+
#
|
80
|
+
# @since 2.0.0.rc.2
|
81
|
+
def validated?
|
82
|
+
Threaded.validated?(self)
|
83
|
+
end
|
84
|
+
|
85
|
+
module ClassMethods #:nodoc:
|
86
|
+
|
87
|
+
# Validates whether or not an association is valid or not. Will correctly
|
88
|
+
# handle has one and has many associations.
|
89
|
+
#
|
90
|
+
# @example
|
91
|
+
#
|
92
|
+
# class Person
|
93
|
+
# include Mongoid::Document
|
94
|
+
# embeds_one :name
|
95
|
+
# embeds_many :addresses
|
96
|
+
#
|
97
|
+
# validates_associated :name, :addresses
|
98
|
+
# end
|
99
|
+
#
|
100
|
+
# @param [ Array ] *args The arguments to pass to the validator.
|
101
|
+
def validates_associated(*args)
|
102
|
+
validates_with(AssociatedValidator, _merge_attributes(args))
|
103
|
+
end
|
104
|
+
|
105
|
+
# Validates whether or not a field is unique against the documents in the
|
106
|
+
# database.
|
107
|
+
#
|
108
|
+
# @example
|
109
|
+
#
|
110
|
+
# class Person
|
111
|
+
# include Mongoid::Document
|
112
|
+
# field :title
|
113
|
+
#
|
114
|
+
# validates_uniqueness_of :title
|
115
|
+
# end
|
116
|
+
#
|
117
|
+
# @param [ Array ] *args The arguments to pass to the validator.
|
118
|
+
def validates_uniqueness_of(*args)
|
119
|
+
validates_with(UniquenessValidator, _merge_attributes(args))
|
120
|
+
end
|
121
|
+
|
122
|
+
protected
|
123
|
+
|
124
|
+
# Adds an associated validator for the relation if the validate option
|
125
|
+
# was not provided or set to true.
|
126
|
+
#
|
127
|
+
# @example Set up validation.
|
128
|
+
# Person.validates_relation(metadata)
|
129
|
+
#
|
130
|
+
# @param [ Metadata ] metadata The relation metadata.
|
131
|
+
#
|
132
|
+
# @since 2.0.0.rc.1
|
133
|
+
def validates_relation(metadata)
|
134
|
+
if metadata.validate?
|
135
|
+
validates_associated(metadata.name)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|