mongoid 6.4.8 → 7.0.0

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 (320) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/Rakefile +0 -26
  4. data/lib/config/locales/en.yml +17 -0
  5. data/lib/mongoid/association/accessors.rb +339 -0
  6. data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
  7. data/lib/mongoid/association/builders.rb +92 -0
  8. data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
  9. data/lib/mongoid/association/depending.rb +116 -0
  10. data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
  11. data/lib/mongoid/{relations → association}/embedded/batchable.rb +21 -21
  12. data/lib/mongoid/association/embedded/cyclic.rb +109 -0
  13. data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
  14. data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
  15. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
  16. data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
  17. data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
  18. data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
  19. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +529 -0
  20. data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
  21. data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
  22. data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
  23. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
  24. data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
  25. data/lib/mongoid/association/embedded.rb +4 -0
  26. data/lib/mongoid/association/macros.rb +204 -0
  27. data/lib/mongoid/{relations → association}/many.rb +20 -50
  28. data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
  29. data/lib/mongoid/association/nested/many.rb +200 -0
  30. data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
  31. data/lib/mongoid/association/nested/one.rb +127 -0
  32. data/lib/mongoid/association/nested.rb +15 -0
  33. data/lib/mongoid/{relations → association}/one.rb +6 -6
  34. data/lib/mongoid/association/options.rb +152 -0
  35. data/lib/mongoid/{relations → association}/proxy.rb +31 -58
  36. data/lib/mongoid/association/referenced/auto_save.rb +79 -0
  37. data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
  38. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
  39. data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
  40. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
  41. data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
  42. data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
  43. data/lib/mongoid/association/referenced/eager.rb +159 -0
  44. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
  45. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +310 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
  49. data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
  50. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  51. data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
  52. data/lib/mongoid/association/referenced/has_many/enumerable.rb +510 -0
  53. data/lib/mongoid/association/referenced/has_many/proxy.rb +578 -0
  54. data/lib/mongoid/association/referenced/has_many.rb +275 -0
  55. data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
  56. data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
  57. data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
  58. data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
  59. data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
  60. data/lib/mongoid/association/referenced/has_one.rb +204 -0
  61. data/lib/mongoid/association/referenced/syncable.rb +170 -0
  62. data/lib/mongoid/association/referenced.rb +7 -0
  63. data/lib/mongoid/{relations → association}/reflections.rb +21 -17
  64. data/lib/mongoid/association/relatable.rb +415 -0
  65. data/lib/mongoid/association/touchable.rb +97 -0
  66. data/lib/mongoid/association.rb +150 -0
  67. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  68. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  69. data/lib/mongoid/atomic.rb +4 -4
  70. data/lib/mongoid/attributes/dynamic.rb +2 -2
  71. data/lib/mongoid/attributes/nested.rb +10 -10
  72. data/lib/mongoid/attributes/processing.rb +2 -2
  73. data/lib/mongoid/attributes/readonly.rb +2 -4
  74. data/lib/mongoid/attributes.rb +22 -13
  75. data/lib/mongoid/changeable.rb +1 -1
  76. data/lib/mongoid/clients/options.rb +1 -1
  77. data/lib/mongoid/clients/sessions.rb +2 -2
  78. data/lib/mongoid/composable.rb +4 -4
  79. data/lib/mongoid/config.rb +1 -0
  80. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  81. data/lib/mongoid/contextual/atomic.rb +1 -1
  82. data/lib/mongoid/contextual/geo_near.rb +1 -1
  83. data/lib/mongoid/contextual/map_reduce.rb +4 -4
  84. data/lib/mongoid/contextual/memory.rb +25 -7
  85. data/lib/mongoid/contextual/mongo.rb +13 -11
  86. data/lib/mongoid/copyable.rb +6 -6
  87. data/lib/mongoid/criteria/includable.rb +14 -14
  88. data/lib/mongoid/criteria/modifiable.rb +8 -14
  89. data/lib/mongoid/criteria/queryable/extensions/string.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
  91. data/lib/mongoid/criteria/queryable/selectable.rb +10 -34
  92. data/lib/mongoid/criteria.rb +2 -2
  93. data/lib/mongoid/document.rb +6 -6
  94. data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
  95. data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
  96. data/lib/mongoid/errors/unknown_model.rb +25 -0
  97. data/lib/mongoid/errors.rb +3 -0
  98. data/lib/mongoid/extensions/array.rb +5 -5
  99. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  100. data/lib/mongoid/extensions/hash.rb +5 -2
  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/extensions.rb +0 -4
  106. data/lib/mongoid/factory.rb +13 -3
  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/fields.rb +3 -3
  111. data/lib/mongoid/indexable.rb +8 -5
  112. data/lib/mongoid/interceptable.rb +5 -5
  113. data/lib/mongoid/matchable/and.rb +1 -1
  114. data/lib/mongoid/matchable/elem_match.rb +9 -3
  115. data/lib/mongoid/matchable.rb +0 -3
  116. data/lib/mongoid/persistable/creatable.rb +2 -2
  117. data/lib/mongoid/persistable/deletable.rb +9 -8
  118. data/lib/mongoid/persistable/incrementable.rb +1 -1
  119. data/lib/mongoid/persistable/logical.rb +1 -1
  120. data/lib/mongoid/persistable/settable.rb +5 -5
  121. data/lib/mongoid/persistable/updatable.rb +2 -2
  122. data/lib/mongoid/persistable/upsertable.rb +1 -1
  123. data/lib/mongoid/persistable.rb +5 -6
  124. data/lib/mongoid/persistence_context.rb +1 -5
  125. data/lib/mongoid/query_cache.rb +19 -64
  126. data/lib/mongoid/railtie.rb +0 -17
  127. data/lib/mongoid/reloadable.rb +1 -1
  128. data/lib/mongoid/scopable.rb +3 -3
  129. data/lib/mongoid/serializable.rb +4 -4
  130. data/lib/mongoid/shardable.rb +1 -1
  131. data/lib/mongoid/tasks/database.rb +2 -2
  132. data/lib/mongoid/threaded.rb +0 -36
  133. data/lib/mongoid/traversable.rb +3 -3
  134. data/lib/mongoid/validatable/presence.rb +2 -2
  135. data/lib/mongoid/validatable/uniqueness.rb +4 -4
  136. data/lib/mongoid/validatable.rb +8 -8
  137. data/lib/mongoid/version.rb +1 -1
  138. data/lib/mongoid.rb +1 -1
  139. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -0
  140. data/spec/app/models/animal.rb +2 -1
  141. data/spec/app/models/bomb.rb +1 -1
  142. data/spec/app/models/message.rb +1 -1
  143. data/spec/app/models/person.rb +5 -2
  144. data/spec/app/models/shipment_address.rb +1 -0
  145. data/spec/app/models/vertex.rb +6 -0
  146. data/spec/app/models/wiki_page.rb +1 -1
  147. data/spec/config/mongoid.yml +1 -0
  148. data/spec/mongoid/{relations → association}/accessors_spec.rb +1 -1
  149. data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
  150. data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
  151. data/spec/mongoid/association/constrainable_spec.rb +115 -0
  152. data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
  153. data/spec/mongoid/association/depending_spec.rb +613 -0
  154. data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
  155. data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
  156. data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
  157. data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
  158. data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
  159. data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
  160. data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
  161. data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
  162. data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +140 -428
  163. data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
  164. data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
  165. data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
  166. data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
  167. data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
  168. data/spec/mongoid/{relations → association}/macros_spec.rb +148 -73
  169. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
  170. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
  171. data/spec/mongoid/association/options_spec.rb +1321 -0
  172. data/spec/mongoid/{relations → association}/polymorphic_spec.rb +7 -34
  173. data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
  174. data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
  175. data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +9 -9
  176. data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
  177. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1963 -0
  178. data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
  179. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
  180. data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +5 -5
  181. data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
  182. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
  183. data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
  184. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
  185. data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +26 -11
  186. data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +122 -1
  187. data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
  188. data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
  189. data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
  190. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
  191. data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
  192. data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
  193. data/spec/mongoid/association/referenced/has_one_spec.rb +1244 -0
  194. data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
  195. data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
  196. data/spec/mongoid/{relations → association}/touchable_spec.rb +19 -1
  197. data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
  198. data/spec/mongoid/atomic/modifiers_spec.rb +2 -2
  199. data/spec/mongoid/atomic_spec.rb +4 -4
  200. data/spec/mongoid/attributes/nested_spec.rb +14 -12
  201. data/spec/mongoid/attributes/readonly_spec.rb +80 -125
  202. data/spec/mongoid/attributes_spec.rb +38 -2
  203. data/spec/mongoid/clients/factory_spec.rb +28 -52
  204. data/spec/mongoid/clients/options_spec.rb +65 -69
  205. data/spec/mongoid/clients/sessions_spec.rb +4 -13
  206. data/spec/mongoid/config_spec.rb +24 -0
  207. data/spec/mongoid/contextual/geo_near_spec.rb +0 -1
  208. data/spec/mongoid/contextual/memory_spec.rb +19 -0
  209. data/spec/mongoid/contextual/mongo_spec.rb +30 -5
  210. data/spec/mongoid/copyable_spec.rb +34 -0
  211. data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
  212. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
  213. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +43 -0
  214. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
  215. data/spec/mongoid/criteria/queryable/selectable_spec.rb +3 -42
  216. data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
  217. data/spec/mongoid/criteria/scopable_spec.rb +0 -81
  218. data/spec/mongoid/criteria_spec.rb +16 -19
  219. data/spec/mongoid/document_spec.rb +2 -56
  220. data/spec/mongoid/extensions/array_spec.rb +11 -15
  221. data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
  222. data/spec/mongoid/extensions/hash_spec.rb +18 -1
  223. data/spec/mongoid/extensions/object_spec.rb +7 -11
  224. data/spec/mongoid/extensions/range_spec.rb +7 -0
  225. data/spec/mongoid/extensions/regexp_spec.rb +0 -23
  226. data/spec/mongoid/extensions/string_spec.rb +7 -35
  227. data/spec/mongoid/factory_spec.rb +19 -1
  228. data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
  229. data/spec/mongoid/fields_spec.rb +2 -2
  230. data/spec/mongoid/findable_spec.rb +1 -1
  231. data/spec/mongoid/indexable_spec.rb +18 -8
  232. data/spec/mongoid/interceptable_spec.rb +22 -1
  233. data/spec/mongoid/matchable/elem_match_spec.rb +20 -0
  234. data/spec/mongoid/matchable_spec.rb +1 -26
  235. data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
  236. data/spec/mongoid/persistable/savable_spec.rb +2 -2
  237. data/spec/mongoid/persistable/settable_spec.rb +1 -35
  238. data/spec/mongoid/persistable_spec.rb +21 -6
  239. data/spec/mongoid/query_cache_spec.rb +16 -99
  240. data/spec/mongoid/relations/proxy_spec.rb +124 -124
  241. data/spec/mongoid/scopable_spec.rb +0 -13
  242. data/spec/mongoid/shardable_spec.rb +32 -12
  243. data/spec/mongoid/threaded_spec.rb +0 -68
  244. data/spec/mongoid/validatable/associated_spec.rb +1 -1
  245. data/spec/mongoid/validatable/presence_spec.rb +7 -6
  246. data/spec/mongoid/validatable_spec.rb +1 -1
  247. data/spec/spec_helper.rb +12 -14
  248. data.tar.gz.sig +1 -1
  249. metadata +192 -207
  250. metadata.gz.sig +0 -0
  251. data/lib/mongoid/matchable/nor.rb +0 -37
  252. data/lib/mongoid/railties/controller_runtime.rb +0 -86
  253. data/lib/mongoid/relations/accessors.rb +0 -267
  254. data/lib/mongoid/relations/auto_save.rb +0 -94
  255. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  256. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  257. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  258. data/lib/mongoid/relations/bindings.rb +0 -9
  259. data/lib/mongoid/relations/builder.rb +0 -57
  260. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  261. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  262. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  263. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  264. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  265. data/lib/mongoid/relations/builders.rb +0 -106
  266. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  267. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  268. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  269. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  270. data/lib/mongoid/relations/cascading.rb +0 -56
  271. data/lib/mongoid/relations/conversions.rb +0 -34
  272. data/lib/mongoid/relations/counter_cache.rb +0 -160
  273. data/lib/mongoid/relations/cyclic.rb +0 -107
  274. data/lib/mongoid/relations/eager/base.rb +0 -153
  275. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  276. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  277. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  278. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  279. data/lib/mongoid/relations/embedded/in.rb +0 -241
  280. data/lib/mongoid/relations/embedded/many.rb +0 -683
  281. data/lib/mongoid/relations/embedded/one.rb +0 -235
  282. data/lib/mongoid/relations/macros.rb +0 -367
  283. data/lib/mongoid/relations/metadata.rb +0 -1179
  284. data/lib/mongoid/relations/nested_builder.rb +0 -74
  285. data/lib/mongoid/relations/options.rb +0 -49
  286. data/lib/mongoid/relations/polymorphic.rb +0 -39
  287. data/lib/mongoid/relations/referenced/in.rb +0 -304
  288. data/lib/mongoid/relations/referenced/many.rb +0 -812
  289. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  290. data/lib/mongoid/relations/referenced/one.rb +0 -290
  291. data/lib/mongoid/relations/synchronization.rb +0 -169
  292. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  293. data/lib/mongoid/relations/targets.rb +0 -2
  294. data/lib/mongoid/relations/touchable.rb +0 -97
  295. data/lib/mongoid/relations.rb +0 -148
  296. data/spec/app/models/array_field.rb +0 -7
  297. data/spec/app/models/delegating_patient.rb +0 -16
  298. data/spec/integration/document_spec.rb +0 -22
  299. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  300. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  301. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  302. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  303. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  304. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  305. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  306. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  307. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  308. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  309. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  310. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  311. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  312. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  313. data/spec/mongoid/relations/options_spec.rb +0 -35
  314. data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -110
  315. data/spec/support/cluster_config.rb +0 -158
  316. data/spec/support/constraints.rb +0 -101
  317. data/spec/support/macros.rb +0 -20
  318. data/spec/support/session_registry.rb +0 -50
  319. data/spec/support/spec_config.rb +0 -42
  320. /data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
