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
@@ -277,77 +277,49 @@ describe Mongoid::Extensions::String do
277
277
  context "when the string is an integer" do
278
278
 
279
279
  it "returns true" do
280
- expect("1234".numeric?).to eq(true)
280
+ expect("1234").to be_numeric
281
281
  end
282
282
  end
283
283
 
284
284
  context "when string is a float" do
285
285
 
286
286
  it "returns true" do
287
- expect("1234.123".numeric?).to eq(true)
287
+ expect("1234.123").to be_numeric
288
288
  end
289
289
  end
290
290
 
291
291
  context "when the string is has exponents" do
292
292
 
293
293
  it "returns true" do
294
- expect("1234.123123E4".numeric?).to eq(true)
294
+ expect("1234.123123E4").to be_numeric
295
295
  end
296
296
  end
297
297
 
298
298
  context "when the string is non numeric" do
299
299
 
300
300
  it "returns false" do
301
- expect("blah".numeric?).to eq(false)
301
+ expect("blah").to_not be_numeric
302
302
  end
303
303
  end
304
304
 
305
305
  context "when the string is NaN" do
306
306
 
307
307
  it "returns true" do
308
- expect("NaN".numeric?).to eq(true)
309
- end
310
- end
311
-
312
- context "when the string is NaN and junk in front" do
313
-
314
- it "returns false" do
315
- expect("a\nNaN".numeric?).to eq(false)
316
- end
317
- end
318
-
319
- context "when the string is NaN and whitespace at end" do
320
-
321
- it "returns false" do
322
- expect("NaN\n".numeric?).to eq(false)
308
+ expect("NaN").to be_numeric
323
309
  end
324
310
  end
325
311
 
326
312
  context "when the string is Infinity" do
327
313
 
328
314
  it "returns true" do
329
- expect("Infinity".numeric?).to eq(true)
330
- end
331
- end
332
-
333
- context "when the string contains Infinity and junk in front" do
334
-
335
- it "returns false" do
336
- expect("a\nInfinity".numeric?).to eq(false)
337
- end
338
- end
339
-
340
- context "when the string contains Infinity and whitespace at end" do
341
-
342
- it "returns false" do
343
- expect("Infinity\n".numeric?).to eq(false)
315
+ expect("Infinity").to be_numeric
344
316
  end
345
317
  end
346
318
 
347
319
  context "when the string is -Infinity" do
348
320
 
349
321
  it "returns true" do
350
- expect("-Infinity".numeric?).to eq(true)
322
+ expect("-Infinity").to be_numeric
351
323
  end
352
324
  end
353
325
  end
@@ -92,7 +92,7 @@ describe Mongoid::Factory do
92
92
  context "when the type is a symbol" do
93
93
 
94
94
  let(:person) do
95
- described_class.build(Person, {:_type => "Doctor"})
95
+ described_class.build(Person, { :_type => "Doctor" })
96
96
  end
97
97
 
98
98
  it "instantiates the subclass" do
@@ -192,5 +192,23 @@ describe Mongoid::Factory do
192
192
  expect(document.title).to eq("Sir")
193
193
  end
194
194
  end
195
+
196
+ context 'when type does not correspond to a Class name' do
197
+
198
+ let(:attributes) do
199
+ { "title" => "Sir", "_type" => "invalid_class_name" }
200
+ end
201
+
202
+ let(:person) do
203
+ described_class.from_db(Person, attributes)
204
+ end
205
+
206
+ it 'raises a exception' do
207
+ expect {
208
+ person
209
+ }.to raise_exception(Mongoid::Errors::UnknownModel)
210
+ end
211
+
212
+ end
195
213
  end
196
214
  end
@@ -7,7 +7,7 @@ describe Mongoid::Fields::ForeignKey do
7
7
  let(:field) do
