mongoid 6.4.8 → 7.0.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +0 -26
  5. data/lib/config/locales/en.yml +17 -21
  6. data/lib/mongoid.rb +2 -2
  7. data/lib/mongoid/association.rb +150 -0
  8. data/lib/mongoid/association/accessors.rb +339 -0
  9. data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
  10. data/lib/mongoid/association/builders.rb +92 -0
  11. data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
  12. data/lib/mongoid/association/depending.rb +116 -0
  13. data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
  14. data/lib/mongoid/association/embedded.rb +4 -0
  15. data/lib/mongoid/{relations → association}/embedded/batchable.rb +27 -53
  16. data/lib/mongoid/association/embedded/cyclic.rb +109 -0
  17. data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
  18. data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
  19. data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
  20. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
  21. data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
  22. data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
  23. data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
  24. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +529 -0
  25. data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
  26. data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
  27. data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
  28. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
  29. data/lib/mongoid/association/macros.rb +204 -0
  30. data/lib/mongoid/{relations → association}/many.rb +18 -52
  31. data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
  32. data/lib/mongoid/association/nested.rb +15 -0
  33. data/lib/mongoid/association/nested/many.rb +200 -0
  34. data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
  35. data/lib/mongoid/association/nested/one.rb +127 -0
  36. data/lib/mongoid/{relations → association}/one.rb +6 -6
  37. data/lib/mongoid/association/options.rb +152 -0
  38. data/lib/mongoid/{relations → association}/proxy.rb +31 -58
  39. data/lib/mongoid/association/referenced.rb +7 -0
  40. data/lib/mongoid/association/referenced/auto_save.rb +79 -0
  41. data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
  42. data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
  43. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
  44. data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
  45. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
  46. data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
  47. data/lib/mongoid/association/referenced/eager.rb +159 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
  52. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +310 -0
  53. data/lib/mongoid/association/referenced/has_many.rb +273 -0
  54. data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
  55. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  56. data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
  57. data/lib/mongoid/association/referenced/has_many/enumerable.rb +479 -0
  58. data/lib/mongoid/association/referenced/has_many/proxy.rb +577 -0
  59. data/lib/mongoid/association/referenced/has_one.rb +204 -0
  60. data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
  61. data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
  62. data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
  63. data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
  64. data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
  65. data/lib/mongoid/association/referenced/syncable.rb +170 -0
  66. data/lib/mongoid/{relations → association}/reflections.rb +21 -17
  67. data/lib/mongoid/association/relatable.rb +415 -0
  68. data/lib/mongoid/association/touchable.rb +97 -0
  69. data/lib/mongoid/atomic.rb +6 -6
  70. data/lib/mongoid/atomic/modifiers.rb +8 -12
  71. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  72. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  73. data/lib/mongoid/attributes.rb +2 -1
  74. data/lib/mongoid/attributes/nested.rb +10 -10
  75. data/lib/mongoid/attributes/processing.rb +2 -2
  76. data/lib/mongoid/attributes/readonly.rb +2 -4
  77. data/lib/mongoid/clients.rb +0 -2
  78. data/lib/mongoid/clients/options.rb +1 -1
  79. data/lib/mongoid/clients/storage_options.rb +0 -1
  80. data/lib/mongoid/composable.rb +3 -4
  81. data/lib/mongoid/config.rb +1 -0
  82. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  83. data/lib/mongoid/contextual/atomic.rb +3 -6
  84. data/lib/mongoid/contextual/map_reduce.rb +3 -7
  85. data/lib/mongoid/contextual/memory.rb +5 -10
  86. data/lib/mongoid/contextual/mongo.rb +10 -27
  87. data/lib/mongoid/copyable.rb +6 -6
  88. data/lib/mongoid/criteria.rb +1 -2
  89. data/lib/mongoid/criteria/includable.rb +14 -14
  90. data/lib/mongoid/criteria/modifiable.rb +8 -14
  91. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -3
  92. data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
  93. data/lib/mongoid/criteria/queryable/selectable.rb +10 -34
  94. data/lib/mongoid/document.rb +6 -6
  95. data/lib/mongoid/errors.rb +3 -1
  96. data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
  97. data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
  98. data/lib/mongoid/errors/unknown_model.rb +25 -0
  99. data/lib/mongoid/extensions/array.rb +5 -5
  100. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  101. data/lib/mongoid/extensions/object.rb +4 -4
  102. data/lib/mongoid/extensions/range.rb +1 -0
  103. data/lib/mongoid/extensions/regexp.rb +0 -1
  104. data/lib/mongoid/extensions/string.rb +1 -3
  105. data/lib/mongoid/factory.rb +4 -3
  106. data/lib/mongoid/fields.rb +1 -1
  107. data/lib/mongoid/fields/foreign_key.rb +5 -5
  108. data/lib/mongoid/fields/standard.rb +2 -14
  109. data/lib/mongoid/fields/validators/macro.rb +1 -1
  110. data/lib/mongoid/indexable.rb +8 -5
  111. data/lib/mongoid/interceptable.rb +5 -5
  112. data/lib/mongoid/matchable.rb +0 -3
  113. data/lib/mongoid/persistable.rb +4 -5
  114. data/lib/mongoid/persistable/creatable.rb +2 -4
  115. data/lib/mongoid/persistable/deletable.rb +9 -10
  116. data/lib/mongoid/persistable/destroyable.rb +5 -1
  117. data/lib/mongoid/persistable/incrementable.rb +1 -1
  118. data/lib/mongoid/persistable/logical.rb +1 -1
  119. data/lib/mongoid/persistable/settable.rb +5 -5
  120. data/lib/mongoid/persistable/updatable.rb +2 -2
  121. data/lib/mongoid/persistable/upsertable.rb +1 -2
  122. data/lib/mongoid/persistence_context.rb +4 -9
  123. data/lib/mongoid/query_cache.rb +18 -65
  124. data/lib/mongoid/railtie.rb +0 -17
  125. data/lib/mongoid/reloadable.rb +1 -1
  126. data/lib/mongoid/scopable.rb +3 -3
  127. data/lib/mongoid/serializable.rb +3 -3
  128. data/lib/mongoid/tasks/database.rb +2 -3
  129. data/lib/mongoid/threaded.rb +0 -74
  130. data/lib/mongoid/traversable.rb +2 -2
  131. data/lib/mongoid/validatable.rb +8 -8
  132. data/lib/mongoid/validatable/presence.rb +2 -2
  133. data/lib/mongoid/validatable/uniqueness.rb +4 -4
  134. data/lib/mongoid/version.rb +1 -1
  135. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -4
  136. data/spec/app/models/animal.rb +2 -1
  137. data/spec/app/models/band.rb +0 -1
  138. data/spec/app/models/bomb.rb +1 -1
  139. data/spec/app/models/message.rb +1 -1
  140. data/spec/app/models/person.rb +5 -2
  141. data/spec/app/models/vertex.rb +6 -0
  142. data/spec/app/models/wiki_page.rb +1 -1
  143. data/spec/config/mongoid.yml +1 -0
  144. data/spec/mongoid/{relations → association}/accessors_spec.rb +1 -1
  145. data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
  146. data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
  147. data/spec/mongoid/association/constrainable_spec.rb +115 -0
  148. data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
  149. data/spec/mongoid/association/depending_spec.rb +613 -0
  150. data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
  151. data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
  152. data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
  153. data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
  154. data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
  155. data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
  156. data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
  157. data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
  158. data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
  159. data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +140 -428
  160. data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
  161. data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
  162. data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
  163. data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
  164. data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
  165. data/spec/mongoid/{relations → association}/macros_spec.rb +148 -93
  166. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
  167. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
  168. data/spec/mongoid/association/options_spec.rb +1321 -0
  169. data/spec/mongoid/{relations → association}/polymorphic_spec.rb +7 -34
  170. data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
  171. data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
  172. data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +9 -9
  173. data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
  174. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1963 -0
  175. data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
  176. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
  177. data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +5 -5
  178. data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
  179. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
  180. data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
  181. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
  182. data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +11 -11
  183. data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +1 -109
  184. data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
  185. data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
  186. data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
  187. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
  188. data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
  189. data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
  190. data/spec/mongoid/association/referenced/has_one_spec.rb +1244 -0
  191. data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
  192. data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
  193. data/spec/mongoid/{relations → association}/touchable_spec.rb +19 -1
  194. data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
  195. data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
  196. data/spec/mongoid/atomic_spec.rb +17 -17
  197. data/spec/mongoid/attributes/nested_spec.rb +14 -12
  198. data/spec/mongoid/attributes/readonly_spec.rb +80 -125
  199. data/spec/mongoid/clients/factory_spec.rb +28 -52
  200. data/spec/mongoid/clients/options_spec.rb +65 -69
  201. data/spec/mongoid/config_spec.rb +24 -0
  202. data/spec/mongoid/contextual/geo_near_spec.rb +0 -1
  203. data/spec/mongoid/contextual/mongo_spec.rb +4 -112
  204. data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
  205. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
  206. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
  207. data/spec/mongoid/criteria/queryable/selectable_spec.rb +6 -74
  208. data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
  209. data/spec/mongoid/criteria/scopable_spec.rb +0 -81
  210. data/spec/mongoid/criteria_spec.rb +16 -19
  211. data/spec/mongoid/document_spec.rb +2 -56
  212. data/spec/mongoid/extensions/array_spec.rb +11 -15
  213. data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
  214. data/spec/mongoid/extensions/object_spec.rb +7 -11
  215. data/spec/mongoid/extensions/range_spec.rb +7 -0
  216. data/spec/mongoid/extensions/regexp_spec.rb +0 -23
  217. data/spec/mongoid/extensions/string_spec.rb +7 -35
  218. data/spec/mongoid/factory_spec.rb +18 -11
  219. data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
  220. data/spec/mongoid/fields_spec.rb +2 -2
  221. data/spec/mongoid/findable_spec.rb +1 -1
  222. data/spec/mongoid/indexable_spec.rb +18 -8
  223. data/spec/mongoid/interceptable_spec.rb +21 -2
  224. data/spec/mongoid/matchable_spec.rb +1 -26
  225. data/spec/mongoid/persistable/deletable_spec.rb +0 -19
  226. data/spec/mongoid/persistable/destroyable_spec.rb +0 -19
  227. data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
  228. data/spec/mongoid/persistable/savable_spec.rb +3 -3
  229. data/spec/mongoid/persistable/settable_spec.rb +1 -35
  230. data/spec/mongoid/persistable/updatable_spec.rb +2 -2
  231. data/spec/mongoid/persistable_spec.rb +16 -16
  232. data/spec/mongoid/persistence_context_spec.rb +0 -14
  233. data/spec/mongoid/positional_spec.rb +10 -10
  234. data/spec/mongoid/query_cache_spec.rb +18 -87
  235. data/spec/mongoid/relations/proxy_spec.rb +124 -124
  236. data/spec/mongoid/scopable_spec.rb +0 -13
  237. data/spec/mongoid/threaded_spec.rb +0 -68
  238. data/spec/mongoid/validatable/associated_spec.rb +1 -1
  239. data/spec/mongoid/validatable/presence_spec.rb +7 -6
  240. data/spec/mongoid/validatable_spec.rb +1 -1
  241. data/spec/spec_helper.rb +7 -83
  242. metadata +586 -611
  243. metadata.gz.sig +2 -5
  244. data/lib/mongoid/clients/sessions.rb +0 -113
  245. data/lib/mongoid/errors/invalid_session_use.rb +0 -24
  246. data/lib/mongoid/matchable/nor.rb +0 -37
  247. data/lib/mongoid/railties/controller_runtime.rb +0 -86
  248. data/lib/mongoid/relations.rb +0 -148
  249. data/lib/mongoid/relations/accessors.rb +0 -267
  250. data/lib/mongoid/relations/auto_save.rb +0 -94
  251. data/lib/mongoid/relations/bindings.rb +0 -9
  252. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  253. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  254. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  255. data/lib/mongoid/relations/builder.rb +0 -57
  256. data/lib/mongoid/relations/builders.rb +0 -106
  257. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  258. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  259. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  260. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  261. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  262. data/lib/mongoid/relations/cascading.rb +0 -56
  263. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  264. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  265. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  266. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  267. data/lib/mongoid/relations/conversions.rb +0 -34
  268. data/lib/mongoid/relations/counter_cache.rb +0 -160
  269. data/lib/mongoid/relations/cyclic.rb +0 -107
  270. data/lib/mongoid/relations/eager/base.rb +0 -153
  271. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  272. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  273. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  274. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  275. data/lib/mongoid/relations/embedded/in.rb +0 -241
  276. data/lib/mongoid/relations/embedded/many.rb +0 -683
  277. data/lib/mongoid/relations/embedded/one.rb +0 -235
  278. data/lib/mongoid/relations/macros.rb +0 -367
  279. data/lib/mongoid/relations/metadata.rb +0 -1179
  280. data/lib/mongoid/relations/nested_builder.rb +0 -74
  281. data/lib/mongoid/relations/options.rb +0 -49
  282. data/lib/mongoid/relations/polymorphic.rb +0 -39
  283. data/lib/mongoid/relations/referenced/in.rb +0 -304
  284. data/lib/mongoid/relations/referenced/many.rb +0 -812
  285. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  286. data/lib/mongoid/relations/referenced/one.rb +0 -290
  287. data/lib/mongoid/relations/synchronization.rb +0 -169
  288. data/lib/mongoid/relations/targets.rb +0 -2
  289. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  290. data/lib/mongoid/relations/touchable.rb +0 -97
  291. data/spec/app/models/array_field.rb +0 -7
  292. data/spec/app/models/delegating_patient.rb +0 -16
  293. data/spec/integration/document_spec.rb +0 -22
  294. data/spec/mongoid/clients/sessions_spec.rb +0 -334
  295. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  296. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  297. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  298. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  299. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  300. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  301. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  302. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  303. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  304. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  305. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  306. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  307. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  308. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  309. data/spec/mongoid/relations/options_spec.rb +0 -35
  310. data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -110
  311. data/spec/support/cluster_config.rb +0 -158
  312. data/spec/support/constraints.rb +0 -101
  313. data/spec/support/macros.rb +0 -20
  314. data/spec/support/session_registry.rb +0 -50
  315. data/spec/support/spec_config.rb +0 -42
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Bindings::Referenced::Many do
3
+ describe Mongoid::Association::Referenced::HasMany::Binding do
4
4
 