@@ -451,7 +451,7 @@ describe Mongoid::Contextual::Mongo do
451
451
  end
452
452
 
453
453
  it "returns the distinct field values" do
454
- expect(context.distinct(:years).sort).to eq([ 25, 30 ])
454
+ expect(context.distinct(:years)).to eq([ 30, 25 ])
455
455
  end
456
456
  end
457
457
 
@@ -577,6 +577,31 @@ describe Mongoid::Contextual::Mongo do
577
577
  end
578
578
  end
579
579
  end
580
+
581
+ context 'when the criteria has a parent document' do
582
+
583
+ before do
584
+ Post.create(person: person)
585
+ Post.create(person: person)
586
+ Post.create(person: person)
587
+ end
588
+
589
+ let(:person) do
590
+ Person.new
591
+ end
592
+
593
+ let(:criteria) do
594
+ person.posts.all
595
+ end
596
+
597
+ let(:persons) do
598
+ criteria.collect(&:person)
599
+ end
600
+
601
+ it 'sets the same parent object on each related object' do
602
+ expect(persons.uniq.size).to eq(1)
603
+ end
604
+ end
580
605
  end
581
606
 
582
607
  describe "#eager_load" do
@@ -591,12 +616,12 @@ describe Mongoid::Contextual::Mongo do
591
616
 