8
8
  described_class.new(
9
9
  :vals,
10
- metadata: Person.relations["preferences"],
10
+ association: Person.relations["preferences"],
11
11
  type: Array,
12
12
  default: [],
13
13
  identity: true
@@ -68,7 +68,7 @@ describe Mongoid::Fields::ForeignKey do
68
68
  let(:field) do
69
69
  described_class.new(
70
70
  :vals,
71
- metadata: Person.relations["posts"],
71
+ association: Person.relations["posts"],
72
72
  type: Array,
73
73
  default: default,
74
74
  identity: true
@@ -89,7 +89,7 @@ describe Mongoid::Fields::ForeignKey do
89
89
  let(:field) do
90
90
  described_class.new(
91
91
  :vals,
92
- metadata: Person.relations["posts"],
92
+ association: Person.relations["posts"],
93
93
  type: Array,
94
94
  default: [],
95
95
  identity: true
@@ -103,14 +103,14 @@ describe Mongoid::Fields::ForeignKey do
103
103
 
104
104
  describe "#evolve" do
105
105
 
106
- let(:metadata) do
106
+ let(:association) do
107
107
  Person.reflect_on_association(:preferences)
108
108
  end
109
109
 
110
110
  context "when provided a document" do
111
111
 
112
112
  let(:field) do
113
- described_class.new(:person_id, type: Object, metadata: metadata)
113
+ described_class.new(:person_id, type: Object, association: association)
114
114
  end
115
115
 
116
116
  let(:game) do
@@ -129,7 +129,7 @@ describe Mongoid::Fields::ForeignKey do
129
129
  context "when the type is an array" do
130
130
 
131
131
  let(:field) do
132
- described_class.new(:preference_ids, type: Array, default: [], metadata: metadata)
132
+ described_class.new(:preference_ids, type: Array, default: [], association: association)
133
133
  end
134
134
 
135
135
  context "when providing a single value" do
@@ -197,12 +197,12 @@ describe Mongoid::Fields::ForeignKey do
197
197
 
198
198
  context "when the relation stores ids as strings" do
199
199
 
200
- let!(:metadata) do
200
+ let!(:association) do
201
201
  Agent.reflect_on_association(:accounts)
202
202
  end
203
203
 
204
204
  let!(:field) do
205
- described_class.new(:account_ids, type: Array, default: [], metadata: metadata)
205
+ described_class.new(:account_ids, type: Array, default: [], association: association)
206
206
  end
207
207
 
208
208
  let(:id_one) do
@@ -260,12 +260,12 @@ describe Mongoid::Fields::ForeignKey do
260
260
 
261
261
  context "when the type is an object" do
262
262
 
263
- let(:metadata) do
263
+ let(:association) do
264
264
  Game.reflect_on_association(:person)
265
265
  end
266
266
 
267
267
  let(:field) do
268
- described_class.new(:person_id, type: Object, metadata: metadata)
268
+ described_class.new(:person_id, type: Object, association: association)
269
269
  end
270
270
 
271
271
  context "when providing a single value" do
@@ -312,12 +312,12 @@ describe Mongoid::Fields::ForeignKey do
312
312
 
313
313
  context "when the relation stores string ids" do
314
314
 
315
- let(:metadata) do
315
+ let(:association) do
316
316
  Comment.reflect_on_association(:account)
317
317
  end
318
318
 
319
319
  let(:field) do
320
- described_class.new(:person_id, type: Object, metadata: metadata)
320
+ described_class.new(:person_id, type: Object, association: association)
321
321
  end
322
322
 
323
323
  context "when the value is an id string" do
@@ -384,12 +384,12 @@ describe Mongoid::Fields::ForeignKey do
384
384
 
385
385
  context "when the relation stores ids as strings" do
386
386
 
387
- let(:metadata) do
387
+ let(:association) do
388
388
  Comment.reflect_on_association(:account)
389
389
  end
390
390
 
391
391
  let(:field) do
392
- described_class.new(:person_id, type: Object, metadata: metadata)
392
+ described_class.new(:person_id, type: Object, association: association)
393
393
  end
394
394
 
395
395
  let(:id_one) do
@@ -445,14 +445,14 @@ describe Mongoid::Fields::ForeignKey do
445
445
  end
446
446
  end
447
447
 
448
- context "when the metadata is polymoprhic" do
448
+ context "when the association is polymoprhic" do
449
449
 
450
- let(:metadata) do
450
+ let(:association) do
451
451
  Agent.reflect_on_association(:names)
452
452
  end
453
453
 
454
454
  let(:field) do
455
- described_class.new(:nameable_id, type: Object, metadata: metadata)
455
+ described_class.new(:nameable_id, type: Object, association: association)
456
456
  end
457
457
 
458
458
  let(:value) do
@@ -464,7 +464,7 @@ describe Mongoid::Fields::ForeignKey do
464
464
  end
465
465
 
466
466
  it "does not change the foreign key" do
467
- expect(evolved).to be(value)
467
+ expect(evolved).to eq(BSON::ObjectId.from_string(value))
468
468
  end
469
469
  end
470
470
  end
@@ -500,12 +500,8 @@ describe Mongoid::Fields::ForeignKey do
500
500
 
501
501
  context "when the array is object ids" do
502
502
 
503
- let(:metadata) do
504
- Mongoid::Relations::Metadata.new(
505
- inverse_class_name: "Game",
506
- name: :person,
507
- relation: Mongoid::Relations::Referenced::In
508
- )
503
+ let(:association) do
504
+ Game.relations["person"]
509
505
  end
510
506
 
511
507
  let(:field) do
@@ -514,7 +510,7 @@ describe Mongoid::Fields::ForeignKey do
514
510
  type: Array,
515
511
  default: [],
516
512
  identity: true,
517
- metadata: metadata,
513
+ association: association,
518
514
  overwrite: true
519
515
  )
520
516
  end
@@ -589,12 +585,8 @@ describe Mongoid::Fields::ForeignKey do
589
585
 
590
586
  context "when the array is object ids" do
591
587
 
592
- let(:metadata) do
593
- Mongoid::Relations::Metadata.new(
594
- inverse_class_name: "Game",
595
- name: :person,
596
- relation: Mongoid::Relations::Referenced::In
597
- )
588
+ let(:association) do
589
+ Game.relations['person']
598
590
  end
599
591
 
600
592
  let(:field) do
@@ -603,7 +595,7 @@ describe Mongoid::Fields::ForeignKey do
603
595
  type: Object,
604
596
  default: nil,
605
597
  identity: true,
606
- metadata: metadata,
598
+ association: association,
607
599
  overwrite: true
608
600
  )
609
601
  end
@@ -816,7 +816,7 @@ describe Mongoid::Fields do
816
816
 
817
817
  context "when the field name conflicts with mongoid's internals" do
818
818
 
819
- [:__metadata, :invalid].each do |meth|
819
+ [:_association, :invalid].each do |meth|
820
820
  context "when the field is named #{meth}" do
821
821
 
822
822
  it "raises an error" do
@@ -1171,7 +1171,7 @@ describe Mongoid::Fields do
1171
1171
  end
1172
1172
 
1173
1173
  let(:decimal) do
1174
- BigDecimal("1000000.00")
1174
+ BigDecimal.new("1000000.00")
1175
1175
  end
1176
1176
 
1177
1177
  context "when setting to a big decimal" do
@@ -10,7 +10,7 @@ describe Mongoid::Findable do
10
10
  end
11
11
 
12
12
  it "returns the distinct values for the field" do
13
- expect(Band.distinct(:name).sort).to eq([ "Photek", "Tool" ])
13
+ expect(Band.distinct(:name)).to eq([ "Tool", "Photek" ])
14
14
  end
15
15
  end
16
16
 
@@ -89,8 +89,9 @@ describe Mongoid::Indexable do
89
89
  klass.create_indexes
90
90
  end
91
91
 
92
- it "creates the indexes" do
93
- expect(klass.collection.indexes.get(_type: 1)).to_not be_nil
92
+ it "creates the indexes by using specified background option" do
93
+ index = klass.collection.indexes.get(_type: 1)
94
+ expect(index[:background]).to eq(true)
94
95
  end
95
96
  end
96
97
 
@@ -104,12 +105,9 @@ describe Mongoid::Indexable do
104
105
  end
105
106
  end
106
107
 
107
- before do
108
- klass.create_indexes
109
- end
110
-
111
108
  after do
112
109
  klass.remove_indexes
110
+ Mongoid::Config.background_indexing = false
113
111
  end
114
112
 
115
113
  let(:indexes) do
@@ -118,8 +116,20 @@ describe Mongoid::Indexable do
118
116
  end
119
117
  end
120
118
 
121
- it "creates the indexes" do
122
- expect(indexes.get(_type: 1)).to_not be_nil
119
+ it "creates the indexes by using default background_indexing option" do
120
+ klass.create_indexes
121
+
122
+ index = indexes.get(_type: 1)
123
+ expect(index[:background]).to eq(Mongoid::Config.background_indexing)
124
+ end
125
+
126
+ it "creates the indexes by using specified background_indexing option" do
127
+ Mongoid::Config.background_indexing = true
128
+
129
+ klass.create_indexes
130
+
131
+ index = indexes.get(_type: 1)
132
+ expect(index[:background]).to eq(true)
123
133
  end
124
134
  end
125
135
 
@@ -526,6 +526,8 @@ describe Mongoid::Interceptable do
526
526
  end
527
527
 
528
528
  after(:all) do
529
+ # ActiveSupport may raise an error when trying to reset callbacks on all of Band's
530
+ # descendants, regardless of whether they have a particular callback defined.
529
531
  begin; Band.reset_callbacks(:rearrange); rescue; end
530
532
  end
531
533
 
@@ -597,7 +599,7 @@ describe Mongoid::Interceptable do
597
599
  it "raises an error" do
598
600
  expect {
599
601
  Band.has_and_belongs_to_many :tags, cascade_callbacks: true
600
- }.to raise_error(Mongoid::Errors::InvalidOptions)
602
+ }.to raise_error(Mongoid::Errors::InvalidRelationOption)
601
603
  end
