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
@@ -4,7 +4,7 @@ require "mongoid/contextual/aggregable/mongo"
4
4
  require "mongoid/contextual/command"
5
5
  require "mongoid/contextual/geo_near"
6
6
  require "mongoid/contextual/map_reduce"
7
- require "mongoid/relations/eager"
7
+ require "mongoid/association/eager_loadable"
8
8
 
9
9
  module Mongoid
10
10
  module Contextual
@@ -12,7 +12,7 @@ module Mongoid
12
12
  include Enumerable
13
13
  include Aggregable::Mongo
14
14
  include Atomic
15
- include Relations::Eager
15
+ include Association::EagerLoadable
16
16
  include Queryable
17
17
 
18
18
  # Options constant.
@@ -95,8 +95,7 @@ module Mongoid
95
95
  def destroy
96
96
  each.inject(0) do |count, doc|
97
97
  doc.destroy
98
- count += 1 if acknowledged_write?
99
- count
98
+ count += 1
100
99
  end
101
100
  end
102
101
  alias :destroy_all :destroy
@@ -341,7 +340,7 @@ module Mongoid
341
340
  @criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
342
341
  @collection = @klass.collection
343
342
  criteria.send(:merge_type_selection)
344
- @view = collection.find(criteria.selector, session: _session)
343
+ @view = collection.find(criteria.selector)
345
344
  apply_options
346
345
  end
347
346
 
@@ -487,16 +486,12 @@ module Mongoid
487
486
  # context.update({ "$set" => { name: "Smiths" }})
488
487
  #
489
488
  # @param [ Hash ] attributes The new attributes for the document.
490
- # @param [ Hash ] opts The update operation options.
491
- #
492
- # @option opts [ Array ] :array_filters A set of filters specifying to which array elements
493
- # an update should apply.
494
489
  #
495
490
  # @return [ nil, false ] False if no attributes were provided.
496
491
  #
497
492
  # @since 3.0.0
498
- def update(attributes = nil, opts = {})
499
- update_documents(attributes, :update_one, opts)
493
+ def update(attributes = nil)
494
+ update_documents(attributes)
500
495
  end
501
496
 
502
497
  # Update all the matching documents atomically.
@@ -505,16 +500,12 @@ module Mongoid
505
500
  # context.update_all({ "$set" => { name: "Smiths" }})
506
501
  #
507
502
  # @param [ Hash ] attributes The new attributes for each document.
508
- # @param [ Hash ] opts The update operation options.
509
- #
510
- # @option opts [ Array ] :array_filters A set of filters specifying to which array elements
511
- # an update should apply.
512
503
  #
513
504
  # @return [ nil, false ] False if no attributes were provided.
514
505
  #
515
506
  # @since 3.0.0
516
- def update_all(attributes = nil, opts = {})
517
- update_documents(attributes, :update_many, opts)
507
+ def update_all(attributes = nil)
508
+ update_documents(attributes, :update_many)
518
509
  end
519
510
 
520
511
  private
@@ -550,10 +541,10 @@ module Mongoid
550
541
  # @return [ true, false ] If the update succeeded.
551
542
  #
552
543
  # @since 3.0.4
553
- def update_documents(attributes, method = :update_one, opts = {})
544
+ def update_documents(attributes, method = :update_one)
554
545
  return false unless attributes
555
546
  attributes = Hash[attributes.map { |k, v| [klass.database_field_name(k.to_s), v] }]
556
- view.send(method, attributes.__consolidate__(klass), opts)
547
+ view.send(method, attributes.__consolidate__(klass))
557
548
  end
558
549
 
559
550
  # Apply the field limitations.
@@ -705,14 +696,6 @@ module Mongoid
705
696
  yield(doc)
706
697
  documents.push(doc) if cacheable?
707
698
  end
708
-
709
- def _session
710
- @criteria.send(:_session)
711
- end
712
-
713
- def acknowledged_write?
714
- collection.write_concern.nil? || collection.write_concern.acknowledged?
715
- end
716
699
  end
717
700
  end
718
701
  end
@@ -69,15 +69,15 @@ module Mongoid
69
69
  attrs["#{name}_translations"] = value
70
70
  end