592
617
  context "when no documents are returned" do
593
618
 
594
- let(:game_metadata) do
619
+ let(:game_association) do
595
620
  Person.reflect_on_association(:game)
596
621
  end
597
622
 
598
623
  it "does not make any additional database queries" do
599
- expect(game_metadata).to receive(:eager_load).never
624
+ expect(game_association).to receive(:eager_load).never
600
625
  context.send(:eager_load, [])
601
626
  end
602
627
  end
@@ -2328,7 +2353,7 @@ describe Mongoid::Contextual::Mongo do
2328
2353
 
2329
2354
  let!(:update) do
2330
2355
  context.update_all({ '$set' => { 'labels.$[i].name' => 'Sony' } },
2331
- array_filters: [{ 'i.name' => 'Cbs' }])
2356
+ array_filters: [{ 'i.name' => 'Cbs' }])
2332
2357
  end
2333
2358
 
2334
2359
  it 'applies the array filters' do
@@ -2363,7 +2388,7 @@ describe Mongoid::Contextual::Mongo do
2363
2388
  end
2364
2389
 
2365
2390
  it 'creates a pipeline with the selector as one of the $match criteria' do
2366
- expect(pipeline_match).to include({ '$text' => { '$search' => "New Order" } })
2391
+ expect(pipeline_match).to include({ :'$text' => { :'$search' => "New Order" } })
2367
2392
  end