5
5
  let(:person) do
6
6
  Person.new
@@ -11,17 +11,17 @@ describe Mongoid::Relations::Bindings::Referenced::Many do
11
11
  end
12
12
 
13
13
  let(:target) do
14
- Mongoid::Relations::Targets::Enumerable.new([ post ])
14
+ Mongoid::Association::Referenced::HasMany::Targets::Enumerable.new([ post ])
15
15
  end
16
16
 
17
- let(:metadata) do
17
+ let(:association) do
18
18
  Person.relations["posts"]
19
19
  end
20
20
 
21
21
  describe "#bind_one" do
22
22
 
23
23
  let(:binding) do
24
- described_class.new(person, target, metadata)
24
+ described_class.new(person, target, association)
25
25
  end
26
26
 
27
27
  context "when the document is bindable" do
@@ -55,7 +55,7 @@ describe Mongoid::Relations::Bindings::Referenced::Many do
55
55
  describe "#unbind_one" do
56
56
 
57
57
  let(:binding) do
58
- described_class.new(person, target, metadata)
58
+ described_class.new(person, target, association)
59
59
  end
60
60
 
61
61
  context "when the documents are unbindable" do
@@ -0,0 +1,119 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Association::Referenced::HasMany::Buildable do
4
+
5
+ let(:base) do
6
+ double
7
+ end
8
+
9
+ describe "#build" do
10
+
11
+ let(:documents) do
12
+ association.build(base, object)
13
+ end
14
+
15
+ let(:options) do
16
+ {}
17
+ end
18
+
19
+ let(:association) do
20
+ Mongoid::Association::Referenced::HasMany.new(Person, :posts, options)
21
+ end
22
+
23
+ context "when provided an id" do
24
+
25
+ let(:object) do
26
+ BSON::ObjectId.new
27
+ end
28
+
29
+ let(:criteria) do
30
+ Post.where(association.foreign_key => object)
31
+ end
32
+
33
+ it "returns the criteria" do
34
+ expect(documents).to eq(criteria)
35
+ end
36
+ end
37
+
38
+ context "when order is specified" do
39
+
40
+ let(:options) do
41
+ {
42
+ order: :rating.asc,
43
+ }
44
+ end
45
+
46
+ let(:object) do
47
+ BSON::ObjectId.new
48
+ end
49
+
50
+ let(:criteria) do
51
+ Post.where(association.foreign_key => object).order_by(options[:order])
52
+ end
53
+
54
+ it "adds the ordering to the criteria" do
55
+ expect(documents).to eq(criteria)
56
+ end
57
+ end
58
+
59
+ context "when the relation is polymorphic" do
60
+
61
+ let(:options) do
62
+ {
63
+ as: :ratable
64
+ }
65
+ end
66
+
67
+ let(:object) do
68
+ BSON::ObjectId.new
69
+ end
70
+
71
+ let(:base) do
72
+ Rating.new
73
+ end
74
+
75
+ let(:criteria) do
76
+ Post.where(association.foreign_key => object, 'ratable_type' => 'Rating')
77
+ end
78
+
79
+ it "adds the type to the criteria" do
80
+ expect(documents).to eq(criteria)
81
+ end
82
+ end
83
+
84
+ context "when provided a object" do
85
+
86
+ let(:object) do
87
+ [ Person.new ]
88
+ end
89
+
90
+ it "returns the object" do
91
+ expect(documents).to eq(object)
92
+ end
93
+ end
94
+
95
+ context "when no documents found in the database" do
96
+
97
+ context "when the ids are empty" do
98
+
99
+ let(:object) do
100
+ [ nil ]
101
+ end
102
+
103
+ it "returns an empty array" do
104
+ expect(documents).to be_empty
105
+ end
106
+
107
+ context "during initialization" do
108
+
109
+ it "returns an empty array" do
110
+ Person.new do |p|
111
+ expect(p.posts).to be_empty
112
+ expect(p.posts._association).to_not be_nil
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Eager::HasMany do
3
+ describe Mongoid::Association::Referenced::HasMany::Eager do
4
4
 