71
71
  end
72
- klass.embedded_relations.each do |_, metadata|
73
- next unless attrs.present? && attrs[metadata.key].present?
72
+ klass.embedded_relations.each do |_, association|
73
+ next unless attrs.present? && attrs[association.key].present?
74
74
 
75
- if metadata.macro == :embeds_many
76
- attrs[metadata.key].each do |attr|
77
- process_localized_attributes(metadata.klass, attr)
75
+ if association.is_a?(Association::Embedded::EmbedsMany)
76
+ attrs[association.key].each do |attr|
77
+ process_localized_attributes(association.klass, attr)
78
78
  end
79
79
  else
80
- process_localized_attributes(metadata.klass, attrs[metadata.key])
80
+ process_localized_attributes(association.klass, attrs[association.key])
81
81
  end
82
82
  end
83
83
  end
@@ -28,7 +28,6 @@ module Mongoid
28
28
  include Scopable
29
29
  include Clients::Options
30
30
  include Options
31
- include Clients::Sessions
32
31
 
33
32
  # Static array used to check with method missing - we only need to ever
34
33
  # instantiate once.
@@ -36,7 +35,7 @@ module Mongoid
36
35
  # @since 4.0.0
37
36
  CHECK = []
38
37
 
39
- attr_accessor :embedded, :klass, :parent_document, :metadata
38
+ attr_accessor :embedded, :klass, :parent_document, :association
40
39
 
41
40
  # Returns true if the supplied +Enumerable+ or +Criteria+ is equal to the results
42
41
  # of this +Criteria+ or the criteria itself.
@@ -36,7 +36,7 @@ module Mongoid
36
36
  # @example Get the eager loading inclusions.
37
37
  # Person.includes(:game).inclusions
38
38
  #
39
- # @return [ Array<Metadata> ] The inclusions.
39
+ # @return [ Array<Association> ] The inclusions.
40
40
  #
41
41
  # @since 2.2.0
42
42
  def inclusions
@@ -46,11 +46,11 @@ module Mongoid
46
46
  # Set the inclusions for the criteria.
47
47
  #
48
48
  # @example Set the inclusions.
49
- # criteria.inclusions = [ meta ]
49
+ # criteria.inclusions = [ association ]
50
50
  #
51
- # @param [ Array<Metadata> ] value The inclusions.
51
+ # @param [ Array<Association> ] value The inclusions.
52
52
  #
53
- # @return [ Array<Metadata> ] The new inclusions.
53
+ # @return [ Array<Association> ] The new inclusions.
54
54
  #
55
55
  # @since 3.0.0
56
56
  def inclusions=(value)
@@ -65,28 +65,28 @@ module Mongoid
65
65
  # criteria.add_inclusion(Person, :posts)
66
66
  #
67
67
  # @param [ Class, String, Symbol ] _klass The class or string/symbol of the class name.
68
- # @param [ Symbol ] metadata The relation.
68
+ # @param [ Symbol ] association The relation.
69
69
  #
70
70
  # @raise [ Errors::InvalidIncludes ] If no relation is found.
71
71
  #
72
72
  # @since 5.1.0
73
- def add_inclusion(_klass, metadata)
74
- inclusions.push(metadata) unless inclusions.include?(metadata)
73
+ def add_inclusion(_klass, association)
74
+ inclusions.push(association) unless inclusions.include?(association)
75
75
  end
76
76
 
77
77
  def extract_includes_list(_parent_class, *relations_list)
78
78
  relations_list.flatten.each do |relation_object|
79
79
  if relation_object.is_a?(Hash)
80
80
  relation_object.each do |relation, _includes|
81
- metadata = _parent_class.reflect_on_association(relation)
82
- raise Errors::InvalidIncludes.new(_klass, [ relation ]) unless metadata
83
- add_inclusion(_parent_class, metadata)
84
- extract_includes_list(metadata.klass, _includes)
81
+ association = _parent_class.reflect_on_association(relation)
82
+ raise Errors::InvalidIncludes.new(_klass, [ relation ]) unless association
83
+ add_inclusion(_parent_class, association)
84
+ extract_includes_list(association.klass, _includes)
85
85
  end
86
86
  else