2368
2393
 
2369
2394
  it 'creates a pipeline with the $exists operator as one of the $match criteria' do
@@ -144,6 +144,40 @@ describe Mongoid::Copyable do
144
144
  end
145
145
  end
146
146
 
147
+ context "when cloning a document with polymorphic embedded documents with multiple language field" do
148
+
149
+ let!(:shipment_address) do
150
+ person.addresses.build({ shipping_name: "Title" }, ShipmentAddress)
151
+ end
152
+
153
+ before do
154
+ I18n.enforce_available_locales = false
155
+ I18n.locale = 'pt_BR'
156
+ person.addresses.type(ShipmentAddress).each { |address| address.shipping_name = "Título" }
157
+ person.save
158
+ end
159
+
160
+ after do
161
+ I18n.locale = :en
162
+ end
163
+
164
+ let!(:from_db) do
165
+ Person.find(person.id)
166
+ end
167
+
168
+ let(:copy) do
169
+ from_db.send(method)
170
+ end
171
+
172
+ it 'sets embedded translations' do
173
+ I18n.locale = 'pt_BR'
174
+ copy.addresses.type(ShipmentAddress).each do |address|
175
+ expect(address.shipping_name).to eq("Título")
176
+ end
177
+ end
178
+
179
+ end
180
+
147
181
  context "when cloning a loaded document" do