5
5
  describe ".grouped_docs" do
6
6
 
@@ -12,13 +12,13 @@ describe Mongoid::Relations::Eager::HasMany do
12
12
  Person.create!
13
13
  end
14
14
 
15
- let(:metadata) do
15
+ let(:association) do
16
16
  Person.reflect_on_association(:posts)
17
17
  end
18
18
 
19
19
  let(:eager) do
20
- described_class.new([metadata], docs).tap do |b|
21
- b.shift_metadata
20
+ described_class.new([association], docs).tap do |b|
21
+ b.send(:shift_association)
22
22
  end
23
23
  end
24
24
 
@@ -27,7 +27,7 @@ describe Mongoid::Relations::Eager::HasMany do
27
27
  end
28
28
 
29
29
  it "aggregates by the parent primary key" do
30
- expect(eager.grouped_docs.keys).to eq([person.id])
30
+ expect(eager.send(:grouped_docs).keys).to eq([person.id])
31
31
  end
32
32
  end
33
33
 
@@ -41,13 +41,13 @@ describe Mongoid::Relations::Eager::HasMany do
41
41
  Person.create!
42
42
  end
43
43
 
44
- let(:metadata) do
44
+ let(:association) do
45
45
  Person.reflect_on_association(:posts)
46
46
  end
