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,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Polymorphic do
3
+ describe "Polymorphic Associations" do
4
4
 
5
5
  describe "#polymorph" do
6
6
 
@@ -12,16 +12,8 @@ describe Mongoid::Relations::Polymorphic do
12
12
 
13
13
  context "when the relation stores a foreign key" do
14
14
 
15
- let(:metadata) do
16
- Mongoid::Relations::Metadata.new(
17
- name: :ratable,
18
- polymorphic: true,
19
- relation: Mongoid::Relations::Referenced::In
20
- )
21
- end
22
-
23
- let!(:polymorphed) do
24
- klass.polymorph(metadata)
15
+ let!(:association) do
16
+ klass.belongs_to :ratable, polymorphic: true
25
17
  end
26
18
 
27
19
  it "sets polymorphic to true" do
@@ -31,24 +23,12 @@ describe Mongoid::Relations::Polymorphic do
31
23
  it "adds the foreign key type field" do
32
24
  expect(klass.fields["ratable_type"]).to_not be_nil
33
25
  end
34
-
35
- it "returns self" do
36
- expect(polymorphed).to eq(klass)
37
- end
38
26
  end
39
27
 
40
28
  context "when the relation does not store a foreign key" do
41
29
 
42
- let(:metadata) do
43
- Mongoid::Relations::Metadata.new(
44
- name: :ratings,
45
- as: :ratable,
46
- relation: Mongoid::Relations::Referenced::Many
47
- )
48
- end
49
-
50
- before do
51
- klass.polymorph(metadata)
30
+ let!(:association) do
31
+ klass.has_many :ratings, as: :ratable
52
32
  end
53
33
 
54
34
  it "sets polymorphic to true" do
@@ -67,15 +47,8 @@ describe Mongoid::Relations::Polymorphic do
67
47
 
68
48
  context "when the relation is not polymorphic" do
69
49
 
70
- let(:metadata) do
71
- Mongoid::Relations::Metadata.new(
72
- name: :ratings,
73
- relation: Mongoid::Relations::Referenced::Many
74
- )
75
- end
76
-
77
- before do
78
- klass.polymorph(metadata)
50
+ let!(:association) do
51
+ klass.has_many :ratings
79
52
  end
80
53
 
81
54
  it "sets polymorphic to false" do
@@ -125,4 +98,63 @@ describe Mongoid::Relations::Polymorphic do
125
98
  end
126
99
  end
127
100
  end
101
+
102
+ context 'when the relation is touchable' do
103
+
104
+ context 'when the relation is embedded' do
105
+
106
+ let(:define_classes) do
107
+
108
+ class FirstOwner
109
+ include Mongoid::Document
110
+
111
+ embeds_one :owned, class_name: 'Owned', as: :embedded_relation_polymorphic_touch_owner
112
+ end
113
+
114
+ class SecondOwner
115
+ include Mongoid::Document
116
+
117
+ embeds_one :owned, class_name: 'Owned', as: :embedded_relation_polymorphic_touch_owner
118
+ end
119
+
120
+ class Owned
121
+ include Mongoid::Document
122
+
123
+ embedded_in :embedded_relation_polymorphic_touch_owner, polymorphic: true, touch: true
124
+ end
125
+ end
126
+
127
+ it 'successfully defines the touch method' do
128
+ expect { define_classes }.not_to raise_error
129
+ end
130
+ end
131
+
132
+ context 'when the relation is not embedded' do
133
+
134
+ let(:define_classes) do
135
+
136
+ class FirstOwner
137
+ include Mongoid::Document
138
+
139
+ has_one :owned, class_name: 'Owned', as: :belongs_relation_polymorphic_touch_owner
140
+ end
141
+
142
+ class SecondOwner
143
+ include Mongoid::Document
144
+
145
+ has_one :owned, class_name: 'Owned', as: :belongs_relation_polymorphic_touch_owner
146
+ end
147
+
148
+ class Owned
149
+ include Mongoid::Document
150
+
151
+ belongs_to :belongs_relation_polymorphic_touch_owner, polymorphic: true, touch: true
152
+ end
153
+ end
154
+
155
+ it 'successfully defines the touch method' do
156
+ expect { define_classes }.not_to raise_error
157
+ end
158
+ end
159
+ end
128
160
  end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Bindings::Referenced::In do
