mongoid 6.4.8 → 7.0.0.beta

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 (315) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +0 -26
  5. data/lib/config/locales/en.yml +17 -21
  6. data/lib/mongoid.rb +2 -2
  7. data/lib/mongoid/association.rb +150 -0
  8. data/lib/mongoid/association/accessors.rb +339 -0
  9. data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
  10. data/lib/mongoid/association/builders.rb +92 -0
  11. data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
  12. data/lib/mongoid/association/depending.rb +116 -0
  13. data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
  14. data/lib/mongoid/association/embedded.rb +4 -0
  15. data/lib/mongoid/{relations → association}/embedded/batchable.rb +27 -53
  16. data/lib/mongoid/association/embedded/cyclic.rb +109 -0
  17. data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
  18. data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
  19. data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
  20. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
  21. data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
  22. data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
  23. data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
  24. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +529 -0
  25. data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
  26. data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
  27. data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
  28. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
  29. data/lib/mongoid/association/macros.rb +204 -0
  30. data/lib/mongoid/{relations → association}/many.rb +18 -52
  31. data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
  32. data/lib/mongoid/association/nested.rb +15 -0
  33. data/lib/mongoid/association/nested/many.rb +200 -0
  34. data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
  35. data/lib/mongoid/association/nested/one.rb +127 -0
  36. data/lib/mongoid/{relations → association}/one.rb +6 -6
  37. data/lib/mongoid/association/options.rb +152 -0
  38. data/lib/mongoid/{relations → association}/proxy.rb +31 -58
  39. data/lib/mongoid/association/referenced.rb +7 -0
  40. data/lib/mongoid/association/referenced/auto_save.rb +79 -0
  41. data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
  42. data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
  43. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
  44. data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
  45. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
  46. data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
  47. data/lib/mongoid/association/referenced/eager.rb +159 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
  52. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +310 -0
  53. data/lib/mongoid/association/referenced/has_many.rb +273 -0
  54. data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
  55. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  56. data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
  57. data/lib/mongoid/association/referenced/has_many/enumerable.rb +479 -0
  58. data/lib/mongoid/association/referenced/has_many/proxy.rb +577 -0
  59. data/lib/mongoid/association/referenced/has_one.rb +204 -0
  60. data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
  61. data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
  62. data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
  63. data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
  64. data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
  65. data/lib/mongoid/association/referenced/syncable.rb +170 -0
  66. data/lib/mongoid/{relations → association}/reflections.rb +21 -17
  67. data/lib/mongoid/association/relatable.rb +415 -0
  68. data/lib/mongoid/association/touchable.rb +97 -0
  69. data/lib/mongoid/atomic.rb +6 -6
  70. data/lib/mongoid/atomic/modifiers.rb +8 -12
  71. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  72. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  73. data/lib/mongoid/attributes.rb +2 -1
  74. data/lib/mongoid/attributes/nested.rb +10 -10
  75. data/lib/mongoid/attributes/processing.rb +2 -2
  76. data/lib/mongoid/attributes/readonly.rb +2 -4
  77. data/lib/mongoid/clients.rb +0 -2
  78. data/lib/mongoid/clients/options.rb +1 -1
  79. data/lib/mongoid/clients/storage_options.rb +0 -1
  80. data/lib/mongoid/composable.rb +3 -4
  81. data/lib/mongoid/config.rb +1 -0
  82. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  83. data/lib/mongoid/contextual/atomic.rb +3 -6
  84. data/lib/mongoid/contextual/map_reduce.rb +3 -7
  85. data/lib/mongoid/contextual/memory.rb +5 -10
  86. data/lib/mongoid/contextual/mongo.rb +10 -27
  87. data/lib/mongoid/copyable.rb +6 -6
  88. data/lib/mongoid/criteria.rb +1 -2
  89. data/lib/mongoid/criteria/includable.rb +14 -14
  90. data/lib/mongoid/criteria/modifiable.rb +8 -14
  91. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -3
  92. data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
  93. data/lib/mongoid/criteria/queryable/selectable.rb +10 -34
  94. data/lib/mongoid/document.rb +6 -6
  95. data/lib/mongoid/errors.rb +3 -1
  96. data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
  97. data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
  98. data/lib/mongoid/errors/unknown_model.rb +25 -0
  99. data/lib/mongoid/extensions/array.rb +5 -5
  100. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  101. data/lib/mongoid/extensions/object.rb +4 -4
  102. data/lib/mongoid/extensions/range.rb +1 -0
  103. data/lib/mongoid/extensions/regexp.rb +0 -1
  104. data/lib/mongoid/extensions/string.rb +1 -3
  105. data/lib/mongoid/factory.rb +4 -3
  106. data/lib/mongoid/fields.rb +1 -1
  107. data/lib/mongoid/fields/foreign_key.rb +5 -5
  108. data/lib/mongoid/fields/standard.rb +2 -14
  109. data/lib/mongoid/fields/validators/macro.rb +1 -1
  110. data/lib/mongoid/indexable.rb +8 -5
  111. data/lib/mongoid/interceptable.rb +5 -5
  112. data/lib/mongoid/matchable.rb +0 -3
  113. data/lib/mongoid/persistable.rb +4 -5
  114. data/lib/mongoid/persistable/creatable.rb +2 -4
  115. data/lib/mongoid/persistable/deletable.rb +9 -10
  116. data/lib/mongoid/persistable/destroyable.rb +5 -1
  117. data/lib/mongoid/persistable/incrementable.rb +1 -1
  118. data/lib/mongoid/persistable/logical.rb +1 -1
  119. data/lib/mongoid/persistable/settable.rb +5 -5
  120. data/lib/mongoid/persistable/updatable.rb +2 -2
  121. data/lib/mongoid/persistable/upsertable.rb +1 -2
  122. data/lib/mongoid/persistence_context.rb +4 -9
  123. data/lib/mongoid/query_cache.rb +18 -65
  124. data/lib/mongoid/railtie.rb +0 -17
  125. data/lib/mongoid/reloadable.rb +1 -1
  126. data/lib/mongoid/scopable.rb +3 -3
  127. data/lib/mongoid/serializable.rb +3 -3
  128. data/lib/mongoid/tasks/database.rb +2 -3
  129. data/lib/mongoid/threaded.rb +0 -74
  130. data/lib/mongoid/traversable.rb +2 -2
  131. data/lib/mongoid/validatable.rb +8 -8
  132. data/lib/mongoid/validatable/presence.rb +2 -2
  133. data/lib/mongoid/validatable/uniqueness.rb +4 -4
  134. data/lib/mongoid/version.rb +1 -1
  135. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -4
  136. data/spec/app/models/animal.rb +2 -1
  137. data/spec/app/models/band.rb +0 -1
  138. data/spec/app/models/bomb.rb +1 -1
  139. data/spec/app/models/message.rb +1 -1
  140. data/spec/app/models/person.rb +5 -2
  141. data/spec/app/models/vertex.rb +6 -0
  142. data/spec/app/models/wiki_page.rb +1 -1
  143. data/spec/config/mongoid.yml +1 -0
  144. data/spec/mongoid/{relations → association}/accessors_spec.rb +1 -1
  145. data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
  146. data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
  147. data/spec/mongoid/association/constrainable_spec.rb +115 -0
  148. data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
  149. data/spec/mongoid/association/depending_spec.rb +613 -0
  150. data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
  151. data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
  152. data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
  153. data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
  154. data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
  155. data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
  156. data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
  157. data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
  158. data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
  159. data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +140 -428
  160. data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
  161. data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
  162. data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
  163. data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
  164. data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
  165. data/spec/mongoid/{relations → association}/macros_spec.rb +148 -93
  166. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
  167. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
  168. data/spec/mongoid/association/options_spec.rb +1321 -0
  169. data/spec/mongoid/{relations → association}/polymorphic_spec.rb +7 -34
  170. data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
  171. data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
  172. data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +9 -9
  173. data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
  174. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1963 -0
  175. data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
  176. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
  177. data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +5 -5
  178. data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
  179. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
  180. data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
  181. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
  182. data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +11 -11
  183. data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +1 -109
  184. data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
  185. data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
  186. data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
  187. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
  188. data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
  189. data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
  190. data/spec/mongoid/association/referenced/has_one_spec.rb +1244 -0
  191. data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
  192. data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
  193. data/spec/mongoid/{relations → association}/touchable_spec.rb +19 -1
  194. data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
  195. data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
  196. data/spec/mongoid/atomic_spec.rb +17 -17
  197. data/spec/mongoid/attributes/nested_spec.rb +14 -12
  198. data/spec/mongoid/attributes/readonly_spec.rb +80 -125
  199. data/spec/mongoid/clients/factory_spec.rb +28 -52
  200. data/spec/mongoid/clients/options_spec.rb +65 -69
  201. data/spec/mongoid/config_spec.rb +24 -0
  202. data/spec/mongoid/contextual/geo_near_spec.rb +0 -1
  203. data/spec/mongoid/contextual/mongo_spec.rb +4 -112
  204. data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
  205. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
  206. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
  207. data/spec/mongoid/criteria/queryable/selectable_spec.rb +6 -74
  208. data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
  209. data/spec/mongoid/criteria/scopable_spec.rb +0 -81
  210. data/spec/mongoid/criteria_spec.rb +16 -19
  211. data/spec/mongoid/document_spec.rb +2 -56
  212. data/spec/mongoid/extensions/array_spec.rb +11 -15
  213. data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
  214. data/spec/mongoid/extensions/object_spec.rb +7 -11
  215. data/spec/mongoid/extensions/range_spec.rb +7 -0
  216. data/spec/mongoid/extensions/regexp_spec.rb +0 -23
  217. data/spec/mongoid/extensions/string_spec.rb +7 -35
  218. data/spec/mongoid/factory_spec.rb +18 -11
  219. data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
  220. data/spec/mongoid/fields_spec.rb +2 -2
  221. data/spec/mongoid/findable_spec.rb +1 -1
  222. data/spec/mongoid/indexable_spec.rb +18 -8
  223. data/spec/mongoid/interceptable_spec.rb +21 -2
  224. data/spec/mongoid/matchable_spec.rb +1 -26
  225. data/spec/mongoid/persistable/deletable_spec.rb +0 -19
  226. data/spec/mongoid/persistable/destroyable_spec.rb +0 -19
  227. data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
  228. data/spec/mongoid/persistable/savable_spec.rb +3 -3
  229. data/spec/mongoid/persistable/settable_spec.rb +1 -35
  230. data/spec/mongoid/persistable/updatable_spec.rb +2 -2
  231. data/spec/mongoid/persistable_spec.rb +16 -16
  232. data/spec/mongoid/persistence_context_spec.rb +0 -14
  233. data/spec/mongoid/positional_spec.rb +10 -10
  234. data/spec/mongoid/query_cache_spec.rb +18 -87
  235. data/spec/mongoid/relations/proxy_spec.rb +124 -124
  236. data/spec/mongoid/scopable_spec.rb +0 -13
  237. data/spec/mongoid/threaded_spec.rb +0 -68
  238. data/spec/mongoid/validatable/associated_spec.rb +1 -1
  239. data/spec/mongoid/validatable/presence_spec.rb +7 -6
  240. data/spec/mongoid/validatable_spec.rb +1 -1
  241. data/spec/spec_helper.rb +7 -83
  242. metadata +586 -611
  243. metadata.gz.sig +2 -5
  244. data/lib/mongoid/clients/sessions.rb +0 -113
  245. data/lib/mongoid/errors/invalid_session_use.rb +0 -24
  246. data/lib/mongoid/matchable/nor.rb +0 -37
  247. data/lib/mongoid/railties/controller_runtime.rb +0 -86
  248. data/lib/mongoid/relations.rb +0 -148
  249. data/lib/mongoid/relations/accessors.rb +0 -267
  250. data/lib/mongoid/relations/auto_save.rb +0 -94
  251. data/lib/mongoid/relations/bindings.rb +0 -9
  252. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  253. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  254. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  255. data/lib/mongoid/relations/builder.rb +0 -57
  256. data/lib/mongoid/relations/builders.rb +0 -106
  257. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  258. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  259. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  260. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  261. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  262. data/lib/mongoid/relations/cascading.rb +0 -56
  263. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  264. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  265. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  266. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  267. data/lib/mongoid/relations/conversions.rb +0 -34
  268. data/lib/mongoid/relations/counter_cache.rb +0 -160
  269. data/lib/mongoid/relations/cyclic.rb +0 -107
  270. data/lib/mongoid/relations/eager/base.rb +0 -153
  271. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  272. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  273. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  274. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  275. data/lib/mongoid/relations/embedded/in.rb +0 -241
  276. data/lib/mongoid/relations/embedded/many.rb +0 -683
  277. data/lib/mongoid/relations/embedded/one.rb +0 -235
  278. data/lib/mongoid/relations/macros.rb +0 -367
  279. data/lib/mongoid/relations/metadata.rb +0 -1179
  280. data/lib/mongoid/relations/nested_builder.rb +0 -74
  281. data/lib/mongoid/relations/options.rb +0 -49
  282. data/lib/mongoid/relations/polymorphic.rb +0 -39
  283. data/lib/mongoid/relations/referenced/in.rb +0 -304
  284. data/lib/mongoid/relations/referenced/many.rb +0 -812
  285. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  286. data/lib/mongoid/relations/referenced/one.rb +0 -290
  287. data/lib/mongoid/relations/synchronization.rb +0 -169
  288. data/lib/mongoid/relations/targets.rb +0 -2
  289. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  290. data/lib/mongoid/relations/touchable.rb +0 -97
  291. data/spec/app/models/array_field.rb +0 -7
  292. data/spec/app/models/delegating_patient.rb +0 -16
  293. data/spec/integration/document_spec.rb +0 -22
  294. data/spec/mongoid/clients/sessions_spec.rb +0 -334
  295. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  296. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  297. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  298. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  299. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  300. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  301. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  302. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  303. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  304. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  305. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  306. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  307. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  308. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  309. data/spec/mongoid/relations/options_spec.rb +0 -35
  310. data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -110
  311. data/spec/support/cluster_config.rb +0 -158
  312. data/spec/support/constraints.rb +0 -101
  313. data/spec/support/macros.rb +0 -20
  314. data/spec/support/session_registry.rb +0 -50
  315. data/spec/support/spec_config.rb +0 -42