87
- metadata = _parent_class.reflect_on_association(relation_object)
88
- raise Errors::InvalidIncludes.new(_parent_class, [ relation_object ]) unless metadata
89
- add_inclusion(_parent_class, metadata)
87
+ association = _parent_class.reflect_on_association(relation_object)
88
+ raise Errors::InvalidIncludes.new(_parent_class, [ relation_object ]) unless association
89
+ add_inclusion(_parent_class, association)
90
90
  end
91
91
  end
92
92
  end
@@ -3,10 +3,6 @@ module Mongoid
3
3
  class Criteria
4
4
  module Modifiable
5
5
 
6
- # @attribute [r] create_attrs Additional attributes to add to the Document upon creation.
7
- # @api private
8
- attr_reader :create_attrs
9
-
10
6
  # Build a document given the selector and return it.
11
7
  # Complex criteria, such as $in and $or operations will get ignored.
12
8
  #
@@ -61,9 +57,6 @@ module Mongoid
61
57
 
62
58
  # Define attributes with which new documents will be created.
63
59
  #
64
- # Note that if `find_or_create_by` is called after this in a method chain, the attributes in
65
- # the query will override those from this method.
66
- #
67
60
  # @example Define attributes to be used when a new document is created.
68
61
  # Person.create_with(job: 'Engineer').find_or_create_by(employer: 'MongoDB')
69
62
  #
@@ -71,9 +64,7 @@ module Mongoid
71
64
  #
72
65
  # @since 5.1.0
73
66
  def create_with(attrs = {})
74
- tap do
75
- (@create_attrs ||= {}).merge!(attrs)
76
- end
67
+ where(selector.merge(attrs))
77
68
  end
78
69
 
79
70
  # Find the first +Document+ given the conditions, or creates a new document
@@ -181,8 +172,7 @@ module Mongoid
181
172
  #
182
173
  # @since 3.0.0
183
174
  def create_document(method, attrs = nil, &block)
184
- attrs = (create_attrs || {}).merge(attrs || {})
185
- attributes = selector.reduce(attrs) do |hash, (key, value)|
175
+ attributes = selector.reduce(attrs ? attrs.dup : {}) do |hash, (key, value)|
186
176
  unless invalid_key?(hash, key) || invalid_embedded_doc?(value)
187
177
  hash[key] = value
188
178
  end
@@ -190,9 +180,13 @@ module Mongoid
190
180
  end
191
181
  if embedded?
192
182
  attributes[:_parent] = parent_document
193
- attributes[:__metadata] = metadata
183
+ attributes[:_association] = association
184
+ end
185
+ if polymorphic? && @criterion
186
+ klass.__send__(method, attributes.merge(@criterion), &block)
187
+ else
188
+ klass.__send__(method, attributes, &block)
194
189
  end
195
- klass.__send__(method, attributes, &block)
196
190
  end
197
191
 
198
192
  # Find the first object or create/initialize it.
@@ -259,9 +259,7 @@ module Mongoid
259
259
  def prepare(field, operator, value)
260
260
  unless operator =~ /exists|type|size/
261
261
  value = value.__expand_complex__
262
- field = field.to_s
263
- name = aliases[field] || field
264
- serializer = serializers[name]
262
+ serializer = serializers[field]
265
263
  value = serializer ? serializer.evolve(value) : value
266
264
  end
267
265
  selection = { operator => value }
@@ -72,16 +72,21 @@ module Mongoid
72
72
  #
73
73
  # @example Add the unwind.
74
74
  # pipeline.unwind(:field)
75
+ # pipeline.unwind(document)
75
76
  #
76
- # @param [ String, Symbol ] field The name of the field.
77
+ # @param [ String, Symbol, Hash ] field_or_doc The name of the field or a document.
77
78
  #
78
79
  # @return [ Pipeline ] The pipeline.
79
80
  #
80
81
  # @since 2.0.0
81
- def unwind(field)
82
- normalized = field.to_s
83
- name = aliases[normalized] || normalized
84
- push("$unwind" => name.__mongo_expression__)
82
+ def unwind(field_or_doc)
83
+ unless field_or_doc.respond_to? :keys
84
+ normalized = field_or_doc.to_s
85
+ name = aliases[normalized] || normalized
86
+ push("$unwind" => name.__mongo_expression__)
87
+ else
88
+ push("$unwind" => field_or_doc)
89
+ end
85
90
  end
