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,74 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
-
5
- # This is the superclass for builders that are in charge of handling
6
- # creation, deletion, and updates of documents through that ever so lovely
7
- # #accepts_nested_attributes_for.
8
- class NestedBuilder
9
- attr_accessor :attributes, :existing, :metadata, :options
10
-
11
- # Determines if destroys are allowed for this document.
12
- #
13
- # @example Do we allow a destroy?
14
- # builder.allow_destroy?
15
- #
16
- # @return [ true, false ] True if the allow destroy option was set.
17
- #
18
- # @since 2.0.0.rc.1
19
- def allow_destroy?
20
- options[:allow_destroy] || false
21
- end
22
-
23
- # Returns the reject if option defined with the macro.
24
- #
25
- # @example Is there a reject proc?
26
- # builder.reject?
27
- #
28
- # @param [ Document ] document The parent document of the relation
29
- # @param [ Hash ] attrs The attributes to check for rejection.
30
- #
31
- # @return [ true, false ] True and call proc or method if rejectable, false if not.
32
- #
33
- # @since 2.0.0.rc.1
34
- def reject?(document, attrs)
35
- case callback = options[:reject_if]
36
- when Symbol
37
- document.method(callback).arity == 0 ? document.send(callback) : document.send(callback, attrs)
38
- when Proc
39
- callback.call(attrs)
40
- else
41
- false
42
- end
43
- end
44
-
45
- # Determines if only updates can occur. Only valid for one-to-one
46
- # relations.
47
- #
48
- # @example Is this update only?
49
- # builder.update_only?
50
- #
51
- # @return [ true, false ] True if the update_only option was set.
52
- #
53
- # @since 2.0.0.rc.1
54
- def update_only?
55
- options[:update_only] || false
56
- end
57
-
58
- # Convert an id to its appropriate type.
59
- #
60
- # @example Convert the id.
61
- # builder.convert_id(Person, "4d371b444835d98b8b000010")
62
- #
63
- # @param [ Class ] klass The class we're trying to convert for.
64
- # @param [ String ] id The id, usually coming from the form.
65
- #
66
- # @return [ BSON::ObjectId, String, Object ] The converted id.
67
- #
68
- # @since 2.0.0.rc.6
69
- def convert_id(klass, id)
70
- klass.using_object_ids? ? BSON::ObjectId.mongoize(id) : id
71
- end
72
- end
73
- end
74
- end
@@ -1,49 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
-
5
- # This module contains the validating logic for options passed to relation
6
- # macros.
7
- module Options
8
- extend self
9
-
10
- # These options are available to all relations.
11
- COMMON = [
12
- :class_name,
13
- :counter_cache,
14
- :extend,
15
- :inverse_class_name,
16
- :inverse_of,
17
- :name,
18
- :relation,
19
- :validate
20
- ].freeze
21
-
22
- # Determine if the provided options are valid for the relation.
23
- #
24
- # @example Check the options.
25
- # Options.validate!(:name => :comments)
26
- #
27
- # @param [ Hash ] options The options to check.
28
- #
29
- # @raise [ ArgumentError ] If the options are invalid.
30
- #
31
- # @return [ true, false ] If the options are valid.
32
- #
33
- # @since 2.1.0
34
- def validate!(options)
35
- valid_options = options[:relation]::VALID_OPTIONS + COMMON
36
- options.keys.each do |key|
37
- if !valid_options.include?(key)
38
- raise Errors::InvalidOptions.new(
39
- options[:name],
40
- key,
41
- valid_options
42
- )
43
- end
44
- end
45
- true
46
- end
47
- end
48
- end
49
- end
@@ -1,39 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
-
5
- # This module contains the behaviour for handling polymorphic relational
6
- # associations.
7
- module Polymorphic
8
- extend ActiveSupport::Concern
9
-
10
- included do
11
- class_attribute :polymorphic
12
- end
13
-
14
- module ClassMethods
15
-
16
- # Attempts to set up the information needed to handle a polymorphic
17
- # relation, if the metadata checks out.
18
- #
19
- # @example Set up the polymorphic information.
20
- # Movie.polymorph(metadata)
21
- #
22
- # @param [ Metadata ] metadata The relation metadata.
23
- #
24
- # @return [ Class ] The class being set up.
25
- #
26
- # @since 2.0.0.rc.1
27
- def polymorph(metadata)
28
- if metadata.polymorphic?
29
- self.polymorphic = true
30
- if metadata.relation.stores_foreign_key?
31
- field(metadata.inverse_type, type: String)
32
- end
33
- end
34
- self
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,304 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Referenced
5
-
6
- # This class handles all behaviour for relations that are either
7
- # one-to-many or one-to-one, where the foreign key is store on this side
8
- # of the relation and the reference is to document(s) in another
9
- # collection.
10
- class In < Relations::One
11
- include Evolvable
12
-
13
- # The allowed options when defining this relation.
14
- #
15
- # @return [ Array<Symbol> ] The allowed options when defining this relation.
16
- #
17
- # @since 6.0.0
18
- VALID_OPTIONS = [
19
- :autobuild,
20
- :autosave,
21
- :dependent,
22
- :foreign_key,
23
- :index,
24
- :polymorphic,
25
- :primary_key,
26
- :touch,
27
- :optional,
28
- :required
29
- ].freeze
30
-
31
- # Instantiate a new referenced_in relation.
32
- #
33
- # @example Create the new relation.
34
- # Referenced::In.new(game, person, metadata)
35
- #
36
- # @param [ Document ] base The document this relation hangs off of.
37
- # @param [ Document, Array<Document> ] target The target (parent) of the
38
- # relation.
39
- # @param [ Metadata ] metadata The relation's metadata.
40
- def initialize(base, target, metadata)
41
- init(base, target, metadata) do
42
- characterize_one(target)
43
- bind_one
44
- end
45
- end
46
-
47
- # Removes the association between the base document and the target
48
- # document by deleting the foreign key and the reference, orphaning
49
- # the target document in the process.
50
- #
51
- # @example Nullify the relation.
52
- # person.game.nullify
53
- #
54
- def nullify
55
- unbind_one
56
- target.save
57
- end
58
-
59
- # Substitutes the supplied target documents for the existing document
60
- # in the relation.
61
- #
62
- # @example Substitute the relation.
63
- # name.substitute(new_name)
64
- #
65
- # @param [ Document, Array<Document> ] replacement The replacement.
66
- #
67
- # @return [ In, nil ] The relation or nil.
68
- #
69
- # @since 2.0.0.rc.1
70
- def substitute(replacement)
71
- unbind_one
72
- return nil unless replacement
73
- self.target = normalize(replacement)
74
- bind_one
75
- self
76
- end
77
-
78
- private
79
-
80
- # Instantiate the binding associated with this relation.
81
- #
82
- # @example Get the binding object.
83
- # binding([ address ])
84
- #
85
- # @return [ Binding ] The binding object.
86
- #
87
- # @since 2.0.0.rc.1
88
- def binding
89
- Bindings::Referenced::In.new(base, target, __metadata)
90
- end
91
-
92
- # Normalize the value provided as a replacement for substitution.
93
- #
94
- # @api private
95
- #
96
- # @example Normalize the substitute.
97
- # proxy.normalize(id)
98
- #
99
- # @param [ Document, Object ] replacement The replacement object.
100
- #
101
- # @return [ Document ] The document.
102
- #
103
- # @since 3.1.5
104
- def normalize(replacement)
105
- return replacement if replacement.is_a?(Document)
106
- __metadata.builder(klass, replacement).build
107
- end
108
-
109
- # Are we able to persist this relation?
110
- #
111
- # @example Can we persist the relation?
112
- # relation.persistable?
113
- #
114
- # @return [ true, false ] If the relation is persistable.
115
- #
116
- # @since 2.1.0
117
- def persistable?
118
- target.persisted? && !_binding? && !_building?
119
- end
120
-
121
- class << self
122
-
123
- # Return the builder that is responsible for generating the documents
124
- # that will be used by this relation.
125
- #
126
- # @example Get the builder.
127
- # Referenced::In.builder(meta, object)
128
- #
129
- # @param [ Document ] base The base document.
130
- # @param [ Metadata ] meta The metadata of the relation.
131
- # @param [ Document, Hash ] object A document or attributes to build
132
- # with.
133
- #
134
- # @return [ Builder ] A new builder object.
135
- #
136
- # @since 2.0.0.rc.1
137
- def builder(base, meta, object)
138
- Builders::Referenced::In.new(base, meta, object)
139
- end
140
-
141
- # Get the standard criteria used for querying this relation.
142
- #
143
- # @example Get the criteria.
144
- # Proxy.criteria(meta, id, Model)
145
- #
146
- # @param [ Metadata ] metadata The metadata.
147
- # @param [ Object ] object The value of the foreign key.
148
- # @param [ Class ] type The optional type.
149
- #
150
- # @return [ Criteria ] The criteria.
151
- #
152
- # @since 2.1.0
153
- def criteria(metadata, object, type = nil)
154
- type.where(metadata.primary_key => object)
155
- end
156
-
157
- def eager_load_klass
158
- Relations::Eager::BelongsTo
159
- end
160
-
161
- # Returns true if the relation is an embedded one. In this case
162
- # always false.
163
- #
164
- # @example Is this relation embedded?
165
- # Referenced::In.embedded?
166
- #
167
- # @return [ false ] Always false.
168
- #
169
- # @since 2.0.0.rc.1
170
- def embedded?
171
- false
172
- end
173
-
174
- # Get the foreign key for the provided name.
175
- #
176
- # @example Get the foreign key.
177
- # Referenced::In.foreign_key(:person)
178
- #
179
- # @param [ Symbol ] name The name.
180
- #
181
- # @return [ String ] The foreign key.
182
- #
183
- # @since 3.0.0
184
- def foreign_key(name)
185
- "#{name}#{foreign_key_suffix}"
186
- end
187
-
188
- # Get the default value for the foreign key.
189
- #
190
- # @example Get the default.
191
- # Referenced::In.foreign_key_default
192
- #
193
- # @return [ nil ] Always nil.
194
- #
195
- # @since 2.0.0.rc.1
196
- def foreign_key_default
197
- nil
198
- end
199
-
200
- # Returns the suffix of the foreign key field, either "_id" or "_ids".
201
- #
202
- # @example Get the suffix for the foreign key.
203
- # Referenced::In.foreign_key_suffix
204
- #
205
- # @return [ String ] "_id"
206
- #
207
- # @since 2.0.0.rc.1
208
- def foreign_key_suffix
209
- "_id"
210
- end
211
-
212
- # Returns the macro for this relation. Used mostly as a helper in
213
- # reflection.
214
- #
215
- # @example Get the macro.
216
- # Referenced::In.macro
217
- #
218
- # @return [ Symbol ] :belongs_to
219
- def macro
220
- :belongs_to
221
- end
222
-
223
- # Return the nested builder that is responsible for generating the documents
224
- # that will be used by this relation.
225
- #
226
- # @example Get the nested builder.
227
- # Referenced::In.builder(attributes, options)
228
- #
229
- # @param [ Metadata ] metadata The relation metadata.
230
- # @param [ Hash ] attributes The attributes to build with.
231
- # @param [ Hash ] options The options for the builder.
232
- #
233
- # @option options [ true, false ] :allow_destroy Can documents be
234
- # deleted?
235
- # @option options [ Integer ] :limit Max number of documents to
236
- # create at once.
237
- # @option options [ Proc, Symbol ] :reject_if If documents match this
238
- # option then they are ignored.
239
- # @option options [ true, false ] :update_only Only existing documents
240
- # can be modified.
241
- #
242
- # @return [ NestedBuilder ] A newly instantiated nested builder object.
243
- #
244
- # @since 2.0.0.rc.1
245
- def nested_builder(metadata, attributes, options)
246
- Builders::NestedAttributes::One.new(metadata, attributes, options)
247
- end
248
-
249
- # Get the path calculator for the supplied document.
250
- #
251
- # @example Get the path calculator.
252
- # Proxy.path(document)
253
- #
254
- # @param [ Document ] document The document to calculate on.
255
- #
256
- # @return [ Root ] The root atomic path calculator.
257
- #
258
- # @since 2.1.0
259
- def path(document)
260
- Mongoid::Atomic::Paths::Root.new(document)
261
- end
262
-
263
- # Tells the caller if this relation is one that stores the foreign
264
- # key on its own objects.
265
- #
266
- # @example Does this relation store a foreign key?
267
- # Referenced::In.stores_foreign_key?
268
- #
269
- # @return [ true ] Always true.
270
- #
271
- # @since 2.0.0.rc.1
272
- def stores_foreign_key?
273
- true
274
- end
275
-
276
- # Get the valid options allowed with this relation.
277
- #
278
- # @example Get the valid options.
279
- # Relation.valid_options
280
- #
281
- # @return [ Array<Symbol> ] The valid options.
282
- #
283
- # @since 2.1.0
284
- def valid_options
285
- VALID_OPTIONS
286
- end
287
-
288
- # Get the default validation setting for the relation. Determines if
289
- # by default a validates associated will occur.
290
- #
291
- # @example Get the validation default.
292
- # Proxy.validation_default
293
- #
294
- # @return [ true, false ] The validation default.
295
- #
296
- # @since 2.1.9
297
- def validation_default
298
- false
299
- end
300
- end
301
- end
302
- end
303
- end
304
- end