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.
Files changed (276) hide show
  1. data/CHANGELOG.md +615 -0
  2. data/LICENSE +20 -0
  3. data/README.md +62 -0
  4. data/Rakefile +49 -0
  5. data/lib/config/locales/bg.yml +54 -0
  6. data/lib/config/locales/de.yml +54 -0
  7. data/lib/config/locales/en-GB.yml +55 -0
  8. data/lib/config/locales/en.yml +55 -0
  9. data/lib/config/locales/es.yml +52 -0
  10. data/lib/config/locales/fr.yml +55 -0
  11. data/lib/config/locales/hi.yml +46 -0
  12. data/lib/config/locales/hu.yml +57 -0
  13. data/lib/config/locales/id.yml +55 -0
  14. data/lib/config/locales/it.yml +52 -0
  15. data/lib/config/locales/ja.yml +50 -0
  16. data/lib/config/locales/kr.yml +47 -0
  17. data/lib/config/locales/nl.yml +52 -0
  18. data/lib/config/locales/pl.yml +52 -0
  19. data/lib/config/locales/pt-BR.yml +53 -0
  20. data/lib/config/locales/pt.yml +53 -0
  21. data/lib/config/locales/ro.yml +59 -0
  22. data/lib/config/locales/ru.yml +54 -0
  23. data/lib/config/locales/sv.yml +53 -0
  24. data/lib/config/locales/vi.yml +55 -0
  25. data/lib/config/locales/zh-CN.yml +46 -0
  26. data/lib/mongoid.rb +148 -0
  27. data/lib/mongoid/atomic.rb +230 -0
  28. data/lib/mongoid/atomic/modifiers.rb +243 -0
  29. data/lib/mongoid/atomic/paths.rb +3 -0
  30. data/lib/mongoid/atomic/paths/embedded.rb +43 -0
  31. data/lib/mongoid/atomic/paths/embedded/many.rb +44 -0
  32. data/lib/mongoid/atomic/paths/embedded/one.rb +43 -0
  33. data/lib/mongoid/atomic/paths/root.rb +40 -0
  34. data/lib/mongoid/attributes.rb +234 -0
  35. data/lib/mongoid/attributes/processing.rb +146 -0
  36. data/lib/mongoid/callbacks.rb +135 -0
  37. data/lib/mongoid/collection.rb +153 -0
  38. data/lib/mongoid/collection_proxy.rb +59 -0
  39. data/lib/mongoid/collections.rb +120 -0
  40. data/lib/mongoid/collections/master.rb +45 -0
  41. data/lib/mongoid/collections/operations.rb +44 -0
  42. data/lib/mongoid/collections/retry.rb +46 -0
  43. data/lib/mongoid/components.rb +96 -0
  44. data/lib/mongoid/config.rb +347 -0
  45. data/lib/mongoid/config/database.rb +186 -0
  46. data/lib/mongoid/config/replset_database.rb +82 -0
  47. data/lib/mongoid/connection_proxy.rb +30 -0
  48. data/lib/mongoid/contexts.rb +25 -0
  49. data/lib/mongoid/contexts/enumerable.rb +288 -0
  50. data/lib/mongoid/contexts/enumerable/sort.rb +43 -0
  51. data/lib/mongoid/contexts/mongo.rb +409 -0
  52. data/lib/mongoid/copyable.rb +48 -0
  53. data/lib/mongoid/criteria.rb +418 -0
  54. data/lib/mongoid/criterion/builder.rb +34 -0
  55. data/lib/mongoid/criterion/complex.rb +84 -0
  56. data/lib/mongoid/criterion/creational.rb +34 -0
  57. data/lib/mongoid/criterion/exclusion.rb +108 -0
  58. data/lib/mongoid/criterion/inclusion.rb +305 -0
  59. data/lib/mongoid/criterion/inspection.rb +22 -0
  60. data/lib/mongoid/criterion/optional.rb +232 -0
  61. data/lib/mongoid/criterion/selector.rb +153 -0
  62. data/lib/mongoid/cursor.rb +86 -0
  63. data/lib/mongoid/database_proxy.rb +97 -0
  64. data/lib/mongoid/default_scope.rb +36 -0
  65. data/lib/mongoid/dirty.rb +110 -0
  66. data/lib/mongoid/document.rb +280 -0
  67. data/lib/mongoid/errors.rb +17 -0
  68. data/lib/mongoid/errors/callback.rb +26 -0
  69. data/lib/mongoid/errors/document_not_found.rb +28 -0
  70. data/lib/mongoid/errors/eager_load.rb +25 -0
  71. data/lib/mongoid/errors/invalid_collection.rb +18 -0
  72. data/lib/mongoid/errors/invalid_database.rb +19 -0
  73. data/lib/mongoid/errors/invalid_field.rb +18 -0
  74. data/lib/mongoid/errors/invalid_find.rb +19 -0
  75. data/lib/mongoid/errors/invalid_options.rb +28 -0
  76. data/lib/mongoid/errors/invalid_time.rb +25 -0
  77. data/lib/mongoid/errors/invalid_type.rb +25 -0
  78. data/lib/mongoid/errors/mixed_relations.rb +37 -0
  79. data/lib/mongoid/errors/mongoid_error.rb +26 -0
  80. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +20 -0
  81. data/lib/mongoid/errors/unsaved_document.rb +23 -0
  82. data/lib/mongoid/errors/unsupported_version.rb +20 -0
  83. data/lib/mongoid/errors/validations.rb +23 -0
  84. data/lib/mongoid/extensions.rb +82 -0
  85. data/lib/mongoid/extensions/array/deletion.rb +29 -0
  86. data/lib/mongoid/extensions/false_class/equality.rb +26 -0
  87. data/lib/mongoid/extensions/hash/criteria_helpers.rb +45 -0
  88. data/lib/mongoid/extensions/hash/scoping.rb +25 -0
  89. data/lib/mongoid/extensions/integer/checks.rb +23 -0
  90. data/lib/mongoid/extensions/nil/collectionization.rb +23 -0
  91. data/lib/mongoid/extensions/object/checks.rb +29 -0
  92. data/lib/mongoid/extensions/object/reflections.rb +48 -0
  93. data/lib/mongoid/extensions/object/substitutable.rb +15 -0
  94. data/lib/mongoid/extensions/object/yoda.rb +44 -0
  95. data/lib/mongoid/extensions/object_id/conversions.rb +60 -0
  96. data/lib/mongoid/extensions/proc/scoping.rb +25 -0
  97. data/lib/mongoid/extensions/string/checks.rb +36 -0
  98. data/lib/mongoid/extensions/string/conversions.rb +22 -0
  99. data/lib/mongoid/extensions/string/inflections.rb +118 -0
  100. data/lib/mongoid/extensions/symbol/checks.rb +23 -0
  101. data/lib/mongoid/extensions/symbol/inflections.rb +66 -0
  102. data/lib/mongoid/extensions/true_class/equality.rb +26 -0
  103. data/lib/mongoid/extras.rb +31 -0
  104. data/lib/mongoid/factory.rb +46 -0
  105. data/lib/mongoid/fields.rb +332 -0
  106. data/lib/mongoid/fields/mappings.rb +41 -0
  107. data/lib/mongoid/fields/serializable.rb +201 -0
  108. data/lib/mongoid/fields/serializable/array.rb +49 -0
  109. data/lib/mongoid/fields/serializable/big_decimal.rb +42 -0
  110. data/lib/mongoid/fields/serializable/bignum.rb +10 -0
  111. data/lib/mongoid/fields/serializable/binary.rb +11 -0
  112. data/lib/mongoid/fields/serializable/boolean.rb +43 -0
  113. data/lib/mongoid/fields/serializable/date.rb +51 -0
  114. data/lib/mongoid/fields/serializable/date_time.rb +28 -0
  115. data/lib/mongoid/fields/serializable/fixnum.rb +10 -0
  116. data/lib/mongoid/fields/serializable/float.rb +32 -0
  117. data/lib/mongoid/fields/serializable/foreign_keys/array.rb +42 -0
  118. data/lib/mongoid/fields/serializable/foreign_keys/object.rb +47 -0
  119. data/lib/mongoid/fields/serializable/hash.rb +11 -0
  120. data/lib/mongoid/fields/serializable/integer.rb +44 -0
  121. data/lib/mongoid/fields/serializable/localized.rb +41 -0
  122. data/lib/mongoid/fields/serializable/nil_class.rb +38 -0
  123. data/lib/mongoid/fields/serializable/object.rb +11 -0
  124. data/lib/mongoid/fields/serializable/object_id.rb +31 -0
  125. data/lib/mongoid/fields/serializable/range.rb +42 -0
  126. data/lib/mongoid/fields/serializable/set.rb +42 -0
  127. data/lib/mongoid/fields/serializable/string.rb +27 -0
  128. data/lib/mongoid/fields/serializable/symbol.rb +27 -0
  129. data/lib/mongoid/fields/serializable/time.rb +23 -0
  130. data/lib/mongoid/fields/serializable/time_with_zone.rb +23 -0
  131. data/lib/mongoid/fields/serializable/timekeeping.rb +106 -0
  132. data/lib/mongoid/finders.rb +152 -0
  133. data/lib/mongoid/hierarchy.rb +120 -0
  134. data/lib/mongoid/identity.rb +92 -0
  135. data/lib/mongoid/identity_map.rb +119 -0
  136. data/lib/mongoid/indexes.rb +54 -0
  137. data/lib/mongoid/inspection.rb +54 -0
  138. data/lib/mongoid/javascript.rb +20 -0
  139. data/lib/mongoid/javascript/functions.yml +63 -0
  140. data/lib/mongoid/json.rb +16 -0
  141. data/lib/mongoid/keys.rb +144 -0
  142. data/lib/mongoid/logger.rb +39 -0
  143. data/lib/mongoid/matchers.rb +32 -0
  144. data/lib/mongoid/matchers/all.rb +21 -0
  145. data/lib/mongoid/matchers/and.rb +30 -0
  146. data/lib/mongoid/matchers/default.rb +70 -0
  147. data/lib/mongoid/matchers/exists.rb +23 -0
  148. data/lib/mongoid/matchers/gt.rb +21 -0
  149. data/lib/mongoid/matchers/gte.rb +21 -0
  150. data/lib/mongoid/matchers/in.rb +21 -0
  151. data/lib/mongoid/matchers/lt.rb +21 -0
  152. data/lib/mongoid/matchers/lte.rb +21 -0
  153. data/lib/mongoid/matchers/ne.rb +21 -0
  154. data/lib/mongoid/matchers/nin.rb +21 -0
  155. data/lib/mongoid/matchers/or.rb +33 -0
  156. data/lib/mongoid/matchers/size.rb +21 -0
  157. data/lib/mongoid/matchers/strategies.rb +93 -0
  158. data/lib/mongoid/multi_database.rb +31 -0
  159. data/lib/mongoid/multi_parameter_attributes.rb +106 -0
  160. data/lib/mongoid/named_scope.rb +146 -0
  161. data/lib/mongoid/nested_attributes.rb +54 -0
  162. data/lib/mongoid/observer.rb +170 -0
  163. data/lib/mongoid/paranoia.rb +158 -0
  164. data/lib/mongoid/persistence.rb +264 -0
  165. data/lib/mongoid/persistence/atomic.rb +223 -0
  166. data/lib/mongoid/persistence/atomic/add_to_set.rb +35 -0
  167. data/lib/mongoid/persistence/atomic/bit.rb +37 -0
  168. data/lib/mongoid/persistence/atomic/inc.rb +31 -0
  169. data/lib/mongoid/persistence/atomic/operation.rb +85 -0
  170. data/lib/mongoid/persistence/atomic/pop.rb +34 -0
  171. data/lib/mongoid/persistence/atomic/pull.rb +34 -0
  172. data/lib/mongoid/persistence/atomic/pull_all.rb +34 -0
  173. data/lib/mongoid/persistence/atomic/push.rb +31 -0
  174. data/lib/mongoid/persistence/atomic/push_all.rb +31 -0
  175. data/lib/mongoid/persistence/atomic/rename.rb +31 -0
  176. data/lib/mongoid/persistence/atomic/sets.rb +30 -0
  177. data/lib/mongoid/persistence/atomic/unset.rb +28 -0
  178. data/lib/mongoid/persistence/deletion.rb +32 -0
  179. data/lib/mongoid/persistence/insertion.rb +41 -0
  180. data/lib/mongoid/persistence/modification.rb +37 -0
  181. data/lib/mongoid/persistence/operations.rb +211 -0
  182. data/lib/mongoid/persistence/operations/embedded/insert.rb +42 -0
  183. data/lib/mongoid/persistence/operations/embedded/remove.rb +40 -0
  184. data/lib/mongoid/persistence/operations/insert.rb +34 -0
  185. data/lib/mongoid/persistence/operations/remove.rb +33 -0
  186. data/lib/mongoid/persistence/operations/update.rb +64 -0
  187. data/lib/mongoid/railtie.rb +126 -0
  188. data/lib/mongoid/railties/database.rake +182 -0
  189. data/lib/mongoid/railties/document.rb +12 -0
  190. data/lib/mongoid/relations.rb +144 -0
  191. data/lib/mongoid/relations/accessors.rb +138 -0
  192. data/lib/mongoid/relations/auto_save.rb +38 -0
  193. data/lib/mongoid/relations/binding.rb +26 -0
  194. data/lib/mongoid/relations/bindings.rb +9 -0
  195. data/lib/mongoid/relations/bindings/embedded/in.rb +69 -0
  196. data/lib/mongoid/relations/bindings/embedded/many.rb +93 -0
  197. data/lib/mongoid/relations/bindings/embedded/one.rb +61 -0
  198. data/lib/mongoid/relations/bindings/referenced/in.rb +76 -0
  199. data/lib/mongoid/relations/bindings/referenced/many.rb +54 -0
  200. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +51 -0
  201. data/lib/mongoid/relations/bindings/referenced/one.rb +58 -0
  202. data/lib/mongoid/relations/builder.rb +57 -0
  203. data/lib/mongoid/relations/builders.rb +83 -0
  204. data/lib/mongoid/relations/builders/embedded/in.rb +29 -0
  205. data/lib/mongoid/relations/builders/embedded/many.rb +40 -0
  206. data/lib/mongoid/relations/builders/embedded/one.rb +30 -0
  207. data/lib/mongoid/relations/builders/nested_attributes/many.rb +110 -0
  208. data/lib/mongoid/relations/builders/nested_attributes/one.rb +135 -0
  209. data/lib/mongoid/relations/builders/referenced/in.rb +26 -0
  210. data/lib/mongoid/relations/builders/referenced/many.rb +27 -0
  211. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +38 -0
  212. data/lib/mongoid/relations/builders/referenced/one.rb +26 -0
  213. data/lib/mongoid/relations/cascading.rb +56 -0
  214. data/lib/mongoid/relations/cascading/delete.rb +19 -0
  215. data/lib/mongoid/relations/cascading/destroy.rb +26 -0
  216. data/lib/mongoid/relations/cascading/nullify.rb +18 -0
  217. data/lib/mongoid/relations/cascading/strategy.rb +26 -0
  218. data/lib/mongoid/relations/constraint.rb +42 -0
  219. data/lib/mongoid/relations/conversions.rb +35 -0
  220. data/lib/mongoid/relations/cyclic.rb +103 -0
  221. data/lib/mongoid/relations/embedded/atomic.rb +89 -0
  222. data/lib/mongoid/relations/embedded/atomic/operation.rb +63 -0
  223. data/lib/mongoid/relations/embedded/atomic/pull.rb +65 -0
  224. data/lib/mongoid/relations/embedded/atomic/push_all.rb +59 -0
  225. data/lib/mongoid/relations/embedded/atomic/set.rb +61 -0
  226. data/lib/mongoid/relations/embedded/atomic/unset.rb +41 -0
  227. data/lib/mongoid/relations/embedded/in.rb +220 -0
  228. data/lib/mongoid/relations/embedded/many.rb +560 -0
  229. data/lib/mongoid/relations/embedded/one.rb +206 -0
  230. data/lib/mongoid/relations/embedded/sort.rb +31 -0
  231. data/lib/mongoid/relations/macros.rb +310 -0
  232. data/lib/mongoid/relations/many.rb +135 -0
  233. data/lib/mongoid/relations/metadata.rb +919 -0
  234. data/lib/mongoid/relations/nested_builder.rb +75 -0
  235. data/lib/mongoid/relations/one.rb +36 -0
  236. data/lib/mongoid/relations/options.rb +47 -0
  237. data/lib/mongoid/relations/polymorphic.rb +40 -0
  238. data/lib/mongoid/relations/proxy.rb +145 -0
  239. data/lib/mongoid/relations/referenced/batch.rb +72 -0
  240. data/lib/mongoid/relations/referenced/batch/insert.rb +57 -0
  241. data/lib/mongoid/relations/referenced/in.rb +262 -0
  242. data/lib/mongoid/relations/referenced/many.rb +623 -0
  243. data/lib/mongoid/relations/referenced/many_to_many.rb +396 -0
  244. data/lib/mongoid/relations/referenced/one.rb +272 -0
  245. data/lib/mongoid/relations/reflections.rb +62 -0
  246. data/lib/mongoid/relations/synchronization.rb +153 -0
  247. data/lib/mongoid/relations/targets.rb +2 -0
  248. data/lib/mongoid/relations/targets/enumerable.rb +372 -0
  249. data/lib/mongoid/reloading.rb +91 -0
  250. data/lib/mongoid/safety.rb +105 -0
  251. data/lib/mongoid/scope.rb +31 -0
  252. data/lib/mongoid/serialization.rb +134 -0
  253. data/lib/mongoid/sharding.rb +61 -0
  254. data/lib/mongoid/state.rb +97 -0
  255. data/lib/mongoid/threaded.rb +530 -0
  256. data/lib/mongoid/threaded/lifecycle.rb +192 -0
  257. data/lib/mongoid/timestamps.rb +15 -0
  258. data/lib/mongoid/timestamps/created.rb +24 -0
  259. data/lib/mongoid/timestamps/timeless.rb +50 -0
  260. data/lib/mongoid/timestamps/updated.rb +26 -0
  261. data/lib/mongoid/validations.rb +140 -0
  262. data/lib/mongoid/validations/associated.rb +46 -0
  263. data/lib/mongoid/validations/uniqueness.rb +145 -0
  264. data/lib/mongoid/version.rb +4 -0
  265. data/lib/mongoid/versioning.rb +185 -0
  266. data/lib/rack/mongoid.rb +2 -0
  267. data/lib/rack/mongoid/middleware/identity_map.rb +38 -0
  268. data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
  269. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +20 -0
  270. data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
  271. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +19 -0
  272. data/lib/rails/generators/mongoid/observer/observer_generator.rb +17 -0
  273. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +4 -0
  274. data/lib/rails/generators/mongoid_generator.rb +70 -0
  275. data/lib/rails/mongoid.rb +91 -0
  276. 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