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,94 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
-
5
- # This module contains the behaviour for auto-saving relations in
6
- # different collections.
7
- module AutoSave
8
- extend ActiveSupport::Concern
9
-
10
- # Used to prevent infinite loops in associated autosaves.
11
- #
12
- # @example Is the document autosaved?
13
- # document.autosaved?
14
- #
15
- # @return [ true, false ] Has the document already been autosaved?
16
- #
17
- # @since 3.0.0
18
- def autosaved?
19
- Threaded.autosaved?(self)
20
- end
21
-
22
- # Begin the associated autosave.
23
- #
24
- # @example Begin autosave.
25
- # document.__autosaving__
26
- #
27
- # @since 3.1.3
28
- def __autosaving__
29
- Threaded.begin_autosave(self)
30
- yield
31
- ensure
32
- Threaded.exit_autosave(self)
33
- end
34
-
35
- # Check if there is changes for auto-saving
36
- #
37
- # @example Return true if there is changes on self or in
38
- # autosaved relations.
39
- # document.changed_for_autosave?
40
- #
41
- # @since 3.1.3
42
- def changed_for_autosave?(doc)
43
- doc.new_record? || doc.changed? || doc.marked_for_destruction?
44
- end
45
-
46
- module ClassMethods
47
-
48
- # Set up the autosave behaviour for references many and references one
49
- # relations. When the option is set to true, these relations will get
50
- # saved automatically when the parent saved, if they are dirty.
51
- #
52
- # @example Set up autosave options.
53
- # Person.autosave(metadata)
54
- #
55
- # @param [ Metadata ] metadata The relation metadata.
56
- #
57
- # @since 2.0.0.rc.1
58
- def autosave(metadata)
59
- if metadata.autosave? && !metadata.embedded?
60
- save_method = :"autosave_documents_for_#{metadata.name}"
61
- define_method(save_method) do
62
- if before_callback_halted?
63
- self.before_callback_halted = false
64
- else
65
- __autosaving__ do
66
- if relation = ivar(metadata.name)
67
- if :belongs_to == metadata.macro
68
- if changed_for_autosave?(relation)
69
- relation.with(persistence_context) do |_relation|
70
- _relation.save
71
- end
72
- end
73
- else
74
- Array(relation).each do |doc|
75
- if changed_for_autosave?(doc)
76
- doc.with(persistence_context) do |d|
77
- d.save
78
- end
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
86
-
87
- after_save save_method, unless: :autosaved?
88
- end
89
- end
90
-
91
- end
92
- end
93
- end
94
- end
@@ -1,9 +0,0 @@
1
- # encoding: utf-8
2
- require "mongoid/relations/binding"
3
- require "mongoid/relations/bindings/embedded/in"
4
- require "mongoid/relations/bindings/embedded/many"
5
- require "mongoid/relations/bindings/embedded/one"
6
- require "mongoid/relations/bindings/referenced/in"
7
- require "mongoid/relations/bindings/referenced/many"
8
- require "mongoid/relations/bindings/referenced/many_to_many"
9
- require "mongoid/relations/bindings/referenced/one"
@@ -1,59 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Bindings
5
- module Embedded
6
-
7
- # Binding class for embedded_in relations.
8
- class In < Binding
9
-
10
- # Binds the base object to the inverse of the relation. This is so we
11
- # are referenced to the actual objects themselves on both sides.
12
- #
13
- # This case sets the metadata on the inverse object as well as the
14
- # document itself.
15
- #
16
- # @example Bind the documents.
17
- # name.person.bind(:continue => true)
18
- # name.person = Person.new
19
- #
20
- # @option options [ true, false ] :continue Continue binding the inverse.
21
- # @option options [ true, false ] :binding Are we in build mode?
22
- #
23
- # @since 2.0.0.rc.1
24
- def bind_one
25
- base.__metadata = metadata.inverse_metadata(target) unless base.__metadata
26
- base.parentize(target)
27
- binding do
28
- if base.embedded_many?
29
- target.do_or_do_not(metadata.inverse(target)).push(base)
30
- else
31
- target.do_or_do_not(metadata.inverse_setter(target), base)
32
- end
33
- end
34
- end
35
-
36
- # Unbinds the base object and the inverse, caused by setting the
37
- # reference to nil.
38
- #
39
- # @example Unbind the document.
40
- # name.person.unbind(:continue => true)
41
- # name.person = nil
42
- #
43
- # @option options [ true, false ] :continue Do we continue unbinding?
44
- #
45
- # @since 2.0.0.rc.1
46
- def unbind_one
47
- binding do
48
- if base.embedded_many?
49
- target.do_or_do_not(metadata.inverse(target)).delete(base)
50
- else
51
- target.do_or_do_not(metadata.inverse_setter(target), nil)
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
59
- end
@@ -1,65 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Bindings
5
- module Referenced
6
-
7
- # Binding class for all referenced_in relations.
8
- class In < Binding
9
-
10
- # Binds the base object to the inverse of the relation. This is so we
11
- # are referenced to the actual objects themselves on both sides.
12
- #
13
- # This case sets the metadata on the inverse object as well as the
14
- # document itself.
15
- #
16
- # @example Bind the documents.
17
- # game.person.bind(:continue => true)
18
- # game.person = Person.new
19
- #
20
- # @since 2.0.0.rc.1
21
- def bind_one
22
- binding do
23
- check_inverses!(target)
24
- bind_foreign_key(base, record_id(target))
25
- bind_polymorphic_inverse_type(base, target.class.name)
26
- if inverse = metadata.inverse(target)
27
- if set_base_metadata
28
- if base.referenced_many?
29
- target.__send__(inverse).push(base)
30
- else
31
- target.set_relation(inverse, base)
32
- end
33
- end
34
- end
35
- end
36
- end
37
-
38
- # Unbinds the base object and the inverse, caused by setting the
39
- # reference to nil.
40
- #
41
- # @example Unbind the document.
42
- # game.person.unbind(:continue => true)
43
- # game.person = nil
44
- #
45
- # @since 2.0.0.rc.1
46
- def unbind_one
47
- binding do
48
- inverse = metadata.inverse(target)
49
- bind_foreign_key(base, nil)
50
- bind_polymorphic_inverse_type(base, nil)
51
- if inverse
52
- set_base_metadata
53
- if base.referenced_many?
54
- target.__send__(inverse).delete(base)
55
- else
56
- target.set_relation(inverse, nil)
57
- end
58
- end
59
- end
60
- end
61
- end
62
- end
63
- end
64
- end
65
- end
@@ -1,70 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
- module Bindings
5
- module Referenced
6
-
7
- # Binding class for all references_and_referenced_in_many relations.
8
- class ManyToMany < Binding
9
-
10
- # Binds a single document with the inverse relation. Used
11
- # specifically when appending to the proxy.
12
- #
13
- # @example Bind one document.
14
- # person.preferences.bind_one(preference)
15
- #
16
- # @param [ Document ] doc The single document to bind.
17
- #
18
- # @since 2.0.0.rc.1
19
- def bind_one(doc)
20
- binding do
21
- inverse_keys = doc.you_must(metadata.inverse_foreign_key)
22
- if inverse_keys
23
- record_id = inverse_record_id(doc)
24
- unless inverse_keys.include?(record_id)
25
- doc.you_must(metadata.inverse_foreign_key_setter, inverse_keys.push(record_id))
26
- end
27
- doc.reset_relation_criteria(metadata.inverse)
28
- end
29
- base._synced[metadata.foreign_key] = true
30
- doc._synced[metadata.inverse_foreign_key] = true
31
- end
32
- end
33
-
34
- # Unbind a single document.
35
- #
36
- # @example Unbind the document.
37
- # person.preferences.unbind_one(document)
38
- #
39
- # @since 2.0.0.rc.1
40
- def unbind_one(doc)
41
- binding do
42
- base.send(metadata.foreign_key).delete_one(record_id(doc))
43
- inverse_keys = doc.you_must(metadata.inverse_foreign_key)
44
- if inverse_keys
45
- inverse_keys.delete_one(inverse_record_id(doc))
46
- doc.reset_relation_criteria(metadata.inverse)
47
- end
48
- base._synced[metadata.foreign_key] = true
49
- doc._synced[metadata.inverse_foreign_key] = true
50
- end
51
- end
52
-
53
- # Find the inverse id referenced by inverse_keys
54
- def inverse_record_id(doc)
55
- inverse_metadata = determine_inverse_metadata(doc)
56
- if inverse_metadata
57
- base.__send__(inverse_metadata.primary_key)
58
- else
59
- base._id
60
- end
61
- end
62
-
63
- def determine_inverse_metadata(doc)
64
- doc.relations[base.class.name.demodulize.underscore.pluralize]
65
- end
66
- end
67
- end
68
- end
69
- end
70
- end
@@ -1,57 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid
3
- module Relations
4
-
5
- # Superclass for all builder objects. Builders are responsible for either
6
- # looking up a relation's target from the database, or creating them from a
7
- # supplied attributes hash.
8
- class Builder
9
- include Threaded::Lifecycle
10
-
11
- attr_reader :base, :metadata, :object
12
-
13
- # Instantiate the new builder for a relation.
14
- #
15
- # @example Create the builder.
16
- # Builder.new(metadata, { :field => "value })
17
- #
18
- # @param [ Document ] base The base document.
19
- # @param [ Metdata ] metadata The metadata for the relation.
20
- # @param [ Hash, BSON::ObjectId ] object The attributes to build from or
21
- # id to query with.
22
- #
23
- # @since 2.0.0.rc.1
24
- def initialize(base, metadata, object)
25
- @base, @metadata, @object = base, metadata, object
26
- end
27
-
28
- protected
29
-
30
- # Get the class from the metadata.
31
- #
32
- # @example Get the class.
33
- # builder.klass
34
- #
35
- # @return [ Class ] The class from the metadata.
36
- #
37
- # @since 2.3.2
38
- def klass
39
- @klass ||= metadata.klass
40
- end
41
-
42
- # Do we need to perform a database query? It will be so if the object we
43
- # have is not a document.
44
- #
45
- # @example Should we query the database?
46
- # builder.query?
47
- #
48
- # @return [ true, false ] Whether a database query should happen.
49
- #
50
- # @since 2.0.0.rc.1
51
- def query?
52
- obj = object.__array__.first
53
- !obj.is_a?(Mongoid::Document) && !obj.nil?
54
- end
55
- end
56
- end
57
- end
@@ -1,106 +0,0 @@
1
- # encoding: utf-8
2
- require "mongoid/relations/builder"
3
- require "mongoid/relations/nested_builder"
4
- require "mongoid/relations/builders/embedded/in"
5
- require "mongoid/relations/builders/embedded/many"
6
- require "mongoid/relations/builders/embedded/one"
7
- require "mongoid/relations/builders/nested_attributes/one"
8
- require "mongoid/relations/builders/nested_attributes/many"
9
- require "mongoid/relations/builders/referenced/in"
10
- require "mongoid/relations/builders/referenced/many"
11
- require "mongoid/relations/builders/referenced/many_to_many"
12
- require "mongoid/relations/builders/referenced/one"
13
-
14
- module Mongoid
15
- module Relations
16
-
17
- # This module is responsible for defining the build and create methods used
18
- # in one to one relations.
19
- #
20
- # @example Methods that get created.
21
- #
22
- # class Person
23
- # include Mongoid::Document
24
- # embeds_one :name
25
- # end
26
- #
27
- # # The following methods get created:
28
- # person.build_name({ :first_name => "Durran" })
29
- # person.create_name({ :first_name => "Durran" })
30
- #
31
- # @since 2.0.0.rc.1
32
- module Builders
33
- extend ActiveSupport::Concern
34
-
35
- private
36
-
37
- # Parse out the attributes and the options from the args passed to a
38
- # build_ or create_ methods.
39
- #
40
- # @example Parse the args.
41
- # doc.parse_args(:name => "Joe")
42
- #
43
- # @param [ Array ] args The arguments.
44
- #
45
- # @return [ Array<Hash> ] The attributes and options.
46
- #
47
- # @since 2.3.4
48
- def parse_args(*args)
49
- [ args.first || {}, args.size > 1 ? args[1] : {} ]
50
- end
51
-
52
- module ClassMethods
53
-
54
- # Defines a builder method for an embeds_one relation. This is
55
- # defined as #build_name.
56
- #
57
- # @example
58
- # Person.builder("name")
59
- #
60
- # @param [ String, Symbol ] name The name of the relation.
61
- #
62
- # @return [ Class ] The class being set up.
63
- #
64
- # @since 2.0.0.rc.1
65
- def builder(name, metadata)
66
- re_define_method("build_#{name}") do |*args|
67
- attributes, _options = parse_args(*args)
68
- document = Factory.build(metadata.klass, attributes)
69
- _building do
70
- child = send("#{name}=", document)
71
- child.run_callbacks(:build)
72
- child
73
- end
74
- end
75
- self
76
- end
77
-
78
- # Defines a creator method for an embeds_one relation. This is
79
- # defined as #create_name. After the object is built it will
80
- # immediately save.
81
- #
82
- # @example
83
- # Person.creator("name")
84
- #
85
- # @param [ String, Symbol ] name The name of the relation.
86
- #
87
- # @return [ Class ] The class being set up.
88
- #
89
- # @since 2.0.0.rc.1
90
- def creator(name, metadata)
91
- re_define_method("create_#{name}") do |*args|
92
- attributes, _options = parse_args(*args)
93
- document = Factory.build(metadata.klass, attributes)
94
- doc = _assigning do
95
- send("#{name}=", document)
96
- end
97
- doc.save
98
- save if new_record? && metadata.stores_foreign_key?
99
- doc
100
- end
101
- self
102
- end
103
- end
104
- end
105
- end
106
- end