47
47
 
48
48
  let(:eager) do
49
- described_class.new([metadata], docs).tap do |b|
50
- b.shift_metadata
49
+ described_class.new([association], docs).tap do |b|
50
+ b.send(:shift_association)
51
51
  end
52
52
  end
53
53
 
@@ -58,14 +58,14 @@ describe Mongoid::Relations::Eager::HasMany do
58
58
 
59
59
  it "sets the relation into the parent" do
60
60
  docs.each do |doc|
61
- expect(doc).to receive(:__build__).once.with(:posts, :foo, metadata)
61
+ expect(doc).to receive(:__build__).once.with(:posts, :foo, association)
62
62
  end
63
- eager.set_on_parent(person.id, :foo)
63
+ eager.send(:set_on_parent, person.id, :foo)
64
64
  end
65
65
 
66
66
  it "doesnt call an extra query" do
67
67
  expect_query(0) do
68
- eager.set_on_parent(person.id, :foo)
68
+ eager.send(:set_on_parent, person.id, :foo)
69
69
  end
70
70
  end
71
71
  end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Targets::Enumerable do
3
+ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
4
4
 
5
5
  describe "#==" do
6
6
 
@@ -928,60 +928,6 @@ describe Mongoid::Relations::Targets::Enumerable do
928
928
  end
