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
@@ -1,199 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Builders
5
- module NestedAttributes
6
- class Many < NestedBuilder
7
-
8
- # Builds the relation depending on the attributes and the options
9
- # passed to the macro.
10
- #
11
- # This attempts to perform 3 operations, either one of an update of
12
- # the existing relation, a replacement of the relation with a new
13
- # document, or a removal of the relation.
14
- #
15
- # @example Build the nested attrs.
16
- # many.build(person)
17
- #
18
- # @param [ Document ] parent The parent document of the relation.
19
- #
20
- # @return [ Array ] The attributes.
21
- def build(parent, options = {})
22
- @existing = parent.send(metadata.name)
23
- if over_limit?(attributes)
24
- raise Errors::TooManyNestedAttributeRecords.new(existing, options[:limit])
25
- end
26
- attributes.each do |attrs|
27
- if attrs.is_a?(::Hash)
28
- process_attributes(parent, attrs.with_indifferent_access)
29
- else
30
- process_attributes(parent, attrs[1].with_indifferent_access)
31
- end
32
- end
33
- end
34
-
35
- # Create the new builder for nested attributes on one-to-many
36
- # relations.
37
- #
38
- # @example Initialize the builder.
39
- # One.new(metadata, attributes, options)
40
- #
41
- # @param [ Metadata ] metadata The relation metadata.
42
- # @param [ Hash ] attributes The attributes hash to attempt to set.
43
- # @param [ Hash ] options The options defined.
44
- def initialize(metadata, attributes, options = {})
45
- if attributes.respond_to?(:with_indifferent_access)
46
- @attributes = attributes.with_indifferent_access.sort do |a, b|
47
- a[0].to_i <=> b[0].to_i
48
- end
49
- else
50
- @attributes = attributes
51
- end
52
- @metadata = metadata
53
- @options = options
54
- end
55
-
56
- private
57
-
58
- # Can the existing relation potentially be deleted?
59
- #
60
- # @example Is the document destroyable?
61
- # destroyable?({ :_destroy => "1" })
62
- #
63
- # @param [ Hash ] attributes The attributes to pull the flag from.
64
- #
65
- # @return [ true, false ] If the relation can potentially be deleted.
66
- def destroyable?(attributes)
67
- destroy = attributes.delete(:_destroy)
68
- [ 1, "1", true, "true" ].include?(destroy) && allow_destroy?
69
- end
70
-
71
- # Are the supplied attributes of greater number than the supplied
72
- # limit?
73
- #
74
- # @example Are we over the set limit?
75
- # builder.over_limit?({ "street" => "Bond" })
76
- #
77
- # @param [ Hash ] attributes The attributes being set.
78
- #
79
- # @return [ true, false ] If the attributes exceed the limit.
80
- def over_limit?(attributes)
81
- limit = options[:limit]
82
- limit ? attributes.size > limit : false
83
- end
84
-
85
- # Process each set of attributes one at a time for each potential
86
- # new, existing, or ignored document.
87
- #
88
- # @api private
89
- #
90
- # @example Process the attributes
91
- # builder.process_attributes({ "id" => 1, "street" => "Bond" })
92
- #
93
- # @param [ Document ] parent The parent document.
94
- # @param [ Hash ] attrs The single document attributes to process.
95
- #
96
- # @since 2.0.0
97
- def process_attributes(parent, attrs)
98
- return if reject?(parent, attrs)
99
- if id = attrs.extract_id
100
- update_nested_relation(parent, id, attrs)
101
- else
102
- existing.push(Factory.build(metadata.klass, attrs)) unless destroyable?(attrs)
103
- end
104
- end
105
-
106
- # Destroy the child document, needs to do some checking for embedded
107
- # relations and delay the destroy in case parent validation fails.
108
- #
109
- # @api private
110
- #
111
- # @example Destroy the child.
112
- # builder.destroy(parent, relation, doc)
113
- #
114
- # @param [ Document ] parent The parent document.
115
- # @param [ Proxy ] relation The relation proxy.
116
- # @param [ Document ] doc The doc to destroy.
117
- #
118
- # @since 3.0.10
119
- def destroy(parent, relation, doc)
120
- doc.flagged_for_destroy = true
121
- if !doc.embedded? || parent.new_record?
122
- destroy_document(relation, doc)
123
- else
124
- parent.flagged_destroys.push(->{ destroy_document(relation, doc) })
125
- end
126
- end
127
-
128
- # Destroy the document.
129
- #
130
- # @api private
131
- #
132
- # @example Destroy the document.
133
- # builder.destroy_document(relation, doc)
134
- #
135
- # @param [ Proxy ] relation The relation proxy.
136
- # @param [ Document ] doc The document to delete.
137
- #
138
- # @since 3.0.10
139
- def destroy_document(relation, doc)
140
- relation.delete(doc)
141
- doc.destroy unless doc.embedded? || doc.destroyed?
142
- end
143
-
144
- # Update the document.
145
- #
146
- # @api private
147
- #
148
- # @example Update the document.
149
- # builder.update_document(doc, {}, options)
150
- #
151
- # @param [ Document ] doc The document to update.
152
- # @param [ Hash ] attrs The attributes.
153
- #
154
- # @since 3.0.10
155
- def update_document(doc, attrs)
156
- attrs.delete_id
157
- if metadata.embedded?
158
- doc.assign_attributes(attrs)
159
- else
160
- doc.update_attributes(attrs)
161
- end
162
- end
163
-
164
- # Update nested relation.
165
- #
166
- # @api private
167
- #
168
- # @example Update nested relation.
169
- # builder.update_nested_relation(parent, id, attrs)
170
- #
171
- # @param [ Document ] parent The parent document.
172
- # @param [ String, BSON::ObjectId ] id of the related document.
173
- # @param [ Hash ] attrs The single document attributes to process.
174
- #
175
- # @since 6.0.0
176
- def update_nested_relation(parent, id, attrs)
177
- first = existing.first
178
- converted = first ? convert_id(first.class, id) : id
179
-
180
- if existing.where(id: converted).exists?
181
- # document exists in relation
182
- doc = existing.find(converted)
183
- if destroyable?(attrs)
184
- destroy(parent, existing, doc)
185
- else
186
- update_document(doc, attrs)
187
- end
188
- else
189
- # push existing document to relation
190
- doc = existing.unscoped.find(converted)
191
- update_document(doc, attrs)
192
- existing.push(doc) unless destroyable?(attrs)
193
- end
194
- end
195
- end
196
- end
197
- end
198
- end
199
- end
@@ -1,26 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Builders
5
- module Referenced
6
- class In < Builder
7
-
8
- # This builder either takes a foreign key and queries for the
9
- # object or a document, where it will just return it.
10
- #
11
- # @example Build the document.
12
- # Builder.new(meta, attrs).build
13
- #
14
- # @param [ String ] type The type of document to query for.
15
- #
16
- # @return [ Document ] A single document.
17
- def build(type = nil)
18
- return object unless query?
19
- model = type ? type.constantize : metadata.klass
20
- metadata.criteria(object, model).first
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,26 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Builders
5
- module Referenced
6
- class Many < Builder
7
-
8
- # This builder either takes a hash and queries for the
9
- # object or an array of documents, where it will just return tem.
10
- #
11
- # @example Build the documents.
12
- # Builder.new(meta, attrs).build
13
- #
14
- # @param [ String ] type The type of document to query for.
15
- #
16
- # @return [ Array<Document> ] The documents.
17
- def build(type = nil)
18
- return object unless query?
19
- return [] if object.is_a?(Array)
20
- metadata.criteria(Conversions.flag(object, metadata), base.class)
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,39 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Builders
5
- module Referenced
6
- class ManyToMany < Builder
7
-
8
- # This builder either takes a hash and queries for the
9
- # object or an array of documents, where it will just return them.
10
- #
11
- # @example Build the documents.
12
- # Builder.new(meta, attrs).build
13
- #
14
- # @param [ String ] type The type of document to query for.
15
- #
16
- # @return [ Array<Document> ] The documents.
17
- def build(type = nil)
18
- return object.try(:dup) unless query?
19
- ids = object || []
20
- metadata.criteria(ids, base.class)
21
- end
22
-
23
- # Do we need to perform a database query? It will be so if the object we
24
- # have is not a document.
25
- #
26
- # @example Should we query the database?
27
- # builder.query?
28
- #
29
- # @return [ true, false ] Whether a database query should happen.
30
- #
31
- # @since 2.0.0.rc.1
32
- def query?
33
- object.nil? || !object.first.is_a?(Mongoid::Document)
34
- end
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,26 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Builders
5
- module Referenced
6
- class One < Builder
7
-
8
- # This builder either takes an _id or an object and queries for the
9
- # inverse side using the id or sets the object.
10
- #
11
- # @example Build the document.
12
- # Builder.new(meta, attrs).build
13
- #
14
- # @param [ String ] type The type of document to query for.
15
- #
16
- # @return [ Document ] A single document.
17
- def build(type = nil)
18
- return object unless query?
19
- return nil if base.new_record?
20
- metadata.criteria(Conversions.flag(object, metadata), base.class).first
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,56 +0,0 @@
1
- # encoding: utf-8
2
- require "mongoid/relations/cascading/delete"
3
- require "mongoid/relations/cascading/destroy"
4
- require "mongoid/relations/cascading/nullify"
5
- require "mongoid/relations/cascading/restrict"
6
-
7
- module Mongoid
8
- module Relations
9
-
10
- # This module defines the behaviour for setting up cascading deletes and
11
- # nullifies for relations, and how to delegate to the approriate strategy.
12
- module Cascading
13
- extend ActiveSupport::Concern
14
-
15
- included do
16
- class_attribute :cascades
17
- self.cascades = []
18
- end
19
-
20
- # Perform all cascading deletes, destroys, or nullifies. Will delegate to
21
- # the appropriate strategy to perform the operation.
22
- #
23
- # @example Execute cascades.
24
- # document.cascade!
25
- #
26
- # @since 2.0.0.rc.1
27
- def cascade!
28
- cascades.each do |name|
29
- if meta = relations[name]
30
- strategy = meta.cascade_strategy
31
- strategy.new(self, meta).cascade if strategy
32
- end
33
- end
34
- end
35
-
36
- module ClassMethods
37
-
38
- # Attempt to add the cascading information for the document to know how
39
- # to handle associated documents on a removal.
40
- #
41
- # @example Set up cascading information
42
- # Movie.cascade(metadata)
43
- #
44
- # @param [ Metadata ] metadata The metadata for the relation.
45
- #
46
- # @return [ Class ] The class of the document.
47
- #
48
- # @since 2.0.0.rc.1
49
- def cascade(metadata)
50
- cascades.push(metadata.name.to_s) if metadata.dependent?
51
- self
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,44 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Cascading
5
- class Delete
6
-
7
- attr_accessor :document, :relation, :metadata
8
-
9
- # Initialize the new cascade strategy, which will set up the relation
10
- # and the metadata.
11
- #
12
- # @example Instantiate the strategy
13
- # Strategy.new(document, metadata)
14
- #
15
- # @param [ Document ] document The document to cascade from.
16
- # @param [ Metadata ] metadata The relation's metadata.
17
- #
18
- # @return [ Strategy ] The new strategy.
19
- def initialize(document, metadata)
20
- @document, @metadata = document, metadata
21
- @relation = document.send(metadata.name)
22
- end
23
-
24
- # Execute the cascading deletion for the relation if it already exists.
25
- # This should be optimized in the future potentially not to load all
26
- # objects from the db.
27
- #
28
- # @example Perform the cascading delete.
29
- # strategy.cascade
30
- #
31
- # @since 2.0.0
32
- def cascade
33
- if relation
34
- if relation.cascades.empty?
35
- relation.clear
36
- else
37
- ::Array.wrap(relation).each { |doc| doc.delete }
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,43 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Cascading
5
- class Destroy
6
-
7
- attr_accessor :document, :relation, :metadata
8
-
9
- # Initialize the new cascade strategy, which will set up the relation
10
- # and the metadata.
11
- #
12
- # @example Instantiate the strategy
13
- # Strategy.new(document, metadata)
14
- #
15
- # @param [ Document ] document The document to cascade from.
16
- # @param [ Metadata ] metadata The relation's metadata.
17
- #
18
- # @return [ Strategy ] The new strategy.
19
- def initialize(document, metadata)
20
- @document, @metadata = document, metadata
21
- @relation = document.send(metadata.name)
22
- end
23
-
24
- # Execute the cascading deletion for the relation if it already exists.
25
- # This should be optimized in the future potentially not to load all
26
- # objects from the db.
27
- #
28
- # @example Perform the cascading destroy.
29
- # strategy.cascade
30
- def cascade
31
- if relation
32
- if relation.is_a?(Enumerable)
33
- relation.entries
34
- relation.each { |doc| doc.destroy }
35
- else
36
- relation.destroy
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end