86
91
 
87
92
  private
@@ -24,7 +24,7 @@ module Mongoid
24
24
  # @since 2.0.0
25
25
  POLYGON = "Polygon"
26
26
 
27
- # @attribute [rw] negating If the next expression is negated.
27
+ # @attribute [rw] negating If the next spression is negated.
28
28
  # @attribute [rw] selector The query selector.
29
29
  attr_accessor :negating, :selector
30
30
 
@@ -134,21 +134,13 @@ module Mongoid
134
134
  ::Boolean.evolve(value)
135
135
  end
136
136
 
137
- # Add a $geoIntersects or $geoWithin selection. Symbol operators must
138
- # be used as shown in the examples to expand the criteria.
137
+ # Add a $geoIntersects or $geoWithin selection. Symbol operators must be used as shown in
138
+ # the examples to expand the criteria.
139
139
  #
140
140
  # @note The only valid geometry shapes for a $geoIntersects are:
141
141
  # :intersects_line, :intersects_point, and :intersects_polygon.
142
142
  #
143
- # @note The only valid options for a $geoWithin query are the geometry
144
- # shape :within_polygon and the operator :within_box.
145
- #
146
- # @note The :within_box operator for the $geoWithin query expects the
147
- # lower left (south west) coordinate pair as the first argument and
148
- # the upper right (north east) as the second argument.
149
- # Important: When latitude and longitude are passed, longitude is
150
- # expected as the first element of the coordinate pair.
151
- # Source: https://docs.mongodb.com/manual/reference/operator/query/box/
143
+ # @note The only valid geometry shape for a $geoWithin is :within_polygon
152
144
  #
153
145
  # @example Add a geo intersect criterion for a line.
154
146
  # query.geo_spacial(:location.intersects_line => [[ 1, 10 ], [ 2, 10 ]])
@@ -162,9 +154,6 @@ module Mongoid
162
154
  # @example Add a geo within criterion for a polygon.
163
155
  # query.geo_spacial(:location.within_polygon => [[ 1, 10 ], [ 2, 10 ], [ 1, 10 ]])
164
156
  #
165
- # @example Add a geo within criterion for a box.
166
- # query.geo_spacial(:location.within_box => [[ 1, 10 ], [ 2, 10 ])
167
- #
168
157
  # @param [ Hash ] criterion The criterion.
169
158
  #
170
159
  # @return [ Selectable ] The cloned selectable.
@@ -185,7 +174,6 @@ module Mongoid
185
174
  key :within_polygon, :override, "$geoWithin", "$geometry" do |value|
186
175
  { "type" => POLYGON, "coordinates" => value }
187
176
  end
188
- key :within_box, :override, "$geoWithin", "$box"
189
177
 
190
178
  # Add the $gt criterion to the selector.
191
179
  #
@@ -513,11 +501,6 @@ module Mongoid
513
501
  # @example Construct a text search selector with options.
514
502
  # selectable.text_search("testing", :$language => "fr")
515
503
  #
516
- # @note Per https://docs.mongodb.com/manual/reference/operator/query/text/
517
- # it is not currently possible to supply multiple text search
518
- # conditions in a query. Mongoid will build such a query but the
519
- # server will return an error when trying to execute it.
520
- #
521
504
  # @param [ String, Symbol ] terms A string of terms that MongoDB parses
522
505
  # and uses to query the text index.
523
506
  # @param [ Hash ] opts Text search options. See MongoDB documentation
@@ -529,19 +512,9 @@ module Mongoid
529
512
  def text_search(terms, opts = nil)
530
513
  clone.tap do |query|
531
514
  if terms
