mongoid 6.4.2 → 7.0.3

Sign up to get free protection for your applications and to get access to all the features.
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::Macros do
3
+ describe Mongoid::Association::Macros do
4
4
 
5
5
  class TestClass
6
6
  include Mongoid::Document
@@ -65,7 +65,7 @@ describe Mongoid::Relations::Macros do
65
65
  klass.embedded_in(:person)
66
66
  end
67
67
 
68
- it "adds the metadata to the klass" do
68
+ it "adds the association to the klass" do
69
69
  expect(klass.relations["person"]).to_not be_nil
70
70
  end
71
71
 
@@ -78,8 +78,8 @@ describe Mongoid::Relations::Macros do
78
78
  end
79
79
 
80
80
  it "creates the correct relation" do
81
- expect(klass.relations["person"].relation).to eq(
82
- Mongoid::Relations::Embedded::In
81
+ expect(klass.relations["person"]).to be_a(
82
+ Mongoid::Association::Embedded::EmbeddedIn
83
83
  )
84
84
  end
85
85
 
@@ -87,18 +87,27 @@ describe Mongoid::Relations::Macros do
87
87
  expect(klass._validators).to be_empty
88
88
  end
89
89
 
90
- context "metadata properties" do
90
+ context 'when an invalid option is provided' do
91
91
 
92
- let(:metadata) do
92
+ it 'raises an InvalidRelationOption exception' do
93
+ expect {
94
+ klass.embedded_in(:person, sandwich: true)
95
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
96
+ end
97
+ end
98
+
99
+ context "association properties" do
100
+
101
+ let(:association) do
93
102
  klass.relations["person"]
94
103
  end
95
104
 
96
105
  it "automatically adds the name" do
97
- expect(metadata.name).to eq(:person)
106
+ expect(association.name).to eq(:person)
98
107
  end
99
108
 
100
109
  it "automatically adds the inverse class name" do
101
- expect(metadata.inverse_class_name).to eq("TestClass")
110
+ expect(association.inverse_class_name).to eq("TestClass")
102
111
  end
103
112
  end
104
113
  end
@@ -129,7 +138,7 @@ describe Mongoid::Relations::Macros do
129
138
  klass.embeds_many(:addresses)
130
139
  end
131
140
 
132
- it "adds the metadata to the klass" do
141
+ it "adds the association to the klass" do
133
142
  expect(klass.relations["addresses"]).to_not be_nil
134
143
  end
135
144
 
@@ -142,8 +151,8 @@ describe Mongoid::Relations::Macros do
142
151
  end
143
152
 
144
153
  it "creates the correct relation" do
145
- expect(klass.relations["addresses"].relation).to eq(
146
- Mongoid::Relations::Embedded::Many
154
+ expect(klass.relations["addresses"]).to be_a(
155
+ Mongoid::Association::Embedded::EmbedsMany
147
156
  )
148
157
  end
149
158
 
@@ -153,18 +162,27 @@ describe Mongoid::Relations::Macros do
153
162
  )
154
163
  end
155
164
 
156
- context "metadata properties" do
165
+ context 'when an invalid option is provided' do
157
166
 
158
- let(:metadata) do
167
+ it 'raises an InvalidRelationOption exception' do
168
+ expect {
169
+ klass.embeds_many(:addresses, sandwich: true)
170
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
171
+ end
172
+ end
173
+
174
+ context "association properties" do
175
+
176
+ let(:association) do
159
177
  klass.relations["addresses"]
160
178
  end
161
179
 
162
180
  it "automatically adds the name" do
163
- expect(metadata.name).to eq(:addresses)
181
+ expect(association.name).to eq(:addresses)
164
182
  end
165
183
 
166
184
  it "automatically adds the inverse class name" do
167
- expect(metadata.inverse_class_name).to eq("TestClass")
185
+ expect(association.inverse_class_name).to eq("TestClass")
168
186
  end
169
187
  end
170
188
  end
@@ -175,16 +193,16 @@ describe Mongoid::Relations::Macros do
175
193
  klass.embeds_many(:addresses, order: :number.asc)
176
194
  end
177
195
 
178
- let(:metadata) do
196
+ let(:association) do
179
197
  klass.relations["addresses"]
180
198
  end
181
199
 
182
- it "adds metadata to klass" do
183
- expect(metadata.order).to_not be_nil
200
+ it "adds association to klass" do
201
+ expect(association.order).to_not be_nil
184
202
  end
185
203
 
186
204
  it "returns Mongoid::Criteria::Queryable::Key" do
187
- expect(metadata.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
205
+ expect(association.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
188
206
  end
189
207
  end
190
208
 
@@ -225,7 +243,7 @@ describe Mongoid::Relations::Macros do
225
243
  klass.embeds_one(:name)
226
244
  end
227
245
 
228
- it "adds the metadata to the klass" do
246
+ it "adds the association to the klass" do
229
247
  expect(klass.relations["name"]).to_not be_nil
230
248
  end
231
249
 
@@ -246,8 +264,8 @@ describe Mongoid::Relations::Macros do
246
264
  end
247
265
 
248
266
  it "creates the correct relation" do
249
- expect(klass.relations["name"].relation).to eq(
250
- Mongoid::Relations::Embedded::One
267
+ expect(klass.relations["name"]).to be_a(
268
+ Mongoid::Association::Embedded::EmbedsOne
251
269
  )
252
270
  end
253
271
 
@@ -257,18 +275,27 @@ describe Mongoid::Relations::Macros do
257
275
  )
258
276
  end
259
277
 
260
- context "metadata properties" do
278
+ context 'when an invalid option is provided' do
279
+
280
+ it 'raises an InvalidRelationOption exception' do
281
+ expect {
282
+ klass.embeds_one(:name, sandwich: true)
283
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
284
+ end
285
+ end
286
+
287
+ context "association properties" do
261
288
 
262
- let(:metadata) do
289
+ let(:association) do
263
290
  klass.relations["name"]
264
291
  end
265
292
 
266
293
  it "automatically adds the name" do
267
- expect(metadata.name).to eq(:name)
294
+ expect(association.name).to eq(:name)
268
295
  end
269
296
 
270
297
  it "automatically adds the inverse class name" do
271
- expect(metadata.inverse_class_name).to eq("TestClass")
298
+ expect(association.inverse_class_name).to eq("TestClass")
272
299
  end
273
300
  end
274
301
  end
@@ -328,6 +355,15 @@ describe Mongoid::Relations::Macros do
328
355
 
329
356
  context 'when the relation has options' do
330
357
 
358
+ context 'when an invalid option is provided' do
359
+
360
+ it 'raises an InvalidRelationOption exception' do
361
+ expect {
362
+ klass.belongs_to(:person, sandwich: true)
363
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
364
+ end
365
+ end
366
+
331
367
  context 'when the relation has the option :required' do
332
368
 
333
369
  context 'when the relation does not have the :optional option' do
@@ -620,7 +656,7 @@ describe Mongoid::Relations::Macros do
620
656
  klass.belongs_to(:person)
621
657
  end
622
658
 
623
- it "adds the metadata to the klass" do
659
+ it "adds the association to the klass" do
624
660
  expect(klass.relations["person"]).to_not be_nil
625
661
  end
626
662
 
@@ -641,8 +677,8 @@ describe Mongoid::Relations::Macros do
641
677
  end
642
678
 
643
679
  it "creates the correct relation" do
644
- expect(klass.relations["person"].relation).to eq(
645
- Mongoid::Relations::Referenced::In
680
+ expect(klass.relations["person"]).to be_a(
681
+ Mongoid::Association::Referenced::BelongsTo
646
682
  )
647
683
  end
648
684
 
@@ -650,18 +686,18 @@ describe Mongoid::Relations::Macros do
650
686
  expect(klass.allocate).to respond_to(:person_id)
651
687
  end
652
688
 
653
- context "metadata properties" do
689
+ context "association properties" do
654
690
 
655
- let(:metadata) do
691
+ let(:association) do
656
692
  klass.relations["person"]
657
693
  end
658
694
 
659
695
  it "automatically adds the name" do
660
- expect(metadata.name).to eq(:person)
696
+ expect(association.name).to eq(:person)
661
697
  end
662
698
 
663
699
  it "automatically adds the inverse class name" do
664
- expect(metadata.inverse_class_name).to eq("TestClass")
700
+ expect(association.inverse_class_name).to eq("TestClass")
665
701
  end
666
702
  end
667
703
  end
@@ -692,7 +728,7 @@ describe Mongoid::Relations::Macros do
692
728
  klass.has_many(:posts)
693
729
  end
694
730
 
695
- it "adds the metadata to the klass" do
731
+ it "adds the association to the klass" do
696
732
  expect(klass.relations["posts"]).to_not be_nil
697
733
  end
698
734
 
@@ -705,8 +741,8 @@ describe Mongoid::Relations::Macros do
705
741
  end
706
742
 
707
743
  it "creates the correct relation" do
708
- expect(klass.relations["posts"].relation).to eq(
709
- Mongoid::Relations::Referenced::Many
744
+ expect(klass.relations["posts"]).to be_a(
745
+ Mongoid::Association::Referenced::HasMany
710
746
  )
711
747
  end
712
748
 
@@ -716,18 +752,27 @@ describe Mongoid::Relations::Macros do
716
752
  )
717
753
  end
718
754
 
719
- context "metadata properties" do
755
+ context "association properties" do
720
756
 
721
- let(:metadata) do
757
+ let(:association) do
722
758
  klass.relations["posts"]
723
759
  end
724
760
 
725
761
  it "automatically adds the name" do
726
- expect(metadata.name).to eq(:posts)
762
+ expect(association.name).to eq(:posts)
727
763
  end
728
764
 
729
765
  it "automatically adds the inverse class name" do
730
- expect(metadata.inverse_class_name).to eq("TestClass")
766
+ expect(association.inverse_class_name).to eq("TestClass")
767
+ end
768
+ end
769
+
770
+ context 'when an invalid option is provided' do
771
+
772
+ it 'raises an InvalidRelationOption exception' do
773
+ expect {
774
+ klass.has_many(:names, sandwich: true)
775
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
731
776
  end
732
777
  end
733
778
  end
@@ -738,16 +783,16 @@ describe Mongoid::Relations::Macros do
738
783
  klass.has_many(:posts, order: :rating.asc)
739
784
  end
740
785
 
741
- let(:metadata) do
786
+ let(:association) do
742
787
  klass.relations["posts"]
743
788
  end
744
789
 
745
- it "adds metadata to klass" do
746
- expect(metadata.order).to_not be_nil
790
+ it "adds association to klass" do
791
+ expect(association.order).to_not be_nil
747
792
  end
748
793
 
749
794
  it "returns Mongoid::Criteria::Queryable::Key" do
750
- expect(metadata.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
795
+ expect(association.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
751
796
  end
752
797
  end
753
798
 
@@ -784,11 +829,20 @@ describe Mongoid::Relations::Macros do
784
829
  end
785
830
  end
786
831
 
832
+ context 'when an invalid option is provided' do
833
+
834
+ it 'raises an InvalidRelationOption exception' do
835
+ expect {
836
+ klass.has_and_belongs_to_many(:fields, sandwich: true)
837
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
838
+ end
839
+ end
840
+
787
841
  before do
788
842
  klass.has_and_belongs_to_many(:preferences)
789
843
  end
790
844
 
791
- it "adds the metadata to the klass" do
845
+ it "adds the association to the klass" do
792
846
  expect(klass.relations["preferences"]).to_not be_nil
793
847
  end
794
848
 
@@ -801,8 +855,8 @@ describe Mongoid::Relations::Macros do
801
855
  end
802
856
 
803
857
  it "creates the correct relation" do
804
- expect(klass.relations["preferences"].relation).to eq(
805
- Mongoid::Relations::Referenced::ManyToMany
858
+ expect(klass.relations["preferences"]).to be_a(
859
+ Mongoid::Association::Referenced::HasAndBelongsToMany
806
860
  )
807
861
  end
808
862
 
@@ -816,31 +870,31 @@ describe Mongoid::Relations::Macros do
816
870
  klass.has_and_belongs_to_many(:preferences, order: :ranking.asc)
817
871
  end
818
872
 
819
- let(:metadata) do
873
+ let(:association) do
820
874
  klass.relations["preferences"]
821
875
  end
822
876
 
823
- it "adds metadata to klass" do
824
- expect(metadata.order).to_not be_nil
877
+ it "adds association to klass" do
878
+ expect(association.order).to_not be_nil
825
879
  end
826
880
 
827
881
  it "returns Mongoid::Criteria::Queryable::Key" do
828
- expect(metadata.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
882
+ expect(association.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
829
883
  end
830
884
  end
831
885
 
832
- context "metadata properties" do
886
+ context "association properties" do
833
887
 
834
- let(:metadata) do
888
+ let(:association) do
835
889
  klass.relations["preferences"]
836
890
  end
837
891
 
838
892
  it "automatically adds the name" do
839
- expect(metadata.name).to eq(:preferences)
893
+ expect(association.name).to eq(:preferences)
840
894
  end
841
895
 
842
896
  it "automatically adds the inverse class name" do
843
- expect(metadata.inverse_class_name).to eq("TestClass")
897
+ expect(association.inverse_class_name).to eq("TestClass")
844
898
  end
845
899
  end
846
900
  end
@@ -867,11 +921,20 @@ describe Mongoid::Relations::Macros do
867
921
  end
868
922
  end
869
923
 
924
+ context 'when an invalid option is provided' do
925
+
926
+ it 'raises an InvalidRelationOption exception' do
927
+ expect {
928
+ klass.has_one(:game, sandwich: true)
929
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
930
+ end
931
+ end
932
+
870
933
  before do
871
934
  klass.has_one(:game)
872
935
  end
873
936
 
874
- it "adds the metadata to the klass" do
937
+ it "adds the association to the klass" do
875
938
  expect(klass.relations["game"]).to_not be_nil
876
939
  end
877
940
 
@@ -892,8 +955,8 @@ describe Mongoid::Relations::Macros do
892
955
  end
893
956
 
894
957
  it "creates the correct relation" do
895
- expect(klass.relations["game"].relation).to eq(
896
- Mongoid::Relations::Referenced::One
958
+ expect(klass.relations["game"]).to be_a(
959
+ Mongoid::Association::Referenced::HasOne
897
960
  )
898
961
  end
899
962
 
@@ -903,18 +966,18 @@ describe Mongoid::Relations::Macros do
903
966
  )
904
967
  end
905
968
 
906
- context "metadata properties" do
969
+ context "association properties" do
907
970
 
908
- let(:metadata) do
971
+ let(:association) do
909
972
  klass.relations["game"]
910
973
  end
911
974
 
912
975
  it "automatically adds the name" do
913
- expect(metadata.name).to eq(:game)
976
+ expect(association.name).to eq(:game)
914
977
  end
915
978
 
916
979
  it "automatically adds the inverse class name" do
917
- expect(metadata.inverse_class_name).to eq("TestClass")
980
+ expect(association.inverse_class_name).to eq("TestClass")
918
981
  end
919
982
  end
920
983
  end
@@ -937,18 +1000,26 @@ describe Mongoid::Relations::Macros do
937
1000
  klass.embeds_one(:name)
938
1001
  end
939
1002
 
940
- it "returns a hash of relations" do
941
- expect(klass.allocate.relations).to be_a_kind_of(Hash)
1003
+ it "returns a bson document of relations" do
1004
+ expect(klass.allocate.relations).to be_a_kind_of(BSON::Document)
942
1005
  end
943
1006
 
944
1007
  it "has keys that are the relation name" do
945
- expect(klass.allocate.relations.keys.first).to eq("name")
1008
+ expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1009
+ end
1010
+
1011
+ it "has keys that can be accessed by a String" do
1012
+ expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1013
+ end
1014
+
1015
+ it "has keys that can be accessed by a Symbol" do
1016
+ expect(klass.allocate.relations[:name]).to be_a(Mongoid::Association::Embedded::EmbedsOne)
946
1017
  end
947
1018
 
948
- it "has values that are metadata" do
1019
+ it "has values that are association" do
949
1020
  expect(
950
1021
  klass.allocate.relations.values.first
951
- ).to be_a_kind_of(Mongoid::Relations::Metadata)
1022
+ ).to be_a_kind_of(Mongoid::Association::Embedded::EmbedsOne)
952
1023
  end
953
1024
  end
954
1025
 
@@ -958,18 +1029,22 @@ describe Mongoid::Relations::Macros do
958
1029
  klass.embeds_one(:name)
959
1030
  end
960
1031
 
961
- it "returns a hash of relations" do
962
- expect(klass.relations).to be_a_kind_of(Hash)
1032
+ it "has keys that are the relation name" do
1033
+ expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
963
1034
  end
964
1035
 
965
- it "has keys that are the relation name" do
966
- expect(klass.relations.keys.first).to eq("name")
1036
+ it "has keys that can be accessed by a String" do
1037
+ expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1038
+ end
1039
+
1040
+ it "has keys that can be accessed by a Symbol" do
1041
+ expect(klass.allocate.relations[:name]).to be_a(Mongoid::Association::Embedded::EmbedsOne)
967
1042
  end
968
1043
 
969
- it "has values that are metadata" do
1044
+ it "has values that are association" do
970
1045
  expect(
971
1046
  klass.relations.values.first
972
- ).to be_a_kind_of(Mongoid::Relations::Metadata)
1047
+ ).to be_a(Mongoid::Association::Embedded::EmbedsOne)
973
1048
  end
974
1049
  end
975
1050
 
@@ -1,12 +1,9 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Builders::NestedAttributes::Many do
3
+ describe Mongoid::Association::Nested::Many do
4
4
 
5
- let(:metadata) do
6
- Mongoid::Relations::Metadata.new(
7
- name: :addresses,
8
- relation: Mongoid::Relations::Embedded::Many
9
- )
5
+ let(:association) do
6
+ Person.relations['addresses']
10
7
  end
11
8
 
12
9
  let(:person) do
@@ -18,7 +15,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
18
15
  context "when the option is provided" do
19
16
 
20
17
  let(:builder) do
21
- described_class.new(metadata, {}, allow_destroy: true)
18
+ described_class.new(association, {}, allow_destroy: true)
22
19
  end
23
20
 
24
21
  it "returns the option" do
@@ -29,7 +26,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
29
26
  context "when the option is not provided" do
30
27
 
31
28
  let(:builder) do
32
- described_class.new(metadata, {}, {})
29
+ described_class.new(association, {}, {})
33
30
  end
34
31
 
35
32
  it "returns false" do
@@ -51,7 +48,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
51
48
  context "when attributes are over limit" do
52
49
 
53
50
  let(:builder) do
54
- described_class.new(metadata, attributes, limit: 2)
51
+ described_class.new(association, attributes, limit: 2)
55
52
  end
56
53
 
57
54
  it "raises an error" do
@@ -65,7 +62,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
65
62
 
66
63
  let(:builder) do
67
64
  described_class.new(
68
- metadata,
65
+ association,
69
66
  attributes,
70
67
  reject_if: ->(attrs){ attrs[:city].blank? }
71
68
  )
@@ -85,7 +82,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
85
82
 
86
83
  let(:builder) do
87
84
  described_class.new(
88
- metadata,
85
+ association,
89
86
  attributes,
90
87
  reject_if: :reject_if_city_is_empty
91
88
  )
@@ -112,7 +109,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
112
109
  end
113
110
 
114
111
  let(:builder) do
115
- described_class.new(metadata, attributes)
112
+ described_class.new(association, attributes)
116
113
  end
117
114
 
118
115
  before do
@@ -131,7 +128,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
131
128
  end
132
129
 
133
130
  let(:builder) do
134
- described_class.new(metadata, attributes)
131
+ described_class.new(association, attributes)
135
132
  end
136
133
 
137
134
  before do
@@ -155,7 +152,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
155
152
  end
156
153
 
157
154
  let(:builder) do
158
- described_class.new(metadata, attributes, {})
155
+ described_class.new(association, attributes, {})
159
156
  end
160
157
 
161
158
  it "sorts the attributes" do
@@ -174,7 +171,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
174
171
  context "when the proc matches" do
175
172
 
176
173
  let(:builder) do
177
- described_class.new(metadata, {}, options)
174
+ described_class.new(association, {}, options)
178
175
  end
179
176
 
180
177
  it "returns true" do
@@ -185,7 +182,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
185
182
  context "when the proc does not match" do
186
183
 
187
184
  let(:builder) do
188
- described_class.new(metadata, {}, options)
185
+ described_class.new(association, {}, options)
189
186
  end
190
187
 
191
188
  it "returns false" do
@@ -197,7 +194,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
197
194
  context "when the proc is not provided" do
198
195
 
199
196
  let(:builder) do
200
- described_class.new(metadata, {}, {})
197
+ described_class.new(association, {}, {})
201
198
  end
202
199
 
203
200
  it "returns false" do
@@ -211,7 +208,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
211
208
  context "when the option is provided" do
212
209
 
213
210
  let(:builder) do
214
- described_class.new(metadata, {}, update_only: true)
211
+ described_class.new(association, {}, update_only: true)
215
212
  end
216
213
 
217
214
  it "returns the option" do
@@ -222,7 +219,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
222
219
  context "when the option is not provided" do
223
220
 
224
221
  let(:builder) do
225
- described_class.new(metadata, {}, {})
222
+ described_class.new(association, {}, {})
226
223
  end
227
224
 
228
225
  it "returns false" do