602
604
  end
603
605
 
@@ -1181,6 +1183,25 @@ describe Mongoid::Interceptable do
1181
1183
  end
1182
1184
  end
1183
1185
 
1186
+ context 'when the parent is updated' do
1187
+
1188
+ let(:band) do
1189
+ Band.create(name: "Moderat")
1190
+ end
1191
+
1192
+ before do
1193
+ band.update(records: [ { name: 'Black on Both Sides' }])
1194
+ end
1195
+
1196
+ it 'executes the callback' do
1197
+ expect(band.records.first.before_validation_called).to be true
1198
+ end
1199
+
1200
+ it 'persists the change' do
1201
+ expect(band.reload.records.first.before_validation_called).to be true
1202
+ end
1203
+ end
1204
+
1184
1205
  context "when the child is persisted" do
1185
1206
 
1186
1207
  let(:band) do
@@ -53,6 +53,19 @@ describe Mongoid::Matchable::ElemMatch do
53
53
  expect(matcher._matches?("$elemMatch" => {"a" => {"$in" => [1]}, "b" => {"$gt" => 1}})).to be true
54
54
  end
55
55
  end
56
+
57
+ context "when using a $not operator that matches" do
58
+
59
+ it "returns true" do
60
+ expect(matcher._matches?("$elemMatch" => {"a" => {"$not" => 4}})).to be true
61
+ end
62
+ end
63
+ end
64
+
65
+ context "when using symbols and a :$not operator that matches" do
66
+ it "returns true" do
67
+ expect(matcher._matches?(:$elemMatch => {"a" => {:$not => 4}})).to be true
68
+ end
56
69
  end