929
929
  end
930
930
  end
931
-
932
- context 'when the id_sort option is none' do
933
-
934
- let(:person) do
935
- Person.create
936
- end
937
-
938
- let(:criteria) do
939
- Post.where(person_id: person.id)
940
- end
941
-
942
- let(:enumerable) do
943
- described_class.new(criteria)
944
- end
945
-
946
- let!(:first_post) do
947
- person.posts.create(title: "One")
948
- end
949
-
950
- let!(:second_post) do
951
- person.posts.create(title: "Two")
952
- end
953
-
954
- it 'does not use the sort on id' do
955
- expect(enumerable.first(id_sort: :none)).to eq(first_post)
956
- end
957
- end
958
-
959
- context 'when the id_sort option is not provided' do
960
-
961
- let(:person) do
962
- Person.create
963
- end
964
-
965
- let(:criteria) do
966
- Post.where(person_id: person.id)
967
- end
968
-
969
- let(:enumerable) do
970
- described_class.new(criteria)
971
- end
972
-
973
- let!(:first_post) do
974
- person.posts.create(title: "One")
975
- end
976
-
977
- let!(:second_post) do
978
- person.posts.create(title: "Two")
979
- end
980
-
981
- it 'uses the sort on id' do
982
- expect(enumerable.first).to eq(first_post)
983
- end
984
- end
985
931
  end