148
182
 
149
183
  before do
@@ -49,6 +49,29 @@ describe Mongoid::Criteria::Modifiable do
49
49
  end
50
50
  end
51
51
  end
52
+
53
+ context 'when the object is polymorphic' do
54
+
55
+ let(:movie) do
56
+ Movie.new
57
+ end
58
+
59
+ let(:criteria) do
60
+ Rating.where(ratable: movie)
61
+ end
62
+
63
+ let(:document) do
64
+ criteria.create
65
+ end
66
+
67
+ it 'sets the polymorphic id' do
68
+ expect(document.ratable_id).to eq(movie.id)
69
+ end
70
+
71
+ it 'sets the type field' do
72
+ expect(document.ratable_type).to eq('Movie')
73
+ end
74
+ end
52
75
  end
53
76
 
54
77
  describe "#create!" do
@@ -65,6 +88,29 @@ describe Mongoid::Criteria::Modifiable do
65
88
  }.to raise_error(Mongoid::Errors::Validations)
66
89
  end
67
90
  end
91
+
92
+ context 'when the object is polymorphic' do
93
+
94
+ let(:movie) do
95
+ Movie.new
96
+ end
97
+
98
+ let(:criteria) do
99
+ Rating.where(ratable: movie)
100
+ end
101
+
102
+ let(:document) do
103
+ criteria.create!
104
+ end
105
+
106
+ it 'sets the polymorphic id' do
107
+ expect(document.ratable_id).to eq(movie.id)
108
+ end
109
+
110
+ it 'sets the type field' do
111
+ expect(document.ratable_type).to eq('Movie')
112
+ end
113
+ end
68
114
  end
69
115
 
70
116
  [ :delete, :delete_all, :destroy, :destroy_all ].each do |method|
@@ -295,6 +341,25 @@ describe Mongoid::Criteria::Modifiable do
295
341
  expect(person.pets).to be true
296
342
  end
297
343
  end
344
+
345
+ context 'when the object is polymorphic' do
346
+
347
+ let(:movie) do
348
+ Movie.new
349
+ end
350
+
351
+ let(:document) do
352
+ Rating.find_or_create_by(ratable: movie)
353
+ end
354
+
355
+ it 'sets the polymorphic id' do
356
+ expect(document.ratable_id).to eq(movie.id)
357
+ end
358
+
359
+ it 'sets the type field' do
360
+ expect(document.ratable_type).to eq('Movie')
361
+ end
362
+ end
298
363
  end
299
364
  end
300
365
 
@@ -447,6 +512,25 @@ describe Mongoid::Criteria::Modifiable do
447
512
  end
448
513
  end
449
514
  end
515
+
516
+ context 'when the object is polymorphic' do
517
+
518
+ let(:movie) do
519
+ Movie.new
520
+ end
521
+
522
+ let(:document) do
523
+ Rating.find_or_create_by!(ratable: movie)
524
+ end
525
+
526
+ it 'sets the polymorphic id' do
527
+ expect(document.ratable_id).to eq(movie.id)
528
+ end
529
+
530
+ it 'sets the type field' do
531
+ expect(document.ratable_type).to eq('Movie')
532
+ end
533
+ end
450
534
  end
451
535
 
452
536
  describe ".find_or_initialize_by" do
@@ -500,6 +584,25 @@ describe Mongoid::Criteria::Modifiable do
500
584
  end
501
585
  end
502
586
  end
587
+
588
+ context 'when the object is polymorphic' do
589
+
590
+ let(:movie) do
591
+ Movie.new
592
+ end
593
+
594
+ let(:document) do
595
+ Rating.find_or_initialize_by(ratable: movie)
596
+ end
597
+
598
+ it 'sets the polymorphic id' do
599
+ expect(document.ratable_id).to eq(movie.id)
600
+ end
601
+
602
+ it 'sets the type field' do
603
+ expect(document.ratable_type).to eq('Movie')
604
+ end
605
+ end
503
606
  end
504
607
 
505
608
  describe "first_or_create" do
@@ -649,7 +752,7 @@ describe Mongoid::Criteria::Modifiable do
649
752
  band = Band.create
650
753
  Mongoid::Criteria.new(Record) do |criteria|
651
754
  criteria.embedded = true
652
- criteria.metadata = Band.reflect_on_association(:records)
755
+ criteria.association = Band.reflect_on_association(:records)
653
756
  criteria.parent_document = band
654
757
  criteria.selector = { "records" => { "producers"=>{"$in"=>["nonexistent"] } } }
655
758
  end
@@ -703,6 +806,29 @@ describe Mongoid::Criteria::Modifiable do
703
806
  end
704
807
  end