57
70
 
58
71
  context "when there is not a sub document that matches the criteria" do
@@ -74,6 +87,13 @@ describe Mongoid::Matchable::ElemMatch do
74
87
  expect(matcher._matches?("$elemMatch" => {"a" => {"$in" => [1]}, "b" => {"$gt" => 10}})).to be false
75
88
  end
76
89
  end
90
+
91
+ context "when using a $not operator that does not match" do
92
+
93
+ it "returns true" do
94
+ expect(matcher._matches?("$elemMatch" => {"a" => {"$not" => 1}})).to be true
95
+ end
96
+ end
77
97
  end
78
98
 
79
99
  context "when using a criteria that matches partially but not a single sub document" do
@@ -86,7 +86,7 @@ describe Mongoid::Matchable do
86
86
  let(:selector) do
87
87
  { "occupants.0" => "Tim" }
88
88
  end
89
-
89
+
90
90
  it "returns true" do
91
91
  expect(document.locations.first._matches?(selector)).to be true
92
92
  end
@@ -774,31 +774,6 @@ describe Mongoid::Matchable do
774
774
  end
775
775
  end
776
776
 
777
- context "with an $nor selector" do
778
-
779
- context "when the attributes match" do
780
-
781
- let(:selector) do
782
- { "$nor" => [ { number: 10 }, { number: { "$gt" => 199 } } ] }
783
- end
784
-
785
- it "returns true" do
786
- expect(document._matches?(selector)).to be true
787
- end
788
- end
789
-
790
- context "when the attributes do not match" do
791
-
792
- let(:selector) do
793
- { "$nor" => [ { number: 10 }, { number: { "$gt" => 99 } } ] }
794
- end
795
-
796
- it "returns false" do
797
- expect(document._matches?(selector)).to be false
798
- end
799
- end
800
- end
801
-
802
777
  context "with a $size selector" do