3
+ describe Mongoid::Association::Referenced::BelongsTo::Binding do
4
4
 
5
5
  let(:person) do
6
6
  Person.new
@@ -14,11 +14,11 @@ describe Mongoid::Relations::Bindings::Referenced::In do
14
14
  Post.new
15
15
  end
16
16
 
17
- let(:game_metadata) do
17
+ let(:game_association) do
18
18
  Game.relations["person"]
19
19
  end
20
20
 
21
- let(:post_metadata) do
21
+ let(:post_association) do
22
22
  Post.relations["person"]
23
23
  end
24
24
 
@@ -27,7 +27,7 @@ describe Mongoid::Relations::Bindings::Referenced::In do
27
27
  context "when the child of an references one" do
28
28
 
29
29
  let(:binding) do
30
- described_class.new(game, person, game_metadata)
30
+ described_class.new(game, person, game_association)
31
31
  end
32
32
 
33
33
  context "when the document is bindable with default pk" do
@@ -90,7 +90,7 @@ describe Mongoid::Relations::Bindings::Referenced::In do
90
90
  context "when the child of an references many" do
91
91
 
92
92
  let(:binding) do
93
- described_class.new(post, person, post_metadata)
93
+ described_class.new(post, person, post_association)
94
94
  end
95
95
 
96
96
  context "when the document is bindable" do
@@ -129,7 +129,7 @@ describe Mongoid::Relations::Bindings::Referenced::In do
129
129
  context "when the child of an references one" do
130
130
 
131
131
  let(:binding) do
132
- described_class.new(game, person, game_metadata)
132
+ described_class.new(game, person, game_association)
133
133
  end
134
134
 
135
135
  context "when the document is unbindable" do
@@ -162,7 +162,7 @@ describe Mongoid::Relations::Bindings::Referenced::In do
162
162
  context "when the child of an references many" do
163
163
 
164
164
  let(:binding) do
165
- described_class.new(post, person, post_metadata)
165
+ described_class.new(post, person, post_association)
166
166
  end
167
167
 
168
168
  context "when the document is unbindable" do
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Builders::Referenced::In do
3
+ describe Mongoid::Association::Referenced::BelongsTo::Buildable do
4
4
 
5
5
  let(:base) do
6
6
  double
@@ -8,45 +8,28 @@ describe Mongoid::Relations::Builders::Referenced::In do
8
8
 
9
9
  describe "#build" do
10
10
 
11
- let(:criteria) do
12
- Person.where(_id: object_id)
11
+ let(:document) do
12
+ association.build(base, object)
13
13
  end
14
14
 
15
- let(:metadata) do
16
- double(
17
- klass: Person,
18
- name: :person,
19
- foreign_key: "person_id",
20
- criteria: criteria
21
- )
22
- end
23
-
24
- let(:builder) do
25
- described_class.new(base, metadata, object)
15
+ let(:association) do
16
+ Post.relations['person']
26
17
  end
27
18
 
28
19
  context "when provided an id" do
29
20
 
30
21
  context "when the object is an object id" do
31
22
 
32
- let(:object_id) do
33
- BSON::ObjectId.new
23
+ let!(:person) do
24
+ Person.create(_id: object)
34
25
  end
35
26
 
36
27
  let(:object) do
37
- object_id
38
- end
39
-
40
- let(:person) do
41
- double
28
+ BSON::ObjectId.new
42
29
  end
43
30
 
44
31
  before do
45
- expect(criteria).to receive(:first).and_return(person)
46
- end
47
-
48
- let!(:document) do
49
- builder.build
32
+ expect(Person).to receive(:where).with(association.primary_key => object).and_call_original
50
33
  end