532
- criterion = {'$text' => { '$search' => terms }}
533
- criterion['$text'].merge!(opts) if opts
534
- if query.selector['$text']
535
- # Per https://docs.mongodb.com/manual/reference/operator/query/text/
536
- # multiple $text expressions are not currently supported by
537
- # MongoDB server, but build the query correctly instead of
538
- # overwriting previous text search condition with the currently
539
- # given one.
540
- Mongoid.logger.warn('Multiple $text expressions per query are not currently supported by the server')
541
- query.selector = {'$and' => [query.selector]}.merge(criterion)
542
- else
543
- query.selector = query.selector.merge(criterion)
544
- end
515
+ criterion = { :$text => { :$search => terms } }
516
+ criterion[:$text].merge!(opts) if opts
517
+ query.selector = criterion
545
518
  end
546
519
  end
547
520
  end
@@ -562,6 +535,9 @@ module Mongoid
562
535
  #
563
536
  # @since 1.0.0
564
537
  def where(criterion = nil)
538
+ # We need to save the criterion in an instance variable so Modifiable methods
539
+ # know how to create a polymorphic object.
540
+ @criterion = criterion
565
541
  criterion.is_a?(String) ? js_query(criterion) : expr_query(criterion)
566
542
  end
567
543
 
@@ -4,7 +4,6 @@ require "mongoid/evolvable"
4
4
  require "mongoid/extensions"
5
5
  require "mongoid/errors"
6
6
  require "mongoid/threaded"
7
- require "mongoid/relations"
8
7
  require "mongoid/atomic"
9
8
  require "mongoid/attributes"
10
9
  require "mongoid/contextual"
@@ -14,6 +13,7 @@ require "mongoid/criteria"
14
13
  require "mongoid/factory"
15
14
  require "mongoid/fields"
16
15
  require "mongoid/timestamps"
16
+ require "mongoid/association"
17
17
  require "mongoid/composable"
18
18
 
19
19
  module Mongoid
@@ -190,11 +190,11 @@ module Mongoid
190
190
  #
191
191
  # @since 5.1.0
192
192
  def as_json(options = nil)
193
- rv = super
194
- if options && options[:compact]
195
- rv = rv.compact
193
+ if options && (options[:compact] == true)
194
+ super(options).reject! { |k,v| v.nil? }
195
+ else
196
+ super(options)
196
197
  end
197
- rv
198
198
  end
199
199
 
200
200
  # Returns an instance of the specified class with the attributes,
@@ -281,7 +281,7 @@ module Mongoid
281
281
  without_autobuild do
282
282
  relation, stored = send(name), meta.store_as
283
283
  if attributes.key?(stored) || !relation.blank?
284
- if relation
284
+ if !relation.nil?
285
285
  attributes[stored] = relation.send(:as_attributes)
286
286
  else
287
287
  attributes.delete(stored)
@@ -8,6 +8,7 @@ require "mongoid/errors/eager_load"
8
8
  require "mongoid/errors/in_memory_collation_not_supported"
9
9
  require "mongoid/errors/invalid_collection"
10
10
  require "mongoid/errors/invalid_config_option"
11
+ require "mongoid/errors/invalid_dependent_strategy"
11
12
  require "mongoid/errors/invalid_field"
12
13
  require "mongoid/errors/invalid_field_option"
13
14
  require "mongoid/errors/invalid_find"
@@ -17,8 +18,8 @@ require "mongoid/errors/invalid_options"
17
18
  require "mongoid/errors/invalid_path"
18
19
  require "mongoid/errors/invalid_persistence_option"
19
20
  require "mongoid/errors/invalid_relation"
21
+ require "mongoid/errors/invalid_relation_option"
20
22
  require "mongoid/errors/invalid_scope"
21
- require "mongoid/errors/invalid_session_use"
22
23
  require "mongoid/errors/invalid_set_polymorphic_relation"
23
24
  require "mongoid/errors/invalid_storage_options"
24
25
  require "mongoid/errors/invalid_storage_parent"
@@ -42,6 +43,7 @@ require "mongoid/errors/readonly_document"
42
43
  require "mongoid/errors/scope_overwrite"
43
44
  require "mongoid/errors/too_many_nested_attribute_records"
44
45
  require "mongoid/errors/unknown_attribute"
46
+ require "mongoid/errors/unknown_model"
45
47
  require "mongoid/errors/unsaved_document"
46
48
  require "mongoid/errors/unsupported_javascript"
47
49
  require "mongoid/errors/validations"