803
778
 
804
779
  context "when the attributes match" do
@@ -66,15 +66,15 @@ describe Mongoid::Persistable::Incrementable do
66
66
  context "when providing big decimal values" do
67
67
 
68
68
  let(:five) do
69
- BigDecimal("5.0")
69
+ BigDecimal.new("5.0")
70
70
  end
71
71
 
72
72
  let(:neg_ten) do
73
- BigDecimal("-10.0")
73
+ BigDecimal.new("-10.0")
74
74
  end
75
75
 
76
76
  let(:thirty) do
77
- BigDecimal("30.0")
77
+ BigDecimal.new("30.0")
78
78
  end
79
79
 
80
80
  let!(:inc) do
@@ -151,15 +151,15 @@ describe Mongoid::Persistable::Incrementable do
151
151
  context "when providing big decimal values" do
152
152
 
153
153
  let(:five) do
154
- BigDecimal("5.0")
154
+ BigDecimal.new("5.0")
155
155
  end
156
156
 
157
157
  let(:neg_ten) do
158
- BigDecimal("-10.0")
158
+ BigDecimal.new("-10.0")
159
159
  end
160
160
 
161
161
  let(:thirty) do
162
- BigDecimal("30.0")
162
+ BigDecimal.new("30.0")
163
163
  end
164
164
 
165
165
  let!(:inc) do
@@ -190,7 +190,7 @@ describe Mongoid::Persistable::Savable do
190
190
  "name.first_name" => "Ryan"
191
191
  },
192
192
  "$push"=> {
193
- "addresses" => { '$each' => [ { "_id" => address.id, "street" => "Bond St" } ] }
193
+ "addresses" => { '$each' => [ { "_id" => address.id, "street" => "Bond St" } ] }
194
194
  }
195
195
  })
196
196
  end
@@ -309,7 +309,7 @@ describe Mongoid::Persistable::Savable do
309
309
  expect {
310
310
  person.username = 'unloaded-attribute'
311
311
  person.save
312
- }.to raise_error(Mongoid::Errors::ReadonlyAttribute)
312
+ }.to raise_error(ActiveModel::MissingAttributeError)
313
313
  end
314
314
 
315
315
  context 'when the changed attribute is aliased' do