51
34
 
52
35
  it "sets the document" do
@@ -54,40 +37,52 @@ describe Mongoid::Relations::Builders::Referenced::In do
54
37
  end
55
38
  end
56
39
 
57
- context "when the object is an integer" do
40
+ context 'when the id is nil' do
41
+
42
+ let(:object) do
43
+ nil
44
+ end
58
45
 
59
46
  before do
60
- Person.field :_id, overwrite: true, type: Integer
47
+ expect(Person).not_to receive(:where)
61
48
  end
62
49
 
63
- after do
64
- Person.field(
65
- :_id,
66
- overwrite: true,
67
- type: BSON::ObjectId,
68
- pre_processed: true,
69
- default: ->{ BSON::ObjectId.new }
70
- )
50
+ it 'returns nil' do
51
+ expect(document).to be_nil
71
52
  end
53
+ end
72
54
 
73
- let(:object_id) do
74
- 666
55
+ context "when the id does not correspond to a document in the database" do
56
+
57
+ let!(:person) do
58
+ Person.create
75
59
  end
76
60
 
77
61
  let(:object) do
78
- object_id
62
+ BSON::ObjectId.new
79
63
  end
80
64
 
81
- let(:person) do
82
- double
65
+ before do
66
+ expect(Person).to receive(:where).with(association.primary_key => object).and_call_original
83
67
  end
84
68
 
85
- before do
86
- expect(criteria).to receive(:first).and_return(person)
69
+ it 'returns nil' do
70
+ expect(document).to be_nil
71
+ end
72
+ end
73
+
74
+ context "when the object is an integer" do
75
+
76
+ let!(:person) do
77
+ Person.create(_id: object)
78
+ end
79
+
80
+ let(:object) do
81
+ 666
87
82
  end
88
83
 
89
- let!(:document) do
90
- builder.build
84
+ before do
85
+ expect(Person).to receive(:where).with(association.primary_key => object).and_call_original
91
86
  end
92
87
 
93
88
  it "sets the document" do
@@ -98,50 +93,22 @@ describe Mongoid::Relations::Builders::Referenced::In do
98
93
 
99
94
  context "when provided a object" do
100
95
 
101
- let(:object) do
102
- Person.new
96
+ let!(:person) do
97
+ Person.create
103
98
  end
104
99
 
105
- let(:builder) do
106
- described_class.new(base, nil, object)
100
+ let(:object) do
101
+ Person.new
107
102
  end
108
103
 
109
- let(:document) do
110
- builder.build
104
+ before do
105
+ expect(Person).not_to receive(:where)
111
106
  end
112
107
 
113
108
  it "returns the object" do
114
109
  expect(document).to eq(object)
115
110
  end
116
111
  end
117
- end
118
-
119
- describe "#build" do
120
-
121
- let(:game) do
122
- Game.new
123
- end
124
-
125
- context "when no document found in the database" do
126
-
127
- context "when the id is nil" do
128
-
129
- it "returns nil" do
130
- expect(game.person).to be_nil
131
- end
132
- end
133
-
134
- context "when the id is incorrect" do
135
-
136
- before do
137
- game.person_id = BSON::ObjectId.new
138
- end
139
-
140
- it "returns nil" do
141
- expect(game.person).to be_nil
142
- end
143
- end
144
- end
145
112
 
146
113
  context "when the document is persisted" do
147
114
 
@@ -1,6 +1,7 @@
1
1
  require "spec_helper"
2
+ require_relative '../has_many_models'
2
3
 
3
- describe Mongoid::Relations::Eager::BelongsTo do
4
+ describe Mongoid::Association::Referenced::BelongsTo::Eager do
4
5
 
5
6
  describe ".grouped_docs" do
6
7
 
@@ -12,13 +13,13 @@ describe Mongoid::Relations::Eager::BelongsTo do
12
13
  Person.create!
13
14
  end
14
15
 