705
808
 
809
+ context 'when the object is polymorphic' do
810
+
811
+ let(:movie) do
812
+ Movie.new
813
+ end
814
+
815
+ let(:criteria) do
816
+ Rating.where(ratable: movie)
817
+ end
818
+
819
+ let(:document) do
820
+ criteria.first_or_create
821
+ end
822
+
823
+ it 'sets the polymorphic id' do
824
+ expect(document.ratable_id).to eq(movie.id)
825
+ end
826
+
827
+ it 'sets the type field' do
828
+ expect(document.ratable_type).to eq('Movie')
829
+ end
830
+ end
831
+
706
832
  context "when a block is provided" do
707
833
 
708
834
  let(:document) do
@@ -919,6 +1045,29 @@ describe Mongoid::Criteria::Modifiable do
919
1045
  end
920
1046
  end
921
1047
  end
1048
+
1049
+ context 'when the object is polymorphic' do
1050
+
1051
+ let(:movie) do
1052
+ Movie.new
1053
+ end
1054
+
1055
+ let(:criteria) do
1056
+ Rating.where(ratable: movie)
1057
+ end
1058
+
1059
+ let(:document) do
1060
+ criteria.first_or_create!
1061
+ end
1062
+
1063
+ it 'sets the polymorphic id' do
1064
+ expect(document.ratable_id).to eq(movie.id)
1065
+ end
1066
+
1067
+ it 'sets the type field' do
1068
+ expect(document.ratable_type).to eq('Movie')
1069
+ end
1070
+ end
922
1071
  end
923
1072
 
924
1073
  describe "first_or_initialize" do
@@ -938,6 +1087,29 @@ describe Mongoid::Criteria::Modifiable do
938
1087
  end
939
1088
  end
940
1089
 
1090
+ context 'when the object is polymorphic' do
1091
+
1092
+ let(:movie) do
1093
+ Movie.new
1094
+ end
1095
+
1096
+ let(:criteria) do
1097
+ Rating.where(ratable: movie)
1098
+ end
1099
+
1100
+ let(:document) do
1101
+ criteria.first_or_initialize
1102
+ end
1103
+
1104
+ it 'sets the polymorphic id' do
1105
+ expect(document.ratable_id).to eq(movie.id)
1106
+ end
1107
+
1108
+ it 'sets the type field' do
1109
+ expect(document.ratable_type).to eq('Movie')
1110
+ end
1111
+ end
1112
+
941
1113
  context "when the document is not found" do
942
1114
 
943
1115
  context "when attributes are provided" do
@@ -1471,15 +1643,11 @@ describe Mongoid::Criteria::Modifiable do
1471
1643
  { 'username' => 'Turnip' }
1472
1644
  end
1473
1645
 
1474
- it 'does not modify the selector' do
1475
- expect(Person.create_with(attrs).selector[:username]).to be_nil
1476
- end
1477
-
1478
- it 'create_attrs is modified' do
1479
- expect(Person.create_with(attrs).create_attrs).to eq(attrs)
1646
+ it 'returns a criteria with the defined attributes' do
1647
+ expect(Person.create_with(attrs).selector).to eq(attrs)
1480
1648
  end
1481
1649
 
1482
- context 'when a create is chained' do
1650
+ context 'when a method is chained' do
1483
1651
 
1484
1652
  context 'when a write method is chained' do
1485
1653
 
@@ -1503,25 +1671,6 @@ describe Mongoid::Criteria::Modifiable do
1503
1671
  expect(new_person.age).to eq(50)
1504
1672
  end
1505
1673
 
1506
- context 'when a matching document is already in the collection' do
1507
- let(:query) do
1508
- { 'username' => 'foo', 'age' => 12 }
1509
- end
1510
-
1511
- let(:person) do
1512
- Person.create!(query)
1513
- end
1514
-
1515
- let(:found_person) do
1516
- Person.create_with(attrs).find_or_create_by(query)
1517
- end
1518
-
1519
- it 'finds the matching document' do
1520
- person
1521
- expect(found_person.id).to eq(person.id)
1522
- end
1523
- end
1524
-
1525
1674
  context 'when the attributes are shared with the write method args' do
1526
1675
 
1527
1676
  let(:query) do
@@ -1532,7 +1681,7 @@ describe Mongoid::Criteria::Modifiable do
1532
1681
  Person.create_with(attrs).find_or_create_by(query)
1533
1682
  end
1534
1683
 
1535
- it 'gives the find method args precedence' do
1684
+ it 'gives the write method args precedence' do
1536
1685
  expect(new_person.username).to eq('Beet')
1537
1686
  expect(new_person.age).to eq(50)
1538
1687
  end