@@ -278,22 +278,7 @@ describe Mongoid::Persistable::Settable do
278
278
  end
279
279
  end
280
280
 
281
- context 'when the field is a nested hash' do
282
-
283
- context 'when the field is reset to an empty hash' do
284
-
285
- before do
286
- church.set('location' => {})
287
- end
288
-
289
- it 'updates the field locally' do
290
- expect(church.location).to eq({})
291
- end
292
-
293
- it 'updates the field in the database' do
294
- expect(church.reload.location).to eq({})
295
- end
296
- end
281
+ context 'when the field is a bested hash' do
297
282
 
298
283
  context 'when a leaf value in the nested hash is updated' do
299
284
 
@@ -315,25 +300,6 @@ describe Mongoid::Persistable::Settable do
315
300
  end
316
301
  end
317
302
 
318
- context 'when a leaf value in the nested hash is updated to a number' do
319
-
320
- let(:church) do
321
- Church.new.tap do |a|
322
- a.location = {'address' => {'city' => 'Berlin', 'street' => 'Yorckstr'}}
323
- a.name = 'Church1'
324
- a.save
325
- end
326
- end
327
-
328
- before do
329
- church.set('location.address.city' => 12345)
330
- end
331
-
332
- it 'updates the nested value to the correct value' do
333
- expect(church.name).to eq('Church1')
334
- expect(church.location).to eql({'address' => {'city' => 12345, 'street' => 'Yorckstr'}})
335
- end
336
- end
337
303
 
338
304
  context 'when the nested hash is many levels deep' do
339
305
 
@@ -57,7 +57,7 @@ describe Mongoid::Persistable do
57
57
  "$bit" => { "likes" => { :and => 13 }},
58
58
  "$set" => { "name" => "Placebo" },
59
59
  "$unset" => { "origin" => true }},
60
- { session: nil }]
60
+ { :session => nil } ]
61
61
  end
62
62
 
63
63
  before do
@@ -83,8 +83,8 @@ describe Mongoid::Persistable do
83
83
  "$inc" => { "member_count" => 10 },
84
84
  "$bit" => { "likes" => { :and => 13 }},
85
85
  "$set" => { "name" => "Placebo" },
86
- "$unset" => { "origin" => true }},
87
- { :session => nil } ]
86
+ "$unset" => { "origin" => true } },
87
+ { :session => nil } ]
88
88
  end
89
89
 
90
90
  before do
@@ -107,12 +107,12 @@ describe Mongoid::Persistable do
107
107
  context "when given multiple operations of the same type" do
108
108
 
109
109
  let(:operations) do
110
- [{
110
+ [{
111
111
  "$inc" => { "member_count" => 10, "other_count" => 10 },
112
112
  "$bit" => { "likes" => { :and => 13 }},
113
113
  "$set" => { "name" => "Placebo" },
114
114
  "$unset" => { "origin" => true }},
115
- { session: nil }]
115
+ { :session => nil } ]
116
116
  end
117
117
 
118
118
  before do
@@ -149,7 +149,7 @@ describe Mongoid::Persistable do
149
149
  "$bit" => { "likes" => { :and => 13 }},
150
150
  "$set" => { "name" => "Placebo" },
151
151
  "$unset" => { "origin" => true }},
152
- { session: nil }]
152
+ { :session => nil } ]
153
153
  end
154
154
 
155
155
  before do
@@ -200,6 +200,21 @@ describe Mongoid::Persistable do
200
200
  expect(document.atomically).to be true
201
201
  end
202
202
  end
203
+
204
+ context "when the block has no operations" do
205
+ before do
206
+ expect_any_instance_of(Mongo::Collection::View).to_not receive(:update_one)
207
+ end
208
+
209
+ let!(:update) do
210
+ document.atomically do
211
+ end
212
+ end
213
+
214
+ it "doesn't update the document" do
215
+ expect(document.reload.origin).to eq("London")
216
+ end
217
+ end
203
218
  end
204
219
 
205
220
  describe "#fail_due_to_valiation!" do