mongoid 6.4.2 → 7.0.3

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 (318) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/config/locales/en.yml +17 -0
  4. data/lib/mongoid/association/accessors.rb +339 -0
  5. data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
  6. data/lib/mongoid/association/builders.rb +92 -0
  7. data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
  8. data/lib/mongoid/association/depending.rb +137 -0
  9. data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
  10. data/lib/mongoid/{relations → association}/embedded/batchable.rb +19 -19
  11. data/lib/mongoid/association/embedded/cyclic.rb +109 -0
  12. data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
  13. data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
  14. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
  15. data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
  16. data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
  17. data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
  18. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +552 -0
  19. data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
  20. data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
  21. data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
  22. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
  23. data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
  24. data/lib/mongoid/association/embedded.rb +4 -0
  25. data/lib/mongoid/association/macros.rb +204 -0
  26. data/lib/mongoid/{relations → association}/many.rb +19 -49
  27. data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
  28. data/lib/mongoid/association/nested/many.rb +200 -0
  29. data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
  30. data/lib/mongoid/association/nested/one.rb +127 -0
  31. data/lib/mongoid/association/nested.rb +15 -0
  32. data/lib/mongoid/{relations → association}/one.rb +6 -6
  33. data/lib/mongoid/association/options.rb +152 -0
  34. data/lib/mongoid/{relations → association}/proxy.rb +31 -58
  35. data/lib/mongoid/association/referenced/auto_save.rb +79 -0
  36. data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
  37. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
  38. data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
  39. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
  40. data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
  41. data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
  42. data/lib/mongoid/association/referenced/eager.rb +162 -0
  43. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
  44. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  45. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +312 -0
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
  48. data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
  49. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  50. data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
  51. data/lib/mongoid/association/referenced/has_many/enumerable.rb +510 -0
  52. data/lib/mongoid/association/referenced/has_many/proxy.rb +578 -0
  53. data/lib/mongoid/association/referenced/has_many.rb +275 -0
  54. data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
  55. data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
  56. data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
  57. data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
  58. data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
  59. data/lib/mongoid/association/referenced/has_one.rb +204 -0
  60. data/lib/mongoid/association/referenced/syncable.rb +170 -0
  61. data/lib/mongoid/association/referenced.rb +7 -0
  62. data/lib/mongoid/{relations → association}/reflections.rb +21 -17
  63. data/lib/mongoid/association/relatable.rb +509 -0
  64. data/lib/mongoid/{relations.rb → association.rb} +57 -56
  65. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  66. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  67. data/lib/mongoid/atomic.rb +4 -4
  68. data/lib/mongoid/attributes/dynamic.rb +2 -2
  69. data/lib/mongoid/attributes/nested.rb +22 -11
  70. data/lib/mongoid/attributes/processing.rb +2 -2
  71. data/lib/mongoid/attributes/readonly.rb +2 -4
  72. data/lib/mongoid/attributes.rb +22 -13
  73. data/lib/mongoid/changeable.rb +1 -1
  74. data/lib/mongoid/clients/options.rb +7 -5
  75. data/lib/mongoid/composable.rb +4 -4
  76. data/lib/mongoid/config.rb +1 -0
  77. data/lib/mongoid/contextual/atomic.rb +1 -1
  78. data/lib/mongoid/contextual/geo_near.rb +1 -1
  79. data/lib/mongoid/contextual/memory.rb +21 -3
  80. data/lib/mongoid/contextual/mongo.rb +10 -8
  81. data/lib/mongoid/copyable.rb +7 -6
  82. data/lib/mongoid/criteria/includable.rb +14 -14
  83. data/lib/mongoid/criteria/modifiable.rb +8 -14
  84. data/lib/mongoid/criteria/options.rb +2 -2
  85. data/lib/mongoid/criteria/queryable/extensions/string.rb +1 -1
  86. data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
  87. data/lib/mongoid/criteria/queryable/selectable.rb +37 -7
  88. data/lib/mongoid/criteria.rb +2 -2
  89. data/lib/mongoid/document.rb +15 -6
  90. data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
  91. data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
  92. data/lib/mongoid/errors/unknown_model.rb +25 -0
  93. data/lib/mongoid/errors.rb +3 -0
  94. data/lib/mongoid/extensions/array.rb +5 -5
  95. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  96. data/lib/mongoid/extensions/hash.rb +5 -2
  97. data/lib/mongoid/extensions/object.rb +4 -4
  98. data/lib/mongoid/extensions/range.rb +1 -0
  99. data/lib/mongoid/extensions/regexp.rb +1 -0
  100. data/lib/mongoid/extensions.rb +0 -4
  101. data/lib/mongoid/factory.rb +13 -3
  102. data/lib/mongoid/fields/foreign_key.rb +5 -5
  103. data/lib/mongoid/fields/standard.rb +2 -14
  104. data/lib/mongoid/fields/validators/macro.rb +1 -1
  105. data/lib/mongoid/fields.rb +3 -3
  106. data/lib/mongoid/indexable.rb +4 -1
  107. data/lib/mongoid/interceptable.rb +5 -5
  108. data/lib/mongoid/matchable/and.rb +1 -1
  109. data/lib/mongoid/matchable/elem_match.rb +9 -3
  110. data/lib/mongoid/matchable/eq.rb +22 -0
  111. data/lib/mongoid/matchable/ne.rb +1 -1
  112. data/lib/mongoid/matchable.rb +3 -1
  113. data/lib/mongoid/persistable/deletable.rb +7 -6
  114. data/lib/mongoid/persistable/incrementable.rb +1 -1
  115. data/lib/mongoid/persistable/logical.rb +1 -1
  116. data/lib/mongoid/persistable/settable.rb +57 -12
  117. data/lib/mongoid/persistable.rb +4 -5
  118. data/lib/mongoid/persistence_context.rb +20 -5
  119. data/lib/mongoid/query_cache.rb +8 -4
  120. data/lib/mongoid/railtie.rb +17 -0
  121. data/lib/mongoid/railties/controller_runtime.rb +86 -0
  122. data/lib/mongoid/scopable.rb +3 -3
  123. data/lib/mongoid/serializable.rb +4 -4
  124. data/lib/mongoid/shardable.rb +1 -1
  125. data/lib/mongoid/threaded.rb +36 -0
  126. data/lib/mongoid/touchable.rb +102 -0
  127. data/lib/mongoid/traversable.rb +3 -3
  128. data/lib/mongoid/validatable/presence.rb +2 -2
  129. data/lib/mongoid/validatable/uniqueness.rb +4 -4
  130. data/lib/mongoid/validatable.rb +8 -8
  131. data/lib/mongoid/version.rb +1 -1
  132. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -0
  133. data/spec/app/models/animal.rb +2 -1
  134. data/spec/app/models/bomb.rb +1 -1
  135. data/spec/app/models/message.rb +1 -1
  136. data/spec/app/models/minim.rb +7 -0
  137. data/spec/app/models/person.rb +5 -2
  138. data/spec/app/models/shipment_address.rb +1 -0
  139. data/spec/app/models/store_as_dup_test3.rb +7 -0
  140. data/spec/app/models/store_as_dup_test4.rb +7 -0
  141. data/spec/app/models/updatable.rb +7 -0
  142. data/spec/app/models/vertex.rb +6 -0
  143. data/spec/app/models/wiki_page.rb +1 -1
  144. data/spec/config/mongoid.yml +13 -3
  145. data/spec/integration/associations/belongs_to_spec.rb +13 -0
  146. data/spec/lite_spec_helper.rb +56 -0
  147. data/spec/mongoid/{relations → association}/accessors_spec.rb +40 -1
  148. data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
  149. data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
  150. data/spec/mongoid/association/constrainable_spec.rb +115 -0
  151. data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
  152. data/spec/mongoid/association/depending_spec.rb +866 -0
  153. data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
  154. data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
  155. data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
  156. data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
  157. data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
  158. data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
  159. data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
  160. data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
  161. data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +124 -182
  162. data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
  163. data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
  164. data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
  165. data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
  166. data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
  167. data/spec/mongoid/{relations → association}/macros_spec.rb +148 -73
  168. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
  169. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
  170. data/spec/mongoid/association/options_spec.rb +1321 -0
  171. data/spec/mongoid/{relations → association}/polymorphic_spec.rb +66 -34
  172. data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
  173. data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
  174. data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +33 -14
  175. data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
  176. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2006 -0
  177. data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
  178. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
  179. data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +26 -7
  180. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +56 -0
  181. data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
  182. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -0
  183. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
  184. data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
  185. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
  186. data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +26 -11
  187. data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +122 -1
  188. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
  189. data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
  190. data/spec/mongoid/association/referenced/has_many_models.rb +37 -0
  191. data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
  192. data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
  193. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
  194. data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
  195. data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
  196. data/spec/mongoid/association/referenced/has_one_models.rb +48 -0
  197. data/spec/mongoid/association/referenced/has_one_spec.rb +1350 -0
  198. data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
  199. data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
  200. data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
  201. data/spec/mongoid/atomic/modifiers_spec.rb +2 -2
  202. data/spec/mongoid/atomic_spec.rb +4 -4
  203. data/spec/mongoid/attributes/nested_spec.rb +29 -11
  204. data/spec/mongoid/attributes/readonly_spec.rb +80 -125
  205. data/spec/mongoid/attributes_spec.rb +38 -2
  206. data/spec/mongoid/clients/factory_spec.rb +24 -18
  207. data/spec/mongoid/clients/options_spec.rb +58 -44
  208. data/spec/mongoid/clients/sessions_spec.rb +1 -1
  209. data/spec/mongoid/clients/transactions_spec.rb +369 -0
  210. data/spec/mongoid/clients_spec.rb +68 -8
  211. data/spec/mongoid/config_spec.rb +27 -1
  212. data/spec/mongoid/contextual/memory_spec.rb +19 -0
  213. data/spec/mongoid/contextual/mongo_spec.rb +33 -5
  214. data/spec/mongoid/copyable_spec.rb +90 -6
  215. data/spec/mongoid/copyable_spec_models.rb +17 -0
  216. data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
  217. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
  218. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +43 -0
  219. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
  220. data/spec/mongoid/criteria/queryable/selectable_spec.rb +42 -3
  221. data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
  222. data/spec/mongoid/criteria/scopable_spec.rb +81 -0
  223. data/spec/mongoid/criteria_spec.rb +33 -18
  224. data/spec/mongoid/document_spec.rb +83 -4
  225. data/spec/mongoid/extensions/array_spec.rb +11 -15
  226. data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
  227. data/spec/mongoid/extensions/hash_spec.rb +18 -1
  228. data/spec/mongoid/extensions/object_spec.rb +7 -11
  229. data/spec/mongoid/extensions/range_spec.rb +7 -0
  230. data/spec/mongoid/extensions/regexp_spec.rb +23 -0
  231. data/spec/mongoid/factory_spec.rb +19 -1
  232. data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
  233. data/spec/mongoid/fields_spec.rb +2 -2
  234. data/spec/mongoid/findable_spec.rb +1 -1
  235. data/spec/mongoid/indexable_spec.rb +18 -8
  236. data/spec/mongoid/interceptable_spec.rb +22 -1
  237. data/spec/mongoid/matchable/elem_match_spec.rb +20 -0
  238. data/spec/mongoid/matchable/eq_spec.rb +48 -0
  239. data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
  240. data/spec/mongoid/persistable/savable_spec.rb +2 -2
  241. data/spec/mongoid/persistable/settable_spec.rb +95 -10
  242. data/spec/mongoid/persistable_spec.rb +21 -6
  243. data/spec/mongoid/persistence_context_spec.rb +1 -1
  244. data/spec/mongoid/query_cache_spec.rb +61 -22
  245. data/spec/mongoid/relations/proxy_spec.rb +124 -124
  246. data/spec/mongoid/scopable_spec.rb +13 -0
  247. data/spec/mongoid/shardable_spec.rb +32 -12
  248. data/spec/mongoid/threaded_spec.rb +68 -0
  249. data/spec/mongoid/{relations/touchable_spec.rb → touchable_spec.rb} +40 -1
  250. data/spec/mongoid/validatable/associated_spec.rb +1 -1
  251. data/spec/mongoid/validatable/presence_spec.rb +7 -6
  252. data/spec/mongoid/validatable_spec.rb +1 -1
  253. data/spec/rails/controller_extension/controller_runtime_spec.rb +110 -0
  254. data/spec/spec_helper.rb +51 -25
  255. data/spec/support/constraints.rb +101 -0
  256. data/spec/support/macros.rb +20 -0
  257. data/spec/support/spec_config.rb +39 -0
  258. metadata +602 -582
  259. checksums.yaml.gz.sig +0 -2
  260. data/lib/mongoid/relations/accessors.rb +0 -267
  261. data/lib/mongoid/relations/auto_save.rb +0 -94
  262. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  263. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  264. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  265. data/lib/mongoid/relations/bindings.rb +0 -9
  266. data/lib/mongoid/relations/builder.rb +0 -57
  267. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  268. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  269. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  270. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  271. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  272. data/lib/mongoid/relations/builders.rb +0 -106
  273. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  274. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  275. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  276. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  277. data/lib/mongoid/relations/cascading.rb +0 -56
  278. data/lib/mongoid/relations/conversions.rb +0 -34
  279. data/lib/mongoid/relations/counter_cache.rb +0 -160
  280. data/lib/mongoid/relations/cyclic.rb +0 -107
  281. data/lib/mongoid/relations/eager/base.rb +0 -153
  282. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  283. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  284. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  285. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  286. data/lib/mongoid/relations/embedded/in.rb +0 -241
  287. data/lib/mongoid/relations/embedded/many.rb +0 -683
  288. data/lib/mongoid/relations/embedded/one.rb +0 -235
  289. data/lib/mongoid/relations/macros.rb +0 -367
  290. data/lib/mongoid/relations/metadata.rb +0 -1179
  291. data/lib/mongoid/relations/nested_builder.rb +0 -74
  292. data/lib/mongoid/relations/options.rb +0 -49
  293. data/lib/mongoid/relations/polymorphic.rb +0 -39
  294. data/lib/mongoid/relations/referenced/in.rb +0 -304
  295. data/lib/mongoid/relations/referenced/many.rb +0 -812
  296. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  297. data/lib/mongoid/relations/referenced/one.rb +0 -290
  298. data/lib/mongoid/relations/synchronization.rb +0 -169
  299. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  300. data/lib/mongoid/relations/targets.rb +0 -2
  301. data/lib/mongoid/relations/touchable.rb +0 -97
  302. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  303. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  304. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  305. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  306. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  307. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  308. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  309. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  310. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  311. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  312. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  313. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  314. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  315. data/spec/mongoid/relations/options_spec.rb +0 -35
  316. data.tar.gz.sig +0 -0
  317. metadata.gz.sig +0 -0
  318. /data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