986
932
 
987
933
  describe "#include?" do
@@ -1398,60 +1344,6 @@ describe Mongoid::Relations::Targets::Enumerable do
1398
1344
  end
1399
1345
  end
1400
1346
  end
1401
-
1402
- context 'when the id_sort option is none' do
1403
-
1404
- let(:person) do
1405
- Person.create
1406
- end
1407
-
1408
- let(:criteria) do
1409
- Post.where(person_id: person.id)
1410
- end
1411
-
1412
- let(:enumerable) do
1413
- described_class.new(criteria)
1414
- end
1415
-
1416
- let!(:first_post) do
1417
- person.posts.create(title: "One")
1418
- end
1419
-
1420
- let!(:second_post) do
1421
- person.posts.create(title: "Two")
1422
- end
1423
-
1424
- it 'does not use the sort on id' do
1425
- expect(enumerable.last(id_sort: :none)).to eq(first_post)
1426
- end
1427
- end
1428
-
1429
- context 'when the id_sort option is not provided' do
1430
-
1431
- let(:person) do
1432
- Person.create
1433
- end
1434
-
1435
- let(:criteria) do
1436
- Post.where(person_id: person.id)
1437
- end
1438
-
1439
- let(:enumerable) do
1440
- described_class.new(criteria)
1441
- end
1442
-
1443
- let!(:first_post) do
1444
- person.posts.create(title: "One")
1445
- end
1446
-
1447
- let!(:second_post) do
1448
- person.posts.create(title: "Two")
1449
- end
1450
-
1451
- it 'uses the sort on id' do
1452
- expect(enumerable.last).to eq(second_post)
1453
- end
1454
- end
1455
1347
  end
1456
1348
 
1457
1349
  describe "#kind_of?" do
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Referenced::Many do
3
+ describe Mongoid::Association::Referenced::HasMany::Proxy do
4
4
 
5
5
  before :all do
6
6
  Mongoid.raise_not_found_error = true
@@ -401,7 +401,7 @@ describe Mongoid::Relations::Referenced::Many do
401
401
  end