metadata.gz.sig CHANGED
@@ -1,5 +1,2 @@
1
- y�{��� �$����fʉ(
2
- Ǡ|��r��
3
- -�
4
- ��@�� T!( ՛��:�f�֑�
5
- ]22{|��gB�Y����-s\�Z��GT����s�zC��r��H���BA+�T��
1
+ ]oRn̵�7�'+Up�]�Ʊ�Î�*�� �ҖA��s�K)��������.(�i~�w���<U��r��g e��+�@�bN��0[>�l� F��ѕ�BwN�!;�]����Z�$
2
+ �4"n���`V
@@ -1,113 +0,0 @@
1
- module Mongoid
2
- module Clients
3
-
4
- # Encapsulates behavior for getting a session from the client of a model class or instance,
5
- # setting the session on the current thread, and yielding to a block.
6
- # The session will be closed after the block completes or raises an error.
7
- #
8
- # @since 6.4.0
9
- module Sessions
10
-
11
- # Execute a block within the context of a session.
12
- #
13
- # @example Execute some operations in the context of a session.
14
- # band.with_session(causal_consistency: true) do
15
- # band.records << Record.create
16
- # band.name = 'FKA Twigs'
17
- # band.save
18
- # band.reload
19
- # end
20
- #
21
- # @param [ Hash ] options The session options. Please see the driver
22
- # documentation for the available session options.
23
- #
24
- # @note You cannot do any operations in the block using models or objects
25
- # that use a different client; the block will execute all operations
26
- # in the context of the implicit session and operations on any models using
27
- # another client will fail. For example, if you set a client using store_in on a
28
- # particular model and execute an operation on it in the session context block,
29
- # that operation can't use the block's session and an error will be raised.
30
- # An error will also be raised if sessions are nested.
31
- #
32
- # @raise [ Errors::InvalidSessionUse ] If an operation is attempted on a model using another
33
- # client from which the session was started or if sessions are nested.
34
- #
35
- # @return [ Object ] The result of calling the block.
36
- #
37
- # @yieldparam [ Mongo::Session ] The session being used for the block.
38
- #
39
- # @since 6.4.0
40
- def with_session(options = {})
41
- raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_nesting) if Threaded.get_session
42
- session = persistence_context.client.start_session(options)
43
- Threaded.set_session(session)
44
- yield(session)
45
- rescue Mongo::Error::InvalidSession => ex
46
- if ex.message == Mongo::Session::SESSIONS_NOT_SUPPORTED
47
- raise Mongoid::Errors::InvalidSessionUse.new(:sessions_not_supported)
48
- end
49
- raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_use)
50
- ensure
51
- Threaded.clear_session
52
- end
53
-
54
- private
55
-
56
- def _session
57
- Threaded.get_session
58
- end
59
-
60
- module ClassMethods
61
-
62
- # Execute a block within the context of a session.
63
- #
64
- # @example Execute some operations in the context of a session.
65
- # Band.with_session(causal_consistency: true) do
66
- # band = Band.create
67
- # band.records << Record.new
68
- # band.save
69
- # band.reload.records
70
- # end
71
- #
72
- # @param [ Hash ] options The session options. Please see the driver
73
- # documentation for the available session options.
74
- #
75
- # @note You cannot do any operations in the block using models or objects
76
- # that use a different client; the block will execute all operations
77
- # in the context of the implicit session and operations on any models using
78
- # another client will fail. For example, if you set a client using store_in on a
79
- # particular model and execute an operation on it in the session context block,
80
- # that operation can't use the block's session and an error will be raised.
81
- # You also cannot nest sessions.
82
- #
83
- # @raise [ Errors::InvalidSessionUse ] If an operation is attempted on a model using another
84
- # client from which the session was started or if sessions are nested.
85
- #
86
- # @return [ Object ] The result of calling the block.
87
- #
88
- # @yieldparam [ Mongo::Session ] The session being used for the block.
89
- #
90
- # @since 6.4.0
91
- def with_session(options = {})
92
- raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_nesting) if Threaded.get_session
93
- session = persistence_context.client.start_session(options)
94
- Threaded.set_session(session)
95
- yield(session)
96
- rescue Mongo::Error::InvalidSession => ex
97
- if ex.message == Mongo::Session::SESSIONS_NOT_SUPPORTED
98
- raise Mongoid::Errors::InvalidSessionUse.new(:sessions_not_supported)
99
- end
100
- raise Mongoid::Errors::InvalidSessionUse.new(:invalid_session_use)
101
- ensure
102
- Threaded.clear_session
103
- end
104
-
105
- private
106
-
107
- def _session
108
- Threaded.get_session
109
- end
110
- end
111
- end
112
- end
113
- end
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Errors
4
-
5
- # This error is raised when a session is attempted to be used with a model whose client cannot use it, if
6
- # sessions are nested, or if the mongodb deployment doesn't support sessions.
7
- #
8
- # @since 6.4.0
9
- class InvalidSessionUse < MongoidError
10
-
11
- # Create the error.
12
- #
13
- # @example Create the error.
14
- # InvalidSessionUse.new(:invalid_session_use)
15
- #
16
- # @param [ :invalid_sesion_use, :invalid_session_nesting ] error_type The type of session misuse.
17
- #
18
- # @since 6.4.0
19
- def initialize(error_type)
20
- super(compose_message(error_type.to_s))
21
- end
22
- end
23
- end
24
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
- module Mongoid
4
- module Matchable
5
-
6
- # Defines behavior for handling $nor expressions in embedded documents.
7
- class Nor < Default
8
-
9
- # Does the supplied query match the attribute?
10
- #
11
- # Note: an empty array as an argument to $nor is prohibited by
12
- # MongoDB server. Mongoid does allow this and returns false in this case.
13
- #
14
- # @example Does this match?
15
- # matcher._matches?("$nor" => [ { field => value } ])
16
- #
17
- # @param [ Array ] conditions The or expression.
18
- #
19
- # @return [ true, false ] True if matches, false if not.
20
- #
21
- # @since 6.4.2/7.0.2/7.1.0
22
- def _matches?(conditions)
23
- if conditions.length == 0
24
- # MongoDB does not allow $nor array to be empty, but
25
- # Mongoid accepts an empty array for $or which MongoDB also
26
- # prohibits
27
- return false
28
- end
29
- conditions.none? do |condition|
30
- condition.all? do |key, value|
31
- document._matches?(key => value)
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,86 +0,0 @@
1
- module Mongoid
2
- module Railties
3
- module ControllerRuntime
4
-
5
- # This extension mimics the Rails' internal method to
6
- # measure ActiveRecord runtime during request processing.
7
- # It appends MongoDB runtime value (`mongoid_runtime`) into payload
8
- # of instrumentation event `process_action.action_controller`.
9
- module ControllerExtension
10
- extend ActiveSupport::Concern
11
-
12
- protected
13
-
14
- attr_internal :mongoid_runtime
15
-
16
- # Reset the runtime before each action.
17
- def process_action(action, *args)
18
- Collector.reset_runtime
19
- super
20
- end
21
-
22
- # Override to collect the measurements.
23
- def cleanup_view_runtime
24
- mongo_rt_before_render = Collector.reset_runtime
25
- runtime = super
26
- mongo_rt_after_render = Collector.reset_runtime
27
- self.mongoid_runtime = mongo_rt_before_render + mongo_rt_after_render
28
- runtime - mongo_rt_after_render
29
- end
30
-
31
- # Add the measurement to the instrumentation event payload.
32
- def append_info_to_payload(payload)
33
- super
34
- payload[:mongoid_runtime] = (mongoid_runtime || 0) + Collector.reset_runtime
35
- end
36
-
37
- module ClassMethods
38
-
39
- # Append MongoDB runtime information to ActionController runtime
40
- # log message.
41
- def log_process_action(payload)
42
- messages = super
43
- mongoid_runtime = payload[:mongoid_runtime]
44
- messages << ("MongoDB: %.1fms" % mongoid_runtime.to_f) if mongoid_runtime
45
- messages
46
- end
47
-
48
- end
49
-
50
- end
51
-
52
- # The Collector of MongoDB runtime metric, that subscribes to Mongo
53
- # driver command monitoring. Stores the value within a thread-local
54
- # variable to provide correct accounting when an application issues
55
- # MongoDB operations from background threads.
56
- class Collector
57
-
58
- VARIABLE_NAME = "Mongoid.controller_runtime".freeze
59
-
60
- def started _; end
61
-
62
- def _completed e
63
- Collector.runtime += e.duration
64
- end
65
- alias :succeeded :_completed
66
- alias :failed :_completed
67
-
68
- def self.runtime
69
- Thread.current[VARIABLE_NAME] ||= 0
70
- end
71
-
72
- def self.runtime= value
73
- Thread.current[VARIABLE_NAME] = value
74
- end
75
-
76
- def self.reset_runtime
77
- to_now = runtime
78
- self.runtime = 0
79
- to_now
80
- end
81
-
82
- end
83
-
84
- end
85
- end
86
- end
@@ -1,148 +0,0 @@
1
- # encoding: utf-8
2
- require "mongoid/relations/accessors"
3
- require "mongoid/relations/auto_save"
4
- require "mongoid/relations/cascading"
5
- require "mongoid/relations/constraint"
6
- require "mongoid/relations/conversions"
7
- require "mongoid/relations/counter_cache"
8
- require "mongoid/relations/cyclic"
9
- require "mongoid/relations/proxy"
10
- require "mongoid/relations/bindings"
11
- require "mongoid/relations/builders"
12
- require "mongoid/relations/many"
13
- require "mongoid/relations/one"
14
- require "mongoid/relations/options"
15
- require "mongoid/relations/polymorphic"
16
- require "mongoid/relations/targets/enumerable"
17
- require "mongoid/relations/embedded/in"
18
- require "mongoid/relations/embedded/many"
19
- require "mongoid/relations/embedded/one"
20
- require "mongoid/relations/referenced/in"
21
- require "mongoid/relations/referenced/many"
22
- require "mongoid/relations/referenced/many_to_many"
23
- require "mongoid/relations/referenced/one"
24
- require "mongoid/relations/reflections"
25
- require "mongoid/relations/synchronization"
26
- require "mongoid/relations/touchable"
27
- require "mongoid/relations/metadata"
28
- require "mongoid/relations/macros"
29
-
30
- module Mongoid
31
-
32
- # All classes and modules under the relations namespace handle the
33
- # functionality that has to do with embedded and referenced (relational)
34
- # associations.
35
- module Relations
36
- extend ActiveSupport::Concern
37
- include Accessors
38
- include AutoSave
39
- include Cascading
40
- include Cyclic
41
- include Builders
42
- include Macros
43
- include Polymorphic
44
- include Reflections
45
- include Synchronization
46
- include Touchable
47
- include CounterCache
48
-
49
- attr_accessor :__metadata
50
- alias :relation_metadata :__metadata
51
-
52
- # Determine if the document itself is embedded in another document via the
53
- # proper channels. (If it has a parent document.)
54
- #
55
- # @example Is the document embedded?
56
- # address.embedded?
57
- #
58
- # @return [ true, false ] True if the document has a parent document.
59
- #
60
- # @since 2.0.0.rc.1
61
- def embedded?
62
- @embedded ||= (cyclic ? _parent.present? : self.class.embedded?)
63
- end
64
-
65
- # Determine if the document is part of an embeds_many relation.
66
- #
67
- # @example Is the document in an embeds many?
68
- # address.embedded_many?
69
- #
70
- # @return [ true, false ] True if in an embeds many.
71
- #
72
- # @since 2.0.0.rc.1
73
- def embedded_many?
74
- __metadata && __metadata.macro == :embeds_many
75
- end
76
-
77
- # Determine if the document is part of an embeds_one relation.
78
- #
79
- # @example Is the document in an embeds one?
80
- # address.embedded_one?
81
- #
82
- # @return [ true, false ] True if in an embeds one.
83
- #
84
- # @since 2.0.0.rc.1
85
- def embedded_one?
86
- __metadata && __metadata.macro == :embeds_one
87
- end
88
-
89
- # Get the metadata name for this document. If no metadata was defined
90
- # will raise an error.
91
- #
92
- # @example Get the metadata name.
93
- # document.metadata_name
94
- #
95
- # @raise [ Errors::NoMetadata ] If no metadata is present.
96
- #
97
- # @return [ Symbol ] The metadata name.
98
- #
99
- # @since 3.0.0
100
- def metadata_name
101
- raise Errors::NoMetadata.new(self.class.name) unless __metadata
102
- __metadata.name
103
- end
104
-
105
- # Determine if the document is part of an references_many relation.
106
- #
107
- # @example Is the document in a references many?
108
- # post.referenced_many?
109
- #
110
- # @return [ true, false ] True if in a references many.
111
- #
112
- # @since 2.0.0.rc.1
113
- def referenced_many?
114
- __metadata && __metadata.macro == :has_many
115
- end
116
-
117
- # Determine if the document is part of an references_one relation.
118
- #
119
- # @example Is the document in a references one?
120
- # address.referenced_one?
121
- #
122
- # @return [ true, false ] True if in a references one.
123
- #
124
- # @since 2.0.0.rc.1
125
- def referenced_one?
126
- __metadata && __metadata.macro == :has_one
127
- end
128
-
129
- # Convenience method for iterating through the loaded relations and
130
- # reloading them.
131
- #
132
- # @example Reload the relations.
133
- # document.reload_relations
134
- #
135
- # @return [ Hash ] The relations metadata.
136
- #
137
- # @since 2.1.6
138
- def reload_relations
139
- relations.each_pair do |name, meta|
140
- if instance_variable_defined?("@_#{name}")
141
- if _parent.nil? || instance_variable_get("@_#{name}") != _parent
142
- remove_instance_variable("@_#{name}")
143
- end
144
- end
145
- end
146
- end
147
- end
148
- end
@@ -1,267 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
-
5
- # This module contains all the behaviour related to accessing relations
6
- # through the getters and setters, and how to delegate to builders to
7
- # create new ones.
8
- module Accessors
9
- extend ActiveSupport::Concern
10
-
11
- # Builds the related document and creates the relation unless the
12
- # document is nil, then sets the relation on this document.
13
- #
14
- # @example Build the relation.
15
- # person.__build__(:addresses, { :_id => 1 }, metadata)
16
- #
17
- # @param [ String, Symbol ] name The name of the relation.
18
- # @param [ Hash, BSON::ObjectId ] object The id or attributes to use.
19
- # @param [ Metadata ] metadata The relation's metadata.
20
- #
21
- # @return [ Proxy ] The relation.
22
- #
23
- # @since 2.0.0.rc.1
24
- def __build__(name, object, metadata)
25
- relation = create_relation(object, metadata)
26
- set_relation(name, relation)
27
- end
28
-
29
- # Create a relation from an object and metadata.
30
- #
31
- # @example Create the relation.
32
- # person.create_relation(document, metadata)
33
- #
34
- # @param [ Document, Array<Document> ] object The relation target.
35
- # @param [ Metadata ] metadata The relation metadata.
36
- #
37
- # @return [ Proxy ] The relation.
38
- #
39
- # @since 2.0.0.rc.1
40
- def create_relation(object, metadata)
41
- type = @attributes[metadata.inverse_type]
42
- target = metadata.builder(self, object).build(type)
43
- target ? metadata.relation.new(self, target, metadata) : nil
44
- end
45
-
46
- # Resets the criteria inside the relation proxy. Used by many to many
47
- # relations to keep the underlying ids array in sync.
48
- #
49
- # @example Reset the relation criteria.
50
- # person.reset_relation_criteria(:preferences)
51
- #
52
- # @param [ Symbol ] name The name of the relation.
53
- #
54
- # @since 3.0.14
55
- def reset_relation_criteria(name)
56
- if instance_variable_defined?("@_#{name}")
57
- send(name).reset_unloaded
58
- end
59
- end
60
-
61
- # Set the supplied relation to an instance variable on the class with the
62
- # provided name. Used as a helper just for code cleanliness.
63
- #
64
- # @example Set the proxy on the document.
65
- # person.set(:addresses, addresses)
66
- #
67
- # @param [ String, Symbol ] name The name of the relation.
68
- # @param [ Proxy ] relation The relation to set.
69
- #
70
- # @return [ Proxy ] The relation.
71
- #
72
- # @since 2.0.0.rc.1
73
- def set_relation(name, relation)
74
- instance_variable_set("@_#{name}", relation)
75
- end
76
-
77
- private
78
-
79
- # Get the relation. Extracted out from the getter method to avoid
80
- # infinite recursion when overriding the getter.
81
- #
82
- # @api private
83
- #
84
- # @example Get the relation.
85
- # document.get_relation(:name, metadata)
86
- #
87
- # @param [ Symbol ] name The name of the relation.
88
- # @param [ Metadata ] metadata The relation metadata.
89
- # @param [ true, false ] reload If the relation is to be reloaded.
90
- #
91
- # @return [ Proxy ] The relation.
92
- #
93
- # @since 3.0.16
94
- def get_relation(name, metadata, object, reload = false)
95
- if !reload && (value = ivar(name)) != false
96
- value
97
- else
98
- _building do
99
- _loading do
100
- if object && needs_no_database_query?(object, metadata)
101
- __build__(name, object, metadata)
102
- else
103
- __build__(name, attributes[metadata.key], metadata)
104
- end
105
- end
106
- end
107
- end
108
- end
109
-
110
- def needs_no_database_query?(object, metadata)
111
- object.is_a?(Document) && !object.embedded? &&
112
- object._id == attributes[metadata.key]
113
- end
114
-
115
- # Is the current code executing without autobuild functionality?
116
- #
117
- # @example Is autobuild disabled?
118
- # document.without_autobuild?
119
- #
120
- # @return [ true, false ] If autobuild is disabled.
121
- #
122
- # @since 3.0.0
123
- def without_autobuild?
124
- Threaded.executing?(:without_autobuild)
125
- end
126
-
127
- # Yield to the block with autobuild functionality turned off.
128
- #
129
- # @example Execute without autobuild.
130
- # document.without_autobuild do
131
- # document.name
132
- # end
133
- #
134
- # @return [ Object ] The result of the yield.
135
- #
136
- # @since 3.0.0
137
- def without_autobuild
138
- Threaded.begin_execution("without_autobuild")
139
- yield
140
- ensure
141
- Threaded.exit_execution("without_autobuild")
142
- end
143
-
144
- module ClassMethods
145
-
146
- # Adds the existence check for relations.
147
- #
148
- # @example Add the existence check.
149
- # Person.existence_check(:name, meta)
150
- #
151
- # @example Check if a relation exists.
152
- # person = Person.new
153
- # person.has_game?
154
- # person.game?
155
- #
156
- # @param [ String, Symbol ] name The name of the relation.
157
- #
158
- # @return [ Class ] The model being set up.
159
- #
160
- # @since 3.0.0
161
- def existence_check(name)
162
- module_eval <<-END, __FILE__, __LINE__ + 1
163
- def #{name}?
164
- without_autobuild { !__send__(:#{name}).blank? }
165
- end
166
- alias :has_#{name}? :#{name}?
167
- END
168
- self
169
- end
170
-
171
- # Defines the getter for the relation. Nothing too special here: just
172
- # return the instance variable for the relation if it exists or build
173
- # the thing.
174
- #
175
- # @example Set up the getter for the relation.
176
- # Person.getter("addresses", metadata)
177
- #
178
- # @param [ String, Symbol ] name The name of the relation.
179
- # @param [ Metadata ] metadata The metadata for the relation.
180
- #
181
- # @return [ Class ] The class being set up.
182
- #
183
- # @since 2.0.0.rc.1
184
- def getter(name, metadata)
185
- re_define_method(name) do |reload = false|
186
- value = get_relation(name, metadata, nil, reload)
187
- if value.nil? && metadata.autobuilding? && !without_autobuild?
188
- value = send("build_#{name}")
189
- end
190
- value
191
- end
192
- self
193
- end
194
-
195
- # Defines the getter for the ids of documents in the relation. Should
196
- # be specify only for referenced many relations.
197
- #
198
- # @example Set up the ids getter for the relation.
199
- # Person.ids_getter("addresses", metadata)
200
- #
201
- # @param [ String, Symbol ] name The name of the relation.
202
- #
203
- # @return [ Class ] The class being set up.
204
- def ids_getter(name, metadata)
205
- ids_method = "#{name.to_s.singularize}_ids"
206
- re_define_method(ids_method) do
207
- send(name).only(:id).map(&:id)
208
- end
209
- self
210
- end
211
-
212
- # Defines the setter for the relation. This does a few things based on
213
- # some conditions. If there is an existing association, a target
214
- # substitution will take place, otherwise a new relation will be
215
- # created with the supplied target.
216
- #
217
- # @example Set up the setter for the relation.
218
- # Person.setter("addresses", metadata)
219
- #
220
- # @param [ String, Symbol ] name The name of the relation.
221
- # @param [ Metadata ] metadata The metadata for the relation.
222
- #
223
- # @return [ Class ] The class being set up.
224
- #
225
- # @since 2.0.0.rc.1
226
- def setter(name, metadata)
227
- re_define_method("#{name}=") do |object|
228
- without_autobuild do
229
- if value = get_relation(name, metadata, object)
230
- if value.respond_to?(:substitute)
231
- set_relation(name, value.substitute(object.substitutable))
232
- else
233
- value = __build__(name, value, metadata)
234
- set_relation(name, value.substitute(object.substitutable))
235
- end
236
- else
237
- __build__(name, object.substitutable, metadata)
238
- end
239
- end
240
- end
241
- self
242
- end
243
-
244
- # Defines the setter method that allows you to set documents
245
- # in this relation by their ids. The defined setter, finds
246
- # documents with given ids and invokes regular relation setter
247
- # with found documents. Ids setters should be defined only for
248
- # referenced many relations.
249
- #
250
- # @example Set up the id_setter for the relation.
251
- # Person.ids_setter("addesses", metadata)
252
- #
253
- # @param [ String, Symbol ] name The name of the relation.
254
- # @param [ Metadata ] metadata The metadata for the relation.
255
- #
256
- # @return [ Class ] The class being set up.
257
- def ids_setter(name, metadata)
258
- ids_method = "#{name.to_s.singularize}_ids="
259
- re_define_method(ids_method) do |ids|
260
- send(metadata.setter, metadata.klass.find(ids.reject(&:blank?)))
261
- end
262
- self
263
- end
264
- end
265
- end
266
- end
267
- end