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,530 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "mongoid/threaded/lifecycle"
|
3
|
+
|
4
|
+
module Mongoid #:nodoc:
|
5
|
+
|
6
|
+
# This module contains logic for easy access to objects that have a lifecycle
|
7
|
+
# on the current thread.
|
8
|
+
module Threaded
|
9
|
+
extend self
|
10
|
+
|
11
|
+
# Begins a assigning block.
|
12
|
+
#
|
13
|
+
# @example Begin the assign.
|
14
|
+
# Threaded.begin_assign
|
15
|
+
#
|
16
|
+
# @return [ true ] Always true.
|
17
|
+
#
|
18
|
+
# @since 2.1.9
|
19
|
+
def begin_assign
|
20
|
+
assign_stack.push(true)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Begins a binding block.
|
24
|
+
#
|
25
|
+
# @example Begin the bind.
|
26
|
+
# Threaded.begin_bind
|
27
|
+
#
|
28
|
+
# @return [ true ] Always true.
|
29
|
+
#
|
30
|
+
# @since 2.1.9
|
31
|
+
def begin_bind
|
32
|
+
bind_stack.push(true)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Begins a building block.
|
36
|
+
#
|
37
|
+
# @example Begin the build.
|
38
|
+
# Threaded.begin_build
|
39
|
+
#
|
40
|
+
# @return [ true ] Always true.
|
41
|
+
#
|
42
|
+
# @since 2.1.9
|
43
|
+
def begin_build
|
44
|
+
build_stack.push(true)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Begins a creating block.
|
48
|
+
#
|
49
|
+
# @example Begin the create.
|
50
|
+
# Threaded.begin_create
|
51
|
+
#
|
52
|
+
# @return [ true ] Always true.
|
53
|
+
#
|
54
|
+
# @since 2.1.9
|
55
|
+
def begin_create
|
56
|
+
create_stack.push(true)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Begins a loading block.
|
60
|
+
#
|
61
|
+
# @example Begin the load.
|
62
|
+
# Threaded.begin_load
|
63
|
+
#
|
64
|
+
# @return [ true ] Always true.
|
65
|
+
#
|
66
|
+
# @since 2.3.2
|
67
|
+
def begin_load
|
68
|
+
load_stack.push(true)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Begins a loading revision block.
|
72
|
+
#
|
73
|
+
# @example Begin the revision load.
|
74
|
+
# Threaded.begin_load_revision
|
75
|
+
#
|
76
|
+
# @return [ true ] Always true.
|
77
|
+
#
|
78
|
+
# @since 2.3.4
|
79
|
+
def begin_load_revision
|
80
|
+
load_revision_stack.push(true)
|
81
|
+
end
|
82
|
+
|
83
|
+
# Begin validating a document on the current thread.
|
84
|
+
#
|
85
|
+
# @example Begin validation.
|
86
|
+
# Threaded.begin_validate(doc)
|
87
|
+
#
|
88
|
+
# @param [ Document ] document The document to validate.
|
89
|
+
#
|
90
|
+
# @since 2.1.9
|
91
|
+
def begin_validate(document)
|
92
|
+
validations_for(document.class).push(document.id)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Is the current thread in assigning mode?
|
96
|
+
#
|
97
|
+
# @example Is the thread in assigning mode?
|
98
|
+
# Threaded.assigning?
|
99
|
+
#
|
100
|
+
# @return [ true, false ] If the thread is in assigning mode?
|
101
|
+
#
|
102
|
+
# @since 2.1.0
|
103
|
+
def assigning?
|
104
|
+
!assign_stack.empty?
|
105
|
+
end
|
106
|
+
|
107
|
+
# Is the current thread in binding mode?
|
108
|
+
#
|
109
|
+
# @example Is the thread in binding mode?
|
110
|
+
# Threaded.binding?
|
111
|
+
#
|
112
|
+
# @return [ true, false ] If the thread is in binding mode?
|
113
|
+
#
|
114
|
+
# @since 2.1.0
|
115
|
+
def binding?
|
116
|
+
!bind_stack.empty?
|
117
|
+
end
|
118
|
+
|
119
|
+
# Is the current thread in building mode?
|
120
|
+
#
|
121
|
+
# @example Is the thread in building mode?
|
122
|
+
# Threaded.building?
|
123
|
+
#
|
124
|
+
# @return [ true, false ] If the thread is in building mode?
|
125
|
+
#
|
126
|
+
# @since 2.1.0
|
127
|
+
def building?
|
128
|
+
!build_stack.empty?
|
129
|
+
end
|
130
|
+
|
131
|
+
# Is the current thread in creating mode?
|
132
|
+
#
|
133
|
+
# @example Is the thread in creating mode?
|
134
|
+
# Threaded.creating?
|
135
|
+
#
|
136
|
+
# @return [ true, false ] If the thread is in creating mode?
|
137
|
+
#
|
138
|
+
# @since 2.1.0
|
139
|
+
def creating?
|
140
|
+
!create_stack.empty?
|
141
|
+
end
|
142
|
+
|
143
|
+
# Is the current thread in loading mode?
|
144
|
+
#
|
145
|
+
# @example Is the thread in loading mode?
|
146
|
+
# Threaded.loading?
|
147
|
+
#
|
148
|
+
# @return [ true, false ] If the thread is in loading mode?
|
149
|
+
#
|
150
|
+
# @since 2.3.2
|
151
|
+
def loading?
|
152
|
+
!load_stack.empty?
|
153
|
+
end
|
154
|
+
|
155
|
+
# Is the current thread in revision load mode?
|
156
|
+
#
|
157
|
+
# @example Is the thread in revision load mode?
|
158
|
+
# Threaded.loading_revision?
|
159
|
+
#
|
160
|
+
# @return [ true, false ] If the thread is in revision load mode?
|
161
|
+
#
|
162
|
+
# @since 2.3.4
|
163
|
+
def loading_revision?
|
164
|
+
!load_revision_stack.empty?
|
165
|
+
end
|
166
|
+
|
167
|
+
# Get the assign stack for the current thread. Is simply an array of calls
|
168
|
+
# to Mongoid's assigning method.
|
169
|
+
#
|
170
|
+
# @example Get the assign stack.
|
171
|
+
# Threaded.assign_stack
|
172
|
+
#
|
173
|
+
# @return [ Array ] The array of assign calls.
|
174
|
+
#
|
175
|
+
# @since 2.1.9
|
176
|
+
def assign_stack
|
177
|
+
Thread.current[:"[mongoid]:assign-stack"] ||= []
|
178
|
+
end
|
179
|
+
|
180
|
+
# Get the bind stack for the current thread. Is simply an array of calls
|
181
|
+
# to Mongoid's binding method.
|
182
|
+
#
|
183
|
+
# @example Get the bind stack.
|
184
|
+
# Threaded.bind_stack
|
185
|
+
#
|
186
|
+
# @return [ Array ] The array of bind calls.
|
187
|
+
#
|
188
|
+
# @since 2.1.9
|
189
|
+
def bind_stack
|
190
|
+
Thread.current[:"[mongoid]:bind-stack"] ||= []
|
191
|
+
end
|
192
|
+
|
193
|
+
# Get the build stack for the current thread. Is simply an array of calls
|
194
|
+
# to Mongoid's building method.
|
195
|
+
#
|
196
|
+
# @example Get the build stack.
|
197
|
+
# Threaded.build_stack
|
198
|
+
#
|
199
|
+
# @return [ Array ] The array of build calls.
|
200
|
+
#
|
201
|
+
# @since 2.1.9
|
202
|
+
def build_stack
|
203
|
+
Thread.current[:"[mongoid]:build-stack"] ||= []
|
204
|
+
end
|
205
|
+
|
206
|
+
# Get the create stack for the current thread. Is simply an array of calls
|
207
|
+
# to Mongoid's creating method.
|
208
|
+
#
|
209
|
+
# @example Get the create stack.
|
210
|
+
# Threaded.create_stack
|
211
|
+
#
|
212
|
+
# @return [ Array ] The array of create calls.
|
213
|
+
#
|
214
|
+
# @since 2.1.9
|
215
|
+
def create_stack
|
216
|
+
Thread.current[:"[mongoid]:create-stack"] ||= []
|
217
|
+
end
|
218
|
+
|
219
|
+
# Get the load stack for the current thread. Is simply an array of calls
|
220
|
+
# to Mongoid's loading method.
|
221
|
+
#
|
222
|
+
# @example Get the load stack.
|
223
|
+
# Threaded.load_stack
|
224
|
+
#
|
225
|
+
# @return [ Array ] The array of load calls.
|
226
|
+
#
|
227
|
+
# @since 2.3.2
|
228
|
+
def load_stack
|
229
|
+
Thread.current[:"[mongoid]:load-stack"] ||= []
|
230
|
+
end
|
231
|
+
|
232
|
+
# Get the revision load stack for the current thread. Is simply an array
|
233
|
+
# of calls to Mongoid's loading_revision method.
|
234
|
+
#
|
235
|
+
# @example Get the revision load stack.
|
236
|
+
# Threaded.load_revision_stack
|
237
|
+
#
|
238
|
+
# @return [ Array ] The array of load revision calls.
|
239
|
+
#
|
240
|
+
# @since 2.3.4
|
241
|
+
def load_revision_stack
|
242
|
+
Thread.current[:"[mongoid]:load-revision-stack"] ||= []
|
243
|
+
end
|
244
|
+
|
245
|
+
# Clear out all the safety options set using the safely proxy.
|
246
|
+
#
|
247
|
+
# @example Clear out the options.
|
248
|
+
# Threaded.clear_safety_options!
|
249
|
+
#
|
250
|
+
# @return [ nil ] nil
|
251
|
+
#
|
252
|
+
# @since 2.1.0
|
253
|
+
def clear_safety_options!
|
254
|
+
Thread.current[:"[mongoid]:safety-options"] = nil
|
255
|
+
end
|
256
|
+
|
257
|
+
# Clear out all options set on a one-time basis.
|
258
|
+
#
|
259
|
+
# @example Clear out the options.
|
260
|
+
# Threaded.clear_options!
|
261
|
+
#
|
262
|
+
# @since 2.3.0
|
263
|
+
def clear_options!
|
264
|
+
clear_safety_options!
|
265
|
+
self.timeless = false
|
266
|
+
end
|
267
|
+
|
268
|
+
# Exit the assigning block.
|
269
|
+
#
|
270
|
+
# @example Exit the assigning block.
|
271
|
+
# Threaded.exit_assign
|
272
|
+
#
|
273
|
+
# @return [ true ] The last element in the stack.
|
274
|
+
#
|
275
|
+
# @since 2.1.9
|
276
|
+
def exit_assign
|
277
|
+
assign_stack.pop
|
278
|
+
end
|
279
|
+
|
280
|
+
# Exit the binding block.
|
281
|
+
#
|
282
|
+
# @example Exit the binding block.
|
283
|
+
# Threaded.exit_bind
|
284
|
+
#
|
285
|
+
# @return [ true ] The last element in the stack.
|
286
|
+
#
|
287
|
+
# @since 2.1.9
|
288
|
+
def exit_bind
|
289
|
+
bind_stack.pop
|
290
|
+
end
|
291
|
+
|
292
|
+
# Exit the building block.
|
293
|
+
#
|
294
|
+
# @example Exit the building block.
|
295
|
+
# Threaded.exit_build
|
296
|
+
#
|
297
|
+
# @return [ true ] The last element in the stack.
|
298
|
+
#
|
299
|
+
# @since 2.1.9
|
300
|
+
def exit_build
|
301
|
+
build_stack.pop
|
302
|
+
end
|
303
|
+
|
304
|
+
# Exit the creating block.
|
305
|
+
#
|
306
|
+
# @example Exit the creating block.
|
307
|
+
# Threaded.exit_create
|
308
|
+
#
|
309
|
+
# @return [ true ] The last element in the stack.
|
310
|
+
#
|
311
|
+
# @since 2.1.9
|
312
|
+
def exit_create
|
313
|
+
create_stack.pop
|
314
|
+
end
|
315
|
+
|
316
|
+
# Exit the loading block.
|
317
|
+
#
|
318
|
+
# @example Exit the loading block.
|
319
|
+
# Threaded.exit_load
|
320
|
+
#
|
321
|
+
# @return [ true ] The last element in the stack.
|
322
|
+
#
|
323
|
+
# @since 2.1.9
|
324
|
+
def exit_load
|
325
|
+
load_stack.pop
|
326
|
+
end
|
327
|
+
|
328
|
+
# Exit the revision loading block.
|
329
|
+
#
|
330
|
+
# @example Exit the revision loading block.
|
331
|
+
# Threaded.exit_load_revision
|
332
|
+
#
|
333
|
+
# @return [ true ] The last element in the stack.
|
334
|
+
#
|
335
|
+
# @since 2.3.4
|
336
|
+
def exit_load_revision
|
337
|
+
load_revision_stack.pop
|
338
|
+
end
|
339
|
+
|
340
|
+
# Exit validating a document on the current thread.
|
341
|
+
#
|
342
|
+
# @example Exit validation.
|
343
|
+
# Threaded.exit_validate(doc)
|
344
|
+
#
|
345
|
+
# @param [ Document ] document The document to validate.
|
346
|
+
#
|
347
|
+
# @since 2.1.9
|
348
|
+
def exit_validate(document)
|
349
|
+
validations_for(document.class).delete_one(document.id)
|
350
|
+
end
|
351
|
+
|
352
|
+
# Get the identity map off the current thread.
|
353
|
+
#
|
354
|
+
# @example Get the identity map.
|
355
|
+
# Threaded.identity_map
|
356
|
+
#
|
357
|
+
# @return [ IdentityMap ] The identity map.
|
358
|
+
#
|
359
|
+
# @since 2.1.0
|
360
|
+
def identity_map
|
361
|
+
Thread.current[:"[mongoid]:identity-map"] ||= IdentityMap.new
|
362
|
+
end
|
363
|
+
|
364
|
+
# Get the insert consumer from the current thread.
|
365
|
+
#
|
366
|
+
# @example Get the insert consumer.
|
367
|
+
# Threaded.insert
|
368
|
+
#
|
369
|
+
# @return [ Object ] The batch insert consumer.
|
370
|
+
#
|
371
|
+
# @since 2.1.0
|
372
|
+
def insert
|
373
|
+
Thread.current[:"[mongoid]:insert-consumer"]
|
374
|
+
end
|
375
|
+
|
376
|
+
# Set the insert consumer on the current thread.
|
377
|
+
#
|
378
|
+
# @example Set the insert consumer.
|
379
|
+
# Threaded.insert = consumer
|
380
|
+
#
|
381
|
+
# @param [ Object ] consumer The insert consumer.
|
382
|
+
#
|
383
|
+
# @return [ Object ] The insert consumer.
|
384
|
+
#
|
385
|
+
# @since 2.1.0
|
386
|
+
def insert=(consumer)
|
387
|
+
Thread.current[:"[mongoid]:insert-consumer"] = consumer
|
388
|
+
end
|
389
|
+
|
390
|
+
# Get the safety options for the current thread.
|
391
|
+
#
|
392
|
+
# @example Get the safety options.
|
393
|
+
# Threaded.safety_options
|
394
|
+
#
|
395
|
+
# @return [ Hash ] The current safety options.
|
396
|
+
#
|
397
|
+
# @since 2.1.0
|
398
|
+
def safety_options
|
399
|
+
Thread.current[:"[mongoid]:safety-options"]
|
400
|
+
end
|
401
|
+
|
402
|
+
# Set the safety options on the current thread.
|
403
|
+
#
|
404
|
+
# @example Set the safety options.
|
405
|
+
# Threaded.safety_options = { :fsync => true }
|
406
|
+
#
|
407
|
+
# @param [ Hash ] options The safety options.
|
408
|
+
#
|
409
|
+
# @return [ Hash ] The safety options.
|
410
|
+
#
|
411
|
+
# @since 2.1.0
|
412
|
+
def safety_options=(options)
|
413
|
+
Thread.current[:"[mongoid]:safety-options"] = options
|
414
|
+
end
|
415
|
+
|
416
|
+
# Get the mongoid scope stack for chained criteria.
|
417
|
+
#
|
418
|
+
# @example Get the scope stack.
|
419
|
+
# Threaded.scope_stack
|
420
|
+
#
|
421
|
+
# @return [ Hash ] The scope stack.
|
422
|
+
#
|
423
|
+
# @since 2.1.0
|
424
|
+
def scope_stack
|
425
|
+
Thread.current[:"[mongoid]:scope-stack"] ||= {}
|
426
|
+
end
|
427
|
+
|
428
|
+
# Get the value of the one-off timeless call.
|
429
|
+
#
|
430
|
+
# @example Get the timeless value.
|
431
|
+
# Threaded.timeless
|
432
|
+
#
|
433
|
+
# @return [ true, false ] The timeless setting.
|
434
|
+
#
|
435
|
+
# @since 2.3.0
|
436
|
+
def timeless
|
437
|
+
!!Thread.current[:"[mongoid]:timeless"]
|
438
|
+
end
|
439
|
+
|
440
|
+
# Set the value of the one-off timeless call.
|
441
|
+
#
|
442
|
+
# @example Set the timeless value.
|
443
|
+
# Threaded.timeless = true
|
444
|
+
#
|
445
|
+
# @param [ true, false ] value The value.
|
446
|
+
#
|
447
|
+
# @since 2.3.0
|
448
|
+
def timeless=(value)
|
449
|
+
Thread.current[:"[mongoid]:timeless"] = value
|
450
|
+
end
|
451
|
+
|
452
|
+
# Get the update consumer from the current thread.
|
453
|
+
#
|
454
|
+
# @example Get the update consumer.
|
455
|
+
# Threaded.update
|
456
|
+
#
|
457
|
+
# @return [ Object ] The atomic update consumer.
|
458
|
+
#
|
459
|
+
# @since 2.1.0
|
460
|
+
def update_consumer(klass)
|
461
|
+
Thread.current[:"[mongoid][#{klass}]:update-consumer"]
|
462
|
+
end
|
463
|
+
|
464
|
+
# Set the update consumer on the current thread.
|
465
|
+
#
|
466
|
+
# @example Set the update consumer.
|
467
|
+
# Threaded.update = consumer
|
468
|
+
#
|
469
|
+
# @param [ Object ] consumer The update consumer.
|
470
|
+
#
|
471
|
+
# @return [ Object ] The update consumer.
|
472
|
+
#
|
473
|
+
# @since 2.1.0
|
474
|
+
def set_update_consumer(klass, consumer)
|
475
|
+
Thread.current[:"[mongoid][#{klass}]:update-consumer"] = consumer
|
476
|
+
end
|
477
|
+
|
478
|
+
# Is the current thread setting timestamps?
|
479
|
+
#
|
480
|
+
# @example Is the current thread timestamping?
|
481
|
+
# Threaded.timestamping?
|
482
|
+
#
|
483
|
+
# @return [ true, false ] If timestamps can be applied.
|
484
|
+
#
|
485
|
+
# @since 2.3.0
|
486
|
+
def timestamping?
|
487
|
+
!timeless
|
488
|
+
end
|
489
|
+
|
490
|
+
# Is the document validated on the current thread?
|
491
|
+
#
|
492
|
+
# @example Is the document validated?
|
493
|
+
# Threaded.validated?(doc)
|
494
|
+
#
|
495
|
+
# @param [ Document ] document The document to check.
|
496
|
+
#
|
497
|
+
# @return [ true, false ] If the document is validated.
|
498
|
+
#
|
499
|
+
# @since 2.1.9
|
500
|
+
def validated?(document)
|
501
|
+
validations_for(document.class).include?(document.id)
|
502
|
+
end
|
503
|
+
|
504
|
+
# Get all validations on the current thread.
|
505
|
+
#
|
506
|
+
# @example Get all validations.
|
507
|
+
# Threaded.validations
|
508
|
+
#
|
509
|
+
# @return [ Hash ] The current validations.
|
510
|
+
#
|
511
|
+
# @since 2.1.9
|
512
|
+
def validations
|
513
|
+
Thread.current[:"[mongoid]:validations"] ||= {}
|
514
|
+
end
|
515
|
+
|
516
|
+
# Get all validations on the current thread for the class.
|
517
|
+
#
|
518
|
+
# @example Get all validations.
|
519
|
+
# Threaded.validations_for(Person)
|
520
|
+
#
|
521
|
+
# @param [ Class ] The class to check.
|
522
|
+
#
|
523
|
+
# @return [ Array ] The current validations.
|
524
|
+
#
|
525
|
+
# @since 2.1.9
|
526
|
+
def validations_for(klass)
|
527
|
+
validations[klass] ||= []
|
528
|
+
end
|
529
|
+
end
|
530
|
+
end
|