402
402
 
403
403
  it "sets the target of the relation" do
404
- expect(person.posts.target).to eq([ post ])
404
+ expect(person.posts._target).to eq([ post ])
405
405
  end
406
406
 
407
407
  it "sets the foreign key on the relation" do
@@ -432,7 +432,7 @@ describe Mongoid::Relations::Referenced::Many do
432
432
  end
433
433
 
434
434
  it "sets the target of the relation" do
435
- expect(person.posts.target).to eq([ post ])
435
+ expect(person.posts._target).to eq([ post ])
436
436
  end
437
437
 
438
438
  it "sets the foreign key of the relation" do
@@ -593,7 +593,7 @@ describe Mongoid::Relations::Referenced::Many do
593
593
  end
594
594
 
595
595
  it "sets the target of the relation" do
596
- expect(movie.ratings.target).to eq([ rating ])
596
+ expect(movie.ratings._target).to eq([ rating ])
597
597
  end
598
598
 
599
599
  it "sets the foreign key on the relation" do
@@ -624,7 +624,7 @@ describe Mongoid::Relations::Referenced::Many do
624
624
  end
625
625
 
626
626
  it "sets the target of the relation" do
627
- expect(movie.ratings.target).to eq([ rating ])
627
+ expect(movie.ratings._target).to eq([ rating ])
628
628
  end
629
629
 
630
630
  it "sets the foreign key of the relation" do
@@ -1039,27 +1039,6 @@ describe Mongoid::Relations::Referenced::Many do
1039
1039
  end
1040
1040
  end
1041
1041
 
1042
- describe ".builder" do
1043
-
1044
- let(:builder_klass) do
1045
- Mongoid::Relations::Builders::Referenced::Many
1046
- end
1047
-
1048
- let(:document) do
1049
- double
1050
- end
1051
-
1052
- let(:metadata) do
1053
- double(extension?: false)
1054
- end
1055
-
1056
- it "returns the embedded in builder" do
1057
- expect(
1058
- described_class.builder(nil, metadata, document)
1059
- ).to be_a_kind_of(builder_klass)
1060
- end
1061
- end
1062
-
1063
1042
  describe "#clear" do
1064
1043
 
1065
1044
  context "when the relation is not polymorphic" do
@@ -1835,44 +1814,48 @@ describe Mongoid::Relations::Referenced::Many do
1835
1814
  end
1836
1815
  end
1837
1816
 
1838
- describe ".criteria" do
1817
+ describe "#criteria" do
1839
1818
 
1840
- let(:id) do
1841
- BSON::ObjectId.new
1819
+ let(:base) do
1820
+ Movie.new
1842
1821
  end
1843
1822
 
1844
1823
  context "when the relation is polymorphic" do
1845
1824
 
1846
- let(:metadata) do
1825
+ let(:association) do
1847
1826
  Movie.relations["ratings"]
1848
1827
  end
1849
1828
 
1850
1829
  let(:criteria) do
1851
- described_class.criteria(metadata, id, Movie)
1830
+ association.criteria(base)
1852
1831
  end
1853
1832
 
1854
1833
  it "includes the type in the criteria" do
1855
1834
  expect(criteria.selector).to eq(
1856
- {
1857
- "ratable_id" => id,
1858
- "ratable_type" => "Movie"
1859
- }
1860
- )
1835
+ {
1836
+ "ratable_id" => base.id,
1837
+ "ratable_type" => "Movie"
1838
+ }
1839
+ )
1861
1840
  end
1862
1841
  end
1863
1842
 
1864
1843
  context "when the relation is not polymorphic" do
1865
1844
 
1866
- let(:metadata) do
1845
+ let(:association) do
1867
1846
  Person.relations["posts"]
1868
1847
  end
1869
1848
 
1849
+ let(:base) do
1850
+ Person.new
1851
+ end
1852
+
1870
1853
  let(:criteria) do
1871
- described_class.criteria(metadata, id, Person)
1854
+ association.criteria(base)
1872
1855
  end
1873
1856
 
1874
1857
  it "does not include the type in the criteria" do