@@ -1,111 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Relations::Builders::Referenced::One do
4
-
5
- let(:base) do
6
- double(new_record?: false)
7
- end
8
-
9
- describe "#build" do
10
-
11
- let(:criteria) do
12
- Post.where("person_id" => object)
13
- end
14
-
15
- let(:metadata) do
16
- double(
17
- klass: Post,
18
- name: :post,
19
- foreign_key: "person_id",
20
- criteria: criteria,
21
- inverse_klass: Person
22
- )
23
- end
24
-
25
- let(:builder) do
26
- described_class.new(base, metadata, object)
27
- end
28
-
29
- context "when provided an id" do
30
-
31
- let(:object_id) do
32
- BSON::ObjectId.new
33
- end
34
-
35
- let(:object) do
36
- object_id
37
- end
38
-
39
- let(:post) do
40
- double
41
- end
42
-
43
- before do
44
- expect(criteria).to receive(:first).and_return(post)
45
- end
46
-
47
- let!(:documents) do
48
- builder.build
49
- end
50
-
51
- it "sets the document" do
52
- expect(documents).to eq(post)
53
- end
54
- end
55
-
56
- context "when provided a object" do
57
-
58
- let(:object) do
59
- Post.new
60
- end
61
-
62
- let(:document) do
63
- builder.build
64
- end
65
-
66
- it "returns the object" do
67
- expect(document).to eq(object)
68
- end
69
- end
70
- end
71
-
72
- describe "#build" do
73
-
74
- let(:person) do
75
- Person.new
76
- end
77
-
78
- context "when the document is not found" do
79
-
80
- it "returns nil" do
81
- expect(person.game).to be_nil
82
- end
83
- end
84
-
85
- context "when the document is persisted" do
86
-
87
- let!(:game) do
88
- Game.create(person: person)
89
- end
90
-
91
- it "returns the document" do
92
- expect(person.game).to eq(game)
93
- end
94
- end
95
-
96
- context "when the document have a non standard pk" do
97
-
98
- before do
99
- person.save
100
- end
101
-
102
- let!(:cat) do
103
- Cat.create(person: person)
104
- end
105
-
106
- it "returns the document" do
107
- expect(person.cat).to eq(cat)
108
- end
109
- end
110
- end
111
- end
@@ -1,101 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Relations::Cascading::Delete do
4
-
5
- let(:person) do
6
- Person.create
7
- end
8
-
9
- describe "#cascade" do
10
-
11
- context "when cascading a has one" do
12
-
13
- context "when the relation exists" do
14
-
15
- let!(:home) do
16
- person.create_home
17
- end
18
-
19
- before do
20
- person.delete
21
- end
22
-
23
- it "deletes the relation" do
24
- expect(home).to be_destroyed
25
- end
26
-
27
- it "persists the deletion" do
28
- expect {
29
- home.reload
30
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
31
- end
32
- end
33
-
34
- context "when the relation does not exist" do
35
-
36
- before do
37
- person.delete
38
- end
39
-
40
- it "deletes the base document" do
41
- expect(person).to be_destroyed
42
- end
43
- end
44
- end
45
- end
46
-
47
- context "when cascading a has many" do
48
-
49
- context "when the relation has documents" do
50
-
51
- let!(:post_one) do
52
- person.posts.create(title: "one")
53
- end
54
-
55
- let!(:post_two) do
56
- person.posts.create(title: "two")
57
- end
58
-
59
- context "when the documents are in memory" do
60
-
61
- before do
62
- expect(post_one).to receive(:delete).never
63
- expect(post_two).to receive(:delete).never
64
- person.delete
65
- end
66
-
67
- it "deletes the first document" do
68
- expect(post_one).to be_destroyed
69
- end
70
-
71
- it "deletes the second document" do
72
- expect(post_two).to be_destroyed
73
- end
74
-
75
- it "unbinds the first document" do
76
- expect(post_one.person).to be_nil
77
- end
78
-
79
- it "unbinds the second document" do
80
- expect(post_two.person).to be_nil
81
- end
82
-
83
- it "removes the documents from the relation" do
84
- expect(person.posts).to be_empty
85
- end
86
-
87
- it "persists the first deletion" do
88
- expect {
89
- post_one.reload
90
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
91
- end
92
-
93
- it "persists the second deletion" do
94
- expect {
95
- post_two.reload
96
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
97
- end
98
- end
99
- end
100
- end
101
- end
@@ -1,47 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Relations::Cascading::Destroy do
4
-
5
- let(:person) do
6
- Person.new
7
- end
8
-
9
- let(:metadata) do
10
- double(name: :posts)
11
- end
12
-
13
- let(:strategy) do
14
- described_class.new(person, metadata)
15
- end
16
-
17
- describe "#cascade" do
18
-
19
- let(:post) do
20
- double
21
- end
22
-
23
- context "when the documents exist" do
24
-
25
- before do
26
- expect(person).to receive(:posts).and_return([ post ])
27
- end
28
-
29
- it "destroys all documents in the relation" do
30
- expect(post).to receive(:destroy)
31
- strategy.cascade
32
- end
33
- end
34
-
35
- context "when no documents exist" do
36
-
37
- before do
38
- expect(person).to receive(:posts).and_return([])
39
- end
40
-
41
- it "does not destroy anything" do
42
- expect(post).to receive(:destroy).never
43
- strategy.cascade
44
- end
45
- end
46
- end
47
- end
@@ -1,32 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Relations::Cascading::Nullify do
4
-
5
- let(:person) do
6
- Person.new
7
- end
8
-
9
- describe "#cascade" do
10
-
11
- let(:relation) do
12
- double
13
- end
14
-
15
- let(:metadata) do
16
- double(name: :posts)
17
- end
18
-
19
- let(:strategy) do
20
- described_class.new(person, metadata)
21
- end
22
-
23
- before do
24
- expect(person).to receive(:posts).and_return(relation)
25
- end
26
-
27
- it "nullifies the relation" do
28
- expect(relation).to receive(:nullify)
29
- strategy.cascade
30
- end
31
- end
32
- end
@@ -1,68 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Mongoid::Relations::Cascading::Restrict do
4
-
5
- before :each do
6
- Person.has_many :drugs, validate: false, dependent: :restrict
7
- end
8
-
9
- after :each do
10
- Person.cascades.delete("drugs")
11
- Person.has_many :drugs, validate: false
12
- end
13
-
14
- let(:person) do
15
- Person.new
16
- end
17
-
18
- let(:metadata) do
19
- double(name: :drugs)
20
- end
21
-
22
- let(:strategy) do
23
- described_class.new(person, metadata)
24
- end
25
-
26
- describe "#cascade" do
27
-
28
- let(:drug) do
29
- double
30
- end
31
-
32
- context "when the document exists" do
33
-
34
- context "when person has no drugs" do
35
-
36
- before do
37
- expect(person).to receive(:drugs).and_return([ ])
38
- end
39
-
40
- it "deletes the person" do
41
- expect { strategy.cascade }.to_not raise_error
42
- end
43
- end
44
-
45
- context "when person has drugs" do
46
-
47
- before do
48
- expect(person).to receive(:drugs).and_return([ drug ])
49
- end
50
-
51
- it "it raises an error" do
52
- expect { strategy.cascade }.to raise_error(Mongoid::Errors::DeleteRestriction)
53
- end
54
- end
55
- end
56
-
57
- context "when no document exists" do
58
- before do
59
- expect(person).to receive(:drugs).and_return([])
60
- end
61
-
62
- it "doesn't delete anything" do
63
- expect(drug).to receive(:delete).never
64
- strategy.cascade
65
- end
66
- end
67
- end
68
- end
@@ -1,355 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Relations::Cascading do
4
-
5
- describe "#cascade!" do
6
-
7
- let(:band) do
8
- Band.new
9
- end
10
-
11
- context "when the metadata exists" do
12
-
13
- context "when the metadata has no cascade strategy" do
14
-
15
- before do
16
- band.cascades.push("records")
17
- end
18
-
19
- after do
20
- band.cascades.delete("records")
21
- end
22
-
23
- it "ignores the cascade" do
24
- expect(band.cascade!).to eq([ "records" ])
25
- end
26
- end
27
- end
28
- end
29
-
30
- describe ".cascade" do
31
-
32
- let(:klass) do
33
- Class.new.tap { |c| c.send(:include, Mongoid::Document) }
34
- end
35
-
36
- context "when the metadata doesnt exist" do
37
-
38
- before do
39
- klass.cascades.push("nothing")
40
- end
41
-
42
- it "does not raise an error" do
43
- expect {
44
- klass.new.cascade!
45
- }.not_to raise_error
46
- end
47
- end
48
-
49
- context "when a dependent option is provided" do
50
-
51
- let(:metadata) do
52
- Mongoid::Relations::Metadata.new(
53
- name: :posts,
54
- dependent: :destroy,
55
- relation: Mongoid::Relations::Referenced::Many
56
- )
57
- end
58
-
59
- let!(:cascaded) do
60
- klass.cascade(metadata)
61
- end
62
-
63
- it "adds the action to the cascades" do
64
- expect(klass.cascades).to include("posts")
65
- end
66
-
67
- it "returns self" do
68
- expect(cascaded).to eq(klass)
69
- end
70
- end
71
-
72
- context "when no dependent option is provided" do
73
-
74
- let(:metadata) do
75
- Mongoid::Relations::Metadata.new(
76
- name: :posts,
77
- relation: Mongoid::Relations::Referenced::Many
78
- )
79
- end
80
-
81
- let!(:cascaded) do
82
- klass.cascade(metadata)
83
- end
84
-
85
- it "does not add an action to the cascades" do
86
- expect(klass.cascades).to_not include("posts")
87
- end
88
-
89
- it "returns self" do
90
- expect(cascaded).to eq(klass)
91
- end
92
- end
93
- end
94
-
95
- [ :delete, :destroy ].each do |method|
96
-
97
- describe "##{method}" do
98
-
99
- context "when cascading removals" do
100
-
101
- context "when dependent is delete" do
102
-
103
- let(:person) do
104
- Person.create
105
- end
106
-
107
- let!(:post) do
108
- person.posts.create(title: "Testing")
109
- end
110
-
111
- before do
112
- person.send(method)
113
- end
114
-
115
- it "deletes the associated documents" do
116
- expect {
117
- Post.find(post.id)
118
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
119
- end
120
- end
121
-
122
- context "when dependent is destroy" do
123
-
124
- let(:person) do
125
- Person.create
126
- end
127
-
128
- let!(:game) do
129
- person.create_game(name: "Pong")
130
- end
131
-
132
- before do
133
- person.send(method)
134
- end
135
-
136
- it "destroys the associated documents" do
137
- expect {
138
- Game.find(game.id)
139
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
140
- end
141
- end
142
-
143
- context "when dependent is nullify" do
144
-
145
- context "when nullifying a references many" do
146
-
147
- let(:movie) do
148
- Movie.create(title: "Bladerunner")
149
- end
150
-
151
- let!(:rating) do
152
- movie.ratings.create(value: 10)
153
- end
154
-
155
- let(:from_db) do
156
- Rating.find(rating.id)
157
- end
158
-
159
- before do
160
- movie.send(method)
161
- end
162
-
163
- it "removes the references to the removed document" do
164
- expect(from_db.ratable_id).to be_nil
165
- end
166
- end
167
-
168
- context "when nullifying a references one" do
169
-
170
- context "when the relation exists" do
171
-
172
- let(:book) do
173
- Book.create(title: "Neuromancer")
174
- end
175
-
176
- let!(:rating) do
177
- book.create_rating(value: 10)
178
- end
179
-
180
- let(:from_db) do
181
- Rating.find(rating.id)
182
- end
183
-
184
- before do
185
- book.send(method)
186
- end
187
-
188
- it "removes the references to the removed document" do
189
- expect(from_db.ratable_id).to be_nil
190
- end
191
- end
192
-
193
- context "when the relation is nil" do
194
-
195
- let(:book) do
196
- Book.create(title: "Neuromancer")
197
- end
198
-
199
- it "returns nil" do
200
- expect(book.send(method)).to be true
201
- end
202
- end
203
- end
204
-
205
- context "when nullifying a many to many" do
206
-
207
- let(:person) do
208
- Person.create
209
- end
210
-
211
- let!(:preference) do
212
- person.preferences.create(name: "Setting")
213
- end
214
-
215
- let(:from_db) do
216
- Preference.find(preference.id)
217
- end
218
-
219
- before do
220
- person.send(method)
221
- end
222
-
223
- it "removes the references from the removed document" do
224
- expect(person.preference_ids).to_not include(preference.id)
225
- end
226
-
227
- it "removes the references to the removed document" do
228
- expect(from_db.person_ids).to_not include(person.id)
229
- end
230
- end
231
- end
232
-
233
- context "when dependent is restrict" do
234
-
235
- context "when restricting a references many" do
236
-
237
- before do
238
- Person.has_many :drugs, dependent: :restrict
239
- end
240
-
241
- after do
242
- Person.cascades.delete("drugs")
243
- Person.has_many :drugs, validate: false
244
- end
245
-
246
- context "when the relation is empty" do
247
-
248
- let(:person) do
249
- Person.new drugs: []
250
- end
251
-
252
- it "raises no error" do
253
- expect{ person.send(method) }.to_not raise_error
254
- end
255
-
256
- it "deletes the parent" do
257
- person.send(method)
258
- expect(person).to be_destroyed
259
- end
260
- end
261
-
262
- context "when the relation is not empty" do
263
-
264
- let(:person) do
265
- Person.new drugs: [ Drug.new ]
266
- end
267
-
268
- it "raises DeleteRestriction error" do
269
- expect{ person.send(method) }.to raise_error(Mongoid::Errors::DeleteRestriction)
270
- end
271
- end
272
- end
273
-
274
- context "when restricting a references one" do
275
-
276
- before do
277
- Person.has_one :account, dependent: :restrict
278
- end
279
-
280
- after do
281
- Person.cascades.delete("account")
282
- Person.has_one :account, validate: false
283
- end
284
-
285
- context "when the relation is empty" do
286
-
287
- let(:person) do
288
- Person.new account: nil
289
- end
290
-
291
- it "raises no error" do
292
- expect{ person.send(method) }.to_not raise_error
293
- end
294
-
295
- it "deletes the parent" do
296
- person.send(method)
297
- expect(person).to be_destroyed
298
- end
299
- end
300
-
301
- context "when the relation is not empty" do
302
-
303
- let(:person) do
304
- Person.new account: Account.new(name: 'test')
305
- end
306
-
307
- it "raises DeleteRestriction error" do
308
- expect { person.send(method) }.to raise_error(Mongoid::Errors::DeleteRestriction)
309
- end
310
- end
311
- end
312
-
313
- context "when restricting a many to many" do
314
-
315
- before do
316
- Person.has_and_belongs_to_many :houses, dependent: :restrict
317
- end
318
-
319
- after do
320
- Person.cascades.delete("houses")
321
- Person.has_and_belongs_to_many :houses, validate: false
322
- end
323
-
324
- context "when the relation is empty" do
325
-
326
- let(:person) do
327
- Person.new houses: []
328
- end
329
-
330
- it "raises no error" do
331
- expect{ person.send(method) }.to_not raise_error
332
- end
333
-
334
- it "deletes the parent" do
335
- person.send(method)
336
- expect(person).to be_destroyed
337
- end
338
- end
339
-
340
- context "when the relation is not empty" do
341
-
342
- let(:person) do
343
- Person.new houses: [House.new]
344
- end
345
-
346
- it "raises DeleteRestriction error" do
347
- expect { person.send(method) }.to raise_error(Mongoid::Errors::DeleteRestriction)
348
- end
349
- end
350
- end
351
- end
352
- end
353
- end
354
- end
355
- end