@@ -1559,12 +1708,8 @@ describe Mongoid::Criteria::Modifiable do
1559
1708
  { 'username' => 'Beet', 'age' => 50 }
1560
1709
  end
1561
1710
 
1562
- it 'does not modify the selector' do
1563
- expect(criteria.create_with(attrs).selector).to eq(criteria_selector)
1564
- end
1565
-
1566
1711
  it 'overwrites all the original attributes' do
1567
- expect(criteria.create_with(attrs).create_attrs).to eq(attrs)
1712
+ expect(criteria.create_with(attrs).selector).to eq(attrs)
1568
1713
  end
1569
1714
  end
1570
1715
  end
@@ -1575,12 +1720,8 @@ describe Mongoid::Criteria::Modifiable do
1575
1720
  { 'username' => 'Beet' }
1576
1721
  end
1577
1722
 
1578
- it 'does not modify the selector' do
1579
- expect(criteria.create_with(attrs).selector).to eq(criteria_selector)
1580
- end
1581
-
1582
1723
  it 'only overwrites the shared attributes' do
1583
- expect(criteria.create_with(attrs).create_attrs).to eq(attrs)
1724
+ expect(criteria.create_with(attrs).selector).to eq(criteria_selector.merge!(attrs))
1584
1725
  end
1585
1726
  end
1586
1727
 
@@ -1589,11 +1730,12 @@ describe Mongoid::Criteria::Modifiable do
1589
1730
  let(:attrs) do
1590
1731
  { 'username' => 'Turnip' }
1591
1732
  end
1733
+
1592
1734
  let(:query) do
1593
1735
  { 'username' => 'Beet', 'age' => 50 }
1594
1736
  end
1595
1737
 
1596
- context 'when a create method is chained' do
1738
+ context 'when a write method is chained' do
1597
1739
 
1598
1740
  it 'executes the method' do
1599
1741
  expect(criteria.create_with(attrs).new.username).to eq('Turnip')
@@ -1607,28 +1749,9 @@ describe Mongoid::Criteria::Modifiable do
1607
1749
  criteria.create_with(attrs).find_or_create_by(query)
1608
1750
  end
1609
1751
 
1610
- it 'gives the find method arg precedence' do
1752
+ it 'executes the query' do
1611
1753
  expect(new_person.username).to eq('Beet')
1612
- expect(new_person.age).to be(50)
1613
- end
1614
-
1615
- context 'when a matching document is already in the collection' do
1616
- let(:query) do
1617
- { 'username' => 'foo', 'age' => 12 }
1618
- end
1619
-
1620
- let(:person) do
1621
- Person.create!(query)
1622
- end
1623
-
1624
- let(:found_person) do
1625
- criteria.create_with(attrs).find_or_create_by(query)
1626
- end
1627
-
1628
- it 'finds the matching document' do
1629
- person
1630
- expect(found_person.id).to eq(person.id)
1631
- end
1754
+ expect(new_person.age).to eq(50)
1632
1755
  end
1633
1756
  end
1634
1757
  end
@@ -7,7 +7,7 @@ describe BigDecimal do
7
7
  context "when provided a big decimal" do
8
8
 
9
9
  let(:big_decimal) do
10
- BigDecimal("123456.789")
10
+ BigDecimal.new("123456.789")
11
11
  end
12
12
 
13
13
  it "returns the decimal as a string" do
@@ -25,11 +25,11 @@ describe BigDecimal do
25
25
  context "when provided an array of big decimals" do
26
26
 
27
27
  let(:bd_one) do
28
- BigDecimal("123456.789")
28
+ BigDecimal.new("123456.789")
29
29
  end
30
30
 
31
31
  let(:bd_two) do
32
- BigDecimal("123333.789")
32
+ BigDecimal.new("123333.789")
33
33
  end
34
34
 
35
35
  let(:array) do
@@ -66,6 +66,49 @@ describe String do
66
66
  expect(evolved).to eq(Time.new(2010, 1, 1, 11, 0, 0, 0).utc)
67
67
  end
68
68
  end
69
+
70
+ context "when the string without timezone" do
71
+
72
+ context "when using active support's time zone" do
73
+
74
+ before do
75
+ Mongoid.use_activesupport_time_zone = true
76
+ ::Time.zone = "Tokyo"
77
+ end
78
+
79
+ let(:date) do
80
+ "2010-01-01 5:00:00"
81
+ end
82
+
83
+ let(:evolved) do
84
+ date.__evolve_time__
85
+ end
86
+
87
+ it "parses string using active support's time zone" do
88
+ expect(evolved).to eq(Time.zone.parse(date).utc)
89
+ end
90
+ end
91
+
92
+ context "when not using active support's time zone" do
93
+
94
+ before do
95
+ Mongoid.use_activesupport_time_zone = false
96
+ ::Time.zone = nil
97
+ end
98
+
99
+ let(:date) do
100
+ "2010-01-01 5:00:00"
101
+ end
102
+
103
+ let(:evolved) do
104
+ date.__evolve_time__
105
+ end
106
+
107
+ it "parses string using system time zone" do
108
+ expect(evolved).to eq(Time.parse(date).utc)
109
+ end
110
+ end
111
+ end
69
112
  end