15
- let(:metadata) do
16
+ let(:association) do
16
17
  Post.reflect_on_association(:person)
17
18
  end
18
19
 
19
20
  let(:eager) do
20
- described_class.new([metadata], docs).tap do |b|
21
- b.shift_metadata
21
+ described_class.new([association], docs).tap do |b|
22
+ b.send(:shift_association)
22
23
  end
23
24
  end
24
25
 
@@ -27,7 +28,7 @@ describe Mongoid::Relations::Eager::BelongsTo do
27
28
  end
28
29
 
29
30
  it "aggregates by the parent id" do
30
- expect(eager.grouped_docs.keys).to eq([person.id])
31
+ expect(eager.send(:grouped_docs).keys).to eq([person.id])
31
32
  end
32
33
  end
33
34
 
@@ -41,13 +42,13 @@ describe Mongoid::Relations::Eager::BelongsTo do
41
42
  Person.create!
42
43
  end
43
44
 
44
- let(:metadata) do
45
+ let(:association) do
45
46
  Post.reflect_on_association(:person)
46
47
  end
47
48
 
48
49
  let(:eager) do
49
- described_class.new([metadata], docs).tap do |b|
50
- b.shift_metadata
50
+ described_class.new([association], docs).tap do |b|
51
+ b.send(:shift_association)
51
52
  end
52
53
  end
53
54
 
@@ -55,11 +56,11 @@ describe Mongoid::Relations::Eager::BelongsTo do
55
56
  Post.create!(person: person)
56
57
  end
57
58
 
58
- it "sets the relation into the parent" do
59
+ it "sets the association into the parent" do
59
60
  docs.each do |doc|
60
61
  expect(doc).to receive(:set_relation).with(:person, :foo)
61
62
  end
62
- eager.set_on_parent(person.id, :foo)
63
+ eager.send(:set_on_parent, person.id, :foo)
63
64
  end
64
65
  end
65
66
 
@@ -73,7 +74,7 @@ describe Mongoid::Relations::Eager::BelongsTo do
73
74
  3.times { |i| Account.create!(person: person, name: "savings#{i}") }
74
75
  end
75
76
 
76
- context "when including the belongs_to relation" do
77
+ context "when including the belongs_to association" do
77
78
 
78
79
  it "queries twice" do
79
80
 
@@ -85,7 +86,7 @@ describe Mongoid::Relations::Eager::BelongsTo do
85
86
  end
86
87
  end
87
88
 
88
- context "when the relation is not polymorphic" do
89
+ context "when the association is not polymorphic" do
89
90
 
90
91
  let(:eager) do
91
92
  Post.includes(:person).last
@@ -128,13 +129,13 @@ describe Mongoid::Relations::Eager::BelongsTo do
128
129
  expect(eager.ivar(:person)).to be nil
129
130
  end
130
131
 
131
- it "has a nil relation" do
132
+ it "has a nil association" do
132
133
  expect(eager.person).to be nil
133
134
  end
134
135
  end
135
136
  end
136
137
 
137
- context "when the relation is polymorphic" do
138
+ context "when the association is polymorphic" do
138
139
 
139
140
  let!(:movie) do
140
141
  Movie.create(name: "Bladerunner")
@@ -159,5 +160,23 @@ describe Mongoid::Relations::Eager::BelongsTo do
159
160
  expect(game.person_id).to eql(id)
160
161
  end
161
162
  end
163
+
164
+ context "when all the values for the belongs_to association are nil" do
165
+
166
+ before do
167
+ 2.times { |i| HmmTicket.create!(person: nil) }
168
+ end
169
+
170
+ it "only queries once for the parent documents" do
171
+ found_ticket = false
172
+ expect_query(1) do
173
+ HmmTicket.all.includes(:person).each do |ticket|
174
+ expect(ticket.person).to eq nil
175
+ found_ticket = true
176
+ end
177
+ end
178
+ expect(found_ticket).to be true
179
+ end
180
+ end
162
181
  end
163
182
  end