1875
- expect(criteria.selector).to eq({ "person_id" => id })
1858
+ expect(criteria.selector).to eq({ "person_id" => base.id })
1876
1859
  end
1877
1860
  end
1878
1861
  end
@@ -2785,13 +2768,6 @@ describe Mongoid::Relations::Referenced::Many do
2785
2768
  end
2786
2769
  end
2787
2770
 
2788
- describe ".foreign_key_suffix" do
2789
-
2790
- it "returns _id" do
2791
- expect(described_class.foreign_key_suffix).to eq("_id")
2792
- end
2793
- end
2794
-
2795
2771
  describe "#initialize" do
2796
2772
 
2797
2773
  context "when an illegal mixed relation exists" do
@@ -2848,13 +2824,6 @@ describe Mongoid::Relations::Referenced::Many do
2848
2824
  end
2849
2825
  end
2850
2826
 
2851
- describe ".macro" do
2852
-
2853
- it "returns has_many" do
2854
- expect(described_class.macro).to eq(:has_many)
2855
- end
2856
- end
2857
-
2858
2827
  describe "#max" do
2859
2828
 
2860
2829
  let(:person) do
@@ -3178,7 +3147,7 @@ describe Mongoid::Relations::Referenced::Many do
3178
3147
  end
3179
3148
  end
3180
3149
 
3181
- Mongoid::Relations::Referenced::Many.public_instance_methods.each do |method|
3150
+ Mongoid::Association::Referenced::HasMany::Proxy.public_instance_methods.each do |method|
3182
3151
 
3183
3152
  context "when checking #{method}" do
3184
3153
 
@@ -3199,13 +3168,6 @@ describe Mongoid::Relations::Referenced::Many do
3199
3168
  end
3200
3169
  end
3201
3170
 
3202
- describe ".stores_foreign_key?" do
3203
-
3204
- it "returns false" do
3205
- expect(described_class.stores_foreign_key?).to be false
3206
- end
3207
- end
3208
-
3209
3171
  describe "#scoped" do
3210
3172
 
3211
3173
  let(:person) do
@@ -3311,33 +3273,6 @@ describe Mongoid::Relations::Referenced::Many do
3311
3273
  end
3312
3274
  end
3313
3275
 
3314
- describe ".valid_options" do
3315
-
3316
- it "returns the valid options" do
3317
- expect(described_class.valid_options).to eq(
3318
- [
3319
- :after_add,
3320
- :after_remove,
3321
- :as,
3322
- :autosave,
3323
- :before_add,
3324
- :before_remove,
3325
- :dependent,
3326
- :foreign_key,
3327
- :order,
3328
- :primary_key
3329
- ]
3330
- )
3331
- end
3332
- end
3333
-
3334
- describe ".validation_default" do
3335
-
3336
- it "returns true" do
3337
- expect(described_class.validation_default).to be true
3338
- end
3339
- end
3340
-
3341
3276
  context "when the association has an order defined" do
3342
3277
 
3343
3278
  let(:person) do
@@ -3363,14 +3298,14 @@ describe Mongoid::Relations::Referenced::Many do
3363
3298
 
3364
3299
  it "order documents" do
3365
3300
  expect(person.ordered_posts(true)).to eq(
3366
- [post_two, post_three, post_one]
3367
- )
3301
+ [post_two, post_three, post_one]
3302
+ )
3368
3303
  end
3369
3304
 
3370
3305
  it "chaining order criterias" do
3371
3306
  expect(person.ordered_posts.order_by(:title.desc).to_a).to eq(
3372
- [post_three, post_two, post_one]
3373
- )
3307
+ [post_three, post_two, post_one]
3308
+ )
3374
3309
  end
3375
3310
  end
3376
3311
 
@@ -3396,7 +3331,7 @@ describe Mongoid::Relations::Referenced::Many do
3396
3331
 
3397
3332
  before do
3398
3333
  Post.collection.find({ _id: post_one.id }).
3399
- update_one({ "$set" => { title: "reloaded" }})
3334
+ update_one({ "$set" => { title: "reloaded" }})
3400
3335
  end
3401
3336
 
3402
3337
  let(:reloaded) do