70
113
 
71
114
  describe "#__sort_option__" do
@@ -196,5 +196,17 @@ describe Mongoid::Criteria::Queryable::Pipeline do
196
196
  end
197
197
  end
198
198
  end
199
+
200
+ context "when provided a hash" do
201
+ before do
202
+ pipeline.unwind(path: "$author", "includeArrayIndex" => "author_index", preserveNullAndEmptyArrays: true)
203
+ end
204
+
205
+ it "sets the hash" do
206
+ expect(pipeline).to eq([
207
+ { "$unwind" => { path: "$author", "includeArrayIndex" => "author_index", preserveNullAndEmptyArrays: true } }
208
+ ])
209
+ end
210
+ end
199
211
  end
200
212
  end
@@ -1073,26 +1073,6 @@ describe Mongoid::Criteria::Queryable::Selectable do
1073
1073
  })
1074
1074
  end
1075
1075
 
1076
- context "when used with the $box operator ($geoWithin query) " do
1077
- let(:selection) do
1078
- query.geo_spacial(
1079
- :location.within_box => [[ 1, 10 ], [ 2, 10 ]]
1080
- )
1081
- end
1082
-
1083
- it "adds the $geoIntersects expression" do
1084
- expect(selection.selector).to eq({
1085
- "location" => {
1086
- "$geoWithin" => {
1087
- "$box" => [
1088
- [ 1, 10 ], [ 2, 10 ]
1089
- ]
1090
- }
1091
- }
1092
- })
1093
- end
1094
- end
1095
-
1096
1076
  it_behaves_like "a cloning selection"
1097
1077
  end
1098
1078
  end
@@ -3389,7 +3369,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
3389
3369
  end
3390
3370
 
3391
3371
  it "constructs a text search document" do
3392
- expect(selection.selector).to eq({ '$text' => { '$search' => "testing" }})
3372
+ expect(selection.selector).to eq({ :$text => { :$search => "testing" }})
3393
3373
  end
3394
3374
 
3395
3375
  it "returns the cloned selectable" do
@@ -3403,35 +3383,16 @@ describe Mongoid::Criteria::Queryable::Selectable do
3403
3383
  end
3404
3384
 
3405
3385
  it "constructs a text search document" do
3406
- expect(selection.selector['$text']['$search']).to eq("essais")
3386
+ expect(selection.selector[:$text][:$search]).to eq("essais")
3407
3387
  end
3408
3388
 
3409
3389
  it "add the options to the text search document" do
3410
- expect(selection.selector['$text'][:$language]).to eq("fr")
3390
+ expect(selection.selector[:$text][:$language]).to eq("fr")
3411
3391
  end
3412
3392
 
3413
3393
  it_behaves_like "a cloning selection"
3414
3394
  end
3415
3395
  end
3416
-
3417
- context 'when given more than once' do
3418
- let(:selection) do
3419
- query.text_search("one").text_search('two')
3420
- end
3421
-
3422
- # MongoDB server can only handle one text expression at a time,
3423
- # per https://docs.mongodb.com/manual/reference/operator/query/text/.
3424
- # Nonetheless we test that the query is built correctly when
3425
- # a user supplies more than one text condition.
3426
- it 'merges conditions' do
3427
- expect(Mongoid.logger).to receive(:warn)
3428
- expect(selection.selector).to eq('$and' => [
3429
- {'$text' => {'$search' => 'one'}}
3430
- ],
3431
- '$text' => {'$search' => 'two'},
3432
- )
3433
- end
3434
- end
3435
3396
  end
3436
3397
 
3437
3398
  describe "#where" do
@@ -370,11 +370,11 @@ describe Mongoid::Criteria::Queryable::Selector do
370
370
  context "when providing an array" do
371
371
 
372
372
  let(:big_one) do
373
- BigDecimal("1.2321")
373
+ BigDecimal.new("1.2321")
374
374
  end
375
375
 
376
376
  let(:big_two) do
377
- BigDecimal("4.2222")
377
+ BigDecimal.new("4.2222")
378
378
  end
379
379
 
380
380
  let(:array) do